Hi Eric, Thanks for the collboration.
Feel free to continue. R1. 2007/9/25, Michaël Michaud <[EMAIL PROTECTED]>: > Hi Eric, > > Nice to see another french guy involved in OpenJUMP development ;-) > I reviewed your code and it's ok for me. > Maybe you should explain the use case for setting an attribute with > another attribute value. > Anyway, this is just a new capability of an existing plugin. > I can commit the code, or we have to ask Sunburned Surveyor or Stefan > Steiniger (I think Stefan is out of his office until next week) who are > the administrators of the site and can give svn access to new developers. > > Michaël > > Eric Lemesre a écrit : > > > Hello, > > > > Thank verry much for the good job in OpenJUMP. > > > > I make somme modifications in the plugIn ReplaceValuePlugIn (in > > org.openjump.sigle.plugin.replace). > > This plugin replace a attribute with a constante. And now we can copy > > one attribute to an other one. > > > > I joint the code. > > > > How can i have acces to repository and what is rules to use? > > Or how to put this modifications in JPP? > > > > I have planed somme other works and want to give it to the community > > > > Thanks > > Eric > > > >------------------------------------------------------------------------ > > > > > >/* > > * The Unified Mapping Platform (JUMP) is an extensible, interactive GUI > > * for visualizing and manipulating spatial features with geometry and > > attributes. > > * > > * Copyright (C) 2003 Vivid Solutions > > * > > * This program is free software; you can redistribute it and/or > > * modify it under the terms of the GNU General Public License > > * as published by the Free Software Foundation; either version 2 > > * of the License, or (at your option) any later version. > > * > > * This program is distributed in the hope that it will be useful, > > * but WITHOUT ANY WARRANTY; without even the implied warranty of > > * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > > * GNU General Public License for more details. > > * > > * You should have received a copy of the GNU General Public License > > * along with this program; if not, write to the Free Software > > * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, > > USA. > > * > > * For more information, contact: > > * > > * Vivid Solutions > > * Suite #1A > > * 2328 Government Street > > * Victoria BC V8T 5G5 > > * Canada > > * > > * (250)385-6040 > > * www.vividsolutions.com > > */ > > > >package org.openjump.sigle.plugin.replace; > > > >import java.awt.event.ActionEvent; > >import java.awt.event.ActionListener; > >import java.util.*; > > > >import javax.swing.ImageIcon; > >import javax.swing.JCheckBox; > >import javax.swing.JComboBox; > >import javax.swing.JOptionPane; > >import javax.swing.JTextField; > > > > > > > >import org.openjump.sigle.utilities.gui.DialogUtil; > > > >import com.vividsolutions.jump.I18N; > >import com.vividsolutions.jump.feature.*; > >import com.vividsolutions.jump.task.*; > >import com.vividsolutions.jump.workbench.WorkbenchContext; > >import com.vividsolutions.jump.workbench.model.*; > >import com.vividsolutions.jump.workbench.plugin.*; > >import com.vividsolutions.jump.workbench.ui.*; > >import com.vividsolutions.jump.workbench.ui.images.IconLoader; > > > > > >/** > > * > >* @author Erwan Bocher Laboratoire RESO UMR CNRS 6590 > >* @url www.projet-sigle.org > >* @curentdate 25 juil. 06 > >* @package name org.openjump.sigle.plugin.replace > >* @license Licence CeCILL http://www.cecill.info/ > >* @todo TODO > >* > > */ > > > > > > > >public class ReplaceValuePlugIn > > extends AbstractPlugIn > > implements ThreadedPlugIn > >{ > > > > > > private MultiInputDialog dialog; > > //-- replace later with correct language > > private static String ATTRIBUTE = > > I18N.get("org.openjump.sigle.plugin.ReplaceValuePlugIn.Attribute"); > > private static String VALUE = > > I18N.get("org.openjump.sigle.plugin.ReplaceValuePlugIn.New-value"); > > private static String ATTRIBUTE_SRC = > > I18N.get("org.openjump.sigle.plugin.ReplaceValuePlugIn.Attribute-src"); > > private static String BY_ATTRIBUTE = > > I18N.get("org.openjump.sigle.plugin.ReplaceValuePlugIn.New-value-by-copy"); > > private static String TYPE = ""; > > private static String SELECTED_ONLY = > > GenericNames.USE_SELECTED_FEATURES_ONLY; > > > > > > private Layer layer; > > private String attrName; > > private String attrNameSrc; > > private String value = ""; > > private boolean useSelected = true; > > private boolean byAttribute = false; > > public static final ImageIcon ICON = IconLoader.icon("Wrench.gif"); > > > > > > public ReplaceValuePlugIn() > > { > > > > } > > > > public void initialize(PlugInContext context) { > > > > context.getFeatureInstaller().addMainMenuItem(this,new String[] { > > MenuNames.TOOLS, MenuNames.TOOLS_EDIT_ATTRIBUTES }, > > this.getName(), false, null, > > createEnableCheck(context.getWorkbenchContext()) > > ); > > > > } > > > > public String getName(){ > > return > > I18N.get("org.openjump.sigle.plugin.ReplaceValuePlugIn.Replace-Attribute-Value"); > > } > > > > public boolean execute(PlugInContext context) throws Exception { > >// lemesre: duplicate from private initialisation > > ATTRIBUTE = > > I18N.get("org.openjump.sigle.plugin.ReplaceValuePlugIn.Attribute"); > > VALUE = > > I18N.get("org.openjump.sigle.plugin.ReplaceValuePlugIn.New-value"); > > ATTRIBUTE_SRC = > > I18N.get("org.openjump.sigle.plugin.ReplaceValuePlugIn.Attribute-src"); > > BY_ATTRIBUTE = > > I18N.get("org.openjump.sigle.plugin.ReplaceValuePlugIn.New-value-by-copy"); > > SELECTED_ONLY = GenericNames.USE_SELECTED_FEATURES_ONLY; > > > > dialog = new MultiInputDialog( > > context.getWorkbenchFrame(), getName(), true); > > setDialogValues(dialog, context); > > if (layer.isEditable()){ > > GUIUtil.centreOnWindow(dialog); > > dialog.setVisible(true); > > if (! dialog.wasOKPressed()) { return false; } > > getDialogValues(dialog); > > return true; > > } > > else { > > > > JOptionPane.showMessageDialog(dialog, > > I18N.get("ui.SchemaPanel.layer-must-be-editable")); > > } > > return false; > > > > } > > > > public void run(TaskMonitor monitor, PlugInContext context) > > throws Exception > > { > > > > > > // input-proofing > > if (layer == null) return; > > if (attrName == null) return; > > if (value == null && attrNameSrc == null) return; > > > > > > List srcFeatures = > > layer.getFeatureCollectionWrapper().getFeatures(); > > > > > > if (useSelected){ > > > > Collection featureSelected = > > context.getLayerViewPanel().getSelectionManager().getFeaturesWithSelectedItems(layer); > > ; > > > > //System.out.println("Feature selected"); > > > > monitor.report(I18N.get("org.openjump.sigle.plugin.ReplaceValuePlugIn.Replacing-values")); > > if (byAttribute) { > > replaceByAttributeValue(featureSelected, > > attrName,attrNameSrc); > > } else { > > replaceValue(featureSelected, attrName, value); > > } > > > > } > > > > else { > > > > //System.out.println("All features"); > > if (byAttribute) { > > replaceByAttributeValue(srcFeatures, > > attrName,attrNameSrc); > > } else { > > replaceValue(srcFeatures, attrName, value); > > } > > > > > > > > } > > // TODO: look for FeatureEventType.ATTRIBUTE_MODIFIED > > // it is probably better than Layer changed > > // [eric lemesre] > > layer.fireAppearanceChanged(); > > } > > > > > > private void setDialogValues(final MultiInputDialog dialog, PlugInContext > > context) > > { > > > > > > //Initial layer value is null > > > > layer = context.getSelectedLayer(0); > > > > // combos sélection d'un champ > > List columns = DialogUtil.getFieldsFromLayerWithoutGeometry(layer); > > String column1 = null; > > > > if (columns.size()>0) > > column1 = (String) columns.get(0); // récupération du premier > > attribut s'il existe > > > > > > dialog.addComboBox(ATTRIBUTE,column1,columns , "Toto"); > > > > > > final JTextField textfield = dialog.addTextField( > > > > I18N.get("org.openjump.sigle.plugin.ReplaceValuePlugIn.Attribute-type"), > > > > (layer.getFeatureCollectionWrapper().getFeatureSchema().getAttributeType(column1)).toString(), > > 10, null, null); > > textfield.setEnabled(false); > > > > dialog.getComboBox(ATTRIBUTE).addActionListener(new ActionListener() { > > public void actionPerformed(ActionEvent e) { > > // recuperation de la combo couche > > JComboBox cb = (JComboBox) e.getSource(); > > // recuperation de l'attribut selectionné > > String attributeName = (String) cb.getSelectedItem(); > > > > > > textfield.setText((layer.getFeatureCollectionWrapper().getFeatureSchema().getAttributeType(attributeName)).toString()); > > > > } > > }); > > > > > > dialog.addCheckBox(BY_ATTRIBUTE, byAttribute); > > dialog.addComboBox(ATTRIBUTE_SRC,column1,columns , "Nom du champ > > source de la valeur"); //TODO:I18N move to I18N [eric lemesre] > > dialog.getComboBox(ATTRIBUTE_SRC).setEnabled(byAttribute); > > > > final JTextField valuetextfield = > > dialog.addTextField(VALUE,value,20, null, null); > > valuetextfield.setEnabled(true); > > > > dialog.getCheckBox(BY_ATTRIBUTE).addActionListener(new > > ActionListener() { > > public void actionPerformed(ActionEvent e) { > > JCheckBox chk = (JCheckBox) e.getSource(); > > valuetextfield.setEnabled(!chk.isSelected()); > > // valuetextfield.setVisible(!chk.isSelected()); > > > > dialog.getComboBox(ATTRIBUTE_SRC).setEnabled(chk.isSelected()); > > // > > dialog.getComboBox(ATTRIBUTE_SRC).setVisible(chk.isSelected()); > > } > > }); > > > > dialog.addCheckBox(SELECTED_ONLY, useSelected); > > > > } > > > > private void getDialogValues(MultiInputDialog dialog) { > > > > attrName = dialog.getText(ATTRIBUTE); > > value = dialog.getText(VALUE); > > useSelected = dialog.getBoolean(SELECTED_ONLY); > > attrNameSrc = dialog.getText(ATTRIBUTE_SRC); > > byAttribute = dialog.getBoolean(BY_ATTRIBUTE); > > > > } > > > > private void replaceValue(Collection selectedFC, String attrName, > > String value){ > > > > AttributeType type; > > type = ((Feature) > > selectedFC.iterator().next()).getSchema().getAttributeType(attrName); > > > > for (Iterator i = selectedFC.iterator(); i.hasNext(); ) { > > Feature f = (Feature) i.next(); > > > > if (byAttribute) { > > // remplacement par la valeur de l'attribut > > selectionné > > > > }else { > > // remplacement par la valeur saisie > > if (type == AttributeType.DOUBLE) { > > > > f.setAttribute(attrName, new Double > > (value)); > > > > } else if (type == AttributeType.INTEGER) { > > f.setAttribute(attrName, new Integer > > (value)); > > > > } else if (type == AttributeType.STRING) { > > f.setAttribute(attrName, new String > > (value)); > > > > } else { > > > > } > > } > > } > > > > } > > > > private void replaceByAttributeValue(Collection selectedFC, String > > attrNameDest, > > String attrNameSrc){ > > > > //AttributeType typeSrc; > > AttributeType typeDest; > > String AttrValue; > > typeDest = ((Feature) > > selectedFC.iterator().next()).getSchema().getAttributeType(attrNameDest); > > > > for (Iterator i = selectedFC.iterator(); i.hasNext(); ) { > > Feature f = (Feature) i.next(); > > > > AttrValue = (String) f.getAttribute(attrNameSrc); > > > > if (byAttribute) { > > // remplacement par la valeur de l'attribut > > selectionné > > if (typeDest == AttributeType.DOUBLE) { > > f.setAttribute(attrNameDest, new Double > > (AttrValue)); > > > > } else if (typeDest == AttributeType.INTEGER) { > > f.setAttribute(attrNameDest, new Integer > > (AttrValue)); > > > > } else if (typeDest == AttributeType.STRING) { > > f.setAttribute(attrNameDest, new String > > (AttrValue)); > > > > } else { > > > > } > > > > }else { > > } > > } > > > > } > > > > public static MultiEnableCheck createEnableCheck(WorkbenchContext > > workbenchContext) { > > EnableCheckFactory checkFactory = new > > EnableCheckFactory(workbenchContext); > > > > return new MultiEnableCheck() > > .add(checkFactory.createAtLeastNLayersMustExistCheck(1)) > > .add(checkFactory.createSelectedLayersMustBeEditableCheck()); > > } > > > >} > > > > > >------------------------------------------------------------------------ > > > >------------------------------------------------------------------------- > >This SF.net email is sponsored by: Microsoft > >Defy all challenges. Microsoft(R) Visual Studio 2005. > >http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ > > > >------------------------------------------------------------------------ > > > >_______________________________________________ > >Jump-pilot-devel mailing list > >Jump-pilot-devel@lists.sourceforge.net > >https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel > > > > > > > ------------------------------------------------------------------------- > This SF.net email is sponsored by: Microsoft > Defy all challenges. Microsoft(R) Visual Studio 2005. > http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ > _______________________________________________ > Jump-pilot-devel mailing list > Jump-pilot-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel > -- Ingénieur de recherche Docteur en géographie, spécialité géomatique École Centrale de Nantes Institut de recherche en sciences et techniques de la ville http://www.irstv.cnrs.fr/ http://geosysin.iict.ch/irstv-trac/wiki http://r1.bocher.free.fr http://www.projet-sigle.org ------------------------------------------------------------------------- This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2005. http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ _______________________________________________ Jump-pilot-devel mailing list Jump-pilot-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel