1    /*
2     *  ====================================================================
3     *  The Apache Software License, Version 1.1
4     *
5     *  Copyright (c) 2000 The Apache Software Foundation.  All rights
6     *  reserved.
7     *
8     *  Redistribution and use in source and binary forms, with or without
9     *  modification, are permitted provided that the following conditions
10    *  are met:
11    *
12    *  1. Redistributions of source code must retain the above copyright
13    *  notice, this list of conditions and the following disclaimer.
14    *
15    *  2. Redistributions in binary form must reproduce the above copyright
16    *  notice, this list of conditions and the following disclaimer in
17    *  the documentation and/or other materials provided with the
18    *  distribution.
19    *
20    *  3. The end-user documentation included with the redistribution,
21    *  if any, must include the following acknowledgment:
22    *  "This product includes software developed by the
23    *  Apache Software Foundation (http://www.apache.org/)."
24    *  Alternately, this acknowledgment may appear in the software itself,
25    *  if and wherever such third-party acknowledgments normally appear.
26    *
27    *  4. The names "Apache" and "Apache Software Foundation" must
28    *  not be used to endorse or promote products derived from this
29    *  software without prior written permission. For written
30    *  permission, please contact apache@apache.org.
31    *
32    *  5. Products derived from this software may not be called "Apache",
33    *  nor may "Apache" appear in their name, without prior written
34    *  permission of the Apache Software Foundation.
35    *
36    *  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
37    *  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
38    *  OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
39    *  DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
40    *  ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
41    *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
42    *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
43    *  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
44    *  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
45    *  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
46    *  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
47    *  SUCH DAMAGE.
48    *  ====================================================================
49    *
50    *  This software consists of voluntary contributions made by many
51    *  individuals on behalf of the Apache Software Foundation.  For more
52    *  information on the Apache Software Foundation, please see
53    *  <http://www.apache.org/>.
54    *
55    */
56   package org.apache.poi.hpsf;
57   
58   import java.io.*;
59   
60   /**
61    *  REWRITE ME
62    *  <p>
63    *  Represents a class ID (16 bytes). Unlike other little-endian type the {@link
64    *  ClassID} is not just 16 bytes stored in the wrong order. Instead, it is a
65    *  double word (4 bytes) followed by two words (2 bytes each) followed by 8
66    *  bytes.</p>
67    *
68    *@author     Rainer Klute (klute@rainer-klute.de)
69    *@created    May 10, 2002
70    *@see        LittleEndian
71    *@version    $Id: ClassID.java,v 1.2 2002/05/19 18:09:26 acoliver Exp $
72    *@since      2002-02-09
73    */
74   public class ClassID {
75   
76       /**
77        *  <p>
78        *
79        *  Creates a {@link ClassID} and reads its value from a byte array.</p>
80        *
81        *@param  src     The byte array to read from.
82        *@param  offset  The offset of the first byte to read.
83        */
84       public ClassID(final byte[] src, final int offset) {
85    //       super(src, offset);
86       }
87   
88   
89   
90       public final static int LENGTH = 16;
91   
92       public int length() {
93           return LENGTH;
94       }
95   
96       public byte[] getBytes() {
97   
98           throw new RuntimeException("This fucntion must be rewritten");
99       }
100  
101  
102      /**
103       *  Description of the Method - REWRITE ME REWRITE ME REWRITE ME
104       *  ISNT += offset a bug?  -- doesn't the order of operations evaluate that
105       * last?
106       *
107       *@param  src     Description of the Parameter
108       *@param  offset  Description of the Parameter
109       *@return         Description of the Return Value
110       */
111      public byte[] read(byte[] src, int offset) {
112          byte[] retval = new byte[24];
113  
114          throw new RuntimeException("This fucntion must be rewritten");
115  /*
116          Object[] b = new Object[11]; 
117          b[0] = new Long(LittleEndian.getUInt(src, offset));
118          b[1] = new Integer(LittleEndian.getInt(src, offset += LittleEndian.INT_SIZE));
119          b[2] = new Integer(LittleEndian.getInt(src, offset += LittleEndian.INT_SIZE));
120          b[3] = new Byte(LittleEndian.getUnsignedByte(src, offset += LittleEndian.INT_SIZE);  
121          b[4] = new Byte(LittleEndian.getUnsignedByte(src, offset += 1));
122          b[5] = new Byte(LittleEndian.getUnsignedByte(src, offset += 1));
123          b[6] = new Byte(LittleEndian.getUnsignedByte(src, offset += 1));
124          b[7] = new Byte(LittleEndian.getUnsignedByte(src, offset += 1));
125          b[8] = new Byte(LittleEndian.getUnsignedByte(src, offset += 1));
126          b[9] = new Byte(LittleEndian.getUnsignedByte(src, offset += 1));
127          b[10] = new Byte(LittleEndian.getUnsignedByte(src, offset += 1));
128          int capacity = 24;
129  //        for (int i = 0; i < b.length; i++) {
130  //            capacity += b[i].getBytes().length;
131  //        }
132          bytes = new byte[capacity];
133          int pos = 0;
134          
135          for (int i = 0; i < b.length; i++) {
136              byte[] s = b[i].getBytes();
137              for (int j = 0; j < s.length; j++) {
138                  bytes[pos++] = s[j];
139              }
140          }
141          return bytes;*/
142      }
143  
144  }
145