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   package org.apache.poi.hpsf;
56   
57   import java.util.*;
58   import org.apache.poi.util.LittleEndian;
59   
60   /**
61    *  <p>
62    *
63    *  Abstract superclass for the convenience classes {@link SummaryInformation}
64    *  and {@link DocumentSummaryInformation}.</p> <p>
65    *
66    *  The motivation behind this class is quite nasty if you look behind the
67    *  scenes, but it serves the application programmer well by providing him with
68    *  the easy-to-use {@link SummaryInformation} and {@link
69    *  DocumentSummaryInformation} classes. When parsing the data a property set
70    *  stream consists of (possibly coming from an {@link java.io.InputStream}) we
71    *  want to read and process each byte only once. Since we don't know in advance
72    *  which kind of property set we have, we can expect only the most general
73    *  {@link PropertySet}. Creating a special subclass should be as easy as
74    *  calling the special subclass' constructor and pass the general {@link
75    *  PropertySet} in. To make things easy internally, the special class just
76    *  holds a reference to the general {@link PropertySet} and delegates all
77    *  method calls to it.</p> <p>
78    *
79    *  A cleaner implementation would have been like this: The {@link
80    *  PropertySetFactory} parses the stream data into some internal object first.
81    *  Then it finds out whether the stream is a {@link SummaryInformation}, a
82    *  {@link DocumentSummaryInformation} or a general {@link PropertySet}.
83    *  However, the current implementation went the other way round historically:
84    *  the convenience classes came only late to my mind.</p>
85    *
86    *@author     Rainer Klute (klute@rainer-klute.de)
87    *@created    May 10, 2002
88    *@version    $Id: SpecialPropertySet.java,v 1.5 2002/05/19 18:09:26 acoliver Exp $
89    *@since      2002-02-09
90    */
91   public abstract class SpecialPropertySet extends PropertySet {
92   
93       private PropertySet delegate;
94   
95   
96   
97       /**
98        *  Constructor for the SpecialPropertySet object
99        *
100       *@param  ps  Description of the Parameter
101       */
102      public SpecialPropertySet(PropertySet ps) {
103          delegate = ps;
104      }
105  
106  
107  
108      /**
109       *  Gets the byteOrder attribute of the SpecialPropertySet object
110       *
111       *@return    The byteOrder value
112       */
113      public int getByteOrder() {
114          return delegate.getByteOrder();
115      }
116  
117  
118  
119      /**
120       *  Gets the format attribute of the SpecialPropertySet object
121       *
122       *@return    The format value
123       */
124      public int getFormat() {
125          return delegate.getFormat();
126      }
127  
128  
129  
130      /**
131       *  Gets the oSVersion attribute of the SpecialPropertySet object
132       *
133       *@return    The oSVersion value
134       */
135      public long getOSVersion() {
136          return delegate.getOSVersion();
137      }
138  
139  
140  
141      /**
142       *  Gets the classID attribute of the SpecialPropertySet object
143       *
144       *@return    The classID value
145       */
146      public ClassID getClassID() {
147          return delegate.getClassID();
148      }
149  
150  
151  
152      /**
153       *  Gets the sectionCount attribute of the SpecialPropertySet object
154       *
155       *@return    The sectionCount value
156       */
157      public long getSectionCount() {
158          return delegate.getSectionCount();
159      }
160  
161  
162  
163      /**
164       *  Gets the sections attribute of the SpecialPropertySet object
165       *
166       *@return    The sections value
167       */
168      public List getSections() {
169          return delegate.getSections();
170      }
171  
172  
173  
174      /**
175       *  Gets the summaryInformation attribute of the SpecialPropertySet object
176       *
177       *@return    The summaryInformation value
178       */
179      public boolean isSummaryInformation() {
180          return delegate.isSummaryInformation();
181      }
182  
183  
184  
185      /**
186       *  Gets the documentSummaryInformation attribute of the SpecialPropertySet
187       *  object
188       *
189       *@return    The documentSummaryInformation value
190       */
191      public boolean isDocumentSummaryInformation() {
192          return delegate.isDocumentSummaryInformation();
193      }
194  
195  
196  
197      /**
198       *  Gets the singleSection attribute of the SpecialPropertySet object
199       *
200       *@return    The singleSection value
201       */
202      public Section getSingleSection() {
203          return delegate.getSingleSection();
204      }
205  
206  }
207