Revision 1492

View differences:

org.gvsig.gpe/library/tags/org.gvsig.gpe-2.1.156/org.gvsig.gpe.exportto/org.gvsig.gpe.exportto.kml/buildNumber.properties
1
#Fri Sep 24 14:49:42 CEST 2021
2
buildNumber=2257
org.gvsig.gpe/library/tags/org.gvsig.gpe-2.1.156/org.gvsig.gpe.exportto/org.gvsig.gpe.exportto.kml/src/main/assembly/gvsig-plugin-package.xml
1
<!--
2

  
3
    gvSIG. Desktop Geographic Information System.
4

  
5
    Copyright (C) 2007-2013 gvSIG Association.
6

  
7
    This program is free software; you can redistribute it and/or
8
    modify it under the terms of the GNU General Public License
9
    as published by the Free Software Foundation; either version 3
10
    of the License, or (at your option) any later version.
11

  
12
    This program is distributed in the hope that it will be useful,
13
    but WITHOUT ANY WARRANTY; without even the implied warranty of
14
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15
    GNU General Public License for more details.
16

  
17
    You should have received a copy of the GNU General Public License
18
    along with this program; if not, write to the Free Software
19
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
20
    MA  02110-1301, USA.
21

  
22
    For any additional information, do not hesitate to contact us
23
    at info AT gvsig.com, or visit our website www.gvsig.com.
24

  
25
-->
26
<assembly>
27
  <id>gvsig-plugin-package</id>
28
  <formats>
29
    <format>zip</format>
30
  </formats>
31
  <baseDirectory>${project.artifactId}</baseDirectory>
32
  <includeBaseDirectory>true</includeBaseDirectory>
33
  <files>
34
    <file>
35
      <source>target/${project.artifactId}-${project.version}.jar</source>
36
      <outputDirectory>lib</outputDirectory>
37
    </file>
38
    <file>
39
      <source>target/package.info</source>
40
    </file>
41
  </files>
42

  
43
  <fileSets>
44
    <fileSet>
45
      <directory>src/main/resources-plugin</directory>
46
      <outputDirectory>.</outputDirectory>
47
    </fileSet>
48
  </fileSets>
49

  
50
  <dependencySets>
51
    <dependencySet>
52
      <useProjectArtifact>false</useProjectArtifact>
53
      <useTransitiveDependencies>false</useTransitiveDependencies>
54
      <outputDirectory>lib</outputDirectory>
55
      <includes>
56
        <include>org.gvsig:org.gvsig.gpe.exportto.generic</include>
57
      </includes>
58
    </dependencySet>
59
  </dependencySets>
60

  
61
</assembly>
62

  
org.gvsig.gpe/library/tags/org.gvsig.gpe-2.1.156/org.gvsig.gpe.exportto/org.gvsig.gpe.exportto.kml/src/main/java/org/gvsig/gpe/exportto/kml/swing/ExportKMLPanels.java
1
/*
2
 * To change this license header, choose License Headers in Project Properties.
3
 * To change this template file, choose Tools | Templates
4
 * and open the template in the editor.
5
 */
6
package org.gvsig.gpe.exportto.kml.swing;
7

  
8
import org.gvsig.export.ExportParameters;
9
import org.gvsig.export.swing.ExportSwingLocator;
10
import org.gvsig.export.swing.JExportProcessPanel;
11
import org.gvsig.export.swing.spi.AbstractExportPanels;
12
import org.gvsig.export.swing.spi.ExportPanels;
13
import org.gvsig.export.swing.spi.ExportPanelsFactory;
14
import org.gvsig.export.swing.spi.ExportPanelsManager;
15
import org.gvsig.gpe.exportto.kml.swing.panels.KMLPanel;
16

  
17
/**
18
 *
19
 * @author osc
20
 */
21
public class ExportKMLPanels
22
	extends AbstractExportPanels
23
	implements ExportPanels {
24

  
25
	ExportKMLPanels(
26
		ExportPanelsFactory factory,
27
		JExportProcessPanel processPanel,
28
		ExportParameters parameters
29
	) {
30
		super(factory, processPanel, parameters);
31
		this.initPanels();
32
	}
33

  
34
	private void initPanels() {
35
		ExportPanelsManager manager = ExportSwingLocator.getExportPanelsManager();
36

  
37
		this.add(
38
			new KMLPanel(
39
				this.getProcessPanel(),
40
				this.getParameters()
41
			)
42
		);
43
		this.add(manager.createStandardPanel(
44
			ExportPanelsManager.PANEL_ATTRIBUTES_SELECTION,
45
			this.getProcessPanel(),
46
			this.getParameters()
47
		)
48
		);
49

  
50
		this.add(manager.createStandardPanel(
51
			ExportPanelsManager.PANEL_SELECT_OUTPUT_FILE,
52
			this.getProcessPanel(),
53
			this.getParameters()
54
		)
55
		);
56
	}
57

  
58
}
org.gvsig.gpe/library/tags/org.gvsig.gpe-2.1.156/org.gvsig.gpe.exportto/org.gvsig.gpe.exportto.kml/src/main/java/org/gvsig/gpe/exportto/kml/swing/ExportKMLPanelsFactory.java
1
package org.gvsig.gpe.exportto.kml.swing;
2

  
3
import org.gvsig.export.ExportParameters;
4
import org.gvsig.export.swing.JExportProcessPanel;
5
import org.gvsig.export.swing.spi.AbstractExportPanelsFactory;
6
import org.gvsig.export.swing.spi.ExportPanels;
7
import org.gvsig.export.swing.spi.ExportPanelsFactory;
8
import org.gvsig.gpe.exportto.kml.service.ExportKMLServiceFactory;
9

  
10
/**
11
 *
12
 * @author jjdelcerro
13
 */
14
public class ExportKMLPanelsFactory  
15
        extends AbstractExportPanelsFactory
16
        implements ExportPanelsFactory {
17

  
18
    public ExportKMLPanelsFactory() {
19
        super(ExportKMLServiceFactory.SERVICE_NAME);
20
    }
21

  
22
    @Override
23
    public ExportPanels createPanels(JExportProcessPanel processPanel, ExportParameters parameters) {
24
        return new ExportKMLPanels(this, processPanel, parameters);
25
    }
26
    
27
}
org.gvsig.gpe/library/tags/org.gvsig.gpe-2.1.156/org.gvsig.gpe.exportto/org.gvsig.gpe.exportto.kml/src/main/java/org/gvsig/gpe/exportto/kml/swing/panels/KMLPanelView.java
1
/**
2
 * gvSIG. Desktop Geographic Information System.
3
 *
4
 * Copyright (C) 2007-2013 gvSIG Association.
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 3
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
 * For any additional information, do not hesitate to contact us
22
 * at info AT gvsig.com, or visit our website www.gvsig.com.
23
 */
