/***************************************************
*
* cismet GmbH, Saarbruecken, Germany
*
* ... and it just works.
*
****************************************************/
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package de.cismet.cismap.commons.tools;
import com.vividsolutions.jts.geom.Geometry;
import org.apache.log4j.Logger;
import org.deegree.datatypes.QualifiedName;
import org.deegree.datatypes.Types;
import org.deegree.io.dbaseapi.DBaseFile;
import org.deegree.io.dbaseapi.FieldDescriptor;
import org.deegree.io.shpapi.ShapeFile;
import org.deegree.model.feature.Feature;
import org.deegree.model.feature.FeatureProperty;
import org.deegree.model.feature.schema.FeatureType;
import org.deegree.model.feature.schema.PropertyType;
import org.deegree.model.feature.schema.SimplePropertyType;
import java.io.ByteArrayInputStream;
import java.util.ArrayList;
import de.cismet.cismap.commons.features.DefaultFeatureServiceFeature;
/**
* DOCUMENT ME!
*
* @author therter
* @version $Revision$, $Date$
*/
public class DBaseFileHelper {
//~ Static fields/initializers ---------------------------------------------
private static final Logger LOG = Logger.getLogger(DBaseFileHelper.class);
//~ Methods ----------------------------------------------------------------
//
// /**
// * DOCUMENT ME!
// *
// * @param url DOCUMENT ME!
// * @param source DOCUMENT ME!
// */
// private static void createDBaseFile(final String url, final FieldDescriptor[] fd, DefaultFeatureServiceFeature[] features) {
// try {
//
// final DBaseFile file = new DBaseFile(url, fd);
//
// for (int i = 0; i < features.length; ++i) {
// file.setRecord(i, getRecData(features[i]));
// }
// } catch (Exception e) {
// LOG.error("Error while creating dbf index file.", e);
// }
// }
//
/**
* DOCUMENT ME!
*
* @param feature DOCUMENT ME!
* @param n DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
private static FeatureProperty[] getFeatureProperties(final Feature feature, final int n) {
final PropertyType[] ftp = feature.getFeatureType().getProperties();
final FeatureProperty[] fp = new FeatureProperty[ftp.length + 1];
final FeatureProperty[] fp_ = feature.getProperties();
fp[0] = org.deegree.model.feature.FeatureFactory.createFeatureProperty(new QualifiedName("unique_gid"), n);
for (int i = 0; i < ftp.length; i++) {
fp[i + 1] = org.deegree.model.feature.FeatureFactory.createFeatureProperty(
ftp[i].getName(),
fp_[i].getValue());
}
return fp;
}
/**
* DOCUMENT ME!
*
* @param f DOCUMENT ME!
* @param i DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
private static ArrayList getRecData(final Feature f, final int i) {
final PropertyType[] ftp = f.getFeatureType().getProperties();
final ArrayList<Object> list = new ArrayList<Object>(ftp.length + 1);
list.add(i);
for (int j = 0; j < ftp.length; j++) {
if (ftp[j].getType() == Types.GEOMETRY) {
continue;
}
final FeatureProperty fp = f.getDefaultProperty(ftp[j].getName());
Object obj = null;
if (fp != null) {
obj = fp.getValue();
}
if (obj instanceof Object[]) {
obj = ((Object[])obj)[0];
}
if ((ftp[j].getType() == Types.INTEGER) || (ftp[j].getType() == Types.BIGINT)
|| (ftp[j].getType() == Types.SMALLINT)
|| (ftp[j].getType() == Types.CHAR)
|| (ftp[j].getType() == Types.FLOAT)
|| (ftp[j].getType() == Types.DOUBLE)
|| (ftp[j].getType() == Types.NUMERIC)
|| (ftp[j].getType() == Types.VARCHAR)
|| (ftp[j].getType() == Types.DATE)) {
list.add(obj);
}
}
return list;
}
}