001: /*
002: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
003: *
004: * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
005: *
006: * The contents of this file are subject to the terms of either the GNU
007: * General Public License Version 2 only ("GPL") or the Common
008: * Development and Distribution License("CDDL") (collectively, the
009: * "License"). You may not use this file except in compliance with the
010: * License. You can obtain a copy of the License at
011: * http://www.netbeans.org/cddl-gplv2.html
012: * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
013: * specific language governing permissions and limitations under the
014: * License. When distributing the software, include this License Header
015: * Notice in each file and include the License file at
016: * nbbuild/licenses/CDDL-GPL-2-CP. Sun designates this
017: * particular file as subject to the "Classpath" exception as provided
018: * by Sun in the GPL Version 2 section of the License file that
019: * accompanied this code. If applicable, add the following below the
020: * License Header, with the fields enclosed by brackets [] replaced by
021: * your own identifying information:
022: * "Portions Copyrighted [year] [name of copyright owner]"
023: *
024: * Contributor(s):
025: *
026: * The Original Software is NetBeans. The Initial Developer of the Original
027: * Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
028: * Microsystems, Inc. All Rights Reserved.
029: *
030: * If you wish your version of this file to be governed by only the CDDL
031: * or only the GPL Version 2, indicate your decision by adding
032: * "[Contributor] elects to include this software in this distribution
033: * under the [CDDL or GPL Version 2] license." If you do not indicate a
034: * single choice of license, a recipient has the option to distribute
035: * your version of this file under either the CDDL, the GPL Version 2 or
036: * to extend the choice of license to its licensees as provided above.
037: * However, if you add GPL Version 2 code and therefore, elected the GPL
038: * Version 2 license, then the option applies only if the new code is
039: * made subject to such option by the copyright holder.
040: */
041:
042: package org.netbeans.modules.reglib;
043:
044: import java.io.ByteArrayOutputStream;
045: import java.io.IOException;
046: import java.io.InputStream;
047: import java.io.OutputStream;
048: import java.util.Date;
049:
050: /**
051: * A {@code StatusData} object contains product registration status.
052: * Actually it stores user selection in reminder dialog. Registration status
053: * is used to control showing of reminder dialog.
054: *
055: */
056: public class StatusData {
057: public static final String STATUS_UNKNOWN = "unknown";
058: public static final String STATUS_REGISTERED = "registered";
059: public static final String STATUS_LATER = "later";
060: public static final String STATUS_NEVER = "never";
061:
062: public static final int DEFAULT_DELAY = 7;
063:
064: private String status;
065: private Date timestamp;
066: /** Delay after which reminder dialo will be shown again when Later option is selected.*/
067: private int delay;
068:
069: /**
070: * Creates a {@code StatusData} object with status value and generated time stamp.
071: *
072: */
073: public StatusData(String status, int delay) {
074: this .status = status;
075: this .timestamp = new Date();
076: this .delay = delay;
077: }
078:
079: public void setStatus(String status) {
080: this .status = status;
081: }
082:
083: public String getStatus() {
084: return status;
085: }
086:
087: public void setTimestamp(Date timestamp) {
088: this .timestamp = timestamp;
089: }
090:
091: public Date getTimestamp() {
092: return timestamp;
093: }
094:
095: public void setDelay(int delay) {
096: this .delay = delay;
097: }
098:
099: public int getDelay() {
100: return delay;
101: }
102:
103: /**
104: * Reads the status data from the XML document on the
105: * specified input stream. The XML document must be
106: * in the format described by the <a href="#XMLSchema">
107: * status data schema</a>.
108: *
109: * The specified stream remains open after this method returns.
110: *
111: * @param in the input stream from which to read the XML document.
112: * @return a {@code StatusData} object read from the input
113: * stream.
114: *
115: * @throws IllegalArgumentException if the input stream
116: * contains an invalid status data.
117: *
118: * @throws IOException if an error occurred when reading from the input stream.
119: */
120: public static StatusData loadFromXML(InputStream in)
121: throws IOException {
122: return StatusDocument.load(in);
123: }
124:
125: /**
126: * Writes the status data to the specified output stream
127: * in the format described by the <a href="#XMLSchema">
128: * status data schema</a> with "UTF-8" encoding.
129: *
130: * The specified stream remains open after this method returns.
131: *
132: * @param os the output stream on which to write the XML document.
133: *
134: * @throws IOException if an error occurred when writing to the output stream.
135: */
136: public void storeToXML(OutputStream os) throws IOException {
137: StatusDocument.store(os, this );
138: }
139:
140: /**
141: * Returns a newly allocated byte array containing the status
142: * data in XML format.
143: *
144: * @return a newly allocated byte array containing the status
145: * data in XML format.
146: */
147: public byte[] toXML() {
148: try {
149: ByteArrayOutputStream out = new ByteArrayOutputStream();
150: storeToXML(out);
151: return out.toByteArray();
152: } catch (IOException e) {
153: // should not reach here
154: return new byte[0];
155: }
156: }
157:
158: /**
159: * Returns a string representation of this status data in XML
160: * format.
161: *
162: * @return a string representation of this status data in XML
163: * format.
164: */
165: @Override
166: public String toString() {
167: try {
168: ByteArrayOutputStream out = new ByteArrayOutputStream();
169: storeToXML(out);
170: return out.toString("UTF-8");
171: } catch (IOException e) {
172: // should not reach here
173: return "Error creating the return string.";
174: }
175: }
176: }
|