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.poifs.filesystem;
019:
020: import java.util.*;
021:
022: import org.apache.poi.poifs.dev.POIFSViewable;
023: import org.apache.poi.poifs.property.DocumentProperty;
024:
025: /**
026: * Simple implementation of DocumentEntry
027: *
028: * @author Marc Johnson (mjohnson at apache dot org)
029: */
030:
031: public class DocumentNode extends EntryNode implements DocumentEntry,
032: POIFSViewable {
033:
034: // underlying POIFSDocument instance
035: private POIFSDocument _document;
036:
037: /**
038: * create a DocumentNode. This method is not public by design; it
039: * is intended strictly for the internal use of this package
040: *
041: * @param property the DocumentProperty for this DocumentEntry
042: * @param parent the parent of this entry
043: */
044:
045: DocumentNode(final DocumentProperty property,
046: final DirectoryNode parent) {
047: super (property, parent);
048: _document = property.getDocument();
049: }
050:
051: /**
052: * get the POIFSDocument
053: *
054: * @return the internal POIFSDocument
055: */
056:
057: POIFSDocument getDocument() {
058: return _document;
059: }
060:
061: /* ********** START implementation of DocumentEntry ********** */
062:
063: /**
064: * get the zize of the document, in bytes
065: *
066: * @return size in bytes
067: */
068:
069: public int getSize() {
070: return getProperty().getSize();
071: }
072:
073: /* ********** END implementation of DocumentEntry ********** */
074: /* ********** START implementation of Entry ********** */
075:
076: /**
077: * is this a DocumentEntry?
078: *
079: * @return true if the Entry is a DocumentEntry, else false
080: */
081:
082: public boolean isDocumentEntry() {
083: return true;
084: }
085:
086: /* ********** END implementation of Entry ********** */
087: /* ********** START extension of Entry ********** */
088:
089: /**
090: * extensions use this method to verify internal rules regarding
091: * deletion of the underlying store.
092: *
093: * @return true if it's ok to delete the underlying store, else
094: * false
095: */
096:
097: protected boolean isDeleteOK() {
098: return true;
099: }
100:
101: /* ********** END extension of Entry ********** */
102: /* ********** START begin implementation of POIFSViewable ********** */
103:
104: /**
105: * Get an array of objects, some of which may implement
106: * POIFSViewable
107: *
108: * @return an array of Object; may not be null, but may be empty
109: */
110:
111: public Object[] getViewableArray() {
112: return new Object[0];
113: }
114:
115: /**
116: * Get an Iterator of objects, some of which may implement
117: * POIFSViewable
118: *
119: * @return an Iterator; may not be null, but may have an empty
120: * back end store
121: */
122:
123: public Iterator getViewableIterator() {
124: List components = new ArrayList();
125:
126: components.add(getProperty());
127: components.add(_document);
128: return components.iterator();
129: }
130:
131: /**
132: * Give viewers a hint as to whether to call getViewableArray or
133: * getViewableIterator
134: *
135: * @return true if a viewer should call getViewableArray, false if
136: * a viewer should call getViewableIterator
137: */
138:
139: public boolean preferArray() {
140: return false;
141: }
142:
143: /**
144: * Provides a short description of the object, to be used when a
145: * POIFSViewable object has not provided its contents.
146: *
147: * @return short description
148: */
149:
150: public String getShortDescription() {
151: return getName();
152: }
153:
154: /* ********** END begin implementation of POIFSViewable ********** */
155: } // end public class DocumentNode
|