/*************************************************** * * 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 java.io.File; import java.util.ArrayList; import java.util.List; import java.util.Map; import de.cismet.cismap.commons.features.FeatureServiceFeature; import de.cismet.cismap.commons.featureservice.AbstractFeatureService; import de.cismet.tools.gui.downloadmanager.AbstractCancellableDownload; import de.cismet.tools.gui.downloadmanager.Download; /** * Every ExportDownload class needs a public constructor without arguments. * * @author therter * @version $Revision$, $Date$ */ public abstract class ExportDownload extends AbstractCancellableDownload { //~ Instance fields -------------------------------------------------------- protected FeatureServiceFeature[] features; protected AbstractFeatureService service; protected List<String[]> aliasAttributeList; protected String extension; private boolean absoluteFileName; //~ Methods ---------------------------------------------------------------- /** * DOCUMENT ME! * * @param filename DOCUMENT ME! * @param extension DOCUMENT ME! * @param features DOCUMENT ME! * @param service DOCUMENT ME! * @param aliasAttributeList A list with string arrays. Every array should have 2 elements. The first element is * the alias of the column and the second element is the name of the attribute, that * should be shown in the column */ public void init(final String filename, final String extension, final FeatureServiceFeature[] features, final AbstractFeatureService service, final List<String[]> aliasAttributeList) { this.features = features; this.service = service; this.aliasAttributeList = aliasAttributeList; this.title = "Export " + ((features != null) ? features.length : "") + " Features"; this.extension = extension; if (aliasAttributeList == null) { if ((features != null) && (features.length > 0)) { this.aliasAttributeList = getAttributeNames(features[0]); } } status = Download.State.WAITING; String filenameWithoutExt = filename; if (filename.contains(".") && (filename.charAt(filename.length() - 4) == '.')) { filenameWithoutExt = filename.substring(0, filename.length() - 4); } if (absoluteFileName || new File(filename).isAbsolute()) { fileToSaveTo = new File(filename + extension); int index = filename.lastIndexOf("/"); if (index == -1) { index = filename.lastIndexOf("\\"); } final File dir = new File(filename.substring(0, index)); if (!dir.exists()) { dir.mkdirs(); } } else { determineDestinationFile(filenameWithoutExt, extension); } } /** * DOCUMENT ME! * * @throws Exception DOCUMENT ME! */ protected void loadFeaturesIfRequired() throws Exception { if (features == null) { service.initAndWait(); final List<FeatureServiceFeature> featureList = service.getFeatureFactory() .createFeatures(service.getQuery(), null, null, 0, 0, null); features = featureList.toArray(new FeatureServiceFeature[featureList.size()]); if (aliasAttributeList == null) { if ((features != null) && (features.length > 0)) { this.aliasAttributeList = getAttributeNames(features[0]); } } } } /** * DOCUMENT ME! * * @param absoluteFileName DOCUMENT ME! */ public void setAbsoluteFileName(final boolean absoluteFileName) { this.absoluteFileName = absoluteFileName; } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public abstract String getDefaultExtension(); /** * DOCUMENT ME! * * @param f DOCUMENT ME! * * @return DOCUMENT ME! */ private List<String[]> getAttributeNames(final FeatureServiceFeature f) { final List<String[]> attrNames = new ArrayList<String[]>(); final Map<String, Object> hm = (Map<String, Object>)f.getProperties(); for (final String attrName : hm.keySet()) { final String[] aliasName = new String[2]; aliasName[0] = aliasName[1] = attrName; attrNames.add(aliasName); } return attrNames; } /** * DOCUMENT ME! * * @param aliasAttributeList DOCUMENT ME! * * @return DOCUMENT ME! */ protected List<String> toAliasList(final List<String[]> aliasAttributeList) { return toAliasOrAttributeList(aliasAttributeList, true); } /** * DOCUMENT ME! * * @param aliasAttributeList DOCUMENT ME! * * @return DOCUMENT ME! */ protected List<String> toAttributeList(final List<String[]> aliasAttributeList) { return toAliasOrAttributeList(aliasAttributeList, false); } /** * DOCUMENT ME! * * @param aliasAttributeList DOCUMENT ME! * @param aliasList DOCUMENT ME! * * @return DOCUMENT ME! */ private List<String> toAliasOrAttributeList(final List<String[]> aliasAttributeList, final boolean aliasList) { final List<String> attrList = new ArrayList<String>(aliasAttributeList.size()); for (final String[] aliasAttr : aliasAttributeList) { attrList.add((aliasList ? aliasAttr[0] : aliasAttr[1])); } return attrList; } @Override public boolean equals(final Object obj) { if (obj instanceof Download) { if ((fileToSaveTo == null) && (((Download)obj).getFileToSaveTo() == null)) { return (obj.getClass().getName().equals(this.getClass().getName())); } } return super.equals(obj); } }