001 /* 002 * LAPIS lightweight structured text processing system 003 * 004 * Copyright (C) 1998-2002 Carnegie Mellon University, 005 * Copyright (C) 2003 Massachusetts Institute of Technology. 006 * All rights reserved. 007 * 008 * This library is free software; you can redistribute it 009 * and/or modify it under the terms of the GNU General 010 * Public License as published by the Free Software 011 * Foundation, version 2. 012 * 013 * LAPIS homepage: http://graphics.lcs.mit.edu/lapis/ 014 */ 015 016 017 package lapisx.util; 018 019 import java.util.*; 020 import java.io.*; 021 022 public class Config extends Properties { 023 File file; 024 IOException lastException; 025 026 public Config (String fileBaseName) { 027 this (fileBaseName, null); 028 } 029 030 public Config (File file) { 031 this (file, null); 032 } 033 034 public Config (String fileBaseName, Config defaults) { 035 this (new File (getHomeDirectory (), fileBaseName), 036 defaults); 037 } 038 039 public Config (File file, Config defaults) { 040 super (defaults); 041 this.file = file; 042 if(file.getParentFile()!=null) 043 file.getParentFile().mkdirs(); 044 try { 045 FileInputStream in = 046 new FileInputStream (file); 047 load (in); 048 in.close (); 049 } catch (IOException e) { 050 lastException = e; 051 } 052 } 053 054 public IOException getLastException () { 055 return lastException; 056 } 057 058 // public String getProperty (String key, String defaultValue) { 059 // String val = super.getProperty (key, defaultValue); 060 // if (val != null && val == defaultValue) 061 // put (key, defaultValue); 062 // return val; 063 // } 064 065 public void save () { 066 try { 067 FileOutputStream out = new FileOutputStream (file); 068 store (out, ""); 069 out.close (); 070 lastException = null; 071 } catch (IOException e) { 072 lastException = e; 073 } 074 } 075 076 public void rename(String fileName) { 077 rename(new File (getHomeDirectory(), fileName)); 078 } 079 080 public void rename(File newFile) { 081 file.delete(); 082 this.file = newFile; 083 if(file.getParentFile()!=null) 084 file.getParentFile().mkdirs(); 085 } 086 087 public int countKeysStartingWith (String prefix) { 088 int n = 0; 089 for (Enumeration e = propertyNames (); e.hasMoreElements (); ) { 090 String name = (String)e.nextElement (); 091 if (name.startsWith (prefix)) 092 ++n; 093 } 094 return n; 095 } 096 097 public void removeAllKeysStartingWith (String prefix) { 098 Vector keysToDelete = new Vector (); 099 for (Enumeration e = propertyNames (); e.hasMoreElements (); ) { 100 String name = (String)e.nextElement (); 101 if (name.startsWith (prefix)) 102 keysToDelete.addElement (name); 103 } 104 105 for (Enumeration e = keysToDelete.elements (); 106 e.hasMoreElements (); ) 107 remove (e.nextElement ()); 108 } 109 110 public static File getHomeDirectory () { 111 String homedir; 112 if ((homedir = System.getProperty ("user.home")) == null 113 && (homedir = System.getProperty ("user.dir")) == null) 114 homedir = "."; 115 116 return new File (homedir); 117 } 118 }