+ * {@inheritDoc}
+ *
+ * @see org.splat.service.KnowledgeElementService#getKnowledgeElement(long)
+ */
+ @Transactional(readOnly = true)
+ public KnowledgeElementDTO getKnowledgeElement(final 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(final 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 indexService.
+ *
+ * @return the indexService