Revision 39678

View differences:

tags/v2_0_0_Build_2063/libraries/org.gvsig.newlayer/org.gvsig.newlayer.lib/pom.xml
1
<?xml version="1.0" encoding="ISO-8859-1"?>
2
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
4
		 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5

  
6
	<modelVersion>4.0.0</modelVersion>
7
	<artifactId>org.gvsig.newlayer.lib</artifactId>
8
	<packaging>pom</packaging>
9
	<name>org.gvsig.newlayer.lib</name>
10
	<parent>
11
		<groupId>org.gvsig</groupId>
12
		<artifactId>org.gvsig.newlayer</artifactId>
13
		<version>1.0.0-SNAPSHOT</version>
14
	</parent>
15

  
16
	<modules>
17
		<module>org.gvsig.newlayer.lib.api</module>
18
		<module>org.gvsig.newlayer.lib.impl</module>
19
	</modules>
20
</project>
tags/v2_0_0_Build_2063/libraries/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.impl/src/test/resources/README.txt
1
Put into this folder the resources needed by your test classes.
2

  
3
This folder is added to the Tests classpath, so you can load any resources 
4
through the ClassLoader.
5

  
6
By default, in this folder you can find an example of log4j configuration,
7
prepared to log messages through the console, so logging works when you
8
run your tests classes.
tags/v2_0_0_Build_2063/libraries/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.impl/src/test/resources/log4j.xml
1
<?xml version="1.0" encoding="ISO-8859-1" ?>
2
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
3

  
4
<!-- 
5
Log4J configuration file for unit tests execution.
6
 -->
7
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
8

  
9
	<!-- Appender configuration to show logging messages through the console -->
10
	<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
11
		<layout class="org.apache.log4j.PatternLayout">
12
			<param name="ConversionPattern" value="%d{HH:mm:ss,SSS} %-5p [%c{2}.%M()]\n  %m%n" />
13
		</layout>
14
	</appender>
15

  
16
	<!-- 
17
	Activate logging messages of DEBUG level of higher only for the
18
	org.gvsig.tools packages.
19
	You can put full classes names or packages instead, to configure
20
	logging for all the classes and subpackages of the package.
21
	-->
22
	<category name="org.gvsig.tools">
23
		<priority value="DEBUG" />
24
	</category>
25
	<category name="org.gvsig.newlayer">
26
		<priority value="DEBUG" />
27
	</category>
28

  
29
	<!-- 
30
	By default, show only logging messages of INFO level or higher, 
31
	through the previously configured CONSOLE appender. 
32
	-->
33
	<root>
34
		<priority value="INFO" />
35
		<appender-ref ref="CONSOLE" />
36
	</root>
37
</log4j:configuration>
tags/v2_0_0_Build_2063/libraries/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.impl/src/main/java/org/gvsig/newlayer/impl/DefaultNewLayerManager.java
1
/* gvSIG. Geographic Information System of the Valencian Government
2
 *
3
 * Copyright (C) 2007-2008 Infrastructures and Transports Department
4
 * of the Valencian Government (CIT)
5
 *
6
 * This program is free software; you can redistribute it and/or
7
 * modify it under the terms of the GNU General Public License
8
 * as published by the Free Software Foundation; either version 2
9
 * of the License, or (at your option) any later version.
10
 *
11
 * This program is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 * GNU General Public License for more details.
15
 *
16
 * You should have received a copy of the GNU General Public License
17
 * along with this program; if not, write to the Free Software
18
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19
 * MA  02110-1301, USA.
20
 *
21
 */
22
package org.gvsig.newlayer.impl;
23

  
24
import java.net.URL;
25
import java.util.ArrayList;
26
import java.util.HashMap;
27
import java.util.Iterator;
28
import java.util.List;
29
import java.util.Map;
30

  
31
import javax.swing.ImageIcon;
32

  
33
import org.slf4j.Logger;
34
import org.slf4j.LoggerFactory;
35

  
36
import org.gvsig.fmap.mapcontext.MapContext;
37
import org.gvsig.newlayer.NewLayerManager;
38
import org.gvsig.newlayer.NewLayerProviderFactory;
39
import org.gvsig.newlayer.NewLayerService;
40
import org.gvsig.newlayer.NewLayerWizard;
41
import org.gvsig.newlayer.impl.preferences.DefaultNewLayerPreferencesComponent;
42
import org.gvsig.newlayer.preferences.NewLayerPreferencesComponent;
43
import org.gvsig.tools.ToolsLocator;
44
import org.gvsig.tools.extensionpoint.ExtensionPoint;
45
import org.gvsig.tools.extensionpoint.ExtensionPoint.Extension;
46
import org.gvsig.tools.extensionpoint.ExtensionPointManager;
47
import org.gvsig.tools.service.ServiceException;
48

  
49
/**
50
 * Default {@link NewLayerManager} implementation.
51
 * 
52
 * @author gvSIG Team
53
 * @version $Id$
54
 */
