package org.geotools.data.efeature.util;
import java.util.AbstractList;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.geotools.data.efeature.EFeatureGeometry;
import org.geotools.data.efeature.EFeatureProperty;
import com.vividsolutions.jts.geom.Geometry;
/**
* Unmodifiable list of {@link EFeatureGeometry} instances.
*
* @author kengu
*
*/
public class EFeatureGeometryList<V extends Geometry> extends AbstractList<EFeatureGeometry<V>> {
private static final long serialVersionUID = 1L;
private final List<EFeatureGeometry<V>> eItems;
private final Class<V> type;
// -----------------------------------------------------
// Constructors
// -----------------------------------------------------
@SuppressWarnings("unchecked")
public EFeatureGeometryList(List<? extends EFeatureProperty<V, ?>> eList, Class<V> type) {
this.type = type;
List<EFeatureGeometry<V>> eSelected = new ArrayList<EFeatureGeometry<V>>(eList.size());
for (EFeatureProperty<V, ?> it : eList) {
if (it instanceof EFeatureGeometry) {
// Perform unchecked cast. This is always safe, since
// EFeatureGeometry<V> extends EFeatureProperty<V,GeometryAttribute>
//
eSelected.add((EFeatureGeometry<V>) it);
}
}
this.eItems = Collections.unmodifiableList(eSelected);
}
public EFeatureGeometryList(EFeatureGeometryList<V> eList) {
this.type = eList.type;
this.eItems = Collections.unmodifiableList(eList.eItems);
}
// -----------------------------------------------------
// EFeatureGeometryList implementation
// -----------------------------------------------------
public Class<V> getType() {
return type;
}
// -----------------------------------------------------
// List implementation
// -----------------------------------------------------
@Override
public EFeatureGeometry<V> get(int index) {
return eItems.get(index);
}
@Override
public int size() {
return eItems.size();
}
// -----------------------------------------------------
// Helper methods
// -----------------------------------------------------
// public static List<EFeatureGeometry<Geometry>> toList(EFeatureInfo eFeatureInfo,
// EObject eObject, Collection<EAttribute> eAttributes, Transaction eTx) {
// return toList(eFeatureInfo, eObject, Geometry.class, eTx);
// }
//
// public static <V extends Geometry> List<EFeatureGeometry<V>> toList(EFeatureInfo eFeatureInfo,
// EObject eObject, Class<V> type, Transaction eTx) {
// EClass eClass = eFeatureInfo.eClass();
// if (eClass.isSuperTypeOf(eObject.eClass())) {
// Map<String, EAttribute> eAttrMap = EFeatureUtils.eGetAttributeMap(eClass);
// return toList(eFeatureInfo, eObject, eAttrMap.values(), type, eTx);
// }
// return null;
// }
//
// public static <V extends Geometry> List<EFeatureGeometry<V>> toList(EFeatureInfo eFeatureInfo,
// EObject eObject, Collection<EAttribute> eAttributes, Class<V> type, Transaction eTx) {
// List<EFeatureGeometry<V>> list = new ArrayList<EFeatureGeometry<V>>(eAttributes.size());
// for (EAttribute it : eAttributes) {
// EFeatureGeometry<V> d = EFeatureGeometryDelegate.create(eFeatureInfo, eObject,
// it.getName(), type, eTx);
// if (d != null) {
// list.add(d);
// }
// }
// return list;
//
// }
}