/*****************************************************************************
- * Company EURIWARE
+ * Company OPEN CASCADE
* Application SIMAN
* File $Id$
* Creation date 06.10.2012
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;
/**
* Scenario service interface.
+ *
* @author <a href="mailto:roman.kozlov@opencascade.com">Roman Kozlov (RKV)</a>
*/
public interface ScenarioService {
+ /**
+ * 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
+ * the scenario properties
+ * @param cprop
+ * the "product" simulation context properties
+ * @return the created study
+ * @throws MissedPropertyException
+ * if a mandatory property is missed
+ * @throws InvalidPropertyException
+ * if a property is invalid
+ * @throws MultiplyDefinedException
+ * if some property occurs several times
+ */
+ Study createStudy(Study.Properties sprop, Scenario.Properties oprop,
+ SimulationContext.Properties cprop) throws MissedPropertyException,
+ InvalidPropertyException, MultiplyDefinedException;
+
+ /**
+ * Add a new scenario to the study.
+ *
+ * @param aStudy
+ * the study
+ * @param sprop
+ * scenario properties
+ * @return the added scenario
+ * @throws MissedPropertyException
+ * if a mandatory property is missed
+ * @throws InvalidPropertyException
+ * if an invalid value is passed to a property
+ * @throws MultiplyDefinedException
+ * if some property occurs several times
+ */
+ Scenario addScenario(Study aStudy, Scenario.Properties sprop)
+ throws MissedPropertyException, InvalidPropertyException,
+ MultiplyDefinedException;
+
/**
* Add a new knowledge element to the scenario.
*
* @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
*/
- public KnowledgeElement addKnowledgeElement(Scenario aScenario,
+ KnowledgeElement addKnowledgeElement(Scenario aScenario,
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 scenarioId
+ * the id of the scenario to check in
+ * @throws InvalidPropertyException
+ * if the scenario is not found in the database
+ */
+ void checkin(final long scenarioId) throws InvalidPropertyException;
+
+ /**
+ * Check out the scenario.
+ *
* @param aScenario
- * the scenario to check in
+ * the scenario to check out
+ * @param user
+ * the current user
+ * @return true if check out operation succeeded
+ */
+ 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
*/
- public void checkin(Scenario aScenario);
+ 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.
* @param lastep
* the last processed step of the source scenario
*/
- public void copyContentsUpTo(Scenario scenario, Step lastep);
+ void copyContentsUpTo(Scenario scenario, Step lastep);
/**
* Check if the scenario is empty, i.d. no one of its steps doesn't contain any knowledge elements or documents.
* the scenario to check
* @return true if the scenario is empty
*/
- public boolean isEmpty(Scenario scenario);
+ boolean isEmpty(Scenario scenario);
+
+ /**
+ * Remove a knowledge element from a scenario.
+ *
+ * @param scenario
+ * the scenario
+ * @param kelm
+ * the knowledge element to remove
+ * @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);
}