55
public class DefaultNewLayerManager implements NewLayerManager {
56

  
57
    private static final Logger LOG = LoggerFactory
58
        .getLogger(DefaultNewLayerManager.class);
59

  
60
    final static private String EP_NEWLAYER_NAME = "NewLayer.manager.providers";
61
    final static private String EP_NEWLAYER_DESCRIPTION = "NewLayer providers";
62

  
63
    private Map<NewLayerProviderFactory, Boolean> providerStatus;
64

  
65
    /**
66
     * Empty constructor.
67
     */
68
    public DefaultNewLayerManager() {
69
        providerStatus = new HashMap<NewLayerProviderFactory, Boolean>();
70
    }
71

  
72
    public NewLayerService createNewLayerService(MapContext mapContext) {
73
        return new DefaultNewLayerService(this, mapContext);
74
    }
75

  
76
    public void registerProvider(NewLayerProviderFactory factory) {
77
        ExtensionPoint ep = getNewLayerProvidersExtensionPoint();
78
        ep.append(factory.getName(), factory.getDescription(), factory);
79
    }
80

  
81
    public NewLayerWizard createNewLayerWizard(NewLayerService service) {
82
        URL iconURL =
83
            getClass().getClassLoader().getResource(
84
                "org/gvsig/newlayer/lib/impl/images/newlayericon.png");
85
        ImageIcon logo = null;
86
        if (iconURL != null) {
87
            logo = new ImageIcon(iconURL);
88
        }
89

  
90
        return new DefaultNewLayerWizard(logo, service);
91
    }
92

  
93
    public NewLayerProviderFactory getNewLayerProviderFactory(
94
        String providerName) throws ServiceException {
95
        ExtensionPoint ep = getNewLayerProvidersExtensionPoint();
96
        try {
97
            return (NewLayerProviderFactory) ep.create(providerName);
98
        } catch (InstantiationException e) {
99
            throw new RuntimeException(e);
100
        } catch (IllegalAccessException e) {
101
            throw new RuntimeException(e);
102
        }
103
    }
104

  
105
    public void enableProvider(NewLayerProviderFactory factory, Boolean value) {
106
        providerStatus.put(factory, Boolean.valueOf(value));
107
    }
108

  
109
    public NewLayerPreferencesComponent createNewLayerProvidersPreferences() {
110
        return new DefaultNewLayerPreferencesComponent();
111
    }
112

  
113
    public List<NewLayerProviderFactory> getProviders() {
114
        ExtensionPoint ep = getNewLayerProvidersExtensionPoint();
115
        List<NewLayerProviderFactory> providers =
116
            new ArrayList<NewLayerProviderFactory>();
117
        @SuppressWarnings("unchecked")
118
        Iterator<Extension> it = ep.iterator();
119

  
120
        while (it.hasNext()) {
121
            Extension extension = (Extension) it.next();
122
            NewLayerProviderFactory factory;
123
            try {
124
                factory = (NewLayerProviderFactory) extension.create();
125
            } catch (InstantiationException e) {
126
                LOG.warn(
127
                    "Can't create NewLayerProviderFactory "
128
                        + extension.getName(), e);
129
                continue;
130
            } catch (IllegalAccessException e) {
131
                LOG.warn(
132
                    "Can't create NewLayerProviderFactory "
133
                        + extension.getName(), e);
134
                continue;
135
            }
136
            providers.add(factory);
137
        }
138

  
139
        return providers;
140
    }
141

  
142
    private ExtensionPoint getNewLayerProvidersExtensionPoint() {
143
        ExtensionPointManager epmgr = ToolsLocator.getExtensionPointManager();
144
        return
145
            epmgr.add(EP_NEWLAYER_NAME, EP_NEWLAYER_DESCRIPTION);
146
    }
147

  
148
    public List<NewLayerProviderFactory> getProviders(STORETYPE filter) {
149
        // TODO use filters
150
        // if (filter == STORETYPE.TABULAR){
151
        // if (!factory.isSpatial()){
152
        // providers.add(factory);
153
        // }
154
        // } else {
155
        // }
156
        return getProviders();
157
    }
158

  
159
    public boolean isProviderEnabled(NewLayerProviderFactory factory) {
160
        Boolean status = providerStatus.get(factory);
161
        return status == null ? true : status.booleanValue();
162
    }
163

  
164
}
tags/v2_0_0_Build_2063/libraries/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.impl/src/main/java/org/gvsig/newlayer/impl/AddNewLayerQuestionPanel.java
1
package org.gvsig.newlayer.impl;
2

  
3
import java.awt.BorderLayout;
4

  
5
import javax.swing.JCheckBox;
6
import javax.swing.JPanel;
7

  
8
import org.gvsig.gui.beans.wizard.panel.NotContinueWizardException;
9
import org.gvsig.gui.beans.wizard.panel.OptionPanel;
10
import org.gvsig.i18n.Messages;
11
import org.gvsig.newlayer.NewLayerService;
12
import org.gvsig.newlayer.NewLayerWizard;
13

  
14
public class AddNewLayerQuestionPanel extends JPanel implements OptionPanel{
15
	
16
    private static final long serialVersionUID = -5251910576017225307L;
17
    private NewLayerWizard wizard;
18
	private JCheckBox questionCheckBox = null;
19
	
20
	public AddNewLayerQuestionPanel(NewLayerWizard wizard){
21
		this.wizard = wizard;
22
		initializeComponents();
23
	}
24

  
25
	public String getPanelTitle() {
26
		return "Add layer question panel";
27
	}
28

  
29
	public void nextPanel() throws NotContinueWizardException {
30
		getService().addLayerToView(getAddLayerToView());
31
	}
32

  
33
	public void lastPanel() {
34
		// do nothing
35
		
36
	}
37

  
38
	public void updatePanel() {
39
		initializeComponents();
40
	}
41

  
42
	public JPanel getJPanel() {
43
		return this;
44
	}
45

  
46
    private void initializeComponents() {
47
        this.setLayout(new BorderLayout());
48
        this.add(getQuestionCheckBox(), BorderLayout.CENTER);        
49
    }
50
    
51
    private JCheckBox getQuestionCheckBox(){
52
    	if (this.questionCheckBox == null){
53
    		this.questionCheckBox = new JCheckBox(Messages.getText("add_layer_to_view_question"), true);
54
    	}
55
    	return this.questionCheckBox;
56
    }
57

  
58
	private NewLayerService getService() {
59
		return this.wizard.getService();
60
	} 
61
	
62
	public boolean getAddLayerToView(){
63
		return getQuestionCheckBox().isSelected();
64
	}
65
}
tags/v2_0_0_Build_2063/libraries/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.impl/src/main/java/org/gvsig/newlayer/impl/DefaultNewLayerService.java
1
/* gvSIG. Geographic Information System of the Valencian Government
2
 *
3
 * Copyright (C) 2007-2008 Infrastructures and Transports Department
4
 * of the Valencian Government (CIT)
5
 *
6
 * This program is free software; you can redistribute it and/or
7
 * modify it under the terms of the GNU General Public License
8
 * as published by the Free Software Foundation; either version 2
9
 * of the License, or (at your option) any later version.
10
 *
11
 * This program is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 * GNU General Public License for more details.
15
 *
16
 * You should have received a copy of the GNU General Public License
17
 * along with this program; if not, write to the Free Software
18
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19
 * MA  02110-1301, USA.
20
 *
21
 */
22
package org.gvsig.newlayer.impl;
23

  
24
import java.util.ArrayList;
25
import java.util.Iterator;
26
import java.util.List;
27

  
28
import org.gvsig.fmap.dal.DALLocator;
29
import org.gvsig.fmap.dal.DataManager;
30
import org.gvsig.fmap.dal.DataServerExplorer;
31
import org.gvsig.fmap.dal.DataStore;
32
import org.gvsig.fmap.dal.DataStoreParameters;
33
import org.gvsig.fmap.dal.exception.DataException;
34
import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
35
import org.gvsig.fmap.dal.feature.EditableFeatureType;
36
import org.gvsig.fmap.dal.feature.NewFeatureStoreParameters;
37
import org.gvsig.fmap.mapcontext.MapContext;
38
import org.gvsig.fmap.mapcontext.MapContextLocator;
39
import org.gvsig.fmap.mapcontext.MapContextManager;
40
import org.gvsig.fmap.mapcontext.exceptions.LoadLayerException;
41
import org.gvsig.fmap.mapcontext.layers.FLayer;
42
import org.gvsig.newlayer.NewLayerManager;
43
import org.gvsig.newlayer.NewLayerProvider;
44
import org.gvsig.newlayer.NewLayerProviderFactory;
45
import org.gvsig.newlayer.NewLayerService;
46
import org.gvsig.newlayer.NewLayerServiceException;
47
import org.gvsig.tools.service.ServiceException;
48

  
49
/**
50
 * Default {@link NewLayerService} implementation.
51
 * 
52
 * @author gvSIG Team
53
 * @version $Id$
54
 */
