Project

General

Profile

« Previous | Next » 

Revision d395efd5

Added by Andreas Müller over 12 years ago

add GeoServiceArea + tests

View differences:

.gitattributes
45 45
cdmlib-ext/src/main/java/eu/etaxonomy/cdm/ext/dc/DublinCoreSchemaAdapter.java -text
46 46
cdmlib-ext/src/main/java/eu/etaxonomy/cdm/ext/geo/EditGeoService.java -text
47 47
cdmlib-ext/src/main/java/eu/etaxonomy/cdm/ext/geo/EditGeoServiceUtilities.java -text
48
cdmlib-ext/src/main/java/eu/etaxonomy/cdm/ext/geo/GeoServiceArea.java -text
48 49
cdmlib-ext/src/main/java/eu/etaxonomy/cdm/ext/geo/IEditGeoService.java -text
49 50
cdmlib-ext/src/main/java/eu/etaxonomy/cdm/ext/ipni/IIpniService.java -text
50 51
cdmlib-ext/src/main/java/eu/etaxonomy/cdm/ext/ipni/IIpniServiceConfigurator.java -text
......
61 62
cdmlib-ext/src/main/resources/eu/etaxonomy/cdm/ext/geo/mapServices_v10.xsd -text
62 63
cdmlib-ext/src/test/java/eu/etaxonomy/cdm/ext/bci/BciServiceTest.java -text
63 64
cdmlib-ext/src/test/java/eu/etaxonomy/cdm/ext/geo/EditGeoServiceTest.java -text
65
cdmlib-ext/src/test/java/eu/etaxonomy/cdm/ext/geo/GeoServiceAreaTest.java -text
64 66
cdmlib-ext/src/test/java/eu/etaxonomy/cdm/ext/ipni/IpniServiceTest.java -text
65 67
cdmlib-ext/src/test/java/eu/etaxonomy/cdm/ext/openurl/MobotOpenUrlServiceWrapperTest.java -text
66 68
cdmlib-ext/src/test/java/eu/etaxonomy/cdm/ext/sru/SruServiceWrapperTest.java -text
cdmlib-ext/src/main/java/eu/etaxonomy/cdm/ext/geo/GeoServiceArea.java
1
// $Id$
2
/**
3
* Copyright (C) 2009 EDIT
4
* European Distributed Institute of Taxonomy 
5
* http://www.e-taxonomy.eu
6
* 
7
* The contents of this file are subject to the Mozilla Public License Version 1.1
8
* See LICENSE.TXT at the top of this package for the full license terms.
9
*/
10
package eu.etaxonomy.cdm.ext.geo;
11

  
12
import java.io.ByteArrayInputStream;
13
import java.io.IOException;
14
import java.io.InputStream;
15
import java.io.StringReader;
16
import java.io.StringWriter;
17
import java.util.ArrayList;
18
import java.util.HashMap;
19
import java.util.List;
20
import java.util.Map;
21
import java.util.TreeSet;
22

  
23
import javax.xml.stream.XMLOutputFactory;
24
import javax.xml.stream.XMLStreamException;
25
import javax.xml.stream.XMLStreamWriter;
26

  
27
import org.jdom.Element;
28
import org.jdom.JDOMException;
29
import org.jdom.Namespace;
30
import org.xml.sax.InputSource;
31

  
32
import eu.etaxonomy.cdm.common.CdmUtils;
33
import eu.etaxonomy.cdm.common.XmlHelp;
34

  
35
/**
36
 * Holds all values to map an NamedArea to a geo service area
37
 * @author a.mueller
38
 * @date 11.08.2011
39
 *
40
 */
