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.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;
public interface ScenarioService {
/**
- * Get lists of scenario steps, documents and files for building siman-salome.conf file.
+ * 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);
/**
- * Create a new study with one scenario and "product" simulation context.
- *
+ * 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
* @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
*/
* @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
*/
InvalidPropertyException, MultiplyDefinedException;
/**
- * Check-in the scenario after SALOME session.
+ * 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
* 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);
+ 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.
*/
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.
*
* @return true if removal succeeded
*/
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);
}