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;
+ }
+
}