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: package org.apache.poi.hslf.record;
018:
019: import java.io.IOException;
020: import java.io.OutputStream;
021:
022: import org.apache.poi.util.LittleEndian;
023:
024: /**
025: * This class represents the metadata of a link in a slide/notes/etc.
026: * It normally just holds a InteractiveInfoAtom, with the metadata
027: * in it.
028: * @author Nick Burch
029: */
030: public class InteractiveInfo extends RecordContainer {
031: private byte[] _header;
032: private static long _type = 4082;
033:
034: // Links to our more interesting children
035: private InteractiveInfoAtom infoAtom;
036:
037: /**
038: * Returns the InteractiveInfoAtom of this InteractiveInfo
039: */
040: public InteractiveInfoAtom getInteractiveInfoAtom() {
041: return infoAtom;
042: }
043:
044: /**
045: * Set things up, and find our more interesting children
046: */
047: protected InteractiveInfo(byte[] source, int start, int len) {
048: // Grab the header
049: _header = new byte[8];
050: System.arraycopy(source, start, _header, 0, 8);
051:
052: // Find our children
053: _children = Record.findChildRecords(source, start + 8, len - 8);
054: findInterestingChildren();
055: }
056:
057: /**
058: * Go through our child records, picking out the ones that are
059: * interesting, and saving those for use by the easy helper
060: * methods.
061: */
062: private void findInterestingChildren() {
063: // First child should be the InteractiveInfoAtom
064: if (_children[0] instanceof InteractiveInfoAtom) {
065: infoAtom = (InteractiveInfoAtom) _children[0];
066: } else {
067: throw new IllegalStateException(
068: "First child record wasn't a InteractiveInfoAtom, was of type "
069: + _children[0].getRecordType());
070: }
071: }
072:
073: /**
074: * Create a new InteractiveInfo, with blank fields
075: */
076: public InteractiveInfo() {
077: _header = new byte[8];
078: _children = new Record[1];
079:
080: // Setup our header block
081: _header[0] = 0x0f; // We are a container record
082: LittleEndian.putShort(_header, 2, (short) _type);
083:
084: // Setup our child records
085: infoAtom = new InteractiveInfoAtom();
086: _children[0] = infoAtom;
087: }
088:
089: /**
090: * We are of type 4802
091: */
092: public long getRecordType() {
093: return _type;
094: }
095:
096: /**
097: * Write the contents of the record back, so it can be written
098: * to disk
099: */
100: public void writeOut(OutputStream out) throws IOException {
101: writeOut(_header[0], _header[1], _type, _children, out);
102: }
103: }
|