001 /* 002 * Copyright 2005 [ini4j] Development Team 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 017 package org.ini4j; 018 019 import java.util.prefs.PreferencesFactory; 020 import java.util.prefs.Preferences; 021 import java.util.Properties; 022 import java.io.InputStream; 023 024 import java.net.URI; 025 import java.net.URL; 026 027 public class IniPreferencesFactory implements PreferencesFactory 028 { 029 public static final String PROPERTIES = "ini4j.properties"; 030 031 public static final String KEY_USER = "org.ini4j.prefs.user"; 032 public static final String KEY_SYSTEM = "org.ini4j.prefs.system"; 033 034 private Preferences _system; 035 private Preferences _user; 036 037 public synchronized Preferences systemRoot() 038 { 039 if ( _system == null ) 040 { 041 _system = newIniPreferences(KEY_SYSTEM); 042 } 043 044 return _system; 045 } 046 047 public synchronized Preferences userRoot() 048 { 049 if ( _user == null ) 050 { 051 _user = newIniPreferences(KEY_USER); 052 } 053 054 return _user; 055 } 056 057 protected Preferences newIniPreferences(String key) 058 { 059 Ini ini = new Ini(); 060 061 String location = getIniLocation(key); 062 063 if ( location != null ) 064 { 065 try 066 { 067 ini.load(getResourceAsStream(location)); 068 } 069 catch (Exception x) 070 { 071 throw (IllegalArgumentException) new IllegalArgumentException().initCause(x); 072 } 073 } 074 075 return new IniPreferences(ini); 076 } 077 078 protected String getIniLocation(String key) 079 { 080 String location = System.getProperty(key); 081 082 if ( location == null ) 083 { 084 try 085 { 086 Properties props = new Properties(); 087 props.load(getClass().getClassLoader().getResourceAsStream(PROPERTIES)); 088 location = props.getProperty(key); 089 } 090 catch (Exception x) 091 { 092 ; 093 } 094 } 095 096 return location; 097 } 098 099 protected URL getResource(String location) throws IllegalArgumentException 100 { 101 try 102 { 103 URI uri = new URI(location); 104 URL url; 105 106 if ( uri.getScheme() == null ) 107 { 108 url = getClass().getClassLoader().getResource(location); 109 } 110 else 111 { 112 url = uri.toURL(); 113 } 114 115 return url; 116 } 117 catch (Exception x) 118 { 119 throw (IllegalArgumentException) new IllegalArgumentException().initCause(x); 120 } 121 } 122 123 protected InputStream getResourceAsStream(String location) throws IllegalArgumentException 124 { 125 try 126 { 127 return getResource(location).openStream(); 128 } 129 catch (Exception x) 130 { 131 throw (IllegalArgumentException) new IllegalArgumentException().initCause(x); 132 } 133 } 134 }