55
public class DefaultNewLayerService implements NewLayerService {
56

  
57
    private NewLayerManager newLayerManager;
58
    private NewLayerProviderFactory type;
59
    private NewLayerProvider provider;
60
    private boolean addLayerToView = true;
61
    private MapContext mapContext;
62

  
63
    /**
64
     * {@link DefaultNewLayerService} constructor
65
     */
66
    public DefaultNewLayerService(NewLayerManager manager, MapContext mapContext) {
67
        this.newLayerManager = manager;
68
        this.mapContext = mapContext;
69
    }
70

  
71
    public NewLayerProvider getProvider() {
72
        return provider;
73
    }
74

  
75
    public void createLayer() throws NewLayerServiceException {
76
        try {
77
            this.getExplorer().add(this.getStoreName(),
78
                this.getNewStoreParameters(), true);
79
        } catch (DataException e) {
80
            throw new CantCreateNewLayerException(e);
81
        }
82
    }
83

  
84
    public void loadLayer() throws NewLayerServiceException {
85
        try {
86
            String storeName = this.getStoreName();
87
            DataStoreParameters storeParameters =
88
                this.getOpenStoreParameters();
89
            DataManager dataManager = DALLocator.getDataManager();
90
            DataStore store = dataManager.openStore(storeName, storeParameters);
91
            String layerName = store.getName();
92

  
93
            MapContextManager mapContextManager =
94
                MapContextLocator.getMapContextManager();
95
            FLayer lyr = mapContextManager.createLayer(layerName, store);
96
            lyr.setActive(true);
97
            lyr.setVisible(true);
98
            mapContext.getLayers().addLayer(lyr);
99

  
100
            lyr.dispose();
101
        } catch (DataException e) {
102
            throw new CantOpenStoreException(e);
103
        } catch (ValidateDataParametersException e) {
104
            throw new CantOpenStoreException(e);
105
        } catch (LoadLayerException e) {
106
            throw new CantLoadNewLayerException(e);
107
        }
108

  
109
    }
110

  
111
    public class CantCreateNewLayerException extends NewLayerServiceException {
112

  
113
        /**
114
		 * 
115
		 */
116
        private static final long serialVersionUID = 4208215791054246118L;
117

  
118
        public CantCreateNewLayerException(Throwable cause) {
119
            super("Can't create the layer", cause, "_cant_create_the_layer",
120
                serialVersionUID);
121
        }
122
    }
123

  
124
    public class CantOpenStoreException extends NewLayerServiceException {
125

  
126
        /**
127
		 * 
128
		 */
129
        private static final long serialVersionUID = -2245228621032918630L;
130

  
131
        public CantOpenStoreException(Throwable cause) {
132
            super("Can't open store", cause, "_cant_open_store",
133
                serialVersionUID);
134
        }
135
    }
136

  
137
    public class CantLoadNewLayerException extends NewLayerServiceException {
138

  
139
        /**
140
		 * 
141
		 */
142
        private static final long serialVersionUID = -1711950651766745963L;
143

  
144
        public CantLoadNewLayerException(Throwable cause) {
145
            super("Can't load the new layer", cause,
146
                "_cant_load_the_new_layer", serialVersionUID);
147
        }
148
    }
149

  
150
    public void setType(String type) {
151
        try {
152
            setProviderFactory(this.newLayerManager
153
                .getNewLayerProviderFactory(type));
154
        } catch (ServiceException e) {
155
            throw new RuntimeException(e);
156
        }
157
    }
158

  
159
    public DataServerExplorer getExplorer() {
160
        return getProvider().getExplorer();
161
    }
162

  
163
    public String getStoreName() {
164
        return getProvider().getStoreName();
165
    }
166

  
167
    public EditableFeatureType getFeatureType() {
168
        return getProvider().getFeatureType();
169
    }
170

  
171
    public NewFeatureStoreParameters getNewStoreParameters() {
172
        return getProvider().getNewStoreParameters();
173
    }
174

  
175
    public DataStoreParameters getOpenStoreParameters() {
176
        return getProvider().getOpenStoreParameters();
177
    }
178

  
179
    public List<String> getTypes() {
180
        List<String> types = new ArrayList<String>();
181
        List<NewLayerProviderFactory> providers = getProviderFactories();
182
        Iterator<NewLayerProviderFactory> it = providers.iterator();
183
        while (it.hasNext()) {
184
            NewLayerProviderFactory newLayerProviderFactory = it.next();
185
            types.add(newLayerProviderFactory.getName());
186
        }
187
        return types;
188
    }
189

  
190
    public String getType() {
191
        return this.type.getName();
192
    }
193

  
194
    public void addLayerToView(boolean b) {
195
        this.addLayerToView = b;
196
    }
197

  
198
    public MapContext getMapContext() {
199
        return mapContext;
200
    }
201

  
202
    public void setProviderFactory(NewLayerProviderFactory type) {
203
        this.type = type;
204
        this.provider = type.create(this);
205
    }
206

  
207
    public NewLayerProviderFactory getProviderFactory() {
208
        return type;
209
    }
210

  
211
    public List<NewLayerProviderFactory> getProviderFactories() {
212

  
213
        List<NewLayerProviderFactory> providers =
214
            new ArrayList<NewLayerProviderFactory>(
215
                this.newLayerManager
216
                    .getProviders(NewLayerManager.STORETYPE.ANY));
217

  
218
        for (Iterator<NewLayerProviderFactory> iterator = providers.iterator(); iterator
219
            .hasNext();) {
220
            NewLayerProviderFactory newLayerProviderFactory = iterator.next();
221
            if (!newLayerProviderFactory.isEnabled()) {
222
                iterator.remove();
223
            }
224
        }
225

  
226
        return providers;
227
    }
228

  
229
}
tags/v2_0_0_Build_2063/libraries/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.impl/src/main/java/org/gvsig/newlayer/impl/DefaultNewLayerWizard.java
1
package org.gvsig.newlayer.impl;
2

  
3
import java.awt.Dimension;
4
import java.util.Iterator;
5
import java.util.List;
6

  
7
import javax.swing.ImageIcon;
8
import javax.swing.JOptionPane;
9
import javax.swing.JPanel;
10

  
11
import jwizardcomponent.CancelAction;
12
import jwizardcomponent.DefaultJWizardComponents;
13
import jwizardcomponent.FinishAction;
14
import jwizardcomponent.JWizardComponents;
15

  
16
import org.slf4j.Logger;
17
import org.slf4j.LoggerFactory;
18

  
19
import org.gvsig.fmap.dal.DALLocator;
20
import org.gvsig.fmap.dal.DataStoreProviderFactory;
21
import org.gvsig.fmap.dal.feature.FeatureStoreProviderFactory;
22
import org.gvsig.gui.beans.wizard.panel.NotContinueWizardException;
23
import org.gvsig.gui.beans.wizard.panel.OptionPanel;
24
import org.gvsig.i18n.Messages;
25
import org.gvsig.newlayer.NewLayerException;
26
import org.gvsig.newlayer.NewLayerProviderFactory;
27
import org.gvsig.newlayer.NewLayerProviderPanel;
28
import org.gvsig.newlayer.NewLayerService;
29
import org.gvsig.newlayer.NewLayerServiceException;
30
import org.gvsig.newlayer.NewLayerWizard;
31

  
32
public class DefaultNewLayerWizard extends NewLayerWizard {
33

  
34
	/**
35
	 * 
36
	 */
37
	private static final long serialVersionUID = -5827106636136663823L;
38
	private NewLayerService service;
39
	private AddNewLayerQuestionPanel addNewLayerQuestionPanel;
40
	private static final Logger LOG =
41
        LoggerFactory.getLogger(DefaultNewLayerWizard.class);
42

  
43
	public DefaultNewLayerWizard(ImageIcon logo, NewLayerService service) {
44
		super(logo);
45
		setPreferredSize(new Dimension(800, 400));
46
		this.service = service;
47
		this.getWizardComponents().setFinishAction(
48
				new MyFinishAction(this.getWizardComponents()));
49
		this.getWizardComponents().setCancelAction(
50
				new MyCancelAction(this.getWizardComponents()));
51
		this.createTypeSelector();
52
		
53
		// ================ disable at the start
54
        this.setFinishButtonEnabled(false);
55
        this.setBackButtonEnabled(false);
56
        this.setNextButtonEnabled(false);
57
	}
58

  
59
	public NewLayerService getService() {
60
		return this.service;
61
	}
62

  
63
	private void createTypeSelector() {
64

  
65
		TypeSelectorPanel panel = new TypeSelectorPanel(this);
66
		this.addOptionPanel(panel);
67

  
68
	}
69

  
70
	private void createFeatureTypePanel() {
71
	    
72
		FeatureTypePanel panel = new FeatureTypePanel(service);
73
		this.addOptionPanel(panel);
74
	}
75

  
76
	private void createProviderPanels() {
77
		DefaultJWizardComponents wizardComponents = this.getWizardComponents();
78
		for (int i = wizardComponents.getWizardPanelList().size() - 1; i >= 1; i--) {
79
			wizardComponents.removeWizardPanel(i);
80
		}
81
		List<NewLayerProviderPanel> panels = service.getProvider().getPanels();
82
		Iterator<NewLayerProviderPanel> it = panels.iterator();
83
		while (it.hasNext()) {
84
			NewLayerProviderPanel panel = it.next();
85
			this.addOptionPanel(new OptionPanelWrapper(panel));
86
		}
87
		this.createFeatureTypePanel();
88
		this.createAddNewLayerQuestionPanel();
89
	}
90

  
91
	private AddNewLayerQuestionPanel getAddNewLayerQuestionPanel() {
92
		if (this.addNewLayerQuestionPanel == null) {
93
			this.addNewLayerQuestionPanel = new AddNewLayerQuestionPanel(this);
94
		}
95
		return this.addNewLayerQuestionPanel;
96
	}
97

  
98
	private void createAddNewLayerQuestionPanel() {
99
		this.addOptionPanel(getAddNewLayerQuestionPanel());
100
	}
101

  
102
	private boolean getAddLayerToView() {
103
		return getAddNewLayerQuestionPanel().getAddLayerToView();
104
	}
105

  
106
	@Override
107
    public void setType(NewLayerProviderFactory currentType) {
108
        this.service.setProviderFactory(currentType);
109
		createProviderPanels();
110
	}
111

  
112
	private class OptionPanelWrapper implements OptionPanel {
113

  
114
		private NewLayerProviderPanel panel;
115

  
116
		public OptionPanelWrapper(NewLayerProviderPanel panel) {
117
			this.panel = panel;
118
		}
119

  
120
		public String getPanelTitle() {
121
			return this.panel.getTitle();
122
		}
123

  
124
		public void nextPanel() throws NotContinueWizardException {
125

  
126
		    try {
127
    			if (!this.panel.isValidPanel()) {
128
    				throw new NotContinueWizardException("Error validating the form", panel, false);
129
    			}
130
		    } catch (NewLayerException e) {
131
                LOG.info("Error validating the form", e);
132
                throw new NotContinueWizardException("Error validating the form",
133
                    e, panel);
134
            }
135
		}
136

  
137
		public void lastPanel() {
138
		}
139

  
140
		public void updatePanel() {
141
			this.panel.updatePanel();
142
		}
143

  
144
		public JPanel getJPanel() {
145
			return this.panel;
146
		}
147

  
148
	}
149

  
150
	private class MyFinishAction extends FinishAction {
151

  
152
		public MyFinishAction(JWizardComponents arg0) {
153
			super(arg0);
154
		}
155

  
156
		public void performAction() {
157

  
158
			if (getService().getStoreName() == null) {
159
				JOptionPane
160
				.showMessageDialog(
161
						null,
162
						Messages.getText("new_layer_not_store_name"),
163
						Messages.getText("new_layer"),
164
						JOptionPane.WARNING_MESSAGE);
165
				return;
166
			}
167
			if (getService().getNewStoreParameters() == null) {
168
				JOptionPane
169
				.showMessageDialog(
170
						null,
171
						Messages.getText("new_layer_parameters_missing"),
172
						Messages.getText("new_layer"),
173
						JOptionPane.WARNING_MESSAGE);
174
				return;
175
			}
176
			getService().addLayerToView(getAddLayerToView());
177
			try {
178
				getService().createLayer();
179
			} catch (NewLayerServiceException e) {
180
				LOG.info("Cannot create the new layer", e);
181
				JOptionPane
182
				.showMessageDialog(
183
						null,
184
						Messages.getText("cant_create_new_layer") + "\n" + e.getMessageStack(),
185
						Messages.getText("new_layer"),
186
						JOptionPane.ERROR_MESSAGE);
187
				return;
188
			}
189
			
190
			try {
191
				getService().loadLayer();
192
			} catch (NewLayerServiceException e) {
193
				JOptionPane
194
				.showMessageDialog(
195
						null,
196
						"The new layer has been succesfully created but can't load the new layer.\n Try load it yourshelf, please.",
197
						"Can't create a new layer",
198
						JOptionPane.WARNING_MESSAGE);
199
			}
200
			setVisible(false);
201
			return;
202
		}
203

  
204
	}
205

  
206
	private class MyCancelAction extends CancelAction {
207

  
208
		public MyCancelAction(DefaultJWizardComponents wizardComponents) {
209
			super(wizardComponents);
210
		}
211

  
212
		public void performAction() {
213
			setVisible(false);
214
		}
215

  
216
	}
217
}
tags/v2_0_0_Build_2063/libraries/org.gvsig.newlayer/org.gvsig.newlayer.lib/org.gvsig.newlayer.lib.impl/src/main/java/org/gvsig/newlayer/impl/FeatureTypePanel.java
1
package org.gvsig.newlayer.impl;
2

  
3
import java.awt.BorderLayout;
4
import java.awt.Component;
5
import java.awt.GridBagConstraints;
6
import java.awt.GridBagLayout;
7
import java.awt.Insets;
8
import java.awt.event.ActionEvent;
9
import java.awt.event.ActionListener;
10
import java.awt.event.ItemEvent;
11
import java.awt.event.ItemListener;
12
import java.util.ArrayList;
13
import java.util.Iterator;
14
import java.util.List;
15

  
16
import javax.swing.ComboBoxModel;
17
import javax.swing.DefaultCellEditor;
18
import javax.swing.JButton;
19
import javax.swing.JCheckBox;
20
import javax.swing.JComboBox;
21
import javax.swing.JLabel;
22
import javax.swing.JOptionPane;
23
import javax.swing.JPanel;
24
import javax.swing.JScrollPane;
25
import javax.swing.JTable;
26
import javax.swing.JTextField;
27
import javax.swing.ListSelectionModel;
28
import javax.swing.UIManager;
29
import javax.swing.event.ListDataListener;
30
import javax.swing.event.ListSelectionEvent;
31
import javax.swing.event.ListSelectionListener;
32
import javax.swing.event.TableModelEvent;
33
import javax.swing.event.TableModelListener;
34
import javax.swing.table.DefaultTableCellRenderer;
35
import javax.swing.table.DefaultTableModel;
36
import javax.swing.table.TableCellRenderer;
37
import javax.swing.table.TableColumn;
38
import javax.swing.table.TableModel;
39

  
40
import org.cresques.cts.IProjection;
41
import org.slf4j.Logger;
42
import org.slf4j.LoggerFactory;
43

  
44
import org.gvsig.app.gui.panels.CRSSelectPanel;
45
import org.gvsig.app.gui.panels.crs.ISelectCrsPanel;
46
import org.gvsig.fmap.dal.DALLocator;
47
import org.gvsig.fmap.dal.DataManager;
48
import org.gvsig.fmap.dal.DataStoreProviderFactory;
49
import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
50
import org.gvsig.fmap.dal.feature.EditableFeatureType;
51
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
52
import org.gvsig.fmap.dal.feature.FeatureStoreProviderFactory;
53
import org.gvsig.fmap.dal.feature.FeatureType;
54
import org.gvsig.fmap.geom.DataTypes;
55
import org.gvsig.fmap.geom.Geometry;
56
import org.gvsig.fmap.geom.GeometryLocator;
57
import org.gvsig.fmap.geom.GeometryManager;
58
import org.gvsig.fmap.geom.type.GeometryType;
59
import org.gvsig.gui.beans.wizard.panel.NotContinueWizardException;
60
import org.gvsig.gui.beans.wizard.panel.OptionPanel;
61
import org.gvsig.i18n.Messages;
62
import org.gvsig.newlayer.NewLayerService;
63
import org.gvsig.tools.dataTypes.DataType;
64
import org.gvsig.tools.swing.api.ToolsSwingLocator;
65
import org.gvsig.tools.swing.api.windowmanager.WindowManager;
66

  
67
public class FeatureTypePanel extends JPanel implements OptionPanel {
68
    private static final int COLUMN_FIELD = 0;
69
    private static final int COLUMN_TYPE = 1;
70
    private static final int COLUMN_LENGTH = 2;
71
    private static final int COLUMN_GEOMETRYTYPE = 3;
72
    private static final int COLUMN_GEOMETRYSUBTYPE = 4;
73
    private static final int COLUMN_CRS = 5;
74
    private static final int COLUMN_PRIMARYKEY = 6;
75
    private static final int COLUMN_MANDATORY = 7;
76
 
77
	private static final long serialVersionUID = 263541873998597624L;
78
	
79
    private FeatureType defaultFeatType = null;
80
    
81
    private NewLayerService newLayer_Service = null;
82
    private int inDefaultFeatTypeFieldCount = 0;
83
	private String inStoreName = null;
84
	private IProjection inProjection = null;
85
	private FeatureStoreProviderFactory spFactory = null;
86
	private boolean defaultHasGeometry = false;
87
	
88
	private static final Logger logger = LoggerFactory
89
			.getLogger(FeatureTypePanel.class);
90

  
91
	private JLabel jLabel = null;
92
	private JScrollPane jScrollPane = null;
93
	protected JTable jTable = null;
94
	private JPanel jPanelEast = null;
95
	private JButton addFieldButton = null;
96
	private JButton deleteFieldButton = null;
97
	protected int MAX_FIELD_LENGTH = 254;
98
	
99
	// we dont need this list
100
	// we'll clear and rebuild featureType each time
101
	// the user clicks next
102
	// private List removedFields;
103

  
104
	// private DataServerExplorer explorer = null;
105

  
106
	public FeatureTypePanel(NewLayerService new_layer_service) {
107
	    
108
	    /*
109
	    service.getFeatureType(),
110
        service.getStoreName(),
111
        service.getMapContext().getProjection();
112
        */
113
	    newLayer_Service = new_layer_service;
114
	}
115
	
116
	private boolean fieldsInited = false;
117
	
118
	private void initFields() {
119
	    
120
	    if (newLayer_Service == null) {
121
	        return;
122
	    }
123
	    
124
	    fieldsInited = true;
125
	    
126
        inStoreName = newLayer_Service.getStoreName();
127
        inProjection = newLayer_Service.getMapContext().getProjection();
128
        
129
        DataStoreProviderFactory dspf =
130
                DALLocator.getDataManager().getStoreProviderFactory(inStoreName);
131
        spFactory = (FeatureStoreProviderFactory) dspf;
132
        defaultFeatType = spFactory.createDefaultFeatureType();
133
        if (defaultFeatType != null) {
134
            inDefaultFeatTypeFieldCount =
135
                defaultFeatType.getAttributeDescriptors().length; 
136
            int def_geom_fld_index = defaultFeatType.getDefaultGeometryAttributeIndex(); 
137
            if (def_geom_fld_index >= 0 &&
138
                def_geom_fld_index < inDefaultFeatTypeFieldCount &&
139
                defaultFeatType.
140
                getAttributeDescriptor(def_geom_fld_index).
141
                getDataType().getType() == DataTypes.GEOMETRY) {
142
                
143
                defaultHasGeometry = true;
144
            }
145
        }
146
	}
147

  
148
	private void initializeComponents() {
149
		jLabel = new JLabel();
150
		jLabel.setText(Messages.getText("define_fields"));
151
		this.setLayout(new BorderLayout(5, 5));
152
		this.setSize(new java.awt.Dimension(499, 232));
153
		this.add(jLabel, java.awt.BorderLayout.NORTH);
154
		this.add(getJScrollPane(), java.awt.BorderLayout.CENTER);
155
		this.add(getJPanelSouth(), java.awt.BorderLayout.SOUTH);
156

  
157
	}
158

  
159
	/**
160
	 * This method initializes jScrollPane
161
	 * 
162
	 * @return javax.swing.JScrollPane
163
	 */
164
	private JScrollPane getJScrollPane() {
165
		if (jScrollPane == null) {
166
			jScrollPane = new JScrollPane();
167
			jScrollPane.setViewportView(getJTable());
168
		}
169
		return jScrollPane;
170
	}
171

  
172
	/**
173
	 * This method initializes jTable
174
	 * 
175
	 * @return javax.swing.JTable
176
	 */
177
	private JTable getJTable() {
178
		if (jTable == null) {
179
			jTable = new JTable(){
180
			    public boolean isCellEditable(int row,int column){
181
			        
182
			        
183
			        if (row < inDefaultFeatTypeFieldCount) {
184
			            // default fields
185
			            Object o = getValueAt(row,COLUMN_TYPE);  
186
			            if (o instanceof ComboItemDataType) {
187
			                
188
			                ComboItemDataType ot = (ComboItemDataType) o;
189
			                return (ot.dataType.getType() == DataTypes.GEOMETRY)
190
			                    &&
191
			                    (column == COLUMN_GEOMETRYTYPE ||
192
		                        column == COLUMN_GEOMETRYSUBTYPE);
193
			                
194
			            } else {
195
			                return false;
196
			            }
197
			            
198
			        } else {
199
			            // fields added by user
200
			            if (column == COLUMN_PRIMARYKEY) {
201
			                return spFactory.allowsPrimaryKeyAttributes();
202
			            }
203

  
204
			            if (column == COLUMN_MANDATORY) {
205
			                return spFactory.allowsMandatoryAttributes();
206
			            }
207
			            
208
			            if (column == COLUMN_LENGTH) {
209
			                
210
			                Object o = getValueAt(row,COLUMN_TYPE);  
211
	                        if (o instanceof ComboItemDataType) {
212
	                            
213
	                            ComboItemDataType ot = (ComboItemDataType) o;
214
	                            return dataTypeNeedsSize(ot.dataType.getType());
215
	                            
216
	                        } else {
217
	                            return false;
218
	                        }
219
			                
220
			            }
221

  
222
			            if (defaultHasGeometry &&
223
			                (column == COLUMN_GEOMETRYTYPE
224
                            || column == COLUMN_GEOMETRYSUBTYPE
225
                            || column == COLUMN_CRS)) {
226
			                // geom-related columns not editable
227
			                return false;
228
			            } else {
229
	                        return true;
230
			            }
231
			        }
232

  
233
			        /*
234
			        if ((column == COLUMN_GEOMETRYTYPE) ||
235
			            (column == COLUMN_GEOMETRYSUBTYPE) ||
236
			            (column == COLUMN_CRS)) {
237
			            DataType dataType = 
238
			                ((ComboItemDataType) getValueAt(row, COLUMN_TYPE)).dataType;			           
239
			            return dataType.getType() == DataTypes.GEOMETRY;
240
			        }
241
			        */
242
			    }  
243
			};
244

  
245
			DefaultTableModel tm = (DefaultTableModel) jTable.getModel();
246
			tm.addColumn(Messages.getText("field"));
247

  
248
			tm.addColumn(Messages.getText("type"));
249
			tm.addColumn(Messages.getText("length"));
250
			tm.addColumn(Messages.getText("geomType"));
251
			tm.addColumn(Messages.getText("geomSubtype"));
252
			tm.addColumn(Messages.getText("CRS"));
253
			tm.addColumn(Messages.getText("primaryKey"));
254
			tm.addColumn(Messages.getText("mandatory"));
255

  
256
			// Ask to be notified of selection changes.
257
			ListSelectionModel rowSM = jTable.getSelectionModel();
258
			rowSM.addListSelectionListener(new ListSelectionListener() {
259
				public void valueChanged(ListSelectionEvent e) {
260
					// Ignore extra messages.
261
					if (e.getValueIsAdjusting())
262
						return;
263

  
264
					ListSelectionModel lsm = (ListSelectionModel) e.getSource();
265
					if (lsm.isSelectionEmpty()) {
266
						// no rows are selected
267
						deleteFieldButton.setEnabled(false);
268
					} else {
269
					    int min_sele = lsm.getMinSelectionIndex(); 
270
	                    if (min_sele > -1 &&
271
	                        min_sele < inDefaultFeatTypeFieldCount) {
272
	                        deleteFieldButton.setEnabled(false);
273
	                    } else {
274
	                        deleteFieldButton.setEnabled(allowEditableFeatureType());
275
	                    }
276
					}		
277
					
278
				}
279
			});
280
			jTable.getColumn(Messages.getText("field")).setWidth(180);
281

  
282
			jTable.getModel().addTableModelListener(new TableModelListener() {                
283
                public void tableChanged(TableModelEvent e) {
284
                    if (e.getColumn() == COLUMN_TYPE){
285
                        jTable.repaint();
286
                    }                    
287
                }
288
            });
289
			
290

  
291
			if (!fieldsInited) {
292
			    initFields();
293
			}
294

  
295
			// Rellenado de la tabla
296
			if (defaultFeatType != null) {
297

  
298
				Iterator it = defaultFeatType.iterator();
299
				boolean some_error = false;
300
				while (it.hasNext()) {
301
					FeatureAttributeDescriptor descriptor = (FeatureAttributeDescriptor) it
302
							.next();
303

  
304
                    if (!addRowToFieldTable(
305
                        jTable,
306
                        null,
307
                        inProjection,
308
                        descriptor)) {
309
                        
310
                        some_error = true;
311
                    }
312
                    /*
313
					tm.setValueAt(descriptor.getName(), row, COLUMN_FIELD);
314
					tm.setValueAt(descriptor.getType(), row, COLUMN_TYPE);
315
					tm.setValueAt(descriptor.getSize(), row, COLUMN_LENGTH);
316
					tm.setValueAt(descriptor.getGeometryType(), row, COLUMN_GEOMETRYTYPE);
317
					tm.setValueAt(descriptor.getGeometrySubType(), row, COLUMN_GEOMETRYSUBTYPE);
318
					tm.setValueAt(descriptor.getSRS(), row, COLUMN_CRS);
319
					tm.setValueAt(descriptor.isPrimaryKey(), row, COLUMN_PRIMARYKEY);
320
					tm.setValueAt(descriptor.isMandatory(), row, COLUMN_MANDATORY);
321
					*/
322
				}
323
				
324
				if (some_error) {
325
                    String tit = Messages.getText("_Default_fields");
326
                    String msg = Messages.getText("_Unable_to_add_fields");
327
                    JOptionPane.showMessageDialog(
328
                        jTable, msg, tit,
329
                        JOptionPane.ERROR_MESSAGE);
330
				}
331
			}
332

  
333
		}
334
		jTable.setEnabled(allowEditableFeatureType());
335
		return jTable;
336
	}
337

  
338
	/**
339
	 * This method initializes jPanelWest
340
	 * 
341
	 * @return javax.swing.JPanel
342
	 */
343
	private JPanel getJPanelSouth() {
344
		if (jPanelEast == null) {
345
			jPanelEast = new JPanel();
346
			jPanelEast.setLayout(new BorderLayout());
347
			
348
			JPanel south_east = new JPanel(new GridBagLayout());
349
			// south_east.setPreferredSize(new java.awt.Dimension(170, 50));
350
			GridBagConstraints c = new GridBagConstraints();
351
			c.fill = GridBagConstraints.HORIZONTAL;
352
			c.insets = new Insets(8,10,8,0);  //top padding
353
			c.gridx = 0;       
354
			c.gridwidth = 1;   
355
			c.gridy = 0;       
356
			south_east.add(getJButtonAddField(), c);
357
            c.gridx = 1;       
358
			south_east.add(getJButtonDeleteField(), c);
359
			
360
			jPanelEast.add(south_east, BorderLayout.EAST);
361
		}
362
		return jPanelEast;
363
	}
364

  
365
	/**
366
	 * This method initializes jButtonAddField
367
	 * 
368
	 * @return javax.swing.JButton
369
	 */
370
	private JButton getJButtonAddField() {
371
		if (addFieldButton == null) {
372
		    addFieldButton = new JButton();
373
		    addFieldButton.setText(Messages.getText("add_field"));
374
		    addFieldButton.setLocation(new java.awt.Point(7, 5));
375
		    addFieldButton.setSize(new java.awt.Dimension(145, 23));
376
		    addFieldButton.setPreferredSize(new java.awt.Dimension(100, 23));
377
		    addFieldButton
378
					.addActionListener(new java.awt.event.ActionListener() {
379
						public void actionPerformed(java.awt.event.ActionEvent e) {
380
							DefaultTableModel tm = (DefaultTableModel) jTable
381
									.getModel();
382

  
383
							// Figure out a suitable field name
384
							ArrayList fieldNames = new ArrayList();
385
							for (int i = 0; i < jTable.getRowCount(); i++) {
386
								fieldNames.add(tm.getValueAt(i, COLUMN_FIELD));
387
							}
388
							String[] currentFieldNames = (String[]) fieldNames
389
									.toArray(new String[0]);
390
							String newField = Messages.getText("field")
391
									.replaceAll(" +", "_");
392
							int index = 0;
393
							for (int i = 0; i < currentFieldNames.length; i++) {
394
								if (currentFieldNames[i].startsWith(newField)) {
395
									try {
396
										index = Integer
397
												.parseInt(currentFieldNames[i]
398
														.replaceAll(newField,
399
																""));
400
									} catch (Exception ex) { /* we don't care */
401
									}
402
								}
403
							}
404
							String newFieldName = newField + (++index);
405

  
406
							// Esto lo a?ado aqu? porque si no tiene registros,
407
							// no hace caso. (Por eso no
408
							// lo pongo en getJTable()
409
							if (!addRowToFieldTable(
410
							    jTable,
411
							    newFieldName,
412
							    inProjection,
413
							    null)) {
414
							    
415
	                            String tit = Messages.getText("_Default_fields");
416
	                            String msg = Messages.getText("_Unable_to_add_fields");
417
	                            JOptionPane.showMessageDialog(
418
	                                jTable, msg, tit,
419
	                                JOptionPane.ERROR_MESSAGE);
420
							}
421
						}
422
					});
423

  
424
		}
425
		addFieldButton.setEnabled(allowEditableFeatureType());
426
		return addFieldButton;
427
	}
428
	
429
	private boolean allowEditableFeatureType(){
430
	    
431
	    if (!fieldsInited) {
432
	        initFields();
433
	    }
434

  
435
		DataManager dataManager = DALLocator.getDataManager();
436
		FeatureStoreProviderFactory factory =
437
		    (FeatureStoreProviderFactory) dataManager.
438
		    getStoreProviderFactory(inStoreName);
439
		if (factory.allowEditableFeatureType()==FeatureStoreProviderFactory.NO) {
440
			return false;
441
		}
442
		return true;
443
	}
444

  
445
	private class ComboItemDataType {
446
		private DataType dataType;
447

  
448
		public ComboItemDataType(DataType dataType) {
449
			this.dataType = dataType;
450
		}
451

  
452
		@Override
453
		public String toString() {
454
			return this.dataType.getName();
455
		}
456
	}
457

  
458
	private class ComboModelDataType implements ComboBoxModel {
459

  
460
		private List<ComboItemDataType> dataTypes;
461
		private ComboItemDataType selected;
462

  
463
		public ComboModelDataType(List<DataType> dataTypes, int sel_type) {
464
		    
465
			this.dataTypes = new ArrayList<ComboItemDataType>();
466
			ComboItemDataType item = null;
467
			for (Iterator iterator = dataTypes.iterator(); iterator.hasNext();) {
468
				DataType dataType = (DataType) iterator.next();
469
				item = new ComboItemDataType(dataType);
470
				this.dataTypes.add(item);
471
				if (sel_type == dataType.getType()) {
472
				    this.setSelectedItem(item);
473
				}
474
			}
475
		}
476

  
477
		public void addListDataListener(ListDataListener arg0) {
478
			// DO NOTHING
479
		}
480

  
481
		public Object getElementAt(int arg0) {
482
			return this.dataTypes.get(arg0);
483
		}
484

  
485
		public int getSize() {
486
			return this.dataTypes.size();
487
		}
488

  
489
		public void removeListDataListener(ListDataListener arg0) {
490
			// DO NOTHING
491
		}
492

  
493
		public Object getSelectedItem() {
494
			return this.selected;
495
		}
496

  
497
		public void setSelectedItem(Object anItem) {
498
			this.selected = (ComboItemDataType) anItem;
499
		}
500

  
501
	}
502

  
503
	class CrsRenderer extends JButton implements TableCellRenderer {
504
		private static final long serialVersionUID = -573793294070515376L;
505
		private JLabel label = null;
506
		
507
		public CrsRenderer() {
508
			setOpaque(true);
509
			label = new JLabel(Messages.getText("not_applicable"));
510
		}
511

  
512
		public Component getTableCellRendererComponent(JTable table,
513
				Object value, boolean isSelected, boolean hasFocus, int row,
514
				int column) {
515
			
516
		    ComboItemDataType item =
517
		        (ComboItemDataType) table.getValueAt(row, COLUMN_TYPE);
518
		    
519
		    if (item == null) {
520
		        // happens sometimes. perhaps an early rendering?
521
		        return new JLabel();
522
		    }
523
		    
524
		    DataType dataType = item.dataType;                       
525
                        
526
            if (dataType.getType() != DataTypes.GEOMETRY) {                
527
                return label;
528
            }
529
		    
530
		    if (isSelected) {
531
				setForeground(table.getSelectionForeground());
532
				setBackground(table.getSelectionBackground());
533
			} else {
534
				setForeground(table.getForeground());
535
				setBackground(UIManager.getColor("Button.background"));
536
			}
537
			setText((value == null) ? "" : ((IProjection) value).getFullCode());
538
			return this;
539
		}
540
	}	
541
	   
542
    private class GeometryComboCellRenderer extends JLabel implements TableCellRenderer{
543

  
544
        public Component getTableCellRendererComponent(JTable table,
545
            Object value, boolean isSelected, boolean hasFocus, int row,
546
            int column) {                     
547

  
548
            ComboItemDataType item = (ComboItemDataType) table.getValueAt(row, COLUMN_TYPE);
549
            DataType dataType = item.dataType;                       
550
                        
551
            if (dataType.getType() == DataTypes.GEOMETRY) {
552
                ComboItemGeomType geomType = (ComboItemGeomType)value;
553
                if (geomType != null) {            
554
                    this.setText(geomType.toString());
555
                }
556
            } else {
557
               this.setText(Messages.getText("not_applicable"));
558
            }
559
            
560
            return this;
561
        }
562
        
563
    }
564

  
565
	class ButtonEditor extends DefaultCellEditor {
566
		/**
567
		 * 
568
		 */
569
		private static final long serialVersionUID = -2820892672026188802L;
570

  
571
		protected JButton button;
572

  
573
		private String label;
574

  
575
		private boolean isPushed;
576

  
577
		private Object value;
578

  
579
		public ButtonEditor(JCheckBox checkBox) {
580
			super(checkBox);
581
			button = new JButton();
582
			button.setOpaque(true);
583
			button.addActionListener(new ActionListener() {
584
				public void actionPerformed(ActionEvent e) {
585
					fireEditingStopped();
586
				}
587
			});
588
		}
589

  
590
		public Component getTableCellEditorComponent(JTable table,
591
				Object value, boolean isSelected, int row, int column) {
592
			if (isSelected) {
593
				button.setForeground(table.getSelectionForeground());
594
				button.setBackground(table.getSelectionBackground());
595
			} else {
596
				button.setForeground(table.getForeground());
597
				button.setBackground(table.getBackground());
598
			}
599
			label = (value == null) ? "" : ((IProjection) value).getFullCode();// .toString();
600
			button.setText(label);
601
			isPushed = true;
602
			this.value = value;
603
			return button;
604
		}
605

  
606
		public Object getCellEditorValue() {
607
			IProjection curProj = (IProjection) this.value;
608
			if (isPushed) {
609
				ISelectCrsPanel csSelect = CRSSelectPanel.getUIFactory()
610
						.getSelectCrsPanel(curProj, true);
611
				WindowManager wm = ToolsSwingLocator.getWindowManager();
612
				wm.showWindow((JPanel) csSelect, "Projection",
613
						WindowManager.MODE.DIALOG);
614
				curProj = csSelect.getProjection();
615
			}
616
			isPushed = false;
617
			return curProj;
618
		}
619

  
620
		public boolean stopCellEditing() {
621
			isPushed = false;
622
			return super.stopCellEditing();
623
		}
624

  
625
		protected void fireEditingStopped() {
626
			super.fireEditingStopped();
627
		}
628
	}
629

  
630
	private class ComboItemGeomType {
631
		private int type;
632
		private String name;
633

  
634
		public ComboItemGeomType(String name, int type) {
635
			this.type = type;
636
			this.name = name;
637
		}
638

  
639
		@Override
640
		public String toString() {
641
			return this.name;
642
		}
643
		
644
		public int getGeomType() {
645
		    return type;
646
		}
647
	}
648

  
649
	private class ComboModelGeomType implements ComboBoxModel {
650

  
651
		private List<ComboItemGeomType> geomTypes;
652
		private ComboItemGeomType selected;
653

  
654
		public ComboModelGeomType(
655
		    List<ComboItemGeomType> geomTypes, int sel_geom_type) {
656
		    
657
			this.geomTypes = geomTypes;
658
			int len = geomTypes.size();
659
			ComboItemGeomType item = null;
660
			for (int i=0; i<len; i++) {
661
			    item = geomTypes.get(i);
662
			    if (item.getGeomType() == sel_geom_type) {
663
			        setSelectedItem(item);
664
			    }
665
			}
666
		}
667

  
668
		public void addListDataListener(ListDataListener arg0) {
669
			// DO NOTHING
670
		}
671

  
672
		public Object getElementAt(int arg0) {
673
			return this.geomTypes.get(arg0);
674
		}
675

  
676
		public int getSize() {
677
			return this.geomTypes.size();
678
		}
679

  
680
		public void removeListDataListener(ListDataListener arg0) {
681
			// DO NOTHING
682
		}
683

  
684
		public Object getSelectedItem() {
685
			return this.selected;
686
		}
687

  
688
		public void setSelectedItem(Object anItem) {
689
			this.selected = (ComboItemGeomType) anItem;
690
		}
691

  
692
	}
693

  
694
	private List<ComboItemGeomType> getGeomTypes() {
695
		List<ComboItemGeomType> geomTypes = new ArrayList<ComboItemGeomType>();
696
		geomTypes
697
				.add(new ComboItemGeomType("GEOMETRY", Geometry.TYPES.GEOMETRY));
698
		geomTypes.add(new ComboItemGeomType("POINT", Geometry.TYPES.POINT));
699
		geomTypes.add(new ComboItemGeomType("CURVE", Geometry.TYPES.CURVE));
700
		geomTypes.add(new ComboItemGeomType("SURFACE", Geometry.TYPES.SURFACE));
701
		geomTypes.add(new ComboItemGeomType("SOLID", Geometry.TYPES.SOLID));
702
		geomTypes.add(new ComboItemGeomType("AGGREGATE",
703
				Geometry.TYPES.AGGREGATE));
704
		geomTypes.add(new ComboItemGeomType("MULTIPOINT",
705
				Geometry.TYPES.MULTIPOINT));
706
		geomTypes.add(new ComboItemGeomType("MULTICURVE",
707
				Geometry.TYPES.MULTICURVE));
708
		geomTypes.add(new ComboItemGeomType("MULTISURFACE",
709
				Geometry.TYPES.MULTISURFACE));
710
		geomTypes.add(new ComboItemGeomType("MULTISOLID",
711
				Geometry.TYPES.MULTISOLID));
712

  
713
		return geomTypes;
714
	}
715

  
716
	private List<ComboItemGeomType> getGeomSubtypes() {
717
		List<ComboItemGeomType> geomSubtypes = new ArrayList<ComboItemGeomType>();
718
		geomSubtypes.add(new ComboItemGeomType("GEOM2D",
719
				Geometry.SUBTYPES.GEOM2D));
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff