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