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.CreateTemplateCommand; 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 DataverseRequestServiceBean dvRequestService; @Inject PermissionsWrapper permissionsWrapper; @Inject DataverseSession session; public enum EditMode { CREATE, METADATA, LICENSE, LICENSEADD }; 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; } private int selectedTabIndex; public int getSelectedTabIndex() { return selectedTabIndex; } public void setSelectedTabIndex(int selectedTabIndex) { this.selectedTabIndex = selectedTabIndex; } public String init() { dataverse = dataverseService.find(ownerId); if (dataverse == null) { return permissionsWrapper.notFound(); } if (!permissionsWrapper.canIssueCommand(dataverse, UpdateDataverseCommand.class)) { return permissionsWrapper.notAuthorized(); } if (templateId != null) { // edit or view existing for a template template = templateService.find(templateId); template.setDataverse(dataverse); template.setMetadataValueBlocks(); if (template.getTermsOfUseAndAccess() != null) { } else { TermsOfUseAndAccess terms = new TermsOfUseAndAccess(); terms.setTemplate(template); terms.setLicense(TermsOfUseAndAccess.License.CC0); template.setTermsOfUseAndAccess(terms); } updateDatasetFieldInputLevels(); } else if (ownerId != null) { // create mode for a new template editMode = TemplatePage.EditMode.CREATE; template = new Template(this.dataverse); TermsOfUseAndAccess terms = new TermsOfUseAndAccess(); terms.setTemplate(template); terms.setLicense(TermsOfUseAndAccess.License.CC0); template.setTermsOfUseAndAccess(terms); updateDatasetFieldInputLevels(); } else { throw new RuntimeException("On Template page without id or ownerid."); // improve error handling } return null; } 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(String redirectPage) { //SEK - removed dead code 1/6/2015 boolean create = false; Command<Void> cmd; Long createdId = new Long(0); Template created; try { if (editMode == EditMode.CREATE) { template.setCreateTime(new Timestamp(new Date().getTime())); template.setUsageCount(new Long(0)); dataverse.getTemplates().add(template); created = commandEngine.submit(new CreateTemplateCommand(template, dvRequestService.getDataverseRequest(), dataverse)); createdId = created.getId(); //cmd = new UpdateDataverseCommand(dataverse, null, null, dvRequestService.getDataverseRequest(), null); create = true; //commandEngine.submit(cmd); } else { cmd = new UpdateDataverseTemplateCommand(dataverse, template, dvRequestService.getDataverseRequest()); commandEngine.submit(cmd); } } catch (EJBException ex) { StringBuilder error = new StringBuilder(); error.append(ex).append(" "); error.append(ex.getMessage()).append(" "); Throwable cause = ex; while (cause.getCause() != null) { cause = cause.getCause(); error.append(cause).append(" "); error.append(cause.getMessage()).append(" "); } // //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); String retString = ""; if (!redirectPage.isEmpty() && createdId.intValue() > 0) { retString = "/template.xhtml?id=" + createdId + "&ownerId=" + dataverse.getId() + "&editMode=LICENSEADD&faces-redirect=true"; } else { retString = "/manage-templates.xhtml?dataverseId=" + dataverse.getId() + "&faces-redirect=true"; } return retString; } public void cancel() { editMode = null; } }