24
package org.gvsig.gpe.exportto.kml.swing.panels;
25

  
26
import java.awt.BorderLayout;
27
import java.awt.FlowLayout;
28
import java.awt.GridBagConstraints;
29
import java.awt.GridBagLayout;
30
import java.awt.Insets;
31
import java.util.ArrayList;
32

  
33
import javax.swing.JCheckBox;
34
import javax.swing.JComboBox;
35
import javax.swing.JComponent;
36
import javax.swing.JLabel;
37
import javax.swing.JPanel;
38

  
39
import org.slf4j.Logger;
40
import org.slf4j.LoggerFactory;
41

  
42
//import org.gvsig.exportto.swing.ExporttoSwingLocator;
43
//import org.gvsig.exportto.swing.ExporttoSwingManager;
44
//import org.gvsig.exportto.swing.spi.ExporttoPanelValidationException;
45
//import org.gvsig.exportto.swing.spi.ExporttoSwingProviderPanel;
46
import org.gvsig.gpe.lib.api.writer.IGPEWriterHandler;
47
import org.gvsig.gpe.lib.spi.GPEProviderLocator;
48
import org.gvsig.tools.ToolsLocator;
49
import org.gvsig.tools.i18n.I18nManager;
50

  
51

  
52
/**
53
 * 
54
 * This addditional panel lets user choose KML
55
 * version and other options.
56
 * 
57
 * @author gvSIG Team
58
 * @version $Id$
59
 * 
60
 */
61
public class KMLPanelView extends JPanel {
62

  
63
    private static final long serialVersionUID = -3278172717881233447L;
64

  
65
    private static final Logger LOG = LoggerFactory.getLogger(KMLPanelView.class);
66

  
67
    private boolean offerLabels = false;
68
    private boolean offerReproj = true;
69
    
70
    private JCheckBox labelsChk = null;
71
    private JCheckBox reproChk = null;
72
    private JCheckBox balloonsChk = null;
73
    
74
    private JComboBox versionCombo = null;
75
    I18nManager i18n = ToolsLocator.getI18nManager();
76
    
77
    public KMLPanelView() {
78
        initializePanel();
79
    }
80

  
81
    /**
82
     * Initializer
83
     */
84
    protected void initializePanel() {
85
        setLayout(new BorderLayout());
86
        add(createPanel(), BorderLayout.CENTER);
87
    }
88

  
89
    private JPanel createPanel() {
90
        
91
        JPanel jpanel1 = new JPanel();
92
        jpanel1.setLayout(new BorderLayout());
93
        
94
        FlowLayout fl = new FlowLayout(FlowLayout.LEFT);
95
        JPanel topPanel = new JPanel(fl);
96
        // ====================================================
97
        JPanel gridPanel = new JPanel();
98
        gridPanel.setLayout(new GridBagLayout());
99
        GridBagConstraints gbc = new GridBagConstraints();
100
        
101
        gbc.anchor = GridBagConstraints.WEST;
102
        gbc.insets = new Insets(3, 3, 3, 3);
103
        
104
        gbc.gridx = 0;
105
        gbc.gridy = 0;
106
        gbc.gridwidth = 3;
107
        gridPanel.add(new JLabel(i18n.getTranslation("kml_Choose_KML_version")), gbc);
108
        gbc.gridx = 3;
109
        gbc.gridwidth = 3;
110
        gridPanel.add(getVersionsCombo(), gbc);
111
        // =====================
112
        gbc.gridx = 0;
113
        gbc.gridy = 1;
114
        gbc.gridwidth = 1;
115
        gridPanel.add(getBalloonsCheckbox(), gbc);
116
        gbc.gridx = 1;
117
        gbc.gridwidth = 5;
118
        gridPanel.add(new JLabel(i18n.getTranslation(
119
                "kml_Show_attributes_in_balloon")), gbc);
120
        // =====================
121
        gbc.gridx = 0;
122
        gbc.gridy = 2;
123
        gbc.gridwidth = 1;
124
        getLabelsCheckbox(offerLabels);
125
        //gridPanel.add(getLabelsCheckbox(offerLabels), gbc);
126
        gbc.gridx = 1;
127
        gbc.gridwidth = 5;
128
        JLabel lbl_lbl = new JLabel(i18n.getTranslation("" +
129
        		"kml_Use_labels_Label_point_will_be_added_to_non_points"));
130
        lbl_lbl.setEnabled(offerLabels);
131
        //gridPanel.add(lbl_lbl, gbc);
132
        // ====================================================
133
//        gbc.gridx = 0;
134
//        gbc.gridy = 2;
135
//        gbc.gridwidth = 1;
136
//        gridPanel.add(getReproCheckbox(offerReproj), gbc);
137
//        gbc.gridx = 1;
138
//        gbc.gridwidth = 5;
139
//        JLabel rep_lbl = new JLabel(i18n.getTranslation(
140
//            "kml_Force_to_EPSG_4326"));
141
//        rep_lbl.setEnabled(offerReproj);
142
//        gridPanel.add(rep_lbl, gbc);
143
        // ====================================================
144
        topPanel.add(gridPanel);
145
        jpanel1.add(topPanel, BorderLayout.NORTH);
146
        return jpanel1;
147
    }
148
    
149
//    public String getMimeType() {
150
//        IGPEWriterHandler item = (IGPEWriterHandler) this.versionCombo.getItemAt(0);
151
//        String longn = item.getFormat();
152
//        return longn;
153
//    }
154

  
155
    public String getMimeType() {
156
        Object obj = this.getVersionsCombo().getSelectedItem();
157
        if (obj instanceof FormatListItem) {
158
            return ((FormatListItem) obj).getLongFormat();
159
        } else {
160
            return null;
161
        }
162
    }
163
    public boolean getUseLabels() {
164
        return this.labelsChk.isSelected();
165
    }
166

  
167
    public boolean getAttsAsBalloon() {
168
        return this.balloonsChk.isSelected();
169
    }
170

  
171
    public boolean getReprojectTo4326() {
172
        return this.reproChk.isSelected();
173
    }
174

  
175
    private JCheckBox getLabelsCheckbox(boolean enabled) {
176
        
177
        if (labelsChk == null) {
178
            labelsChk = new JCheckBox("");
179
            labelsChk.setSelected(false);
180
            labelsChk.setEnabled(enabled);
181
        }
182
        return labelsChk;
183
    }
184
    
185
    private JCheckBox getReproCheckbox(boolean enabled) {
186
        
187
        if (reproChk == null) {
188
            reproChk = new JCheckBox("");
189
            reproChk.setSelected(true);
190
            reproChk.setEnabled(enabled);
191
        }
192
        return reproChk;
193
    }
194
    
195
    private JCheckBox getBalloonsCheckbox() {
196
        
197
        if (balloonsChk == null) {
198
            balloonsChk = new JCheckBox("");
199
            balloonsChk.setSelected(false);
200
        }
201
        return balloonsChk;
202
    }
203
    
204

  
205
    private JComboBox getVersionsCombo() {
206
        
207
        if (versionCombo == null) {
208
            versionCombo = new JComboBox();
209
            ArrayList list = GPEProviderLocator.getGPEProviderManager().getWriterHandlerByFormat("kml");
210
            IGPEWriterHandler item = null;
211
            String longn = null;
212
            String shortn = null;
213
            for (int i=0; i<list.size(); i++) {
214
                item = (IGPEWriterHandler) list.get(i);
215
                longn = item.getFormat();
216
                shortn = getShortWithVersion(longn);
217
                if (longn != null && shortn != null) {
218
                    versionCombo.addItem(new FormatListItem(longn, shortn));
219
                }
220
            }
221
        }
222
        return versionCombo;
223
    }
224

  
225
    public String getPanelTitle() {
226
        return i18n.getTranslation("kml_KML_options");
227
    }
228

  
229
    public boolean isValidPanel() {
230
        return getLongFormat() != null;
231
    }
232
    
233
    
234
    /**
235
     * Returns null if not valid format
236
     */
237
    private String getShortWithVersion(String fmt) {
238
        // Example: "text/xml; subtype=gml/2.1.2" => "gml"
239
        if (fmt == null) {
240
            return null;
241
        }
242
        String[] parts = fmt.split(";");
243
        String aux = "";
244
        if (parts.length > 1) {
245
            aux = parts[1].trim();
246
        } else {
247
            return null;
248
        }
249
        parts = aux.split("=");
250
        if (parts.length > 1) {
251
            aux = parts[1].trim();
252
            // Example: aux = "gml/2.1.2"
253
            aux = aux.replaceAll("/", " ");
254
            return aux.toUpperCase();
255
        } else {
256
            return null;
257
        }
258
    }    
259

  
260
    public void enterPanel() {
261
        
262
    }
263

  
264
    public JComponent asJComponent() {
265
        return this;
266
    }
267
    
268
    public class FormatListItem {
269
        
270
        private String longName = "";
271
        private String shortName = "";
272
        
273
        public FormatListItem(String longname, String shortname) {
274
            longName = longname;
275
            shortName = shortname;
276
        }
277
        
278
        public String toString() {
279
            return shortName;
280
        }
281
        
282
        public String getLongFormat() {
283
            return longName;
284
        }
285
    }
286
    
287
    // ==================================================
288
    // ==================================================
289
    
290
    public String getLongFormat() {
291
        Object obj = this.getVersionsCombo().getSelectedItem();
292
        if (obj instanceof FormatListItem) {
293
            return ((FormatListItem) obj).getLongFormat();
294
        } else {
295
            return null;
296
        }
297
    }
298
    
299
    public boolean useLabels() {
300
        return this.getLabelsCheckbox(false).isSelected();
301
    }
302

  
303
    public boolean useBalloons() {
304
        return this.getBalloonsCheckbox().isSelected();
305
    }
306
    
307
    public boolean mustReprojectToEpsg4326() {
308
        return this.getReproCheckbox(true).isSelected();
309
    }
310
    
311
    
312

  
313
}
org.gvsig.gpe/library/tags/org.gvsig.gpe-2.1.156/org.gvsig.gpe.exportto/org.gvsig.gpe.exportto.kml/src/main/java/org/gvsig/gpe/exportto/kml/swing/panels/KMLPanel.java
1
/*
2
 * To change this license header, choose License Headers in Project Properties.
3
 * To change this template file, choose Tools | Templates
4
 * and open the template in the editor.
5
 */
