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.hslf.record;
019:
020: import org.apache.poi.ddf.*;
021:
022: import java.io.IOException;
023: import java.io.OutputStream;
024: import java.io.ByteArrayOutputStream;
025:
026: /**
027: * A wrapper around a DDF (Escher) EscherTextbox Record. Causes the DDF
028: * Record to be accessible as if it were a HSLF record.
029: * Note: when asked to write out, will simply put any child records correctly
030: * into the Escher layer. A call to the escher layer to write out (by the
031: * parent PPDrawing) will do the actual write out
032: *
033: * @author Nick Burch
034: */
035:
036: public class EscherTextboxWrapper extends RecordContainer {
037: private EscherTextboxRecord _escherRecord;
038: private long _type;
039: private int shapeId;
040:
041: /**
042: * Returns the underlying DDF Escher Record
043: */
044: public EscherTextboxRecord getEscherRecord() {
045: return _escherRecord;
046: }
047:
048: /**
049: * Creates the wrapper for the given DDF Escher Record and children
050: */
051: public EscherTextboxWrapper(EscherTextboxRecord textbox) {
052: _escherRecord = textbox;
053: _type = (long) _escherRecord.getRecordId();
054:
055: // Find the child records in the escher data
056: byte[] data = _escherRecord.getData();
057: _children = Record.findChildRecords(data, 0, data.length);
058: }
059:
060: /**
061: * Creates a new, empty wrapper for DDF Escher Records and their children
062: */
063: public EscherTextboxWrapper() {
064: _escherRecord = new EscherTextboxRecord();
065: _escherRecord.setRecordId(EscherTextboxRecord.RECORD_ID);
066: _escherRecord.setOptions((short) 15);
067:
068: _children = new Record[0];
069: }
070:
071: /**
072: * Return the type of the escher record (normally in the 0xFnnn range)
073: */
074: public long getRecordType() {
075: return _type;
076: }
077:
078: /**
079: * Stores the data for the child records back into the Escher layer.
080: * Doesn't actually do the writing out, that's left to the Escher
081: * layer to do. Must be called before writeOut/serialize is called
082: * on the underlying Escher object!
083: */
084: public void writeOut(OutputStream out) throws IOException {
085: // Write out our children, and stuff them into the Escher layer
086:
087: // Grab the children's data
088: ByteArrayOutputStream baos = new ByteArrayOutputStream();
089: for (int i = 0; i < _children.length; i++) {
090: _children[i].writeOut(baos);
091: }
092: byte[] data = baos.toByteArray();
093:
094: // Save in the escher layer
095: _escherRecord.setData(data);
096: }
097:
098: /**
099: * @return Shape ID
100: */
101: public int getShapeId() {
102: return shapeId;
103: }
104:
105: /**
106: * @param id Shape ID
107: */
108: public void setShapeId(int id) {
109: shapeId = id;
110: }
111: }
|