001 //$HeadURL: https://sushibar/svn/deegree/base/trunk/src/org/deegree/framework/xml/Arc2ISO.java $ 002 /*---------------- FILE HEADER ------------------------------------------ 003 004 Contact: 005 006 Andreas Poth 007 lat/lon GmbH 008 Aennchenstr. 19 009 53177 Bonn 010 Germany 011 E-Mail: poth@lat-lon.de 012 013 ---------------------------------------------------------------------------*/ 014 package org.deegree.ogcwebservices.csw.iso_profile; 015 016 import java.text.DecimalFormat; 017 import java.util.HashMap; 018 import java.util.Map; 019 020 import org.deegree.framework.log.ILogger; 021 import org.deegree.framework.log.LoggerFactory; 022 import org.deegree.framework.util.StringTools; 023 import org.deegree.framework.xml.XMLTools; 024 import org.w3c.dom.Node; 025 026 /** 027 * @version $Revision: 6259 $ 028 * @author <a href="mailto:poth@lat-lon.de">Andreas Poth</a> 029 * @author last edited by: $Author: bezema $ 030 * 031 * @version $Revision: 6259 $, $Date: 2007-03-20 10:15:15 +0100 (Di, 20 Mrz 2007) $ 032 */ 033 public class Arc2ISO { 034 035 private static ILogger LOG = LoggerFactory.getLogger( Arc2ISO.class ); 036 037 private static Map<String, String> roleCd = new HashMap<String, String>(); 038 039 private static Map<String, String> geomObjTypeCd = new HashMap<String, String>(); 040 041 private static Map<String, String> dateTypCd = new HashMap<String, String>(); 042 043 private static Map<String, String> topCatCd = new HashMap<String, String>(); 044 045 private static Map<String, String> charSetCd = new HashMap<String, String>(); 046 047 private static Map<String, String> securityCd = new HashMap<String, String>(); 048 049 private static Map<String, String> maintenanceCd = new HashMap<String, String>(); 050 051 private static Map<String, String> progressCd = new HashMap<String, String>(); 052 053 private static Map<String, String> mediumNameCd = new HashMap<String, String>(); 054 055 private static Map<String, String> mediumFormatCd = new HashMap<String, String>(); 056 057 static { 058 // fill role code map 059 roleCd.put( "001", "resourceProvider" ); 060 roleCd.put( "002", "custodian" ); 061 roleCd.put( "003", "owner" ); 062 roleCd.put( "004", "user" ); 063 roleCd.put( "005", "distributor" ); 064 roleCd.put( "006", "originator" ); 065 roleCd.put( "007", "pointOfContact" ); 066 roleCd.put( "008", "principalInvestigator" ); 067 roleCd.put( "009", "processor" ); 068 roleCd.put( "010", "publisher" ); 069 roleCd.put( "011", "author" ); 070 071 // fill GeometricObjectTypeCode map 072 geomObjTypeCd.put( "Point", "point" ); 073 geomObjTypeCd.put( "MultiPoint", "NO MATCHING AVAILABLE" ); 074 geomObjTypeCd.put( "Polyline", "curve" ); 075 geomObjTypeCd.put( "Polygon", "surface" ); 076 geomObjTypeCd.put( "Arc", "NO MATCHING AVAILABLE" ); 077 geomObjTypeCd.put( "Node", "NO MATCHING AVAILABLE" ); 078 geomObjTypeCd.put( "Region", "NO MATCHING AVAILABLE" ); 079 geomObjTypeCd.put( "Route", "NO MATCHING AVAILABLE" ); 080 geomObjTypeCd.put( "Tic", "NO MATCHING AVAILABLE" ); 081 geomObjTypeCd.put( "Label", "NO MATCHING AVAILABLE" ); 082 geomObjTypeCd.put( "Annotation", "NO MATCHING AVAILABLE" ); 083 geomObjTypeCd.put( "Triangle", "NO MATCHING AVAILABLE" ); 084 geomObjTypeCd.put( "Edge", "NO MATCHING AVAILABLE" ); 085 086 // fill dateTypCd map 087 dateTypCd.put( "001", "creation" ); 088 dateTypCd.put( "002", "publication" ); 089 dateTypCd.put( "003", "revision" ); 090 091 // fill topic category code map 092 topCatCd.put( "001", "farming" ); 093 topCatCd.put( "002", "biota" ); 094 topCatCd.put( "003", "boundaries" ); 095 topCatCd.put( "004", "climatologyMeteorologyAtmosphere" ); 096 topCatCd.put( "005", "economy" ); 097 topCatCd.put( "006", "elevation" ); 098 topCatCd.put( "007", "environment" ); 099 topCatCd.put( "008", "geoscientificInformation" ); 100 topCatCd.put( "009", "health" ); 101 topCatCd.put( "010", "imageryBaseMapsEarthCover" ); 102 topCatCd.put( "011", "intelligenceMilitary" ); 103 topCatCd.put( "012", "inlandWaters" ); 104 topCatCd.put( "013", "location" ); 105 topCatCd.put( "014", "oceans" ); 106 topCatCd.put( "015", "planningCadastre" ); 107 topCatCd.put( "016", "society" ); 108 topCatCd.put( "017", "structure" ); 109 topCatCd.put( "018", "transportation" ); 110 topCatCd.put( "019", "utilitiesCommunication" ); 111 112 // fill MD_CharacterSetCode list 113 charSetCd.put( "003", "utf7" ); 114 charSetCd.put( "004", "utf8" ); 115 charSetCd.put( "005", "utf16" ); 116 charSetCd.put( "006", "8859part1" ); 117 charSetCd.put( "007", "8859part2" ); 118 charSetCd.put( "025", "usAscii" ); 119 120 // fill MD_ClassificationCode list 121 securityCd.put( "Top secret", "topSecret" ); 122 securityCd.put( "Secret", "secret" ); 123 securityCd.put( "Confidential", "confidential" ); 124 securityCd.put( "Restricted", "restricted" ); 125 securityCd.put( "Unclassified", "unclassified" ); 126 securityCd.put( "Sensitive", "unclassified" ); 127 128 // fill MD_MaintenanceFrequencyCode list 129 maintenanceCd.put( "Continually", "continual" ); 130 maintenanceCd.put( "Daily", "daily" ); 131 maintenanceCd.put( "Weekly", "weekly" ); 132 maintenanceCd.put( "Monthly", "monthly" ); 133 maintenanceCd.put( "Annually", "annually" ); 134 maintenanceCd.put( "Unknown", "unknown" ); 135 maintenanceCd.put( "As needed", "asNeeded" ); 136 maintenanceCd.put( "Irregular", "irregular" ); 137 maintenanceCd.put( "None planned", "notPlanned" ); 138 139 progressCd.put( "Complete", "completed" ); 140 progressCd.put( "In work", "onGoing" ); 141 progressCd.put( "Planned", "planned" ); 142 143 mediumNameCd.put( "CD-ROM", "cdRom" ); 144 mediumNameCd.put( "DVD", "dvd" ); 145 mediumNameCd.put( "DVD-ROM", "dvdRom" ); 146 mediumNameCd.put( "3-1/2 inch floppy disk", "3halfInchFloppy" ); 147 mediumNameCd.put( "5-1/4 inch floppy disk", "5quarterInchFloppy" ); 148 mediumNameCd.put( "7-track tape", "7trackTape" ); 149 mediumNameCd.put( "9-track tape", "9trackTape" ); 150 mediumNameCd.put( "4 mm cartridge tape", "4mmCartridgeTape" ); 151 mediumNameCd.put( "8 mm cartridge tape", "8mmCartridgeTape" ); 152 mediumNameCd.put( "1/4-inch cartridge tape", "1quarterInchCartridgeTape" ); 153 154 mediumFormatCd.put( "cpio", "cpio" ); 155 mediumNameCd.put( "tar", "tar" ); 156 mediumNameCd.put( "High Sierra", "highSierra" ); 157 mediumNameCd.put( "ISO 9660", "iso9660" ); 158 mediumNameCd.put( "ISO 9660 with Rock Ridge extensions", "iso9660RockRidge" ); 159 mediumNameCd.put( "ISO 9660 with Apple HFS extensions", "iso9660AppleHFS" ); 160 } 161 162 /** 163 * transforms a esri arc catalog date into a ISO8601 date format 164 * 165 * @param node 166 * @return 167 */ 168 public static String getISODate( Node node ) { 169 String result = "0000-01-01"; 170 String s = XMLTools.getStringValue( node ); 171 if ( s.length() == 8 ) { 172 String y = s.substring( 0, 4 ); 173 String m = s.substring( 4, 6 ); 174 String d = s.substring( 6, s.length() ); 175 result = y + '-' + m + '-' + d; 176 } else if ( s.length() == 4 ) { 177 String y = s.substring( 0, 4 ); 178 result = y + "-01-01"; 179 } 180 return result; 181 } 182 183 /** 184 * transforms a esri arc catalog date into a ISO8601 date format 185 * 186 * @param node 187 * @return 188 */ 189 public static String getISODate2( Node node ) { 190 191 String s = XMLTools.getStringValue( node ); 192 LOG.logDebug( "s: " + s ); 193 String[] arr = StringTools.toArray( s, ".", false ); 194 195 return arr[2] + '-' + arr[1] + '-' + arr[0]; 196 197 } 198 199 /** 200 * transforms a esri arc catalog date into a ISO8601 date format 201 * 202 * @param node 203 * @return 204 */ 205 public static String getISOTime( Node node ) { 206 String result = "00:00:00"; 207 String s = XMLTools.getStringValue( node ); 208 LOG.logDebug( "s: " + s ); 209 if ( s.length() == 6 ) { 210 String std = s.substring( 0, 2 ); 211 String m = s.substring( 2, 4 ); 212 String sec = s.substring( 4, 6 ); 213 result = std + ':' + m + ':' + sec; 214 } 215 return result; 216 } 217 218 /** 219 * returns the role code value matching the passed role code ID 220 * 221 * @param node 222 * @return 223 */ 224 public static String getRoleCode( Node node ) { 225 return roleCd.get( XMLTools.getStringValue( node ) ); 226 } 227 228 /** 229 * returns the role security code value matching the passed security code ID 230 * 231 * @param node 232 * @return the role security code value matching the passed security code ID 233 */ 234 public static String getSecurityCode( Node node ) { 235 if ( securityCd.containsKey( XMLTools.getStringValue( node ) ) ) { 236 return securityCd.get( XMLTools.getStringValue( node ) ); 237 } 238 return "unclassified"; 239 240 } 241 242 /** 243 * returns the role security code value matching the passed security code ID 244 * 245 * @param node 246 * @return the role security code value matching the passed security code ID 247 */ 248 public static String getMaintenanceCode( Node node ) { 249 if ( maintenanceCd.containsKey( XMLTools.getStringValue( node ) ) ) { 250 return maintenanceCd.get( XMLTools.getStringValue( node ) ); 251 } 252 return "unknown"; 253 254 } 255 256 /** 257 * returns the GeometricObjectTypeCode value matching the passed ESRI efeageom value 258 * 259 * @param node 260 * @return the GeometricObjectTypeCode value matching the passed ESRI 261 */ 262 public static String getGeometricObjectTypeCode( Node node ) { 263 return geomObjTypeCd.get( XMLTools.getStringValue( node ) ); 264 } 265 266 /** 267 * returns the date type code value matching the passed date type code ID 268 * 269 * @param node 270 * @return the date type code value matching the passed date type code ID 271 */ 272 public static String getDateTypeCode( Node node ) { 273 return dateTypCd.get( XMLTools.getStringValue( node ) ); 274 } 275 276 /** 277 * returns the topic category code value matching the passed topic category code ID. As default 278 * 'geoscientificInformation' will be returned if passed node is null. 279 * 280 * @param node 281 * @return 282 */ 283 public static String getTopCatTypeCode( Node node ) { 284 if ( node != null ) { 285 return topCatCd.get( XMLTools.getStringValue( node ) ); 286 } 287 return "geoscientificInformation"; 288 } 289 290 /** 291 * returns the CharacterSetCode value matching the passed CharacterSetCode ID 292 * 293 * @param node 294 * @return the CharacterSetCode value matching the passed 295 */ 296 public static String getCharacterSetCode( Node node ) { 297 return charSetCd.get( XMLTools.getStringValue( node ) ); 298 } 299 300 /** 301 * formats a number to a String formatted: ###.## 302 * 303 * @param node 304 * @return 305 */ 306 public static String formatCoord( Node node ) { 307 String s = XMLTools.getStringValue( node ); 308 DecimalFormat dc = new DecimalFormat( "###.##" ); 309 return dc.format( Double.parseDouble( s ) ).replace( ',', '.' ); 310 } 311 312 /** 313 * returns the ProgressCode value matching the passed progressCode 314 * 315 * @param node 316 * @return the ProgressCode value matching the passed progressCode 317 */ 318 public static String getProgressCode( Node node ) { 319 return progressCd.get( XMLTools.getStringValue( node ) ); 320 } 321 322 /** 323 * returns the MediumNameCode value matching the passed MediumNameCode 324 * 325 * @param node 326 * @return the MediumNameCode value matching the passed MediumNameCode 327 */ 328 public static String getMediumNameCode( Node node ) { 329 if ( mediumNameCd.containsKey( XMLTools.getStringValue( node ) ) ) { 330 return mediumNameCd.get( XMLTools.getStringValue( node ) ); 331 } 332 return "UNKNOWN"; 333 334 } 335 336 /** 337 * returns the MediumFormatCode value matching the passed MediumFormatCode 338 * 339 * @param node 340 * @return the MediumFormatCode value matching the passed MediumFormatCode 341 */ 342 public static String getMediumFormatCode( Node node ) { 343 if ( mediumFormatCd.containsKey( XMLTools.getStringValue( node ) ) ) { 344 return mediumFormatCd.get( XMLTools.getStringValue( node ) ); 345 } 346 return "UNKNOWN"; 347 348 } 349 }