/*************************************************** * * 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.gui.attributetable; import com.vividsolutions.jts.geom.Geometry; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.swing.JTable; import javax.swing.table.TableCellEditor; import javax.swing.table.TableCellRenderer; import javax.swing.table.TableModel; import de.cismet.cismap.commons.features.DefaultFeatureServiceFeature; import de.cismet.cismap.commons.features.FeatureServiceFeature; import de.cismet.cismap.commons.featureservice.FeatureServiceAttribute; import de.cismet.cismap.commons.featureservice.LayerProperties; import de.cismet.cismap.commons.gui.piccolo.FeatureAnnotationSymbol; /** * DOCUMENT ME! * * @author therter * @version $Revision$, $Date$ */ public class DefaultAttributeTableRuleSet implements AttributeTableRuleSet { //~ Methods ---------------------------------------------------------------- @Override public boolean isColumnEditable(final String columnName) { return true; } @Override public Object afterEdit(final FeatureServiceFeature feature, final String column, final int row, final Object oldValue, final Object newValue) { return newValue; } @Override public TableCellRenderer getCellRenderer(final String columnName) { return null; } @Override public TableCellEditor getCellEditor(final String columnName) { return null; } @Override public boolean prepareForSave(final List<FeatureServiceFeature> features) { return true; } @Override public void beforeSave(final FeatureServiceFeature feature) { } @Override public void afterSave(final TableModel model) { } @Override public String[] getAdditionalFieldNames() { return new String[0]; } @Override public Object getAdditionalFieldValue(final java.lang.String propertyName, final FeatureServiceFeature feature) { return null; } @Override public Class getAdditionalFieldClass(final int index) { return String.class; } @Override public FeatureCreator getFeatureCreator() { return null; } @Override public Map<String, Object> getDefaultValues() { return null; } @Override public void mouseClicked(final FeatureServiceFeature feature, final String columnName, final Object value, final int clickCount) { } @Override public int getIndexOfAdditionalFieldName(final String name) { final String[] fieldNames = getAdditionalFieldNames(); if (fieldNames != null) { for (int i = 0; i < fieldNames.length; ++i) { if (fieldNames[i].equals(name)) { return i; } } } return Integer.MIN_VALUE; } @Override public boolean isCatThree() { return false; } @Override public FeatureServiceFeature cloneFeature(final FeatureServiceFeature feature) { final DefaultFeatureServiceFeature newFeature = (DefaultFeatureServiceFeature)feature .getLayerProperties().getFeatureService().getFeatureFactory().createNewFeature(); final HashMap<String, Object> properties = feature.getProperties(); for (final String propertyKey : properties.keySet()) { if (!propertyKey.equalsIgnoreCase("id") && !propertyKey.equals(feature.getIdExpression())) { newFeature.setProperty(propertyKey, properties.get(propertyKey)); } } return newFeature; } @Override public FeatureAnnotationSymbol getPointAnnotationSymbol(final FeatureServiceFeature feature) { return null; } @Override public boolean hasCustomExportFeaturesMethod() { return false; } @Override public void exportFeatures() { } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ @Override public boolean hasCustomPrintFeaturesMethod() { return false; } /** * DOCUMENT ME! */ @Override public void printFeatures() { } @Override public void copyProperties(final FeatureServiceFeature sourceFeature, final FeatureServiceFeature targetFeature) { // copy properties final Map<String, Object> defaultValues = getDefaultValues(); if (defaultValues != null) { for (final String propName : defaultValues.keySet()) { targetFeature.setProperty(propName, defaultValues.get(propName)); } } final boolean hasIdExpression = targetFeature.getLayerProperties().getIdExpressionType() == LayerProperties.EXPRESSIONTYPE_PROPERTYNAME; final Map<String, FeatureServiceAttribute> attributeMap = targetFeature.getLayerProperties() .getFeatureService() .getFeatureServiceAttributes(); for (final String attrKey : attributeMap.keySet()) { if (hasIdExpression && targetFeature.getLayerProperties().getIdExpression().equalsIgnoreCase(attrKey)) { // do not change the id continue; } if (isColumnEditable(attrKey)) { final Object val = getFeaturePropertyIgnoreCase(sourceFeature, attrKey); if (val != null) { // without this null check, the geometry will probably be overwritten targetFeature.setProperty(attrKey, val); } } } } /** * DOCUMENT ME! * * @param feature DOCUMENT ME! * @param name DOCUMENT ME! * * @return DOCUMENT ME! */ private Object getFeaturePropertyIgnoreCase(final FeatureServiceFeature feature, final String name) { for (final Object prop : feature.getProperties().keySet()) { if (prop instanceof String) { final String propName = (String)prop; if (propName.equalsIgnoreCase(name)) { return feature.getProperty(propName); } } } return null; } @Override public Class<? extends FeatureServiceFeature> getFeatureClass() { return null; } }