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.COSName;
035: import de.intarsys.pdf.cos.COSObject;
036:
037: /**
038: * A generic markup snnotation implementation.
039: */
040: public class PDMarkupAnnotation extends PDAnnotation {
041: /**
042: * The meta class implementation
043: */
044: static public class MetaClass extends PDAnnotation.MetaClass {
045: protected MetaClass(Class instanceClass) {
046: super (instanceClass);
047: }
048:
049: protected COSBasedObject doCreateCOSBasedObject(COSObject object) {
050: return new PDMarkupAnnotation(object);
051: }
052: }
053:
054: /** The meta class instance */
055: static public final MetaClass META = new MetaClass(MetaClass.class
056: .getDeclaringClass());
057:
058: public static final COSName DK_CreationDate = COSName
059: .constant("CreationDate");
060:
061: public static final COSName DK_Subj = COSName.constant("Subj");
062:
063: public static final COSName DK_T = COSName.constant("T");
064:
065: public static final COSName DK_Popup = COSName.constant("Popup");
066:
067: public static final COSName DK_CA = COSName.constant("CA");
068:
069: public static final COSName DK_L = COSName.constant("L");
070:
071: public static final COSName DK_RC = COSName.constant("RC");
072:
073: public static final COSName DK_Vertices = COSName
074: .constant("Vertices");
075:
076: public static final COSName CN_Subtype_Ink = COSName
077: .constant("Ink");
078:
079: public static final COSName CN_Subtype_Square = COSName
080: .constant("Square");
081:
082: public static final COSName CN_Subtype_Circle = COSName
083: .constant("Circle");
084:
085: public static final COSName CN_Subtype_Line = COSName
086: .constant("Line");
087:
088: public static final COSName CN_Subtype_Polygon = COSName
089: .constant("Polygon");
090:
091: public static final COSName CN_Subtype_PolyLine = COSName
092: .constant("PolyLine");
093:
094: public static final COSName DK_InkList = COSName
095: .constant("InkList");
096:
097: public static final COSName DK_IC = COSName.constant("IC");
098:
099: public static final COSName DK_IRT = COSName.constant("IRT");
100:
101: protected PDMarkupAnnotation(COSObject object) {
102: super (object);
103: }
104:
105: public String getText() {
106: return getFieldString(DK_T, "");
107: }
108:
109: public void setText(String text) {
110: setFieldString(DK_T, text);
111: }
112:
113: public String getSubject() {
114: return getFieldString(DK_Subj, "");
115: }
116:
117: public PDAnnotation getInReplyTo() {
118: return (PDAnnotation) PDAnnotation.META
119: .createFromCos(cosGetField(DK_IRT));
120: }
121:
122: public void setSubject(String value) {
123: setFieldString(DK_Subj, value);
124: }
125:
126: public CDSDate getCreationDate() {
127: return CDSDate.createFromCOS(cosGetField(DK_CreationDate)
128: .asString());
129: }
130:
131: public PDAnnotation getPopup() {
132: return (PDAnnotation) PDAnnotation.META
133: .createFromCos(cosGetField(DK_Popup));
134: }
135:
136: public void setPopup(PDPopupAnnotation popup) {
137: setFieldObject(DK_Popup, popup);
138: }
139:
140: public double getOpacity() {
141: return getFieldFixed(DK_CA, 1);
142: }
143:
144: public void setOpacity(float value) {
145: setFieldFixed(DK_CA, value);
146: }
147:
148: public String getRichContent() {
149: return getFieldString(DK_RC, "");
150: }
151:
152: public float[] getInnerColor() {
153: return getFieldFixedArray(DK_IC, null);
154: }
155:
156: public void setInnerColor(float[] color) {
157: setFieldFixedArray(DK_IC, color);
158: }
159:
160: public String getSubtypeLabel() {
161: if (CN_Subtype_Circle.equals(cosGetSubtype())) {
162: return "Circle";
163: } else if (CN_Subtype_Ink.equals(cosGetSubtype())) {
164: return "Freehand";
165: } else if (CN_Subtype_Line.equals(cosGetSubtype())) {
166: return "Line";
167: } else if (CN_Subtype_Polygon.equals(cosGetSubtype())) {
168: return "Polygon";
169: } else if (CN_Subtype_PolyLine.equals(cosGetSubtype())) {
170: return "Polyline";
171: } else if (CN_Subtype_Square.equals(cosGetSubtype())) {
172: return "Square";
173: } else {
174: return "Annotation";
175: }
176: }
177:
178: /*
179: * (non-Javadoc)
180: *
181: * @see de.intarsys.pdf.pd.PDAnnotation#isMarkupAnnotation()
182: */
183: public boolean isMarkupAnnotation() {
184: return true;
185: }
186:
187: public COSObject cosSetField(COSName name, COSObject cosObj) {
188: if (!DK_M.equals(name)) {
189: touch();
190: }
191: return super.cosSetField(name, cosObj);
192: }
193: }
|