001: /*
002: * Jacareto Copyright (c) 2002-2005
003: * Applied Computer Science Research Group, Darmstadt University of
004: * Technology, Institute of Mathematics & Computer Science,
005: * Ludwigsburg University of Education, and Computer Based
006: * Learning Research Group, Aachen University. All rights reserved.
007: *
008: * Jacareto is free software; you can redistribute it and/or
009: * modify it under the terms of the GNU General Public
010: * License as published by the Free Software Foundation; either
011: * version 2 of the License, or (at your option) any later version.
012: *
013: * Jacareto is distributed in the hope that it will be useful,
014: * but WITHOUT ANY WARRANTY; without even the implied warranty of
015: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
016: * General Public License for more details.
017: *
018: * You should have received a copy of the GNU General Public
019: * License along with Jacareto; if not, write to the Free
020: * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
021: *
022: */
023:
024: package jacareto.struct;
025:
026: import jacareto.record.RandomAccessRecord;
027: import jacareto.record.ReadAccessRecord;
028: import jacareto.record.RecordException;
029: import jacareto.record.Recordable;
030: import jacareto.system.Environment;
031:
032: /**
033: * Some useful tools for external structures.
034: *
035: * @author <a href="mailto:markus.bois@web.de">Markus Bois</a>
036: * @version 1.01
037: */
038: public class ExternalStructureTools extends Environment {
039: /**
040: * Write all elements the external structure into the session structure und the session record.
041: * It rebuilds the tree model of the session.
042: *
043: * @param exStructure the source structure
044: * @param record where the recordables should be stored
045: * @param structure the structure that should be rebuild
046: *
047: * @throws StructureException if the target record is not open
048: */
049: public static void write(ExternalStructure exStructure,
050: RandomAccessRecord record, Structure structure)
051: throws StructureException {
052: try {
053: ReadAccessRecord exRecord = exStructure.getRecord();
054:
055: StructureElement help = exStructure.getRootElement();
056:
057: if (help instanceof RootElement) {
058: RootElement root = (RootElement) help;
059: root.setRecord(record);
060:
061: record.clear();
062:
063: structure.setRoot(root);
064:
065: try {
066: boolean notification = record
067: .isNotificationEnabled();
068: record.setNotificationEnabled(false);
069:
070: Recordable[] elements = exRecord.toArray();
071:
072: for (int i = 0; i < elements.length; i++) {
073: record.insert(elements[i], i);
074: }
075:
076: record.setRecordName(exStructure.getRecordName());
077:
078: record.setNotificationEnabled(notification);
079: } catch (RecordException r) {
080: throw new StructureException(r.toString());
081: }
082: }
083: } catch (RecordException r) {
084: throw new StructureException(r.toString());
085: } catch (StructureException e) {
086: throw new StructureException(e.toString());
087: }
088: }
089:
090: /**
091: * Writes the session structure and record into the external structure.
092: *
093: * @param record the record that should be stored
094: * @param structure the structure that should be stored
095: * @param exStructure the target structure
096: *
097: * @throws StructureException if the target record is not open
098: */
099: public static void write(RandomAccessRecord record,
100: Structure structure, ExternalStructure exStructure)
101: throws StructureException {
102: RootElement rootElement = structure.getRootElement();
103:
104: try {
105: exStructure.setRecord(record);
106: exStructure.setRecordName(record.getRecordName());
107: exStructure.setRootElement(rootElement);
108: } catch (StructureException s) {
109: throw new StructureException(s.toString());
110: }
111: }
112: }
|