001 //$HeadURL: https://sushibar/svn/deegree/base/trunk/src/org/deegree/framework/xml/Arc2ISO.java $ 002 /*---------------------------------------------------------------------------- 003 This file is part of deegree, http://deegree.org/ 004 Copyright (C) 2001-2009 by: 005 Department of Geography, University of Bonn 006 and 007 lat/lon GmbH 008 009 This library is free software; you can redistribute it and/or modify it under 010 the terms of the GNU Lesser General Public License as published by the Free 011 Software Foundation; either version 2.1 of the License, or (at your option) 012 any later version. 013 This library is distributed in the hope that it will be useful, but WITHOUT 014 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 015 FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more 016 details. 017 You should have received a copy of the GNU Lesser General Public License 018 along with this library; if not, write to the Free Software Foundation, Inc., 019 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 020 021 Contact information: 022 023 lat/lon GmbH 024 Aennchenstr. 19, 53177 Bonn 025 Germany 026 http://lat-lon.de/ 027 028 Department of Geography, University of Bonn 029 Prof. Dr. Klaus Greve 030 Postfach 1147, 53001 Bonn 031 Germany 032 http://www.geographie.uni-bonn.de/deegree/ 033 034 e-mail: info@deegree.org 035 ----------------------------------------------------------------------------*/ 036 037 package org.deegree.ogcwebservices.csw.iso_profile; 038 039 import java.io.BufferedReader; 040 import java.io.IOException; 041 import java.io.InputStream; 042 import java.io.InputStreamReader; 043 import java.util.Properties; 044 045 import org.deegree.framework.util.IDGenerator; 046 import org.deegree.framework.util.StringTools; 047 import org.deegree.framework.xml.NamespaceContext; 048 import org.deegree.framework.xml.XMLParsingException; 049 import org.deegree.framework.xml.XMLTools; 050 import org.deegree.ogcbase.CommonNamespaces; 051 import org.w3c.dom.Node; 052 053 /** 054 * 055 * @author <a href="mailto:poth@lat-lon.de">Andreas Poth</a> 056 * @author last edited by: $Author: buesching $ 057 * 058 * @version $Revision: 1.9 $, $Date: 2008-01-25 14:36:09 $ 059 */ 060 public class Mapping2_0_2 { 061 062 private static IDGenerator idgen = IDGenerator.getInstance(); 063 064 private static Properties mapping = null; 065 066 private Properties nsp = null; 067 068 private static Properties namespaces = new Properties(); 069 070 private static Properties namespacesInverse = new Properties(); 071 072 static { 073 mapping = new Properties(); 074 try { 075 InputStream is = Mapping2_0_2.class.getResourceAsStream( "mapping2_0_2.properties" ); 076 InputStreamReader isr = new InputStreamReader( is ); 077 BufferedReader br = new BufferedReader( isr ); 078 String line = null; 079 while ( ( line = br.readLine() ) != null ) { 080 if ( !line.trim().startsWith( "#" ) ) { 081 String[] tmp = StringTools.toArray( line.trim(), "=", false ); 082 if ( tmp[0].startsWith( "$namespace." ) ) { 083 String pre = tmp[0].substring( tmp[0].indexOf( '.' ) + 1, tmp[0].length() ); 084 namespaces.put( pre, tmp[1] ); 085 namespacesInverse.put( tmp[1], pre ); 086 } else { 087 mapping.put( tmp[0], tmp[1] ); 088 } 089 } 090 } 091 } catch ( IOException e ) { 092 e.printStackTrace(); 093 } 094 } 095 096 private static NamespaceContext nsc = CommonNamespaces.getNamespaceContext(); 097 098 /** 099 * maps a property name of GetRecords, Delete and Update request from the catalogue schema to 100 * the underlying WFS schema 101 * 102 * @param node 103 * @param nspDec 104 * @return the value 105 * @throws XMLParsingException 106 */ 107 public String mapPropertyValue( Node node, String nspDec ) 108 throws XMLParsingException { 109 if ( nsp == null ) { 110 createNsp( nspDec ); 111 } 112 113 String s = XMLTools.getNodeAsString( node, ".", nsc, null ); 114 String prefix = s.substring( 0, s.indexOf( ':' ) ); 115 String localPre = namespacesInverse.getProperty( nsp.getProperty( prefix ) ); 116 117 String propertyValue = "./" + localPre + s.substring( s.indexOf( ':' ) ); 118 propertyValue = mapping.getProperty( propertyValue ); 119 120 return propertyValue; 121 122 } 123 124 private void createNsp( String nspDec ) { 125 nsp = new Properties(); 126 String[] tmp = StringTools.toArray( nspDec, ";", false ); 127 for ( int i = 0; i < tmp.length; i++ ) { 128 int p = tmp[i].indexOf( ':' ); 129 String pre = tmp[i].substring( 0, p ); 130 String val = tmp[i].substring( p + 1 ); 131 nsp.put( pre, val ); 132 } 133 134 } 135 136 /** 137 * maps property names for sorting from the catalogue schema to the underlying WFS schema 138 * 139 * @param node 140 * @param nspDec 141 * @return the property 142 * @throws XMLParsingException 143 */ 144 public String mapSortProperty( Node node, String nspDec ) 145 throws XMLParsingException { 146 if ( nsp == null ) { 147 createNsp( nspDec ); 148 } 149 150 String s = XMLTools.getNodeAsString( node, ".", nsc, null ); 151 String prefix = s.substring( 0, s.indexOf( ':' ) ); 152 String localPre = namespacesInverse.getProperty( nsp.getProperty( prefix ) ); 153 154 String propertyValue = "./sortby/" + localPre + s.substring( s.indexOf( ':' ) ); 155 propertyValue = mapping.getProperty( propertyValue ); 156 157 return propertyValue; 158 } 159 160 /** 161 * @param node 162 * @param propName 163 * @param wildCard 164 * @return the literal 165 * @throws XMLParsingException 166 */ 167 public String getLiteralValueIsLike( Node node, String propName, String wildCard ) 168 throws XMLParsingException { 169 170 String literal = XMLTools.getNodeAsString( node, ".", nsc, null ); 171 String propertyName = propName.substring( propName.indexOf( ':' ) + 1 ); 172 173 String newLiteral = literal; 174 if ( propertyName.equals( "subject" ) || propertyName.equals( "AlternateTitle" ) 175 || propertyName.equals( "ResourceIdentifier" ) || propertyName.equals( "ResourceLanguage" ) 176 || propertyName.equals( "AlternateTitle" ) || propertyName.equals( "ResourceIdentifier" ) 177 || propertyName.equals( "GeographicDescriptionCode" ) || propertyName.equals( "TopicCategory" ) ) { 178 newLiteral = StringTools.concat( 500, "%|", wildCard, literal, wildCard, "|%" ); 179 } 180 181 return newLiteral; 182 } 183 184 /** 185 * @param node 186 * @return the value 187 * @throws XMLParsingException 188 */ 189 public String getLiteralValueIsEqualTo( Node node ) 190 throws XMLParsingException { 191 String literal = XMLTools.getNodeAsString( node, ".", nsc, null ); 192 return StringTools.concat( 100, "%|", literal, "|%" ); 193 } 194 195 /** 196 * @return a new generated id 197 */ 198 public static String getId() { 199 return "unknown" + Long.toString( idgen.generateUniqueID() ); 200 } 201 202 }