package com.ximple.eofms.filter; import java.util.List; import org.geotools.feature.AttributeTypeFactory; import org.geotools.feature.Feature; import org.geotools.feature.FeatureType; import org.geotools.feature.FeatureTypeBuilder; import org.geotools.feature.IllegalAttributeException; import org.geotools.feature.SchemaException; import org.opengis.geometry.Geometry; import com.vividsolutions.jts.geom.GeometryFactory; import com.ximple.io.dgn7.Element; import com.ximple.io.dgn7.FrammeAttributeData; import com.ximple.io.dgn7.LineStringElement; import com.ximple.io.dgn7.UserAttributeData; public class CreateLineStringStrategy implements CreateFeatureTypeStrategy { GeometryFactory geometryFactory = new GeometryFactory(); FeatureTypeBuilder typeBuilder = null; public CreateLineStringStrategy() { } protected FrammeAttributeData getFeatureLinkage(Element element) { if (!element.hasUserAttributeData()) return null; List usrDatas = element.getUserAttributeData(); for (UserAttributeData anUsrData : usrDatas) { if (anUsrData instanceof FrammeAttributeData) { FrammeAttributeData featureLinkage = (FrammeAttributeData) anUsrData; return featureLinkage; } } return null; } public FeatureType createFeatureElement(String featureName) throws SchemaException { if (typeBuilder == null) { FeatureTypeBuilder typeBuilder = FeatureTypeBuilder.newInstance(featureName); typeBuilder.addType(AttributeTypeFactory.newAttributeType("GEOM", Geometry.class)); typeBuilder.addType(AttributeTypeFactory.newAttributeType("TID", Integer.class)); typeBuilder.addType(AttributeTypeFactory.newAttributeType("OID", Long.class)); typeBuilder.addType(AttributeTypeFactory.newAttributeType("CID", Integer.class)); typeBuilder.addType(AttributeTypeFactory.newAttributeType("LID", Integer.class)); typeBuilder.addType(AttributeTypeFactory.newAttributeType("LEVEL", Integer.class)); typeBuilder.addType(AttributeTypeFactory.newAttributeType("SYMCOLOR", Integer.class)); typeBuilder.addType(AttributeTypeFactory.newAttributeType("SYMWEIGHT", Integer.class)); typeBuilder.addType(AttributeTypeFactory.newAttributeType("SYMSTYLE", Integer.class)); } return typeBuilder.getFeatureType(); } public Feature createFeature(FeatureType featureType, Element element) throws IllegalAttributeException { FrammeAttributeData fLinkage = getFeatureLinkage(element); if (fLinkage == null) return null; if (element instanceof LineStringElement) { LineStringElement lineStringElement = (LineStringElement) element; Feature feature = featureType.create(new Object[]{ geometryFactory.createLineString(lineStringElement.getVertices()), (int) fLinkage.getFsc(), (long) fLinkage.getUfid(), (int) fLinkage.getComponentID(), 0, lineStringElement.getLevelIndex(), lineStringElement.getColorIndex(), lineStringElement.getWeight(), lineStringElement.getLineStyle(), }); return feature; } return null; } }