41
public class GeoServiceArea {
42
	
43
	private static final String VALUE = "value";
44
	private static final String FIELD = "field";
45
	private static final String LAYER = "layer";
46
	private static final String AREA = "area";
47
	private static final String MAP_SERVICE_NAMESPACE = "http://www.etaxonomy.eu/cdm";
48
	private static final String MAP_SERVICE = "mapService";
49
	TreeSet<SubArea> subAreas = new TreeSet<SubArea>(); 
50
	
51
	private class SubArea implements Comparable<SubArea>{
52
		private String layer;
53
		private String field;
54
		private String value;
55
		/* (non-Javadoc)
56
		 * @see java.lang.Object#hashCode()
57
		 */
58
		@Override
59
		public int hashCode() {
60
			int hash;
61
			hash = 236435;
62
			hash += layer != null ? layer.hashCode() * 29 : 32;
63
			hash += field != null ? field.hashCode() * 31 : 32;
64
			hash += value != null ? value.hashCode() * 37 : 32;
65
			return hash;
66
		}
67
		/* (non-Javadoc)
68
		 * @see java.lang.Object#equals(java.lang.Object)
69
		 */
70
		@Override
71
		public boolean equals(Object otherArea) {
72
			if (! (otherArea instanceof SubArea)){
73
				return false;
74
			}
75
			SubArea subArea = (SubArea)otherArea;
76
			if (CdmUtils.nullSafeEqual(layer, subArea.layer) 
77
					&& CdmUtils.nullSafeEqual(field, subArea.field) 
78
					&& CdmUtils.nullSafeEqual(value, subArea.value)){
79
				return true;
80
			}else{
81
				return false;
82
			}
83
		}
84
		@Override
85
		public int compareTo(SubArea otherArea) {
86
			int compareLayer = CdmUtils.Nz(this.layer).compareToIgnoreCase(CdmUtils.Nz(otherArea.layer));
87
			int compareField = CdmUtils.Nz(this.field).compareToIgnoreCase(CdmUtils.Nz(otherArea.field));
88
			int compareValue = CdmUtils.Nz(this.value).compareToIgnoreCase(CdmUtils.Nz(otherArea.value));
89
			
90
			if (compareLayer != 0){
91
				return compareLayer;
92
			}else if (compareField != 0 ){
93
				return compareField;
94
			}else {
95
				return compareValue;
96
			}
97
		}
98
		
99
		
100
	}
101
	
102
	public void add(String layer, String field, String value){
103
		SubArea newArea = new SubArea();
104
		newArea.layer = layer;
105
		newArea.field = field;
106
		newArea.value = value;
107
		subAreas.add(newArea);
108
	}
109
	
110
	public Map<String, Map<String, List<String>>> getAreas(){
111
		Map<String, Map<String, List<String>>> result = new HashMap<String, Map<String,List<String>>>();
112
				
113
		for (SubArea area : subAreas){
114
			//layer
115
			Map<String, List<String>> layer = result.get(area.layer);
116
			if (layer == null ){
117
				layer = new HashMap<String, List<String>>();
118
				result.put(area.layer, layer);
119
			}
120
			//field
121
			List<String> field = layer.get(area.field);
122
			if (field == null ){
123
				field = new ArrayList<String>();
124
				layer.put(area.field, field);
125
			}
126
			//value
127
			if (! field.contains(area.value)){
128
				field.add(area.value);
129
			}
130

  
131
		}
132
		return result;
133
	}
134
	
135
	public static GeoServiceArea valueOf (String xml){
136
//		StringReader reader = new StringReader (xml);
137
//		(new InputSource(reader));
138
//		InputStream is = new java.io.StringBufferInputStream(xml);
139
		InputStream is = new ByteArrayInputStream(xml.getBytes());
140
		GeoServiceArea result = new GeoServiceArea();
141
		
142
		try {
143
			Element root = XmlHelp.getRoot(is);
144
			if (! root.getName().equals(MAP_SERVICE) || ! root.getNamespace().getURI().equals(MAP_SERVICE_NAMESPACE)   ){
145
				return null;
146
			}else{
147
				//TODO schema validation
148
				
149
				Namespace ns = root.getNamespace();
150
				List<Element> elAreas = root.getChildren(AREA, ns);
151
				for (Element elArea : elAreas){
152
					Element layer = elArea.getChild(LAYER, ns);
153
					Element field = elArea.getChild(FIELD, ns);
154
					//TODO multiple values
155
					List<Element> values = elArea.getChildren(VALUE, ns);
156
					for (Element value : values){
157
						result.add(layer.getTextTrim(), field.getTextTrim(), value.getTextTrim());
158
					}
159
				}
160
				return result;	
161
			}
162
				
163
			
164
			
165
		} catch (JDOMException e) {
166
			throw new RuntimeException(e);
167
		} catch (IOException e) {
168
			throw new RuntimeException(e);
169
		}
170
	}
171
	
172
	public String toXml() throws XMLStreamException{
173
		XMLStreamWriter writer = null;
174
			XMLOutputFactory factory = XMLOutputFactory.newInstance();
175
			StringWriter stringWriter = new StringWriter();
176
			writer = factory.createXMLStreamWriter(stringWriter);
177
			
178
			String rootNamespace = MAP_SERVICE_NAMESPACE;
179
			String rootName = MAP_SERVICE;
180
			
181
			
182
			// create header 
183
			writer.writeStartDocument(); 
184
			writer.setDefaultNamespace(rootNamespace);
185
			
186
				// create root element 
187
				writer.writeStartElement(rootName);
188
				
189
				writer.writeNamespace(null, rootNamespace);
190
				writer.writeAttribute("type", "editMapService");
191
				
192
				writeAreas(writer);
193
				
194
				writer.writeEndElement(); 
195
			writer.writeEndDocument(); 
196
				
197
			return stringWriter.getBuffer().toString();
198
	}
199

  
200
	private void writeAreas(XMLStreamWriter writer) throws XMLStreamException {
201
		Map<String, Map<String, List<String>>> areaMap = getAreas();
202
		//TODO multiple
203
		for (String layerKey : areaMap.keySet()){
204
			Map<String, List<String>> layer = areaMap.get(layerKey);
205
			for (String fieldKey: layer.keySet()){
206
				List<String> field = layer.get(fieldKey);
207
				//area
208
				writer.writeStartElement(AREA);
209
				//layer
210
				writer.writeStartElement(LAYER);
211
				writer.writeCharacters(layerKey);
212
				writer.writeEndElement();
213
				//field
214
				writer.writeStartElement(FIELD);
215
				writer.writeCharacters(fieldKey);
216
				writer.writeEndElement();
217
				//value
218
				for (String value : field){
219
					writer.writeStartElement(VALUE);
220
					writer.writeCharacters(value);
221
					writer.writeEndElement();
222
				}
223
				writer.writeEndElement();
224
			}
225
		}
226
		
227
	}
228

  
229
}
cdmlib-ext/src/test/java/eu/etaxonomy/cdm/ext/geo/GeoServiceAreaTest.java
1
// $Id$
2
/**
3
* Copyright (C) 2009 EDIT
4
* European Distributed Institute of Taxonomy 
5
* http://www.e-taxonomy.eu
6
* 
7
* The contents of this file are subject to the Mozilla Public License Version 1.1
8
* See LICENSE.TXT at the top of this package for the full license terms.
9
*/
10
package eu.etaxonomy.cdm.ext.geo;
11

  
12
import static org.junit.Assert.fail;
13

  
14
import javax.xml.stream.XMLStreamException;
15

  
16
import junit.framework.Assert;
17

  
18
import org.apache.log4j.Logger;
19
import org.junit.Before;
20
import org.junit.BeforeClass;
21
import org.junit.Test;
22

  
23
/**
24
 * @author a.mueller
25
 * @date 12.08.2011
26
 *
27
 */
