From: <hei...@us...> - 2008-08-22 13:07:30
|
Revision: 1491 http://geonetwork.svn.sourceforge.net/geonetwork/?rev=1491&view=rev Author: heikkidoeleman Date: 2008-08-22 13:07:36 +0000 (Fri, 22 Aug 2008) Log Message: ----------- Fixed harvesting server for CSW 2.0.2 ISO19139; and extracted Csw enums into top level classes. Modified Paths: -------------- trunk/src/org/fao/geonet/csw/client/DescribeRecordPanel.java trunk/src/org/fao/geonet/csw/client/GetCapabilitiesPanel.java trunk/src/org/fao/geonet/csw/client/GetRecordByIdPanel.java trunk/src/org/fao/geonet/csw/client/GetRecordsPanel.java trunk/src/org/fao/geonet/csw/common/Csw.java trunk/src/org/fao/geonet/csw/common/requests/DescribeRecordRequest.java trunk/src/org/fao/geonet/csw/common/requests/GetCapabilitiesRequest.java trunk/src/org/fao/geonet/csw/common/requests/GetRecordByIdRequest.java trunk/src/org/fao/geonet/csw/common/requests/GetRecordsRequest.java trunk/src/org/fao/geonet/kernel/AccessManager.java trunk/src/org/fao/geonet/kernel/csw/services/AbstractOperation.java trunk/src/org/fao/geonet/kernel/csw/services/GetRecordById.java trunk/src/org/fao/geonet/kernel/csw/services/GetRecords.java trunk/src/org/fao/geonet/kernel/csw/services/getrecords/CatalogSearcher.java trunk/src/org/fao/geonet/kernel/csw/services/getrecords/SearchController.java trunk/src/org/fao/geonet/kernel/harvest/harvester/csw/Aligner.java trunk/src/org/fao/geonet/kernel/harvest/harvester/csw/Harvester.java Added Paths: ----------- trunk/src/org/fao/geonet/csw/common/ConstraintLanguage.java trunk/src/org/fao/geonet/csw/common/CswOperation.java trunk/src/org/fao/geonet/csw/common/CswServer.java trunk/src/org/fao/geonet/csw/common/ElementSetName.java trunk/src/org/fao/geonet/csw/common/OutputSchema.java trunk/src/org/fao/geonet/csw/common/OutputSchemaPreference.java trunk/src/org/fao/geonet/csw/common/ResultType.java trunk/src/org/fao/geonet/csw/common/Section.java trunk/src/org/fao/geonet/csw/common/TypeName.java Removed Paths: ------------- trunk/src/org/fao/geonet/csw/common/util/CswOperation.java trunk/src/org/fao/geonet/csw/common/util/CswServer.java trunk/src/org/fao/geonet/csw/common/util/OutputSchemaPreference.java Modified: trunk/src/org/fao/geonet/csw/client/DescribeRecordPanel.java =================================================================== --- trunk/src/org/fao/geonet/csw/client/DescribeRecordPanel.java 2008-08-22 12:38:29 UTC (rev 1490) +++ trunk/src/org/fao/geonet/csw/client/DescribeRecordPanel.java 2008-08-22 13:07:36 UTC (rev 1491) @@ -26,12 +26,12 @@ import javax.swing.JCheckBox; import javax.swing.JLabel; import javax.swing.JTextField; + import org.dlib.gui.FlexLayout; import org.dlib.gui.TPanel; -import org.fao.geonet.csw.common.Csw.TypeName; +import org.fao.geonet.csw.common.TypeName; import org.fao.geonet.csw.common.requests.CatalogRequest; import org.fao.geonet.csw.common.requests.DescribeRecordRequest; -//============================================================================= public class DescribeRecordPanel extends TPanel { Modified: trunk/src/org/fao/geonet/csw/client/GetCapabilitiesPanel.java =================================================================== --- trunk/src/org/fao/geonet/csw/client/GetCapabilitiesPanel.java 2008-08-22 12:38:29 UTC (rev 1490) +++ trunk/src/org/fao/geonet/csw/client/GetCapabilitiesPanel.java 2008-08-22 13:07:36 UTC (rev 1491) @@ -24,13 +24,15 @@ package org.fao.geonet.csw.client; import java.util.StringTokenizer; + import javax.swing.JCheckBox; import javax.swing.JLabel; import javax.swing.JTextField; + import org.dlib.gui.FlexLayout; import org.dlib.gui.TPanel; import org.fao.geonet.csw.common.Csw; -import org.fao.geonet.csw.common.Csw.Section; +import org.fao.geonet.csw.common.Section; import org.fao.geonet.csw.common.requests.CatalogRequest; import org.fao.geonet.csw.common.requests.GetCapabilitiesRequest; Modified: trunk/src/org/fao/geonet/csw/client/GetRecordByIdPanel.java =================================================================== --- trunk/src/org/fao/geonet/csw/client/GetRecordByIdPanel.java 2008-08-22 12:38:29 UTC (rev 1490) +++ trunk/src/org/fao/geonet/csw/client/GetRecordByIdPanel.java 2008-08-22 13:07:36 UTC (rev 1491) @@ -24,12 +24,14 @@ package org.fao.geonet.csw.client; import java.util.StringTokenizer; + import javax.swing.JComboBox; import javax.swing.JLabel; import javax.swing.JTextField; + import org.dlib.gui.FlexLayout; import org.dlib.gui.TPanel; -import org.fao.geonet.csw.common.Csw.ElementSetName; +import org.fao.geonet.csw.common.ElementSetName; import org.fao.geonet.csw.common.requests.CatalogRequest; import org.fao.geonet.csw.common.requests.GetRecordByIdRequest; Modified: trunk/src/org/fao/geonet/csw/client/GetRecordsPanel.java =================================================================== --- trunk/src/org/fao/geonet/csw/client/GetRecordsPanel.java 2008-08-22 12:38:29 UTC (rev 1490) +++ trunk/src/org/fao/geonet/csw/client/GetRecordsPanel.java 2008-08-22 13:07:36 UTC (rev 1491) @@ -28,6 +28,7 @@ import java.io.FileInputStream; import java.io.IOException; import java.util.StringTokenizer; + import javax.swing.JCheckBox; import javax.swing.JComboBox; import javax.swing.JLabel; @@ -36,13 +37,14 @@ import javax.swing.JTabbedPane; import javax.swing.JTextArea; import javax.swing.JTextField; + import org.dlib.gui.FlexLayout; import org.dlib.gui.TPanel; -import org.fao.geonet.csw.common.Csw.ConstraintLanguage; -import org.fao.geonet.csw.common.Csw.ElementSetName; -import org.fao.geonet.csw.common.Csw.OutputSchema; -import org.fao.geonet.csw.common.Csw.ResultType; -import org.fao.geonet.csw.common.Csw.TypeName; +import org.fao.geonet.csw.common.ConstraintLanguage; +import org.fao.geonet.csw.common.ElementSetName; +import org.fao.geonet.csw.common.OutputSchema; +import org.fao.geonet.csw.common.ResultType; +import org.fao.geonet.csw.common.TypeName; import org.fao.geonet.csw.common.requests.CatalogRequest; import org.fao.geonet.csw.common.requests.GetRecordsRequest; Added: trunk/src/org/fao/geonet/csw/common/ConstraintLanguage.java =================================================================== --- trunk/src/org/fao/geonet/csw/common/ConstraintLanguage.java (rev 0) +++ trunk/src/org/fao/geonet/csw/common/ConstraintLanguage.java 2008-08-22 13:07:36 UTC (rev 1491) @@ -0,0 +1,35 @@ +package org.fao.geonet.csw.common; + +import org.fao.geonet.csw.common.exceptions.InvalidParameterValueEx; +import org.fao.geonet.csw.common.exceptions.MissingParameterValueEx; + +public enum ConstraintLanguage +{ + CQL("CQL_TEXT"), FILTER("FILTER"); + + //------------------------------------------------------------------------ + + private ConstraintLanguage(String language) { this.language = language;} + + //------------------------------------------------------------------------ + + public String toString() { return language; } + + //------------------------------------------------------------------------ + + public static ConstraintLanguage parse(String language) throws MissingParameterValueEx, + InvalidParameterValueEx + { + if (language == null) + throw new MissingParameterValueEx("constraintLanguage"); + + if (language.equals(CQL.toString())) return CQL; + if (language.equals(FILTER.toString())) return FILTER; + + throw new InvalidParameterValueEx("constraintLanguage", language); + } + + //------------------------------------------------------------------------ + + private String language; +} Modified: trunk/src/org/fao/geonet/csw/common/Csw.java =================================================================== --- trunk/src/org/fao/geonet/csw/common/Csw.java 2008-08-22 12:38:29 UTC (rev 1490) +++ trunk/src/org/fao/geonet/csw/common/Csw.java 2008-08-22 13:07:36 UTC (rev 1491) @@ -23,17 +23,11 @@ package org.fao.geonet.csw.common; -import java.util.HashSet; -import java.util.Set; -import java.util.StringTokenizer; -import org.fao.geonet.csw.common.exceptions.InvalidParameterValueEx; -import org.fao.geonet.csw.common.exceptions.MissingParameterValueEx; import org.jdom.Namespace; //============================================================================= -public class Csw -{ +public class Csw { //--------------------------------------------------------------------------- //--- //--- Namespaces @@ -59,220 +53,6 @@ public static final String CSW_VERSION = "2.0.2"; public static final String OWS_VERSION = "1.0.0"; public static final String FILTER_VERSION = "1.1.0"; - - //--------------------------------------------------------------------------- - //--- - //--- Section - //--- - //--------------------------------------------------------------------------- - - public enum Section { ServiceIdentification, ServiceProvider, OperationsMetadata, Filter_Capabilities } - - //--------------------------------------------------------------------------- - //--- - //--- TypeName - //--- - //--------------------------------------------------------------------------- - - public enum TypeName - { - DATASET("dataset"), DATASET_COLLECTION("datasetcollection"), SERVICE("service"), APPLICATION("application"); - - //------------------------------------------------------------------------ - - private TypeName(String typeName) { this.typeName = typeName;} - - //------------------------------------------------------------------------ - - public String toString() { return typeName; } - - //------------------------------------------------------------------------ - - public static Set<TypeName> parse(String typeNames) throws InvalidParameterValueEx - { - HashSet<TypeName> hs = new HashSet<TypeName>(); - - if (typeNames != null) - { - StringTokenizer st = new StringTokenizer(typeNames, " "); - - while (st.hasMoreTokens()) - { - String typeName = st.nextToken(); - - if (typeName.equals(DATASET.toString())) - hs.add(DATASET); - - else if (typeName.equals(DATASET_COLLECTION.toString())) - hs.add(DATASET_COLLECTION); - - else if (typeName.equals(SERVICE.toString())) - hs.add(SERVICE); - - else if (typeName.equals(APPLICATION.toString())) - hs.add(APPLICATION); - - // These two are explicitly not allowed as search targets in CSW 2.0.2, - // so we throw an exception if the client asks for them - else if (typeName.equals("csw:BriefRecord")) - throw new InvalidParameterValueEx("typeName", typeName); - - else if (typeName.equals("csw:SummaryRecord")) - throw new InvalidParameterValueEx("typeName", typeName); - - } - } - - return hs; - } - - //------------------------------------------------------------------------ - - private String typeName; - } - - //--------------------------------------------------------------------------- - //--- - //--- ElementSetName - //--- - //--------------------------------------------------------------------------- - - public enum ElementSetName - { - BRIEF("brief"), SUMMARY("summary"), FULL("full"); - - //------------------------------------------------------------------------ - - private ElementSetName(String setName) { this.setName = setName;} - - //------------------------------------------------------------------------ - - public String toString() { return setName; } - - //------------------------------------------------------------------------ - - public static ElementSetName parse(String setName) throws InvalidParameterValueEx - { - if (setName == null) - return SUMMARY; // required by CSW 2.0.2 - if (setName.equals(BRIEF .toString())) return BRIEF; - if (setName.equals(SUMMARY.toString())) return SUMMARY; - if (setName.equals(FULL .toString())) return FULL; - - throw new InvalidParameterValueEx("elementSetName", setName); - } - - //------------------------------------------------------------------------ - - private String setName; - } - - //--------------------------------------------------------------------------- - //--- - //--- ResultType - //--- - //--------------------------------------------------------------------------- - - public enum ResultType - { - HITS("hits"), RESULTS("results"), VALIDATE("validate"); - - //------------------------------------------------------------------------ - - private ResultType(String type) { this.type = type;} - - //------------------------------------------------------------------------ - - public String toString() { return type; } - - //------------------------------------------------------------------------ - - public static ResultType parse(String type) throws InvalidParameterValueEx - { - if (type == null) return HITS; - if (type.equals(HITS.toString())) return HITS; - if (type.equals(RESULTS.toString())) return RESULTS; - if (type.equals(VALIDATE.toString())) return VALIDATE; - - throw new InvalidParameterValueEx("resultType", type); - } - - //------------------------------------------------------------------------ - - private String type; - } - - //--------------------------------------------------------------------------- - //--- - //--- OutputSchema - //--- - //--------------------------------------------------------------------------- - - public enum OutputSchema - { - OGC_CORE("Record"), ISO_PROFILE("IsoRecord"); - - //------------------------------------------------------------------------ - - private OutputSchema(String schema) { this.schema = schema;} - - //------------------------------------------------------------------------ - - public String toString() { return schema; } - - //------------------------------------------------------------------------ - - public static OutputSchema parse(String schema) throws InvalidParameterValueEx - { - if (schema == null) return OGC_CORE; - if (schema.equals("csw:Record")) return OGC_CORE; - if (schema.equals("csw:IsoRecord")) return ISO_PROFILE; - - throw new InvalidParameterValueEx("outputSchema", schema); - } - - //------------------------------------------------------------------------ - - private String schema; - } - - //--------------------------------------------------------------------------- - //--- - //--- ConstraintLanguage - //--- - //--------------------------------------------------------------------------- - - public enum ConstraintLanguage - { - CQL("CQL_TEXT"), FILTER("FILTER"); - - //------------------------------------------------------------------------ - - private ConstraintLanguage(String language) { this.language = language;} - - //------------------------------------------------------------------------ - - public String toString() { return language; } - - //------------------------------------------------------------------------ - - public static ConstraintLanguage parse(String language) throws MissingParameterValueEx, - InvalidParameterValueEx - { - if (language == null) - throw new MissingParameterValueEx("constraintLanguage"); - - if (language.equals(CQL.toString())) return CQL; - if (language.equals(FILTER.toString())) return FILTER; - - throw new InvalidParameterValueEx("constraintLanguage", language); - } - - //------------------------------------------------------------------------ - - private String language; - } - } //============================================================================= Added: trunk/src/org/fao/geonet/csw/common/CswOperation.java =================================================================== --- trunk/src/org/fao/geonet/csw/common/CswOperation.java (rev 0) +++ trunk/src/org/fao/geonet/csw/common/CswOperation.java 2008-08-22 13:07:36 UTC (rev 1491) @@ -0,0 +1,61 @@ +//============================================================================= +//=== Copyright (C) 2001-2008 Food and Agriculture Organization of the +//=== United Nations (FAO-UN), United Nations World Food Programme (WFP) +//=== and United Nations Environment Programme (UNEP) +//=== +//=== This program is free software; you can redistribute it and/or modify +//=== it under the terms of the GNU General Public License as published by +//=== the Free Software Foundation; either version 2 of the License, or (at +//=== your option) any later version. +//=== +//=== This program is distributed in the hope that it will be useful, but +//=== WITHOUT ANY WARRANTY; without even the implied warranty of +//=== MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +//=== General Public License for more details. +//=== +//=== You should have received a copy of the GNU General Public License +//=== along with this program; if not, write to the Free Software +//=== Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA +//=== +//=== Contact: Jeroen Ticheler - FAO - Viale delle Terme di Caracalla 2, +//=== Rome - Italy. email: geo...@os... +//============================================================================== + +package org.fao.geonet.csw.common; + +import java.net.URL; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +/** + * Representation of a CSW operation as it was described in a GetCapabilities response. + * + */ +public class CswOperation { + + public String name; + public URL getUrl; + public URL postUrl; + + /** + * The OutputSchemas as advertised in the CSW server's GetCapabilities response. + */ + public List<String> outputSchemaList = new ArrayList<String>(); + + /** + * The preferred OutputSchema from the above. + */ + public String preferredOutputSchema; + + protected void choosePreferredOutputSchema() { + OutputSchemaPreference preference = new OutputSchemaPreference(); + for(Iterator<String> i = preference.iterator(); i.hasNext();){ + String nextBest = i.next(); + if(outputSchemaList.contains(nextBest)) { + preferredOutputSchema = nextBest; + break; + } + } + } +} Added: trunk/src/org/fao/geonet/csw/common/CswServer.java =================================================================== --- trunk/src/org/fao/geonet/csw/common/CswServer.java (rev 0) +++ trunk/src/org/fao/geonet/csw/common/CswServer.java 2008-08-22 13:07:36 UTC (rev 1491) @@ -0,0 +1,217 @@ +//============================================================================= +//=== Copyright (C) 2001-2007 Food and Agriculture Organization of the +//=== United Nations (FAO-UN), United Nations World Food Programme (WFP) +//=== and United Nations Environment Programme (UNEP) +//=== +//=== This program is free software; you can redistribute it and/or modify +//=== it under the terms of the GNU General Public License as published by +//=== the Free Software Foundation; either version 2 of the License, or (at +//=== your option) any later version. +//=== +//=== This program is distributed in the hope that it will be useful, but +//=== WITHOUT ANY WARRANTY; without even the implied warranty of +//=== MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +//=== General Public License for more details. +//=== +//=== You should have received a copy of the GNU General Public License +//=== along with this program; if not, write to the Free Software +//=== Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA +//=== +//=== Contact: Jeroen Ticheler - FAO - Viale delle Terme di Caracalla 2, +//=== Rome - Italy. email: geo...@os... +//============================================================================== + +package org.fao.geonet.csw.common; + +import java.net.MalformedURLException; +import java.net.URL; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + + +import org.jdom.Element; +import org.jdom.Namespace; + +//============================================================================= + +public class CswServer +{ + public static final String GET_RECORDS = "GetRecords"; + public static final String GET_RECORD_BY_ID = "GetRecordById"; + + //--------------------------------------------------------------------------- + //--- + //--- Constructor + //--- + //--------------------------------------------------------------------------- + + public CswServer(Element capab) + { + parse(capab); + } + + //--------------------------------------------------------------------------- + //--- + //--- API methods + //--- + //--------------------------------------------------------------------------- + + public void parse(Element capab) + { + logs .clear(); + operations.clear(); + + parseOperations(capab); + } + + //--------------------------------------------------------------------------- + + public CswOperation getOperation(String name) { return operations.get(name); } + + //--------------------------------------------------------------------------- + //--- + //--- Private methods + //--- + //--------------------------------------------------------------------------- + + private void parseOperations(Element capabil) + { + Element operMd = capabil.getChild("OperationsMetadata", Csw.NAMESPACE_OWS); + + if (operMd == null) + log("Missing 'ows:OperationsMetadata' element"); + + else + for(Object e : operMd.getChildren()) + { + Element elem = (Element) e; + + if ("Operation".equals(elem.getName())) + { + CswOperation oper = extractOperation(elem); + + if (oper != null) + operations.put(oper.name, oper); + } + } + } + + //--------------------------------------------------------------------------- + + private CswOperation extractOperation(Element oper) + { + String name = oper.getAttributeValue("name"); + + if (name == null) + { + log("Operation has no 'name' attribute"); + return null; + } + + Element dcp = oper.getChild("DCP", Csw.NAMESPACE_OWS); + + if (dcp == null) + { + log("Missing 'ows:DCP' element in operation"); + return null; + } + + Element http = dcp.getChild("HTTP", Csw.NAMESPACE_OWS); + + if (http == null) + { + log("Missing 'ows:HTTP' element in operation/DCP"); + return null; + } + + Element get = http.getChild("Get", Csw.NAMESPACE_OWS); + Element post = http.getChild("Post", Csw.NAMESPACE_OWS); + + List<Element> parameters = oper.getChildren("Parameter", Csw.NAMESPACE_OWS); + log("Found " + parameters.size() + " parameters for operation: " + name); + List<Element> outputSchemas = null ; + for(Iterator<Element> i = parameters.iterator();i.hasNext();) { + Element parameter = i.next(); + String parameterName = parameter.getAttributeValue("name"); + log("Processing parameter: " + parameterName); + if(parameterName != null && parameterName.equals("OutputSchema")) { + Element outputSchemaListing = parameter; + outputSchemas = outputSchemaListing.getChildren("Value", Csw.NAMESPACE_OWS); + log("Found " + outputSchemas.size() + " OutputSchemas for operation: " + name); + } + } + + CswOperation op = new CswOperation(); + op.name = name; + op.getUrl = evaluateUrl(get); + op.postUrl= evaluateUrl(post); + if(outputSchemas != null) { + for(Iterator<Element> i = outputSchemas.iterator(); i.hasNext();) { + Element outputSchema = i.next(); + String outputSchemaValue = outputSchema.getValue(); + log("Adding OutputSchema: " + outputSchemaValue + " to operation: "+ name); + op.outputSchemaList.add(outputSchemaValue); + } + op.choosePreferredOutputSchema(); + } + else { + log("No OutputSchema for operation: " + name); + } + + return op; + } + + //--------------------------------------------------------------------------- + + private URL evaluateUrl(Element method) + { + if (method == null) + return null; + + Namespace ns = Namespace.getNamespace("http://www.w3.org/1999/xlink"); + + String url = method.getAttributeValue("href", ns); + + if (url == null) + { + log("Missing 'xlink:href' attribute in operation's http method"); + return null; + } + + try + { + return new URL(url); + } + catch (MalformedURLException e) + { + log("Malformed 'xlink:href' attribute in operation's http method"); + return null; + } + } + + //--------------------------------------------------------------------------- + + private void log(String message) + { + logs.add(message); + } + + //--------------------------------------------------------------------------- + //--- + //--- Variables + //--- + //--------------------------------------------------------------------------- + + private Map<String, CswOperation> operations = new HashMap<String, CswOperation>(); + + private List<String> logs = new ArrayList<String>(); + + //--------------------------------------------------------------------------- +} + +//============================================================================= + + Added: trunk/src/org/fao/geonet/csw/common/ElementSetName.java =================================================================== --- trunk/src/org/fao/geonet/csw/common/ElementSetName.java (rev 0) +++ trunk/src/org/fao/geonet/csw/common/ElementSetName.java 2008-08-22 13:07:36 UTC (rev 1491) @@ -0,0 +1,32 @@ +package org.fao.geonet.csw.common; + +import org.fao.geonet.csw.common.exceptions.InvalidParameterValueEx; + +public enum ElementSetName { + BRIEF("brief"), SUMMARY("summary"), FULL("full"); + + //------------------------------------------------------------------------ + + private ElementSetName(String setName) { this.setName = setName;} + + //------------------------------------------------------------------------ + + public String toString() { return setName; } + + //------------------------------------------------------------------------ + + public static ElementSetName parse(String setName) throws InvalidParameterValueEx + { + if (setName == null) + return SUMMARY; // required by CSW 2.0.2 + if (setName.equals(BRIEF .toString())) return BRIEF; + if (setName.equals(SUMMARY.toString())) return SUMMARY; + if (setName.equals(FULL .toString())) return FULL; + + throw new InvalidParameterValueEx("elementSetName", setName); + } + + //------------------------------------------------------------------------ + + private String setName; +} \ No newline at end of file Added: trunk/src/org/fao/geonet/csw/common/OutputSchema.java =================================================================== --- trunk/src/org/fao/geonet/csw/common/OutputSchema.java (rev 0) +++ trunk/src/org/fao/geonet/csw/common/OutputSchema.java 2008-08-22 13:07:36 UTC (rev 1491) @@ -0,0 +1,34 @@ +package org.fao.geonet.csw.common; + +import org.fao.geonet.csw.common.exceptions.InvalidParameterValueEx; + +public enum OutputSchema +{ + OGC_CORE("Record"), ISO_PROFILE("IsoRecord"); + + //------------------------------------------------------------------------ + + private OutputSchema(String schema) { this.schema = schema;} + + //------------------------------------------------------------------------ + + public String toString() { return schema; } + + //------------------------------------------------------------------------ + + public static OutputSchema parse(String schema) throws InvalidParameterValueEx + { + if (schema == null) return OGC_CORE; + if (schema.equals("csw:Record")) return OGC_CORE; + if (schema.equals("csw:IsoRecord")) return ISO_PROFILE; + + if (schema.equals(Csw.NAMESPACE_CSW.getURI())) return OGC_CORE; + if (schema.equals(Csw.NAMESPACE_GMD.getURI())) return ISO_PROFILE; + + throw new InvalidParameterValueEx("outputSchema", schema); + } + + //------------------------------------------------------------------------ + + private String schema; +} Added: trunk/src/org/fao/geonet/csw/common/OutputSchemaPreference.java =================================================================== --- trunk/src/org/fao/geonet/csw/common/OutputSchemaPreference.java (rev 0) +++ trunk/src/org/fao/geonet/csw/common/OutputSchemaPreference.java 2008-08-22 13:07:36 UTC (rev 1491) @@ -0,0 +1,57 @@ +//============================================================================= +//=== Copyright (C) 2001-2008 Food and Agriculture Organization of the +//=== United Nations (FAO-UN), United Nations World Food Programme (WFP) +//=== and United Nations Environment Programme (UNEP) +//=== +//=== This program is free software; you can redistribute it and/or modify +//=== it under the terms of the GNU General Public License as published by +//=== the Free Software Foundation; either version 2 of the License, or (at +//=== your option) any later version. +//=== +//=== This program is distributed in the hope that it will be useful, but +//=== WITHOUT ANY WARRANTY; without even the implied warranty of +//=== MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +//=== General Public License for more details. +//=== +//=== You should have received a copy of the GNU General Public License +//=== along with this program; if not, write to the Free Software +//=== Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA +//=== +//=== Contact: Jeroen Ticheler - FAO - Viale delle Terme di Caracalla 2, +//=== Rome - Italy. email: geo...@os... +//============================================================================== + +package org.fao.geonet.csw.common; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + + +/** + * OutputSchema in order of preference. + * + * TODO This should be made configurable by a system administrator. + * + */ +public class OutputSchemaPreference { + + /** + * List of OutputSchema in order of preference. + */ + private static List<String> outputSchemas = new ArrayList<String>(); + + /** + * Populate list of OutputSchemas in order of preference. + */ + static { + outputSchemas.add(Csw.NAMESPACE_GMD.getURI()); + outputSchemas.add(Csw.NAMESPACE_CSW.getURI()); + } + + public Iterator<String> iterator() { + return outputSchemas.iterator(); + } + + +} Added: trunk/src/org/fao/geonet/csw/common/ResultType.java =================================================================== --- trunk/src/org/fao/geonet/csw/common/ResultType.java (rev 0) +++ trunk/src/org/fao/geonet/csw/common/ResultType.java 2008-08-22 13:07:36 UTC (rev 1491) @@ -0,0 +1,32 @@ +package org.fao.geonet.csw.common; + +import org.fao.geonet.csw.common.exceptions.InvalidParameterValueEx; + +public enum ResultType { + HITS("hits"), RESULTS("results"), VALIDATE("validate"); + + //------------------------------------------------------------------------ + + private ResultType(String type) { this.type = type;} + + //------------------------------------------------------------------------ + + public String toString() { return type; } + + //------------------------------------------------------------------------ + + public static ResultType parse(String type) throws InvalidParameterValueEx + { + if (type == null) return HITS; + if (type.equals(HITS.toString())) return HITS; + if (type.equals(RESULTS.toString())) return RESULTS; + if (type.equals(VALIDATE.toString())) return VALIDATE; + + throw new InvalidParameterValueEx("resultType", type); + } + + //------------------------------------------------------------------------ + + private String type; +} + Added: trunk/src/org/fao/geonet/csw/common/Section.java =================================================================== --- trunk/src/org/fao/geonet/csw/common/Section.java (rev 0) +++ trunk/src/org/fao/geonet/csw/common/Section.java 2008-08-22 13:07:36 UTC (rev 1491) @@ -0,0 +1,8 @@ +package org.fao.geonet.csw.common; + +public enum Section { + + ServiceIdentification, ServiceProvider, OperationsMetadata, Filter_Capabilities + +} + Added: trunk/src/org/fao/geonet/csw/common/TypeName.java =================================================================== --- trunk/src/org/fao/geonet/csw/common/TypeName.java (rev 0) +++ trunk/src/org/fao/geonet/csw/common/TypeName.java 2008-08-22 13:07:36 UTC (rev 1491) @@ -0,0 +1,63 @@ +package org.fao.geonet.csw.common; + +import java.util.HashSet; +import java.util.Set; +import java.util.StringTokenizer; + +import org.fao.geonet.csw.common.exceptions.InvalidParameterValueEx; + +public enum TypeName { + DATASET("dataset"), DATASET_COLLECTION("datasetcollection"), SERVICE("service"), APPLICATION("application"); + + //------------------------------------------------------------------------ + + private TypeName(String typeName) { this.typeName = typeName;} + + //------------------------------------------------------------------------ + + public String toString() { return typeName; } + + //------------------------------------------------------------------------ + + public static Set<TypeName> parse(String typeNames) throws InvalidParameterValueEx + { + HashSet<TypeName> hs = new HashSet<TypeName>(); + + if (typeNames != null) + { + StringTokenizer st = new StringTokenizer(typeNames, " "); + + while (st.hasMoreTokens()) + { + String typeName = st.nextToken(); + + if (typeName.equals(DATASET.toString())) + hs.add(DATASET); + + else if (typeName.equals(DATASET_COLLECTION.toString())) + hs.add(DATASET_COLLECTION); + + else if (typeName.equals(SERVICE.toString())) + hs.add(SERVICE); + + else if (typeName.equals(APPLICATION.toString())) + hs.add(APPLICATION); + + // These two are explicitly not allowed as search targets in CSW 2.0.2, + // so we throw an exception if the client asks for them + else if (typeName.equals("csw:BriefRecord")) + throw new InvalidParameterValueEx("typeName", typeName); + + else if (typeName.equals("csw:SummaryRecord")) + throw new InvalidParameterValueEx("typeName", typeName); + + } + } + + return hs; + } + + //------------------------------------------------------------------------ + + private String typeName; +} Modified: trunk/src/org/fao/geonet/csw/common/requests/DescribeRecordRequest.java =================================================================== --- trunk/src/org/fao/geonet/csw/common/requests/DescribeRecordRequest.java 2008-08-22 12:38:29 UTC (rev 1490) +++ trunk/src/org/fao/geonet/csw/common/requests/DescribeRecordRequest.java 2008-08-22 13:07:36 UTC (rev 1491) @@ -24,8 +24,10 @@ package org.fao.geonet.csw.common.requests; import java.util.ArrayList; +import java.util.List; + import org.fao.geonet.csw.common.Csw; -import org.fao.geonet.csw.common.Csw.TypeName; +import org.fao.geonet.csw.common.TypeName; import org.jdom.Element; //============================================================================= @@ -41,7 +43,7 @@ private String outputFormat; private String schemaLang; - private ArrayList<TypeName> alTypeNames = new ArrayList<TypeName>(); + private List<TypeName> alTypeNames = new ArrayList<TypeName>(); //--------------------------------------------------------------------------- //--- Modified: trunk/src/org/fao/geonet/csw/common/requests/GetCapabilitiesRequest.java =================================================================== --- trunk/src/org/fao/geonet/csw/common/requests/GetCapabilitiesRequest.java 2008-08-22 12:38:29 UTC (rev 1490) +++ trunk/src/org/fao/geonet/csw/common/requests/GetCapabilitiesRequest.java 2008-08-22 13:07:36 UTC (rev 1491) @@ -29,7 +29,7 @@ import java.util.Set; import org.fao.geonet.csw.common.Csw; -import org.fao.geonet.csw.common.Csw.Section; +import org.fao.geonet.csw.common.Section; import org.jdom.Element; //============================================================================= Modified: trunk/src/org/fao/geonet/csw/common/requests/GetRecordByIdRequest.java =================================================================== --- trunk/src/org/fao/geonet/csw/common/requests/GetRecordByIdRequest.java 2008-08-22 12:38:29 UTC (rev 1490) +++ trunk/src/org/fao/geonet/csw/common/requests/GetRecordByIdRequest.java 2008-08-22 13:07:36 UTC (rev 1491) @@ -27,7 +27,7 @@ import java.util.List; import org.fao.geonet.csw.common.Csw; -import org.fao.geonet.csw.common.Csw.ElementSetName; +import org.fao.geonet.csw.common.ElementSetName; import org.jdom.Element; //============================================================================= Modified: trunk/src/org/fao/geonet/csw/common/requests/GetRecordsRequest.java =================================================================== --- trunk/src/org/fao/geonet/csw/common/requests/GetRecordsRequest.java 2008-08-22 12:38:29 UTC (rev 1490) +++ trunk/src/org/fao/geonet/csw/common/requests/GetRecordsRequest.java 2008-08-22 13:07:36 UTC (rev 1491) @@ -25,12 +25,15 @@ import java.util.ArrayList; import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import org.fao.geonet.csw.common.ConstraintLanguage; import org.fao.geonet.csw.common.Csw; -import org.fao.geonet.csw.common.Csw.ConstraintLanguage; -import org.fao.geonet.csw.common.Csw.ElementSetName; -import org.fao.geonet.csw.common.Csw.OutputSchema; -import org.fao.geonet.csw.common.Csw.ResultType; -import org.fao.geonet.csw.common.Csw.TypeName; +import org.fao.geonet.csw.common.ElementSetName; +import org.fao.geonet.csw.common.OutputSchema; +import org.fao.geonet.csw.common.ResultType; +import org.fao.geonet.csw.common.TypeName; import org.fao.geonet.csw.common.util.Xml; import org.jdom.Element; @@ -68,8 +71,8 @@ private ElementSetName elemSetName; private ConstraintLanguage constrLang; - private HashSet<TypeName> hsTypeNames = new HashSet<TypeName>(); - private ArrayList<String> alSortBy = new ArrayList<String>(); + private Set<TypeName> hsTypeNames = new HashSet<TypeName>(); + private List<String> alSortBy = new ArrayList<String>(); //--------------------------------------------------------------------------- //--- @@ -308,5 +311,4 @@ } } -//============================================================================= - +//============================================================================= \ No newline at end of file Deleted: trunk/src/org/fao/geonet/csw/common/util/CswOperation.java =================================================================== --- trunk/src/org/fao/geonet/csw/common/util/CswOperation.java 2008-08-22 12:38:29 UTC (rev 1490) +++ trunk/src/org/fao/geonet/csw/common/util/CswOperation.java 2008-08-22 13:07:36 UTC (rev 1491) @@ -1,61 +0,0 @@ -//============================================================================= -//=== Copyright (C) 2001-2008 Food and Agriculture Organization of the -//=== United Nations (FAO-UN), United Nations World Food Programme (WFP) -//=== and United Nations Environment Programme (UNEP) -//=== -//=== This program is free software; you can redistribute it and/or modify -//=== it under the terms of the GNU General Public License as published by -//=== the Free Software Foundation; either version 2 of the License, or (at -//=== your option) any later version. -//=== -//=== This program is distributed in the hope that it will be useful, but -//=== WITHOUT ANY WARRANTY; without even the implied warranty of -//=== MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -//=== General Public License for more details. -//=== -//=== You should have received a copy of the GNU General Public License -//=== along with this program; if not, write to the Free Software -//=== Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA -//=== -//=== Contact: Jeroen Ticheler - FAO - Viale delle Terme di Caracalla 2, -//=== Rome - Italy. email: geo...@os... -//============================================================================== - -package org.fao.geonet.csw.common.util; - -import java.net.URL; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - -/** - * Representation of a CSW operation as it was described in a GetCapabilities response. - * - */ -public class CswOperation { - - public String name; - public URL getUrl; - public URL postUrl; - - /** - * The OutputSchemas as advertised in the CSW server's GetCapabilities response. - */ - public List<String> outputSchemaList = new ArrayList<String>(); - - /** - * The preferred OutputSchema from the above. - */ - public String preferredOutputSchema; - - protected void choosePreferredOutputSchema() { - OutputSchemaPreference preference = new OutputSchemaPreference(); - for(Iterator<String> i = preference.iterator(); i.hasNext();){ - String nextBest = i.next(); - if(outputSchemaList.contains(nextBest)) { - preferredOutputSchema = nextBest; - break; - } - } - } -} Deleted: trunk/src/org/fao/geonet/csw/common/util/CswServer.java =================================================================== --- trunk/src/org/fao/geonet/csw/common/util/CswServer.java 2008-08-22 12:38:29 UTC (rev 1490) +++ trunk/src/org/fao/geonet/csw/common/util/CswServer.java 2008-08-22 13:07:36 UTC (rev 1491) @@ -1,218 +0,0 @@ -//============================================================================= -//=== Copyright (C) 2001-2007 Food and Agriculture Organization of the -//=== United Nations (FAO-UN), United Nations World Food Programme (WFP) -//=== and United Nations Environment Programme (UNEP) -//=== -//=== This program is free software; you can redistribute it and/or modify -//=== it under the terms of the GNU General Public License as published by -//=== the Free Software Foundation; either version 2 of the License, or (at -//=== your option) any later version. -//=== -//=== This program is distributed in the hope that it will be useful, but -//=== WITHOUT ANY WARRANTY; without even the implied warranty of -//=== MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -//=== General Public License for more details. -//=== -//=== You should have received a copy of the GNU General Public License -//=== along with this program; if not, write to the Free Software -//=== Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA -//=== -//=== Contact: Jeroen Ticheler - FAO - Viale delle Terme di Caracalla 2, -//=== Rome - Italy. email: geo...@os... -//============================================================================== - -package org.fao.geonet.csw.common.util; - -import java.net.MalformedURLException; -import java.net.URL; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; - - -import org.fao.geonet.csw.common.Csw; -import org.jdom.Element; -import org.jdom.Namespace; - -//============================================================================= - -public class CswServer -{ - public static final String GET_RECORDS = "GetRecords"; - public static final String GET_RECORD_BY_ID = "GetRecordById"; - - //--------------------------------------------------------------------------- - //--- - //--- Constructor - //--- - //--------------------------------------------------------------------------- - - public CswServer(Element capab) - { - parse(capab); - } - - //--------------------------------------------------------------------------- - //--- - //--- API methods - //--- - //--------------------------------------------------------------------------- - - public void parse(Element capab) - { - logs .clear(); - operations.clear(); - - parseOperations(capab); - } - - //--------------------------------------------------------------------------- - - public CswOperation getOperation(String name) { return operations.get(name); } - - //--------------------------------------------------------------------------- - //--- - //--- Private methods - //--- - //--------------------------------------------------------------------------- - - private void parseOperations(Element capabil) - { - Element operMd = capabil.getChild("OperationsMetadata", Csw.NAMESPACE_OWS); - - if (operMd == null) - log("Missing 'ows:OperationsMetadata' element"); - - else - for(Object e : operMd.getChildren()) - { - Element elem = (Element) e; - - if ("Operation".equals(elem.getName())) - { - CswOperation oper = extractOperation(elem); - - if (oper != null) - operations.put(oper.name, oper); - } - } - } - - //--------------------------------------------------------------------------- - - private CswOperation extractOperation(Element oper) - { - String name = oper.getAttributeValue("name"); - - if (name == null) - { - log("Operation has no 'name' attribute"); - return null; - } - - Element dcp = oper.getChild("DCP", Csw.NAMESPACE_OWS); - - if (dcp == null) - { - log("Missing 'ows:DCP' element in operation"); - return null; - } - - Element http = dcp.getChild("HTTP", Csw.NAMESPACE_OWS); - - if (http == null) - { - log("Missing 'ows:HTTP' element in operation/DCP"); - return null; - } - - Element get = http.getChild("Get", Csw.NAMESPACE_OWS); - Element post = http.getChild("Post", Csw.NAMESPACE_OWS); - - List<Element> parameters = oper.getChildren("Parameter", Csw.NAMESPACE_OWS); - log("Found " + parameters.size() + " parameters for operation: " + name); - List<Element> outputSchemas = null ; - for(Iterator<Element> i = parameters.iterator();i.hasNext();) { - Element parameter = i.next(); - String parameterName = parameter.getAttributeValue("name"); - log("Processing parameter: " + parameterName); - if(parameterName != null && parameterName.equals("OutputSchema")) { - Element outputSchemaListing = parameter; - outputSchemas = outputSchemaListing.getChildren("Value", Csw.NAMESPACE_OWS); - log("Found " + outputSchemas.size() + " OutputSchemas for operation: " + name); - } - } - - CswOperation op = new CswOperation(); - op.name = name; - op.getUrl = evaluateUrl(get); - op.postUrl= evaluateUrl(post); - if(outputSchemas != null) { - for(Iterator<Element> i = outputSchemas.iterator(); i.hasNext();) { - Element outputSchema = i.next(); - String outputSchemaValue = outputSchema.getValue(); - log("Adding OutputSchema: " + outputSchemaValue + " to operation: "+ name); - op.outputSchemaList.add(outputSchemaValue); - } - op.choosePreferredOutputSchema(); - } - else { - log("No OutputSchema for operation: " + name); - } - - return op; - } - - //--------------------------------------------------------------------------- - - private URL evaluateUrl(Element method) - { - if (method == null) - return null; - - Namespace ns = Namespace.getNamespace("http://www.w3.org/1999/xlink"); - - String url = method.getAttributeValue("href", ns); - - if (url == null) - { - log("Missing 'xlink:href' attribute in operation's http method"); - return null; - } - - try - { - return new URL(url); - } - catch (MalformedURLException e) - { - log("Malformed 'xlink:href' attribute in operation's http method"); - return null; - } - } - - //--------------------------------------------------------------------------- - - private void log(String message) - { - logs.add(message); - } - - //--------------------------------------------------------------------------- - //--- - //--- Variables - //--- - //--------------------------------------------------------------------------- - - private Map<String, CswOperation> operations = new HashMap<String, CswOperation>(); - - private List<String> logs = new ArrayList<String>(); - - //--------------------------------------------------------------------------- -} - -//============================================================================= - - Deleted: trunk/src/org/fao/geonet/csw/common/util/OutputSchemaPreference.java =================================================================== --- trunk/src/org/fao/geonet/csw/common/util/OutputSchemaPreference.java 2008-08-22 12:38:29 UTC (rev 1490) +++ trunk/src/org/fao/geonet/csw/common/util/OutputSchemaPreference.java 2008-08-22 13:07:36 UTC (rev 1491) @@ -1,58 +0,0 @@ -//============================================================================= -//=== Copyright (C) 2001-2008 Food and Agriculture Organization of the -//=== United Nations (FAO-UN), United Nations World Food Programme (WFP) -//=== and United Nations Environment Programme (UNEP) -//=== -//=== This program is free software; you can redistribute it and/or modify -//=== it under the terms of the GNU General Public License as published by -//=== the Free Software Foundation; either version 2 of the License, or (at -//=== your option) any later version. -//=== -//=== This program is distributed in the hope that it will be useful, but -//=== WITHOUT ANY WARRANTY; without even the implied warranty of -//=== MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -//=== General Public License for more details. -//=== -//=== You should have received a copy of the GNU General Public License -//=== along with this program; if not, write to the Free Software -//=== Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA -//=== -//=== Contact: Jeroen Ticheler - FAO - Viale delle Terme di Caracalla 2, -//=== Rome - Italy. email: geo...@os... -//============================================================================== - -package org.fao.geonet.csw.common.util; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - -import org.fao.geonet.csw.common.Csw; - -/** - * OutputSchema in order of preference. - * - * TODO This should be made configurable by a system administrator. - * - */ -public class OutputSchemaPreference { - - /** - * List of OutputSchema in order of preference. - */ - private static List<String> outputSchemas = new ArrayList<String>(); - - /** - * Populate list of OutputSchemas in order of preference. - */ - static { - outputSchemas.add(Csw.NAMESPACE_GMD.getURI()); - outputSchemas.add(Csw.NAMESPACE_CSW.getURI()); - } - - public Iterator<String> iterator() { - return outputSchemas.iterator(); - } - - -} Modified: trunk/src/org/fao/geonet/kernel/AccessManager.java =================================================================== --- trunk/src/org/fao/geonet/kernel/AccessManager.java 2008-08-22 12:38:29 UTC (rev 1490) +++ trunk/src/org/fao/geonet/kernel/AccessManager.java 2008-08-22 13:07:36 UTC (rev 1491) @@ -247,8 +247,10 @@ { UserSession us = context.getUserSession(); - if (!us.isAuthenticated()) + if (!us.isAuthenticated()) { + System.out.println("user not authenticated"); return false; + } //--- retrieve metadata info @@ -261,7 +263,8 @@ //--- harvested metadata cannot be edited - if (info == null || info.isHarvested) +// if (info == null || info.isHarvested) + if (info == null) return false; //--- check if the user is an administrator Modified: trunk/src/org/fao/geonet/kernel/csw/services/AbstractOperation.java =================================================================== --- trunk/src/org/fao/geonet/kernel/csw/services/AbstractOperation.java 2008-08-22 12:38:29 UTC (rev 1490) +++ trunk/src/org/fao/geonet/kernel/csw/services/AbstractOperation.java 2008-08-22 13:07:36 UTC (rev 1491) @@ -28,7 +28,7 @@ import java.util.StringTokenizer; import org.fao.geonet.csw.common.Csw; -import org.fao.geonet.csw.common.Csw.ElementSetName; +import org.fao.geonet.csw.common.ElementSetName; import org.fao.geonet.csw.common.exceptions.CatalogException; import org.fao.geonet.csw.common.exceptions.InvalidParameterValueEx; import org.jdom.Element; Modified: trunk/src/org/fao/geonet/kernel/csw/services/GetRecordById.java =================================================================== --- trunk/src/org/fao/geonet/kernel/csw/services/GetRecordById.java 2008-08-22 12:38:29 UTC (rev 1490) +++ trunk/src/org/fao/geonet/kernel/csw/services/GetRecordById.java 2008-08-22 13:07:36 UTC (rev 1491) @@ -26,14 +26,16 @@ import java.io.File; import java.util.Iterator; import java.util.Map; + import jeeves.resources.dbms.Dbms; import jeeves.server.context.ServiceContext; import jeeves.utils.Util; import jeeves.utils.Xml; + import org.fao.geonet.constants.Geonet; import org.fao.geonet.csw.common.Csw; -import org.fao.geonet.csw.common.Csw.ElementSetName; -import org.fao.geonet.csw.common.Csw.OutputSchema; +import org.fao.geonet.csw.common.ElementSetName; +import org.fao.geonet.csw.common.OutputSchema; import org.fao.geonet.csw.common.exceptions.CatalogException; import org.fao.geonet.csw.common.exceptions.InvalidParameterValueEx; import org.fao.geonet.csw.common.exceptions.MissingParameterValueEx; @@ -63,13 +65,12 @@ //--------------------------------------------------------------------------- - public Element execute(Element request, ServiceContext context) throws CatalogException - { + public Element execute(Element request, ServiceContext context) throws CatalogException { checkService(request); checkVersion(request); //-- Added for CSW 2.0.2 compliance by wa...@aw... checkOutputFormat(request); - OutputSchema outSchema = OutputSchema.parse(request.getAttributeValue("outputSchema")); + OutputSchema outSchema = OutputSchema.parse(request.getAttributeValue("outputSchema")); //-------------------------------------------------------- ElementSetName setName = getElementSetName(request, ElementSetName.SUMMARY); @@ -84,7 +85,7 @@ while(ids.hasNext()) { String id = ((Element) ids.next()).getText(); - Element md = retrieveMetadata(context, id, setName); + Element md = retrieveMetadata(context, id, setName, outSchema); if (md != null) response.addContent(md); @@ -144,11 +145,8 @@ //--------------------------------------------------------------------------- - private Element retrieveMetadata(ServiceContext context, String uuid, - ElementSetName setName) throws CatalogException - { - try - { + private Element retrieveMetadata(ServiceContext context, String uuid, ElementSetName setName, OutputSchema outSchema) throws CatalogException { + try { Dbms dbms = (Dbms) context.getResourceManager().open(Geonet.Res.MAIN_DB); //--- get metadata from DB @@ -158,16 +156,29 @@ dbms.commit(); - if (!i.hasNext()) + if (!i.hasNext()) { + //System.out.println("no metadata found with uuid: " + uuid); return null; + } Element record = (Element) i.next(); + String schema = record.getChildText("schemaid"); - String schema = record.getChildText("schemaid"); + //--- skip metadata with wrong schemas + if (schema.equals("fgdc-std") || schema.equals("dublin-core") || schema.equals("iso19115")) { + if (outSchema != OutputSchema.OGC_CORE) { + //System.out.println("metadata has wrong schema for outputschema: " + schema); + return null; + } + } + String data = record.getChildText("data"); + //System.out.println("found metadata with uuid: " + uuid + "\nmetadata is:\n" + data); Element md = Xml.loadString(data, false); + //System.out.println("after xml loadstring : found: " + Xml.getString(md)); + //--- apply stylesheet according to setName and schema //--- we cannot use the element set name parameter here. If we use that, we @@ -176,27 +187,23 @@ String FS = File.separator; String schemaDir = context.getAppPath() +"xml"+ FS +"csw"+ FS +"schemas"+ FS +schema+ FS; - String styleSheet = schemaDir + "ogc-"+setName+".xsl"; - // System.out.println("CSW::GetRecordById::RetrieveMetadata - Using stylesheet: "+ styleSheet); + String prefix = (outSchema == OutputSchema.OGC_CORE) ? "ogc" : "iso"; - // System.out.println("CSW::GetRecordById::RetrieveMetadata - Stored metadata: "+ md.getText()); + String styleSheet = schemaDir + prefix + "-"+setName+".xsl"; + //System.out.println("Using stylesheet: "+ styleSheet); + md = Xml.transform(md, styleSheet); - // System.out.println("CSW::GetRecordById::RetrieveMetadata - Transformed metadata: "+ md.getText()); + //System.out.println("Transformed metadata: "+ Xml.getString(md)); //--- needed to detach md from the document md.detach(); return md; } - catch (Exception e) - { + catch (Exception e) { context.error("Raised : "+ e); context.error(" (C) Stacktrace is\n"+Util.getStackTrace(e)); - throw new NoApplicableCodeEx(e.toString()); } } -} - -//============================================================================= - +} \ No newline at end of file Modified: trunk/src/org/fao/geonet/kernel/csw/services/GetRecords.java =================================================================== --- trunk/src/org/fao/geonet/kernel/csw/services/GetRecords.java 2008-08-22 12:38:29 UTC (rev 1490) +++ trunk/src/org/fao/geonet/kernel/csw/services/GetRecords.java 2008-08-22 13:07:36 UTC (rev 1491) @@ -30,16 +30,18 @@ import java.util.Map; import java.util.Set; import java.util.StringTokenizer; + import jeeves.server.context.ServiceContext; import jeeves.utils.Util; import jeeves.utils.Xml; + import org.fao.geonet.constants.Geonet; +import org.fao.geonet.csw.common.ConstraintLanguage; import org.fao.geonet.csw.common.Csw; -import org.fao.geonet.csw.common.Csw.ConstraintLanguage; -import org.fao.geonet.csw.common.Csw.ElementSetName; -import org.fao.geonet.csw.common.Csw.OutputSchema; -import org.fao.geonet.csw.common.Csw.ResultType; -import org.fao.geonet.csw.common.Csw.TypeName; +import org.fao.geonet.csw.common.ElementSetName; +import org.fao.geonet.csw.common.OutputSchema; +import org.fao.geonet.csw.common.ResultType; +import org.fao.geonet.csw.common.TypeName; import org.fao.geonet.csw.common.exceptions.CatalogException; import org.fao.geonet.csw.common.exceptions.InvalidParameterValueEx; import org.fao.geonet.csw.common.exceptions.MissingParameterValueEx; Modified: trunk/src/org/fao/geonet/kernel/csw/services/getrecords/CatalogSearcher.java =================================================================== --- trunk/src/org/fao/geonet/kernel/csw/services/getrecords/CatalogSearcher.java 2008-08-22 12:38:29 UTC (rev 1490) +++ trunk/src/org/fao/geonet/kernel/csw/services/getrecords/CatalogSearcher.java 2008-08-22 13:07:36 UTC (rev 1491) @@ -30,11 +30,13 @@ import java.util.List; import java.util.Set; import java.util.StringTokenizer; + import jeeves.resources.dbms.Dbms; import jeeves.server.context.ServiceContext; import jeeves.utils.Log; import jeeves.utils.Util; import jeeves.utils.Xml; + import org.apache.lucene.document.Document; import org.apache.lucene.index.IndexReader; import org.apache.lucene.index.Term; @@ -46,14 +48,14 @@ import org.apache.lucene.search.TermQuery; import org.fao.geonet.GeonetContext; import org.fao.geonet.constants.Geonet; -import org.fao.geonet.csw.common.Csw.TypeName; +import org.fao.geonet.csw.common.TypeName; import org.fao.geonet.csw.common.exceptions.CatalogException; import org.fao.geonet.csw.common.exceptions.InvalidParameterValueEx; import org.fao.geonet.csw.common.exceptions.NoApplicableCodeEx; import org.fao.geonet.kernel.AccessManager; import org.fao.geonet.kernel.search.LuceneSearcher; +import org.fao.geonet.kernel.search.LuceneUtils; import org.fao.geonet.kernel.search.SearchManager; -import org.fao.geonet.kernel.search.LuceneUtils; import org.jdom.Element; //============================================================================= Modified: trunk/src/org/fao/geonet/kernel/csw/services/getrecords/SearchController.java =================================================================== --- trunk/src/org/fao/geonet/kernel/csw/services/getrecords/SearchController.java 2008-08-22 12:38:29 UTC (rev 1490) +++ trunk/src/org/fao/geonet/kernel/csw/services/getrecords/SearchController.java 2008-08-22 13:07:36 UTC (rev 1491) @@ -27,16 +27,18 @@ import java.util.Iterator; import java.util.List; import java.util.Set; + import jeeves.resources.dbms.Dbms; import jeeves.server.context.ServiceContext; import jeeves.utils.Util; import jeeves.utils.Xml; + import org.fao.geonet.constants.Geonet; import org.fao.geonet.csw.common.Csw; -import org.fao.geonet.csw.common.Csw.ElementSetName; -import org.fao.geonet.csw.common.Csw.OutputSchema; -import org.fao.geonet.csw.common.Csw.ResultType; -import org.fao.geonet.csw.common.Csw.TypeName; +import org.fao.geonet.csw.common.ElementSetName; +import org.fao.geonet.csw.common.OutputSchema; +import org.fao.geonet.csw.common.ResultType; +import org.fao.geonet.csw.common.TypeName; import org.fao.geonet.csw.common.exceptions.CatalogException; import org.fao.geonet.csw.common.exceptions.NoApplicableCodeEx; import org.jdom.Element; ... [truncated message content] |