/* * This file is part of the Trickl Open Source Libraries. * * Trickl Open Source Libraries - http://open.trickl.com/ * * Copyright (C) 2011 Tim Gee. * * Trickl Open Source Libraries are 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. * * Trickl Open Source Libraries are 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 project. If not, see <http://www.gnu.org/licenses/>. */ package com.trickl.graph.planar.xml; import com.trickl.graph.planar.DcelFace; import com.trickl.graph.planar.DcelHalfEdge; import com.trickl.graph.planar.DcelVertex; import com.trickl.graph.planar.FaceFactory; import java.util.LinkedHashMap; import java.util.List; import java.util.LinkedList; import java.util.Map; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlElementWrapper; import javax.xml.bind.annotation.XmlIDREF; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlType; import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import org.jgrapht.EdgeFactory; @XmlRootElement(name="dcel") @XmlType(name="dcel", propOrder= {"vertices", "edges", "faces", "dcelVertices", "dcelHalfEdges", "dcelFaces", "dcelBoundaryFace", "edgeFactory", "faceFactory"}) public class XmlDoublyConnectedEdgeList<V, E, F> { private List<V> vertices; private List<E> edges; private List<F> faces; private List<DcelVertex<V, E, F>> dcelVertices; private List<DcelHalfEdge<V, E, F>> dcelHalfEdges; private List<DcelFace<V, E, F>> dcelFaces; private DcelFace<V, E, F> dcelBoundaryFace = null; private FaceFactory<V, F> faceFactory = null; private EdgeFactory<V, E> edgeFactory = null; public XmlDoublyConnectedEdgeList() { vertices = new LinkedList<V>(); edges = new LinkedList<E>(); faces = new LinkedList<F>(); dcelVertices = new LinkedList<DcelVertex<V, E, F>>(); dcelHalfEdges = new LinkedList<DcelHalfEdge<V, E, F>>(); dcelFaces = new LinkedList<DcelFace<V, E, F>>(); } @XmlElementWrapper(name="vertices") @XmlElement(name="vertex") public List<V> getVertices() { return vertices; } @XmlElementWrapper(name="edges") @XmlElement(name="edge") public List<E> getEdges() { return edges; } @XmlElementWrapper(name="faces") @XmlElement(name="face") public List<F> getFaces() { return faces; } @XmlElementWrapper(name="dcel-vertices") @XmlElement(name = "dcel-vertex") public List<DcelVertex<V, E, F>> getDcelVertices() { return dcelVertices; } @XmlElementWrapper(name = "dcel-half-edges") @XmlElement(name = "dcel-half-edge") public List<DcelHalfEdge<V, E, F>> getDcelHalfEdges() { return dcelHalfEdges; } @XmlElementWrapper(name = "dcel-faces") @XmlElement(name = "dcel-face") public List<DcelFace<V, E, F>> getDcelFaces() { return dcelFaces; } @XmlElement(name="dcel-boundary-face-id") @XmlIDREF public DcelFace<V, E, F> getDcelBoundaryFace() { return dcelBoundaryFace; } // Jackson does not support XmlAnyElement in 2.8 @XmlJavaTypeAdapter(value=XmlAnyWrapperAdapter.class) @XmlElement(name="edge-factory") public EdgeFactory<V, E> getEdgeFactory() { return edgeFactory; } // Jackson does not support XmlAnyElement in 2.8 @XmlJavaTypeAdapter(value=XmlAnyWrapperAdapter.class) @XmlElement(name="face-factory") public FaceFactory<V, F> getFaceFactory() { return faceFactory; } public void setVertices(List<V> vertices) { this.vertices = vertices; } public void setEdges(List<E> edges) { this.edges = edges; } public void setFaces(List<F> faces) { this.faces = faces; } public void setDcelVertices(List<DcelVertex<V, E, F>> dcelVertices) { this.dcelVertices = dcelVertices; } public void setDcelHalfEdges(List<DcelHalfEdge<V, E, F>> dcelHalfEdges) { this.dcelHalfEdges = dcelHalfEdges; } public void setDcelFaces(List<DcelFace<V, E, F>> dcelFaces) { this.dcelFaces = dcelFaces; } public void setDcelBoundaryFace(DcelFace<V, E, F> dcelBoundaryFace) { this.dcelBoundaryFace = dcelBoundaryFace; } public void setFaceFactory(FaceFactory<V, F> faceFactory) { this.faceFactory = faceFactory; } public void setEdgeFactory(EdgeFactory<V, E> edgeFactory) { this.edgeFactory = edgeFactory; } }