28
public class GeoServiceAreaTest {
29
	private static final Logger logger = Logger.getLogger(GeoServiceAreaTest.class);
30

  
31
	/**
32
	 * @throws java.lang.Exception
33
	 */
34
	@BeforeClass
35
	public static void setUpBeforeClass() throws Exception {
36
	}
37

  
38
	/**
39
	 * @throws java.lang.Exception
40
	 */
41
	@Before
42
	public void setUp() throws Exception {
43
	}
44

  
45
// ********************************** TESTS ****************************************	
46
	
47
	/**
48
	 * Test method for {@link eu.etaxonomy.cdm.ext.geo.GeoServiceArea#add(java.lang.String, java.lang.String, java.lang.String)}.
49
	 */
50
	@Test
51
	public void testAdd() {
52
		logger.warn("Not yet implemented");
53
	}
54

  
55
	/**
56
	 * Test method for {@link eu.etaxonomy.cdm.ext.geo.GeoServiceArea#getAreas()}.
57
	 */
58
	@Test
59
	public void testGetAreas() {
60
		logger.warn("Not yet implemented");
61
	}
62

  
63
	/**
64
	 * Test method for {@link eu.etaxonomy.cdm.ext.geo.GeoServiceArea#valueOf(java.lang.String)}.
65
	 */
66
	@Test
67
	public void testValueOf() {
68
		String input = "<?xml version=\"1.0\" ?><mapService xmlns=\"http://www.etaxonomy.eu/cdm\" type=\"editMapService\"><area><layer>vmap0_as_bnd_political_boundary_a</layer><field>nam</field><value>PULAU BANGKA#SUMATERA SELATAN</value></area></mapService>";
69
		GeoServiceArea areas = GeoServiceArea.valueOf(input);
70
		try {
71
			Assert.assertNotNull("Result must not be null", areas);
72
			Assert.assertEquals("Input string must be equal to output string", input, areas.toXml());
73
		} catch (XMLStreamException e) {
74
			fail();
75
		}
76
	}
77

  
78
	/**
79
	 * Test method for {@link eu.etaxonomy.cdm.ext.geo.GeoServiceArea#toXml()}.
80
	 */
81
	@Test
82
	public void testToXml() {
83
		logger.warn("Not yet implemented");
84
	}
85

  
86
}

Also available in: Unified diff