Mercurial > hg > LGDataverses
view src/main/java/edu/harvard/iq/dataverse/TemplatePage.java @ 14:be7787c36e58 default tip
new: nofity LGSercies for deleted files
| author | Zoe Hong <zhong@mpiwg-berlin.mpg.de> |
|---|---|
| date | Mon, 02 Nov 2015 16:41:23 +0100 |
| parents | a50cf11e5178 |
| children |
line wrap: on
line source
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; } }
