Statistics
| Revision:

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
}