Package com.adobe.dp.epub.opf

Source Code of com.adobe.dp.epub.opf.Resource

/*******************************************************************************
* Copyright (c) 2009, Adobe Systems Incorporated
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* ·        Redistributions of source code must retain the above copyright
*          notice, this list of conditions and the following disclaimer.
*
* ·        Redistributions in binary form must reproduce the above copyright
*       notice, this list of conditions and the following disclaimer in the
*       documentation and/or other materials provided with the distribution.
*
* ·        Neither the name of Adobe Systems Incorporated nor the names of its
*       contributors may be used to endorse or promote products derived from
*       this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*******************************************************************************/

package com.adobe.dp.epub.opf;

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

import com.adobe.dp.epub.io.DataSource;
import com.adobe.dp.xml.util.SMapImpl;

/**
* This class represents an arbitrary resource in a Publication. Typically one
* of this class subclasses is used.
*/
public class Resource {

  String id;

  String name;

  String mediaType;

  DataSource source;

  Publication epub;
 
  private SMapImpl serializationAttributes;
 
  Resource(Publication epub, String name, String type, DataSource source) {
    this.epub = epub;
    this.mediaType = type;
    this.name = name;
    this.source = source;
  }

  /**
   * Get resource name, including complete path from the Publication container
   * root
   *
   * @return resource name
   */
  public String getName() {
    return name;
  }

  /**
   * Resource MIME type, e.g. "image/jpeg"
   *
   * @return MIME type
   */
  public String getMediaType() {
    return mediaType;
  }

  /**
   * Make a relative URL that points to another resource in the same
   * Publication
   *
   * @param target
   *            target Resource
   * @param fragment
   *            fragment identifier, null if none
   * @return relative URL
   */
  public String makeReference(String targetName, String fragment) {
    StringBuffer ref = new StringBuffer();
    int index = 0;
    while (true) {
      int m = name.indexOf('/', index);
      int t = targetName.indexOf('/', index);
      if (m < 0)
        break;
      if (m != t)
        break;
      String mn = name.substring(index, m);
      String tn = targetName.substring(index, t);
      if (!mn.equals(tn))
        break;
      index = m + 1;
    }
    String tail = targetName.substring(index);
    while (true) {
      int m = name.indexOf('/', index);
      if (m < 0)
        break;
      ref.append("../");
      index = m + 1;
    }
    ref.append(tail);
    if (fragment != null) {
      ref.append("#");
      ref.append(fragment);
    }
    return ref.toString();
  }

  /**
   * Serialize this resource into OutputStream
   *
   * @param out
   *            OutputStream
   * @throws IOException
   *             if I/O error occurs while writing
   */
  public void serialize(OutputStream out) throws IOException {
    InputStream in =null;
    try {
      byte[] buffer = new byte[4096];
      int len;
      in= source.getInputStream();
      while ((len = in.read(buffer)) > 0) {
        out.write(buffer, 0, len);
      }
    } catch (IOException e) {
      e.printStackTrace();
    }finally{
      out.close();
      if(in!=null){
        in.close();
      }
    }
  }

  /**
   * Indicates if this resource can be compressed. Most resources can and
   * should be compressed when packaged into OCF container. However, some
   * files, such as bitmap images or video file may be already compressed and
   * should not be compressed again.
   *
   * @return true if this resource should be compressed, false otherwise
   */
  public boolean canCompress() {
    return true;
  }

  public ResourceRef getResourceRef() {
    return epub.getResourceRef(name);
  }

  public Publication getPublication() {
    return epub;
  }
 
  public String getId() {
    return id;
  }

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

  public SMapImpl getSerializationAttributes() {
    return serializationAttributes;
  }


 
  public void  putSerializationAttribute(String ns, String name, Object value){
    if(serializationAttributes==null){
      serializationAttributes=new SMapImpl();
    }
    serializationAttributes.put(ns, name, value);
   
  }
}
TOP

Related Classes of com.adobe.dp.epub.opf.Resource

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.