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.pd;
031:
032: import de.intarsys.pdf.cds.CDSDate;
033: import de.intarsys.pdf.cos.COSBasedObject;
034: import de.intarsys.pdf.cos.COSDictionary;
035: import de.intarsys.pdf.cos.COSName;
036: import de.intarsys.pdf.cos.COSObject;
037:
038: /**
039: * Application specific transparently handled data objects.
040: *
041: */
042: public class PDApplicationData extends PDObject {
043: /**
044: * The meta class implementation
045: */
046: static public class MetaClass extends PDObject.MetaClass {
047: protected MetaClass(Class instanceClass) {
048: super (instanceClass);
049: }
050:
051: protected COSBasedObject doCreateCOSBasedObject(COSObject object) {
052: return new PDApplicationData(object);
053: }
054: }
055:
056: static public final COSName DK_LastModified = COSName
057: .constant("LastModified");
058:
059: static public final COSName DK_Private = COSName
060: .constant("Private");
061:
062: /** The meta class instance */
063: static public final MetaClass META = new MetaClass(MetaClass.class
064: .getDeclaringClass());
065:
066: /**
067: * Create the receiver class from an already defined {@link COSDictionary}.
068: * NEVER use the constructor directly.
069: *
070: * @param object
071: * the PDDocument containing the new object
072: */
073: protected PDApplicationData(COSObject object) {
074: super (object);
075: }
076:
077: /**
078: * Assign the private data.
079: *
080: * @param data
081: * The private data for this.
082: *
083: * @return The /Private entry previously associated with this.
084: */
085: public COSObject cosSetData(COSObject data) {
086: return cosSetField(DK_Private, data);
087: }
088:
089: /**
090: * The private data entry or <code>COSNull</code>
091: *
092: * @return The private data entry or <code>COSNull</code>
093: */
094: public COSObject cosGetData() {
095: return cosGetField(DK_Private);
096: }
097:
098: /**
099: * The timestamp of th elast modification.
100: *
101: * @return The timestamp of th elast modification.
102: */
103: public CDSDate getLastModification() {
104: return CDSDate.createFromCOS(cosGetField(DK_LastModified)
105: .asString());
106: }
107:
108: /**
109: * Assign a new timestamp for the last modification.
110: */
111: public void touch() {
112: setFieldObject(DK_LastModified, new CDSDate());
113: }
114:
115: /*
116: * (non-Javadoc)
117: *
118: * @see de.intarsys.pdf.pd.PDObject#initializeFromScratch()
119: */
120: protected void initializeFromScratch() {
121: super.initializeFromScratch();
122: touch();
123: }
124: }
|