X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=Workspace%2FSiman-Common%2Fsrc%2Forg%2Fsplat%2Fservice%2FScenarioServiceImpl.java;h=705b534d17d9ec978a689894cac6c004bbd9137a;hb=7b66979277235ebe345d8589701e3cfd0dce842a;hp=464eff57440108fcbfc1ddab8534fe110a243ce4;hpb=0ee2ca9df4723c0c0547f387fd01dd5b43f10d8b;p=tools%2Fsiman.git diff --git a/Workspace/Siman-Common/src/org/splat/service/ScenarioServiceImpl.java b/Workspace/Siman-Common/src/org/splat/service/ScenarioServiceImpl.java index 464eff5..705b534 100644 --- a/Workspace/Siman-Common/src/org/splat/service/ScenarioServiceImpl.java +++ b/Workspace/Siman-Common/src/org/splat/service/ScenarioServiceImpl.java @@ -10,12 +10,16 @@ package org.splat.service; import java.io.IOException; +import java.util.ArrayList; import java.util.Calendar; import java.util.Iterator; import java.util.List; import org.apache.log4j.Logger; +import org.splat.dal.bo.kernel.Relation; import org.splat.dal.bo.kernel.User; +import org.splat.dal.bo.som.ConvertsRelation; +import org.splat.dal.bo.som.File; import org.splat.dal.bo.som.KnowledgeElement; import org.splat.dal.bo.som.KnowledgeElementType; import org.splat.dal.bo.som.Publication; @@ -30,8 +34,12 @@ import org.splat.dal.dao.som.StudyDAO; import org.splat.kernel.InvalidPropertyException; import org.splat.kernel.MissedPropertyException; 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; /** @@ -44,7 +52,7 @@ public class ScenarioServiceImpl implements ScenarioService { /** * Logger for this class. */ - protected final static Logger logger = Logger + protected final static Logger LOG = Logger .getLogger(ScenarioServiceImpl.class); /** @@ -106,6 +114,11 @@ public class ScenarioServiceImpl implements ScenarioService { */ private SimulationContextService _simulationContextService; + /** + * Injected project service. + */ + private ProjectSettingsService _projectSettings; + /** * Get the projectElementService. * @@ -122,7 +135,7 @@ public class ScenarioServiceImpl implements ScenarioService { * the projectElementService to set */ public void setProjectElementService( - ProjectElementService projectElementService) { + final ProjectElementService projectElementService) { _projectElementService = projectElementService; } @@ -141,7 +154,8 @@ public class ScenarioServiceImpl implements ScenarioService { * @param publicationService * the publicationService to set */ - public void setPublicationService(PublicationService publicationService) { + public void setPublicationService( + final PublicationService publicationService) { _publicationService = publicationService; } @@ -160,10 +174,78 @@ public class ScenarioServiceImpl implements ScenarioService { * @param stepService * the stepService to set */ - public void setStepService(StepService stepService) { + public void setStepService(final StepService stepService) { _stepService = stepService; } + /** + * {@inheritDoc} + * + * @see org.splat.service.ScenarioService#getScenarioInfo(long) + */ + @Transactional + public List getScenarioInfo(final long scenarioId) { + List res = new ArrayList(); + // 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; + 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); + 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(); + 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. * @@ -182,9 +264,11 @@ public class ScenarioServiceImpl implements ScenarioService { * if some property occurs several times */ @Transactional - public Study createStudy(Study.Properties sprop, Scenario.Properties oprop, - 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 @@ -206,14 +290,15 @@ public class ScenarioServiceImpl implements ScenarioService { * org.splat.dal.bo.som.KnowledgeElement.Properties) */ @Transactional - public KnowledgeElement addKnowledgeElement(Scenario aScenarioDTO, - KnowledgeElement.Properties kprop) throws MissedPropertyException, - InvalidPropertyException, MultiplyDefinedException { + public KnowledgeElement addKnowledgeElement(final Scenario aScenarioDTO, + final KnowledgeElement.Properties kprop) + throws MissedPropertyException, InvalidPropertyException, + MultiplyDefinedException { KnowledgeElement kelm = null; try { long aScenarioId = aScenarioDTO.getIndex(); - if (logger.isDebugEnabled()) { - logger.debug("Add a knowledge element to the scenario #" + if (LOG.isDebugEnabled()) { + LOG.debug("Add a knowledge element to the scenario #" + aScenarioId); } // Get the persistent scenario. @@ -232,14 +317,19 @@ 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 + // all study actors durng reindexing. + getStudyService().loadWorkflow(aScenario.getOwnerStudy()); + // Update the lucene index of knowledge elements. getIndexService().add(kelm); - if (logger.isDebugEnabled()) { - logger.debug("A knowledge element #" + kelm.getIndex() + if (LOG.isDebugEnabled()) { + LOG.debug("A knowledge element #" + kelm.getIndex() + " is added to the scenario #" + aScenario.getIndex()); } } catch (IOException error) { - logger.error("Unable to index the knowedge element '" + LOG.error("Unable to index the knowedge element '" + kelm.getIndex() + "', reason:", error); kelm = null; } @@ -255,13 +345,13 @@ public class ScenarioServiceImpl implements ScenarioService { * @return true if updating succeeded */ @Transactional - private boolean update(Scenario aScenario) { + private boolean update(final Scenario aScenario) { boolean isOk = false; try { getScenarioDAO().update(aScenario); // Update of relational base isOk = true; } catch (Exception error) { - logger.error("Unable to re-index the knowledge element '" + LOG.error("Unable to re-index the knowledge element '" + aScenario.getIndex() + "', reason:", error); } return isOk; @@ -272,7 +362,7 @@ public class ScenarioServiceImpl implements ScenarioService { * * @see org.splat.service.ScenarioService#checkin(org.splat.dal.bo.som.Scenario) */ - public void checkin(Scenario aScenario) { + public void checkin(final Scenario aScenario) { aScenario.setUser(null); aScenario.setLastModificationDate(Calendar.getInstance().getTime()); getScenarioDAO().update(aScenario); @@ -283,9 +373,10 @@ public class ScenarioServiceImpl implements ScenarioService { * * @see org.splat.service.ScenarioService#checkout(org.splat.dal.bo.som.Scenario, org.splat.dal.bo.kernel.User) */ - public boolean checkout(Scenario aScenario, User user) { - if (!getStudyService().isStaffedBy(aScenario.getOwnerStudy(), user)) + public boolean checkout(final Scenario aScenario, final User user) { + if (!getStudyService().isStaffedBy(aScenario.getOwnerStudy(), user)) { return false; + } aScenario.setUser(user); aScenario.setLastModificationDate(Calendar.getInstance().getTime()); @@ -298,14 +389,15 @@ public class ScenarioServiceImpl implements ScenarioService { * * @see org.splat.service.ScenarioService#copyContentsUpTo(org.splat.dal.bo.som.Scenario, org.splat.som.Step) */ - public void copyContentsUpTo(Scenario scenario, Step lastep) { + public void copyContentsUpTo(final Scenario scenario, final Step lastep) { Scenario base = (Scenario) lastep.getOwner(); Step[] from = getProjectElementService().getSteps(base); Step[] to = getProjectElementService().getSteps(scenario); for (int i = 0; i < from.length; i++) { Step step = from[i]; - if (step.getNumber() > lastep.getNumber()) + if (step.getNumber() > lastep.getNumber()) { break; + } List docs = step.getAllDocuments(); for (Iterator j = docs.iterator(); j.hasNext();) { @@ -326,7 +418,7 @@ public class ScenarioServiceImpl implements ScenarioService { * * @see org.splat.service.ScenarioService#isEmpty(org.splat.dal.bo.som.Scenario) */ - public boolean isEmpty(Scenario scenario) { + public boolean isEmpty(final Scenario scenario) { Step[] mystep = getProjectElementService().getSteps(scenario); boolean isEmp = true; for (int i = 0; i < mystep.length; i++) { @@ -342,14 +434,16 @@ public class ScenarioServiceImpl implements ScenarioService { * @param scenario * @return */ - public boolean isFinished(Scenario scenario) { + public boolean isFinished(final Scenario scenario) { Step[] mystep = getProjectElementService().getSteps(scenario); boolean notempty = false; // If this is empty, this is not finished for (int i = 0; i < mystep.length; i++) { - if (!mystep[i].isStarted()) + if (!mystep[i].isStarted()) { continue; - if (!mystep[i].isFinished()) + } + if (!mystep[i].isFinished()) { return false; + } notempty = true; } return notempty; @@ -361,15 +455,17 @@ 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(Study aStudy, Scenario.Properties sprop) - throws MissedPropertyException, InvalidPropertyException, - MultiplyDefinedException { - if (sprop.getManager() == null) + public Scenario addScenario(final Study aStudy, + final Scenario.Properties sprop) throws MissedPropertyException, + InvalidPropertyException, MultiplyDefinedException { + if (sprop.getManager() == null) { sprop.setManager(aStudy.getAuthor()); + } Scenario scenario = new Scenario(sprop.setOwnerStudy(aStudy)); - if (sprop.getBaseStep() != null) + if (sprop.getBaseStep() != null) { copyContentsUpTo(scenario, sprop.getBaseStep()); + } Scenario previous = sprop.getInsertAfter(); if (previous == null) { @@ -404,11 +500,12 @@ public class ScenarioServiceImpl implements ScenarioService { * the knowledge element to remove * @return true if removal succeeded */ - public boolean removeKnowledgeElement(Scenario scenario, - KnowledgeElement kelm) { + public boolean removeKnowledgeElement(final Scenario scenario, + final KnowledgeElement kelm) { KnowledgeElement torem = scenario.getKnowledgeElement(kelm.getIndex()); - if (torem == null) + if (torem == null) { return false; + } boolean done = scenario.getKnowledgeElements().remove(torem); if (done) { // Update of my transient data @@ -416,8 +513,9 @@ public class ScenarioServiceImpl implements ScenarioService { // RKV: List kelms = scenario.getKnowledgeByType().get( // RKV: kelm.getType().getIndex()); // RKV: kelms.remove(torem); - if (scenario.getKnowledgeElementsList() != null) + if (scenario.getKnowledgeElementsList() != null) { scenario.getKnowledgeElementsList().remove(torem); + } getScenarioDAO().update(scenario); // TODO: If the owner study is not private, remove the knowledge from the Lucene index return true; @@ -441,7 +539,8 @@ public class ScenarioServiceImpl implements ScenarioService { * @param knowledgeElementDAO * the knowledgeElementDAO to set */ - public void setKnowledgeElementDAO(KnowledgeElementDAO knowledgeElementDAO) { + public void setKnowledgeElementDAO( + final KnowledgeElementDAO knowledgeElementDAO) { _knowledgeElementDAO = knowledgeElementDAO; } @@ -460,7 +559,7 @@ public class ScenarioServiceImpl implements ScenarioService { * @param indexService * the indexService to set */ - public void setIndexService(IndexService indexService) { + public void setIndexService(final IndexService indexService) { _indexService = indexService; } @@ -479,7 +578,7 @@ public class ScenarioServiceImpl implements ScenarioService { * @param scenarioDAO * the scenarioDAO to set */ - public void setScenarioDAO(ScenarioDAO scenarioDAO) { + public void setScenarioDAO(final ScenarioDAO scenarioDAO) { _scenarioDAO = scenarioDAO; } @@ -498,7 +597,7 @@ public class ScenarioServiceImpl implements ScenarioService { * @param studyDAO * the studyDAO to set */ - public void setStudyDAO(StudyDAO studyDAO) { + public void setStudyDAO(final StudyDAO studyDAO) { _studyDAO = studyDAO; } @@ -518,7 +617,7 @@ public class ScenarioServiceImpl implements ScenarioService { * the knowledgeElementTypeService to set */ public void setKnowledgeElementTypeService( - KnowledgeElementTypeService knowledgeElementTypeService) { + final KnowledgeElementTypeService knowledgeElementTypeService) { _knowledgeElementTypeService = knowledgeElementTypeService; } @@ -537,7 +636,7 @@ public class ScenarioServiceImpl implements ScenarioService { * @param studyService * the studyService to set */ - public void setStudyService(StudyService studyService) { + public void setStudyService(final StudyService studyService) { _studyService = studyService; } @@ -556,7 +655,7 @@ public class ScenarioServiceImpl implements ScenarioService { * @param userService * the userService to set */ - public void setUserService(UserService userService) { + public void setUserService(final UserService userService) { _userService = userService; } @@ -575,7 +674,7 @@ public class ScenarioServiceImpl implements ScenarioService { * @param userDAO * the userDAO to set */ - public void setUserDAO(UserDAO userDAO) { + public void setUserDAO(final UserDAO userDAO) { _userDAO = userDAO; } @@ -595,7 +694,7 @@ public class ScenarioServiceImpl implements ScenarioService { * the knowledgeElementTypeDAO to set */ public void setKnowledgeElementTypeDAO( - KnowledgeElementTypeDAO knowledgeElementTypeDAO) { + final KnowledgeElementTypeDAO knowledgeElementTypeDAO) { _knowledgeElementTypeDAO = knowledgeElementTypeDAO; } @@ -615,8 +714,28 @@ public class ScenarioServiceImpl implements ScenarioService { * the simulationContextService to set */ public void setSimulationContextService( - SimulationContextService simulationContextService) { + final SimulationContextService simulationContextService) { _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; + } + }