package no.met.metadataeditor.view; import java.io.Serializable; import javax.faces.application.FacesMessage; import javax.faces.bean.ManagedBean; import javax.faces.bean.ViewScoped; import javax.faces.context.FacesContext; import javax.servlet.http.HttpServletRequest; import no.met.metadataeditor.datastore.DataStore; import no.met.metadataeditor.datastore.DataStoreFactory; @ManagedBean @ViewScoped public class CompareVersionBean implements Serializable { private static final long serialVersionUID = -4719497168625095877L; private String project; private String record; public boolean hasVersions(){ DataStore datastore = DataStoreFactory.getInstance(project); if(!datastore.metadataExists(record)){ return false; } if(!datastore.metadataExists(record + DataStore.THEIRS_IDENTIFIER)){ return false; } return true; } public String getCurrentVersion(){ DataStore datastore = DataStoreFactory.getInstance(project); return datastore.readMetadata(record); } public String getTheirVersion(){ DataStore datastore = DataStoreFactory.getInstance(project); return datastore.readMetadata(record + DataStore.THEIRS_IDENTIFIER); } public String selectCurrentVersion(){ UserBean user = getUser(); if( user.isValidated() ){ DataStore datastore = DataStoreFactory.getInstance(project); datastore.deleteMetadata(record + DataStore.THEIRS_IDENTIFIER, user.getUsername(), user.getPassword()); FacesMessage msg = new FacesMessage("Current version selected and other version has been removed."); msg.setSeverity(FacesMessage.SEVERITY_INFO); FacesContext.getCurrentInstance().addMessage(null, msg); } else { FacesMessage msg = new FacesMessage("You need to login to select version"); msg.setSeverity(FacesMessage.SEVERITY_ERROR); FacesContext.getCurrentInstance().addMessage(null, msg); } return "editor.xhtml?faces-redirect=true&includeViewParams=true"; } public String selectTheirVersion(){ UserBean user = getUser(); if( user.isValidated() ){ DataStore datastore = DataStoreFactory.getInstance(project); String otherXML = datastore.readMetadata(record + DataStore.THEIRS_IDENTIFIER); datastore.writeMetadata(record, otherXML, user.getUsername(), user.getPassword()); datastore.deleteMetadata(record + DataStore.THEIRS_IDENTIFIER, user.getUsername(), user.getPassword()); FacesMessage msg = new FacesMessage("Version selected and written to record."); msg.setSeverity(FacesMessage.SEVERITY_INFO); FacesContext.getCurrentInstance().addMessage(null, msg); } else { FacesMessage msg = new FacesMessage("You need to login to select version"); msg.setSeverity(FacesMessage.SEVERITY_ERROR); FacesContext.getCurrentInstance().addMessage(null, msg); } return "editor.xhtml?faces-redirect=true&includeViewParams=true"; } public String getProject() { return project; } public void setProject(String project) { this.project = project; } public String getRecord() { return record; } public void setRecord(String record) { this.record = record; } /** * @return The UserBean object for the current user. */ private UserBean getUser(){ // IMPLEMENTATION NOTE: This was first implemented as a @ManagedProperty, but that did not work // for unknown reasons. It seemed like the UserBean object changed between request even if should // stay the same. So this workaround was added instead. HttpServletRequest request = (HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest(); return (UserBean) request.getSession().getAttribute("userBean"); } }