6
package org.gvsig.gpe.exportto.kml.swing.panels;
7

  
8
import javax.swing.JComponent;
9
import org.gvsig.export.ExportParameters;
10
import org.gvsig.export.swing.JExportProcessPanel;
11
import org.gvsig.export.swing.spi.ExportPanel;
12
import org.gvsig.export.swing.spi.ExportPanelValidationException;
13
import org.gvsig.gpe.exportto.kml.service.ExportKMLParameters;
14
import org.gvsig.tools.ToolsLocator;
15
import org.gvsig.tools.i18n.I18nManager;
16
import org.gvsig.tools.swing.api.ToolsSwingLocator;
17
import org.gvsig.tools.swing.api.ToolsSwingManager;
18

  
19
/**
20
 *
21
 * @author osc
22
 */
23
public class KMLPanel 
24
        extends KMLPanelView 
25
        implements ExportPanel
26
    {
27

  
28
//    private static final Logger LOG = LoggerFactory.getLogger(SelectSimplifiedExport.class);
29
    
30
    private final ExportKMLParameters parameters;
31
    private final JExportProcessPanel processPanel;
32

  
33
    public KMLPanel(JExportProcessPanel processPanel, ExportParameters parameters) {
34
        super();
35
        this.processPanel = processPanel;
36
        this.parameters = (ExportKMLParameters) parameters;
37
        this.initComponents();
38
    }
39
    
40
    private void initComponents() {
41
        //Default value        
42
        //this.chkUseSimplifiedExport.setSelected(parameters.getUseSimplifiedExport());
43

  
44
        this.translate();
45
    }
46
    
47
    private void translate() {
48
        ToolsSwingManager i18nc = ToolsSwingLocator.getToolsSwingManager();
49
        I18nManager i18n = ToolsLocator.getI18nManager();
50
//
51
//        i18nc.translate(this.lblUseSimplifiedExport);
52
//        String s = i18n.getTranslation(this.lblUseSimplifiedExportDescription.getText());
53
//        s = "<html>" + s.replace("\n","<br>\n") + "</html>";
54
//        this.lblUseSimplifiedExportDescription.setText(s);
55
    }
56
        
57
    @Override
58
    public String getIdPanel() {
59
        return this.getClass().getSimpleName();
60
    }
61

  
62
    @Override
63
    public String getTitlePanel() {
64
        I18nManager i18nManager = ToolsLocator.getI18nManager();
65
        return i18nManager.getTranslation("kml_Select_KML_Options");    
66
    }
67

  
68
    @Override
69
    public boolean validatePanel() throws ExportPanelValidationException {
70
        return true;
71
    }
72

  
73
    @Override
74
    public void enterPanel() {
75
       
76
    }
77

  
78
    @Override
79
    public void nextPanel() {
80
        this.parameters.setMimeType(this.getMimeType());
81
        this.parameters.setAttsAsBalloon(this.getAttsAsBalloon());
82
        this.parameters.setUseLabels(this.getUseLabels());
83
    }
84

  
85
    @Override
86
    public void previousPanel() {
87
       
88
    }
89

  
90
    @Override
91
    public JComponent asJComponent() {
92
        
93
        return super.asJComponent();
94
    }
95
    
96
}
org.gvsig.gpe/library/tags/org.gvsig.gpe-2.1.156/org.gvsig.gpe.exportto/org.gvsig.gpe.exportto.kml/src/main/java/org/gvsig/gpe/exportto/kml/ExportKMLLibrary.java
1
package org.gvsig.gpe.exportto.kml;
2

  
3
import org.gvsig.export.ExportLibrary;
4
import org.gvsig.export.ExportLocator;
5
import org.gvsig.export.spi.ExportServiceManager;
6
import org.gvsig.export.swing.ExportSwingLibrary;
7
import org.gvsig.export.swing.ExportSwingLocator;
8
import org.gvsig.export.swing.spi.ExportPanelsManager;
9
import org.gvsig.gpe.exportto.kml.service.ExportKMLServiceFactory;
10
import org.gvsig.gpe.exportto.kml.swing.ExportKMLPanelsFactory;
11
import org.gvsig.tools.library.AbstractLibrary;
12
import org.gvsig.tools.library.LibraryException;
13

  
14
/**
15
 *
16
 * @author jjdelcerro
17
 */
