Mercurial > hg > LGDataverses
diff src/main/java/edu/harvard/iq/dataverse/TemplatePage.java @ 10:a50cf11e5178
Rewrite LGDataverse completely upgrading to dataverse4.0
| author | Zoe Hong <zhong@mpiwg-berlin.mpg.de> |
|---|---|
| date | Tue, 08 Sep 2015 17:00:21 +0200 |
| parents | |
| children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/edu/harvard/iq/dataverse/TemplatePage.java Tue Sep 08 17:00:21 2015 +0200 @@ -0,0 +1,214 @@ +package edu.harvard.iq.dataverse; + +import edu.harvard.iq.dataverse.engine.command.Command; +import edu.harvard.iq.dataverse.engine.command.exception.CommandException; +import edu.harvard.iq.dataverse.engine.command.impl.UpdateDataverseCommand; +import edu.harvard.iq.dataverse.engine.command.impl.UpdateDataverseTemplateCommand; +import edu.harvard.iq.dataverse.util.JsfHelper; +import static edu.harvard.iq.dataverse.util.JsfHelper.JH; +import java.sql.Timestamp; +import java.util.Date; +import java.util.Set; +import javax.ejb.EJB; +import javax.ejb.EJBException; +import javax.faces.application.FacesMessage; +import javax.faces.context.FacesContext; +import javax.faces.view.ViewScoped; +import javax.inject.Inject; +import javax.inject.Named; +import javax.validation.ConstraintViolation; +import javax.validation.Validation; +import javax.validation.Validator; +import javax.validation.ValidatorFactory; + +/** + * + * @author skraffmiller + */ +@ViewScoped +@Named("TemplatePage") +public class TemplatePage implements java.io.Serializable { + + @EJB + TemplateServiceBean templateService; + + @EJB + DataverseServiceBean dataverseService; + + @EJB + EjbDataverseEngine commandEngine; + + @EJB + DataverseFieldTypeInputLevelServiceBean dataverseFieldTypeInputLevelService; + + @Inject + DataverseSession session; + + public enum EditMode { + + CREATE, METADATA + }; + + private Template template; + private Dataverse dataverse; + private EditMode editMode; + private Long ownerId; + private Long templateId; + + public Long getTemplateId() { + return templateId; + } + + public void setTemplateId(Long templateId) { + this.templateId = templateId; + } + + public Template getTemplate() { + return template; + } + + public void setTemplate(Template template) { + this.template = template; + } + + public Dataverse getDataverse() { + return dataverse; + } + + public void setDataverse(Dataverse dataverse) { + this.dataverse = dataverse; + } + + public EditMode getEditMode() { + return editMode; + } + + public void setEditMode(EditMode editMode) { + this.editMode = editMode; + } + + public Long getOwnerId() { + return ownerId; + } + + public void setOwnerId(Long ownerId) { + this.ownerId = ownerId; + } + + public void init() { + if (templateId != null) { // edit or view existing for a template + dataverse = dataverseService.find(ownerId); + template = templateService.find(templateId); + template.setDataverse(dataverse); + template.setMetadataValueBlocks(); + updateDatasetFieldInputLevels(); + } else if (ownerId != null) { + // create mode for a new template + dataverse = dataverseService.find(ownerId); + editMode = TemplatePage.EditMode.CREATE; + template = new Template(this.dataverse); + updateDatasetFieldInputLevels(); + } else { + throw new RuntimeException("On Template page without id or ownerid."); // improve error handling + } + } + + private void updateDatasetFieldInputLevels(){ + Long dvIdForInputLevel = ownerId; + if (!dataverseService.find(ownerId).isMetadataBlockRoot()){ + dvIdForInputLevel = dataverseService.find(ownerId).getMetadataRootId(); + } + + for (DatasetField dsf: template.getFlatDatasetFields()){ + DataverseFieldTypeInputLevel dsfIl = dataverseFieldTypeInputLevelService.findByDataverseIdDatasetFieldTypeId(dvIdForInputLevel, dsf.getDatasetFieldType().getId()); + if (dsfIl != null){ + dsf.setInclude(dsfIl.isInclude()); + } else { + dsf.setInclude(true); + } + } + } + + public void edit(TemplatePage.EditMode editMode) { + this.editMode = editMode; + } + + public String save() { + + boolean dontSave = false; + ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); + Validator validator = factory.getValidator(); + for (DatasetField dsf : template.getFlatDatasetFields()) { + dsf.setValidationMessage(null); // clear out any existing validation message + Set<ConstraintViolation<DatasetField>> constraintViolations = validator.validate(dsf); + for (ConstraintViolation<DatasetField> constraintViolation : constraintViolations) { + FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Validation Error", constraintViolation.getMessage())); + dsf.setValidationMessage(constraintViolation.getMessage()); + dontSave = true; + break; // currently only support one message, so we can break out of the loop after the first constraint violation + } + for (DatasetFieldValue dsfv : dsf.getDatasetFieldValues()) { + dsfv.setValidationMessage(null); // clear out any existing validation message + Set<ConstraintViolation<DatasetFieldValue>> constraintViolations2 = validator.validate(dsfv); + for (ConstraintViolation<DatasetFieldValue> constraintViolation : constraintViolations2) { + FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Validation Error", constraintViolation.getMessage())); + dsfv.setValidationMessage(constraintViolation.getMessage()); + dontSave = true; + break; // currently only support one message, so we can break out of the loop after the first constraint violation + } + } + } + if (dontSave) { + return ""; + } + boolean create = false; + Command cmd; + try { + if (editMode == EditMode.CREATE) { + template.setCreateTime(new Timestamp(new Date().getTime())); + template.setUsageCount(new Long(0)); + dataverse.getTemplates().add(template); + cmd = new UpdateDataverseCommand(dataverse, null, null, session.getUser(), null); + create = true; + commandEngine.submit(cmd); + } else { + cmd = new UpdateDataverseTemplateCommand(dataverse, template, session.getUser()); + commandEngine.submit(cmd); + } + + } catch (EJBException ex) { + StringBuilder error = new StringBuilder(); + error.append(ex + " "); + error.append(ex.getMessage() + " "); + Throwable cause = ex; + while (cause.getCause() != null) { + cause = cause.getCause(); + error.append(cause + " "); + error.append(cause.getMessage() + " "); + } + // + //FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Template Save Failed", " - " + error.toString())); + System.out.print("dataverse " + dataverse.getName()); + System.out.print("Ejb exception"); + System.out.print(error.toString()); + JH.addMessage(FacesMessage.SEVERITY_FATAL, "Template Save Failed"); + return null; + } catch (CommandException ex) { + System.out.print("command exception"); + System.out.print(ex.toString()); + //FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Template Save Failed", " - " + ex.toString())); + JH.addMessage(FacesMessage.SEVERITY_FATAL, "Template Save Failed"); + return null; + //logger.severe(ex.getMessage()); + } + editMode = null; + String msg = (create)? "Template has been created.": "Template has been edited and saved."; + JsfHelper.addFlashMessage(msg); + return "/manage-templates.xhtml?dataverseId=" + dataverse.getId() + "&faces-redirect=true"; + } + + public void cancel() { + editMode = null; + } + +}
