* Fields initialization class.
*/
public static class Properties extends Persistent.Properties {
- // ------------------------------------------------------------
private Study owner = null;
private Scenario previous = null;
private Step base = null;
// Database fetch constructor
protected Scenario() {
- // ---------------------
known = null;
knowl = null;
ucase = null;
// Internal constructor
public Scenario(Properties sprop) throws MissedPropertyException,
InvalidPropertyException, MultiplyDefinedException {
- // -------------------------------------
super(sprop); // Throws one of the above exception if not valid
owner = sprop.owner;
sid = 0;
// ==============================================================================================================================
public List<KnowledgeElement> getAllKnowledgeElements() {
- // --------------------------------------------------------
if (knowl == null) {
knowl = new Vector<KnowledgeElement>(kelms.size());
for (Iterator<KnowledgeElement> i = kelms.iterator(); i.hasNext();) {
}
public KnowledgeElement getKnowledgeElement(long l) {
- // -------------------------------------------------------
for (Iterator<KnowledgeElement> i = kelms.iterator(); i.hasNext();) {
KnowledgeElement mykelm = i.next();
- if (mykelm.getIndex() == l)
+ if (l == mykelm.getIndex()) {
return mykelm;
+ }
}
return null;
}
- public List<KnowledgeElement> getKnowledgeElementsOf(
+/* RKV: Not used
+ * public List<KnowledgeElement> getKnowledgeElementsOf(
KnowledgeElementType type) {
- // --------------------------------------------------------------------------------
- if (kelms.isEmpty())
- return new Vector<KnowledgeElement>(); // Smarter than returning null
if (known == null)
known = new HashMap<Long, List<KnowledgeElement>>();
}
return listype; // No protection against this object corruption as it would not corrupt the database
}
-
+*/
public Study getOwnerStudy() {
// -----------------------------
return owner;
*
* @return the known
*/
- public HashMap<Long, List<KnowledgeElement>> getKnowledgeByType() {
+/* RKV: Not used
+ * public HashMap<Long, List<KnowledgeElement>> getKnowledgeByType() {
return known;
}
-}
\ No newline at end of file
+*/}
\ No newline at end of file
import org.splat.dal.bo.som.Scenario;
import org.splat.dal.bo.som.SimulationContext;
import org.splat.dal.bo.som.Study;
+import org.splat.dal.dao.kernel.UserDAO;
import org.splat.dal.dao.som.KnowledgeElementDAO;
+import org.splat.dal.dao.som.KnowledgeElementTypeDAO;
import org.splat.dal.dao.som.ScenarioDAO;
import org.splat.dal.dao.som.StudyDAO;
import org.splat.kernel.InvalidPropertyException;
*/
private UserService _userService;
+ /**
+ * Injected user DAO.
+ */
+ private UserDAO _userDAO;
+
+ /**
+ * Injected knowledge element type DAO.
+ */
+ private KnowledgeElementTypeDAO _knowledgeElementTypeDAO;
+
/**
* Get the projectElementService.
*
* org.splat.dal.bo.som.KnowledgeElement.Properties)
*/
@Transactional
- public KnowledgeElement addKnowledgeElement(Scenario aScenario,
+ public KnowledgeElement addKnowledgeElement(Scenario aScenarioDTO,
KnowledgeElement.Properties kprop) throws MissedPropertyException,
InvalidPropertyException, MultiplyDefinedException {
KnowledgeElement kelm = null;
try {
- // Attach the detached scenario to the new hibernate session.
- aScenario = getScenarioDAO().merge(aScenario); // RKV
+ long aScenarioId = aScenarioDTO.getIndex();
+ if (logger.isDebugEnabled()) {
+ logger.debug("Add a knowledge element to the scenario #"
+ + aScenarioId);
+ }
+ // Get the persistent scenario.
+ Scenario aScenario = getScenarioDAO().get(aScenarioId);
+ // Get persistent objects for creating a new knowledge.
+ //TODO: Actions must use DTO instead of persistent objects.
+ getUserDAO().merge(kprop.getAuthor());
+ getKnowledgeElementTypeDAO().merge(kprop.getType());
+ // Create a transient knowledge element related to the given scenario.
kelm = new KnowledgeElement(kprop.setOwnerScenario(aScenario));
+ // Save the new knowledge in the database.
getKnowledgeElementDAO().create(kelm);
- // RKV: commented because of BatchUpdateException during creation of a new study: session.flush(); //RKV
- // Update of my persistent data
- // RKV aScenario.getKnowledgeElements().add(kelm);
- // RKV getKnowledgeElementDAO().flush();
- // RKV: commented because of NullPointerException during creation of a new study: session.merge(aScenario); //RKV
- // Update of my transient data
- List<KnowledgeElement> known = aScenario
- .getKnowledgeElementsOf(kelm.getType()); // Initializes this.known, if not yet done
- // RKV: knowledge is already added into persistent set and "known" is constructed from it in the above call: known.add(kelm);
+ // Update scenario transient data.
if (kelm.getType().equals("usecase")) {
- aScenario.setUcase(kelm);
- } else if (aScenario.getKnowledgeElementsList() != null) { // If null, knowl will be initialized when needed
- aScenario.getKnowledgeElementsList().add(kelm);
+ aScenarioDTO.setUcase(kelm);
+ } else if (aScenarioDTO.getKnowledgeElementsList() != null) { // If null, knowl will be initialized when needed
+ aScenarioDTO.getKnowledgeElementsList().add(kelm);
}
- // Update of the index of Knowledge Elements
+ // Update the lucene index of knowledge elements.
getIndexService().add(kelm);
- update(aScenario);
-
+ if (logger.isDebugEnabled()) {
+ logger.debug("A knowledge element #" + kelm.getIndex()
+ + " is added to the scenario #" + aScenario.getIndex());
+ }
} catch (IOException error) {
- logger.error(
- "Unable to index the knowedge element '" + kelm.getIndex()
- + "', reason:", error);
+ logger.error("Unable to index the knowedge element '"
+ + kelm.getIndex() + "', reason:", error);
kelm = null;
}
.selectType("usecase");
KnowledgeElement.Properties kprop = new KnowledgeElement.Properties();
User admin = getUserService().selectUser(1); // First user created when creating the database
- kprop.setType(ucase).setTitle(aStudy.getTitle())
- .setValue(scenario.getTitle()).setAuthor(admin); // Internal Knowledge Element required by the validation process of
+ kprop.setType(ucase).setTitle(aStudy.getTitle()).setValue(
+ scenario.getTitle()).setAuthor(admin); // Internal Knowledge Element required by the validation process of
// knowledges
addKnowledgeElement(scenario, kprop);
return scenario;
*/
public boolean removeKnowledgeElement(Scenario scenario,
KnowledgeElement kelm) {
- // -------------------------------------------------------------
KnowledgeElement torem = scenario.getKnowledgeElement(kelm.getIndex());
if (torem == null)
return false;
boolean done = scenario.getKnowledgeElements().remove(torem);
if (done) {
// Update of my transient data
- List<KnowledgeElement> kelms = scenario.getKnowledgeByType().get(
- kelm.getType().getIndex());
- kelms.remove(torem);
+ // RKV: These transient data are not used indeed.
+ // RKV: List<KnowledgeElement> kelms = scenario.getKnowledgeByType().get(
+ // RKV: kelm.getType().getIndex());
+ // RKV: kelms.remove(torem);
if (scenario.getKnowledgeElementsList() != null)
scenario.getKnowledgeElementsList().remove(torem);
getScenarioDAO().update(scenario);
/**
* Get the userService.
+ *
* @return the userService
*/
public UserService getUserService() {
/**
* Set the userService.
- * @param userService the userService to set
+ *
+ * @param userService
+ * the userService to set
*/
public void setUserService(UserService userService) {
_userService = userService;
}
+ /**
+ * Get the userDAO.
+ *
+ * @return the userDAO
+ */
+ public UserDAO getUserDAO() {
+ return _userDAO;
+ }
+
+ /**
+ * Set the userDAO.
+ *
+ * @param userDAO
+ * the userDAO to set
+ */
+ public void setUserDAO(UserDAO userDAO) {
+ _userDAO = userDAO;
+ }
+
+ /**
+ * Get the knowledgeElementTypeDAO.
+ *
+ * @return the knowledgeElementTypeDAO
+ */
+ public KnowledgeElementTypeDAO getKnowledgeElementTypeDAO() {
+ return _knowledgeElementTypeDAO;
+ }
+
+ /**
+ * Set the knowledgeElementTypeDAO.
+ *
+ * @param knowledgeElementTypeDAO
+ * the knowledgeElementTypeDAO to set
+ */
+ public void setKnowledgeElementTypeDAO(
+ KnowledgeElementTypeDAO knowledgeElementTypeDAO) {
+ _knowledgeElementTypeDAO = knowledgeElementTypeDAO;
+ }
+
}
class="org.splat.service.ServiceLocatorImpl"
factory-method="getInstance">
<property name="studyService" ref="studyService" />
- <property name="userService" ref="userService" />
+ <property name="userService" ref="userService" />
</bean>
- <bean id="userService" class="org.splat.service.UserServiceImpl">
- <property name="userDAO" ref="userDAO"/>
- </bean>
+ <bean id="userService" class="org.splat.service.UserServiceImpl">
+ <property name="userDAO" ref="userDAO" />
+ </bean>
<bean id="projectElementService"
class="org.splat.service.ProjectElementServiceImpl">
<property name="projectSettings" ref="projectSettings" />
- <property name="projectElementDAO" ref="projectElementDAO" />
+ <property name="projectElementDAO" ref="projectElementDAO" />
</bean>
<bean id="documentTypeService"
<property name="stepService" ref="stepService" />
<property name="studyService" ref="studyService" />
<property name="knowledgeElementDAO" ref="knowledgeElementDAO" />
- <property name="scenarioDAO" ref="scenarioDAO" />
- <property name="studyDAO" ref="studyDAO" />
+ <property name="scenarioDAO" ref="scenarioDAO" />
+ <property name="studyDAO" ref="studyDAO" />
<property name="knowledgeElementTypeService"
ref="knowledgeElementTypeService" />
- <property name="userService" ref="userService" />
+ <property name="userService" ref="userService" />
+ <property name="userDAO" ref="userDAO" />
+ <property name="knowledgeElementTypeDAO"
+ ref="knowledgeElementTypeDAO" />
</bean>
<bean id="searchService"
class="org.splat.service.SearchServiceImpl">
<property name="indexService" ref="indexService" />
- <property name="repositoryService" ref="repositoryService" />
- <property name="studyService" ref="studyService" />
- <property name="studyDAO" ref="studyDAO" />
+ <property name="repositoryService" ref="repositoryService" />
+ <property name="studyService" ref="studyService" />
+ <property name="studyDAO" ref="studyDAO" />
</bean>
<bean id="stepService" class="org.splat.service.StepServiceImpl">
<property name="projectElementDAO" ref="projectElementDAO" />
</bean>
- <bean id="simulationContextService"
- class="org.splat.service.SimulationContextServiceImpl">
- <property name="simulationContextDAO"
- ref="simulationContextDAO" />
- <property name="simulationContextTypeDAO"
- ref="simulationContextTypeDAO" />
- </bean>
+ <bean id="simulationContextService"
+ class="org.splat.service.SimulationContextServiceImpl">
+ <property name="simulationContextDAO"
+ ref="simulationContextDAO" />
+ <property name="simulationContextTypeDAO"
+ ref="simulationContextTypeDAO" />
+ </bean>
- <bean id="simulationContextTypeService"
- class="org.splat.service.SimulationContextTypeServiceImpl">
- <property name="simulationContextTypeDAO"
- ref="simulationContextTypeDAO" />
- </bean>
+ <bean id="simulationContextTypeService"
+ class="org.splat.service.SimulationContextTypeServiceImpl">
+ <property name="simulationContextTypeDAO"
+ ref="simulationContextTypeDAO" />
+ </bean>
<bean id="studyService"
class="org.splat.service.StudyServiceImpl">
<property name="IDBuilderDAO" ref="iDBuilderDAO" />
<property name="validationCycleDAO" ref="validationCycleDAO" />
<property name="documentTypeService" ref="documentTypeService" />
- <property name="userService" ref="userService" />
+ <property name="userService" ref="userService" />
</bean>
<bean id="userRights" abstract="true" scope="session">