Salome HOME
VPV implementation of the new checking algorithm and the unit test (getNewDocumentId())
[tools/siman.git] / Workspace / Siman-Common / src / org / splat / service / ScenarioService.java
index 84bf9c78c97fd4294ed24ba9c2a5c89f13933440..50fcc297808c64e6b61ddaf87d03490615df7500 100644 (file)
@@ -9,14 +9,22 @@
 
 package org.splat.service;
 
+import java.io.IOException;
+import java.util.List;
+
 import org.splat.dal.bo.kernel.User;
 import org.splat.dal.bo.som.KnowledgeElement;
 import org.splat.dal.bo.som.Scenario;
 import org.splat.dal.bo.som.SimulationContext;
 import org.splat.dal.bo.som.Study;
+import org.splat.exception.InvalidParameterException;
 import org.splat.kernel.InvalidPropertyException;
+import org.splat.kernel.MismatchException;
 import org.splat.kernel.MissedPropertyException;
 import org.splat.kernel.MultiplyDefinedException;
+import org.splat.kernel.NotApplicableException;
+import org.splat.service.dto.ScenarioDTO;
+import org.splat.service.dto.StepDTO;
 import org.splat.som.Step;
 
 /**
@@ -27,8 +35,123 @@ import org.splat.som.Step;
 public interface ScenarioService {
 
        /**
-        * Create a new study with one scenario and "product" simulation context.
+        * Get a list of scenarios of a study with the given id.
         * 
+        * @param studyId
+        *            the study id
+        * @return list of scenario DTOs
+        */
+       List<ScenarioDTO> getStudyScenarios(final Long studyId);
+
+       /**
+     * Get a new id to document arriver after check-out.
+     * Return two several values: -1 or ID of the existing document.
+     *
+     * @param scenId
+     *            the scenario id
+     * @param activityNumber
+     *            the number of activity
+     * @param docId
+     *            the document id
+     * @param fileExt
+     *            the file extension
+     * @return new document id or -1 if same document do nor exist.
+     * 
+     * @throws InvalidPropertyException if activityNumber is incorrect.
+     */
+
+     long getNewDocumentId(final long scenId,
+            final int activityNumber, final Long docId,
+            final String fileExt) throws InvalidPropertyException;
+
+       /**
+        * Copy content of a source study into the given study up to the given step.
+        *
+        * @param fromStudyId
+        *            the source study id
+        * @param fromScenId
+        *            the source scenario id
+        * @param finalStepNum
+        *            the final source step number
+        * @param toStudyId
+        *            the target study
+        * @throws InvalidParameterException
+        *             if study, scenario or step is not found
+        * @throws MissedPropertyException
+        *             if document creation is failed
+        * @throws InvalidPropertyException
+        *             if document creation is failed
+        * @throws MultiplyDefinedException
+        *             if document creation is failed
+        * @throws IOException
+        *             if document file creation is failed
+        * @throws NotApplicableException
+        *             if document state is not applicable
+        */
+       void copyStudyContent(final long fromStudyId, final long fromScenId,
+                       final int finalStepNum, final long toStudyId)
+                       throws InvalidParameterException, MissedPropertyException,
+                       InvalidPropertyException, MultiplyDefinedException,
+                       NotApplicableException, IOException;
+
+       /**
+        * Get lists of scenario steps, documents and files for building siman-salome.conf file.
+        *
+        * @param scenarioId
+        *            scenario id
+        * @return list of step DTOs
+        */
+       List<StepDTO> getScenarioInfo(long scenarioId);
+
+       /**
+        * Assign context to the study.
+        *
+        * @param studyId
+        *            study id
+        * @param ctxType
+        *            context type name
+        * @param ctxValue
+        *            context value
+        * @throws InvalidPropertyException
+        *             if an invalid value is passed to a property
+        * @throws MissedPropertyException
+        *             if a mandatory property is missed
+        * @throws MultiplyDefinedException
+        *             if some property is defined several times
+        */
+       void assignStudyContext(final Long studyId, final String ctxType,
+                       final String ctxValue) throws MissedPropertyException,
+                       InvalidPropertyException, MultiplyDefinedException;
+
+       /**
+        * Create a new study.
+        *
+        * @param username
+        *            user login
+        * @param title
+        *            study title
+        * @param productName
+        *            study product simulation context value
+        * @param description
+        *            study summary
+        * @return the created study id
+        * @throws InvalidPropertyException
+        *             if an invalid value is passed to a property
+        * @throws MissedPropertyException
+        *             if a mandatory property is missed
+        * @throws MultiplyDefinedException
+        *             if some property is defined several times
+        */
+       long createStudy(final String username, final String title,
+                       final String productName, final String description)
+                       throws InvalidPropertyException,
+                       MissedPropertyException,
+                       MultiplyDefinedException;
+
+       /**
+        * Create a new study with one scenario and "product"
+        * simulation context.
+        *
         * @param sprop
         *            the study properties
         * @param oprop
@@ -58,7 +181,7 @@ public interface ScenarioService {
         * @throws MissedPropertyException
         *             if a mandatory property is missed
         * @throws InvalidPropertyException
-        *             if some property doesn't exist
+        *             if an invalid value is passed to a property
         * @throws MultiplyDefinedException
         *             if some property occurs several times
         */
