Salome HOME
Processing instruction is defined now in getScenarioInfo using document types mappings.
[tools/siman.git] / Workspace / Siman-Common / src / org / splat / service / ScenarioServiceImpl.java
index d8f560d433c7bca31f9f52045831755ba66e5fb9..705b534d17d9ec978a689894cac6c004bbd9137a 100644 (file)
@@ -37,6 +37,7 @@ import org.splat.kernel.MultiplyDefinedException;
 import org.splat.service.dto.DocumentDTO;
 import org.splat.service.dto.StepDTO;
 import org.splat.service.technical.IndexService;
+import org.splat.service.technical.ProjectSettingsService;
 import org.splat.som.Step;
 import org.splat.util.BeanHelper;
 import org.springframework.transaction.annotation.Transactional;
@@ -113,6 +114,11 @@ public class ScenarioServiceImpl implements ScenarioService {
         */
        private SimulationContextService _simulationContextService;
 
+       /**
+        * Injected project service.
+        */
+       private ProjectSettingsService _projectSettings;
+
        /**
         * Get the projectElementService.
         * 
@@ -148,7 +154,8 @@ public class ScenarioServiceImpl implements ScenarioService {
         * @param publicationService
         *            the publicationService to set
         */
-       public void setPublicationService(final PublicationService publicationService) {
+       public void setPublicationService(
+                       final PublicationService publicationService) {
                _publicationService = publicationService;
        }
 
@@ -171,33 +178,74 @@ public class ScenarioServiceImpl implements ScenarioService {
                _stepService = stepService;
        }
 
-       /** 
+       /**
         * {@inheritDoc}
+        * 
         * @see org.splat.service.ScenarioService#getScenarioInfo(long)
         */
        @Transactional
        public List<StepDTO> getScenarioInfo(final long scenarioId) {
                List<StepDTO> res = new ArrayList<StepDTO>();
+               // Get the scenario from the database by id
                Scenario scen = getScenarioDAO().get(scenarioId);
+               if (LOG.isDebugEnabled()) {
+                       LOG.debug("Scenario[" + scenarioId + "]: Number of publications: "
+                                       + scen.getDocums().size());
+               }
+               // Get activities of the scenario
                Step[] steps = getProjectElementService().getSteps(scen);
                StepDTO stepDTO;
                DocumentDTO docDTO;
-               for (Step step: steps) {
+               String docType, fileFormat;
+               String processing;
+               boolean doImport;
+               // For each activity create a step DTO and add it to the result list
+               for (Step step : steps) {
                        stepDTO = BeanHelper.copyBean(step.getStep(), StepDTO.class);
                        res.add(stepDTO);
-                       for (Publication tag: step.getDocuments()) {
-                               docDTO = stepDTO.addDoc(tag.value().getIndex(), tag.value().getTitle());
+                       if (LOG.isDebugEnabled()) {
+                               LOG.debug("Step[" + stepDTO.getNumber()
+                                               + "]: Number of documents: "
+                                               + step.getDocuments().size());
+                       }
+                       // For each publication of the activity create a document DTO.
+                       // Each file is considered as a source file.
+                       for (Publication tag : step.getDocuments()) {
+                               docDTO = stepDTO.addDoc(tag.value().getIndex(), tag.value()
+                                               .getTitle());
                                char aState = tag.getIsnew();
-                               docDTO.addFile(tag.value().getFile().getRelativePath(), aState);
-                               for(Relation rel: tag.value().getRelations(ConvertsRelation.class)) {
-                                       File aFile = ((ConvertsRelation)rel).getTo();
-                                       docDTO.addFile(aFile.getRelativePath(), aState);
+                               docType = tag.value().getType().getName();
+                               // For each file of the document create a file DTO
+                               // Process source file of the document
+                               fileFormat = tag.value().getFile().getFormat();
+                               doImport = getProjectSettings().doImport(docType, fileFormat);
+                               if (doImport && (!tag.isOutdated())) {
+                                       processing = "file-import";
+                               } else {
+                                       processing = "file-download";
+                               }
+                               docDTO.addFile(tag.value().getFile().getRelativePath(), aState,
+                                               processing, false);
+                               // Process all exported files
+                               for (Relation rel : tag.value().getRelations(
+                                               ConvertsRelation.class)) {
+                                       File aFile = ((ConvertsRelation) rel).getTo();
+                                       fileFormat = aFile.getFormat();
+                                       doImport = getProjectSettings().doImport(docType,
+                                                       fileFormat);
+                                       if (doImport && (!tag.isOutdated())) {
+                                               processing = "file-import";
+                                       } else {
+                                               processing = "file-download";
+                                       }
+                                       docDTO.addFile(aFile.getRelativePath(), aState, processing,
+                                                       false);
                                }
                        }
                }
                return res;
        }
-       
+
        /**
         * Create a new study with one scenario and "product" simulation context.
         * 
@@ -216,9 +264,11 @@ public class ScenarioServiceImpl implements ScenarioService {
         *             if some property occurs several times
         */
        @Transactional
-       public Study createStudy(final Study.Properties sprop, final Scenario.Properties oprop,
-                       final SimulationContext.Properties cprop) throws MissedPropertyException,
-                       InvalidPropertyException, MultiplyDefinedException {
+       public Study createStudy(final Study.Properties sprop,
+                       final Scenario.Properties oprop,
+                       final SimulationContext.Properties cprop)
+                       throws MissedPropertyException, InvalidPropertyException,
+                       MultiplyDefinedException {
                Study study = getStudyService().createStudy(sprop);
                addScenario(study, oprop);
                if (cprop.getIndex() == 0) { // Input of new project context
@@ -241,8 +291,9 @@ public class ScenarioServiceImpl implements ScenarioService {
         */
        @Transactional
        public KnowledgeElement addKnowledgeElement(final Scenario aScenarioDTO,
-                       final KnowledgeElement.Properties kprop) throws MissedPropertyException,
-                       InvalidPropertyException, MultiplyDefinedException {
+                       final KnowledgeElement.Properties kprop)
+                       throws MissedPropertyException, InvalidPropertyException,
+                       MultiplyDefinedException {
                KnowledgeElement kelm = null;
                try {
                        long aScenarioId = aScenarioDTO.getIndex();
@@ -266,11 +317,11 @@ public class ScenarioServiceImpl implements ScenarioService {
                        } else if (aScenarioDTO.getKnowledgeElementsList() != null) { // If null, knowl will be initialized when needed
                                aScenarioDTO.getKnowledgeElementsList().add(kelm);
                        }
-                       
-                       // Load the workflow for the parent study to take into account 
+
+                       // Load the workflow for the parent study to take into account
                        // all study actors durng reindexing.
                        getStudyService().loadWorkflow(aScenario.getOwnerStudy());
-                       
+
                        // Update the lucene index of knowledge elements.
                        getIndexService().add(kelm);
                        if (LOG.isDebugEnabled()) {
@@ -404,9 +455,9 @@ public class ScenarioServiceImpl implements ScenarioService {
         * @see org.splat.service.StudyService#addScenario(org.splat.dal.bo.som.Study, org.splat.dal.bo.som.Scenario.Properties)
         */
        @Transactional
-       public Scenario addScenario(final Study aStudy, final Scenario.Properties sprop)
-                       throws MissedPropertyException, InvalidPropertyException,
-                       MultiplyDefinedException {
+       public Scenario addScenario(final Study aStudy,
+                       final Scenario.Properties sprop) throws MissedPropertyException,
+                       InvalidPropertyException, MultiplyDefinedException {
                if (sprop.getManager() == null) {
                        sprop.setManager(aStudy.getAuthor());
                }
@@ -488,7 +539,8 @@ public class ScenarioServiceImpl implements ScenarioService {
         * @param knowledgeElementDAO
         *            the knowledgeElementDAO to set
         */
-       public void setKnowledgeElementDAO(final KnowledgeElementDAO knowledgeElementDAO) {
+       public void setKnowledgeElementDAO(
+                       final KnowledgeElementDAO knowledgeElementDAO) {
                _knowledgeElementDAO = knowledgeElementDAO;
        }
 
@@ -666,4 +718,24 @@ public class ScenarioServiceImpl implements ScenarioService {
                _simulationContextService = simulationContextService;
        }
 
+       /**
+        * Get project settings.
+        * 
+        * @return Project settings service
+        */
+       private ProjectSettingsService getProjectSettings() {
+               return _projectSettings;
+       }
+
+       /**
+        * Set project settings service.
+        * 
+        * @param projectSettingsService
+        *            project settings service
+        */
+       public void setProjectSettings(
+                       final ProjectSettingsService projectSettingsService) {
+               _projectSettings = projectSettingsService;
+       }
+
 }