001: /*
002: * $Id: RtfInfoElement.java 2776 2007-05-23 20:01:40Z hallm $
003: * $Name$
004: *
005: * Copyright 2003, 2004 by Mark Hall
006: *
007: * The contents of this file are subject to the Mozilla Public License Version 1.1
008: * (the "License"); you may not use this file except in compliance with the License.
009: * You may obtain a copy of the License at http://www.mozilla.org/MPL/
010: *
011: * Software distributed under the License is distributed on an "AS IS" basis,
012: * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
013: * for the specific language governing rights and limitations under the License.
014: *
015: * The Original Code is 'iText, a free JAVA-PDF library'.
016: *
017: * The Initial Developer of the Original Code is Bruno Lowagie. Portions created by
018: * the Initial Developer are Copyright (C) 1999, 2000, 2001, 2002 by Bruno Lowagie.
019: * All Rights Reserved.
020: * Co-Developer of the code is Paulo Soares. Portions created by the Co-Developer
021: * are Copyright (C) 2000, 2001, 2002 by Paulo Soares. All Rights Reserved.
022: *
023: * Contributor(s): all the names of the contributors are added in the source code
024: * where applicable.
025: *
026: * Alternatively, the contents of this file may be used under the terms of the
027: * LGPL license (the "GNU LIBRARY GENERAL PUBLIC LICENSE"), in which case the
028: * provisions of LGPL are applicable instead of those above. If you wish to
029: * allow use of your version of this file only under the terms of the LGPL
030: * License and not to allow others to use your version of this file under
031: * the MPL, indicate your decision by deleting the provisions above and
032: * replace them with the notice and other provisions required by the LGPL.
033: * If you do not delete the provisions above, a recipient may use your version
034: * of this file under either the MPL or the GNU LIBRARY GENERAL PUBLIC LICENSE.
035: *
036: * This library is free software; you can redistribute it and/or modify it
037: * under the terms of the MPL as stated above or under the terms of the GNU
038: * Library General Public License as published by the Free Software Foundation;
039: * either version 2 of the License, or any later version.
040: *
041: * This library is distributed in the hope that it will be useful, but WITHOUT
042: * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
043: * FOR A PARTICULAR PURPOSE. See the GNU Library general Public License for more
044: * details.
045: *
046: * If you didn't download this code from the following link, you should check if
047: * you aren't using an obsolete version:
048: * http://www.lowagie.com/iText/
049: */
050:
051: package com.lowagie.text.rtf.document;
052:
053: import java.io.ByteArrayOutputStream;
054: import java.io.IOException;
055: import java.io.OutputStream;
056: import java.text.ParseException;
057: import java.text.SimpleDateFormat;
058: import java.util.Date;
059:
060: import com.lowagie.text.Meta;
061: import com.lowagie.text.rtf.RtfElement;
062:
063: /**
064: * Stores one information group element. Valid elements are
065: * author, title, subject, keywords, producer and creationdate.
066: *
067: * @version $Id: RtfInfoElement.java 2776 2007-05-23 20:01:40Z hallm $
068: * @author Mark Hall (mhall@edu.uni-klu.ac.at)
069: * @author Thomas Bickel (tmb99@inode.at)
070: */
071: public class RtfInfoElement extends RtfElement {
072:
073: /**
074: * Constant for the author element
075: */
076: private static final byte[] INFO_AUTHOR = "\\author".getBytes();
077: /**
078: * Constant for the subject element
079: */
080: private static final byte[] INFO_SUBJECT = "\\subject".getBytes();
081: /**
082: * Constant for the keywords element
083: */
084: private static final byte[] INFO_KEYWORDS = "\\keywords".getBytes();
085: /**
086: * Constant for the title element
087: */
088: private static final byte[] INFO_TITLE = "\\title".getBytes();
089: /**
090: * Constant for the producer element
091: */
092: private static final byte[] INFO_PRODUCER = "\\operator".getBytes();
093: /**
094: * Constant for the creationdate element
095: */
096: private static final byte[] INFO_CREATION_DATE = "\\creationdate"
097: .getBytes();
098:
099: /**
100: * The type of this RtfInfoElement. The values from Element.INFO_ELEMENT_NAME are used.
101: */
102: private int infoType = -1;
103: /**
104: * The content of this RtfInfoElement
105: */
106: private String content = "";
107:
108: /**
109: * Constructs a RtfInfoElement based on the given Meta object
110: *
111: * @param doc The RtfDocument this RtfInfoElement belongs to
112: * @param meta The Meta object this RtfInfoElement is based on
113: */
114: public RtfInfoElement(RtfDocument doc, Meta meta) {
115: super (doc);
116: infoType = meta.type();
117: content = meta.getContent();
118: }
119:
120: /**
121: * Writes this RtfInfoElement
122: *
123: * @return A byte array containing the RtfInfoElement data
124: * @deprecated replaced by {@link #writeContent(OutputStream)}
125: */
126: public byte[] write() {
127: ByteArrayOutputStream result = new ByteArrayOutputStream();
128: try {
129: writeContent(result);
130: } catch (IOException ioe) {
131: ioe.printStackTrace();
132: }
133: return result.toByteArray();
134: }
135:
136: /**
137: * Writes the element content to the given output stream.
138: */
139: public void writeContent(final OutputStream result)
140: throws IOException {
141: result.write(OPEN_GROUP);
142: switch (infoType) {
143: case Meta.AUTHOR:
144: result.write(INFO_AUTHOR);
145: break;
146: case Meta.SUBJECT:
147: result.write(INFO_SUBJECT);
148: break;
149: case Meta.KEYWORDS:
150: result.write(INFO_KEYWORDS);
151: break;
152: case Meta.TITLE:
153: result.write(INFO_TITLE);
154: break;
155: case Meta.PRODUCER:
156: result.write(INFO_PRODUCER);
157: break;
158: case Meta.CREATIONDATE:
159: result.write(INFO_CREATION_DATE);
160: break;
161: default:
162: result.write(INFO_AUTHOR);
163: break;
164: }
165: result.write(DELIMITER);
166: if (infoType == Meta.CREATIONDATE) {
167: result.write(convertDate(content).getBytes());
168: } else {
169: result.write(content.getBytes());
170: }
171: result.write(CLOSE_GROUP);
172: }
173:
174: /**
175: * Converts a date from the format used by iText to the format required by
176: * rtf.<br>iText: EEE MMM dd HH:mm:ss zzz yyyy - rtf: \\'yr'yyyy\\'mo'MM\\'dy'dd\\'hr'HH\\'min'mm\\'sec'ss
177: *
178: * @param date The date formated by iText
179: * @return The date formated for rtf
180: */
181: private String convertDate(String date) {
182: SimpleDateFormat sdf = new SimpleDateFormat(
183: "EEE MMM dd HH:mm:ss zzz yyyy");
184: try {
185: Date creationDate = sdf.parse(date);
186: sdf = new SimpleDateFormat(
187: "\\'yr'yyyy\\'mo'MM\\'dy'dd\\'hr'HH\\'min'mm\\'sec'ss");
188: return sdf.format(creationDate);
189: } catch (ParseException pe) {
190: pe.printStackTrace();
191: return "";
192: }
193: }
194: }
|