@@ -77,7 +200,7 @@ public interface ScenarioService {
         * @throws MissedPropertyException
         *             if a mandatory property is missed
         * @throws InvalidPropertyException
-        *             if some property doesn't exist
+        *             if an invalid value is passed to a property
         * @throws MultiplyDefinedException
         *             if some property is defined several times
         */
@@ -85,13 +208,50 @@ public interface ScenarioService {
                        KnowledgeElement.Properties kprop) throws MissedPropertyException,
                        InvalidPropertyException, MultiplyDefinedException;
 
+       /**
+        * Check-in the scenario after SALOME session. If a document to be checked in already exists then create a new version of it. Otherwise
+        * create a new document of the appropriate step result type.
+        * <ul>
+        * <li>For each new created document version we copy Uses relations from the previous document version. If used document has been also
+        * versioned during this check-in operation then refer to its new version.</li>
+        * <li>For each new document create uses relation to the last versions of results of a previous step.</li>
+        * </ul>
+        * <b>NOTE:</b> Only the first attached file is processed for each document. <br/>All new documents/versions are created in inWORK
+        * state.
+        * 
+        * @param scenId
+        *            the scenario id
+        * @param userId
+        *            the id of the user who modified documents
+        * @param scInfo
+        *            the list of scenario steps DTO
+        * @throws InvalidPropertyException
+        *             if the scenario hasn't some of given steps or documents
+        * @throws IOException
+        *             if a file can't be moved into the vault
+        * @throws MismatchException
+        *             if version creation in some of steps is failed
+        * @throws MissedPropertyException
+        *             if some mandatory property is missed when new document or new document version is created
+        * @throws MultiplyDefinedException
+        *             if some property is defined several times when new document or new document version is created
+        * @throws NotApplicableException
+        *             if failed saving of a new publication with a given state
+        */
+       void checkin(final long scenId, final long userId,
+                       final List<StepDTO> scInfo) throws InvalidPropertyException,
+                       MissedPropertyException, MultiplyDefinedException,
+                       MismatchException, IOException, NotApplicableException;
+
        /**
         * Check in the scenario.
         * 
-        * @param aScenario
-        *            the scenario to check in
+        * @param scenarioId
+        *            the id of the scenario to check in
+        * @throws InvalidPropertyException
+        *             if the scenario is not found in the database
         */
-       void checkin(Scenario aScenario);
+       void checkin(final long scenarioId) throws InvalidPropertyException;
 
        /**
         * Check out the scenario.
@@ -104,6 +264,21 @@ public interface ScenarioService {
         */
        boolean checkout(Scenario aScenario, User user);
 
+       /**
+        * Mark the given scenario as checked out by the given user.
+        * 
+        * @param scenarioId
+        *            the scenario id
+        * @param userId
+        *            the id of the user performing the check out
+        * @throws InvalidPropertyException
+        *             if the user or the scenario is not found in the database
+        * @throws NotApplicableException
+        *             if the given user can not check out the scenario
+        */
+       void checkout(final long scenarioId, final long userId)
+                       throws InvalidPropertyException, NotApplicableException;
+
        /**
         * Copy contents from other scenario up to its given step into the given scenario.
         * 
@@ -132,6 +307,21 @@ public interface ScenarioService {
         *            the knowledge element to remove
         * @return true if removal succeeded
         */
-       boolean removeKnowledgeElement(Scenario scenario,
-                       KnowledgeElement kelm);
+       boolean removeKnowledgeElement(Scenario scenario, KnowledgeElement kelm);
+
+       /**
+        * Rename the scenario.
+        * 
+        * @param scenario -
+        *            the scenario with a new title.
+        */
+       void renameScenario(final Scenario scenario);
+
+       /**
+        * Remove the scenario.
+        * 
+        * @param scenarioId -
+        *            the id of the scenario to remove.
+        */
+       void removeScenario(final long scenarioId);
 }