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.TextElement;
|
import com.ximple.io.dgn7.UserAttributeData;
|
|
public class CreateTextStrategy 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)
|
{
|
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));
|
typeBuilder.addType(AttributeTypeFactory.newAttributeType("FONT", String.class));
|
typeBuilder.addType(AttributeTypeFactory.newAttributeType("JUST", Integer.class));
|
typeBuilder.addType(AttributeTypeFactory.newAttributeType("HEIGHT", Double.class));
|
typeBuilder.addType(AttributeTypeFactory.newAttributeType("WIDTH", Double.class));
|
typeBuilder.addType(AttributeTypeFactory.newAttributeType("ANGLE", Double.class));
|
typeBuilder.addType(AttributeTypeFactory.newAttributeType("CONTEXT", String.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 TextElement)
|
{
|
TextElement txtElement = (TextElement) element;
|
Feature feature = featureType.create(new Object[]{
|
geometryFactory.createPoint(txtElement.getUserOrigin()),
|
(int) fLinkage.getFsc(),
|
(long) fLinkage.getUfid(),
|
(int) fLinkage.getComponentID(),
|
0,
|
txtElement.getLevelIndex(),
|
txtElement.getColorIndex(),
|
txtElement.getWeight(),
|
txtElement.getLineStyle(),
|
txtElement.getFontIndex(),
|
txtElement.getJustification(),
|
txtElement.getTextHeight(),
|
txtElement.getTextWidth(),
|
txtElement.getRotationAngle(),
|
txtElement.getText()
|
});
|
return feature;
|
}
|
return null;
|
}
|
}
|