eu.planets_project.tb.api.data.util.DigitalObjectRefBean.java Source code

Java tutorial

Introduction

Here is the source code for eu.planets_project.tb.api.data.util.DigitalObjectRefBean.java

Source

/*******************************************************************************
 * Copyright (c) 2007, 2010 The Planets Project Partners.
 *
 * All rights reserved. This program and the accompanying 
 * materials are made available under the terms of the 
 * Apache License, Version 2.0 which accompanies 
 * this distribution, and is available at 
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 *******************************************************************************/
package eu.planets_project.tb.api.data.util;

import java.io.File;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URLEncoder;

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

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import eu.planets_project.ifr.core.common.conf.PlanetsServerConfig;
import eu.planets_project.services.datatypes.Content;
import eu.planets_project.services.datatypes.DigitalObject;

/**
 * @author AnJackson
 * TODO Remove a lot of reproduction of code and logic, c.f. DigitalObjectTreeNode etc etc.
 */
public class DigitalObjectRefBean {
    // A Log:
    private static Log log = LogFactory.getLog(DigitalObjectRefBean.class);

    String name;
    String id;
    URI domUri;
    DigitalObject dob;
    File file;

    /**
     * 
     * @param name
     * @param downloadUri
     * @param domUri
     * @param dob
     */
    public DigitalObjectRefBean(String name, String id, URI domUri, DigitalObject dob) {
        this.name = name;
        this.id = id;
        this.domUri = domUri;
        this.dob = dob;
    }

    /**
     * @param name2
     * @param createDownloadUri
     * @param file
     */
    public DigitalObjectRefBean(String name, String id, File file) {
        this.name = name;
        this.id = id;
        this.file = file;
        this.dob = new DigitalObject.Builder(Content.byReference(file)).title(name).build();
        //this.dob = new DigitalObject.Builder( Content.byValue( file ) ).title(name).build();
    }

    /**
     * @return the name
     */
    public String getName() {
        return name;
    }

    /**
     * @return the download
     */
    public URI getDownloadUri() {
        return createDownloadUri(id, "/reader/download.jsp");
    }

    /**
     * @return
     */
    public URI getThumbnailUri() {
        return createDownloadUri(id, "/reader/thumbnail.jsp");
    }

    /**
     * 
     * @return
     */
    public URI getDomUri() {
        return domUri;

    }

    /**
     * 
     * @return
     */
    public DigitalObject getDigitalObject() {
        return dob;

    }

    /**
     * @return
     */
    public InputStream getContentAsStream() {
        // File Case:
        if (file != null)
            try {
                return new FileInputStream(file);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
                return null;
            }
        // Digital Object case:
        if (this.getDigitalObject() != null && this.getDigitalObject().getContent() != null)
            return this.getDigitalObject().getContent().getInputStream();
        return null;

    }

    /**
     * Note that this only uses the extension to determine the mime-type.
     * 
     * @return The mime-type of this entity.
     */
    public String getMimeType() {
        String mimetype = null;

        // File Case:
        if (this.file != null)
            mimetype = new MimetypesFileTypeMap().getContentType(file);

        // Based only on URI:
        if (this.domUri != null)
            mimetype = new MimetypesFileTypeMap().getContentType(this.domUri.getPath());

        // Digital Object Case:
        if (this.dob != null && dob.getTitle() != null)
            mimetype = new MimetypesFileTypeMap().getContentType(dob.getTitle());

        return mimetype;
    }

    /**
     * @return 
     */
    public long getSize() {
        // File Case:
        if (this.file != null)
            return this.file.length();
        // Digital Object Case:
        if (this.getDigitalObject() == null)
            return -1;
        if (this.getDigitalObject().getContent() == null)
            return -1;
        if (this.getDigitalObject().getContent().length() > 0) {
            return this.getDigitalObject().getContent().length();
        } else {
            try {
                return this.getDigitalObject().getContent().getInputStream().available();
            } catch (IOException e) {
                e.printStackTrace();
                return -1;
            }
        }
    }

    /* -------------------------------------------------------------------------------------------------- */

    private URI createDownloadUri(String id, String prefix) {
        // Define the download URI:
        log.debug("Creating the download URL.");
        String context = "/testbed";
        if (FacesContext.getCurrentInstance() != null) {
            HttpServletRequest req = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext()
                    .getRequest();
            context = req.getContextPath();
        }
        URI download = null;
        try {
            download = new URI("https", PlanetsServerConfig.getHostname() + ":" + PlanetsServerConfig.getSSLPort(),
                    context + prefix, "fid=" + URLEncoder.encode(id, "UTF-8"), null);
            /* This can be used if the above is causing problems
            download = new URI( null, null, 
                context+"/reader/download.jsp","fid="+id, null);
                */
        } catch (URISyntaxException e) {
            e.printStackTrace();
            download = null;
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
            download = null;
        }
        log.debug("Created download URI: " + download);
        return download;
    }
}