]> SALOME platform Git repositories - tools/siman.git/blobdiff - Workspace/Siman-Common/src/org/splat/service/ScenarioServiceImpl.java
Salome HOME
Adding a knowledge is fixed.
[tools/siman.git] / Workspace / Siman-Common / src / org / splat / service / ScenarioServiceImpl.java
index fb6629528bb9a5639f8ce93a36286d3e6133e5ef..0f8ea31442a6bdb4bea60d485e10fe4d119b7882 100644 (file)
@@ -22,7 +22,9 @@ import org.splat.dal.bo.som.Publication;
 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;
@@ -89,6 +91,16 @@ public class ScenarioServiceImpl implements ScenarioService {
         */
        private UserService _userService;
 
+       /**
+        * Injected user DAO.
+        */
+       private UserDAO _userDAO;
+
+       /**
+        * Injected knowledge element type DAO.
+        */
+       private KnowledgeElementTypeDAO _knowledgeElementTypeDAO;
+
        /**
         * Get the projectElementService.
         * 
@@ -154,37 +166,41 @@ public class ScenarioServiceImpl implements ScenarioService {
         *      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;
                }
 
@@ -332,8 +348,8 @@ public class ScenarioServiceImpl implements ScenarioService {
                                .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;
@@ -350,16 +366,16 @@ public class ScenarioServiceImpl implements ScenarioService {
         */
        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);
@@ -487,6 +503,7 @@ public class ScenarioServiceImpl implements ScenarioService {
 
        /**
         * Get the userService.
+        * 
         * @return the userService
         */
        public UserService getUserService() {
@@ -495,10 +512,51 @@ public class ScenarioServiceImpl implements ScenarioService {
 
        /**
         * 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;
+       }
+
 }