18
public class ExportKMLLibrary extends AbstractLibrary {
19

  
20
    @Override
21
    public void doRegistration() {
22
        registerAsServiceOf(ExportSwingLibrary.class);
23
        registerAsServiceOf(ExportLibrary.class);
24
    }
25

  
26
    @Override
27
    protected void doInitialize() throws LibraryException {
28
        // Nothing to do
29
    }
30

  
31
    @Override
32
    protected void doPostInitialize() throws LibraryException {
33
        ExportServiceManager manager = ExportLocator.getServiceManager();
34
        ExportPanelsManager swingManager = ExportSwingLocator.getExportPanelsManager();
35
        
36
        manager.register(new ExportKMLServiceFactory());
37
        ExportKMLPanelsFactory panel = new ExportKMLPanelsFactory();
38
        swingManager.register(panel);
39
    }
40

  
41
}
org.gvsig.gpe/library/tags/org.gvsig.gpe-2.1.156/org.gvsig.gpe.exportto/org.gvsig.gpe.exportto.kml/src/main/java/org/gvsig/gpe/exportto/kml/service/ExportKMLParameters.java
1
package org.gvsig.gpe.exportto.kml.service;
2

  
3
import org.gvsig.export.ExportParametersFile;
4
import org.gvsig.export.ExportParametersGeometry;
5

  
6
/**
7
 *
8
 * @author jjdelcerro
9
 */
10
public interface ExportKMLParameters extends ExportParametersGeometry, ExportParametersFile {
11
        public String getMimeType();
12
        public void setMimeType(String value);
13
        public boolean getUseLabels();
14
        public void setUseLabels(boolean value);
15
        public boolean getAttsAsBalloon();
16
        public void setAttsAsBalloon(boolean value);
17
}
org.gvsig.gpe/library/tags/org.gvsig.gpe-2.1.156/org.gvsig.gpe.exportto/org.gvsig.gpe.exportto.kml/src/main/java/org/gvsig/gpe/exportto/kml/service/ExportKMLParametersImpl.java
1
package org.gvsig.gpe.exportto.kml.service;
2

  
3
import java.io.File;
4
import org.apache.commons.io.FilenameUtils;
5
import org.cresques.cts.IProjection;
6
import org.gvsig.export.spi.AbstractExportParametersGeometryFile;
7
import org.gvsig.export.spi.ExportServiceFactory;
8
import org.gvsig.fmap.crs.CRSFactory;
9

  
10
/**
11
 *
12
 * @author osc
13
 */
14
public class ExportKMLParametersImpl         
15
        extends AbstractExportParametersGeometryFile
16
        implements ExportKMLParameters
17
    {
18
    private String mimeType = null;
19
    private boolean useLabels = false;
20
    private boolean attsAsBalloon = false;
21
    
22
    private File file;
23

  
24
    public ExportKMLParametersImpl(ExportServiceFactory factory) {
25
        super(factory);
26
	IProjection targetproj = CRSFactory.getCRS("EPSG:4326");
27
	this.setTargetProjection(targetproj);
28
	this.getExportAttributes().setActive(true);
29
        this.fileHelper.setFileExtension(".kml");
30
    }
31
    
32
    @Override
33
    public String getServiceName() {
34
        return ExportKMLServiceFactory.SERVICE_NAME;
35
    }
36

  
37
    @Override
38
    public String getMimeType() {
39
        return this.mimeType;
40
    }
41

  
42
    @Override
43
    public boolean getUseLabels() {
44
        return this.useLabels;
45
    }
46

  
47
    @Override
48
    public boolean getAttsAsBalloon() {
49
        return this.attsAsBalloon;
50
    }
51
    
52
//    @Override
53
//    public File getFile() {
54
//        return this.file;
55
//    }
56
//
57
//    @Override
58
//    public void setFile(File file) {
59
//        this.file = new File(FilenameUtils.removeExtension(file.getAbsolutePath()) + ".kml");
60
//    }
61

  
62
    @Override
63
    public void setUseLabels(boolean value) {
64
        this.useLabels = value;
65
    }
66

  
67
    @Override
68
    public void setAttsAsBalloon(boolean value) {
69
        this.attsAsBalloon = value;
70
    }
71

  
72
    @Override
73
    public void setMimeType(String value) {
74
        this.mimeType = value;
75
    }
76
}
org.gvsig.gpe/library/tags/org.gvsig.gpe-2.1.156/org.gvsig.gpe.exportto/org.gvsig.gpe.exportto.kml/src/main/java/org/gvsig/gpe/exportto/kml/service/ExportKMLServiceFactory.java
1
/*
2
 * To change this license header, choose License Headers in Project Properties.
3
 * To change this template file, choose Tools | Templates
4
 * and open the template in the editor.
5
 */
6
package org.gvsig.gpe.exportto.kml.service;
7

  
8
import org.gvsig.export.ExportParameters;
9
import org.gvsig.export.spi.AbstractExportServiceFactory;
10

  
11
/**
12
 *
13
 * @author osc
14
 */
15
public class ExportKMLServiceFactory extends AbstractExportServiceFactory 
16
    {
17

  
18
    public static final String SERVICE_NAME = "KML";
19
    
20
    public ExportKMLServiceFactory() {
21
        super(
22
                SERVICE_NAME,
23
                "KML file",
24
                "KML file"
25
        );
26
    }
27

  
28
    @Override
29
    public ExportKMLService createService(ExportParameters parameters) {
30
        ExportKMLService service = new ExportKMLService(this, (ExportKMLParameters) parameters);
31
        return service;
32
    }
33

  
34
    @Override
35
    public ExportKMLParameters createParameters() {
36
        ExportKMLParameters parameters = new ExportKMLParametersImpl(this);
37
        return parameters;
38
    }
39

  
40
    @Override
41
    public boolean hasTabularSupport() {
42
        return true;
43
    }
44

  
45
    @Override
46
    public boolean hasVectorialSupport() {
47
        return true;
48
    }
49
    
50
}
org.gvsig.gpe/library/tags/org.gvsig.gpe-2.1.156/org.gvsig.gpe.exportto/org.gvsig.gpe.exportto.kml/src/main/java/org/gvsig/gpe/exportto/kml/service/ExportKMLService.java
1
/*
2
 * To change this license header, choose License Headers in Project Properties.
3
 * To change this template file, choose Tools | Templates
4
 * and open the template in the editor.
5
 */
