logo       

Re: ReplaceValuePlugIn: msg#00498

gis.jump.devel

Subject: Re: ReplaceValuePlugIn

Salut Eric,

nice to have you on board :)
We have setup some informal rules for contribution. You get write access
to the svn in two ways:
1) you get immediate access to the svn if you got a recommendation by
developer that is already well known by the project (or a member); or
2) we review the first two contributions. If both are ok you will grant
write access. As you passed the 1st code-review round already according
to Michael, I would like to ask you, to send to your second contribution
to the devel-list for a review (if you have finished that work already)

I hope you understand this policy and I suppose the 2nd sample you
presenet will be a piece of cake for you? Alteratively you may tell us
(or me and Michael personally) about your programming experience.

Anyway, as it seems to me you will qualify ;) i ask you to already send
me your sourceforge account name (on my personal email), so i can
prepare anything for svn-write access.

cheers, currently from Germany (Btw. I met some people from Intevation
on the Intergeo fair)

stefan

@ Michael: thank you for reviewing! If you want you can commit the code.
Otherwise I will do in the next days.


Michaël Michaud schrieb:
> 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
>
>


-------------------------------------------------------------------------
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