001: /*
002: * Copyright (c) 2007, intarsys consulting GmbH
003: *
004: * Redistribution and use in source and binary forms, with or without
005: * modification, are permitted provided that the following conditions are met:
006: *
007: * - Redistributions of source code must retain the above copyright notice,
008: * this list of conditions and the following disclaimer.
009: *
010: * - Redistributions in binary form must reproduce the above copyright notice,
011: * this list of conditions and the following disclaimer in the documentation
012: * and/or other materials provided with the distribution.
013: *
014: * - Neither the name of intarsys nor the names of its contributors may be used
015: * to endorse or promote products derived from this software without specific
016: * prior written permission.
017: *
018: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
019: * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
020: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
021: * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
022: * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
023: * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
024: * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
025: * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
026: * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
027: * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
028: * POSSIBILITY OF SUCH DAMAGE.
029: */
030: package de.intarsys.pdf.st;
031:
032: import java.io.IOException;
033:
034: import de.intarsys.pdf.cos.COSIndirectObject;
035: import de.intarsys.pdf.cos.COSObject;
036: import de.intarsys.pdf.cos.COSObjectKey;
037: import de.intarsys.pdf.crypt.ISystemSecurityHandler;
038: import de.intarsys.pdf.parser.COSLoadException;
039:
040: /**
041: * An entry in a XRef stream.
042: */
043: public class STXRefEntryCompressed extends STXRefEntry {
044: private COSObjectKey streamObjectKey;
045:
046: private int index;
047:
048: public STXRefEntryCompressed(COSObjectKey key,
049: COSObjectKey stmObjectKey, int indexOfObject) {
050: super (key);
051: this .streamObjectKey = stmObjectKey;
052: this .index = indexOfObject;
053: }
054:
055: /*
056: * (non-Javadoc)
057: *
058: * @see de.intarsys.pdf.storage.STXRefEntry#isFree()
059: */
060: public boolean isFree() {
061: return false;
062: }
063:
064: public COSObject load(STDocument doc,
065: ISystemSecurityHandler securityHandler) throws IOException,
066: COSLoadException {
067: COSIndirectObject streamObjectRef = doc
068: .getObjectReference(getStreamObjectKey());
069: COSObject objStrmIO = streamObjectRef.dereference();
070: if ((objStrmIO != null) && !objStrmIO.isNull()) {
071: COSObjectStream strm = (COSObjectStream) COSObjectStream.META
072: .createFromCos(objStrmIO);
073: return strm.loadObject(index, doc.getParser());
074: }
075: return null;
076: }
077:
078: /*
079: * (non-Javadoc)
080: *
081: * @see de.intarsys.pdf.storage.STXRefEntry#getColumn1()
082: */
083: public long getColumn1() {
084: return 0;
085: }
086:
087: /*
088: * (non-Javadoc)
089: *
090: * @see de.intarsys.pdf.storage.STXRefEntry#getColumn2()
091: */
092: public int getColumn2() {
093: return 0;
094: }
095:
096: /*
097: * (non-Javadoc)
098: *
099: * @see de.intarsys.pdf.storage.STXRefEntry#fill(int)
100: */
101: public STXRefEntryOccupied fill(int pos) {
102: return null;
103: }
104:
105: /*
106: * (non-Javadoc)
107: *
108: * @see de.intarsys.pdf.storage.STXRefEntry#unlink()
109: */
110: protected void unlink() {
111: //
112: }
113:
114: /*
115: * (non-Javadoc)
116: *
117: * @see de.intarsys.pdf.storage.STXRefEntry#accept(de.intarsys.pdf.storage.IXRefEntryVisitor)
118: */
119: public void accept(IXRefEntryVisitor visitor)
120: throws XRefEntryVisitorException {
121: visitor.visitFromCompressed(this );
122: }
123:
124: public int getIndex() {
125: return index;
126: }
127:
128: public COSObjectKey getStreamObjectKey() {
129: return streamObjectKey;
130: }
131:
132: public int getStreamObjectNumber() {
133: return getStreamObjectKey().getObjectNumber();
134: }
135:
136: public STXRefEntry copy() {
137: return new STXRefEntryCompressed(getKey(),
138: getStreamObjectKey(), getIndex());
139: }
140: }
|