package net.varkhan.serv.p2p.connect.config; import net.varkhan.serv.p2p.connect.PeerProperties; import java.util.*; /** * <b></b>. * <p/> * * @author varkhan * @date 5/29/11 * @time 7:19 AM */ public class MapProperties implements PeerProperties { private final RealmProperties[] proptable; public MapProperties() { Realm[] realms=Realm.values(); this.proptable= new RealmProperties[realms.length]; for(int i=0; i<proptable.length; i++) proptable[i] = new RealmProperties(realms[i]); } public MapProperties(PeerProperties props) { this(); setProperties(props); } public String getProperty(String name) { for(RealmProperties r: proptable) { String p = r.getProperty(name); if(p!=null) return p; } return null; } public String getProperty(Realm realm, String name) { return proptable[realm.ordinal()].getProperty(name); } @Override public int getProperty(String name, int def) { for(RealmProperties r: proptable) { String p = r.getProperty(name); if(p!=null) try { return Integer.parseInt(p); } catch(NumberFormatException e) { return def; } } return def; } @Override public int getProperty(Realm realm, String name, int def) { String p = proptable[realm.ordinal()].getProperty(name); try { return Integer.parseInt(p); } catch(NumberFormatException e) { return def; } } @Override public long getProperty(String name, long def) { for(RealmProperties r: proptable) { String p = r.getProperty(name); if(p!=null) try { return Long.parseLong(p); } catch(NumberFormatException e) { return def; } } return def; } @Override public long getProperty(Realm realm, String name, long def) { String p = proptable[realm.ordinal()].getProperty(name); try { return Long.parseLong(p); } catch(NumberFormatException e) { return def; } } public PeerProperties getProperties(Realm realm) { return proptable[realm.ordinal()]; } public Set<String> getPropertyNames() { Set<String> names = new HashSet<String>(); for(RealmProperties r: proptable) names.addAll(r.getPropertyNames()); return names; } public Set<String> getPropertyNames(Realm realm) { return proptable[realm.ordinal()].getPropertyNames(); } public void setProperty(Realm realm, String name, String value) { proptable[realm.ordinal()].setProperty(name,value); } public void setProperties(Realm realm, PeerProperties props) { proptable[realm.ordinal()].setProperties(props); } public void setProperties(PeerProperties props) { for(RealmProperties r: proptable) r.setProperties(props); } private static class RealmProperties implements PeerProperties { public final Realm realm; private final Map<String,String> map= new HashMap<String,String>(); private RealmProperties(Realm realm) { this.realm=realm; } public Realm realm() { return realm; } public String getProperty(String name) { return map.get(name); } public void setProperty(String name,String value) { map.put(name, value); } public void setProperties(PeerProperties props) { for(String n: props.getPropertyNames(realm)) this.map.put(n, props.getProperty(realm, n)); } public String getProperty(Realm realm, String name) { if(realm!=this.realm) return null; return map.get(name); } @Override public int getProperty(String name, int def) { String p=map.get(name); if(p==null) return def; try { return Integer.parseInt(p); } catch(NumberFormatException e) { return def; } } @Override public int getProperty(Realm realm, String name, int def) { if(realm!=this.realm) return def; String p=map.get(name); if(p==null) return def; try { return Integer.parseInt(p); } catch(NumberFormatException e) { return def; } } @Override public long getProperty(String name, long def) { String p=map.get(name); if(p==null) return def; try { return Long.parseLong(p); } catch(NumberFormatException e) { return def; } } @Override public long getProperty(Realm realm, String name, long def) { if(realm!=this.realm) return def; String p=map.get(name); if(p==null) return def; try { return Long.parseLong(p); } catch(NumberFormatException e) { return def; } } public PeerProperties getProperties(Realm realm) { if(realm!=this.realm) return null; return this; } public Set<String> getPropertyNames() { return map.keySet(); } @Override public Set<String> getPropertyNames(Realm realm) { if(realm!=this.realm) return Collections.emptySet(); return map.keySet(); } protected StringBuilder toBuffer(StringBuilder buf) { for(Map.Entry<String,String> p: map.entrySet()) { buf.append(realm.name()).append('.').append(p.getKey()).append(" = ").append(p.getValue()).append('\n'); } return buf; } @Override public String toString() { return toBuffer(new StringBuilder()).toString(); } } @Override public String toString() { StringBuilder buf = new StringBuilder(); for(RealmProperties p: proptable) { p.toBuffer(buf); } return buf.toString(); } }