forked from geodmms/xdgnjobs

Dennis Kao
2014-01-15 94ae08701bbd7585a0b7e5a92d1975965a503c03
xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/ComplexChainElement.java
@@ -1,6 +1,7 @@
package com.ximple.io.dgn7;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
@@ -11,165 +12,138 @@
import com.vividsolutions.jts.geom.Geometry;
import com.vividsolutions.jts.geom.GeometryFactory;
import com.vividsolutions.jts.geom.LineString;
import com.vividsolutions.jts.geom.LinearRing;
/**
 * ComplexChainElement
 *
 * @author Ulysses
 * @version 0.1
 * @since 2006/5/18 ¤U¤È 03:44:56
 * @since 2006/5/18
 */
public class ComplexChainElement extends Element implements ComplexElement, GeometryConverter
{
public class ComplexChainElement extends Element implements ComplexElement, GeometryConverter {
    private static final Logger logger = Logger.getLogger(ComplexChainElement.class);
    protected ArrayList<Element> list = new ArrayList<Element>();
    public ComplexChainElement(byte[] raw)
    {
    ComplexChainElement(byte[] raw) {
        super(raw);
        attrOffset = 4;
    }
    public int size()
    {
    public int size() {
        return list.size();
    }
    public boolean isEmpty()
    {
    public boolean isEmpty() {
        return list.isEmpty();
    }
    public boolean contains(Object o)
    {
    public boolean contains(Object o) {
        return list.contains(o);
    }
    public Iterator iterator()
    {
    public Iterator iterator() {
        return list.iterator();
    }
    public Object[] toArray()
    {
    public Object[] toArray() {
        return list.toArray();
    }
    public <T> T[] toArray(T[] ts)
    {
    public <T> T[] toArray(T[] ts) {
        return list.toArray(ts);
    }
    public boolean add(Element element)
    {
    public boolean add(Element element) {
        return list.add(element);
    }
    public boolean remove(Object o)
    {
    public boolean remove(Object o) {
        return list.remove(o);
    }
    public boolean containsAll(Collection<?> objects)
    {
    public boolean containsAll(Collection<?> objects) {
        return list.containsAll(objects);
    }
    public boolean addAll(Collection<? extends Element> elements)
    {
    public boolean addAll(Collection<? extends Element> elements) {
        return list.addAll(elements);
    }
    public boolean addAll(int i, Collection<? extends Element> elements)
    {
    public boolean addAll(int i, Collection<? extends Element> elements) {
        return list.addAll(i, elements);
    }
    public boolean removeAll(Collection<?> objects)
    {
    public boolean removeAll(Collection<?> objects) {
        return list.removeAll(objects);
    }
    public boolean retainAll(Collection<?> objects)
    {
    public boolean retainAll(Collection<?> objects) {
        return list.retainAll(objects);
    }
    public void clear()
    {
    public void clear() {
        list.clear();
    }
    public Element get(int index)
    {
    public Element get(int index) {
        return list.get(index);
    }
    public Element set(int i, Element element)
    {
    public Element set(int i, Element element) {
        return list.set(i, element);
    }
    public void add(int i, Element element)
    {
    public void add(int i, Element element) {
        list.add(i, element);
    }
    public Element remove(int index)
    {
    public Element remove(int index) {
        return list.remove(index);
    }
    public int indexOf(Object o)
    {
    public int indexOf(Object o) {
        return list.indexOf(o);
    }
    public int lastIndexOf(Object o)
    {
    public int lastIndexOf(Object o) {
        return list.lastIndexOf(o);
    }
    public ListIterator listIterator()
    {
    public ListIterator listIterator() {
        return list.listIterator();
    }
    public ListIterator listIterator(int index)
    {
    public ListIterator listIterator(int index) {
        return list.listIterator(index);
    }
    public List subList(int fromIndex, int toIndex)
    {
    public List subList(int fromIndex, int toIndex) {
        return list.subList(fromIndex, toIndex);
    }
    public Geometry toGeometry(GeometryFactory factory)
    {
    public Geometry toGeometry(GeometryFactory factory) {
        ArrayList<LineString> lineStrings = new ArrayList<LineString>();
        for (ListIterator it = listIterator(); it.hasNext();)
        {
        for (ListIterator it = listIterator(); it.hasNext();) {
            Element element = (Element) it.next();
            if (element instanceof LineStringElement)
            {
                if (((LineStringElement) element).getVerticeSize() == 0 || ((LineStringElement) element).getVerticeSize() > 1)
                {
            if (element instanceof ShapeElement) {
                if (((ShapeElement) element).getVerticeSize() == 0 || ((ShapeElement) element).getVerticeSize() > 1) {
                    lineStrings.add((LinearRing) ((ShapeElement) element).toGeometry(factory));
                }
            } else if (element instanceof LineStringElement) {
                if (((LineStringElement) element).getVerticeSize() == 0 || ((LineStringElement) element).getVerticeSize() > 1) {
                    lineStrings.add((LineString) ((LineStringElement) element).toGeometry(factory));
                }
            } else if (element instanceof LineElement)
            {
            } else if (element instanceof LineElement) {
                if (((LineElement) element).getVertices().length == 0 || ((LineElement) element).getVertices().length > 1)
                {
                if (((LineElement) element).getVertices().length == 0 || ((LineElement) element).getVertices().length > 1) {
                    lineStrings.add((LineString) ((LineElement) element).toGeometry(factory));
                }
            } else if (element instanceof ArcElement)
            {
            } else if (element instanceof ArcElement) {
                lineStrings.add((LineString) ((ArcElement) element).toGeometry(factory));
            } else {
                logger.warn("Unknown sub-element in ComplexChain Element-" + element.getElementType());
@@ -182,42 +156,56 @@
        return factory.createMultiLineString(lines);
    }
    public double getElementSize()
    {
    public short getTotalLength() {
        return raw[18];
    }
    public boolean isClosed()
    {
        if (isEmpty())
        {
    protected void setTotalLength(short value) {
        raw[18] = value;
    }
    public short getNumOfElement() {
        return raw[19];
    }
    protected void setNumOfElement(short value) {
        raw[19] = value;
    }
    public short[] getAttributes() {
        return Arrays.copyOfRange(raw, 20, 23);
    }
    protected void setAttributes(short[] values) {
        if (values.length < 4) return;
        System.arraycopy(values, 0, raw, 20, 24 - 20);
    }
    public boolean isClosed() {
        if (isEmpty()) {
            return false;
        }
        return false;
    }
    public static class ElementHandler extends Element.ElementHandler
    {
    public static class ElementHandler extends Element.ElementHandler {
        private static ElementHandler instance = null;
        public ElementHandler()
        {
        public ElementHandler() {
            super(ElementType.COMPLEXCHAIN);
        }
        public static IElementHandler getInstance()
        {
            if (instance == null)
            {
        public static IElementHandler getInstance() {
            if (instance == null) {
                instance = new ElementHandler();
            }
            return instance;
        }
        protected Element createElement(byte[] raw)
        {
        protected Element createElement(byte[] raw) {
            return new ComplexChainElement(raw);
        }
    }