gvsig-catalog / org.gvsig.catalog / branches / org.gvsig.catalog-CSW2.0.2 / org.gvsig.catalog / org.gvsig.catalog.lib / src / main / java / org / gvsig / catalog / schemas / Iso19139_119Record.java @ 55
History | View | Annotate | Download (4.95 KB)
1 |
package org.gvsig.catalog.schemas; |
---|---|
2 |
|
3 |
import java.net.URI; |
4 |
|
5 |
import org.gvsig.catalog.metadataxml.XMLNode; |
6 |
import org.gvsig.catalog.metadataxml.XMLTree; |
7 |
import org.gvsig.catalog.querys.Coordinates; |
8 |
/**
|
9 |
* ISO 19139/119 catalog record
|
10 |
* It creates resources(layers) from MD_Distribution and resources(services) from SV_ServiceIdentification
|
11 |
*
|
12 |
* @author jvhigon
|
13 |
*
|
14 |
*/
|
15 |
public class Iso19139_119Record extends Record{ |
16 |
|
17 |
public Iso19139_119Record() {
|
18 |
|
19 |
} |
20 |
|
21 |
/**
|
22 |
* Constructor
|
23 |
* @param node Node with the answer
|
24 |
* @param serverURI Server URL. Necessary to load the image (just Geonetwork)
|
25 |
*/
|
26 |
public Iso19139_119Record(URI uri, XMLNode node) { |
27 |
super(uri,node);
|
28 |
setTitle(node.searchNodeValue( |
29 |
"identificationInfo->SV_ServiceIdentification->citation->CI_Citation->title->CharacterString"));
|
30 |
setAbstract_(node.searchNodeValue("identificationInfo->SV_ServiceIdentification->abstract->gco:CharacterString"));
|
31 |
setPurpose(node.searchNodeValue("dataIdInfo->idPurp"));
|
32 |
setKeyWords(node.searchMultipleNodeValue( |
33 |
"identificationInfo->SV_ServiceIdentification->descriptiveKeywords->MD_Keywords->keyword->gco:CharacterString"));
|
34 |
setResources(getResources("distributionInfo->MD_Distribution->transferOptions->MD_DigitalTransferOptions->onLine->CI_OnlineResource",
|
35 |
"identificationInfo->SV_ServiceIdentification"));
|
36 |
setFileID(node.searchNodeValue("mdFileID"));
|
37 |
setImageURL(node.searchNodeValue("dataIdInfo->graphOver"));
|
38 |
|
39 |
} |
40 |
|
41 |
/**
|
42 |
*
|
43 |
*
|
44 |
*
|
45 |
* @return
|
46 |
* @param label
|
47 |
*/
|
48 |
private Resource[] getResources(String label_layers, String label_services) { |
49 |
//compute onlineresources
|
50 |
XMLNode[] nodes = XMLTree.searchMultipleNode(getNode(), label_layers);
|
51 |
Coordinates coordinates = null;
|
52 |
String srs = null; |
53 |
|
54 |
if (nodes == null) { |
55 |
return null; |
56 |
} |
57 |
//size of resources = all onlineresources + one service
|
58 |
Resource[] resources = new Resource[nodes.length + 1]; |
59 |
if (nodes.length > 0){ |
60 |
srs = XMLTree.searchNodeValue(getNode(),"refSysInfo->MdCoRefSys->refSysID->identCode");
|
61 |
coordinates = new Coordinates(XMLTree.searchNodeValue(getNode(),"dataIdInfo->geoBox->westBL"), |
62 |
XMLTree.searchNodeValue(getNode(),"dataIdInfo->geoBox->northBL"),
|
63 |
XMLTree.searchNodeValue(getNode(),"dataIdInfo->geoBox->eastBL"),
|
64 |
XMLTree.searchNodeValue(getNode(),"dataIdInfo->geoBox->southBL"));
|
65 |
} |
66 |
|
67 |
|
68 |
for (int i = 0; i < resources.length -1; i++){ |
69 |
resources[i] = new Resource(XMLTree.searchNodeValue(nodes[i],
|
70 |
"linkage->URL"),
|
71 |
XMLTree.searchNodeValue(nodes[i], "protocol->gco:CharacterString"),
|
72 |
XMLTree.searchNodeValue(nodes[i], "name->gco:CharacterString"),
|
73 |
XMLTree.searchNodeValue(nodes[i], "orDesc"),
|
74 |
XMLTree.searchNodeAtribute(nodes[i], "orFunct->OnFunctCd",
|
75 |
"value"),
|
76 |
srs, |
77 |
coordinates); |
78 |
if (resources[i].getLinkage() == null){ |
79 |
resources[i].setLinkage("");
|
80 |
} |
81 |
|
82 |
} |
83 |
//compute service
|
84 |
XMLNode node = XMLTree.searchNode(getNode(), label_services); |
85 |
if (node == null){ |
86 |
return null; |
87 |
} |
88 |
String service_name = XMLTree.searchNodeValue(node, "srv:serviceType->gco:LocalName"); |
89 |
Object operations = XMLTree.searchMultipleNodeValue(node, "srv:containsOperations->srv:SV_OperationMetadata->srv:operationName->gco:CharacterString"); |
90 |
XMLNode[] operations_nodes= XMLTree.searchMultipleNode(node, "srv:containsOperations->srv:SV_OperationMetadata"); |
91 |
String capabilities_url=""; |
92 |
for (int i = 0; i < operations_nodes.length; i++){ |
93 |
String operation_name= XMLTree.searchNodeValue(operations_nodes[i], "srv:operationName->gco:CharacterString"); |
94 |
if (operation_name.toUpperCase().equals("GETCAPABILITIES")){ |
95 |
capabilities_url=XMLTree.searchNodeValue(operations_nodes[i], "srv:connectPoint->gmd:CI_OnlineResource->gmd:linkage->gmd:URL");
|
96 |
break;
|
97 |
} |
98 |
} |
99 |
//service_name = XMLTree.searchNode(node, "serviceType->gco:LocalName").getText();
|
100 |
int last_index = nodes.length;
|
101 |
resources[last_index] = new Resource(capabilities_url, Resource.WMS_SERVICE, null,null,null,null,null); |
102 |
resources[last_index].setType(Resource.WMS_SERVICE); |
103 |
return resources;
|
104 |
} |
105 |
|
106 |
/*
|
107 |
* (non-Javadoc)
|
108 |
* @see es.gva.cit.catalogClient.schemas.discoverer.Record#accept(java.net.URI, es.gva.cit.catalogClient.metadataxml.XMLNode)
|
109 |
*/
|
110 |
public boolean accept(URI uri, XMLNode node) { |
111 |
if (node.getName().endsWith("MD_Metadata")){ |
112 |
if (node.searchNode("identificationInfo->SV_ServiceIdentification->citation->CI_Citation->title")!=null){ |
113 |
return true; |
114 |
} |
115 |
} |
116 |
return false; |
117 |
} |
118 |
|
119 |
} |