Mercurial > hg > LGDataverses
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 + } + + + } + + +
