001: /* ====================================================================
002: Licensed to the Apache Software Foundation (ASF) under one or more
003: contributor license agreements. See the NOTICE file distributed with
004: this work for additional information regarding copyright ownership.
005: The ASF licenses this file to You under the Apache License, Version 2.0
006: (the "License"); you may not use this file except in compliance with
007: the License. You may obtain a copy of the License at
008:
009: http://www.apache.org/licenses/LICENSE-2.0
010:
011: Unless required by applicable law or agreed to in writing, software
012: distributed under the License is distributed on an "AS IS" BASIS,
013: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: See the License for the specific language governing permissions and
015: limitations under the License.
016: ==================================================================== */
017:
018: package org.apache.poi.hpsf;
019:
020: import java.io.IOException;
021: import java.io.OutputStream;
022:
023: /**
024: * <p>Adds writing capability to the {@link Property} class.</p>
025: *
026: * <p>Please be aware that this class' functionality will be merged into the
027: * {@link Property} class at a later time, so the API will change.</p>
028: *
029: * @author Rainer Klute <a
030: * href="mailto:klute@rainer-klute.de"><klute@rainer-klute.de></a>
031: * @since 2003-08-03
032: * @version $Id: MutableProperty.java 489730 2006-12-22 19:18:16Z bayard $
033: */
034: public class MutableProperty extends Property {
035:
036: /**
037: * <p>Creates an empty property. It must be filled using the set method to
038: * be usable.</p>
039: */
040: public MutableProperty() {
041: }
042:
043: /**
044: * <p>Creates a <code>MutableProperty</code> as a copy of an existing
045: * <code>Property</code>.</p>
046: *
047: * @param p The property to copy.
048: */
049: public MutableProperty(final Property p) {
050: setID(p.getID());
051: setType(p.getType());
052: setValue(p.getValue());
053: }
054:
055: /**
056: * <p>Sets the property's ID.</p>
057: *
058: * @param id the ID
059: */
060: public void setID(final long id) {
061: this .id = id;
062: }
063:
064: /**
065: * <p>Sets the property's type.</p>
066: *
067: * @param type the property's type
068: */
069: public void setType(final long type) {
070: this .type = type;
071: }
072:
073: /**
074: * <p>Sets the property's value.</p>
075: *
076: * @param value the property's value
077: */
078: public void setValue(final Object value) {
079: this .value = value;
080: }
081:
082: /**
083: * <p>Writes the property to an output stream.</p>
084: *
085: * @param out The output stream to write to.
086: * @param codepage The codepage to use for writing non-wide strings
087: * @return the number of bytes written to the stream
088: *
089: * @exception IOException if an I/O error occurs
090: * @exception WritingNotSupportedException if a variant type is to be
091: * written that is not yet supported
092: */
093: public int write(final OutputStream out, final int codepage)
094: throws IOException, WritingNotSupportedException {
095: int length = 0;
096: long variantType = getType();
097:
098: /* Ensure that wide strings are written if the codepage is Unicode. */
099: if (codepage == Constants.CP_UNICODE
100: && variantType == Variant.VT_LPSTR)
101: variantType = Variant.VT_LPWSTR;
102:
103: length += TypeWriter.writeUIntToStream(out, variantType);
104: length += VariantSupport.write(out, variantType, getValue(),
105: codepage);
106: return length;
107: }
108:
109: }
|