001 package org.deegree.ogcwebservices.csw.iso_profile;
002
003 import java.io.BufferedReader;
004 import java.io.IOException;
005 import java.io.InputStream;
006 import java.io.InputStreamReader;
007 import java.util.Properties;
008
009 import org.deegree.framework.util.IDGenerator;
010 import org.deegree.framework.util.StringTools;
011 import org.deegree.framework.xml.NamespaceContext;
012 import org.deegree.framework.xml.XMLParsingException;
013 import org.deegree.framework.xml.XMLTools;
014 import org.deegree.ogcbase.CommonNamespaces;
015 import org.w3c.dom.Node;
016
017 /**
018 *
019 *
020 * @version $Revision: 1.9 $
021 * @author <a href="mailto:poth@lat-lon.de">Andreas Poth</a>
022 * @author last edited by: $Author: buesching $
023 *
024 * @version 1.0. $Revision: 1.9 $, $Date: 2008-01-25 14:36:09 $
025 *
026 * @since 2.0
027 */
028 public class Mapping2_0_2 {
029
030 private static IDGenerator idgen = IDGenerator.getInstance();
031
032 private static Properties mapping = null;
033
034 private Properties nsp = null;
035
036 private static Properties namespaces = new Properties();
037
038 private static Properties namespacesInverse = new Properties();
039
040 static {
041 mapping = new Properties();
042 try {
043 InputStream is = Mapping2_0_2.class.getResourceAsStream( "mapping2_0_2.properties" );
044 InputStreamReader isr = new InputStreamReader( is );
045 BufferedReader br = new BufferedReader( isr );
046 String line = null;
047 while ( ( line = br.readLine() ) != null ) {
048 if ( !line.trim().startsWith( "#" ) ) {
049 String[] tmp = StringTools.toArray( line.trim(), "=", false );
050 if ( tmp[0].startsWith( "$namespace." ) ) {
051 String pre = tmp[0].substring( tmp[0].indexOf( '.' ) + 1, tmp[0].length() );
052 namespaces.put( pre, tmp[1] );
053 namespacesInverse.put( tmp[1], pre );
054 } else {
055 mapping.put( tmp[0], tmp[1] );
056 }
057 }
058 }
059 } catch ( IOException e ) {
060 e.printStackTrace();
061 }
062 }
063
064 private static NamespaceContext nsc = CommonNamespaces.getNamespaceContext();
065
066 /**
067 * maps a property name of GetRecords, Delete and Update request from the catalogue schema to
068 * the underlying WFS schema
069 *
070 * @param node
071 * @return
072 * @throws XMLParsingException
073 */
074 public String mapPropertyValue( Node node, String nspDec )
075 throws XMLParsingException {
076 if ( nsp == null ) {
077 createNsp( nspDec );
078 }
079
080 String s = XMLTools.getNodeAsString( node, ".", nsc, null );
081 String prefix = s.substring( 0, s.indexOf( ':' ) );
082 String localPre = namespacesInverse.getProperty( nsp.getProperty( prefix ) );
083
084 String propertyValue = "./" + localPre + s.substring( s.indexOf( ':' ) );
085 propertyValue = mapping.getProperty( propertyValue );
086
087 return propertyValue;
088
089 }
090
091 private void createNsp( String nspDec ) {
092 nsp = new Properties();
093 String[] tmp = StringTools.toArray( nspDec, ";", false );
094 for ( int i = 0; i < tmp.length; i++ ) {
095 int p = tmp[i].indexOf( ':' );
096 String pre = tmp[i].substring( 0, p );
097 String val = tmp[i].substring( p + 1 );
098 nsp.put( pre, val );
099 }
100
101 }
102
103 /**
104 * maps property names for sorting from the catalogue schema to the underlying WFS schema
105 *
106 * @param node
107 * @return
108 * @throws XMLParsingException
109 */
110 public String mapSortProperty( Node node, String nspDec )
111 throws XMLParsingException {
112 if ( nsp == null ) {
113 createNsp( nspDec );
114 }
115
116 String s = XMLTools.getNodeAsString( node, ".", nsc, null );
117 String prefix = s.substring( 0, s.indexOf( ':' ) );
118 String localPre = namespacesInverse.getProperty( nsp.getProperty( prefix ) );
119
120 String propertyValue = "./sortby/" + localPre + s.substring( s.indexOf( ':' ) );
121 propertyValue = mapping.getProperty( propertyValue );
122
123 return propertyValue;
124 }
125
126 public String getLiteralValueIsLike( Node node, String propName, String wildCard )
127 throws XMLParsingException {
128
129 String literal = XMLTools.getNodeAsString( node, ".", nsc, null );
130 String propertyName = propName.substring( propName.indexOf( ':' ) + 1 );
131
132 String newLiteral = literal;
133 if ( propertyName.equals( "subject" ) || propertyName.equals( "AlternateTitle" )
134 || propertyName.equals( "ResourceIdentifier" ) || propertyName.equals( "ResourceLanguage" )
135 || propertyName.equals( "AlternateTitle" ) || propertyName.equals( "ResourceIdentifier" )
136 || propertyName.equals( "GeographicDescripionCode" ) || propertyName.equals( "TopicCategory" ) ) {
137 newLiteral = StringTools.concat( 500, "%|", wildCard, literal, wildCard, "|%" );
138 }
139
140 return newLiteral;
141 }
142
143 public String getLiteralValueIsEqualTo( Node node )
144 throws XMLParsingException {
145 String literal = XMLTools.getNodeAsString( node, ".", nsc, null );
146 return StringTools.concat( 100, "%|", literal, "|%" );
147 }
148
149 public static String getId(){
150 return "unknown" + Long.toString( idgen.generateUniqueID() );
151 }
152
153 }