import org.splat.dal.bo.som.ProgressState;
import org.splat.dal.bo.som.ProjectElement;
import org.splat.dal.bo.som.Publication;
+import org.splat.dal.bo.som.ReaderRelation;
import org.splat.dal.bo.som.Scenario;
import org.splat.dal.bo.som.SimulationContext;
import org.splat.dal.bo.som.Study;
import org.splat.service.dto.DocToCompareDTO;
import org.splat.service.dto.DocumentDTO;
import org.splat.service.dto.StudyFacadeDTO;
+import org.splat.service.dto.UserDTO;
import org.splat.service.technical.IndexService;
import org.splat.service.technical.ProjectSettingsService;
import org.splat.service.technical.ProjectSettingsServiceImpl;
import org.splat.service.technical.RepositoryService;
import org.splat.service.technical.ProjectSettingsService.Step;
import org.splat.som.Revision;
+import org.splat.util.BeanHelper;
import org.springframework.transaction.annotation.Transactional;
import com.lowagie.text.Document;
@Transactional
public Study selectStudy(final long index) {
Study result = getStudyDAO().get(index);
- loadWorkflow(result);
+ if (result != null) {
+ loadWorkflow(result);
+ }
return result;
}
// Remove all relations of study documents
for (org.splat.dal.bo.som.Document doc : docums) {
- LOG.debug("Found doc: " + doc.getTitle() + " [" + doc.getReference() + "]" + " [" + doc.getRid() + "]");
+ LOG.debug("Found doc: " + doc.getTitle() + " ["
+ + doc.getReference() + "]" + " [" + doc.getRid() + "]");
doc.getAllRelations().clear();
}
getDocumentDAO().flush();
// Remove all documents of the study
for (org.splat.dal.bo.som.Document doc : docums) {
- LOG.debug("Remove doc: " + doc.getTitle() + " [" + doc.getReference() + "]" + " [" + doc.getRid() + "]");
+ LOG.debug("Remove doc: " + doc.getTitle() + " ["
+ + doc.getReference() + "]" + " [" + doc.getRid() + "]");
getDocumentDAO().delete(doc);
}
}
*/
@Transactional
public boolean addContributor(final Study aStudy, final User user) {
- List<User> contributor = getModifiableContributors(aStudy); // Initializes contributor
- for (Iterator<User> i = contributor.iterator(); i.hasNext();) {
- User present = i.next();
- if (present.equals(user)) {
- return false;
+ List<User> contributors = getModifiableContributors(aStudy); // Initializes contributor
+
+ if(contributors.contains(user)) {
+ return false;
+ }
+
+ //Remove user from readers
+ try {
+ List<UserDTO> readers = getReaders(aStudy.getIndex());
+ for(UserDTO reader : readers) {
+ if(reader.getIndex() == user.getIndex()) {
+ //user must be the actual user in the relationship object in the aStudy object for this to work
+ aStudy.removeRelation(ReaderRelation.class, user);
+ }
}
+ } catch(InvalidParameterException e) {
+ LOG.error(e.getMessage(), e);
}
+
boolean absent = getModifiableActors(aStudy).add(user); // User may already be a reviewer or an approver
aStudy.addRelation(new ContributorRelation(aStudy, user));
* @see #isPublic()
* @see Publication#approve(Date)
*/
+ @Transactional
public boolean moveToReference(final Study aStudy) {
if (aStudy.getProgressState() != ProgressState.APPROVED) {
return false;
*
* @see org.splat.service.StudyService#update(org.splat.dal.bo.som.Study, org.splat.dal.bo.som.Study.Properties)
*/
+ @Transactional
public boolean update(final Study aStudy, final Properties sprop)
throws InvalidPropertyException {
if (sprop.getTitle() != null) {
* the document
* @return true if the document is published in the study
*/
-/* private boolean publishes(final Study aStudy, final Document doc) {
- if (!aStudy.publishes(doc)) {
- Scenario[] scene = aStudy.getScenarii();
- for (int i = 0; i < scene.length; i++) {
- if (scene[i].publishes(doc)) {
- return true;
- }
- }
- }
- return false;
- }
+ /*
+ * private boolean publishes(final Study aStudy, final Document doc) { if (!aStudy.publishes(doc)) { Scenario[] scene =
+ * aStudy.getScenarii(); for (int i = 0; i < scene.length; i++) { if (scene[i].publishes(doc)) { return true; } } } return false; }
*/
/**
* {@inheritDoc}
*/
@Transactional
public boolean removeContributor(final Study aStudy, final User... users) {
- List<User> contributor = getModifiableContributors(aStudy); // Initializes contributor
+ List<User> contributors = getModifiableContributors(aStudy); // Initializes contributor
Boolean done = false;
- for (int i = 0; i < users.length; i++) {
- User user = users[i];
- for (Iterator<User> j = contributor.iterator(); j.hasNext();) {
- User present = j.next();
- if (!present.equals(user)) {
- continue;
- }
-
+ for(User user : users) {
+ if(contributors.contains(user)) {
aStudy.removeRelation(ContributorRelation.class, user);
- j.remove(); // Updates the contributor shortcut
+ contributors.remove(user);
done = true;
- break;
}
}
if (done) {
*
* @see org.splat.service.StudyService#removeProjectContext(org.splat.dal.bo.som.Study, org.splat.dal.bo.som.SimulationContext)
*/
+ @Transactional
public boolean removeProjectContext(final Study aStudy,
final SimulationContext context) {
boolean done = getStepService().removeSimulationContext(
ValidationCycleRelation link = cycle.getContext();
aStudy.addRelation(link);
+ getValidationCycleDAO().flush();
aStudyDTO.getAllRelations().add(link); // RKV
validactor.put(cname, link.getTo()); // Replaces the cycle if exists as default,
} catch (BusinessException error) {
- LOG.error("Unable to create validation cycle, reason:",
- error);
+ LOG.error("Unable to create validation cycle, reason:", error);
return;
}
}
* a study to demote
* @return true if the demotion succeeded.
*/
+ @Transactional
public boolean demote(final Study aStudy) {
if (aStudy.getProgressState() == ProgressState.inCHECK) {
aStudy.setProgressState(ProgressState.inDRAFT);
* the study to update
* @return true if the study is updated successfully
*/
- @Transactional
private boolean update(final Study aStudy) {
boolean isOk = false;
try {
getStudyDAO().merge(aStudy); // Update of relational base
setShortCuts(aStudy); // RKV: initialize transient actors set
- // RKV: getIndex().update(aStudy); // Update of Lucene index
+ //RKV: getIndex().update(aStudy); // Update of Lucene index
isOk = true;
} catch (Exception e) {
LOG.error("STD-000001", e, aStudy.getIndex(), e.getMessage());
* @return true if reindexing succeeded
*/
private boolean updateKnowledgeElementsIndex(final Study aStudy) {
- // boolean isOk = false;
- // try {
- // IndexService lucin = getIndex();
- //
- // for (Iterator<Scenario> i = aStudy.getScenariiList().iterator(); i
- // .hasNext();) {
- // Scenario scene = i.next();
- // for (Iterator<KnowledgeElement> j = scene
- // .getAllKnowledgeElements().iterator(); j.hasNext();) {
- // KnowledgeElement kelm = j.next();
- // lucin.update(kelm);
- // }
- // }
- // isOk = true;
- // } catch (Exception error) {
- // LOG.error("Unable to re-index Knowledge Elements, reason:",
- // error);
- // }
- // return isOk;
+// boolean isOk = false;
+// try {
+// IndexService lucin = getIndex();
+// for(Scenario scenario : aStudy.getScenariiList()) {
+// for (KnowledgeElement element : scenario.getAllKnowledgeElements()) {
+// lucin.update(element);
+// }
+// }
+// isOk = true;
+// } catch (Exception error) {
+// LOG.error("Unable to re-index Knowledge Elements, reason:",
+// error);
+// }
+// return isOk;
return true;
}
*
* @see org.splat.service.StudyService#markStudyAsReference(org.splat.dal.bo.som.Study)
*/
- @Override
@Transactional
public void markStudyAsReference(final Study aStudy) {
*
* @see org.splat.service.StudyService#removeStudyAsReference(org.splat.dal.bo.som.Study)
*/
- @Override
@Transactional
public void removeStudyAsReference(final Study aStudy) {
}
Study study = _studyDAO.get(studyId);
if (study == null) {
- throw new InvalidParameterException(PARAM_STUDY_ID, studyId.toString());
+ throw new InvalidParameterException(PARAM_STUDY_ID, studyId
+ .toString());
}
return study.getDescription();
}
*
* @see org.splat.service.StudyService#setDescription(java.lang.Long, java.lang.String)
*/
- @Override
@Transactional
public void setDescription(final Long studyId, final String descriptionText)
throws InvalidParameterException {
}
Study study = _studyDAO.get(studyId);
if (study == null) {
- throw new InvalidParameterException(PARAM_STUDY_ID, studyId.toString());
+ throw new InvalidParameterException(PARAM_STUDY_ID, studyId
+ .toString());
}
study.setAttribute(new DescriptionAttribute(study, descriptionText));
}
*
* @see org.splat.service.StudyService#removeStudyDescription(java.lang.Long)
*/
- @Override
@Transactional
public boolean removeDescription(final Long studyId)
throws InvalidParameterException {
+ "downloads" + File.separator + userName + File.separator
+ "ComparisonResult.pdf";
- XYSeries series = new XYSeries("Study: " + docDTO.getStudyTitle() + " Scenario: " + docDTO.getScenarioTitle() + " Document: " + docDTO.getDocumentTitle());
+ XYSeries series = new XYSeries("Study: " + docDTO.getStudyTitle()
+ + " Scenario: " + docDTO.getScenarioTitle() + " Document: "
+ + docDTO.getDocumentTitle());
// read the file and get points information.
try {
Scanner input = new Scanner(compDocFile);
- //get the title of the chart.
+ // get the title of the chart.
if (input.hasNext()) {
chartTitle = input.nextLine();
}
-
+
// get the name of the axis.
if (input.hasNext()) {
String[] tokens = input.nextLine().split(",");
}
} // for
- JFreeChart chart = ChartFactory.createXYLineChart(
- chartTitle, // Title
+ JFreeChart chart = ChartFactory.createXYLineChart(chartTitle, // Title
axis1Name, // x-axis Label
axis2Name, // y-axis Label
dataset, // Dataset
} catch (DocumentException e) {
LOG.error("Sorry, the DocumentException is thrown.", e);
}
-
+
return resultPath;
}
+
+ /**
+ * {@inheritDoc}
+ * @see org.splat.service.StudyService#getReaders(long)
+ */
+ @Transactional(readOnly = true)
+ public List<UserDTO> getReaders(final long studyId) throws InvalidParameterException {
+ Study aStudy = selectStudy(studyId);
+ if(aStudy == null){
+ throw new InvalidParameterException(PARAM_STUDY_ID, String.valueOf(studyId));
+ }
+ List<Relation> relations = aStudy.getRelations(ReaderRelation.class);
+ List<UserDTO> result = new ArrayList<UserDTO>();
+ for(Relation relation : relations){
+ result.add(BeanHelper.copyBean(relation.getTo(), UserDTO.class));
+ }
+ return Collections.unmodifiableList(result);
+ }
+
+ /**
+ * {@inheritDoc}
+ * @see org.splat.service.StudyService#addReader(long, long)
+ */
+ @Transactional
+ public boolean addReader(final long studyId, final long userId) throws InvalidParameterException {
+ Study aStudy = selectStudy(studyId);
+ if(aStudy == null){
+ throw new InvalidParameterException(PARAM_STUDY_ID, String.valueOf(studyId));
+ }
+ User user = _userService.selectUser(userId);
+ if(user == null){
+ throw new InvalidParameterException("userId", String.valueOf(userId));
+ }
+
+ for(Relation relation : aStudy.getRelations(ReaderRelation.class)) {
+ if(user.equals(relation.getTo())) {
+ return false;
+ }
+ }
+ aStudy.addRelation(new ReaderRelation(aStudy, user));
+ update(aStudy);
+ return true;
+ }
+
+ /**
+ * {@inheritDoc}
+ * @see org.splat.service.StudyService#removeReader(long, long)
+ */
+ @Transactional
+ public boolean removeReader(final long studyId, final long userId) throws InvalidParameterException {
+ Study aStudy = selectStudy(studyId);
+ if(aStudy == null){
+ throw new InvalidParameterException(PARAM_STUDY_ID, String.valueOf(studyId));
+ }
+ User user = _userService.selectUser(userId);
+ if(user == null){
+ throw new InvalidParameterException("userId", String.valueOf(userId));
+ }
+ Relation relation = aStudy.removeRelation(ReaderRelation.class, user);
+ update(aStudy);
+ return relation != null;
+ }
+
/**
* Get project settings.
*
* @see org.splat.service.StudyService#getComparableStudies()
*/
@Transactional(readOnly = true)
- public List<StudyFacadeDTO> getComparableStudies(final long userId) throws MismatchException {
- //retrieve the number of the "Analyze the results" step
+ public List<StudyFacadeDTO> getComparableStudies(final long userId)
+ throws MismatchException {
+ // retrieve the number of the "Analyze the results" step
List<Step> allSteps = _projectSettings.getAllSteps();
Step theAnalyzeStep = null;
- for(Step step : allSteps) {
- if(step.getKey().equals("postprocessing")) {
+ for (Step step : allSteps) {
+ if (step.getKey().equals("postprocessing")) {
theAnalyzeStep = step;
}
}
- if(theAnalyzeStep == null) { //TODO: throw some other exception
- throw new MismatchException("no step with key 'postprocessing' found." +
- "Probably, customization settings have been changed.");
+ if (theAnalyzeStep == null) { // TODO: throw some other exception
+ throw new MismatchException(
+ "no step with key 'postprocessing' found."
+ + "Probably, customization settings have been changed.");
}
- List<Publication> publications = _publicationDAO.getFilteredList("mydoc",
- Restrictions.eq("step", Integer.valueOf(theAnalyzeStep.getNumber())));
+ List<Publication> publications = _publicationDAO.getFilteredList(
+ "mydoc", Restrictions.eq("step", Integer.valueOf(theAnalyzeStep
+ .getNumber())));
- //split retrieved publications into groups by studies and scenarios
+ // split retrieved publications into groups by studies and scenarios
Map<Study, List<ProjectElement>> studyMap = new HashMap<Study, List<ProjectElement>>();
- Map<ProjectElement, List<Publication>> scenarioMap =
- new HashMap<ProjectElement, List<Publication>>();
-
- for(Publication publication : publications) {
- //filter out publications corresponding to a document of given step which is not a _result_ document
- if(!publication.value().getType().isResultOf(theAnalyzeStep)
+ Map<ProjectElement, List<Publication>> scenarioMap = new HashMap<ProjectElement, List<Publication>>();
+
+ for (Publication publication : publications) {
+ // filter out publications corresponding to a document of given step which is not a _result_ document
+ if (!publication.value().getType().isResultOf(theAnalyzeStep)
|| !"srd".equals(publication.getSourceFile().getFormat())) {
continue;
}
-
- //check the study visibility to the user
- if(!isStaffedBy(publication.getOwnerStudy(), _userService.selectUser(userId))
- && Visibility.PUBLIC.equals(publication.getOwnerStudy().getVisibility())) {
+
+ // check the study visibility to the user
+ if (!isStaffedBy(publication.getOwnerStudy(), _userService
+ .selectUser(userId))
+ && Visibility.PUBLIC.equals(publication.getOwnerStudy()
+ .getVisibility())) {
continue;
}
-
+
Study study = publication.getOwnerStudy();
ProjectElement scenario = publication.getOwner();
-
+
Hibernate.initialize(scenario);
- if (scenario instanceof HibernateProxy) {
- scenario = (ProjectElement) ((HibernateProxy) scenario).getHibernateLazyInitializer()
- .getImplementation();
- }
-
- if(!(scenario instanceof Scenario)) {
+ if (scenario instanceof HibernateProxy) {
+ scenario = (ProjectElement) ((HibernateProxy) scenario)
+ .getHibernateLazyInitializer().getImplementation();
+ }
+
+ if (!(scenario instanceof Scenario)) {
throw new MismatchException(
"publications from postprocessing step are supposed to have owner scenario");
}
- if(!studyMap.containsKey(study)) {
+ if (!studyMap.containsKey(study)) {
studyMap.put(study, new ArrayList<ProjectElement>());
}
-
- if(!studyMap.get(study).contains(scenario)) {
+
+ if (!studyMap.get(study).contains(scenario)) {
studyMap.get(study).add(scenario);
}
- if(!scenarioMap.containsKey(scenario)) {
+ if (!scenarioMap.containsKey(scenario)) {
scenarioMap.put(scenario, new ArrayList<Publication>());
}
scenarioMap.get(scenario).add(publication);
}
-
- //Create the result DTOs
+
+ // Create the result DTOs
List<StudyFacadeDTO> result = new ArrayList<StudyFacadeDTO>();
- for(Study study : studyMap.keySet()) {
-
+ for (Study study : studyMap.keySet()) {
+
StudyFacadeDTO studyDTO = new StudyFacadeDTO();
studyDTO.setName(study.getTitle());
studyDTO.setScenarios(new ArrayList<StudyFacadeDTO.ScenarioDTO>());
result.add(studyDTO);
-
- for(ProjectElement scenario : studyMap.get(study)) {
-
+
+ for (ProjectElement scenario : studyMap.get(study)) {
+
StudyFacadeDTO.ScenarioDTO scenarioDTO = new StudyFacadeDTO.ScenarioDTO();
scenarioDTO.setName(scenario.getTitle());
scenarioDTO.setDocs(new ArrayList<DocumentDTO>());
studyDTO.getScenarios().add(scenarioDTO);
- for(Publication publication : scenarioMap.get(scenario)) {
+ for (Publication publication : scenarioMap.get(scenario)) {
DocumentDTO documentDTO = new DocumentDTO();
documentDTO.setId(publication.getIndex());
documentDTO.setTitle(publication.value().getTitle());
-
+
scenarioDTO.getDocs().add(documentDTO);
}
}
- }
+ }
return result;
}
-
+
/**
* Get the publicationDAO.
*