Package eu.planets_project.tb.impl.data.util

Source Code of eu.planets_project.tb.impl.data.util.TBDigitalObjectContentResolver

/*******************************************************************************
* 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.impl.data.util;

import java.io.IOException;
import java.io.InputStream;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

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

import eu.planets_project.ifr.core.storage.api.DigitalObjectManager.DigitalObjectNotFoundException;
import eu.planets_project.ifr.core.storage.impl.util.PDURI;
import eu.planets_project.services.datatypes.DigitalObject;
import eu.planets_project.services.datatypes.Metadata;
import eu.planets_project.tb.api.data.util.DigitalObjectRefBean;

/**
* This servlet returns the content stored in the JCR repo for the provided
* digital object id (permanent uri).
*
* @author <a href="mailto:christian.sadilek@ait.ac.at">Christian Sadilek</a>
*/
public class TBDigitalObjectContentResolver extends HttpServlet
  private static final long serialVersionUID = -8269793550349486731L;
 
  private static Log log = LogFactory.getLog(TBDigitalObjectContentResolver.class);
  private DataHandlerImpl dh = new DataHandlerImpl();
 
  private static final int BUFFER_SIZE = 4096;
  private static final String ID_PARAMETER_NAME = "id";
  private static final String MIME_TYPE_METADATA_NAME = "mimeType";

  @Override
  protected void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
    InputStream is = null;
    String id = request.getParameter(ID_PARAMETER_NAME);
   
    try {
      if(id==null) throw new DigitalObjectNotFoundException("id is null");

      // Fix up any encoding issues:
      id = PDURI.encodePlanetsUriStringAsUri(id).toASCIIString();
     
      DigitalObjectRefBean digoRef = dh.get(id);
      if(digoRef==null) throw new DigitalObjectNotFoundException("digital object "+id+" not found");
     
      // set the metadata if it's contained within the digital object
      DigitalObject object = digoRef.getDigitalObject();
      for(Metadata md : object.getMetadata()) {
        if(md.getName().equals(MIME_TYPE_METADATA_NAME))
          response.setContentType(md.getContent());
      }
     
      is = digoRef.getContentAsStream();
     
      // read from input stream and write to client
      int bytesRead = 0;
      byte[] buffer = new byte[BUFFER_SIZE];
      while((bytesRead=is.read(buffer))!=-1){
          response.getOutputStream().write(buffer, 0, bytesRead);
      }     
    } catch (DigitalObjectNotFoundException e) {
      log.info(e.getMessage(),e);
      response.sendError(HttpServletResponse.SC_NOT_FOUND, "object not found with id="+id);
    } finally {
      if(is!=null) is.close();
    }
  }
}
TOP

Related Classes of eu.planets_project.tb.impl.data.util.TBDigitalObjectContentResolver

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.