6
package org.gvsig.gpe.exportto.kml.service;
7

  
8
import java.awt.geom.Rectangle2D;
9
import java.io.File;
10
import java.io.FileOutputStream;
11
import java.io.IOException;
12
import java.util.ArrayList;
13
import java.util.Iterator;
14
import java.util.List;
15
import java.util.Map;
16
import org.cresques.cts.ICoordTrans;
17
import org.cresques.cts.IProjection;
18
import org.gvsig.export.ExportException;
19
import org.gvsig.export.ExportParameters;
20
import org.gvsig.export.spi.AbstractExportService;
21
import org.gvsig.export.spi.ExportService;
22
import org.gvsig.export.spi.ExportServiceFactory;
23
import org.gvsig.fmap.crs.CRSFactory;
24
import org.gvsig.fmap.dal.DALLocator;
25
import org.gvsig.fmap.dal.DataManager;
26
import org.gvsig.fmap.dal.DataServerExplorer;
27
import org.gvsig.fmap.dal.NewDataStoreParameters;
28
import org.gvsig.fmap.dal.OpenDataStoreParameters;
29
import org.gvsig.fmap.dal.exception.DataException;
30
import org.gvsig.fmap.dal.feature.Feature;
31
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
32
import org.gvsig.fmap.dal.feature.FeatureSet;
33
import org.gvsig.fmap.dal.feature.FeatureType;
34
import org.gvsig.fmap.dal.feature.NewFeatureStoreParameters;
35
import org.gvsig.fmap.dal.feature.OpenFeatureStoreParameters;
36
import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemServerExplorer;
37
import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemServerExplorerParameters;
38
import org.gvsig.fmap.geom.DataTypes;
39
import org.gvsig.fmap.geom.Geometry;
40
import org.gvsig.fmap.geom.GeometryLocator;
41
import org.gvsig.fmap.geom.GeometryManager;
42
import org.gvsig.fmap.geom.exception.CreateEnvelopeException;
43
import org.gvsig.fmap.geom.primitive.Envelope;
44
import org.gvsig.fmap.mapcontext.MapContextException;
45
import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
46
import org.gvsig.fmap.mapcontext.rendering.legend.IVectorLegend;
47
import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
48
import org.gvsig.gpe.exportto.generic.util.CoordinatesSequenceBbox;
49
import org.gvsig.gpe.exportto.generic.util.GeometryToGPEWriter;
50
import org.gvsig.gpe.exportto.kml.style.KmlStyle;
51
import org.gvsig.gpe.exportto.kml.style.StyleUtils;
52
import org.gvsig.gpe.lib.api.GPELocator;
53
import org.gvsig.gpe.lib.api.writer.IGPEWriterHandler;
54
import org.gvsig.gpe.lib.api.writer.IGPEWriterHandlerImplementor;
55
import org.gvsig.gpe.prov.kml.utils.Kml2_1_Tags;
56
import org.gvsig.gpe.prov.kml.writer.GPEKmlWriterHandlerImplementor;
57
import org.gvsig.tools.dispose.DisposableIterator;
58
import org.gvsig.tools.locator.LocatorException;
59
import org.gvsig.tools.util.HasAFile;
60
import org.gvsig.xmlpull.lib.api.stream.IXmlStreamWriter;
61
import org.slf4j.Logger;
62
import org.slf4j.LoggerFactory;
63

  
64
/**
65
 *
66
 * @author osc
67
 */
