// XAAL toolkit // Copyright (C) 2009 Ville Karavirta // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . package xaal.adapters; import java.awt.Color; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.io.Writer; import java.text.CharacterIterator; import java.text.StringCharacterIterator; import java.util.ArrayList; import java.util.Enumeration; import java.util.Iterator; import java.util.List; import xaal.objects.Animation; import xaal.objects.Defs; import xaal.objects.Initial; import xaal.objects.Xaal; import xaal.objects.animation.AnimationOperation; import xaal.objects.animation.CreateOperation; import xaal.objects.animation.DeleteOperation; import xaal.objects.animation.InsertOperation; import xaal.objects.animation.ParOperation; import xaal.objects.animation.RemoveOperation; import xaal.objects.animation.SearchOperation; import xaal.objects.animation.SeqOperation; import xaal.objects.animation.StructureOperation; import xaal.objects.animation.SwapIdOperation; import xaal.objects.animation.SwapOperation; import xaal.objects.animation.graphical.ChangePropertyOperation; import xaal.objects.animation.graphical.ChangeStyleOperation; import xaal.objects.animation.graphical.HideOperation; import xaal.objects.animation.graphical.MoveOperation; import xaal.objects.animation.graphical.ShowOperation; import xaal.objects.animation.timing.Timing; import xaal.objects.graphical.Circle; import xaal.objects.graphical.ColorConverter; import xaal.objects.graphical.Coordinate; import xaal.objects.graphical.Ellipse; import xaal.objects.graphical.Font; import xaal.objects.graphical.GraphicalPrimitive; import xaal.objects.graphical.Line; import xaal.objects.graphical.Offset; import xaal.objects.graphical.Polygon; import xaal.objects.graphical.Polyline; import xaal.objects.graphical.Rectangle; import xaal.objects.graphical.Shape; import xaal.objects.graphical.ShapeDefinition; import xaal.objects.graphical.Style; import xaal.objects.graphical.Text; import xaal.objects.interaction.FillQuestion; import xaal.objects.interaction.QuestionContents; import xaal.objects.interaction.QuestionInput; import xaal.objects.interaction.ValueEntryQuestion; import xaal.objects.metadata.Application; import xaal.objects.metadata.Author; import xaal.objects.metadata.Metadata; import xaal.objects.structures.Array; import xaal.objects.structures.DataStructure; import xaal.objects.structures.Edge; import xaal.objects.structures.Index; import xaal.objects.structures.Key; import xaal.objects.structures.Marker; import xaal.objects.structures.Node; import xaal.objects.structures.Structure; import xaal.objects.structures.Tree; import xaal.util.ReflectionHelper; import xaal.util.XaalConstants; /** * @author vkaravir * * To change the template for this generated type comment go to * Window>Preferences>Java>Code Generation>Code and Comments */ public class XaalObjects2XaalXML implements XaalObjectsAdapter { private int indent; private PrintWriter out; private Xaal xaal; private List doneStyles; /** * */ public XaalObjects2XaalXML() { super(); doneStyles = new ArrayList(); } /** * @see xaal.adapters.XaalObjectsAdapter#adapt(xaal.objects.Xaal, java.io.OutputStream) */ public void adapt(Xaal xaal, OutputStream output) { this.xaal = xaal; out = new PrintWriter(new OutputStreamWriter(output)); adapt(xaal, out); } public void adapt(Xaal xaal, Writer outwriter) { indent = 0; if (!(outwriter instanceof PrintWriter)) { this.out = new PrintWriter(outwriter); } else { this.out = (PrintWriter) outwriter; } out.print("<" + XaalConstants.XAAL_TAG_NAME); out.print(" version=\"1.0\" xmlns=\"http://www.cs.hut.fi/Research/SVG/XAAL\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://www.cs.hut.fi/Research/SVG/XAAL xaal.xsd\">\n"); indent++; Metadata md = xaal.getMetadata(); convert(md); Defs defs = xaal.getDefs(); convert(defs); out.print(emptyString(indent) + "<"); out.print(XaalConstants.INITIAL_TAG_NAME + ">\n"); indent++; Initial init = xaal.getInitial(); Iterator iter; if (init != null) { iter = init.getStructures(); while (iter.hasNext()) { DataStructure ds = (DataStructure) iter.next(); ReflectionHelper.invoke(ds, this, "convert"); } iter = init.getGraphicals(); while (iter.hasNext()) { GraphicalPrimitive gp = (GraphicalPrimitive) iter.next(); ReflectionHelper.invoke(gp, this, "convert"); } // iter = xaal.getAnimation().getOperations(); while (iter.hasNext()) { // AnimationOperation oper = (AnimationOperation) iter.next(); // convert(oper); } } indent--; out.print(emptyString(indent) + "\n"); // TODO Handle XO2Xaal animation adaptation Animation anim = xaal.getAnimation(); if (anim != null) { out.print(emptyString(indent) + "<"); out.print(XaalConstants.ANIMATION_TAG_NAME + ">\n"); indent++; iter = anim.getGraphicals(); while (iter.hasNext()) { GraphicalPrimitive gp = (GraphicalPrimitive) iter.next(); ReflectionHelper.invoke(gp, this, "convert"); } iter = anim.getOperations(); while (iter.hasNext()) { AnimationOperation oper = (AnimationOperation) iter.next(); ReflectionHelper.invoke(oper, this, "convert"); } indent--; out.print(emptyString(indent) + "\n"); indent--; } out.print("\n"); out.flush(); } private void convert(Defs defs) { out.print(emptyString(indent) + "<"); out.print(XaalConstants.DEFS_TAG_NAME + ">\n"); indent++; Iterator options = defs.getOptionNames(); while (options.hasNext()) { String name = options.next(); out.print(emptyString(indent) + "<"); out.print(XaalConstants.OPTION_TAG_NAME); out.print(" name=\"" + name + "\" value=\""); out.print(defs.getOption(name) + "\"/>\n"); } Iterator