package ch.ffhs.webE.action; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; import java.util.Set; import javax.servlet.http.HttpServletRequest; import org.apache.struts2.StrutsStatics; import ch.ffhs.webE.dao.HistoryDAO; import ch.ffhs.webE.dao.RelationshipDAO; import ch.ffhs.webE.dao.RelationshipTypeDAO; import ch.ffhs.webE.dao.TermDAO; import ch.ffhs.webE.dao.UserDAO; import ch.ffhs.webE.domain.ActionType; import ch.ffhs.webE.domain.History; import ch.ffhs.webE.domain.ObjectEntity; import ch.ffhs.webE.domain.ObjectType; import ch.ffhs.webE.domain.Relationship; import ch.ffhs.webE.domain.RelationshipType; import ch.ffhs.webE.domain.Term; import ch.ffhs.webE.domain.User; import com.opensymphony.xwork2.Action; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; import com.opensymphony.xwork2.ModelDriven; /** * Implements actions applicable to relationship editing * * @author Thomas Lahn */ public class RelationshipAction extends ActionSupport implements ModelDriven { private static final long serialVersionUID = 1L; private List relationshipTypes = new ArrayList(); private final RelationshipTypeDAO relationshipTypeDAO = new RelationshipTypeDAO(); private List terms = new ArrayList(); private final TermDAO termDAO = new TermDAO(); private List relationshipList = new ArrayList(); private Relationship relationship = new Relationship(); /** * The term that was just saved (added, renamed) */ private Relationship modifiedRelationship; private final RelationshipDAO relationshipDAO = new RelationshipDAO(); private final UserDAO userDAO = new UserDAO(); private Set history; private final HistoryDAO historyDAO = new HistoryDAO(); /** * Session object */ Map session = ActionContext.getContext().getSession(); /** * @var true if the relationship is to be edited/renamed, * false otherwise */ public boolean edit = false; /** * @var true if a relationship was added, false * otherwise */ public boolean added = false; private final HttpServletRequest request = (HttpServletRequest) ActionContext .getContext().get(StrutsStatics.HTTP_REQUEST); /* * (non-Javadoc) * * @see com.opensymphony.xwork2.ModelDriven#getModel() */ public Relationship getModel() { return this.relationship; } /** * DB query for relationship list * * @return SUCCESS */ public String list() { this.setTerms(this.termDAO.getList()); this.setRelationshipTypes(this.relationshipTypeDAO.getList()); this.setRelationshipList(this.relationshipDAO.getList()); return Action.SUCCESS; } /** * Executes the DB query to save the relationship * * @return {@link Action#SUCCESS} */ public String save() { this.relationship.setTermFrom(this.termDAO.getById(Integer .parseInt(this.request.getParameter("term1")))); this.relationship.setTermTo(this.termDAO.getById(Integer .parseInt(this.request.getParameter("term2")))); this.relationship.setRelationshipType(this.relationshipTypeDAO .getById(Integer.parseInt(this.request.getParameter("type")))); User user = this.userDAO.getByUsername((String) this.session .get("username")); Date now = new Date(); ObjectEntity obj; int action = 0; if ("false".equals(this.request.getParameter("edit"))) { /* Add a new relationship */ obj = new ObjectEntity(user, new ObjectType(ObjectType.RELATIONSHIP), user, null, new Date(), false, null, null, this.relationship); this.relationship.setObject(obj); this.added = true; action = ActionType.ADD; } else { obj = new ObjectEntity(); obj.setId(this.relationship.getObjectId()); action = ActionType.MODIFY; } this.edit = false; String result = Action.SUCCESS; if (this.relationshipDAO.saveOrUpdate(this.relationship)) { String comment = this.request.getParameter("comment"); History historyRecord = new History(user, new ActionType(action), obj, "(" + this.relationship.getTermFrom().getName() + ") (" + this.relationship.getRelationshipType().getNameFrom() + ") (" + this.relationship.getTermTo().getName() + ")", comment, now); this.historyDAO.saveOrUpdate(historyRecord); } else { result = Action.ERROR; } this.setModifiedRelationship(this.relationship); this.setRelationship(null); this.list(); return result; } /** * @return {@link Action#SUCCESS} if id > 0, {@link Action#ERROR} * otherwise */ public String edit() { int id = this.getIdParameter(); String result = Action.ERROR; if (id > 0) { this.setRelationship(this.relationshipDAO.getById(id)); if (this.getRelationship() != null) { this.edit = true; result = Action.SUCCESS; } } this.list(); return result; } /** * deletes a user, gets the ID from the "id" parameter that was submitted with * the HTTP request * * @return String - either SUCCESS or ERROR constant */ public String delete() { int id = this.getIdParameter(); /* Check for malicious ID values */ String result = Action.SUCCESS; if (id > 0) { this.relationshipDAO.delete(id); } else { result = Action.ERROR; } this.list(); return result; } /** * Gets the ID Parameter for update / delete requests * * @return int from the ID request. If not set or wrong, it gives back -1 */ private int getIdParameter() { int id = -1; try { id = Integer.parseInt(this.request.getParameter("id")); //$NON-NLS-1$ } catch (Exception e) { /* TODO: Logging - wrong parameter set */ } return id; } /* Standard getters and setters */ /** * @return The relationship edited with this instance */ public Relationship getRelationship() { return this.relationship; } /** * @param relationship * The relationship edited with this instance */ public void setRelationship(Relationship relationship) { this.relationship = relationship; } /** * @return The list of terms edited with this instance */ public List getRelationshipList() { return this.relationshipList; } /** * @param relationshipList * The list of terms edited with this instance */ public void setRelationshipList(List relationshipList) { this.relationshipList = relationshipList; } /** * @return the relationshipTypes */ public List getRelationshipTypes() { return this.relationshipTypes; } /** * @param relationshipTypes * the relationshipTypes to set */ public void setRelationshipTypes(List relationshipTypes) { this.relationshipTypes = relationshipTypes; } /** * @return the terms */ public List getTerms() { return this.terms; } /** * @param terms * the terms to set */ public void setTerms(List terms) { this.terms = terms; } /** * @return the modifiedRelationship */ public Relationship getModifiedRelationship() { return this.modifiedRelationship; } /** * @param modifiedRelationship * the modifiedRelationship to set */ public void setModifiedRelationship(Relationship modifiedRelationship) { this.modifiedRelationship = modifiedRelationship; } /** * @return the history */ public Set getHistory() { return this.history; } /** * @param history * the history to set */ public void setHistory(Set history) { this.history = history; } }