package com.ximple.eofms.jobs;
|
|
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;
|
|
protected FrammeAttributeData getFeatureLinkage(Element element)
|
{
|
if (!element.hasUserAttributeData())
|
return null;
|
|
List<UserAttributeData> 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;
|
}
|
}
|