From a818bceb03443b73e113410eb0e0ed745cbace69 Mon Sep 17 00:00:00 2001 From: rkv Date: Thu, 25 Oct 2012 06:39:01 +0000 Subject: [PATCH] Adding a knowledge is fixed. --- .../src/org/splat/dal/bo/som/Scenario.java | 21 ++-- .../splat/service/ScenarioServiceImpl.java | 114 +++++++++++++----- .../src/spring/businessServiceContext.xml | 51 ++++---- .../simer/EditKnowledgeElementAction.java | 1 + 4 files changed, 122 insertions(+), 65 deletions(-) diff --git a/Workspace/Siman-Common/src/org/splat/dal/bo/som/Scenario.java b/Workspace/Siman-Common/src/org/splat/dal/bo/som/Scenario.java index f8f475c..f473093 100644 --- a/Workspace/Siman-Common/src/org/splat/dal/bo/som/Scenario.java +++ b/Workspace/Siman-Common/src/org/splat/dal/bo/som/Scenario.java @@ -68,7 +68,6 @@ public class Scenario extends ProjectElement { * Fields initialization class. */ public static class Properties extends Persistent.Properties { - // ------------------------------------------------------------ private Study owner = null; private Scenario previous = null; private Step base = null; @@ -163,7 +162,6 @@ public class Scenario extends ProjectElement { // Database fetch constructor protected Scenario() { - // --------------------- known = null; knowl = null; ucase = null; @@ -172,7 +170,6 @@ public class Scenario extends ProjectElement { // 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; @@ -209,7 +206,6 @@ public class Scenario extends ProjectElement { // ============================================================================================================================== public List getAllKnowledgeElements() { - // -------------------------------------------------------- if (knowl == null) { knowl = new Vector(kelms.size()); for (Iterator i = kelms.iterator(); i.hasNext();) { @@ -224,20 +220,18 @@ public class Scenario extends ProjectElement { } public KnowledgeElement getKnowledgeElement(long l) { - // ------------------------------------------------------- for (Iterator i = kelms.iterator(); i.hasNext();) { KnowledgeElement mykelm = i.next(); - if (mykelm.getIndex() == l) + if (l == mykelm.getIndex()) { return mykelm; + } } return null; } - public List getKnowledgeElementsOf( +/* RKV: Not used + * public List getKnowledgeElementsOf( KnowledgeElementType type) { - // -------------------------------------------------------------------------------- - if (kelms.isEmpty()) - return new Vector(); // Smarter than returning null if (known == null) known = new HashMap>(); @@ -254,7 +248,7 @@ public class Scenario extends ProjectElement { } return listype; // No protection against this object corruption as it would not corrupt the database } - +*/ public Study getOwnerStudy() { // ----------------------------- return owner; @@ -326,7 +320,8 @@ public class Scenario extends ProjectElement { * * @return the known */ - public HashMap> getKnowledgeByType() { +/* RKV: Not used + * public HashMap> getKnowledgeByType() { return known; } -} \ No newline at end of file +*/} \ No newline at end of file diff --git a/Workspace/Siman-Common/src/org/splat/service/ScenarioServiceImpl.java b/Workspace/Siman-Common/src/org/splat/service/ScenarioServiceImpl.java index fb66295..0f8ea31 100644 --- a/Workspace/Siman-Common/src/org/splat/service/ScenarioServiceImpl.java +++ b/Workspace/Siman-Common/src/org/splat/service/ScenarioServiceImpl.java @@ -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 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 kelms = scenario.getKnowledgeByType().get( - kelm.getType().getIndex()); - kelms.remove(torem); + // RKV: These transient data are not used indeed. + // RKV: List 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; + } + } diff --git a/Workspace/Siman-Common/src/spring/businessServiceContext.xml b/Workspace/Siman-Common/src/spring/businessServiceContext.xml index 054bb16..f0ad06d 100644 --- a/Workspace/Siman-Common/src/spring/businessServiceContext.xml +++ b/Workspace/Siman-Common/src/spring/businessServiceContext.xml @@ -15,16 +15,16 @@ http://www.springframework.org/schema/tx/spring-tx-3.0.xsd"> class="org.splat.service.ServiceLocatorImpl" factory-method="getInstance"> - + - - - + + + - + - - + + - + + + - - - + + + @@ -103,19 +106,19 @@ http://www.springframework.org/schema/tx/spring-tx-3.0.xsd"> - - - - + + + + - - - + + + @@ -129,7 +132,7 @@ http://www.springframework.org/schema/tx/spring-tx-3.0.xsd"> - + diff --git a/Workspace/Siman/src/org/splat/simer/EditKnowledgeElementAction.java b/Workspace/Siman/src/org/splat/simer/EditKnowledgeElementAction.java index ce3ac95..c4975d0 100644 --- a/Workspace/Siman/src/org/splat/simer/EditKnowledgeElementAction.java +++ b/Workspace/Siman/src/org/splat/simer/EditKnowledgeElementAction.java @@ -96,6 +96,7 @@ public class EditKnowledgeElementAction extends DisplayStudyStepAction { logger.error("Reason:", saverror); return ERROR; } catch (Exception error) { + logger.error("Exception while saving a knowledge: ", error); return INPUT; } } -- 2.39.2