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.convert.xml;
025:
026: import jacareto.convert.Converter;
027: import jacareto.record.PositionRecordable;
028: import jacareto.record.Recordable;
029: import jacareto.struct.StructureElement;
030: import jacareto.system.Environment;
031:
032: import org.jdom.Element;
033:
034: /**
035: * Converter class which converts the default elements of a XML file to an object and vice versa
036: *
037: * @author Oliver Specht
038: */
039: public class XMLRecordableConverter extends Converter {
040: /**
041: * Constructor
042: *
043: * @param env Environment
044: */
045: public XMLRecordableConverter(Environment env) {
046: super (env);
047: }
048:
049: public boolean handlesElement(StructureElement element) {
050: return ((element != null) && (element instanceof Recordable));
051: }
052:
053: /**
054: * Converts a StructureElement into an instance of Element (JDOM)
055: *
056: * @param element a StructureElement
057: *
058: * @return Element (Object)
059: */
060: public Object convertElement(StructureElement element) {
061: // PositionRecordables have to be converted in another way (ref = position)
062: if (element instanceof PositionRecordable) {
063: PositionRecordable posRecordable = (PositionRecordable) element;
064:
065: Element result = new Element("Recordable");
066: result
067: .setAttribute("ref", ""
068: + posRecordable.getPosition());
069:
070: return result;
071: }
072:
073: Recordable recordable = (Recordable) element;
074: Element result = new Element("Recordable");
075:
076: result.setAttribute("procTime", "" + recordable.getProcTime());
077: result.setAttribute("duration", "" + recordable.getDuration());
078:
079: return result;
080: }
081:
082: public boolean handlesOther(Object other) {
083: try {
084: Element e = (Element) other;
085:
086: return e.getName().equals("Recordable");
087: } catch (Throwable t) {
088: return false;
089: }
090: }
091:
092: /**
093: * Converts a XML representation to a StructureElement. In this case a PositionRecordable,
094: * because every other element is converted in the subclasses.
095: *
096: * @param other the XML object to be converted
097: *
098: * @return PositionRecordable
099: */
100: public StructureElement convertOther(Object other) {
101: Element element = (Element) other;
102:
103: int position = -1;
104:
105: if (!element.getAttributeValue("ref").equals("")) {
106: position = Integer.parseInt(element
107: .getAttributeValue("ref"));
108: }
109:
110: return new PositionRecordable(env, position);
111: }
112: }
|