Merge pull request #117 from eblondel/1.5.x-114-GSLayerEncoder21-fix

1.5.x -  #114 - GSLayerEncoder21 fix
This commit is contained in:
Carlo Cancellieri 2013-11-22 13:35:05 -08:00
commit 545acc425a
3 changed files with 57 additions and 23 deletions

View File

@ -25,7 +25,9 @@
package it.geosolutions.geoserver.rest.encoder; package it.geosolutions.geoserver.rest.encoder;
import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry; import java.util.Map.Entry;
@ -49,7 +51,7 @@ public class GSLayerEncoder21 extends GSLayerEncoder {
public final static String METADATA = "metadata"; public final static String METADATA = "metadata";
final private GSMetadataEncoder metadata = new GSMetadataEncoder(); final private GSMetadataEncoder metadata = new GSMetadataEncoder();
public Map<String, String> authorityURLList; public Map<String, String> authorityURLList;
public Map<String, String> identifierList; public Map<String, List<String>> identifierList;
private class GSMetadataEncoder extends NestedElementEncoder { private class GSMetadataEncoder extends NestedElementEncoder {
public GSMetadataEncoder() { public GSMetadataEncoder() {
@ -125,12 +127,15 @@ public class GSLayerEncoder21 extends GSLayerEncoder {
if (authorityURLList.containsKey(authorityURL)) { if (authorityURLList.containsKey(authorityURL)) {
identifierList.remove(authorityURL); identifierList.remove(authorityURL);
String jsonStr = ""; String jsonStr = "";
for (Entry<String, String> entry : identifierList.entrySet()) { for (Entry<String, List<String>> entry : identifierList
.entrySet()) {
for (String value : entry.getValue()) {
jsonStr += "{" + "\"" + AuthorityURLInfo.name.name() jsonStr += "{" + "\"" + AuthorityURLInfo.name.name()
+ "\":\"" + entry.getValue() + "\"," + "\"" + "\":\"" + value + "\"," + "\""
+ AuthorityURLInfo.href.name() + "\":\"" + AuthorityURLInfo.href.name() + "\":\""
+ entry.getKey() + "\"" + "},"; + entry.getKey() + "\"" + "},";
} }
}
metadata.set("identifiers", "[" + jsonStr + "]"); metadata.set("identifiers", "[" + jsonStr + "]");
delete = true; delete = true;
} }
@ -145,16 +150,29 @@ public class GSLayerEncoder21 extends GSLayerEncoder {
*/ */
public void addIdentifier(GSIdentifierInfoEncoder identifierInfo) { public void addIdentifier(GSIdentifierInfoEncoder identifierInfo) {
if (identifierList == null) { if (identifierList == null) {
identifierList = new HashMap<String, String>(); identifierList = new HashMap<String, List<String>>();
} }
identifierList.put(identifierInfo.getAuthority(),
identifierInfo.getIdentifier()); String authority = identifierInfo.getAuthority();
if (!identifierList.containsKey(authority)) {
List<String> ids = new ArrayList<String>();
ids.add(identifierInfo.getIdentifier());
identifierList.put(authority, ids);
} else {
List<String> ids = identifierList.get(authority);
ids.add(identifierInfo.getIdentifier());
identifierList.put(authority, ids);
}
String jsonStr = ""; String jsonStr = "";
for (Entry<String, String> entry : identifierList.entrySet()) { for (Entry<String, List<String>> entry : identifierList.entrySet()) {
jsonStr += "{" + "\"" + IdentifierInfo.authority.name() + "\":\"" for (String value : entry.getValue()) {
+ entry.getKey() + "\"," + "\"" jsonStr += "{" + "\"" + IdentifierInfo.authority.name()
+ IdentifierInfo.identifier.name() + "\":\"" + "\":\"" + entry.getKey() + "\"," + "\""
+ entry.getValue() + "\"" + "},"; + IdentifierInfo.identifier.name() + "\":\"" + value
+ "\"" + "},";
}
} }
metadata.set("identifiers", "[" + jsonStr + "]"); metadata.set("identifiers", "[" + jsonStr + "]");
} }
@ -172,11 +190,14 @@ public class GSLayerEncoder21 extends GSLayerEncoder {
if (identifierList.containsKey(authority)) { if (identifierList.containsKey(authority)) {
identifierList.remove(authority); identifierList.remove(authority);
String jsonStr = ""; String jsonStr = "";
for (Entry<String, String> entry : identifierList.entrySet()) { for (Entry<String, List<String>> entry : identifierList
.entrySet()) {
for (String value : entry.getValue()) {
jsonStr += "{" + "\"" + IdentifierInfo.authority.name() jsonStr += "{" + "\"" + IdentifierInfo.authority.name()
+ "\":\"" + entry.getKey() + "\"," + "\"" + "\":\"" + entry.getKey() + "\"," + "\""
+ IdentifierInfo.identifier.name() + "\":\"" + IdentifierInfo.identifier.name() + "\":\""
+ entry.getValue() + "\"" + "},"; + value + "\"" + "},";
}
} }
metadata.set("identifiers", "[" + jsonStr + "]"); metadata.set("identifiers", "[" + jsonStr + "]");
delete = true; delete = true;

View File

@ -53,6 +53,8 @@ public class GSLayerEncoder21Test {
"authority2", "http://www.authority2.org")); "authority2", "http://www.authority2.org"));
layerEncoder.addIdentifier(new GSIdentifierInfoEncoder("authority2", layerEncoder.addIdentifier(new GSIdentifierInfoEncoder("authority2",
"identifier2")); "identifier2"));
layerEncoder.addIdentifier(new GSIdentifierInfoEncoder("authority2",
"additionalId"));
} }
@Test @Test
@ -116,10 +118,18 @@ public class GSLayerEncoder21Test {
String[] kvp2_2 = props2[1].split("\":"); String[] kvp2_2 = props2[1].split("\":");
Assert.assertEquals(IdentifierInfo.authority.name(), Assert.assertEquals(IdentifierInfo.authority.name(),
kvp2_1[0].replace("\"", "")); kvp2_1[0].replace("\"", ""));
Assert.assertEquals("authority1", kvp2_1[1].replace("\"", "")); Assert.assertEquals("authority2", kvp2_1[1].replace("\"", ""));
Assert.assertEquals(IdentifierInfo.identifier.name(), Assert.assertEquals(IdentifierInfo.identifier.name(),
kvp2_2[0].replace("\"", "")); kvp2_2[0].replace("\"", ""));
Assert.assertEquals("identifier1", kvp2_2[1].replace("\"", "")); Assert.assertEquals("additionalId", kvp2_2[1].replace("\"", ""));
String[] props3 = items[2].split(",");
String[] kvp3_1 = props3[0].split("\":");
String[] kvp3_2 = props3[1].split("\":");
Assert.assertEquals(IdentifierInfo.authority.name(), kvp3_1[0].replace("\"", ""));
Assert.assertEquals("authority1", kvp3_1[1].replace("\"", ""));
Assert.assertEquals(IdentifierInfo.identifier.name(), kvp3_2[0].replace("\"", ""));
Assert.assertEquals("identifier1", kvp3_2[1].replace("\"", ""));
} }
} }

View File

@ -113,9 +113,12 @@ public class GSFeatureEncoderTest extends GeoserverRESTPublisherTest {
layerEncoder.addAuthorityURL(authorityURL); layerEncoder.addAuthorityURL(authorityURL);
// identifier // identifier
GSIdentifierInfoEncoder identifier = new GSIdentifierInfoEncoder( GSIdentifierInfoEncoder identifier1 = new GSIdentifierInfoEncoder(
"authority1", "identifier1"); "authority1", "identifier1");
layerEncoder.addIdentifier(identifier); GSIdentifierInfoEncoder identifier2 = new GSIdentifierInfoEncoder(
"authority1", "another_identifier");
layerEncoder.addIdentifier(identifier1);
layerEncoder.addIdentifier(identifier2);
publisher.createWorkspace(DEFAULT_WS); publisher.createWorkspace(DEFAULT_WS);