xref: /AOO41X/main/xmerge/source/pexcel/java/org/openoffice/xmerge/converter/xml/sxc/pexcel/records/StringValue.java (revision 0c0e82a55dc5b7baa849907647dcb88a54f5f573)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 package org.openoffice.xmerge.converter.xml.sxc.pexcel.records;
25 
26 import java.io.OutputStream;
27 import java.io.InputStream;
28 import java.io.IOException;
29 import java.io.UnsupportedEncodingException;
30 
31 import org.openoffice.xmerge.util.Debug;
32 import org.openoffice.xmerge.util.EndianConverter;
33 import org.openoffice.xmerge.converter.xml.sxc.pexcel.PocketExcelConstants;
34 
35 
36 /**
37  * Represents a BIFF Record that describes the value of a formula that
38  * evaluates to a string
39  */
40 public class StringValue implements BIFFRecord {
41 
42     private byte[]  cch     = new byte[2];
43     private byte[]  rgch;
44 
45     /**
46      * Constructs a StringValue Record from a <code>String</code>
47      *
48      * @param str
49      */
StringValue(String str)50     public StringValue(String str) throws IOException {
51         cch = EndianConverter.writeShort((short) str.length());
52         rgch = new byte[str.length()];
53         rgch = str.getBytes("UTF-16LE");
54     }
55 
56     /**
57      * Constructs a StringValue Record from an <code>InputStream</code>
58      *
59      * @param   is InputStream containing a StringValue Record
60      */
StringValue(InputStream is)61     public StringValue(InputStream is) throws IOException {
62         read(is);
63     }
64 
65     /**
66      * Get the hex code for this particular <code>BIFFRecord</code>
67      *
68      * @return the hex code for <code>StringValue</code>
69      */
getBiffType()70     public short getBiffType() {
71         return PocketExcelConstants.FORMULA_STRING;
72     }
73 
74     /**
75      * Reads a StringVlaue Record from an <code>InputStream</code>
76      *
77      * @param   input InputStream containing a StringValue Record
78      */
read(InputStream input)79     public int read(InputStream input) throws IOException {
80 
81         cch[0] = (byte) input.read();
82         cch[1] = (byte) input.read();
83         int numOfBytesRead = 1;
84 
85         int strlen = EndianConverter.readShort(cch)*2;
86         rgch = new byte[strlen];
87         numOfBytesRead  += input.read(rgch, 0, strlen);
88 
89         Debug.log(Debug.TRACE,"\tcch : "+ cch +
90                             " rgch : " + rgch);
91 
92         return numOfBytesRead;
93     }
94 
write(OutputStream output)95     public void write(OutputStream output) throws IOException {
96 
97         output.write(getBiffType());
98         output.write(cch);
99         output.write(rgch);
100 
101         Debug.log(Debug.TRACE,"Writing StringValue record");
102     }
103 
104     /**
105      * Gets the <code>String</code> representing the cells contents
106      *
107      * @return the <code>String</code> representing the cells contents
108      */
getString()109     public String getString() throws IOException {
110         String name;
111 
112         try {
113             name = new String(rgch, "UTF-16LE");
114         } catch (UnsupportedEncodingException e){
115             name = "unknown";
116         }
117         return name;
118     }
119 
120 }
121