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