annotate src/java/de/intevation/mxd/writer/MapScriptWriter.java @ 347:02d3c1665a46

Shorten long paths for better pdf representation
author Andre Heinecke <aheinecke@intevation.de>
date Fri, 16 Nov 2012 17:02:33 +0100
parents dbfcb0b69a63
children
rev   line source
243
df4e0946ef02 Added LGPL header.
Raimund Renkert <rrenkert@intevation.de>
parents: 239
diff changeset
1 /*
df4e0946ef02 Added LGPL header.
Raimund Renkert <rrenkert@intevation.de>
parents: 239
diff changeset
2 * Copyright (c) 2011 by Intevation GmbH, Germany <info@intevation.de>
df4e0946ef02 Added LGPL header.
Raimund Renkert <rrenkert@intevation.de>
parents: 239
diff changeset
3 *
df4e0946ef02 Added LGPL header.
Raimund Renkert <rrenkert@intevation.de>
parents: 239
diff changeset
4 * This file is part of MXD2map.
df4e0946ef02 Added LGPL header.
Raimund Renkert <rrenkert@intevation.de>
parents: 239
diff changeset
5 *
df4e0946ef02 Added LGPL header.
Raimund Renkert <rrenkert@intevation.de>
parents: 239
diff changeset
6 * This program is free software under the LGPL (>=v2.1)
df4e0946ef02 Added LGPL header.
Raimund Renkert <rrenkert@intevation.de>
parents: 239
diff changeset
7 * Read the file LICENCE.txt coming with the software for details
df4e0946ef02 Added LGPL header.
Raimund Renkert <rrenkert@intevation.de>
parents: 239
diff changeset
8 * or visit http://www.gnu.org/licenses/ if it does not exist.
df4e0946ef02 Added LGPL header.
Raimund Renkert <rrenkert@intevation.de>
parents: 239
diff changeset
9 *
df4e0946ef02 Added LGPL header.
Raimund Renkert <rrenkert@intevation.de>
parents: 239
diff changeset
10 * MXD2map has been developed on behalf of the
df4e0946ef02 Added LGPL header.
Raimund Renkert <rrenkert@intevation.de>
parents: 239
diff changeset
11 * Bundesamt fuer Seeschifffahrt und Hydrographie (BSH) in Hamburg
df4e0946ef02 Added LGPL header.
Raimund Renkert <rrenkert@intevation.de>
parents: 239
diff changeset
12 * by Intevation GmbH.
df4e0946ef02 Added LGPL header.
Raimund Renkert <rrenkert@intevation.de>
parents: 239
diff changeset
13 *
df4e0946ef02 Added LGPL header.
Raimund Renkert <rrenkert@intevation.de>
parents: 239
diff changeset
14 * Authors:
df4e0946ef02 Added LGPL header.
Raimund Renkert <rrenkert@intevation.de>
parents: 239
diff changeset
15 * Raimund Renkert <raimund.renkert@intevation.de>
df4e0946ef02 Added LGPL header.
Raimund Renkert <rrenkert@intevation.de>
parents: 239
diff changeset
16 * Bjoern Schilberg <bjoern.schilberg@intevation.de>
df4e0946ef02 Added LGPL header.
Raimund Renkert <rrenkert@intevation.de>
parents: 239
diff changeset
17 * Stephan Holl <stephan.holl@intevation.de>
df4e0946ef02 Added LGPL header.
Raimund Renkert <rrenkert@intevation.de>
parents: 239
diff changeset
18 */
df4e0946ef02 Added LGPL header.
Raimund Renkert <rrenkert@intevation.de>
parents: 239
diff changeset
19
41
60ed2164035a Introduced MapScript writer.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
20 package de.intevation.mxd.writer;
60ed2164035a Introduced MapScript writer.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
21
60ed2164035a Introduced MapScript writer.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
22 import org.apache.log4j.Logger;
60ed2164035a Introduced MapScript writer.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
23
179
f3a91cd7440b Added a first version of feature labeling.
raimund renkert <raimund.renkert@intevation.de>
parents: 175
diff changeset
24 import java.awt.Color;
f3a91cd7440b Added a first version of feature labeling.
raimund renkert <raimund.renkert@intevation.de>
parents: 175
diff changeset
25
41
60ed2164035a Introduced MapScript writer.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
26 import org.w3c.dom.Document;
60ed2164035a Introduced MapScript writer.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
27 import org.w3c.dom.Element;
60ed2164035a Introduced MapScript writer.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
28 import org.w3c.dom.NodeList;
42
395307e8b7ee First MapScript Writer that generates valid mapfiles.
Raimund Renkert <rrenkert@intevation.de>
parents: 41
diff changeset
29
98
4696d0769f9c Write the absolute path to the data source of the layer.
Raimund Renkert <rrenkert@intevation.de>
parents: 97
diff changeset
30 import java.io.File;
4696d0769f9c Write the absolute path to the data source of the layer.
Raimund Renkert <rrenkert@intevation.de>
parents: 97
diff changeset
31
41
60ed2164035a Introduced MapScript writer.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
32 import javax.xml.xpath.XPathConstants;
60ed2164035a Introduced MapScript writer.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
33
60ed2164035a Introduced MapScript writer.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
34 import edu.umn.gis.mapscript.mapObj;
60ed2164035a Introduced MapScript writer.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
35 import edu.umn.gis.mapscript.layerObj;
42
395307e8b7ee First MapScript Writer that generates valid mapfiles.
Raimund Renkert <rrenkert@intevation.de>
parents: 41
diff changeset
36 import edu.umn.gis.mapscript.classObj;
179
f3a91cd7440b Added a first version of feature labeling.
raimund renkert <raimund.renkert@intevation.de>
parents: 175
diff changeset
37 import edu.umn.gis.mapscript.labelObj;
f3a91cd7440b Added a first version of feature labeling.
raimund renkert <raimund.renkert@intevation.de>
parents: 175
diff changeset
38 import edu.umn.gis.mapscript.colorObj;
f3a91cd7440b Added a first version of feature labeling.
raimund renkert <raimund.renkert@intevation.de>
parents: 175
diff changeset
39 import edu.umn.gis.mapscript.fontSetObj;
f3a91cd7440b Added a first version of feature labeling.
raimund renkert <raimund.renkert@intevation.de>
parents: 175
diff changeset
40 import edu.umn.gis.mapscript.hashTableObj;
315
1d77ea6a915d Add basic support for Graphics Layers. For now this is restricted
Andre Heinecke <aheinecke@intevation.de>
parents: 314
diff changeset
41 import edu.umn.gis.mapscript.shapeObj;
1d77ea6a915d Add basic support for Graphics Layers. For now this is restricted
Andre Heinecke <aheinecke@intevation.de>
parents: 314
diff changeset
42 import edu.umn.gis.mapscript.pointObj;
1d77ea6a915d Add basic support for Graphics Layers. For now this is restricted
Andre Heinecke <aheinecke@intevation.de>
parents: 314
diff changeset
43 import edu.umn.gis.mapscript.lineObj;
42
395307e8b7ee First MapScript Writer that generates valid mapfiles.
Raimund Renkert <rrenkert@intevation.de>
parents: 41
diff changeset
44
41
60ed2164035a Introduced MapScript writer.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
45 import edu.umn.gis.mapscript.MS_UNITS;
42
395307e8b7ee First MapScript Writer that generates valid mapfiles.
Raimund Renkert <rrenkert@intevation.de>
parents: 41
diff changeset
46 import edu.umn.gis.mapscript.MS_LAYER_TYPE;
130
5991c1f90f91 Added data source "SDE" to writer.
vc11884admin@VC11884.win.bsh.de
parents: 129
diff changeset
47 import edu.umn.gis.mapscript.MS_CONNECTION_TYPE;
315
1d77ea6a915d Add basic support for Graphics Layers. For now this is restricted
Andre Heinecke <aheinecke@intevation.de>
parents: 314
diff changeset
48 import edu.umn.gis.mapscript.MS_SHAPE_TYPE;
179
f3a91cd7440b Added a first version of feature labeling.
raimund renkert <raimund.renkert@intevation.de>
parents: 175
diff changeset
49 import edu.umn.gis.mapscript.MS_FONT_TYPE;
f3a91cd7440b Added a first version of feature labeling.
raimund renkert <raimund.renkert@intevation.de>
parents: 175
diff changeset
50 import edu.umn.gis.mapscript.MS_POSITIONS_ENUM;
41
60ed2164035a Introduced MapScript writer.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
51
60ed2164035a Introduced MapScript writer.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
52 import de.intevation.mxd.utils.XMLUtils;
259
8fe9ccc77962 Introduced a MapScript helper class and improved metadata handling.
raimund renkert <raimund.renkert@intevation.de>
parents: 258
diff changeset
53 import de.intevation.mxd.utils.MapScriptUtils;
41
60ed2164035a Introduced MapScript writer.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
54
60ed2164035a Introduced MapScript writer.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
55 /**
43
ef7ca23c4233 Added comments, done some code styling and removed typos.
Raimund Renkert <rrenkert@intevation.de>
parents: 42
diff changeset
56 * The Mapfile Writer.
ef7ca23c4233 Added comments, done some code styling and removed typos.
Raimund Renkert <rrenkert@intevation.de>
parents: 42
diff changeset
57 * This Writer uses the MapScript Java API to create Mapfiles from a DOM.
41
60ed2164035a Introduced MapScript writer.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
58 *
60ed2164035a Introduced MapScript writer.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
59 * @author <a href="mailto:raimund.renkert@intevation.de">Raimund Renkert</a>
60ed2164035a Introduced MapScript writer.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
60 */
60ed2164035a Introduced MapScript writer.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
61 public class MapScriptWriter
60ed2164035a Introduced MapScript writer.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
62 implements IWriter
60ed2164035a Introduced MapScript writer.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
63 {
43
ef7ca23c4233 Added comments, done some code styling and removed typos.
Raimund Renkert <rrenkert@intevation.de>
parents: 42
diff changeset
64 /**
ef7ca23c4233 Added comments, done some code styling and removed typos.
Raimund Renkert <rrenkert@intevation.de>
parents: 42
diff changeset
65 * The Logger.
ef7ca23c4233 Added comments, done some code styling and removed typos.
Raimund Renkert <rrenkert@intevation.de>
parents: 42
diff changeset
66 */
ef7ca23c4233 Added comments, done some code styling and removed typos.
Raimund Renkert <rrenkert@intevation.de>
parents: 42
diff changeset
67 private static final Logger logger = Logger.getLogger(MapScriptWriter.class);
ef7ca23c4233 Added comments, done some code styling and removed typos.
Raimund Renkert <rrenkert@intevation.de>
parents: 42
diff changeset
68
ef7ca23c4233 Added comments, done some code styling and removed typos.
Raimund Renkert <rrenkert@intevation.de>
parents: 42
diff changeset
69 /**
ef7ca23c4233 Added comments, done some code styling and removed typos.
Raimund Renkert <rrenkert@intevation.de>
parents: 42
diff changeset
70 * Private member.
ef7ca23c4233 Added comments, done some code styling and removed typos.
Raimund Renkert <rrenkert@intevation.de>
parents: 42
diff changeset
71 */
41
60ed2164035a Introduced MapScript writer.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
72 private Document root;
60ed2164035a Introduced MapScript writer.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
73 private mapObj map;
259
8fe9ccc77962 Introduced a MapScript helper class and improved metadata handling.
raimund renkert <raimund.renkert@intevation.de>
parents: 258
diff changeset
74 private MapScriptUtils msutils;
55
f0c02ff120d6 Read filenames from properties file or commandline arguments.
Raimund Renkert <rrenkert@intevation.de>
parents: 53
diff changeset
75 private String mapFilename;
324
5e7e6d99f997 Make mapserver install location version independent
Andre Heinecke <aheinecke@intevation.de>
parents: 322
diff changeset
76 private String MS_BINDIR = "c:/mapserver/bin";
134
acc9e5430177 Handle SDE connection attributes and expressions.
vc11884admin@VC11884.win.bsh.de
parents: 132
diff changeset
77 private String prefix = "";
339
ef1cac2854e3 * src/java/de/intevation/mxd/writer/MapScriptWriter.java:
Andre Heinecke <aheinecke@intevation.de>
parents: 338
diff changeset
78 private boolean useRelativePaths = true;
170
b9ee44070056 Manage projections and units.
vc11884admin@VC11884.win.bsh.de
parents: 169
diff changeset
79 private MS_UNITS units = MS_UNITS.MS_METERS;
41
60ed2164035a Introduced MapScript writer.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
80
181
0bde090506f9 Added comments.
Raimund Renkert <rrenkert@intevation.de>
parents: 180
diff changeset
81 /**
0bde090506f9 Added comments.
Raimund Renkert <rrenkert@intevation.de>
parents: 180
diff changeset
82 * Default constructor.
0bde090506f9 Added comments.
Raimund Renkert <rrenkert@intevation.de>
parents: 180
diff changeset
83 * Creates a mapscript writer object with an empty map.
0bde090506f9 Added comments.
Raimund Renkert <rrenkert@intevation.de>
parents: 180
diff changeset
84 */
41
60ed2164035a Introduced MapScript writer.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
85 public MapScriptWriter() {
55
f0c02ff120d6 Read filenames from properties file or commandline arguments.
Raimund Renkert <rrenkert@intevation.de>
parents: 53
diff changeset
86 map = new mapObj("");
298
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
87 msutils = new MapScriptUtils();
55
f0c02ff120d6 Read filenames from properties file or commandline arguments.
Raimund Renkert <rrenkert@intevation.de>
parents: 53
diff changeset
88 mapFilename = "";
41
60ed2164035a Introduced MapScript writer.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
89 }
60ed2164035a Introduced MapScript writer.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
90
181
0bde090506f9 Added comments.
Raimund Renkert <rrenkert@intevation.de>
parents: 180
diff changeset
91 /**
0bde090506f9 Added comments.
Raimund Renkert <rrenkert@intevation.de>
parents: 180
diff changeset
92 * Contructor with template and output filename.
0bde090506f9 Added comments.
Raimund Renkert <rrenkert@intevation.de>
parents: 180
diff changeset
93 * Creates a mapscript writer object with the given template that saves the
0bde090506f9 Added comments.
Raimund Renkert <rrenkert@intevation.de>
parents: 180
diff changeset
94 * map to the filename.
0bde090506f9 Added comments.
Raimund Renkert <rrenkert@intevation.de>
parents: 180
diff changeset
95 *
0bde090506f9 Added comments.
Raimund Renkert <rrenkert@intevation.de>
parents: 180
diff changeset
96 * @param templ Mapfile template.
0bde090506f9 Added comments.
Raimund Renkert <rrenkert@intevation.de>
parents: 180
diff changeset
97 * @param filename Output file name.
0bde090506f9 Added comments.
Raimund Renkert <rrenkert@intevation.de>
parents: 180
diff changeset
98 */
55
f0c02ff120d6 Read filenames from properties file or commandline arguments.
Raimund Renkert <rrenkert@intevation.de>
parents: 53
diff changeset
99 public MapScriptWriter(String templ, String filename) {
180
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
100 String path = System.getProperty("user.dir");
55
f0c02ff120d6 Read filenames from properties file or commandline arguments.
Raimund Renkert <rrenkert@intevation.de>
parents: 53
diff changeset
101 map = new mapObj(templ);
298
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
102 msutils = new MapScriptUtils();
180
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
103 File f = new File(filename);
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
104 mapFilename = filename;
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
105 if(f.isAbsolute()) {
174
707f13cfba74 Improved the commandline arguments and save the mapfile in the correct directory.
raimund.renkert@intevation.de
parents: 172
diff changeset
106 map.setMappath(mapFilename);
180
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
107 }
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
108 else {
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
109 map.setMappath(
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
110 System.getProperty("user.dir") +
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
111 File.separator +
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
112 mapFilename);
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
113 mapFilename = System.getProperty("user.dir") +
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
114 File.separator +
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
115 mapFilename;
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
116 }
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
117 String fontSetPath = map.getFontset().getFilename();
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
118 File fonts = new File(fontSetPath);
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
119 String fontSet = fonts.getAbsolutePath();
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
120 fontSet = fontSet.replaceAll("\\\\", "/");
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
121 map.setFontSet(fontSet);
340
dbfcb0b69a63 * contrib/installer/example/example/template.map: Switch to latin1 encoding
Andre Heinecke <aheinecke@intevation.de>
parents: 339
diff changeset
122
41
60ed2164035a Introduced MapScript writer.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
123 }
60ed2164035a Introduced MapScript writer.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
124
43
ef7ca23c4233 Added comments, done some code styling and removed typos.
Raimund Renkert <rrenkert@intevation.de>
parents: 42
diff changeset
125 /**
ef7ca23c4233 Added comments, done some code styling and removed typos.
Raimund Renkert <rrenkert@intevation.de>
parents: 42
diff changeset
126 * Write the mapfile.
ef7ca23c4233 Added comments, done some code styling and removed typos.
Raimund Renkert <rrenkert@intevation.de>
parents: 42
diff changeset
127 * @param doc The root document containin the map attributes.
ef7ca23c4233 Added comments, done some code styling and removed typos.
Raimund Renkert <rrenkert@intevation.de>
parents: 42
diff changeset
128 *
ef7ca23c4233 Added comments, done some code styling and removed typos.
Raimund Renkert <rrenkert@intevation.de>
parents: 42
diff changeset
129 * @return Currently always true.
ef7ca23c4233 Added comments, done some code styling and removed typos.
Raimund Renkert <rrenkert@intevation.de>
parents: 42
diff changeset
130 */
120
11d63bf00326 Changed exception handling and logging in writer classes.
Raimund Renkert <rrenkert@intevation.de>
parents: 102
diff changeset
131 public boolean write(Document doc) {
41
60ed2164035a Introduced MapScript writer.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
132 logger.debug("write()");
60ed2164035a Introduced MapScript writer.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
133 this.root = doc;
60ed2164035a Introduced MapScript writer.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
134
60ed2164035a Introduced MapScript writer.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
135 //Get the filename.
60ed2164035a Introduced MapScript writer.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
136 Element fileNode = (Element)XMLUtils.xpath(
60ed2164035a Introduced MapScript writer.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
137 root,
60ed2164035a Introduced MapScript writer.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
138 "/mxd/file",
60ed2164035a Introduced MapScript writer.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
139 XPathConstants.NODE);
60ed2164035a Introduced MapScript writer.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
140 //Write the map attributes.
60ed2164035a Introduced MapScript writer.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
141 writeMap();
42
395307e8b7ee First MapScript Writer that generates valid mapfiles.
Raimund Renkert <rrenkert@intevation.de>
parents: 41
diff changeset
142 //Write the layers.
298
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
143 boolean ret = writeLayer();
339
ef1cac2854e3 * src/java/de/intevation/mxd/writer/MapScriptWriter.java:
Andre Heinecke <aheinecke@intevation.de>
parents: 338
diff changeset
144
ef1cac2854e3 * src/java/de/intevation/mxd/writer/MapScriptWriter.java:
Andre Heinecke <aheinecke@intevation.de>
parents: 338
diff changeset
145 // Replace the filenames if necessary
ef1cac2854e3 * src/java/de/intevation/mxd/writer/MapScriptWriter.java:
Andre Heinecke <aheinecke@intevation.de>
parents: 338
diff changeset
146 if (useRelativePaths) {
ef1cac2854e3 * src/java/de/intevation/mxd/writer/MapScriptWriter.java:
Andre Heinecke <aheinecke@intevation.de>
parents: 338
diff changeset
147 try {
ef1cac2854e3 * src/java/de/intevation/mxd/writer/MapScriptWriter.java:
Andre Heinecke <aheinecke@intevation.de>
parents: 338
diff changeset
148 map.setFontSet(pathForMapfile(map.getFontset().getFilename()));
ef1cac2854e3 * src/java/de/intevation/mxd/writer/MapScriptWriter.java:
Andre Heinecke <aheinecke@intevation.de>
parents: 338
diff changeset
149 } catch (Exception e) {
ef1cac2854e3 * src/java/de/intevation/mxd/writer/MapScriptWriter.java:
Andre Heinecke <aheinecke@intevation.de>
parents: 338
diff changeset
150 // Exception is expected because our working dir is not
ef1cac2854e3 * src/java/de/intevation/mxd/writer/MapScriptWriter.java:
Andre Heinecke <aheinecke@intevation.de>
parents: 338
diff changeset
151 // necessarily the same as the one of the Mapfile
ef1cac2854e3 * src/java/de/intevation/mxd/writer/MapScriptWriter.java:
Andre Heinecke <aheinecke@intevation.de>
parents: 338
diff changeset
152 }
ef1cac2854e3 * src/java/de/intevation/mxd/writer/MapScriptWriter.java:
Andre Heinecke <aheinecke@intevation.de>
parents: 338
diff changeset
153 try {
ef1cac2854e3 * src/java/de/intevation/mxd/writer/MapScriptWriter.java:
Andre Heinecke <aheinecke@intevation.de>
parents: 338
diff changeset
154 map.setSymbolSet(pathForMapfile(map.getSymbolset().getFilename()));
ef1cac2854e3 * src/java/de/intevation/mxd/writer/MapScriptWriter.java:
Andre Heinecke <aheinecke@intevation.de>
parents: 338
diff changeset
155 } catch (Exception e) {
ef1cac2854e3 * src/java/de/intevation/mxd/writer/MapScriptWriter.java:
Andre Heinecke <aheinecke@intevation.de>
parents: 338
diff changeset
156 }
ef1cac2854e3 * src/java/de/intevation/mxd/writer/MapScriptWriter.java:
Andre Heinecke <aheinecke@intevation.de>
parents: 338
diff changeset
157
ef1cac2854e3 * src/java/de/intevation/mxd/writer/MapScriptWriter.java:
Andre Heinecke <aheinecke@intevation.de>
parents: 338
diff changeset
158 }
ef1cac2854e3 * src/java/de/intevation/mxd/writer/MapScriptWriter.java:
Andre Heinecke <aheinecke@intevation.de>
parents: 338
diff changeset
159
41
60ed2164035a Introduced MapScript writer.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
160 //Save the map.
298
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
161 if (ret) {
196
5350621a0294 Verify the SDE databse jointable attribute.
raimund renkert <raimund.renkert@intevation.de>
parents: 190
diff changeset
162 mapObj cloneMap = map.cloneMap();
5350621a0294 Verify the SDE databse jointable attribute.
raimund renkert <raimund.renkert@intevation.de>
parents: 190
diff changeset
163 cloneMap.save(mapFilename);
5350621a0294 Verify the SDE databse jointable attribute.
raimund renkert <raimund.renkert@intevation.de>
parents: 190
diff changeset
164 logger.info("Mapfile created: " + mapFilename);
5350621a0294 Verify the SDE databse jointable attribute.
raimund renkert <raimund.renkert@intevation.de>
parents: 190
diff changeset
165 return true;
298
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
166 }
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
167 return false;
41
60ed2164035a Introduced MapScript writer.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
168 }
60ed2164035a Introduced MapScript writer.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
169
43
ef7ca23c4233 Added comments, done some code styling and removed typos.
Raimund Renkert <rrenkert@intevation.de>
parents: 42
diff changeset
170 /**
ef7ca23c4233 Added comments, done some code styling and removed typos.
Raimund Renkert <rrenkert@intevation.de>
parents: 42
diff changeset
171 * Create the map object and set the attributes.
ef7ca23c4233 Added comments, done some code styling and removed typos.
Raimund Renkert <rrenkert@intevation.de>
parents: 42
diff changeset
172 */
297
ad05f72ef9e4 Useful debug output when setting the Projection fails
Andre Heinecke <aheinecke@intevation.de>
parents: 261
diff changeset
173 private void writeMap()
ad05f72ef9e4 Useful debug output when setting the Projection fails
Andre Heinecke <aheinecke@intevation.de>
parents: 261
diff changeset
174 throws UnknownError
ad05f72ef9e4 Useful debug output when setting the Projection fails
Andre Heinecke <aheinecke@intevation.de>
parents: 261
diff changeset
175 {
41
60ed2164035a Introduced MapScript writer.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
176 logger.debug("writeMap()");
60ed2164035a Introduced MapScript writer.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
177 //Get the map.
60ed2164035a Introduced MapScript writer.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
178 Element mapNode = (Element)XMLUtils.xpath(
60ed2164035a Introduced MapScript writer.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
179 root,
60ed2164035a Introduced MapScript writer.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
180 "/mxd/map",
60ed2164035a Introduced MapScript writer.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
181 XPathConstants.NODE);
60ed2164035a Introduced MapScript writer.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
182
60ed2164035a Introduced MapScript writer.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
183 //Set the name.
60ed2164035a Introduced MapScript writer.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
184 map.setName(mapNode.getAttribute("name"));
42
395307e8b7ee First MapScript Writer that generates valid mapfiles.
Raimund Renkert <rrenkert@intevation.de>
parents: 41
diff changeset
185 map.setMetaData("wms_title", mapNode.getAttribute("name"));
41
60ed2164035a Introduced MapScript writer.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
186 //Set the extent.
60ed2164035a Introduced MapScript writer.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
187 map.setExtent(
60ed2164035a Introduced MapScript writer.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
188 Double.parseDouble(mapNode.getAttribute("extent_min_x")),
60ed2164035a Introduced MapScript writer.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
189 Double.parseDouble(mapNode.getAttribute("extent_min_y")),
60ed2164035a Introduced MapScript writer.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
190 Double.parseDouble(mapNode.getAttribute("extent_max_x")),
60ed2164035a Introduced MapScript writer.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
191 Double.parseDouble(mapNode.getAttribute("extent_max_y")));
60ed2164035a Introduced MapScript writer.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
192
298
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
193 map.setMetaData(
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
194 "ows_extent",
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
195 mapNode.getAttribute("extent_min_x") + ", " +
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
196 mapNode.getAttribute("extent_min_y") + ", " +
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
197 mapNode.getAttribute("extent_max_x") + ", " +
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
198 mapNode.getAttribute("extent_max_y"));
246
87e92debc53f Added extent and projection as ows metadata to the mapfile.
raimund renkert <raimund.renkert@intevation.de>
parents: 245
diff changeset
199
298
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
200 map.setSize(800, 600);
257
1ac277053049 Set map size after setting map extent to avoid the extent to be modified
raimund renkert <raimund.renkert@intevation.de>
parents: 253
diff changeset
201
172
929e09649b08 Handle unknown projections.
vc11884admin@VC11884.win.bsh.de
parents: 170
diff changeset
202 //Set the units and projection.
180
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
203 int proj = Integer.parseInt(mapNode.getAttribute("projection"));
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
204 if(proj != 0) {
297
ad05f72ef9e4 Useful debug output when setting the Projection fails
Andre Heinecke <aheinecke@intevation.de>
parents: 261
diff changeset
205 try {
ad05f72ef9e4 Useful debug output when setting the Projection fails
Andre Heinecke <aheinecke@intevation.de>
parents: 261
diff changeset
206 map.setProjection("epsg:" + mapNode.getAttribute("projection"));
ad05f72ef9e4 Useful debug output when setting the Projection fails
Andre Heinecke <aheinecke@intevation.de>
parents: 261
diff changeset
207 }
ad05f72ef9e4 Useful debug output when setting the Projection fails
Andre Heinecke <aheinecke@intevation.de>
parents: 261
diff changeset
208 catch(UnknownError e) {
ad05f72ef9e4 Useful debug output when setting the Projection fails
Andre Heinecke <aheinecke@intevation.de>
parents: 261
diff changeset
209 logger.error( "Could not set projection: " + mapNode.getAttribute("projection") +
ad05f72ef9e4 Useful debug output when setting the Projection fails
Andre Heinecke <aheinecke@intevation.de>
parents: 261
diff changeset
210 ". Please ensure that it is described in your espg file.");
ad05f72ef9e4 Useful debug output when setting the Projection fails
Andre Heinecke <aheinecke@intevation.de>
parents: 261
diff changeset
211 throw e;
ad05f72ef9e4 Useful debug output when setting the Projection fails
Andre Heinecke <aheinecke@intevation.de>
parents: 261
diff changeset
212 }
180
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
213 }
170
b9ee44070056 Manage projections and units.
vc11884admin@VC11884.win.bsh.de
parents: 169
diff changeset
214 String u = mapNode.getAttribute("units");
b9ee44070056 Manage projections and units.
vc11884admin@VC11884.win.bsh.de
parents: 169
diff changeset
215 if(u.equals("feet")) {
b9ee44070056 Manage projections and units.
vc11884admin@VC11884.win.bsh.de
parents: 169
diff changeset
216 units = MS_UNITS.MS_FEET;
41
60ed2164035a Introduced MapScript writer.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
217 }
170
b9ee44070056 Manage projections and units.
vc11884admin@VC11884.win.bsh.de
parents: 169
diff changeset
218 else if(u.equals("inches")) {
b9ee44070056 Manage projections and units.
vc11884admin@VC11884.win.bsh.de
parents: 169
diff changeset
219 units = MS_UNITS.MS_INCHES;
41
60ed2164035a Introduced MapScript writer.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
220 }
170
b9ee44070056 Manage projections and units.
vc11884admin@VC11884.win.bsh.de
parents: 169
diff changeset
221 else if(u.equals("kilometers")) {
b9ee44070056 Manage projections and units.
vc11884admin@VC11884.win.bsh.de
parents: 169
diff changeset
222 units = MS_UNITS.MS_KILOMETERS;
41
60ed2164035a Introduced MapScript writer.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
223 }
170
b9ee44070056 Manage projections and units.
vc11884admin@VC11884.win.bsh.de
parents: 169
diff changeset
224 else if(u.equals("meters")) {
b9ee44070056 Manage projections and units.
vc11884admin@VC11884.win.bsh.de
parents: 169
diff changeset
225 units = MS_UNITS.MS_METERS;
41
60ed2164035a Introduced MapScript writer.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
226 }
170
b9ee44070056 Manage projections and units.
vc11884admin@VC11884.win.bsh.de
parents: 169
diff changeset
227 else if(u.equals("miles")) {
b9ee44070056 Manage projections and units.
vc11884admin@VC11884.win.bsh.de
parents: 169
diff changeset
228 units = MS_UNITS.MS_MILES;
b9ee44070056 Manage projections and units.
vc11884admin@VC11884.win.bsh.de
parents: 169
diff changeset
229 }
b9ee44070056 Manage projections and units.
vc11884admin@VC11884.win.bsh.de
parents: 169
diff changeset
230 else if(u.equals("nauticalmiles")) {
b9ee44070056 Manage projections and units.
vc11884admin@VC11884.win.bsh.de
parents: 169
diff changeset
231 units = MS_UNITS.MS_NAUTICALMILES;
b9ee44070056 Manage projections and units.
vc11884admin@VC11884.win.bsh.de
parents: 169
diff changeset
232 }
b9ee44070056 Manage projections and units.
vc11884admin@VC11884.win.bsh.de
parents: 169
diff changeset
233 else if(u.equals("points")) {
b9ee44070056 Manage projections and units.
vc11884admin@VC11884.win.bsh.de
parents: 169
diff changeset
234 units = MS_UNITS.MS_PIXELS;
b9ee44070056 Manage projections and units.
vc11884admin@VC11884.win.bsh.de
parents: 169
diff changeset
235 }
180
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
236 else if(u.equals("degree")) {
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
237 units = MS_UNITS.MS_DD;
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
238 }
41
60ed2164035a Introduced MapScript writer.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
239 else {
170
b9ee44070056 Manage projections and units.
vc11884admin@VC11884.win.bsh.de
parents: 169
diff changeset
240 units = MS_UNITS.MS_METERS;
41
60ed2164035a Introduced MapScript writer.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
241 }
170
b9ee44070056 Manage projections and units.
vc11884admin@VC11884.win.bsh.de
parents: 169
diff changeset
242 map.setUnits(units);
246
87e92debc53f Added extent and projection as ows metadata to the mapfile.
raimund renkert <raimund.renkert@intevation.de>
parents: 245
diff changeset
243
298
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
244 String mproj = mapNode.getAttribute("projection");
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
245 if(mproj != null && !mproj.equals("") && ! mproj.equals("0")) {
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
246 MapScriptUtils msu = new MapScriptUtils();
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
247 String wmssrs = msu.getMetaData(map, "wms_srs");
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
248 String owssrs = msu.getMetaData(map, "ows_srs");
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
249 if(wmssrs.indexOf(mproj) < 0) {
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
250 if(wmssrs.equals("")) {
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
251 wmssrs = "EPSG:";
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
252 }
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
253 else {
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
254 wmssrs += " EPSG:";
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
255 }
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
256 wmssrs += mproj;
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
257 }
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
258 if(owssrs.indexOf(mproj) < 0) {
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
259 if(owssrs.equals("")) {
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
260 owssrs = "EPSG:";
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
261 }
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
262 else {
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
263 owssrs += " EPSG:";
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
264 }
259
8fe9ccc77962 Introduced a MapScript helper class and improved metadata handling.
raimund renkert <raimund.renkert@intevation.de>
parents: 258
diff changeset
265 owssrs += mproj;
298
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
266 }
259
8fe9ccc77962 Introduced a MapScript helper class and improved metadata handling.
raimund renkert <raimund.renkert@intevation.de>
parents: 258
diff changeset
267 map.setMetaData("ows_srs", owssrs);
298
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
268 map.setMetaData("wms_srs", wmssrs);
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
269 }
41
60ed2164035a Introduced MapScript writer.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
270 }
60ed2164035a Introduced MapScript writer.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
271
43
ef7ca23c4233 Added comments, done some code styling and removed typos.
Raimund Renkert <rrenkert@intevation.de>
parents: 42
diff changeset
272 /**
ef7ca23c4233 Added comments, done some code styling and removed typos.
Raimund Renkert <rrenkert@intevation.de>
parents: 42
diff changeset
273 * Create layer objects and set the attributes.
ef7ca23c4233 Added comments, done some code styling and removed typos.
Raimund Renkert <rrenkert@intevation.de>
parents: 42
diff changeset
274 */
196
5350621a0294 Verify the SDE databse jointable attribute.
raimund renkert <raimund.renkert@intevation.de>
parents: 190
diff changeset
275 private boolean writeLayer() {
42
395307e8b7ee First MapScript Writer that generates valid mapfiles.
Raimund Renkert <rrenkert@intevation.de>
parents: 41
diff changeset
276 logger.debug("writeLayer()");
395307e8b7ee First MapScript Writer that generates valid mapfiles.
Raimund Renkert <rrenkert@intevation.de>
parents: 41
diff changeset
277 Element mapNode = (Element)XMLUtils.xpath(
395307e8b7ee First MapScript Writer that generates valid mapfiles.
Raimund Renkert <rrenkert@intevation.de>
parents: 41
diff changeset
278 root,
395307e8b7ee First MapScript Writer that generates valid mapfiles.
Raimund Renkert <rrenkert@intevation.de>
parents: 41
diff changeset
279 "/mxd/map",
395307e8b7ee First MapScript Writer that generates valid mapfiles.
Raimund Renkert <rrenkert@intevation.de>
parents: 41
diff changeset
280 XPathConstants.NODE);
395307e8b7ee First MapScript Writer that generates valid mapfiles.
Raimund Renkert <rrenkert@intevation.de>
parents: 41
diff changeset
281 NodeList list = mapNode.getElementsByTagName("layer");
340
dbfcb0b69a63 * contrib/installer/example/example/template.map: Switch to latin1 encoding
Andre Heinecke <aheinecke@intevation.de>
parents: 339
diff changeset
282 for(int i = list.getLength() - 1; i >= 0; i--) {
42
395307e8b7ee First MapScript Writer that generates valid mapfiles.
Raimund Renkert <rrenkert@intevation.de>
parents: 41
diff changeset
283 Element layerElement = (Element)list.item(i);
340
dbfcb0b69a63 * contrib/installer/example/example/template.map: Switch to latin1 encoding
Andre Heinecke <aheinecke@intevation.de>
parents: 339
diff changeset
284 if (layerElement.getAttribute("type") == "annotation" &&
dbfcb0b69a63 * contrib/installer/example/example/template.map: Switch to latin1 encoding
Andre Heinecke <aheinecke@intevation.de>
parents: 339
diff changeset
285 layerElement.getElementsByTagName("feature").getLength() == 0) {
dbfcb0b69a63 * contrib/installer/example/example/template.map: Switch to latin1 encoding
Andre Heinecke <aheinecke@intevation.de>
parents: 339
diff changeset
286 logger.debug("Ignoring empty annotation Layer.");
dbfcb0b69a63 * contrib/installer/example/example/template.map: Switch to latin1 encoding
Andre Heinecke <aheinecke@intevation.de>
parents: 339
diff changeset
287 continue;
dbfcb0b69a63 * contrib/installer/example/example/template.map: Switch to latin1 encoding
Andre Heinecke <aheinecke@intevation.de>
parents: 339
diff changeset
288 }
42
395307e8b7ee First MapScript Writer that generates valid mapfiles.
Raimund Renkert <rrenkert@intevation.de>
parents: 41
diff changeset
289 layerObj layer = new layerObj(map);
190
c640fb351f66 Do not write layer with empty CLASS objects.
raimund renkert <raimund.renkert@intevation.de>
parents: 189
diff changeset
290 NodeList renderer = layerElement.getElementsByTagName("renderer");
42
395307e8b7ee First MapScript Writer that generates valid mapfiles.
Raimund Renkert <rrenkert@intevation.de>
parents: 41
diff changeset
291
395307e8b7ee First MapScript Writer that generates valid mapfiles.
Raimund Renkert <rrenkert@intevation.de>
parents: 41
diff changeset
292 //The layer name.
298
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
293 String group = "";
148
2bf35f0babd0 Implemented new group layer functionality.
vc11884admin@VC11884.win.bsh.de
parents: 145
diff changeset
294 if(layerElement.hasAttribute("group")) {
298
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
295 group = layerElement.getAttribute("group");
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
296 String[] splitted = group.split("/");
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
297 String cleangroup = "";
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
298 for(int j = 0; j < splitted.length; j++) {
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
299 if(!splitted[j].equals("")) {
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
300 splitted[j] = msutils.replaceUmlauts(splitted[j]);
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
301 cleangroup += "/" +
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
302 msutils.removeSpecialChars(splitted[j]);
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
303 }
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
304 }
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
305 group = cleangroup;
180
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
306 }
298
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
307 String lname = layerElement.getAttribute("name");
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
308 lname = msutils.removeSpecialChars(lname);
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
309 lname = msutils.replaceUmlauts(lname);
299
c4fb04f6422f Write GROUP into grouped maps
Andre Heinecke <aheinecke@intevation.de>
parents: 298
diff changeset
310 String ulgroup = group.replaceAll("/", ".");
c4fb04f6422f Write GROUP into grouped maps
Andre Heinecke <aheinecke@intevation.de>
parents: 298
diff changeset
311 String ulname = ulgroup + "." + lname;
298
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
312 if(ulname.startsWith(".")) {
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
313 ulname = ulname.substring(1);
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
314 }
299
c4fb04f6422f Write GROUP into grouped maps
Andre Heinecke <aheinecke@intevation.de>
parents: 298
diff changeset
315 if(ulgroup.startsWith(".")) {
c4fb04f6422f Write GROUP into grouped maps
Andre Heinecke <aheinecke@intevation.de>
parents: 298
diff changeset
316 ulgroup = ulgroup.substring(1);
c4fb04f6422f Write GROUP into grouped maps
Andre Heinecke <aheinecke@intevation.de>
parents: 298
diff changeset
317 }
244
276f63c86f1c Refactored group layer handling and "wms_title" metadata.
raimund renkert <raimund.renkert@intevation.de>
parents: 243
diff changeset
318 layer.setName(ulname);
205
07b991b940ab Concatenate grouplayer name and layer name to have a unique identifier for each
raimund renkert <raimund.renkert@intevation.de>
parents: 204
diff changeset
319 layer.setUnits(units.swigValue());
298
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
320 if(!group.equals("")) {
305
ebf974199309 Only write group if layer is part of a group
Andre Heinecke <aheinecke@intevation.de>
parents: 304
diff changeset
321 layer.setGroup(ulgroup);
245
2eeeae07aaa2 Set the group attribute to the correct wms metadata.
raimund renkert <raimund.renkert@intevation.de>
parents: 244
diff changeset
322 layer.setMetaData("wms_layer_group", group);
298
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
323 }
245
2eeeae07aaa2 Set the group attribute to the correct wms metadata.
raimund renkert <raimund.renkert@intevation.de>
parents: 244
diff changeset
324 layer.setMetaData("wms_title", ulname);
180
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
325
307
f9e53dcc7424 Add Read/Write Support for Projections on a per Layer basis
Andre Heinecke <aheinecke@intevation.de>
parents: 305
diff changeset
326 //Set the projection for the Layers
f9e53dcc7424 Add Read/Write Support for Projections on a per Layer basis
Andre Heinecke <aheinecke@intevation.de>
parents: 305
diff changeset
327 if (layerElement.hasAttribute("projection")) {
f9e53dcc7424 Add Read/Write Support for Projections on a per Layer basis
Andre Heinecke <aheinecke@intevation.de>
parents: 305
diff changeset
328 int proj = Integer.parseInt(layerElement.getAttribute("projection"));
f9e53dcc7424 Add Read/Write Support for Projections on a per Layer basis
Andre Heinecke <aheinecke@intevation.de>
parents: 305
diff changeset
329 if(proj != 0) {
f9e53dcc7424 Add Read/Write Support for Projections on a per Layer basis
Andre Heinecke <aheinecke@intevation.de>
parents: 305
diff changeset
330 try {
f9e53dcc7424 Add Read/Write Support for Projections on a per Layer basis
Andre Heinecke <aheinecke@intevation.de>
parents: 305
diff changeset
331 layer.setProjection("epsg:" + layerElement.getAttribute("projection"));
f9e53dcc7424 Add Read/Write Support for Projections on a per Layer basis
Andre Heinecke <aheinecke@intevation.de>
parents: 305
diff changeset
332 }
f9e53dcc7424 Add Read/Write Support for Projections on a per Layer basis
Andre Heinecke <aheinecke@intevation.de>
parents: 305
diff changeset
333 catch(UnknownError e) {
f9e53dcc7424 Add Read/Write Support for Projections on a per Layer basis
Andre Heinecke <aheinecke@intevation.de>
parents: 305
diff changeset
334 logger.error( "Could not set projection in layer: " + layerElement.getAttribute("projection") +
f9e53dcc7424 Add Read/Write Support for Projections on a per Layer basis
Andre Heinecke <aheinecke@intevation.de>
parents: 305
diff changeset
335 ". Please ensure that it is described in your espg file.");
f9e53dcc7424 Add Read/Write Support for Projections on a per Layer basis
Andre Heinecke <aheinecke@intevation.de>
parents: 305
diff changeset
336 throw e;
f9e53dcc7424 Add Read/Write Support for Projections on a per Layer basis
Andre Heinecke <aheinecke@intevation.de>
parents: 305
diff changeset
337 }
f9e53dcc7424 Add Read/Write Support for Projections on a per Layer basis
Andre Heinecke <aheinecke@intevation.de>
parents: 305
diff changeset
338 }
f9e53dcc7424 Add Read/Write Support for Projections on a per Layer basis
Andre Heinecke <aheinecke@intevation.de>
parents: 305
diff changeset
339 }
298
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
340 // Projection metadata.
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
341 String mproj = mapNode.getAttribute("projection");
307
f9e53dcc7424 Add Read/Write Support for Projections on a per Layer basis
Andre Heinecke <aheinecke@intevation.de>
parents: 305
diff changeset
342 if (layerElement.hasAttribute("projection")) {
f9e53dcc7424 Add Read/Write Support for Projections on a per Layer basis
Andre Heinecke <aheinecke@intevation.de>
parents: 305
diff changeset
343 // Overwrite the Map Projection in the layer
f9e53dcc7424 Add Read/Write Support for Projections on a per Layer basis
Andre Heinecke <aheinecke@intevation.de>
parents: 305
diff changeset
344 mproj = layerElement.getAttribute("projection");
f9e53dcc7424 Add Read/Write Support for Projections on a per Layer basis
Andre Heinecke <aheinecke@intevation.de>
parents: 305
diff changeset
345 }
298
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
346 if(mproj != null && !mproj.equals("") && !mproj.equals("0")) {
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
347 String wmssrs = layer.getMetaData("wms_srs");
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
348 String owssrs = layer.getMetaData("ows_srs");
259
8fe9ccc77962 Introduced a MapScript helper class and improved metadata handling.
raimund renkert <raimund.renkert@intevation.de>
parents: 258
diff changeset
349 if(wmssrs == null) {
298
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
350 wmssrs = "EPSG:";
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
351 }
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
352 else {
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
353 wmssrs += " EPSG:";
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
354 }
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
355 if(owssrs == null) {
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
356 owssrs = "EPSG:";
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
357 }
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
358 else {
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
359 owssrs += " EPSG:";
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
360 }
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
361 wmssrs += mproj;
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
362 owssrs += mproj;
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
363 layer.setMetaData("wms_srs", wmssrs);
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
364 layer.setMetaData("ows_srs", owssrs);
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
365 }
259
8fe9ccc77962 Introduced a MapScript helper class and improved metadata handling.
raimund renkert <raimund.renkert@intevation.de>
parents: 258
diff changeset
366
300
215ae6199b95 Add WMS Support to the writer
Andre Heinecke <aheinecke@intevation.de>
parents: 299
diff changeset
367 // WMS Version
215ae6199b95 Add WMS Support to the writer
Andre Heinecke <aheinecke@intevation.de>
parents: 299
diff changeset
368 if (layerElement.hasAttribute("wms_server_version")) {
215ae6199b95 Add WMS Support to the writer
Andre Heinecke <aheinecke@intevation.de>
parents: 299
diff changeset
369 layer.setMetaData("wms_server_version",
215ae6199b95 Add WMS Support to the writer
Andre Heinecke <aheinecke@intevation.de>
parents: 299
diff changeset
370 layerElement.getAttribute("wms_server_version"));
215ae6199b95 Add WMS Support to the writer
Andre Heinecke <aheinecke@intevation.de>
parents: 299
diff changeset
371 }
215ae6199b95 Add WMS Support to the writer
Andre Heinecke <aheinecke@intevation.de>
parents: 299
diff changeset
372
215ae6199b95 Add WMS Support to the writer
Andre Heinecke <aheinecke@intevation.de>
parents: 299
diff changeset
373 // WMS Version
215ae6199b95 Add WMS Support to the writer
Andre Heinecke <aheinecke@intevation.de>
parents: 299
diff changeset
374 if (layerElement.hasAttribute("imageType")) {
215ae6199b95 Add WMS Support to the writer
Andre Heinecke <aheinecke@intevation.de>
parents: 299
diff changeset
375 layer.setMetaData("wms_format",
215ae6199b95 Add WMS Support to the writer
Andre Heinecke <aheinecke@intevation.de>
parents: 299
diff changeset
376 layerElement.getAttribute("imageType"));
215ae6199b95 Add WMS Support to the writer
Andre Heinecke <aheinecke@intevation.de>
parents: 299
diff changeset
377 }
215ae6199b95 Add WMS Support to the writer
Andre Heinecke <aheinecke@intevation.de>
parents: 299
diff changeset
378
298
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
379 // The layer extent metadata.
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
380 if(layerElement.hasAttribute("extent_min_x") &&
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
381 layerElement.hasAttribute("extent_max_x") &&
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
382 layerElement.hasAttribute("extent_min_y") &&
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
383 layerElement.hasAttribute("extent_max_y")) {
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
384 layer.setMetaData(
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
385 "ows_extent",
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
386 layerElement.getAttribute("extent_min_x") + ", " +
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
387 layerElement.getAttribute("extent_min_y") + ", " +
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
388 layerElement.getAttribute("extent_max_x") + ", " +
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
389 layerElement.getAttribute("extent_max_y"));
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
390 }
42
395307e8b7ee First MapScript Writer that generates valid mapfiles.
Raimund Renkert <rrenkert@intevation.de>
parents: 41
diff changeset
391 //The layer status.
395307e8b7ee First MapScript Writer that generates valid mapfiles.
Raimund Renkert <rrenkert@intevation.de>
parents: 41
diff changeset
392 String stat = layerElement.getAttribute("status");
395307e8b7ee First MapScript Writer that generates valid mapfiles.
Raimund Renkert <rrenkert@intevation.de>
parents: 41
diff changeset
393 if (stat.equals("on")) {
395307e8b7ee First MapScript Writer that generates valid mapfiles.
Raimund Renkert <rrenkert@intevation.de>
parents: 41
diff changeset
394 layer.setStatus(1);
395307e8b7ee First MapScript Writer that generates valid mapfiles.
Raimund Renkert <rrenkert@intevation.de>
parents: 41
diff changeset
395 }
395307e8b7ee First MapScript Writer that generates valid mapfiles.
Raimund Renkert <rrenkert@intevation.de>
parents: 41
diff changeset
396 else {
395307e8b7ee First MapScript Writer that generates valid mapfiles.
Raimund Renkert <rrenkert@intevation.de>
parents: 41
diff changeset
397 layer.setStatus(0);
395307e8b7ee First MapScript Writer that generates valid mapfiles.
Raimund Renkert <rrenkert@intevation.de>
parents: 41
diff changeset
398 }
395307e8b7ee First MapScript Writer that generates valid mapfiles.
Raimund Renkert <rrenkert@intevation.de>
parents: 41
diff changeset
399
395307e8b7ee First MapScript Writer that generates valid mapfiles.
Raimund Renkert <rrenkert@intevation.de>
parents: 41
diff changeset
400 //The scale.
145
b2c5a66022f1 Exception handling for number conversions in writer modules.
Raimund Renkert <rrenkert@intevation.de>
parents: 141
diff changeset
401 double maxScale = 0;
b2c5a66022f1 Exception handling for number conversions in writer modules.
Raimund Renkert <rrenkert@intevation.de>
parents: 141
diff changeset
402 double minScale = 0;
b2c5a66022f1 Exception handling for number conversions in writer modules.
Raimund Renkert <rrenkert@intevation.de>
parents: 141
diff changeset
403 try {
b2c5a66022f1 Exception handling for number conversions in writer modules.
Raimund Renkert <rrenkert@intevation.de>
parents: 141
diff changeset
404 maxScale =
153
7ed49420ee5a Changed min scale and max scale in writer.
vc11884admin@VC11884.win.bsh.de
parents: 152
diff changeset
405 Double.parseDouble(layerElement.getAttribute("min_scale"));
7ed49420ee5a Changed min scale and max scale in writer.
vc11884admin@VC11884.win.bsh.de
parents: 152
diff changeset
406 minScale =
145
b2c5a66022f1 Exception handling for number conversions in writer modules.
Raimund Renkert <rrenkert@intevation.de>
parents: 141
diff changeset
407 Double.parseDouble(layerElement.getAttribute("max_scale"));
b2c5a66022f1 Exception handling for number conversions in writer modules.
Raimund Renkert <rrenkert@intevation.de>
parents: 141
diff changeset
408 }
b2c5a66022f1 Exception handling for number conversions in writer modules.
Raimund Renkert <rrenkert@intevation.de>
parents: 141
diff changeset
409 catch(NumberFormatException nfe) {
b2c5a66022f1 Exception handling for number conversions in writer modules.
Raimund Renkert <rrenkert@intevation.de>
parents: 141
diff changeset
410 logger.warn("Error setting scale.");
b2c5a66022f1 Exception handling for number conversions in writer modules.
Raimund Renkert <rrenkert@intevation.de>
parents: 141
diff changeset
411 maxScale = 0;
b2c5a66022f1 Exception handling for number conversions in writer modules.
Raimund Renkert <rrenkert@intevation.de>
parents: 141
diff changeset
412 minScale = 0;
b2c5a66022f1 Exception handling for number conversions in writer modules.
Raimund Renkert <rrenkert@intevation.de>
parents: 141
diff changeset
413 }
42
395307e8b7ee First MapScript Writer that generates valid mapfiles.
Raimund Renkert <rrenkert@intevation.de>
parents: 41
diff changeset
414 layer.setMaxscaledenom(maxScale);
395307e8b7ee First MapScript Writer that generates valid mapfiles.
Raimund Renkert <rrenkert@intevation.de>
parents: 41
diff changeset
415 layer.setMinscaledenom(minScale);
395307e8b7ee First MapScript Writer that generates valid mapfiles.
Raimund Renkert <rrenkert@intevation.de>
parents: 41
diff changeset
416
395307e8b7ee First MapScript Writer that generates valid mapfiles.
Raimund Renkert <rrenkert@intevation.de>
parents: 41
diff changeset
417 //The layer type.
395307e8b7ee First MapScript Writer that generates valid mapfiles.
Raimund Renkert <rrenkert@intevation.de>
parents: 41
diff changeset
418 String type = layerElement.getAttribute("type");
395307e8b7ee First MapScript Writer that generates valid mapfiles.
Raimund Renkert <rrenkert@intevation.de>
parents: 41
diff changeset
419 if(type.equals("point")) {
395307e8b7ee First MapScript Writer that generates valid mapfiles.
Raimund Renkert <rrenkert@intevation.de>
parents: 41
diff changeset
420 layer.setType(MS_LAYER_TYPE.MS_LAYER_POINT);
252
eae3fe89e669 Added raster layer support.
raimund renkert <raimund.renkert@intevation.de>
parents: 249
diff changeset
421 layer.setTileitem("");
298
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
422 }
62
e468cf8701ea Prepared the converter to handle and write line symbols.
Raimund Renkert <rrenkert@intevation.de>
parents: 59
diff changeset
423 else if (type.equals("line")) {
e468cf8701ea Prepared the converter to handle and write line symbols.
Raimund Renkert <rrenkert@intevation.de>
parents: 59
diff changeset
424 layer.setType(MS_LAYER_TYPE.MS_LAYER_LINE);
252
eae3fe89e669 Added raster layer support.
raimund renkert <raimund.renkert@intevation.de>
parents: 249
diff changeset
425 layer.setTileitem("");
62
e468cf8701ea Prepared the converter to handle and write line symbols.
Raimund Renkert <rrenkert@intevation.de>
parents: 59
diff changeset
426 }
97
18e4f143896b Added polygon writer.
Raimund Renkert <rrenkert@intevation.de>
parents: 96
diff changeset
427 else if (type.equals("polygon")) {
18e4f143896b Added polygon writer.
Raimund Renkert <rrenkert@intevation.de>
parents: 96
diff changeset
428 layer.setType(MS_LAYER_TYPE.MS_LAYER_POLYGON);
252
eae3fe89e669 Added raster layer support.
raimund renkert <raimund.renkert@intevation.de>
parents: 249
diff changeset
429 layer.setTileitem("");
97
18e4f143896b Added polygon writer.
Raimund Renkert <rrenkert@intevation.de>
parents: 96
diff changeset
430 }
320
9289b7c1b4ce Minor style fix
Andre Heinecke <aheinecke@intevation.de>
parents: 317
diff changeset
431 else if (type.equals("raster")) {
298
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
432 layer.setType(MS_LAYER_TYPE.MS_LAYER_RASTER);
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
433 }
317
5a2b5bc066eb Implement Label Styles and Labels with background
Andre Heinecke <aheinecke@intevation.de>
parents: 315
diff changeset
434 else if (type == "annotation") {
5a2b5bc066eb Implement Label Styles and Labels with background
Andre Heinecke <aheinecke@intevation.de>
parents: 315
diff changeset
435 layer.setType(MS_LAYER_TYPE.MS_LAYER_ANNOTATION);
5a2b5bc066eb Implement Label Styles and Labels with background
Andre Heinecke <aheinecke@intevation.de>
parents: 315
diff changeset
436 }
42
395307e8b7ee First MapScript Writer that generates valid mapfiles.
Raimund Renkert <rrenkert@intevation.de>
parents: 41
diff changeset
437
395307e8b7ee First MapScript Writer that generates valid mapfiles.
Raimund Renkert <rrenkert@intevation.de>
parents: 41
diff changeset
438 //The layer datasource.
137
cd55975ba0c4 Done some minor reformatings.
Raimund Renkert <rrenkert@intevation.de>
parents: 134
diff changeset
439 String con_type = layerElement.getAttribute("connection_type");
134
acc9e5430177 Handle SDE connection attributes and expressions.
vc11884admin@VC11884.win.bsh.de
parents: 132
diff changeset
440 if(con_type.equals("local")) {
304
50031b1ae8e6 No longer ignore Layers without classes
Andre Heinecke <aheinecke@intevation.de>
parents: 300
diff changeset
441 // The data source is a local file. (.shp or Image)
130
5991c1f90f91 Added data source "SDE" to writer.
vc11884admin@VC11884.win.bsh.de
parents: 129
diff changeset
442 String datasource = "";
5991c1f90f91 Added data source "SDE" to writer.
vc11884admin@VC11884.win.bsh.de
parents: 129
diff changeset
443 if(layerElement.hasAttribute("workspace")) {
5991c1f90f91 Added data source "SDE" to writer.
vc11884admin@VC11884.win.bsh.de
parents: 129
diff changeset
444 datasource = layerElement.getAttribute("workspace");
5991c1f90f91 Added data source "SDE" to writer.
vc11884admin@VC11884.win.bsh.de
parents: 129
diff changeset
445 datasource += File.separator;
5991c1f90f91 Added data source "SDE" to writer.
vc11884admin@VC11884.win.bsh.de
parents: 129
diff changeset
446 }
5991c1f90f91 Added data source "SDE" to writer.
vc11884admin@VC11884.win.bsh.de
parents: 129
diff changeset
447 datasource += layerElement.getAttribute("data_source");
180
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
448 datasource = datasource.replaceAll("\\\\", "/");
339
ef1cac2854e3 * src/java/de/intevation/mxd/writer/MapScriptWriter.java:
Andre Heinecke <aheinecke@intevation.de>
parents: 338
diff changeset
449 layer.setData(pathForMapfile(datasource));
137
cd55975ba0c4 Done some minor reformatings.
Raimund Renkert <rrenkert@intevation.de>
parents: 134
diff changeset
450 }
252
eae3fe89e669 Added raster layer support.
raimund renkert <raimund.renkert@intevation.de>
parents: 249
diff changeset
451 else if(con_type.equals("SDE") && !type.equals("raster")) {
181
0bde090506f9 Added comments.
Raimund Renkert <rrenkert@intevation.de>
parents: 180
diff changeset
452 // The data source is a sde database.
137
cd55975ba0c4 Done some minor reformatings.
Raimund Renkert <rrenkert@intevation.de>
parents: 134
diff changeset
453 logger.info(
cd55975ba0c4 Done some minor reformatings.
Raimund Renkert <rrenkert@intevation.de>
parents: 134
diff changeset
454 "SDE datasource found." +
cd55975ba0c4 Done some minor reformatings.
Raimund Renkert <rrenkert@intevation.de>
parents: 134
diff changeset
455 " Please edit password in mapfile.");
cd55975ba0c4 Done some minor reformatings.
Raimund Renkert <rrenkert@intevation.de>
parents: 134
diff changeset
456 layer.setConnectionType(
cd55975ba0c4 Done some minor reformatings.
Raimund Renkert <rrenkert@intevation.de>
parents: 134
diff changeset
457 MS_CONNECTION_TYPE.MS_PLUGIN.swigValue(),
cd55975ba0c4 Done some minor reformatings.
Raimund Renkert <rrenkert@intevation.de>
parents: 134
diff changeset
458 MS_BINDIR + "/ms/plugins/msplugin_sde_93.dll");
298
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
459 String database_auth = layerElement.getAttribute("database");
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
460 if (database_auth.equals("") || database_auth == null) {
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
461 logger.warn("Could not set the database connection user." +
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
462 " Setting to \"sde\" as default.");
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
463 database_auth = "sde";
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
464 }
238
e672f5134d6e Remove all non numeric chars from port string.
raimund renkert <raimund.renkert@intevation.de>
parents: 207
diff changeset
465
298
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
466 String port = layerElement.getAttribute("instance");
238
e672f5134d6e Remove all non numeric chars from port string.
raimund renkert <raimund.renkert@intevation.de>
parents: 207
diff changeset
467 StringBuffer strBuff = new StringBuffer();
e672f5134d6e Remove all non numeric chars from port string.
raimund renkert <raimund.renkert@intevation.de>
parents: 207
diff changeset
468 char c;
298
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
469
238
e672f5134d6e Remove all non numeric chars from port string.
raimund renkert <raimund.renkert@intevation.de>
parents: 207
diff changeset
470 for (int j = 0; j < port.length() ; j++) {
e672f5134d6e Remove all non numeric chars from port string.
raimund renkert <raimund.renkert@intevation.de>
parents: 207
diff changeset
471 c = port.charAt(j);
298
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
472
238
e672f5134d6e Remove all non numeric chars from port string.
raimund renkert <raimund.renkert@intevation.de>
parents: 207
diff changeset
473 if(Character.isDigit(c)) {
e672f5134d6e Remove all non numeric chars from port string.
raimund renkert <raimund.renkert@intevation.de>
parents: 207
diff changeset
474 strBuff.append(c);
e672f5134d6e Remove all non numeric chars from port string.
raimund renkert <raimund.renkert@intevation.de>
parents: 207
diff changeset
475 }
e672f5134d6e Remove all non numeric chars from port string.
raimund renkert <raimund.renkert@intevation.de>
parents: 207
diff changeset
476 }
298
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
477
130
5991c1f90f91 Added data source "SDE" to writer.
vc11884admin@VC11884.win.bsh.de
parents: 129
diff changeset
478 layer.setConnection(
137
cd55975ba0c4 Done some minor reformatings.
Raimund Renkert <rrenkert@intevation.de>
parents: 134
diff changeset
479 layerElement.getAttribute("server") + "," +
238
e672f5134d6e Remove all non numeric chars from port string.
raimund renkert <raimund.renkert@intevation.de>
parents: 207
diff changeset
480 "port:" + strBuff.toString() + "," +
197
cdbf2f2dca35 Check for database connectio user parameter for SDE connections.
raimund renkert <raimund.renkert@intevation.de>
parents: 196
diff changeset
481 database_auth + "," +
137
cd55975ba0c4 Done some minor reformatings.
Raimund Renkert <rrenkert@intevation.de>
parents: 134
diff changeset
482 layerElement.getAttribute("user") + ",<PASSWORD>");
cd55975ba0c4 Done some minor reformatings.
Raimund Renkert <rrenkert@intevation.de>
parents: 134
diff changeset
483 layer.setData(
cd55975ba0c4 Done some minor reformatings.
Raimund Renkert <rrenkert@intevation.de>
parents: 134
diff changeset
484 layerElement.getAttribute("data_source") +
cd55975ba0c4 Done some minor reformatings.
Raimund Renkert <rrenkert@intevation.de>
parents: 134
diff changeset
485 ",SHAPE," +
cd55975ba0c4 Done some minor reformatings.
Raimund Renkert <rrenkert@intevation.de>
parents: 134
diff changeset
486 layerElement.getAttribute("version"));
cd55975ba0c4 Done some minor reformatings.
Raimund Renkert <rrenkert@intevation.de>
parents: 134
diff changeset
487 layer.setProcessing("CLOSE_CONNECTION=defer");
134
acc9e5430177 Handle SDE connection attributes and expressions.
vc11884admin@VC11884.win.bsh.de
parents: 132
diff changeset
488 layer.setProcessing("ATTRIBUTE_QUALIFIED=TRUE");
137
cd55975ba0c4 Done some minor reformatings.
Raimund Renkert <rrenkert@intevation.de>
parents: 134
diff changeset
489 if(layerElement.hasAttribute("join_table")) {
298
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
490 logger.info(
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
491 "The layer " +
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
492 layer.getName() +
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
493 " contains a jointable attribute." +
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
494 " Please verify the attribute parameters.");
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
495 String join = layerElement.getAttribute("join_table");
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
496
134
acc9e5430177 Handle SDE connection attributes and expressions.
vc11884admin@VC11884.win.bsh.de
parents: 132
diff changeset
497 layer.setProcessing(
137
cd55975ba0c4 Done some minor reformatings.
Raimund Renkert <rrenkert@intevation.de>
parents: 134
diff changeset
498 "JOINTABLE=" +
cd55975ba0c4 Done some minor reformatings.
Raimund Renkert <rrenkert@intevation.de>
parents: 134
diff changeset
499 layerElement.getAttribute("join_table"));
134
acc9e5430177 Handle SDE connection attributes and expressions.
vc11884admin@VC11884.win.bsh.de
parents: 132
diff changeset
500 layer.setFilter(
acc9e5430177 Handle SDE connection attributes and expressions.
vc11884admin@VC11884.win.bsh.de
parents: 132
diff changeset
501 "where " +
acc9e5430177 Handle SDE connection attributes and expressions.
vc11884admin@VC11884.win.bsh.de
parents: 132
diff changeset
502 layerElement.getAttribute("definition_query") +
acc9e5430177 Handle SDE connection attributes and expressions.
vc11884admin@VC11884.win.bsh.de
parents: 132
diff changeset
503 " AND " +
acc9e5430177 Handle SDE connection attributes and expressions.
vc11884admin@VC11884.win.bsh.de
parents: 132
diff changeset
504 layerElement.getAttribute("join_table_target") + "." +
acc9e5430177 Handle SDE connection attributes and expressions.
vc11884admin@VC11884.win.bsh.de
parents: 132
diff changeset
505 layerElement.getAttribute("join_field_target") + "=" +
acc9e5430177 Handle SDE connection attributes and expressions.
vc11884admin@VC11884.win.bsh.de
parents: 132
diff changeset
506 layerElement.getAttribute("join_table") + "." +
acc9e5430177 Handle SDE connection attributes and expressions.
vc11884admin@VC11884.win.bsh.de
parents: 132
diff changeset
507 layerElement.getAttribute("join_field"));
137
cd55975ba0c4 Done some minor reformatings.
Raimund Renkert <rrenkert@intevation.de>
parents: 134
diff changeset
508 }
cd55975ba0c4 Done some minor reformatings.
Raimund Renkert <rrenkert@intevation.de>
parents: 134
diff changeset
509 else {
cd55975ba0c4 Done some minor reformatings.
Raimund Renkert <rrenkert@intevation.de>
parents: 134
diff changeset
510 prefix = layerElement.getAttribute("data_source");
314
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
511 if (!prefix.isEmpty()) {
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
512 prefix += ".";
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
513 }
180
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
514 if(layerElement.hasAttribute("definition_query") &&
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
515 !layerElement.getAttribute("definition_query")
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
516 .equals("")) {
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
517 layer.setFilter("where " +
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
518 layerElement.getAttribute("definition_query"));
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
519 }
137
cd55975ba0c4 Done some minor reformatings.
Raimund Renkert <rrenkert@intevation.de>
parents: 134
diff changeset
520 }
cd55975ba0c4 Done some minor reformatings.
Raimund Renkert <rrenkert@intevation.de>
parents: 134
diff changeset
521 }
298
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
522 else if(con_type.equals("SDE") && type.equals("raster")) {
252
eae3fe89e669 Added raster layer support.
raimund renkert <raimund.renkert@intevation.de>
parents: 249
diff changeset
523 // The data source is a sde database.
eae3fe89e669 Added raster layer support.
raimund renkert <raimund.renkert@intevation.de>
parents: 249
diff changeset
524 logger.info(
eae3fe89e669 Added raster layer support.
raimund renkert <raimund.renkert@intevation.de>
parents: 249
diff changeset
525 "SDE datasource found." +
eae3fe89e669 Added raster layer support.
raimund renkert <raimund.renkert@intevation.de>
parents: 249
diff changeset
526 " Please edit password in mapfile.");
298
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
527 String database_auth = layerElement.getAttribute("database");
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
528 if (database_auth.equals("") || database_auth == null) {
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
529 logger.warn("Could not set the database connection user." +
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
530 " Setting to \"sde\" as default.");
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
531 database_auth = "sde";
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
532 }
252
eae3fe89e669 Added raster layer support.
raimund renkert <raimund.renkert@intevation.de>
parents: 249
diff changeset
533
298
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
534 String port = layerElement.getAttribute("instance");
252
eae3fe89e669 Added raster layer support.
raimund renkert <raimund.renkert@intevation.de>
parents: 249
diff changeset
535 StringBuffer strBuff = new StringBuffer();
eae3fe89e669 Added raster layer support.
raimund renkert <raimund.renkert@intevation.de>
parents: 249
diff changeset
536 char c;
298
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
537
252
eae3fe89e669 Added raster layer support.
raimund renkert <raimund.renkert@intevation.de>
parents: 249
diff changeset
538 for (int j = 0; j < port.length() ; j++) {
eae3fe89e669 Added raster layer support.
raimund renkert <raimund.renkert@intevation.de>
parents: 249
diff changeset
539 c = port.charAt(j);
eae3fe89e669 Added raster layer support.
raimund renkert <raimund.renkert@intevation.de>
parents: 249
diff changeset
540 if(Character.isDigit(c)) {
eae3fe89e669 Added raster layer support.
raimund renkert <raimund.renkert@intevation.de>
parents: 249
diff changeset
541 strBuff.append(c);
eae3fe89e669 Added raster layer support.
raimund renkert <raimund.renkert@intevation.de>
parents: 249
diff changeset
542 }
eae3fe89e669 Added raster layer support.
raimund renkert <raimund.renkert@intevation.de>
parents: 249
diff changeset
543 }
298
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
544
252
eae3fe89e669 Added raster layer support.
raimund renkert <raimund.renkert@intevation.de>
parents: 249
diff changeset
545 layer.setData(
eae3fe89e669 Added raster layer support.
raimund renkert <raimund.renkert@intevation.de>
parents: 249
diff changeset
546 "SDE:" + layerElement.getAttribute("server") +
eae3fe89e669 Added raster layer support.
raimund renkert <raimund.renkert@intevation.de>
parents: 249
diff changeset
547 "," + strBuff +
298
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
548 "," + layerElement.getAttribute("database") +
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
549 "," + layerElement.getAttribute("user") +
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
550 ",<PASSWORD>," + layerElement.getAttribute("dataset"));
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
551 layer.setType(MS_LAYER_TYPE.MS_LAYER_RASTER);
252
eae3fe89e669 Added raster layer support.
raimund renkert <raimund.renkert@intevation.de>
parents: 249
diff changeset
552 if(layerElement.hasAttribute("definition_query") &&
eae3fe89e669 Added raster layer support.
raimund renkert <raimund.renkert@intevation.de>
parents: 249
diff changeset
553 !layerElement.getAttribute("definition_query").equals("")) {
eae3fe89e669 Added raster layer support.
raimund renkert <raimund.renkert@intevation.de>
parents: 249
diff changeset
554 layer.setFilter("where " +
eae3fe89e669 Added raster layer support.
raimund renkert <raimund.renkert@intevation.de>
parents: 249
diff changeset
555 layerElement.getAttribute("definition_query"));
eae3fe89e669 Added raster layer support.
raimund renkert <raimund.renkert@intevation.de>
parents: 249
diff changeset
556 }
300
215ae6199b95 Add WMS Support to the writer
Andre Heinecke <aheinecke@intevation.de>
parents: 299
diff changeset
557 } else if(con_type.equals("WMS")) {
215ae6199b95 Add WMS Support to the writer
Andre Heinecke <aheinecke@intevation.de>
parents: 299
diff changeset
558 layer.setType(MS_LAYER_TYPE.MS_LAYER_RASTER);
215ae6199b95 Add WMS Support to the writer
Andre Heinecke <aheinecke@intevation.de>
parents: 299
diff changeset
559 layer.setConnection(layerElement.getAttribute("connection"));
215ae6199b95 Add WMS Support to the writer
Andre Heinecke <aheinecke@intevation.de>
parents: 299
diff changeset
560 layer.setConnectionType(MS_CONNECTION_TYPE.MS_WMS.swigValue(), "");
215ae6199b95 Add WMS Support to the writer
Andre Heinecke <aheinecke@intevation.de>
parents: 299
diff changeset
561 layer.setMetaData("wms_name",
215ae6199b95 Add WMS Support to the writer
Andre Heinecke <aheinecke@intevation.de>
parents: 299
diff changeset
562 layerElement.getAttribute("wms_name"));
311
c8b8f887ef80 Add write support for Fgdb layers and make it possible
Andre Heinecke <aheinecke@intevation.de>
parents: 308
diff changeset
563 } else if(con_type.equals("ogr")) {
c8b8f887ef80 Add write support for Fgdb layers and make it possible
Andre Heinecke <aheinecke@intevation.de>
parents: 308
diff changeset
564 layer.setConnectionType(MS_CONNECTION_TYPE.MS_OGR.swigValue(), "");
c8b8f887ef80 Add write support for Fgdb layers and make it possible
Andre Heinecke <aheinecke@intevation.de>
parents: 308
diff changeset
565 layer.setConnection(layerElement.getAttribute("connection"));
c8b8f887ef80 Add write support for Fgdb layers and make it possible
Andre Heinecke <aheinecke@intevation.de>
parents: 308
diff changeset
566 layer.setData(layerElement.getAttribute("data_source"));
298
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
567 }
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
568 if(!type.equals("raster")) {
252
eae3fe89e669 Added raster layer support.
raimund renkert <raimund.renkert@intevation.de>
parents: 249
diff changeset
569 layer.setTemplate("PleaseInsertAValidTemplateForGFI");
298
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
570 }
179
f3a91cd7440b Added a first version of feature labeling.
raimund renkert <raimund.renkert@intevation.de>
parents: 175
diff changeset
571
308
1c949a309940 Wirte offsite values for raster layers
Andre Heinecke <aheinecke@intevation.de>
parents: 307
diff changeset
572 // Set Offsite value for raster layer
1c949a309940 Wirte offsite values for raster layers
Andre Heinecke <aheinecke@intevation.de>
parents: 307
diff changeset
573 if(type == "raster") {
1c949a309940 Wirte offsite values for raster layers
Andre Heinecke <aheinecke@intevation.de>
parents: 307
diff changeset
574 layer.setOffsite(new colorObj(255,255,255,-4));
1c949a309940 Wirte offsite values for raster layers
Andre Heinecke <aheinecke@intevation.de>
parents: 307
diff changeset
575 }
1c949a309940 Wirte offsite values for raster layers
Andre Heinecke <aheinecke@intevation.de>
parents: 307
diff changeset
576
338
b3048df06b66 * src/java/de/intevation/mxd/writer/MapScriptWriter.java:
Andre Heinecke <aheinecke@intevation.de>
parents: 335
diff changeset
577 if (mapNode.hasAttribute("referencescale")) {
b3048df06b66 * src/java/de/intevation/mxd/writer/MapScriptWriter.java:
Andre Heinecke <aheinecke@intevation.de>
parents: 335
diff changeset
578 layer.setSymbolscaledenom(Double.parseDouble(
b3048df06b66 * src/java/de/intevation/mxd/writer/MapScriptWriter.java:
Andre Heinecke <aheinecke@intevation.de>
parents: 335
diff changeset
579 mapNode.getAttribute("referencescale")));
b3048df06b66 * src/java/de/intevation/mxd/writer/MapScriptWriter.java:
Andre Heinecke <aheinecke@intevation.de>
parents: 335
diff changeset
580 }
b3048df06b66 * src/java/de/intevation/mxd/writer/MapScriptWriter.java:
Andre Heinecke <aheinecke@intevation.de>
parents: 335
diff changeset
581
321
b6c0fbae16dc Expand Graphics Layer Support
Andre Heinecke <aheinecke@intevation.de>
parents: 320
diff changeset
582 // Set scaling properties for layer and add Processing
317
5a2b5bc066eb Implement Label Styles and Labels with background
Andre Heinecke <aheinecke@intevation.de>
parents: 315
diff changeset
583 if(type == "annotation") {
321
b6c0fbae16dc Expand Graphics Layer Support
Andre Heinecke <aheinecke@intevation.de>
parents: 320
diff changeset
584 layer.addProcessing("ITEMS=classId");
b6c0fbae16dc Expand Graphics Layer Support
Andre Heinecke <aheinecke@intevation.de>
parents: 320
diff changeset
585 layer.setClassitem("classId");
317
5a2b5bc066eb Implement Label Styles and Labels with background
Andre Heinecke <aheinecke@intevation.de>
parents: 315
diff changeset
586 }
5a2b5bc066eb Implement Label Styles and Labels with background
Andre Heinecke <aheinecke@intevation.de>
parents: 315
diff changeset
587
181
0bde090506f9 Added comments.
Raimund Renkert <rrenkert@intevation.de>
parents: 180
diff changeset
588 // Create labelitem
180
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
589 NodeList labels = layerElement.getElementsByTagName("label");
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
590 if(labels.getLength() > 0) {
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
591 Element label = (Element)labels.item(0);
179
f3a91cd7440b Added a first version of feature labeling.
raimund renkert <raimund.renkert@intevation.de>
parents: 175
diff changeset
592 String expr = label.getAttribute("expression");
180
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
593 expr = expr.replaceAll("\\[", "");
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
594 expr = expr.replaceAll("\\]", "");
311
c8b8f887ef80 Add write support for Fgdb layers and make it possible
Andre Heinecke <aheinecke@intevation.de>
parents: 308
diff changeset
595 if (con_type == "ogr") {
c8b8f887ef80 Add write support for Fgdb layers and make it possible
Andre Heinecke <aheinecke@intevation.de>
parents: 308
diff changeset
596 // ogr expression fields come prefixed from arcgis
c8b8f887ef80 Add write support for Fgdb layers and make it possible
Andre Heinecke <aheinecke@intevation.de>
parents: 308
diff changeset
597 // the prefix has to be removed in order to work with
c8b8f887ef80 Add write support for Fgdb layers and make it possible
Andre Heinecke <aheinecke@intevation.de>
parents: 308
diff changeset
598 // mapserver
c8b8f887ef80 Add write support for Fgdb layers and make it possible
Andre Heinecke <aheinecke@intevation.de>
parents: 308
diff changeset
599 String unwantedPrefix = layerElement.getAttribute("data") + ".";
c8b8f887ef80 Add write support for Fgdb layers and make it possible
Andre Heinecke <aheinecke@intevation.de>
parents: 308
diff changeset
600 logger.debug("Removing expression Prefix: " + unwantedPrefix);
314
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
601 boolean isShapeFile = false;
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
602 if (layerElement.getAttribute("connection_type") == "local") {
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
603 isShapeFile = true;
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
604 }
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
605 expr = sanitizeAttribute(expr,
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
606 unwantedPrefix, prefix, isShapeFile);
311
c8b8f887ef80 Add write support for Fgdb layers and make it possible
Andre Heinecke <aheinecke@intevation.de>
parents: 308
diff changeset
607 }
180
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
608 if(!prefix.equals("")) {
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
609 expr = prefix + "." + expr;
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
610 }
199
c56547b228f9 Remove leading and trailing whitespaces from labelitem.
raimund renkert <raimund.renkert@intevation.de>
parents: 197
diff changeset
611 layer.setLabelitem(expr.trim());
180
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
612 }
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
613
315
1d77ea6a915d Add basic support for Graphics Layers. For now this is restricted
Andre Heinecke <aheinecke@intevation.de>
parents: 314
diff changeset
614 //Write elements.
1d77ea6a915d Add basic support for Graphics Layers. For now this is restricted
Andre Heinecke <aheinecke@intevation.de>
parents: 314
diff changeset
615 writeFeatures(layer, layerElement);
1d77ea6a915d Add basic support for Graphics Layers. For now this is restricted
Andre Heinecke <aheinecke@intevation.de>
parents: 314
diff changeset
616
42
395307e8b7ee First MapScript Writer that generates valid mapfiles.
Raimund Renkert <rrenkert@intevation.de>
parents: 41
diff changeset
617 //Write classes.
395307e8b7ee First MapScript Writer that generates valid mapfiles.
Raimund Renkert <rrenkert@intevation.de>
parents: 41
diff changeset
618 writeClass(layer, layerElement);
395307e8b7ee First MapScript Writer that generates valid mapfiles.
Raimund Renkert <rrenkert@intevation.de>
parents: 41
diff changeset
619 }
298
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
620 return true;
41
60ed2164035a Introduced MapScript writer.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
621 }
60ed2164035a Introduced MapScript writer.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
622
42
395307e8b7ee First MapScript Writer that generates valid mapfiles.
Raimund Renkert <rrenkert@intevation.de>
parents: 41
diff changeset
623 /**
314
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
624 * Adds the elements (Features) to the layer.
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
625 * @param layer Mapscript layer object.
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
626 * @param layerElement Dom element containing the feature attributes.
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
627 */
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
628 private void writeFeatures(layerObj layer, Element layerElement) {
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
629 NodeList list = layerElement.getElementsByTagName("feature");
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
630 for(int i = 0; i < list.getLength(); i++) {
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
631 logger.debug("Writing an element");
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
632 Element feature = (Element)list.item(i);
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
633 pointObj poi = new pointObj(
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
634 Double.parseDouble(feature.getAttribute("X")),
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
635 Double.parseDouble(feature.getAttribute("Y")),
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
636 0.0, -2e38);
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
637 lineObj line = new lineObj();
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
638 line.add(poi);
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
639 logger.debug("Set the line");
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
640
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
641 shapeObj shape = new shapeObj(MS_SHAPE_TYPE.MS_SHAPE_POINT.swigValue());
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
642 shape.add(line);
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
643 shape.setText(feature.getAttribute("text"));
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
644
321
b6c0fbae16dc Expand Graphics Layer Support
Andre Heinecke <aheinecke@intevation.de>
parents: 320
diff changeset
645 shape.initValues(1);
b6c0fbae16dc Expand Graphics Layer Support
Andre Heinecke <aheinecke@intevation.de>
parents: 320
diff changeset
646 shape.setValue(0, feature.getAttribute("classId"));
b6c0fbae16dc Expand Graphics Layer Support
Andre Heinecke <aheinecke@intevation.de>
parents: 320
diff changeset
647
b6c0fbae16dc Expand Graphics Layer Support
Andre Heinecke <aheinecke@intevation.de>
parents: 320
diff changeset
648 // Write the Style / Symbol for each element as a single class
b6c0fbae16dc Expand Graphics Layer Support
Andre Heinecke <aheinecke@intevation.de>
parents: 320
diff changeset
649 // TODO build a hash of the style/symbol and check if classes can be
b6c0fbae16dc Expand Graphics Layer Support
Andre Heinecke <aheinecke@intevation.de>
parents: 320
diff changeset
650 // grouped
b6c0fbae16dc Expand Graphics Layer Support
Andre Heinecke <aheinecke@intevation.de>
parents: 320
diff changeset
651
b6c0fbae16dc Expand Graphics Layer Support
Andre Heinecke <aheinecke@intevation.de>
parents: 320
diff changeset
652 classObj co = new classObj(layer);
b6c0fbae16dc Expand Graphics Layer Support
Andre Heinecke <aheinecke@intevation.de>
parents: 320
diff changeset
653 writeLabel(co, feature, layerElement.getAttribute("type"));
b6c0fbae16dc Expand Graphics Layer Support
Andre Heinecke <aheinecke@intevation.de>
parents: 320
diff changeset
654 co.setExpression("\"" + feature.getAttribute("classId") + "\"");
b6c0fbae16dc Expand Graphics Layer Support
Andre Heinecke <aheinecke@intevation.de>
parents: 320
diff changeset
655 LabelStyleWriter swriter = new LabelStyleWriter (this.map, co);
b6c0fbae16dc Expand Graphics Layer Support
Andre Heinecke <aheinecke@intevation.de>
parents: 320
diff changeset
656 swriter.write((Element)feature.getFirstChild());
314
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
657 layer.addFeature(shape);
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
658 }
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
659 }
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
660
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
661 /**
42
395307e8b7ee First MapScript Writer that generates valid mapfiles.
Raimund Renkert <rrenkert@intevation.de>
parents: 41
diff changeset
662 * Adds the classes to the layer.
395307e8b7ee First MapScript Writer that generates valid mapfiles.
Raimund Renkert <rrenkert@intevation.de>
parents: 41
diff changeset
663 * @param layer Mapscript layer object.
395307e8b7ee First MapScript Writer that generates valid mapfiles.
Raimund Renkert <rrenkert@intevation.de>
parents: 41
diff changeset
664 * @param layerElement Dom element containing the class attributes.
395307e8b7ee First MapScript Writer that generates valid mapfiles.
Raimund Renkert <rrenkert@intevation.de>
parents: 41
diff changeset
665 */
120
11d63bf00326 Changed exception handling and logging in writer classes.
Raimund Renkert <rrenkert@intevation.de>
parents: 102
diff changeset
666 private void writeClass(layerObj layer, Element layerElement) {
87
7d4cf2db43f1 Added new writer classes to be flexible in creating mapfiles.
Raimund Renkert <rrenkert@intevation.de>
parents: 62
diff changeset
667 logger.debug("writeClass(layerObj, Element)");
42
395307e8b7ee First MapScript Writer that generates valid mapfiles.
Raimund Renkert <rrenkert@intevation.de>
parents: 41
diff changeset
668 //Get all renderer elements (renderer in arcgis equals class in the
395307e8b7ee First MapScript Writer that generates valid mapfiles.
Raimund Renkert <rrenkert@intevation.de>
parents: 41
diff changeset
669 //mapfile.)
395307e8b7ee First MapScript Writer that generates valid mapfiles.
Raimund Renkert <rrenkert@intevation.de>
parents: 41
diff changeset
670 NodeList list = layerElement.getElementsByTagName("renderer");
41
60ed2164035a Introduced MapScript writer.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
671
42
395307e8b7ee First MapScript Writer that generates valid mapfiles.
Raimund Renkert <rrenkert@intevation.de>
parents: 41
diff changeset
672 //Create all found class objects and write the symbols and styles for
395307e8b7ee First MapScript Writer that generates valid mapfiles.
Raimund Renkert <rrenkert@intevation.de>
parents: 41
diff changeset
673 //each class.
395307e8b7ee First MapScript Writer that generates valid mapfiles.
Raimund Renkert <rrenkert@intevation.de>
parents: 41
diff changeset
674 for(int i = 0; i < list.getLength(); i++) {
395307e8b7ee First MapScript Writer that generates valid mapfiles.
Raimund Renkert <rrenkert@intevation.de>
parents: 41
diff changeset
675 Element classElement = (Element)list.item(i);
395307e8b7ee First MapScript Writer that generates valid mapfiles.
Raimund Renkert <rrenkert@intevation.de>
parents: 41
diff changeset
676 classObj co = new classObj(layer);
124
0f5819732288 Set label text as class name in mapfile.
Raimund Renkert <rrenkert@intevation.de>
parents: 120
diff changeset
677 String name = classElement.getAttribute("label");
298
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
678 name = msutils.replaceUmlauts(name);
99
d6d2a4058ebf Set the class name to the layer name if it is empty.
Raimund Renkert <rrenkert@intevation.de>
parents: 98
diff changeset
679 if (name.equals("")) {
d6d2a4058ebf Set the class name to the layer name if it is empty.
Raimund Renkert <rrenkert@intevation.de>
parents: 98
diff changeset
680 name = layerElement.getAttribute("name");
298
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
681 name = msutils.replaceUmlauts(name);
99
d6d2a4058ebf Set the class name to the layer name if it is empty.
Raimund Renkert <rrenkert@intevation.de>
parents: 98
diff changeset
682 if (list.getLength() > 1) {
d6d2a4058ebf Set the class name to the layer name if it is empty.
Raimund Renkert <rrenkert@intevation.de>
parents: 98
diff changeset
683 name += "-" + i;
d6d2a4058ebf Set the class name to the layer name if it is empty.
Raimund Renkert <rrenkert@intevation.de>
parents: 98
diff changeset
684 }
d6d2a4058ebf Set the class name to the layer name if it is empty.
Raimund Renkert <rrenkert@intevation.de>
parents: 98
diff changeset
685 }
d6d2a4058ebf Set the class name to the layer name if it is empty.
Raimund Renkert <rrenkert@intevation.de>
parents: 98
diff changeset
686 co.setName (name);
179
f3a91cd7440b Added a first version of feature labeling.
raimund renkert <raimund.renkert@intevation.de>
parents: 175
diff changeset
687
181
0bde090506f9 Added comments.
Raimund Renkert <rrenkert@intevation.de>
parents: 180
diff changeset
688 //Create label object.
180
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
689 NodeList labels = layerElement.getElementsByTagName("label");
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
690 if(labels.getLength() > 0) {
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
691 Element labelElement = (Element)labels.item(0);
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
692 String layerType = layerElement.getAttribute("type");
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
693 writeLabel(co, labelElement, layerType);
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
694 }
181
0bde090506f9 Added comments.
Raimund Renkert <rrenkert@intevation.de>
parents: 180
diff changeset
695
0bde090506f9 Added comments.
Raimund Renkert <rrenkert@intevation.de>
parents: 180
diff changeset
696 //Create definition expression.
44
9b5fb5e5914d Added expressions for mapserver classes.
Raimund Renkert <rrenkert@intevation.de>
parents: 43
diff changeset
697 if(classElement.hasAttribute("field_count")) {
311
c8b8f887ef80 Add write support for Fgdb layers and make it possible
Andre Heinecke <aheinecke@intevation.de>
parents: 308
diff changeset
698 String unwantedPrefix = layerElement.getAttribute("data") + ".";
314
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
699 boolean isShapeFile = false;
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
700 if (layerElement.getAttribute("connection_type") == "local") {
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
701 isShapeFile = true;
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
702 }
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
703 co.setExpression(createExpression(classElement, i, unwantedPrefix, isShapeFile));
44
9b5fb5e5914d Added expressions for mapserver classes.
Raimund Renkert <rrenkert@intevation.de>
parents: 43
diff changeset
704 }
181
0bde090506f9 Added comments.
Raimund Renkert <rrenkert@intevation.de>
parents: 180
diff changeset
705
42
395307e8b7ee First MapScript Writer that generates valid mapfiles.
Raimund Renkert <rrenkert@intevation.de>
parents: 41
diff changeset
706 //Write symbols and styles.
97
18e4f143896b Added polygon writer.
Raimund Renkert <rrenkert@intevation.de>
parents: 96
diff changeset
707 NodeList l = classElement.getChildNodes();
141
8f30f7e802d6 Manage symbol names and symbol comparison.
vc11884admin@VC11884.win.bsh.de
parents: 137
diff changeset
708 for (int j = l.getLength() - 1; j >= 0; j--) {
97
18e4f143896b Added polygon writer.
Raimund Renkert <rrenkert@intevation.de>
parents: 96
diff changeset
709 Element elem = (Element)l.item(j);
18e4f143896b Added polygon writer.
Raimund Renkert <rrenkert@intevation.de>
parents: 96
diff changeset
710
18e4f143896b Added polygon writer.
Raimund Renkert <rrenkert@intevation.de>
parents: 96
diff changeset
711 String type = layerElement.getAttribute("type");
180
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
712 if(type.equals("point") &&
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
713 elem.getTagName().equals("symbol")) {
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
714 MarkerStyleWriter swriter =
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
715 new MarkerStyleWriter (this.map, co);
97
18e4f143896b Added polygon writer.
Raimund Renkert <rrenkert@intevation.de>
parents: 96
diff changeset
716 swriter.write (elem);
87
7d4cf2db43f1 Added new writer classes to be flexible in creating mapfiles.
Raimund Renkert <rrenkert@intevation.de>
parents: 62
diff changeset
717 }
180
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
718 else if(type.equals("line") &&
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
719 elem.getTagName().equals("symbol")) {
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
720 LineStyleWriter swriter =
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
721 new LineStyleWriter (this.map, co);
97
18e4f143896b Added polygon writer.
Raimund Renkert <rrenkert@intevation.de>
parents: 96
diff changeset
722 swriter.write (elem);
18e4f143896b Added polygon writer.
Raimund Renkert <rrenkert@intevation.de>
parents: 96
diff changeset
723 }
180
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
724 else if(type.equals("polygon") &&
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
725 elem.getTagName().equals("symbol")) {
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
726 FillStyleWriter swriter =
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
727 new FillStyleWriter (this.map, co);
97
18e4f143896b Added polygon writer.
Raimund Renkert <rrenkert@intevation.de>
parents: 96
diff changeset
728 swriter.write (elem);
87
7d4cf2db43f1 Added new writer classes to be flexible in creating mapfiles.
Raimund Renkert <rrenkert@intevation.de>
parents: 62
diff changeset
729 }
7d4cf2db43f1 Added new writer classes to be flexible in creating mapfiles.
Raimund Renkert <rrenkert@intevation.de>
parents: 62
diff changeset
730 }
42
395307e8b7ee First MapScript Writer that generates valid mapfiles.
Raimund Renkert <rrenkert@intevation.de>
parents: 41
diff changeset
731 }
41
60ed2164035a Introduced MapScript writer.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
732 }
126
ff0354265a7d Write the correct expression for double values.
Raimund Renkert <rrenkert@intevation.de>
parents: 124
diff changeset
733
181
0bde090506f9 Added comments.
Raimund Renkert <rrenkert@intevation.de>
parents: 180
diff changeset
734 /**
0bde090506f9 Added comments.
Raimund Renkert <rrenkert@intevation.de>
parents: 180
diff changeset
735 * Create a label object in a class object.
0bde090506f9 Added comments.
Raimund Renkert <rrenkert@intevation.de>
parents: 180
diff changeset
736 *
0bde090506f9 Added comments.
Raimund Renkert <rrenkert@intevation.de>
parents: 180
diff changeset
737 * @param co Class object.
0bde090506f9 Added comments.
Raimund Renkert <rrenkert@intevation.de>
parents: 180
diff changeset
738 * @param labelElement DOM element containing label attributes.
0bde090506f9 Added comments.
Raimund Renkert <rrenkert@intevation.de>
parents: 180
diff changeset
739 * @param layertype The layer type. Used to define the label position.
0bde090506f9 Added comments.
Raimund Renkert <rrenkert@intevation.de>
parents: 180
diff changeset
740 */
179
f3a91cd7440b Added a first version of feature labeling.
raimund renkert <raimund.renkert@intevation.de>
parents: 175
diff changeset
741 private void writeLabel(
180
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
742 classObj co,
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
743 Element labelElement,
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
744 String layerType) {
179
f3a91cd7440b Added a first version of feature labeling.
raimund renkert <raimund.renkert@intevation.de>
parents: 175
diff changeset
745
181
0bde090506f9 Added comments.
Raimund Renkert <rrenkert@intevation.de>
parents: 180
diff changeset
746 //Get the label object. Each class has a predefined labelobject.
335
4cf94b919725 * src/java/de/intevation/mxd/writer/MapScriptWriter.java:
Andre Heinecke <aheinecke@intevation.de>
parents: 332
diff changeset
747 labelObj label = new labelObj();
4cf94b919725 * src/java/de/intevation/mxd/writer/MapScriptWriter.java:
Andre Heinecke <aheinecke@intevation.de>
parents: 332
diff changeset
748 co.addLabel(label);
181
0bde090506f9 Added comments.
Raimund Renkert <rrenkert@intevation.de>
parents: 180
diff changeset
749
0bde090506f9 Added comments.
Raimund Renkert <rrenkert@intevation.de>
parents: 180
diff changeset
750 //Get the label text symbol attributes from DOM.
180
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
751 Element symbol = (Element)labelElement.getFirstChild();
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
752 if(symbol != null && symbol.getTagName().equals("symbol")) {
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
753 String type = symbol.getAttribute("type");
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
754 if(type.equals("text")) {
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
755 label.setType(MS_FONT_TYPE.MS_TRUETYPE);
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
756 }
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
757 label.setSize(Double.parseDouble(symbol.getAttribute("size")));
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
758
179
f3a91cd7440b Added a first version of feature labeling.
raimund renkert <raimund.renkert@intevation.de>
parents: 175
diff changeset
759 if(symbol.hasAttribute("color")) {
f3a91cd7440b Added a first version of feature labeling.
raimund renkert <raimund.renkert@intevation.de>
parents: 175
diff changeset
760 String c = symbol.getAttribute("color");
f3a91cd7440b Added a first version of feature labeling.
raimund renkert <raimund.renkert@intevation.de>
parents: 175
diff changeset
761 Color col = Color.decode(c);
f3a91cd7440b Added a first version of feature labeling.
raimund renkert <raimund.renkert@intevation.de>
parents: 175
diff changeset
762 colorObj color = new colorObj(
f3a91cd7440b Added a first version of feature labeling.
raimund renkert <raimund.renkert@intevation.de>
parents: 175
diff changeset
763 col.getRed(),
f3a91cd7440b Added a first version of feature labeling.
raimund renkert <raimund.renkert@intevation.de>
parents: 175
diff changeset
764 col.getGreen(),
f3a91cd7440b Added a first version of feature labeling.
raimund renkert <raimund.renkert@intevation.de>
parents: 175
diff changeset
765 col.getBlue(),
f3a91cd7440b Added a first version of feature labeling.
raimund renkert <raimund.renkert@intevation.de>
parents: 175
diff changeset
766 -4);
f3a91cd7440b Added a first version of feature labeling.
raimund renkert <raimund.renkert@intevation.de>
parents: 175
diff changeset
767 label.setColor(color);
180
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
768 }
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
769 if(symbol.hasAttribute("font")) {
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
770 String font = symbol.getAttribute("font");
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
771 fontSetObj fso = this.map.getFontset();
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
772 hashTableObj fonts = fso.getFonts();
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
773 String mapFont = fonts.get(font,"");
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
774 if(mapFont != null && !mapFont.equals("")) {
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
775 label.setFont(font);
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
776 }
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
777 else {
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
778 logger.info(
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
779 "Could not find font " + font + " in font set. " +
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
780 "Using FreeSans for labels.");
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
781 label.setFont("FreeSans");
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
782 }
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
783 }
179
f3a91cd7440b Added a first version of feature labeling.
raimund renkert <raimund.renkert@intevation.de>
parents: 175
diff changeset
784
f3a91cd7440b Added a first version of feature labeling.
raimund renkert <raimund.renkert@intevation.de>
parents: 175
diff changeset
785 if(labelElement.hasAttribute("max_scale")) {
180
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
786 double min =
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
787 Double.parseDouble(labelElement.getAttribute("max_scale"));
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
788 if(min > 0) {
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
789 label.setMinscaledenom(min);
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
790 }
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
791 }
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
792 if(labelElement.hasAttribute("min_scale")) {
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
793 double max =
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
794 Double.parseDouble(labelElement.getAttribute("min_scale"));
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
795 if(max > 0) {
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
796 label.setMaxscaledenom(max);
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
797 }
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
798 }
179
f3a91cd7440b Added a first version of feature labeling.
raimund renkert <raimund.renkert@intevation.de>
parents: 175
diff changeset
799
181
0bde090506f9 Added comments.
Raimund Renkert <rrenkert@intevation.de>
parents: 180
diff changeset
800 //Set the label position.
180
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
801 if(layerType.equals("point")) {
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
802 label.setPosition(MS_POSITIONS_ENUM.MS_UC.swigValue());
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
803 }
317
5a2b5bc066eb Implement Label Styles and Labels with background
Andre Heinecke <aheinecke@intevation.de>
parents: 315
diff changeset
804
5a2b5bc066eb Implement Label Styles and Labels with background
Andre Heinecke <aheinecke@intevation.de>
parents: 315
diff changeset
805 //Set annotation specific values
5a2b5bc066eb Implement Label Styles and Labels with background
Andre Heinecke <aheinecke@intevation.de>
parents: 315
diff changeset
806 if (layerType == "annotation") {
5a2b5bc066eb Implement Label Styles and Labels with background
Andre Heinecke <aheinecke@intevation.de>
parents: 315
diff changeset
807 label.setPosition(MS_POSITIONS_ENUM.MS_CC.swigValue());
5a2b5bc066eb Implement Label Styles and Labels with background
Andre Heinecke <aheinecke@intevation.de>
parents: 315
diff changeset
808 label.setOffsetx(2);
5a2b5bc066eb Implement Label Styles and Labels with background
Andre Heinecke <aheinecke@intevation.de>
parents: 315
diff changeset
809 label.setOffsety(-2);
5a2b5bc066eb Implement Label Styles and Labels with background
Andre Heinecke <aheinecke@intevation.de>
parents: 315
diff changeset
810 }
5a2b5bc066eb Implement Label Styles and Labels with background
Andre Heinecke <aheinecke@intevation.de>
parents: 315
diff changeset
811
180
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
812 }
179
f3a91cd7440b Added a first version of feature labeling.
raimund renkert <raimund.renkert@intevation.de>
parents: 175
diff changeset
813 }
f3a91cd7440b Added a first version of feature labeling.
raimund renkert <raimund.renkert@intevation.de>
parents: 175
diff changeset
814
314
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
815 /** Sanitze an attribute
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
816 *
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
817 * Fixes invalid Field names and/or adds and removes a prefix
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
818 *
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
819 * @param attribute The Attribute to sanitize
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
820 * @param prefixToRemove A Prefix that should be removed (empty otherwise)
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
821 * @param prefixToAdd A Prefix that should be added (empty otherwise)
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
822 * @param enforceShpLimit True if the attribute should follow shapefile
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
823 * format restrictions.
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
824 */
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
825 private String sanitizeAttribute(String attribute, String prefixToRemove,
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
826 String prefixToAdd, boolean enforceShpLimit) {
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
827 if (enforceShpLimit) {
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
828 /* Workaround for non standard conform shapefile implementations
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
829 * like the one used by ArcGis that appends the field type after the
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
830 * eleventh character. Although the standard actually defines 10
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
831 * as the maximum length of Field Names GDAL handles the case where
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
832 * the terminating 0 is actually a Character allowing for Field
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
833 * names of up to 11 characters.
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
834 */
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
835 if (attribute.length() > 10) {
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
836 // Just remove the Type Delimiter
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
837 if (attribute.endsWith("C") ||
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
838 attribute.endsWith("D") ||
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
839 attribute.endsWith("N") ||
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
840 attribute.endsWith("L") ||
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
841 attribute.endsWith("M")) {
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
842 attribute = attribute.substring(0, attribute.length() - 1);
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
843 }
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
844 }
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
845 }
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
846 if (!prefixToRemove.isEmpty() && attribute.startsWith(prefixToRemove)) {
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
847 attribute = attribute.replace(prefixToRemove, "");
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
848 }
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
849 if (!prefixToAdd.isEmpty() && !attribute.startsWith(prefixToAdd)) {
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
850 attribute = prefixToAdd + attribute;
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
851 }
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
852 return attribute;
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
853 }
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
854
181
0bde090506f9 Added comments.
Raimund Renkert <rrenkert@intevation.de>
parents: 180
diff changeset
855 /**
0bde090506f9 Added comments.
Raimund Renkert <rrenkert@intevation.de>
parents: 180
diff changeset
856 * Create definition expression.
0bde090506f9 Added comments.
Raimund Renkert <rrenkert@intevation.de>
parents: 180
diff changeset
857 *
0bde090506f9 Added comments.
Raimund Renkert <rrenkert@intevation.de>
parents: 180
diff changeset
858 * @param ce DOM elementcontaining the class expression information.
0bde090506f9 Added comments.
Raimund Renkert <rrenkert@intevation.de>
parents: 180
diff changeset
859 * @param index Index to determine the correct expression operator.
311
c8b8f887ef80 Add write support for Fgdb layers and make it possible
Andre Heinecke <aheinecke@intevation.de>
parents: 308
diff changeset
860 * @param prefixToRemove A string that will be removed from the start of
c8b8f887ef80 Add write support for Fgdb layers and make it possible
Andre Heinecke <aheinecke@intevation.de>
parents: 308
diff changeset
861 * expression fields.
314
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
862 * @param isShapeFile true if shapefile attribute limits should be enforced
181
0bde090506f9 Added comments.
Raimund Renkert <rrenkert@intevation.de>
parents: 180
diff changeset
863 */
314
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
864 private String createExpression(Element ce, int index, String prefixToRemove,
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
865 boolean isShapeFile) {
137
cd55975ba0c4 Done some minor reformatings.
Raimund Renkert <rrenkert@intevation.de>
parents: 134
diff changeset
866 String expression = "(";
340
dbfcb0b69a63 * contrib/installer/example/example/template.map: Switch to latin1 encoding
Andre Heinecke <aheinecke@intevation.de>
parents: 339
diff changeset
867 int field_count = 0;
dbfcb0b69a63 * contrib/installer/example/example/template.map: Switch to latin1 encoding
Andre Heinecke <aheinecke@intevation.de>
parents: 339
diff changeset
868 int value_count = 0;
137
cd55975ba0c4 Done some minor reformatings.
Raimund Renkert <rrenkert@intevation.de>
parents: 134
diff changeset
869 try {
340
dbfcb0b69a63 * contrib/installer/example/example/template.map: Switch to latin1 encoding
Andre Heinecke <aheinecke@intevation.de>
parents: 339
diff changeset
870 field_count = Integer.parseInt(ce.getAttribute("field_count"));
137
cd55975ba0c4 Done some minor reformatings.
Raimund Renkert <rrenkert@intevation.de>
parents: 134
diff changeset
871 }
cd55975ba0c4 Done some minor reformatings.
Raimund Renkert <rrenkert@intevation.de>
parents: 134
diff changeset
872 catch(NumberFormatException nfe) {
cd55975ba0c4 Done some minor reformatings.
Raimund Renkert <rrenkert@intevation.de>
parents: 134
diff changeset
873 return "";
cd55975ba0c4 Done some minor reformatings.
Raimund Renkert <rrenkert@intevation.de>
parents: 134
diff changeset
874 }
340
dbfcb0b69a63 * contrib/installer/example/example/template.map: Switch to latin1 encoding
Andre Heinecke <aheinecke@intevation.de>
parents: 339
diff changeset
875 try {
dbfcb0b69a63 * contrib/installer/example/example/template.map: Switch to latin1 encoding
Andre Heinecke <aheinecke@intevation.de>
parents: 339
diff changeset
876 value_count = Integer.parseInt(ce.getAttribute("value_count"));
dbfcb0b69a63 * contrib/installer/example/example/template.map: Switch to latin1 encoding
Andre Heinecke <aheinecke@intevation.de>
parents: 339
diff changeset
877 }
dbfcb0b69a63 * contrib/installer/example/example/template.map: Switch to latin1 encoding
Andre Heinecke <aheinecke@intevation.de>
parents: 339
diff changeset
878 catch(NumberFormatException nfe) {
dbfcb0b69a63 * contrib/installer/example/example/template.map: Switch to latin1 encoding
Andre Heinecke <aheinecke@intevation.de>
parents: 339
diff changeset
879 value_count = field_count;
dbfcb0b69a63 * contrib/installer/example/example/template.map: Switch to latin1 encoding
Andre Heinecke <aheinecke@intevation.de>
parents: 339
diff changeset
880 }
181
0bde090506f9 Added comments.
Raimund Renkert <rrenkert@intevation.de>
parents: 180
diff changeset
881
340
dbfcb0b69a63 * contrib/installer/example/example/template.map: Switch to latin1 encoding
Andre Heinecke <aheinecke@intevation.de>
parents: 339
diff changeset
882 if(field_count == 1) {
181
0bde090506f9 Added comments.
Raimund Renkert <rrenkert@intevation.de>
parents: 180
diff changeset
883 //Create single field expression.
0bde090506f9 Added comments.
Raimund Renkert <rrenkert@intevation.de>
parents: 180
diff changeset
884 try {
0bde090506f9 Added comments.
Raimund Renkert <rrenkert@intevation.de>
parents: 180
diff changeset
885 //If no exception is thrown, the expression value is a number.
134
acc9e5430177 Handle SDE connection attributes and expressions.
vc11884admin@VC11884.win.bsh.de
parents: 132
diff changeset
886 Double.parseDouble(ce.getAttribute("value"));
314
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
887 expression += "[" +
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
888 sanitizeAttribute(ce.getAttribute("expression_field_0"),
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
889 prefixToRemove, prefix, isShapeFile) + "]";
137
cd55975ba0c4 Done some minor reformatings.
Raimund Renkert <rrenkert@intevation.de>
parents: 134
diff changeset
890 if(ce.hasAttribute("min_value")) {
180
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
891 if(index == 0) {
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
892 expression += " >= " + ce.getAttribute("min_value");
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
893 }
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
894 else {
152
8a87c796bf47 Fixed expression for the first min value.
vc11884admin@VC11884.win.bsh.de
parents: 148
diff changeset
895 expression += " > " + ce.getAttribute("min_value");
180
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
896 }
314
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
897 expression += " AND [" +
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
898 sanitizeAttribute(ce.getAttribute("expression_field_0"),
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
899 prefixToRemove, prefix, isShapeFile) + "]";
181
0bde090506f9 Added comments.
Raimund Renkert <rrenkert@intevation.de>
parents: 180
diff changeset
900 expression += "]";
137
cd55975ba0c4 Done some minor reformatings.
Raimund Renkert <rrenkert@intevation.de>
parents: 134
diff changeset
901 }
cd55975ba0c4 Done some minor reformatings.
Raimund Renkert <rrenkert@intevation.de>
parents: 134
diff changeset
902 expression += " " + ce.getAttribute("expression_operator");
cd55975ba0c4 Done some minor reformatings.
Raimund Renkert <rrenkert@intevation.de>
parents: 134
diff changeset
903 expression += " " + ce.getAttribute("value") + ")";
cd55975ba0c4 Done some minor reformatings.
Raimund Renkert <rrenkert@intevation.de>
parents: 134
diff changeset
904 }
cd55975ba0c4 Done some minor reformatings.
Raimund Renkert <rrenkert@intevation.de>
parents: 134
diff changeset
905 catch(NumberFormatException nfe) {
181
0bde090506f9 Added comments.
Raimund Renkert <rrenkert@intevation.de>
parents: 180
diff changeset
906 //The expression value is a strings.
314
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
907 expression += "\"[";
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
908 expression += sanitizeAttribute(ce.getAttribute("expression_field_0"),
322
40442cbfbcc7 Fix invalid quoting for string expressions
Andre Heinecke <aheinecke@intevation.de>
parents: 321
diff changeset
909 prefixToRemove, prefix, isShapeFile) + "]\"";
137
cd55975ba0c4 Done some minor reformatings.
Raimund Renkert <rrenkert@intevation.de>
parents: 134
diff changeset
910 expression += " " + ce.getAttribute("expression_operator");
298
1cbc278c956b Whitespace Only: unify to 4 Space indention.
Andre Heinecke <aheinecke@intevation.de>
parents: 297
diff changeset
911 expression += " \"" + ce.getAttribute("value") + "\")";
137
cd55975ba0c4 Done some minor reformatings.
Raimund Renkert <rrenkert@intevation.de>
parents: 134
diff changeset
912 }
cd55975ba0c4 Done some minor reformatings.
Raimund Renkert <rrenkert@intevation.de>
parents: 134
diff changeset
913 catch(Exception e) {
cd55975ba0c4 Done some minor reformatings.
Raimund Renkert <rrenkert@intevation.de>
parents: 134
diff changeset
914 e.printStackTrace();
cd55975ba0c4 Done some minor reformatings.
Raimund Renkert <rrenkert@intevation.de>
parents: 134
diff changeset
915 }
cd55975ba0c4 Done some minor reformatings.
Raimund Renkert <rrenkert@intevation.de>
parents: 134
diff changeset
916 }
cd55975ba0c4 Done some minor reformatings.
Raimund Renkert <rrenkert@intevation.de>
parents: 134
diff changeset
917 else {
181
0bde090506f9 Added comments.
Raimund Renkert <rrenkert@intevation.de>
parents: 180
diff changeset
918 //Create a multi field expression.
340
dbfcb0b69a63 * contrib/installer/example/example/template.map: Switch to latin1 encoding
Andre Heinecke <aheinecke@intevation.de>
parents: 339
diff changeset
919 for (int i = 0; i < field_count; i++) {
134
acc9e5430177 Handle SDE connection attributes and expressions.
vc11884admin@VC11884.win.bsh.de
parents: 132
diff changeset
920 try {
181
0bde090506f9 Added comments.
Raimund Renkert <rrenkert@intevation.de>
parents: 180
diff changeset
921 //If no exception is thrown, the expression values are
0bde090506f9 Added comments.
Raimund Renkert <rrenkert@intevation.de>
parents: 180
diff changeset
922 //numbers.
340
dbfcb0b69a63 * contrib/installer/example/example/template.map: Switch to latin1 encoding
Andre Heinecke <aheinecke@intevation.de>
parents: 339
diff changeset
923
134
acc9e5430177 Handle SDE connection attributes and expressions.
vc11884admin@VC11884.win.bsh.de
parents: 132
diff changeset
924 Double.parseDouble(ce.getAttribute("value_" + i));
314
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
925 expression += "[";
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
926 expression += sanitizeAttribute(ce.getAttribute("expression_field_" + i),
340
dbfcb0b69a63 * contrib/installer/example/example/template.map: Switch to latin1 encoding
Andre Heinecke <aheinecke@intevation.de>
parents: 339
diff changeset
927 prefixToRemove, prefix, isShapeFile);
180
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
928 expression += "]";
134
acc9e5430177 Handle SDE connection attributes and expressions.
vc11884admin@VC11884.win.bsh.de
parents: 132
diff changeset
929 expression += " " + ce.getAttribute("expression_operator");
acc9e5430177 Handle SDE connection attributes and expressions.
vc11884admin@VC11884.win.bsh.de
parents: 132
diff changeset
930 expression += " " + ce.getAttribute("value_" + i);
340
dbfcb0b69a63 * contrib/installer/example/example/template.map: Switch to latin1 encoding
Andre Heinecke <aheinecke@intevation.de>
parents: 339
diff changeset
931 if (i < field_count - 1) {
137
cd55975ba0c4 Done some minor reformatings.
Raimund Renkert <rrenkert@intevation.de>
parents: 134
diff changeset
932 expression += " AND ";
cd55975ba0c4 Done some minor reformatings.
Raimund Renkert <rrenkert@intevation.de>
parents: 134
diff changeset
933 }
cd55975ba0c4 Done some minor reformatings.
Raimund Renkert <rrenkert@intevation.de>
parents: 134
diff changeset
934 else {
cd55975ba0c4 Done some minor reformatings.
Raimund Renkert <rrenkert@intevation.de>
parents: 134
diff changeset
935 expression += ")";
cd55975ba0c4 Done some minor reformatings.
Raimund Renkert <rrenkert@intevation.de>
parents: 134
diff changeset
936 }
cd55975ba0c4 Done some minor reformatings.
Raimund Renkert <rrenkert@intevation.de>
parents: 134
diff changeset
937 }
cd55975ba0c4 Done some minor reformatings.
Raimund Renkert <rrenkert@intevation.de>
parents: 134
diff changeset
938 catch (NumberFormatException nfe) {
181
0bde090506f9 Added comments.
Raimund Renkert <rrenkert@intevation.de>
parents: 180
diff changeset
939 //The expression values are strings.
314
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
940 expression += "\"[";
cd3cb1a7f35a Workaround a bug in ArcGIS causing FieldNames of shape files that
Andre Heinecke <aheinecke@intevation.de>
parents: 311
diff changeset
941 expression += sanitizeAttribute(ce.getAttribute("expression_field_" + i),
340
dbfcb0b69a63 * contrib/installer/example/example/template.map: Switch to latin1 encoding
Andre Heinecke <aheinecke@intevation.de>
parents: 339
diff changeset
942 prefixToRemove, prefix, isShapeFile);
180
f4eb506499f5 Done some code styling and removed TODOs.
Raimund Renkert <rrenkert@intevation.de>
parents: 179
diff changeset
943 expression += "]\"";
134
acc9e5430177 Handle SDE connection attributes and expressions.
vc11884admin@VC11884.win.bsh.de
parents: 132
diff changeset
944 expression += " " + ce.getAttribute("expression_operator");
186
1391f911ee39 Add quotes to an expression if the value is a string.
raimund renkert <raimund.renkert@intevation.de>
parents: 181
diff changeset
945 expression += " \"" + ce.getAttribute("value_" + i);
340
dbfcb0b69a63 * contrib/installer/example/example/template.map: Switch to latin1 encoding
Andre Heinecke <aheinecke@intevation.de>
parents: 339
diff changeset
946 if (i < field_count - 1) {
186
1391f911ee39 Add quotes to an expression if the value is a string.
raimund renkert <raimund.renkert@intevation.de>
parents: 181
diff changeset
947 expression += "\" AND ";
137
cd55975ba0c4 Done some minor reformatings.
Raimund Renkert <rrenkert@intevation.de>
parents: 134
diff changeset
948 }
cd55975ba0c4 Done some minor reformatings.
Raimund Renkert <rrenkert@intevation.de>
parents: 134
diff changeset
949 else {
186
1391f911ee39 Add quotes to an expression if the value is a string.
raimund renkert <raimund.renkert@intevation.de>
parents: 181
diff changeset
950 expression += "\")";
137
cd55975ba0c4 Done some minor reformatings.
Raimund Renkert <rrenkert@intevation.de>
parents: 134
diff changeset
951 }
126
ff0354265a7d Write the correct expression for double values.
Raimund Renkert <rrenkert@intevation.de>
parents: 124
diff changeset
952 }
ff0354265a7d Write the correct expression for double values.
Raimund Renkert <rrenkert@intevation.de>
parents: 124
diff changeset
953 }
340
dbfcb0b69a63 * contrib/installer/example/example/template.map: Switch to latin1 encoding
Andre Heinecke <aheinecke@intevation.de>
parents: 339
diff changeset
954
126
ff0354265a7d Write the correct expression for double values.
Raimund Renkert <rrenkert@intevation.de>
parents: 124
diff changeset
955 }
137
cd55975ba0c4 Done some minor reformatings.
Raimund Renkert <rrenkert@intevation.de>
parents: 134
diff changeset
956 return expression;
127
5ba8bf865dc7 Write expressions for string values to the mapfile.
Raimund Renkert <rrenkert@intevation.de>
parents: 126
diff changeset
957 }
339
ef1cac2854e3 * src/java/de/intevation/mxd/writer/MapScriptWriter.java:
Andre Heinecke <aheinecke@intevation.de>
parents: 338
diff changeset
958
ef1cac2854e3 * src/java/de/intevation/mxd/writer/MapScriptWriter.java:
Andre Heinecke <aheinecke@intevation.de>
parents: 338
diff changeset
959 /**
ef1cac2854e3 * src/java/de/intevation/mxd/writer/MapScriptWriter.java:
Andre Heinecke <aheinecke@intevation.de>
parents: 338
diff changeset
960 * Get a Path that should be used in a mapfile.
ef1cac2854e3 * src/java/de/intevation/mxd/writer/MapScriptWriter.java:
Andre Heinecke <aheinecke@intevation.de>
parents: 338
diff changeset
961 * Depending on the value of useRelativePaths this returns either
ef1cac2854e3 * src/java/de/intevation/mxd/writer/MapScriptWriter.java:
Andre Heinecke <aheinecke@intevation.de>
parents: 338
diff changeset
962 * an absolute path to a file or a relative location
ef1cac2854e3 * src/java/de/intevation/mxd/writer/MapScriptWriter.java:
Andre Heinecke <aheinecke@intevation.de>
parents: 338
diff changeset
963 *
ef1cac2854e3 * src/java/de/intevation/mxd/writer/MapScriptWriter.java:
Andre Heinecke <aheinecke@intevation.de>
parents: 338
diff changeset
964 * @param path The Path that you want to use
ef1cac2854e3 * src/java/de/intevation/mxd/writer/MapScriptWriter.java:
Andre Heinecke <aheinecke@intevation.de>
parents: 338
diff changeset
965 * @return The Path that should be written to the mapfile
ef1cac2854e3 * src/java/de/intevation/mxd/writer/MapScriptWriter.java:
Andre Heinecke <aheinecke@intevation.de>
parents: 338
diff changeset
966 */
ef1cac2854e3 * src/java/de/intevation/mxd/writer/MapScriptWriter.java:
Andre Heinecke <aheinecke@intevation.de>
parents: 338
diff changeset
967 public String pathForMapfile(String path) {
ef1cac2854e3 * src/java/de/intevation/mxd/writer/MapScriptWriter.java:
Andre Heinecke <aheinecke@intevation.de>
parents: 338
diff changeset
968 if (useRelativePaths) {
ef1cac2854e3 * src/java/de/intevation/mxd/writer/MapScriptWriter.java:
Andre Heinecke <aheinecke@intevation.de>
parents: 338
diff changeset
969 logger.debug(new File(mapFilename).toURI());
ef1cac2854e3 * src/java/de/intevation/mxd/writer/MapScriptWriter.java:
Andre Heinecke <aheinecke@intevation.de>
parents: 338
diff changeset
970 logger.debug(new File(path).toURI().getPath());
ef1cac2854e3 * src/java/de/intevation/mxd/writer/MapScriptWriter.java:
Andre Heinecke <aheinecke@intevation.de>
parents: 338
diff changeset
971 // Find the lowest common directory.
ef1cac2854e3 * src/java/de/intevation/mxd/writer/MapScriptWriter.java:
Andre Heinecke <aheinecke@intevation.de>
parents: 338
diff changeset
972 // where relativize returns a relative part
ef1cac2854e3 * src/java/de/intevation/mxd/writer/MapScriptWriter.java:
Andre Heinecke <aheinecke@intevation.de>
parents: 338
diff changeset
973 File candidate = new File(path);
ef1cac2854e3 * src/java/de/intevation/mxd/writer/MapScriptWriter.java:
Andre Heinecke <aheinecke@intevation.de>
parents: 338
diff changeset
974 File commonPath = new File(mapFilename).getParentFile();
ef1cac2854e3 * src/java/de/intevation/mxd/writer/MapScriptWriter.java:
Andre Heinecke <aheinecke@intevation.de>
parents: 338
diff changeset
975 File pathfile = new File(path);
ef1cac2854e3 * src/java/de/intevation/mxd/writer/MapScriptWriter.java:
Andre Heinecke <aheinecke@intevation.de>
parents: 338
diff changeset
976 String dirUps = "";
ef1cac2854e3 * src/java/de/intevation/mxd/writer/MapScriptWriter.java:
Andre Heinecke <aheinecke@intevation.de>
parents: 338
diff changeset
977 int count = 0;
ef1cac2854e3 * src/java/de/intevation/mxd/writer/MapScriptWriter.java:
Andre Heinecke <aheinecke@intevation.de>
parents: 338
diff changeset
978 while (commonPath != null && commonPath.getParentFile() != null
ef1cac2854e3 * src/java/de/intevation/mxd/writer/MapScriptWriter.java:
Andre Heinecke <aheinecke@intevation.de>
parents: 338
diff changeset
979 && candidate.isAbsolute()) {
ef1cac2854e3 * src/java/de/intevation/mxd/writer/MapScriptWriter.java:
Andre Heinecke <aheinecke@intevation.de>
parents: 338
diff changeset
980 candidate = new File(commonPath.toURI().relativize(
ef1cac2854e3 * src/java/de/intevation/mxd/writer/MapScriptWriter.java:
Andre Heinecke <aheinecke@intevation.de>
parents: 338
diff changeset
981 pathfile.toURI()).getPath());
ef1cac2854e3 * src/java/de/intevation/mxd/writer/MapScriptWriter.java:
Andre Heinecke <aheinecke@intevation.de>
parents: 338
diff changeset
982 commonPath = commonPath.getParentFile();
ef1cac2854e3 * src/java/de/intevation/mxd/writer/MapScriptWriter.java:
Andre Heinecke <aheinecke@intevation.de>
parents: 338
diff changeset
983 count++;
ef1cac2854e3 * src/java/de/intevation/mxd/writer/MapScriptWriter.java:
Andre Heinecke <aheinecke@intevation.de>
parents: 338
diff changeset
984 }
ef1cac2854e3 * src/java/de/intevation/mxd/writer/MapScriptWriter.java:
Andre Heinecke <aheinecke@intevation.de>
parents: 338
diff changeset
985 for (int i=0; i < count - 1; i++) {
ef1cac2854e3 * src/java/de/intevation/mxd/writer/MapScriptWriter.java:
Andre Heinecke <aheinecke@intevation.de>
parents: 338
diff changeset
986 /* The last loop already was correct*/
ef1cac2854e3 * src/java/de/intevation/mxd/writer/MapScriptWriter.java:
Andre Heinecke <aheinecke@intevation.de>
parents: 338
diff changeset
987 dirUps += "../";
ef1cac2854e3 * src/java/de/intevation/mxd/writer/MapScriptWriter.java:
Andre Heinecke <aheinecke@intevation.de>
parents: 338
diff changeset
988 }
ef1cac2854e3 * src/java/de/intevation/mxd/writer/MapScriptWriter.java:
Andre Heinecke <aheinecke@intevation.de>
parents: 338
diff changeset
989 if (candidate.isAbsolute()) {
ef1cac2854e3 * src/java/de/intevation/mxd/writer/MapScriptWriter.java:
Andre Heinecke <aheinecke@intevation.de>
parents: 338
diff changeset
990 return path;
ef1cac2854e3 * src/java/de/intevation/mxd/writer/MapScriptWriter.java:
Andre Heinecke <aheinecke@intevation.de>
parents: 338
diff changeset
991 }
ef1cac2854e3 * src/java/de/intevation/mxd/writer/MapScriptWriter.java:
Andre Heinecke <aheinecke@intevation.de>
parents: 338
diff changeset
992 return dirUps + candidate.getPath();
ef1cac2854e3 * src/java/de/intevation/mxd/writer/MapScriptWriter.java:
Andre Heinecke <aheinecke@intevation.de>
parents: 338
diff changeset
993 } else {
ef1cac2854e3 * src/java/de/intevation/mxd/writer/MapScriptWriter.java:
Andre Heinecke <aheinecke@intevation.de>
parents: 338
diff changeset
994 return path;
ef1cac2854e3 * src/java/de/intevation/mxd/writer/MapScriptWriter.java:
Andre Heinecke <aheinecke@intevation.de>
parents: 338
diff changeset
995 }
ef1cac2854e3 * src/java/de/intevation/mxd/writer/MapScriptWriter.java:
Andre Heinecke <aheinecke@intevation.de>
parents: 338
diff changeset
996 }
41
60ed2164035a Introduced MapScript writer.
Raimund Renkert <rrenkert@intevation.de>
parents:
diff changeset
997 }
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)