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.COSDictionary;
035: import de.intarsys.pdf.cos.COSObject;
036: import de.intarsys.pdf.cos.COSTrailer;
037: import de.intarsys.pdf.crypt.ISystemSecurityHandler;
038: import de.intarsys.pdf.parser.COSLoadException;
039: import de.intarsys.pdf.writer.COSWriter;
040:
041: /**
042: * A section in a classical XRef.
043: */
044: public class STTrailerXRefSection extends STXRefSection {
045: private COSDictionary trailerDict;
046:
047: private STStreamXRefSection xRefStream;
048:
049: public STTrailerXRefSection(STDocument doc, long offset) {
050: super (doc, offset);
051: }
052:
053: public STTrailerXRefSection(STDocument doc) {
054: super (doc);
055: this .trailerDict = COSDictionary.create();
056: }
057:
058: public COSDictionary cosGetDict() {
059: return trailerDict;
060: }
061:
062: public void cosSetDict(COSDictionary pTrailerDict) {
063: this .trailerDict = pTrailerDict;
064: }
065:
066: protected boolean isStreamed() {
067: return false;
068: }
069:
070: public STStreamXRefSection getXRefStream() {
071: return xRefStream;
072: }
073:
074: public void setXRefStream(STStreamXRefSection xRefStream) {
075: this .xRefStream = xRefStream;
076: setXRefStmOffset(xRefStream.getOffset());
077: }
078:
079: public STXRefSection createSuccessor() {
080: STTrailerXRefSection newXRefSection = new STTrailerXRefSection(
081: getDoc());
082: COSDictionary newTrailer = (COSDictionary) cosGetDict()
083: .copyShallow();
084: newTrailer.remove(COSTrailer.DK_Prev);
085: newTrailer.remove(STXRefSection.DK_XRefStm);
086: newXRefSection.cosSetDict(newTrailer);
087: newXRefSection.setPrevious(this );
088: return newXRefSection;
089: }
090:
091: public COSObject load(int objectNumber,
092: ISystemSecurityHandler securityHandler) throws IOException,
093: COSLoadException {
094: if (getXRefStream() != null) {
095: COSObject loaded = getXRefStream().load(objectNumber,
096: securityHandler);
097: if (loaded != null) {
098: return loaded;
099: }
100: }
101: return super .load(objectNumber, securityHandler);
102: }
103:
104: public COSObject cosGetObject() {
105: return trailerDict;
106: }
107:
108: public AbstractXRefWriter getWriter(COSWriter cosWriter) {
109: return new XRefTrailerWriter(cosWriter);
110: }
111: }
|