logo       

Re: ReplaceValuePlugIn: msg#00486

gis.jump.devel

Subject: Re: ReplaceValuePlugIn

Hi Eric,

Thanks for the collboration.

Feel free to continue.

R1.


2007/9/25, Michaël Michaud <michael.michaud@xxxxxxx>:
> 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@xxxxxxxxxxxxxxxxxxxxx
> >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@xxxxxxxxxxxxxxxxxxxxx
> 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/


<Prev in Thread] Current Thread [Next in Thread>
Google Custom Search

News | FAQ | advertise