From: Mathieu Baudier Date: Fri, 27 Jun 2008 22:02:48 +0000 (+0000) Subject: Adapt web services to lazy loading X-Git-Tag: argeo-slc-2.1.7~2745 X-Git-Url: http://git.argeo.org/?a=commitdiff_plain;h=a84a0c69cc8593264264a9961c643d67a8acc046;hp=ad49e4ffc69a3c67dee95b9d333d9282ab2c5e82;p=gpl%2Fargeo-slc.git Adapt web services to lazy loading git-svn-id: https://svn.argeo.org/slc/trunk@1297 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- diff --git a/org.argeo.slc.hibernate/src/main/java/org/argeo/slc/hibernate/process/SlcExecutionDaoHibernate.java b/org.argeo.slc.hibernate/src/main/java/org/argeo/slc/hibernate/process/SlcExecutionDaoHibernate.java index 9518d93fc..0e21b3a9d 100644 --- a/org.argeo.slc.hibernate/src/main/java/org/argeo/slc/hibernate/process/SlcExecutionDaoHibernate.java +++ b/org.argeo.slc.hibernate/src/main/java/org/argeo/slc/hibernate/process/SlcExecutionDaoHibernate.java @@ -1,11 +1,17 @@ package org.argeo.slc.hibernate.process; +import java.sql.SQLException; import java.util.List; +import org.springframework.orm.hibernate3.HibernateCallback; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; +import org.argeo.slc.core.SlcException; import org.argeo.slc.core.process.SlcExecution; +import org.argeo.slc.core.process.SlcExecutionStep; import org.argeo.slc.dao.process.SlcExecutionDao; +import org.hibernate.HibernateException; +import org.hibernate.Session; public class SlcExecutionDaoHibernate extends HibernateDaoSupport implements SlcExecutionDao { @@ -28,4 +34,25 @@ public class SlcExecutionDaoHibernate extends HibernateDaoSupport implements SlcExecution.class); } + public void addSteps(final String slcExecutionId, + final List additionalSteps) { + getHibernateTemplate().execute(new HibernateCallback() { + + public Object doInHibernate(Session session) + throws HibernateException, SQLException { + SlcExecution slcExecution = (SlcExecution) session.get( + SlcExecution.class, slcExecutionId); + + if (slcExecution == null) + throw new SlcException("Could not find SLC execution " + + slcExecutionId); + + slcExecution.getSteps().addAll(additionalSteps); + session.update(slcExecution); + return slcExecution; + } + }); + + } + } diff --git a/org.argeo.slc.hibernate/src/main/java/org/argeo/slc/hibernate/test/tree/TreeTestResultCollectionDaoHibernate.java b/org.argeo.slc.hibernate/src/main/java/org/argeo/slc/hibernate/test/tree/TreeTestResultCollectionDaoHibernate.java index b08072058..513a12123 100644 --- a/org.argeo.slc.hibernate/src/main/java/org/argeo/slc/hibernate/test/tree/TreeTestResultCollectionDaoHibernate.java +++ b/org.argeo.slc.hibernate/src/main/java/org/argeo/slc/hibernate/test/tree/TreeTestResultCollectionDaoHibernate.java @@ -1,12 +1,18 @@ package org.argeo.slc.hibernate.test.tree; +import java.sql.SQLException; import java.util.SortedSet; import java.util.TreeSet; +import org.springframework.orm.hibernate3.HibernateCallback; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; +import org.argeo.slc.core.test.tree.TreeTestResult; import org.argeo.slc.core.test.tree.TreeTestResultCollection; import org.argeo.slc.dao.test.tree.TreeTestResultCollectionDao; +import org.hibernate.HibernateException; +import org.hibernate.Session; +import org.hibernate.action.Executable; public class TreeTestResultCollectionDaoHibernate extends HibernateDaoSupport implements TreeTestResultCollectionDao { @@ -29,4 +35,34 @@ public class TreeTestResultCollectionDaoHibernate extends HibernateDaoSupport .find("from TreeTestResultCollection")); } + public void addResultToCollection(final TreeTestResultCollection ttrc, + final String resultUuid) { + getHibernateTemplate().execute(new HibernateCallback() { + public Object doInHibernate(Session session) + throws HibernateException, SQLException { + session.refresh(ttrc); + TreeTestResult ttr = (TreeTestResult) session.get( + TreeTestResult.class, resultUuid); + ttrc.getResults().add(ttr); + session.update(ttrc); + return ttrc; + } + }); + } + + public void removeResultFromCollection(final TreeTestResultCollection ttrc, + final String resultUuid) { + getHibernateTemplate().execute(new HibernateCallback() { + public Object doInHibernate(Session session) + throws HibernateException, SQLException { + session.refresh(ttrc); + TreeTestResult ttr = (TreeTestResult) session.get( + TreeTestResult.class, resultUuid); + if (ttrc.getResults().remove(ttr)) + session.update(ttrc); + return ttrc; + } + }); + } + } diff --git a/org.argeo.slc.hibernate/src/main/java/org/argeo/slc/hibernate/test/tree/TreeTestResultDaoHibernate.java b/org.argeo.slc.hibernate/src/main/java/org/argeo/slc/hibernate/test/tree/TreeTestResultDaoHibernate.java index 17c7d856d..04ff23738 100644 --- a/org.argeo.slc.hibernate/src/main/java/org/argeo/slc/hibernate/test/tree/TreeTestResultDaoHibernate.java +++ b/org.argeo.slc.hibernate/src/main/java/org/argeo/slc/hibernate/test/tree/TreeTestResultDaoHibernate.java @@ -1,13 +1,21 @@ package org.argeo.slc.hibernate.test.tree; +import java.sql.SQLException; import java.util.Date; import java.util.List; +import java.util.Map; import org.argeo.slc.core.SlcException; +import org.argeo.slc.core.structure.StructureElement; import org.argeo.slc.core.structure.tree.TreeSPath; +import org.argeo.slc.core.test.SimpleResultPart; import org.argeo.slc.core.test.TestResult; +import org.argeo.slc.core.test.tree.PartSubList; import org.argeo.slc.core.test.tree.TreeTestResult; import org.argeo.slc.dao.test.tree.TreeTestResultDao; +import org.hibernate.HibernateException; +import org.hibernate.Session; +import org.springframework.orm.hibernate3.HibernateCallback; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; /** @@ -49,17 +57,51 @@ public class TreeTestResultDaoHibernate extends HibernateDaoSupport implements return list; } - public void close(String id, Date closeDate) { - // TreeTestResult ttr = (TreeTestResult) getHibernateTemplate().load( - // TreeTestResult.class, id); - TreeTestResult ttr = getTestResult(id); - if (ttr != null) { - ttr.setCloseDate(closeDate); - getHibernateTemplate().update(ttr); - } else { - throw new SlcException("Result with id " + id - + " could not be closed because it was not found."); - } + public void close(final String testResultId, final Date closeDate) { + getHibernateTemplate().execute(new HibernateCallback() { + + public Object doInHibernate(Session session) + throws HibernateException, SQLException { + TreeTestResult treeTestResult = getTreeTestResult(session, + testResultId); + treeTestResult.setCloseDate(closeDate); + session.update(treeTestResult); + return treeTestResult; + } + }); + } + + public void addResultPart(final String testResultId, final TreeSPath path, + final SimpleResultPart resultPart, + final Map relatedElements) { + + getHibernateTemplate().execute(new HibernateCallback() { + + public Object doInHibernate(Session session) + throws HibernateException, SQLException { + TreeTestResult treeTestResult = getTreeTestResult(session, + testResultId); + PartSubList lst = treeTestResult.getResultParts().get(path); + if (lst == null) { + lst = new PartSubList(); + treeTestResult.getResultParts().put(path, lst); + } + lst.getParts().add(resultPart); + treeTestResult.getElements().putAll(relatedElements); + + session.update(treeTestResult); + return treeTestResult; + } + }); + } + protected TreeTestResult getTreeTestResult(Session session, + String testResultId) { + TreeTestResult treeTestResult = (TreeTestResult) session.get( + TreeTestResult.class, testResultId); + if (treeTestResult == null) + throw new SlcException("No result with id " + testResultId); + return treeTestResult; + } } diff --git a/org.argeo.slc.hibernate/src/test/java/org/argeo/slc/hibernate/process/SlcExecutionHibernateTest.java b/org.argeo.slc.hibernate/src/test/java/org/argeo/slc/hibernate/process/SlcExecutionHibernateTest.java index 2bbb092d5..28c7babcd 100644 --- a/org.argeo.slc.hibernate/src/test/java/org/argeo/slc/hibernate/process/SlcExecutionHibernateTest.java +++ b/org.argeo.slc.hibernate/src/test/java/org/argeo/slc/hibernate/process/SlcExecutionHibernateTest.java @@ -18,8 +18,8 @@ public class SlcExecutionHibernateTest extends HibernateTestCase { SlcExecutionDao dao = getBean(SlcExecutionDao.class); SlcExecution slcExec = SlcExecutionTestUtils.createSimpleSlcExecution(); - slcExec.getSteps().add(new SlcExecutionStep("LOG", "A log line")); - slcExec.getSteps().add(new SlcExecutionStep("LOG", "Two log\nlines")); + slcExec.getSteps().add(new SlcExecutionStep("A log line")); + slcExec.getSteps().add(new SlcExecutionStep("Two log\nlines")); dao.create(slcExec); @@ -32,8 +32,8 @@ public class SlcExecutionHibernateTest extends HibernateTestCase { // slcExecution Creation SlcExecution slcExec = SlcExecutionTestUtils.createSimpleSlcExecution(); - slcExec.getSteps().add(new SlcExecutionStep("LOG", "A log line")); - slcExec.getSteps().add(new SlcExecutionStep("LOG", "Two log\nlines")); + slcExec.getSteps().add(new SlcExecutionStep("A log line")); + slcExec.getSteps().add(new SlcExecutionStep("Two log\nlines")); dao.create(slcExec); @@ -54,7 +54,7 @@ public class SlcExecutionHibernateTest extends HibernateTestCase { slcExecRetrieved.getSteps().get(0) .setLogLines(logLineListStep0); slcExecRetrieved.getSteps().add( - new SlcExecutionStep("LOG", "Three \n log \n lines")); + new SlcExecutionStep("Three \n log \n lines")); return null; } });