package org.splat.service;
+import java.util.Collection;
+import java.util.Vector;
+
import org.splat.dal.bo.som.KnowledgeElement;
import org.splat.dal.bo.som.ProgressState;
+import org.splat.dal.bo.som.Scenario;
import org.splat.dal.dao.som.KnowledgeElementDAO;
import org.splat.kernel.InvalidPropertyException;
import org.splat.log.AppLogger;
+import org.splat.service.dto.KnowledgeElementDTO;
import org.splat.service.technical.IndexService;
+import org.splat.som.Step;
+import org.splat.util.BeanHelper;
import org.springframework.transaction.annotation.Transactional;
/**
* Injected study service.
*/
private StudyService _studyService;
+ /**
+ * Injected project element service.
+ */
+ private ProjectElementService _projectElementService;
/**
* {@inheritDoc}
/**
* Update knowledge element in the database and in the lucene index.
- * @param knowledgeElement the knowledge element to update
+ *
+ * @param knowledgeElement
+ * the knowledge element to update
* @return true if updating succeeded
*/
protected boolean update(KnowledgeElement knowledgeElement) {
*
* @see org.splat.service.KnowledgeElementService#selectKnowledgeElement(long)
*/
- @Transactional(readOnly=true)
+ @Transactional(readOnly = true)
public KnowledgeElement selectKnowledgeElement(long index) {
KnowledgeElement result = getKnowledgeElementDAO().get(index);
- getStudyService().loadWorkflow(result.getOwnerScenario().getOwnerStudy());
+ getStudyService().loadWorkflow(
+ result.getOwnerScenario().getOwnerStudy());
+ return result;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.splat.service.KnowledgeElementService#getKnowledgeElement(long)
+ */
+ @Transactional(readOnly = true)
+ public KnowledgeElementDTO getKnowledgeElement(long index) {
+ KnowledgeElement kelm = getKnowledgeElementDAO().get(index);
+ getStudyService().loadWorkflow(kelm.getOwnerScenario().getOwnerStudy());
+ KnowledgeElementDTO result = BeanHelper.copyBean(kelm,
+ KnowledgeElementDTO.class);
+ result.setScenarioTitle(kelm.getOwnerScenario().getTitle());
+ result.setStudyTitle(kelm.getOwnerScenario().getOwnerStudy().getTitle());
+ result.getInvolving().addAll(getAllSteps(kelm.getOwnerScenario()));
+ return result;
+ }
+
+ /**
+ * Get all steps of the scenario.
+ * @param scenar the scenario
+ * @return collection of steps
+ */
+ private Collection<? extends Step> getAllSteps(Scenario scenar) {
+ Vector<Step> result = new Vector<Step>();
+ Step[] step = getProjectElementService().getSteps(scenar);
+
+ int base = step[0].getNumber();
+ int last = step[step.length - 1].getNumber();
+ for (int i = 0; i < step.length; i++) {
+ result.add(step[i]);
+ }
+ step = getProjectElementService().getSteps(scenar.getOwnerStudy());
+ for (int i = step.length - 1; i > -1; i--) {
+ if (step[i].getNumber() >= base)
+ continue;
+ result.add(0, step[i]);
+ }
+ for (int i = 0; i < step.length; i++) {
+ if (step[i].getNumber() <= last)
+ continue;
+ result.add(step[i]);
+ }
return result;
}
/**
* Get the studyService.
+ *
* @return the studyService
*/
public StudyService getStudyService() {
/**
* Set the studyService.
- * @param studyService the studyService to set
+ *
+ * @param studyService
+ * the studyService to set
*/
public void setStudyService(StudyService studyService) {
_studyService = studyService;
}
+
+ /**
+ * Get the projectElementService.
+ * @return the projectElementService
+ */
+ public ProjectElementService getProjectElementService() {
+ return _projectElementService;
+ }
+
+ /**
+ * Set the projectElementService.
+ * @param projectElementService the projectElementService to set
+ */
+ public void setProjectElementService(ProjectElementService projectElementService) {
+ _projectElementService = projectElementService;
+ }
}