Package eu.planets_project.tb.api.data.util

Source Code of eu.planets_project.tb.api.data.util.DigitalObjectRefBean

/*******************************************************************************
* 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() > ) {
            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;
    }
}
TOP

Related Classes of eu.planets_project.tb.api.data.util.DigitalObjectRefBean

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.