diff src/main/java/edu/harvard/iq/dataverse/ThemeWidgetFragment.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/ThemeWidgetFragment.java	Tue Sep 08 17:00:21 2015 +0200
@@ -0,0 +1,284 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package edu.harvard.iq.dataverse;
+
+import edu.harvard.iq.dataverse.api.Datasets;
+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.UpdateDataverseThemeCommand;
+import edu.harvard.iq.dataverse.util.JsfHelper;
+import static edu.harvard.iq.dataverse.util.JsfHelper.JH;
+import java.io.File;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.nio.file.StandardCopyOption;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.annotation.PreDestroy;
+import javax.ejb.EJB;
+import javax.faces.application.FacesMessage;
+import javax.faces.component.UIComponent;
+import javax.faces.component.html.HtmlInputText;
+import javax.faces.context.FacesContext;
+import javax.faces.validator.ValidatorException;
+import javax.faces.view.ViewScoped;
+import javax.inject.Inject;
+import javax.inject.Named;
+
+import org.apache.commons.lang.StringUtils;
+import org.primefaces.context.RequestContext;
+
+import org.primefaces.event.FileUploadEvent;
+import org.primefaces.model.UploadedFile;
+
+/**
+ *
+ * @author ellenk
+ */
+@ViewScoped
+@Named
+public class ThemeWidgetFragment implements java.io.Serializable {
+    static final String DEFAULT_LOGO_BACKGROUND_COLOR = "F5F5F5";
+    static final String DEFAULT_BACKGROUND_COLOR = "F5F5F5";
+    static final String DEFAULT_LINK_COLOR = "428BCA";
+    static final String DEFAULT_TEXT_COLOR = "888888";
+    private static final Logger logger = Logger.getLogger(ThemeWidgetFragment.class.getCanonicalName());   
+
+    @Inject DataversePage dataversePage;
+    private File tempDir;
+    private File uploadedFile;
+    private Dataverse editDv= new Dataverse();
+    private HtmlInputText linkUrlInput;
+    private HtmlInputText taglineInput;
+ 
+      @Inject
+    DataverseSession session;
+    @EJB
+    EjbDataverseEngine commandEngine;
+    @EJB
+    DataverseServiceBean dataverseServiceBean;
+
+    public HtmlInputText getLinkUrlInput() {
+        return linkUrlInput;
+    }
+
+    public void setLinkUrlInput(HtmlInputText linkUrlInput) {
+        this.linkUrlInput = linkUrlInput;
+    }
+
+    public HtmlInputText getTaglineInput() {
+        return taglineInput;
+    }
+
+    public void setTaglineInput(HtmlInputText taglineInput) {
+        this.taglineInput = taglineInput;
+    }
+
+ 
+   
+    
+    private  void createTempDir() {
+          try {
+            File tempRoot = Files.createDirectories(Paths.get("../docroot/logos/temp")).toFile();
+            tempDir = Files.createTempDirectory(tempRoot.toPath(),editDv.getId().toString()).toFile();
+        } catch (IOException e) {
+            throw new RuntimeException("Error creating temp directory", e); // improve error handling
+        }
+    }
+    
+    @PreDestroy
+    /**
+     *  Cleanup by deleting temp directory and uploaded files  
+     */
+    public void cleanupTempDirectory() {
+        try {
+           
+            if (tempDir != null) {
+                for (File f : tempDir.listFiles()) {
+                    Files.deleteIfExists(f.toPath());
+                }
+                Files.deleteIfExists(tempDir.toPath());
+            }
+        } catch (IOException e) {
+            throw new RuntimeException("Error deleting temp directory", e); // improve error handling
+        }
+        uploadedFile=null;
+        tempDir=null;
+    }
+    
+    public void checkboxListener() {
+        // not sure if this is needed for the ajax component
+    }
+   
+
+    public void initEditDv() {
+        editDv = dataverseServiceBean.find(editDv.getId());
+        if (editDv.getOwner()==null) {
+            editDv.setThemeRoot(true);
+        }
+        if (editDv.getDataverseTheme()==null && editDv.isThemeRoot()) {
+            editDv.setDataverseTheme(initDataverseTheme());
+            
+        }
+     }
+    
+    private DataverseTheme initDataverseTheme() {
+        DataverseTheme dvt = new DataverseTheme();
+        dvt.setLinkColor(DEFAULT_LINK_COLOR);
+        dvt.setLogoBackgroundColor(DEFAULT_LOGO_BACKGROUND_COLOR);
+        dvt.setBackgroundColor(DEFAULT_BACKGROUND_COLOR);
+        dvt.setTextColor(DEFAULT_TEXT_COLOR);
+        dvt.setDataverse(editDv);
+        return dvt;
+    }
+    
+    public Dataverse getEditDv() {
+        return editDv; 
+    }
+
+    public void setEditDv(Dataverse editDV) {
+         this.editDv = editDV;
+      
+          
+    }
+    public void validateTagline(FacesContext context, UIComponent component, Object value) throws ValidatorException {
+
+        if (!StringUtils.isEmpty((String) value) && ((String) value).length() > 140) {
+            FacesMessage msg = new FacesMessage("Tagline must be at most 140 characters.");
+            msg.setSeverity(FacesMessage.SEVERITY_ERROR);
+
+            throw new ValidatorException(msg);
+        }
+
+    }
+    
+public void validateUrl(FacesContext context, UIComponent component, Object value) throws ValidatorException {
+    try {
+        if (!StringUtils.isEmpty((String)value)){
+            URL test = new URL((String)value);
+        }
+    } catch(MalformedURLException e) {
+        FacesMessage msg =
+              new FacesMessage(" URL validation failed.",
+              "Please provide URL.");
+      msg.setSeverity(FacesMessage.SEVERITY_ERROR);
+    
+      throw new ValidatorException(msg);
+    }
+    
+  }
+   
+    
+    public String getTempDirName() {
+        if (tempDir!=null) {
+            return tempDir.getName();
+        } else {
+            return null;
+        }
+    }
+    
+    public boolean uploadExists() {
+        return uploadedFile!=null;
+    }
+    /**
+     * Copy uploaded file to temp area, until we are ready to save
+     * Copy filename into Dataverse logo 
+     * @param event 
+     */
+
+    public void handleImageFileUpload(FileUploadEvent event) {
+
+            logger.finer("entering fileUpload");
+            if (this.tempDir==null) {
+                createTempDir();
+                logger.finer("created tempDir");
+            }
+            UploadedFile uFile = event.getFile();
+        try {         
+            uploadedFile = new File(tempDir, uFile.getFileName());     
+            if (!uploadedFile.exists()) {
+                uploadedFile.createNewFile();
+            }
+            logger.finer("created file");
+            Files.copy(uFile.getInputstream(), uploadedFile.toPath(),StandardCopyOption.REPLACE_EXISTING);
+            logger.finer("copied inputstream to file");
+            editDv.getDataverseTheme().setLogo(uFile.getFileName());
+
+        } catch (IOException e) {
+            logger.finer("caught IOException");
+            logger.throwing("ThemeWidgetFragment", "handleImageFileUpload", e);
+            throw new RuntimeException("Error uploading logo file", e); // improve error handling
+        }
+        // If needed, set the default values for the logo
+        if (editDv.getDataverseTheme().getLogoFormat()==null) {
+            editDv.getDataverseTheme().setLogoFormat(DataverseTheme.ImageFormat.SQUARE);
+        }
+        logger.finer("end handelImageFileUpload");
+    }
+    
+    public void removeLogo() {
+        editDv.getDataverseTheme().setLogo(null);
+        this.cleanupTempDirectory();
+       
+    }
+
+    public boolean getInheritCustomization() {
+        boolean inherit= editDv==null ? true : !editDv.getThemeRoot();
+         return inherit;
+    }
+    
+    public void setInheritCustomization(boolean inherit) {
+        editDv.setThemeRoot(!inherit);
+        if (!inherit) {
+            if (editDv.getDataverseTheme(true)==null) {
+                editDv.setDataverseTheme(initDataverseTheme());
+            }
+        }
+    }
+    public void resetForm() {
+        RequestContext context = RequestContext.getCurrentInstance();
+        context.reset(":dataverseForm:themeWidgetsTabView");
+    }
+    
+    public String cancel() {
+         return "dataverse?faces-redirect=true&alias="+editDv.getAlias();  // go to dataverse page 
+    }
+    
+   
+    
+
+    public String save() {
+        // If this Dv isn't the root, delete the uploaded file and remove theme
+        // before saving.
+        if (!editDv.isThemeRoot()) {
+            uploadedFile=null;
+            editDv.setDataverseTheme(null);
+        }
+        Command<Dataverse>    cmd = new UpdateDataverseThemeCommand(editDv, this.uploadedFile, session.getUser());  
+        try {
+            dataversePage.setDataverse(commandEngine.submit(cmd));           
+            dataversePage.setEditMode(null);
+            
+        } catch (Exception ex) {
+            logger.log(Level.SEVERE, "error updating dataverse theme", ex);
+           FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_FATAL, "Dataverse Save Failed-", JH.localize("dataverse.theme.failure")));
+        
+          return null;
+        } finally {
+              this.cleanupTempDirectory(); 
+        }
+        JsfHelper.addSuccessMessage(JH.localize("dataverse.theme.success"));    
+        return "dataverse?faces-redirect=true&alias="+editDv.getAlias();  // go to dataverse page 
+    }
+   
+    
+ }
+
+
+