68
public class ExportKMLService extends AbstractExportService
69
	implements ExportService {
70

  
71
	private static Logger logger = LoggerFactory.getLogger(ExportKMLService.class);
72

  
73
	ExportKMLService(ExportServiceFactory factory, ExportParameters parameters) {
74
		super(factory, parameters);
75
	}
76

  
77
	@Override
78
	protected DataServerExplorer createServerExplorer() throws ExportException {
79

  
80
		DataManager dataManager = DALLocator.getDataManager();
81

  
82
		FilesystemServerExplorerParameters explorerParams;
83
		try {
84
			explorerParams
85
				= (FilesystemServerExplorerParameters) dataManager
86
					.createServerExplorerParameters(FilesystemServerExplorer.NAME);
87
		} catch (Exception e) {
88
			throw new ExportException(e);
89
		}
90
                File parametersFile = getParameters().getEvaluatedFile();
91
		explorerParams.setRoot(parametersFile.getParent());
92

  
93
		FilesystemServerExplorer explorer;
94
		try {
95
			explorer = (FilesystemServerExplorer) dataManager.openServerExplorer(
96
				"FilesystemExplorer", explorerParams
97
			);
98
			return explorer;
99
		} catch (Exception e) {
100
			throw new ExportException(e);
101
		}
102
	}
103

  
104
	@Override
105
	protected NewDataStoreParameters createTargetNewStoreParameters() throws ExportException {
106
		try {
107
			FilesystemServerExplorer explorer = (FilesystemServerExplorer) this.createServerExplorer();
108
			NewFeatureStoreParameters newStoreParameters = (NewFeatureStoreParameters) explorer.getAddParameters(
109
				"GPE"
110
			);
111
                        ((HasAFile) newStoreParameters).setFile(this.getParameters().getEvaluatedFile());
112
                        
113
			newStoreParameters.setDynValue("CRS", this.getParameters().getTargetProjection());
114
			// Usamos el featureType por defecto del KML
115
			return newStoreParameters;
116
		} catch (DataException ex) {
117
			throw new ExportException(ex);
118
		}
119
	}
120

  
121
	@Override
122
	protected OpenDataStoreParameters createTargetOpenStoreParameters() throws ExportException {
123
		try {
124
			DataManager dataManager = DALLocator.getDataManager();
125
			OpenFeatureStoreParameters openStoreParameters = (OpenFeatureStoreParameters) dataManager.createStoreParameters("GPE");
126
			((HasAFile) openStoreParameters).setFile(getParameters().getEvaluatedFile());
127
			openStoreParameters.setDynValue("CRS", this.getParameters().getTargetProjection());
128
			return openStoreParameters;
129
		} catch (DataException ex) {
130
			throw new ExportException(ex);
131
		}
132
	}
133

  
134
	@Override
135
	public ExportKMLParameters getParameters() {
136
		return (ExportKMLParameters) super.getParameters();
137
	}
138

  
139
	@Override
140
	public void export(
141
		FeatureSet featureSet) throws ExportException {
142
		DataServerExplorer explorer = this.createServerExplorer();
143
		NewFeatureStoreParameters params = (NewFeatureStoreParameters) this.createTargetNewStoreParameters();
144

  
145
		String providerName = params.getDataStoreName();
146
		String explorerName = explorer.getProviderName();
147

  
148
		File outFile = this.getParameters().getEvaluatedFile(); //kmlFile;
149
		FeatureSet featureStore = featureSet;
150

  
151
		FLyrVect vectorLayer = null;
152
		String mimeType = this.getParameters().getMimeType(); //mtype;
153
		boolean useLabels = this.getParameters().getUseLabels(); //doLabels;
154
		boolean attsAsBalloon = this.getParameters().getAttsAsBalloon();
155
		ArrayList<ICoordTrans> ICoordTrans;
156

  
157
		List<ICoordTrans> transfList = new ArrayList<ICoordTrans>();
158

  
159
		ICoordTrans ct = this.getParameters().getSourceTransformation(); //vlayer.getCoordTrans();
160
		IProjection targetproj = this.getParameters().getTargetProjection();
161
//        if (reprojectTo4326) {
162
//		8
163
//            targetproj = CRSFactory.getCRS("EPSG:4326");
164
//            if (ct == null) {
165
//                transfList.add(this.getParameters().getSourceProjection().getCT(targetproj));
166
//            } else {
167
//                transfList.add(ct);
168
//                transfList.add(ct.getPDest().getCT(targetproj));
169
//            }
170
//        } else {
171
		if (ct == null) {
172
			if (targetproj == null) {
173
				targetproj = this.getParameters().getSourceProjection();
174
			}
175
			ct = this.getParameters().getSourceProjection().getCT(targetproj);
176
			transfList.add(ct);
177
		} else {
178
			targetproj = ct.getPDest();
179
			transfList.add(ct);
180
		}
181

  
182
		IGPEWriterHandler wh = null;
183
		FileOutputStream fos = null;
184
		String srs = targetproj.getAbrev();
185

  
186
		String[] fldNames = null;
187
		Envelope env = null;
188
		long count = 0;
189
		FeatureType ftype;
190

  
191
		try {
192
			count = featureSet.getSize();
193
			this.getTaskStatus().setRangeOfValues(0, count);
194
			if (this.getParameters().getExportAttributes().isActive()) {
195
				ftype = this.getParameters().getExportAttributes().getTargetFeatureType();
196
			} else {
197
				ftype = featureStore.getDefaultFeatureType();
198
			}
199
			fldNames = getAttributes(ftype);
200
			env = GeometryLocator.getGeometryManager().createEnvelope(Geometry.SUBTYPES.GEOM2D);
201
			this.initEnvelope(env, featureSet);
202
		} catch (DataException | CreateEnvelopeException | LocatorException e) {
203
			throw new ExportException(e);
204
		}
205

  
206
		try {
207
			env = reproject(env, transfList);
208
		} catch (CreateEnvelopeException ex) {
209
			throw new ExportException(ex);
210
		}
211

  
212
		Rectangle2D rect = new Rectangle2D.Double(
213
			env.getMinimum(0),
214
			env.getMinimum(1),
215
			env.getLength(0),
216
			env.getLength(1));
217

  
218
		File fixedFile = outFile;
219
		try {
220

  
221
			if (!outFile.getAbsolutePath().toLowerCase().endsWith(
222
				"." + this.getFileExtension().toLowerCase())) {
223

  
224
				fixedFile = new File(outFile.getAbsolutePath() + "." + getFileExtension());
225
			}
226

  
227
			wh = GPELocator.getGPEManager().createWriterByMimeType(mimeType);
228
			fos = new FileOutputStream(fixedFile);
229

  
230
			wh.setOutputStream(fos);
231
			wh.initialize();
232
			// ==========================================
233
			wh.startLayer(null, null, fixedFile.getName(), null, srs);
234
			// ==============     Styles    =============
235
			Map<ISymbol, KmlStyle> symsty = null;
236
			IXmlStreamWriter xmlw = getXmlStreamWriter(wh);
237
			if (true && xmlw != null && vectorLayer instanceof FLyrVect) {
238
				symsty = StyleUtils.getSymbolStyles((FLyrVect) vectorLayer,
239
					featureSet,
240
					attsAsBalloon,
241
					fldNames);
242
				Iterator<KmlStyle> iter = symsty.values().iterator();
243
				KmlStyle sty = null;
244
				while (iter.hasNext()) {
245
					sty = iter.next();
246
					writeStyle(xmlw, sty);
247
				}
248
			}
249
			// ==========================================
250
			wh.startBbox(null, new CoordinatesSequenceBbox(rect), srs);
251
			wh.endBbox();
252
			// ============= Writing feature ============
253
			IVectorLegend legend;
254
			if (vectorLayer instanceof FLyrVect) {
255
				legend = (IVectorLegend) ((FLyrVect) vectorLayer).getLegend();
256
			} else {
257
				legend = null;
258
			}
259
			writeFeatures(wh, xmlw, featureSet, fldNames, symsty, legend, transfList);
260

  
261
//            writeFeatures(wh, xmlw, featureSet, fldNames, symsty,
262
//                    (IVectorLegend) vectorLayer.getLegend());
263
			// ==========================================
264
			wh.endLayer();
265
			// ==========================================
266
			wh.close();
267
			fos.close();
268
		} catch (Exception exc) {
269
			throw new ExportException(exc);
270
		}
271

  
272
		this.getTaskStatus().setCurValue(count);
273
//        this.finishAction(fixedFile, targetproj);
274
		this.getTaskStatus().terminate();
275
		this.getTaskStatus().remove();
276

  
277
	}
278

  
279
	private String[] getAttributes(FeatureType ftype) {
280

  
281
		FeatureAttributeDescriptor[] atts = ftype.getAttributeDescriptors();
282

  
283
		FeatureAttributeDescriptor desc = null;
284
		List<String> list = new ArrayList<String>();
285
		for (int i = 0; i < atts.length; i++) {
286
			desc = atts[i];
287
			if (desc.getDataType().getType() != DataTypes.GEOMETRY) {
288
				list.add(desc.getName());
289
			}
290
		}
291
		return list.toArray(new String[0]);
292
	}
293

  
294
	private Geometry reproject(Geometry geom, List<ICoordTrans> transfList) {
295

  
296
		int sz = transfList.size();
297
		if (sz == 0) {
298
			return geom;
299
		} else {
300
			Geometry resp = geom.cloneGeometry();
301
			for (int i = 0; i < sz; i++) {
302
				resp.reProject(transfList.get(i));
303
			}
304
			return resp;
305
		}
306

  
307
	}
308

  
309
	public String getFileExtension() {
310
		return "kml";
311
	}
312

  
313
//    private void finishAction(File kmlfile, IProjection proj)
314
//            throws ExportException {
315
//        
316
//        this.createTargetOpenStoreParameters()
317
//
318
//        if (exporttoServiceFinishAction != null) {
319
//
320
//            /*
321
//             * Export is done. We notify with a SHPStoreParameters,
322
//             * not with the NewSHPParameters we have used:
323
//             */
324
//            DataManagerProviderServices dataman
325
//                    = (DataManagerProviderServices) DALLocator.getDataManager();
326
//
327
//            DataStoreParameters dsp = null;
328
//            try {
329
//                dsp = dataman.createStoreParameters("GPE");
330
//            } catch (Exception e) {
331
//                throw new ExportException(e); //"Cannot add resulting kml file to view", e);
332
//            }
333
//
334
//            dsp.setDynValue("File", kmlfile);
335
//            dsp.setDynValue("CRS", proj);
336
//
337
//            try {
338
//                dsp.validate();
339
//            } catch (ValidateDataParametersException e) {
340
//                throw new ExportException(e);
341
//            }
342
//            exporttoServiceFinishAction.finished(kmlfile.getName(), dsp);
343
//        }
344
//    }
345
	private void writeStyle(IXmlStreamWriter xmlw, KmlStyle sty) throws IOException {
346

  
347
		xmlw.writeStartElement(Kml2_1_Tags.STYLE);
348
		xmlw.writeStartAttribute(Kml2_1_Tags.ID);
349
		xmlw.writeValue(sty.getId());
350
		xmlw.writeEndAttributes();
351
		sty.writeXml(xmlw);
352
		xmlw.writeEndElement();
353
	}
354

  
355
	private IXmlStreamWriter getXmlStreamWriter(IGPEWriterHandler wh) {
356

  
357
		IGPEWriterHandlerImplementor imple = wh.getImplementor();
358
		if (!(imple instanceof GPEKmlWriterHandlerImplementor)) {
359
			/*
360
             * Unexpected class
361
			 */
362
			return null;
363
		}
364
		GPEKmlWriterHandlerImplementor kmlimple = null;
365
		kmlimple = (GPEKmlWriterHandlerImplementor) imple;
366
		IXmlStreamWriter xmlw = kmlimple.getXMLStreamWriter();
367
		return xmlw;
368
	}
369

  
370
	private void writeFeatures(
371
		IGPEWriterHandler gwh,
372
		IXmlStreamWriter xmlw,
373
		FeatureSet fset,
374
		String[] fieldNames,
375
		Map<ISymbol, KmlStyle> symsty,
376
		IVectorLegend lege,
377
		List<ICoordTrans> transfList) throws Exception {
378

  
379
		GeometryToGPEWriter gw = new GeometryToGPEWriter(gwh);
380
		DisposableIterator diter = fset.fastIterator();
381
		Feature feat = null;
382
		long count = 0;
383
		this.getTaskStatus().setCurValue(count);
384
		ISymbol sym = null;
385
		int nullGeometries = 0;
386
		while (diter.hasNext()) {
387
			feat = (Feature) diter.next();
388
			try {
389
				if (lege instanceof IVectorLegend) {
390
					sym = lege.getSymbolByFeature(feat);
391
				}
392
			} catch (MapContextException mce) {
393
				logger.info("While getting legend symbol.", mce);
394
			}
395
			KmlStyle kmlStyle;
396
			try {
397
				kmlStyle = symsty.get(sym);
398
			} catch (Exception e) {
399
				kmlStyle = null;
400
			}
401

  
402
			if (!writeFeature(feat, gwh, xmlw, gw, count, fieldNames, kmlStyle, transfList)) {
403
				nullGeometries++;
404
			};
405
			count++;
406
			this.getTaskStatus().setCurValue(count);
407
		}
408
		if (nullGeometries > 0) {
409
			logger.warn("Can't export " + nullGeometries + " features because source geometries are null.");
410
		}
411
		diter.dispose();
412
	}
413

  
414
	private boolean writeFeature(
415
		Feature feat,
416
		IGPEWriterHandler gwh,
417
		IXmlStreamWriter xmlw,
418
		GeometryToGPEWriter gw,
419
		long index,
420
		String[] fieldNames,
421
		KmlStyle ksty,
422
		List<ICoordTrans> transfList) throws IOException {
423

  
424
		Geometry geom = feat.getDefaultGeometry();
425

  
426
		if (geom == null) {
427
			return false;
428
		}
429

  
430
		String strindex = String.valueOf(index);
431

  
432
		if (this.getParameters().getUseLabels()) {
433
			String lbl = getLabelForFeature(feat);
434
			gwh.startFeature(strindex, "FEATURE", lbl);
435
		} else {
436
			gwh.startFeature(strindex, "FEATURE", "");
437
		}
438
		// =========================
439
		// Style
440
		if (ksty != null) {
441
			xmlw.writeStartElement(Kml2_1_Tags.STYLEURL);
442
			xmlw.writeValue("#" + ksty.getId());
443
			xmlw.writeEndElement();
444
		}
445
		// ===== Balloon ============
446
		if (this.getParameters().getAttsAsBalloon()) {
447
			writeBalloon(xmlw, feat, fieldNames);
448
		}
449

  
450
		// ============= Geometry
451

  
452
		/*
453
         * This has no effect if reprojection is not necessary
454
		 */
455
		geom = reproject(geom, transfList);
456
		gw.writeGeometry(geom, this.getParameters().getUseLabels());
457
		// ============= Attributes
458
		Object val = null;
459
		String fldname = null;
460
		for (int i = 0; i < fieldNames.length; i++) {
461
			val = feat.get(fieldNames[i]);
462
			fldname = fieldNames[i].replace(' ', '_');
463
			gwh.startElement("", fldname, val == null ? "" : val.toString());
464
			gwh.endElement();
465
		}
466
		// =========================
467
		gwh.endFeature();
468
		return true;
469
	}
470

  
471
	private String getLabelForFeature(Feature feat) {
472
		return "";
473

  
474
//        if (this.vectorLayer.isLabeled()) {
475
//
476
//            String[] flds = vectorLayer.getLabelingStrategy().getUsedFields();
477
//            int n = Math.min(flds.length, 2);
478
//            if (n == 0) {
479
//                return "";
480
//            } else {
481
//                String resp = "";
482
//                Object val = null;
483
//                if (n == 1) {
484
//                    val = feat.get(flds[0]);
485
//                    resp = (val == null) ? "" : val.toString();
486
//                } else {
487
//                    // n == 2
488
//                    val = feat.get(flds[0]);
489
//                    resp = (val == null) ? "" : val.toString();
490
//                    val = feat.get(flds[1]);
491
//                    resp = (val == null) ? resp : resp + ", " + val.toString();
492
//                }
493
//                return resp;
494
//            }
495
//
496
//        } else {
497
//            return "";
498
//        }
499
	}
500

  
501
	private void writeBalloon(IXmlStreamWriter xmlw, Feature feat, String[] fieldNames)
502
		throws IOException {
503

  
504
		xmlw.writeStartElement(Kml2_1_Tags.EXTENDED_DATA);
505
		String fldrep = null;
506
		Object val = null;
507
		for (int i = 0; i < fieldNames.length; i++) {
508
			fldrep = fieldNames[i].replace(' ', '_');
509
			xmlw.writeStartElement(Kml2_1_Tags.DATA);
510
			// Att =====================================================
511
			xmlw.writeStartAttribute(null, "name");
512
			xmlw.writeValue(fldrep);
513
			xmlw.writeEndAttributes();
514
			// Value =====================================================
515
			xmlw.writeStartElement(Kml2_1_Tags.VALUE);
516
			val = feat.get(fieldNames[i]);
517
			xmlw.writeValue(val == null ? "" : val.toString());
518
			xmlw.writeEndElement();
519
			// =============================================
520
			xmlw.writeEndElement();
521
		}
522
		xmlw.writeEndElement();
523

  
524
		/*
525
         *
526
<ExtendedData>
527
      <Data name="holeNumber">
528
        <value>1</value>
529
      </Data>
530
      <Data name="holeYardage">
531
        <value>234</value>
532
      </Data>
533
      <Data name="holePar">
534
        <value>4</value>
535
      </Data>
536
    </ExtendedData>
537
         *
538
		 */
539
	}
540

  
541
	private Envelope reproject(Envelope env, List<ICoordTrans> transfList) throws CreateEnvelopeException {
542

  
543
		int sz = transfList.size();
544
		if (sz == 0) {
545
			return env;
546
		} else {
547
			Envelope resp = env;
548
			try {
549
				for (int i = 0; i < sz; i++) {
550
					resp = resp.convert(transfList.get(i));
551
				}
552
			} catch (Exception exc) {
553

  
554
				// If this process fails, we'll use "emergency values":
555
				GeometryManager gm = GeometryLocator.getGeometryManager();
556
				double[] min = new double[2];
557
				double[] max = new double[2];
558
				IProjection targetproj = this.getParameters().getTargetProjection();
559
				if (targetproj.isProjected()) {
560
					min = new double[]{-20000000, -20000000};
561
					max = new double[]{20000000, 20000000};
562
				} else {
563
					min = new double[]{-180, -90};
564
					max = new double[]{180, 90};
565
				}
566

  
567
				resp = gm.createEnvelope(
568
					min[0], min[1],
569
					max[0], max[1],
570
					Geometry.SUBTYPES.GEOM2D);
571

  
572
			}
573
			return resp;
574
		}
575
	}
576

  
577
	private void initEnvelope(Envelope env, FeatureSet featureSet) {
578
		for (Feature feature : featureSet) {
579
			Geometry geometry = feature.getDefaultGeometry();
580
			if (geometry != null && geometry.isValid()) {
581
				env.add(geometry);
582
			}
583
		}
584
	}
585
}
org.gvsig.gpe/library/tags/org.gvsig.gpe-2.1.156/org.gvsig.gpe.exportto/org.gvsig.gpe.exportto.kml/src/main/java/org/gvsig/gpe/exportto/kml/style/StyleUtils.java
1
package org.gvsig.gpe.exportto.kml.style;
2

  
3
import java.util.ArrayList;
4
import java.util.HashMap;
5
import java.util.List;
6
import java.util.Map;
7

  
8
import org.gvsig.fmap.dal.exception.DataException;
9
import org.gvsig.fmap.dal.feature.Feature;
10
import org.gvsig.fmap.dal.feature.FeatureSet;
11
import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
12
import org.gvsig.fmap.mapcontext.rendering.legend.IClassifiedVectorLegend;
13
import org.gvsig.fmap.mapcontext.rendering.legend.IVectorLegend;
14
import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
15
import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.fill.IFillSymbol;
16
import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.line.ILineSymbol;
17
import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.IMarkerSymbol;
18
import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.IPictureMarkerSymbol;
19
import org.gvsig.tools.dispose.DisposableIterator;
20

  
21

  
22
public class StyleUtils {
23
    
24
    public static Map<ISymbol, KmlStyle> getSymbolStyles(
25
        FLyrVect vlayer,
26
        FeatureSet fset,
27
        boolean balloon,
28
        String[] flds) throws Exception {
29
        
30
        boolean preventMarker = false;
31

  
32
        IVectorLegend leg = (IVectorLegend) vlayer.getLegend();
33
        Map<ISymbol, KmlStyle> resp = new HashMap<ISymbol, KmlStyle>();
34
        
35
        ISymbol defaultSym = leg.getDefaultSymbol();
36
        KmlStyle defaultStyle = getStyle(defaultSym);
37
        if (defaultSym != null && defaultStyle != null) {
38
            /*
39
             * This is used to set an empty icon style because
40
             * the geometry is not originally a point or multipoint 
41
             */
42
            preventMarker = !(defaultStyle instanceof KmlIconStyle);
43
            KmlCompoundStyle cs = new KmlCompoundStyle(); 
44
            cs.addStyle(defaultStyle);
45
            if (balloon) {
46
                // Not used, see javadoc of KmlBalloonStyle 
47
                // cs.addStyle(new KmlBalloonStyle(flds, "balloonStyle"));
48
            }
49
            if (preventMarker) {
50
                cs.addStyle(new KmlIconStyle());
51
            }
52
            cs.setId("defaultStyle");
53
            resp.put(defaultSym, cs);
54
        }
55
        
56
        if (leg instanceof IClassifiedVectorLegend) {
57
            
58
            IClassifiedVectorLegend cLeg = (IClassifiedVectorLegend) leg;
59
            ISymbol[] symbolsAux = cLeg.getSymbols();
60
            if (fset == null || symbolsAux.length < fset.getSize()) {
61
                
62
                for (int i=0; i < symbolsAux.length; i++) {
63
                    ISymbol s = symbolsAux[i];
64
                    KmlStyle style = getStyle(s);
65
                    if (s != null && style != null) {
66
                        preventMarker = !(style instanceof KmlIconStyle);
67
                        KmlCompoundStyle cs = new KmlCompoundStyle(); 
68
                        cs.addStyle(style);
69
                        if (balloon) {
70
                            // Not used, see javadoc of KmlBalloonStyle 
71
                            // cs.addStyle(new KmlBalloonStyle(flds, "bs" + Integer.toString(i)));
72
                        }
73
                        if (preventMarker) {
74
                            cs.addStyle(new KmlIconStyle());
75
                        }
76
                        cs.setId(Integer.toString(i));
77
                        resp.put(s, cs);
78
                    }
79
                }
80
            } else {
81
                DisposableIterator diter = null;
82
                diter = fset.fastIterator();
83
                Feature feat = null;
84
                int ind = 0;
85
                while (diter.hasNext()) {
86
                    feat = (Feature) diter.next();
87
                    ISymbol s = leg.getSymbolByFeature(feat);
88
                    KmlStyle style = getStyle(s);
89
                    if (s != null && style != null) {
90
                        preventMarker = !(style instanceof KmlIconStyle);
91
                        KmlCompoundStyle cs = new KmlCompoundStyle(); 
92
                        cs.addStyle(style);
93
                        if (balloon) {
94
                            // Not used, see javadoc of KmlBalloonStyle 
95
                            // cs.addStyle(new KmlBalloonStyle(flds, "bs" + Integer.toString(ind)));
96
                        }
97
                        if (preventMarker) {
98
                            cs.addStyle(new KmlIconStyle());
99
                        }
100
                        cs.setId(Integer.toString(ind));
101
                        resp.put(s, cs);
102
                        ind++;
103
                    }
104
                }
105
            }
106
        }
107
        return resp;
108
    }
109

  
110
    /**
111
     * Returns null if it cannot be rendered in KML
112
     * 
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff