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.hwpf.model;
019:
020: import org.apache.poi.util.BitField;
021: import org.apache.poi.util.BitFieldFactory;
022: import org.apache.poi.util.LittleEndian;
023:
024: import java.util.Arrays;
025:
026: public class ListData {
027: private int _lsid;
028: private int _tplc;
029: private short[] _rgistd;
030: private byte _info;
031: private static BitField _fSimpleList = BitFieldFactory
032: .getInstance(0x1);
033: private static BitField _fRestartHdn = BitFieldFactory
034: .getInstance(0x2);
035: private byte _reserved;
036: ListLevel[] _levels;
037:
038: public ListData(int listID, boolean numbered) {
039: _lsid = listID;
040: _rgistd = new short[9];
041:
042: for (int x = 0; x < 9; x++) {
043: _rgistd[x] = StyleSheet.NIL_STYLE;
044: }
045:
046: _levels = new ListLevel[9];
047:
048: for (int x = 0; x < _levels.length; x++) {
049: _levels[x] = new ListLevel(x, numbered);
050: }
051: }
052:
053: ListData(byte[] buf, int offset) {
054: _lsid = LittleEndian.getInt(buf, offset);
055: offset += LittleEndian.INT_SIZE;
056: _tplc = LittleEndian.getInt(buf, offset);
057: offset += LittleEndian.INT_SIZE;
058: _rgistd = new short[9];
059: for (int x = 0; x < 9; x++) {
060: _rgistd[x] = LittleEndian.getShort(buf, offset);
061: offset += LittleEndian.SHORT_SIZE;
062: }
063: _info = buf[offset++];
064: _reserved = buf[offset];
065: if (_fSimpleList.getValue(_info) > 0) {
066: _levels = new ListLevel[1];
067: } else {
068: _levels = new ListLevel[9];
069: }
070:
071: }
072:
073: public int getLsid() {
074: return _lsid;
075: }
076:
077: public int numLevels() {
078: return _levels.length;
079: }
080:
081: public void setLevel(int index, ListLevel level) {
082: _levels[index] = level;
083: }
084:
085: public ListLevel[] getLevels() {
086: return _levels;
087: }
088:
089: /**
090: * Gets the level associated to a particular List at a particular index.
091: *
092: * @param index 1-based index
093: * @return a list level
094: */
095: public ListLevel getLevel(int index) {
096: return _levels[index - 1];
097: }
098:
099: public int getLevelStyle(int index) {
100: return _rgistd[index];
101: }
102:
103: public void setLevelStyle(int index, int styleIndex) {
104: _rgistd[index] = (short) styleIndex;
105: }
106:
107: public boolean equals(Object obj) {
108: if (obj == null) {
109: return false;
110: }
111:
112: ListData lst = (ListData) obj;
113: return lst._info == _info
114: && Arrays.equals(lst._levels, _levels)
115: && lst._lsid == _lsid && lst._reserved == _reserved
116: && lst._tplc == _tplc
117: && Arrays.equals(lst._rgistd, _rgistd);
118: }
119:
120: int resetListID() {
121: _lsid = (int) (Math.random() * (double) System
122: .currentTimeMillis());
123: return _lsid;
124: }
125:
126: public byte[] toByteArray() {
127: byte[] buf = new byte[28];
128: int offset = 0;
129: LittleEndian.putInt(buf, _lsid);
130: offset += LittleEndian.INT_SIZE;
131: LittleEndian.putInt(buf, offset, _tplc);
132: offset += LittleEndian.INT_SIZE;
133: for (int x = 0; x < 9; x++) {
134: LittleEndian.putShort(buf, offset, _rgistd[x]);
135: offset += LittleEndian.SHORT_SIZE;
136: }
137: buf[offset++] = _info;
138: buf[offset] = _reserved;
139: return buf;
140: }
141: }
|