/** * {@inheritDoc} */ public List<Experiment> getRecursiveMutualExclusions(Experiment experiment) { List<Experiment> visitedExperiments = new ArrayList<>(); Set<Experiment> unvisitedExperiments = new HashSet<>(); unvisitedExperiments.add(experiment); do { Set<Experiment> newUnvisitedExperiments = new HashSet<>(); for (Experiment tempExperiment : unvisitedExperiments) { visitedExperiments.add(tempExperiment); newUnvisitedExperiments.addAll( this.getExclusions(tempExperiment.getID()) .getExperiments() // Hack: We need to make experiments compatible, converting CassandraExperiments .parallelStream() .map(ce -> Experiment.from(ce).build()) .collect(Collectors.toList()) ); } unvisitedExperiments.addAll(newUnvisitedExperiments); unvisitedExperiments.removeAll(visitedExperiments); } while (!unvisitedExperiments.isEmpty()); return visitedExperiments; } }
Experiment updatedExperiment = from(experiment).withState(DELETED).build();
/** * Gets the experiment for a given ID and checks if the user has permission. * If the user has READ permissions, the experiment is returned. Otherwise the authorization throws an exception. * <p> * Throws an exception if the experiment is not found. * * @param experimentID the experiment ID * @param username the username * @return the experiment */ /*test*/ Experiment getAuthorizedExperimentOrThrow(Experiment.ID experimentID, Username username) { Experiment experiment; if ((experiment = experiments.getExperiment(experimentID)) == null) { throw new ExperimentNotFoundException(experimentID); } authorization.checkUserPermissions(username, experiment.getApplicationName(), READ); // Hack: We need to make experiments compatible, converting CassandraExperiment experiment = Experiment.from(experiment).build(); return experiment; }
/** * {@inheritDoc} */ @Override public Experiment updateExperimentState(Experiment experiment, State state) { LOGGER.debug("Updating experiment {} state {} ", new Object[]{experiment, state}); validator.validateExperiment(experiment); try { // Note that this timestamp gets serialized as mulliseconds from // the epoch, so timezone is irrelevant final Date NOW = new Date(); experimentAccessor.updateExperiment(state.name(), NOW, experiment.getID().getRawID()); experiment = Experiment.from(experiment).withState(state).build(); // Point the experiment index to this experiment updateExperimentLabelIndex(experiment.getID(), experiment.getApplicationName(), experiment.getLabel(), experiment.getStartTime(), experiment.getEndTime(), experiment.getState()); updateStateIndex(experiment); } catch (Exception e) { LOGGER.error("Error while updating experiment {} state {} ", new Object[]{experiment, state}, e); throw new RepositoryException("Could not update experiment with ID \"" + experiment.getID() + "\"" + " to state " + state.toString(), e); } return experiment; }