+ * Initialize the action. Get selected study from the session.
+ *
+ * @return SUCCESS if no exceptions
+ */
+ public String doInitialize() {
+ _openStudy = getOpenStudy();
+ setMenu();
+ return SUCCESS;
+ }
+
+ /**
+ * Add a new or update an existing knowledge element of the selected scenario in the open study.
+ *
+ * @return SUCCESS if operation succeeded, ERROR if Runtime exception, otherwise INPUT
+ */
+ public String doSetKnowledge() {
+
+ String res = SUCCESS;
+ setMenu();
+
+ try {
+ _openStudy = getOpenStudy();
+
+ if ((_knowledgeTitle == null) || (_knowledgeValue == null)) {
+ KnowledgeElementDTO kelm = new KnowledgeElementDTO(Integer
+ .valueOf(_knowledgeType), _knowledgeTitle,
+ _knowledgeValue);
+ if (_knowledgeValue == null) { // Renaming of an existing Knowledge Element
+ getKnowledgeElementService().rename(kelm, _knowledgeTitle);
+ } else { // Edition of a knowledge
+ getKnowledgeElementService().update(kelm, _knowledgeValue);
+ }
+ _openStudy.update(kelm); // For updating the truncated value
+ } else { // Addition of a new Knowledge Element
+ KnowledgeElement.Properties kprop = new KnowledgeElement.Properties();
+ KnowledgeElementType ktype = getKnowledgeElementTypeService()
+ .selectType(Integer.valueOf(_knowledgeType));
+ kprop.setType(ktype).setTitle(_knowledgeTitle).setValue(
+ _knowledgeValue).setAuthor(getConnectedUser());
+ _openStudy.add(getScenarioService().addKnowledgeElement(
+ (Scenario) _openStudy.getSelectedStep().getOwner(),
+ kprop));
+ getMenu(Constants.STUDY_MENU)
+ .selects(_openStudy.getSelection()); // Updates the menu icon, in case of first added document
+ }
+ } catch (RuntimeException saverror) {
+ LOG.error("Reason:", saverror);
+ res = ERROR;
+ } catch (Exception error) {
+ LOG.error("Exception while saving a knowledge: ", error);
+ res = INPUT;
+ }
+ return res;
+ }
+
+ /**
+ * Delete a knowledge element from the current scenario.
+ *
+ * @return SUCCESS if no exceptions
+ */
+ public String doDeleteKnowledge() {
+ _openStudy = getOpenStudy();
+ Step step = _openStudy.getSelectedStep();
+ Scenario scene = (Scenario) step.getOwner(); // It is necessarily a Scenario
+
+ KnowledgeElement kelm = scene.getKnowledgeElement(Integer
+ .valueOf(_myindex));
+ getScenarioService().removeKnowledgeElement(scene, kelm); // The knowledge element necessarily exists
+
+ _openStudy.remove(kelm);
+ updateMenu();
+
+ return SUCCESS;
+ }
+
+ /**
+ * Promote a knowledge element from the current scenario.
+ *
+ * @return SUCCESS if no exceptions
+ */
+ public String doPromoteKnowledge() {
+ getKnowledgeElementService().promote(getKnowledgeElement()); // The knowledge element necessarily exists
+ updateMenu();
+ return SUCCESS;
+ }
+
+ /**
+ * Demote a knowledge element from the current scenario.
+ *
+ * @return SUCCESS if no exceptions
+ */
+ public String doDemoteKnowledge() {
+ getKnowledgeElementService().demote(getKnowledgeElement()); // The knowledge element necessarily exists
+ updateMenu();
+ return SUCCESS;
+ }
+
+ /**
+ * Get selected knowledge element.
+ *
+ * @return the selected knowledge element
+ */
+ private KnowledgeElement getKnowledgeElement() {
+ _openStudy = getOpenStudy();
+ Step step = _openStudy.getSelectedStep();
+ Scenario scene = (Scenario) step.getOwner(); // It is necessarily a Scenario
+ return scene.getKnowledgeElement(Integer.valueOf(_myindex));
+ }
+
+ /**
+ * Update current menu.
+ */
+ private void updateMenu() {
+ getMenu(Constants.STUDY_MENU).selects(_openStudy.getSelection()); // Updates the menu icon, in case of last removed document
+ setMenu();
+ }
+
+ // ==============================================================================================================================
+ // Getters and setters
+ // ==============================================================================================================================
+
+ /**
+ * Get the type of the modified knowledge element.
+ *
+ * @return the knowledge type name
+ */
+ public String getKnowledgeType() {
+ return _knowledgeType;
+ }
+
+ /**
+ * Get the id of the modified knowledge element.
+ *
+ * @return the knowledge element id
+ */
+ public String getSelectedKnowledge() {
+ return _myindex;
+ }
+
+ /**
+ * Set the type of the modified knowledge element.
+ *
+ * @param type
+ * the knowledge type name
+ */
+ public void setKnowledgeType(final String type) {
+ this._knowledgeType = type;
+ }
+
+ /**
+ * Set the title of the modified knowledge element.
+ *
+ * @param title
+ * the new knowledge title