* @param file the file
* @param row the row
*
*/
private void retrieveObject(VPFFile file, SimpleFeature row) throws IOException{
VPFFile secondFile = null;
VPFColumn column = null;
Map rows = generateFileRowMap(file, row);
List<AttributeDescriptor> attributes = featureType.getFeatureClass().getAttributeDescriptors();
Object[] values = new Object[featureType.getAttributeCount()];
Object value = null;
String featureId = null;
// Pass 1 - identify the feature identifier
for(int inx = 0; inx < attributes.size(); inx++){
// I am thinking it is probably safer to look this up
// by column name than by position, but if it breaks,
// it is easy enough to change
if (attributes.get(inx).getLocalName().equals("id")) {
value = row.getAttribute(inx);
if(value != null) {
featureId = value.toString();
}
break;
}
}
try {
currentFeature = SimpleFeatureBuilder.build(featureType,values, featureId);
} catch (IllegalAttributeException exc) {
// This shouldn't happen since everything should be nillable
exc.printStackTrace();
}
// Pass 2 - get the attributes, including the geometry
for(int inx = 0; inx < attributes.size(); inx++){
try {
if (attributes.get(inx).getLocalName().equals(AnnotationFeatureType.ANNOTATION_ATTRIBUTE_NAME)) {
try{
//TODO: are we sure this is the intended action? Hard-coding an attribute to "nam"?
currentFeature.setAttribute(inx, "nam");
} catch (IllegalAttributeException exc) {
exc.printStackTrace();
}
continue;
}
column = (VPFColumn) attributes.get(inx);
value = null;
secondFile = getVPFFile(column);
SimpleFeature tempRow = (SimpleFeature) rows.get(secondFile);
if(tempRow != null){
value = tempRow.getAttribute(column.getName());
if (column.isAttemptLookup()){
try {
// Attempt to perform a lookup and conversion
String featureClassName = getVPFFile(column).getFileName();
String intVdtFileName = featureType.getFeatureClass().getDirectoryName().concat(File.separator).concat("int.vdt");
VPFFile intVdtFile = VPFFileFactory.getInstance().getFile(intVdtFileName);
Iterator intVdtIter = intVdtFile.readAllRows().iterator();
while(intVdtIter.hasNext()){
SimpleFeature intVdtRow = (SimpleFeature)intVdtIter.next();
if(intVdtRow.getAttribute("table").toString().trim().equals(featureClassName) &&
(Short.parseShort(intVdtRow.getAttribute("value").toString()) == Short.parseShort(value.toString()) &&
(intVdtRow.getAttribute("attribute").toString().trim().equals(column.getName())))){