package org.geotoolkit.pending.demo.datamodel;
import com.vividsolutions.jts.geom.LineString;
import com.vividsolutions.jts.geom.Point;
import java.util.Date;
import org.apache.sis.feature.builder.AttributeRole;
import org.geotoolkit.util.NamesExt;
import org.apache.sis.feature.builder.FeatureTypeBuilder;
import org.geotoolkit.pending.demo.Demos;
import org.apache.sis.referencing.CRS;
import org.opengis.feature.FeatureType;
import org.opengis.referencing.NoSuchAuthorityCodeException;
import org.opengis.util.FactoryException;
public class FeatureTypeBuilderDemo {
public static void main(String[] args) throws NoSuchAuthorityCodeException, FactoryException {
Demos.init();
System.out.println(createSimpleType());
System.out.println(createComplexType());
}
public static FeatureType createSimpleType() throws NoSuchAuthorityCodeException, FactoryException{
final FeatureTypeBuilder ftb = new FeatureTypeBuilder();
ftb.setName("Fish");
ftb.addAttribute(String.class).setName("name");
ftb.addAttribute(Integer.class).setName("length");
ftb.addAttribute(LineString.class).setName("lastPosition").setCRS( CRS.forCode("EPSG:3395")).addRole(AttributeRole.DEFAULT_GEOMETRY);
ftb.addAttribute(Date.class).setName("lastPositionDate");
ftb.addAttribute(Float.class).setName("direction");
final FeatureType sft = ftb.build();
return sft;
}
public static FeatureType createComplexType() throws NoSuchAuthorityCodeException, FactoryException{
FeatureTypeBuilder ftb = new FeatureTypeBuilder();
//track point type
ftb.setName("FishTrackPoint");
ftb.addAttribute(Point.class).setName("location").setCRS(CRS.forCode("EPSG:3395"));
ftb.addAttribute(Date.class).setName("time");
final FeatureType trackPointType = ftb.build();
//fish type
ftb = new FeatureTypeBuilder();
ftb.setName("Fish");
ftb.addAttribute(String.class).setName("name");
ftb.addAttribute(String.class).setName("code");
final FeatureType fishType = ftb.build();
//fish track type
ftb = new FeatureTypeBuilder();
ftb.setName("FishTrack");
ftb.addAttribute(Long.class).setName("trackNumber");
ftb.addAssociation(fishType).setName("fish");
ftb.addAssociation(trackPointType).setName("trackpoints").setMinimumOccurs(0).setMaximumOccurs(Integer.MAX_VALUE);
final FeatureType ft = ftb.build();
return ft;
}
}