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.interactionmodel;
025:
026: import jacareto.convert.RecursiveInteractionModelConverter;
027: import jacareto.convert.SelectionInteractionModelConverter;
028: import jacareto.interactionmodel.InteractionModelElement;
029: import jacareto.interactionmodel.TaskElement;
030: import jacareto.system.Environment;
031:
032: import org.jdom.Element;
033:
034: import java.util.Iterator;
035: import java.util.Vector;
036:
037: /**
038: * A converter which is able to convert task to xml representations, and vice versa.
039: *
040: * @author <a href="mailto:markus.bois@web.de">Markus Bois</a>
041: * @version 1.02
042: */
043: public class TaskConverter extends RecursiveInteractionModelConverter {
044: /**
045: * Creates a new converter.
046: *
047: * @param env DOCUMENT ME!
048: */
049: public TaskConverter(Environment env) {
050: super (env);
051: setSelectionInteractionModelConverter(new SelectionInteractionModelConverter(
052: env, "InteractionModelElements.Converters",
053: SelectionInteractionModelConverter.INIT_CUSTOM));
054: }
055:
056: /**
057: * Creates a new recursive converter
058: *
059: * @param env the enviroment
060: * @param selectionInteractionModelConverter the available converters
061: */
062: public TaskConverter(
063: Environment env,
064: SelectionInteractionModelConverter selectionInteractionModelConverter) {
065: super (env);
066: setSelectionInteractionModelConverter(selectionInteractionModelConverter);
067: }
068:
069: /**
070: * Returns whether this converter is able to transform the specified interaction-model element
071: * to an internal structure representation. This converter is responsible for the given
072: * interaction-model element if it is of type {@link jacareto.interactionmodel.TaskElement}.
073: *
074: * @param element the interaction-model element
075: *
076: * @return <code>true</code> if this converter is responsible for the given interaction-model
077: * element; otherwise <code>false</code>.
078: */
079: public boolean handlesElement(InteractionModelElement element) {
080: return (element != null) && element instanceof TaskElement;
081: }
082:
083: /**
084: * Converts the specified object to a record object, if this converter is responsible for it.
085: * For responsibility see {@link #handlesElement(InteractionModelElement)}.
086: *
087: * @param element the interaction-model element to convert
088: *
089: * @return the structure object (which is a xml element)
090: */
091: public Object convertElement(InteractionModelElement element) {
092: TaskElement taskElement = (TaskElement) element;
093: Iterator it = taskElement.children();
094:
095: Element result = new Element("task");
096: Element name = new Element("name");
097:
098: name.setText(taskElement.getName());
099: result.addContent(name);
100:
101: while (it.hasNext()) {
102: InteractionModelElement next = (InteractionModelElement) it
103: .next();
104:
105: if ((next != null) && !(next instanceof TaskElement)) {
106: if (selectionInteractionModelConverter
107: .handlesElement(next)) {
108: Object toAdd = selectionInteractionModelConverter
109: .convertElement(next);
110:
111: if ((toAdd != null)
112: && !(next instanceof TaskElement)) {
113: result.addContent((Element) toAdd);
114: }
115: }
116: }
117: }
118:
119: return result;
120: }
121:
122: /**
123: * Returns whether this converter is able to transform the specified other representation (here
124: * a xml element) to a interaction-model element. This converter is responsible if the other
125: * representation is of type <code>jdom.org.Element</code> and the name of the element is
126: * "task"
127: *
128: * @param other the other representation
129: *
130: * @return <code>true</code> if this converter is responsible for the specified other
131: * representation; otherwise <code>false</code>.
132: */
133: public boolean handlesOther(Object other) {
134: try {
135: Element e = (Element) other;
136:
137: return e.getName().equals("task");
138: } catch (Throwable t) {
139: return false;
140: }
141: }
142:
143: /**
144: * Converts the specified other representation to a interaction-model element, if this
145: * converter is responsible for it (reverses {@link
146: * #convertElement(InteractionModelElement)}). For responsibility see {@link
147: * #handlesOther(Object)}.
148: *
149: * @param other the other representation to convert
150: *
151: * @return the interaction-model element (of type {@link
152: * jacareto.interactionmodel.TaskElement})
153: */
154: public InteractionModelElement convertOther(Object other) {
155: Element element = (Element) other;
156: Vector children = new Vector();
157: Element nameElement = element.getChild("name");
158: String name = "";
159: String id = element.getAttributeValue("id", "");
160:
161: if (nameElement != null) {
162: name = nameElement.getText();
163: }
164:
165: Iterator iterator = element.getChildren("basic-step")
166: .iterator();
167:
168: while (iterator.hasNext()) {
169: Object internalRepresentation = iterator.next();
170:
171: if (selectionInteractionModelConverter
172: .handlesOther(internalRepresentation)) {
173: InteractionModelElement toAdd = selectionInteractionModelConverter
174: .convertOther(internalRepresentation);
175:
176: if (toAdd != null) {
177: children.add(toAdd);
178: }
179: }
180: }
181:
182: return new TaskElement(env, name, InteractionModelElement
183: .vectorToArray(children), id);
184: }
185: }
|