de.mpg.imeji.presentation.upload.UploadBean.java Source code

Java tutorial

Introduction

Here is the source code for de.mpg.imeji.presentation.upload.UploadBean.java

Source

/**
 * License: src/main/resources/license/escidoc.license
 */
package de.mpg.imeji.presentation.upload;

import java.io.InputStream;
import java.net.URI;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;

import javax.faces.context.FacesContext;
import javax.servlet.http.HttpServletRequest;

import org.apache.commons.fileupload.FileItemIterator;
import org.apache.commons.fileupload.FileItemStream;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.log4j.Logger;

import de.escidoc.core.resources.om.item.Item;
import de.mpg.imeji.logic.controller.UserController;
import de.mpg.imeji.logic.vo.CollectionImeji;
import de.mpg.imeji.logic.vo.User;
import de.mpg.imeji.presentation.beans.SessionBean;
import de.mpg.imeji.presentation.collection.ViewCollectionBean;
import de.mpg.imeji.presentation.escidoc.EscidocHelper;
import de.mpg.imeji.presentation.upload.deposit.DepositController;
import de.mpg.imeji.presentation.util.BeanHelper;
import de.mpg.imeji.presentation.util.LoginHelper;
import de.mpg.imeji.presentation.util.PropertyReader;
import de.mpg.imeji.presentation.util.UrlHelper;

public class UploadBean {
    private CollectionImeji collection;
    private SessionBean sessionBean;
    private String id;
    private String escidocContext;
    private String escidocUserHandle;
    private User user;
    private String title;
    private String format;
    private String mimetype;
    private String description;
    private String totalNum;
    private int sNum;
    private int fNum;
    private List<String> sFiles;
    private List<String> fFiles;
    private static Logger logger = Logger.getLogger(Upload.class);

    public UploadBean() {
        sessionBean = (SessionBean) BeanHelper.getSessionBean(SessionBean.class);
        try {
            escidocContext = PropertyReader.getProperty("escidoc.imeji.context.id");
            logInEscidoc();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void status() {
        if (UrlHelper.getParameterBoolean("init")) {
            loadCollection();
            totalNum = "";
            sNum = 0;
            fNum = 0;
            sFiles = new ArrayList<String>();
            fFiles = new ArrayList<String>();
        } else if (UrlHelper.getParameterBoolean("start")) {
            try {
                upload();
            } catch (Exception e) {
                e.printStackTrace();
            }
        } else if (UrlHelper.getParameterBoolean("done")) {
            try {
                totalNum = UrlHelper.getParameterValue("totalNum");
                report();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    public void upload() throws Exception {
        HttpServletRequest req = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext()
                .getRequest();
        boolean isMultipart = ServletFileUpload.isMultipartContent(req);
        if (isMultipart) {
            ServletFileUpload upload = new ServletFileUpload();
            // Parse the request
            FileItemIterator iter = upload.getItemIterator(req);
            while (iter.hasNext()) {
                FileItemStream item = iter.next();
                String name = item.getFieldName();
                InputStream stream = item.openStream();
                if (!item.isFormField()) {
                    title = item.getName();
                    StringTokenizer st = new StringTokenizer(title, ".");
                    while (st.hasMoreTokens()) {
                        format = st.nextToken();
                    }
                    mimetype = "image/" + format;
                    // TODO remove static image description
                    description = "";
                    try {
                        UserController uc = new UserController(null);
                        User user = uc.retrieve(getUser().getEmail());
                        try {
                            DepositController controller = new DepositController();
                            Item escidocItem = controller.createEscidocItem(stream, title, mimetype, format);
                            controller.createImejiImage(collection, user, escidocItem.getOriginObjid(), title,
                                    URI.create(EscidocHelper.getOriginalResolution(escidocItem)),
                                    URI.create(EscidocHelper.getThumbnailUrl(escidocItem)),
                                    URI.create(EscidocHelper.getWebResolutionUrl(escidocItem)));
                            // controller.createImejiImage(collection, user, "escidoc:123", title,
                            // URI.create("http://imeji.org/test"), URI.create("http://imeji.org/test"),
                            // URI.create("http://imeji.org/test"));
                            sNum += 1;
                            sFiles.add(title);
                        } catch (Exception e) {
                            fNum += 1;
                            fFiles.add(title);
                            logger.error("Error uploading image: ", e);
                            // throw new RuntimeException(e);
                        }
                    } catch (Exception e) {
                        throw new RuntimeException(e);
                    }
                }
            }
            logger.info("Upload finished");
        }
    }

    public String report() throws Exception {
        setTotalNum(totalNum);
        setsNum(sNum);
        setsFiles(sFiles);
        setfNum(fNum);
        setfFiles(fFiles);
        return "";
    }

    public String getTotalNum() {
        System.err.println("totalNum = " + totalNum);
        return totalNum;
    }

    public void setTotalNum(String totalNum) {
        this.totalNum = totalNum;
    }

    public int getsNum() {
        return sNum;
    }

    public void setsNum(int sNum) {
        this.sNum = sNum;
    }

    public int getfNum() {
        return fNum;
    }

    public void setfNum(int fNum) {
        this.fNum = fNum;
    }

    public List<String> getsFiles() {
        return sFiles;
    }

    public void setsFiles(List<String> sFiles) {
        this.sFiles = sFiles;
    }

    public List<String> getfFiles() {
        return fFiles;
    }

    public void setfFiles(List<String> fFiles) {
        this.fFiles = fFiles;
    }

    public void loadCollection() {
        if (id != null) {
            ((ViewCollectionBean) BeanHelper.getSessionBean(ViewCollectionBean.class)).setId(id);
            ((ViewCollectionBean) BeanHelper.getSessionBean(ViewCollectionBean.class)).init();
            // collection = ObjectLoader.loadCollection(ObjectHelper.getURI(CollectionImeji.class,id),
            // sessionBean.getUser());
            collection = ((ViewCollectionBean) BeanHelper.getSessionBean(ViewCollectionBean.class)).getCollection();
        } else {
            BeanHelper.error(sessionBean.getLabel("error") + "No ID in URL");
        }
    }

    public void logInEscidoc() throws Exception {
        String userName = PropertyReader.getProperty("imeji.escidoc.user");
        String password = PropertyReader.getProperty("imeji.escidoc.password");
        escidocUserHandle = LoginHelper.login(userName, password);
    }

    public CollectionImeji getCollection() {
        return collection;
    }

    public void setCollection(CollectionImeji collection) {
        this.collection = collection;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getEscidocContext() {
        return escidocContext;
    }

    public void setEscidocContext(String escidocContext) {
        this.escidocContext = escidocContext;
    }

    public String getEscidocUserHandle() {
        return escidocUserHandle;
    }

    public void setEscidocUserHandle(String escidocUserHandle) {
        this.escidocUserHandle = escidocUserHandle;
    }

    public User getUser() {
        return sessionBean.getUser();
    }

    public void setUser(User user) {
        this.user = user;
    }
}