001: /*
002: * $Header: /cvsroot/webman-cms/source/webman/com/teamkonzept/lib/TKIniFile.java,v 1.8 2002/01/25 11:43:25 alex Exp $
003: *
004: */
005: /**
006: * Fuer JDK "UNTER" 1.1
007: */package com.teamkonzept.lib;
008:
009: import java.io.*;
010: import java.util.*;
011: import java.net.*;
012: import org.apache.log4j.Category;
013:
014: public class TKIniFile implements ConfigurationErrorCodes {
015: private static Category cat = Category.getInstance(TKIniFile.class);
016:
017: String theIniFile;
018: String emptyPat = " ";
019: String tabPat = " ";
020:
021: /**
022: * Konstruktor
023: * Der Pfad und Filename wird uebergeben und global zur Verfuegung gestellt
024: */
025: public TKIniFile(String theIniFile) {
026: this .theIniFile = theIniFile;
027: }
028:
029: /**
030: * returns an InputStream to the PropertyFile
031: * change this method to use ResourceBundle.loadBundle()
032: */
033: InputStream openInputStream() throws TKException {
034: try {
035: URL url = getClass().getResource(theIniFile);
036: if (url == null) {
037: cat.error("TKUploadField.ini is missing !");
038: throw new TKConfigurationException(
039: "TKUploadField.ini fehlt", NO_PROPERTY_FILE,
040: HIGH_SEVERITY, false, null);
041: }
042: return url.openStream();
043: } catch (IOException e) {
044: cat.error("Can't locate ResourceFile " + theIniFile, e);
045: }
046: return null;
047: }
048:
049: /**
050: * VORSICHT URALT:
051: * inifile OHNE Section!!!!!!!!!!!!!!!!
052: *
053: * Das Inifile:
054: * ============
055: * key1=val1
056: * key2=val2
057: *
058: * @param String key, der zugehoerige Wert wird zurueckgegeben
059: * @return den Wert
060: */
061: public String getValue(String key) throws TKException {
062:
063: try {
064: // FileInputStream inIniFile = new FileInputStream(theIniFile);
065: Properties props = new Properties(); // empty list
066: props.load(openInputStream());
067: String value = props.getProperty(key);
068: return value;
069: } catch (IOException e) {
070: cat.error("Can't open Inifile: ", e);
071: return "";
072: }
073: }
074:
075: /**
076: * VORSICHT URALT:
077: * inifile OHNE Section!!!!!!!!!!!!!!!!
078: *
079: * Das Inifile:
080: * ============
081: * key1=val1
082: * key2=val2
083: *
084: *
085: * List das Inifile ein
086: *
087: * @return Hashtable mit allen key-value-Paaren aus dem inifile.
088: */
089: public TKHashtable getAll() throws TKException {
090:
091: TKHashtable myIniHash = new TKHashtable();
092: try {
093: // FileInputStream inIniFile = new FileInputStream(theIniFile);
094: Properties props = new Properties(); // empty list
095: props.load(openInputStream());
096:
097: Enumeration enumObject = props.propertyNames();
098: while (enumObject.hasMoreElements()) {
099: String key = enumObject.nextElement().toString();
100: String val = props.getProperty(key);
101: myIniHash.put(key, val);
102: }
103:
104: return myIniHash;
105: } catch (IOException e) {
106: cat.error("Can't open Inifile: ", e);
107: myIniHash = null;
108: return myIniHash;
109: }
110:
111: }
112:
113: //***********************************************************************
114: //----------------------- NEU -------------------------------------------
115: //***********************************************************************
116: /**
117: * Alle Sections werden ausgelesen
118: *
119: * Aufbau eines iniFiles:
120: * ======================
121: * #KOMMENTAR
122: *
123: * [SECTION 1]
124: * key_1=val_1
125: * key_2=val_2
126: * ....
127: * key_n=val_n
128: *
129: * ...
130: *
131: * [SECTION N]
132: * key_1=val_1
133: * key_2=val_2
134: * ....
135: * key_n=val_n
136: *
137: * [END]
138: *
139: * @return verschachtelte Hashtable:
140: * key=SECTION, val= key/value-Paare der SECTION
141:
142: */
143:
144: public TKHashtable getAllSections() throws TKException {
145: try {
146: String sectionPat = "[";
147: String comentPat = "#";
148: String splitPat = "=";
149: String merke = "";
150: String sectionKey = "";
151: TKHashtable lineHash = null;
152:
153: TKHashtable sectionsHash = new TKHashtable();
154:
155: // FileInputStream fileInputStream = new FileInputStream(theIniFile );
156: BufferedReader dataInputStream = new BufferedReader(
157: new InputStreamReader(openInputStream()));
158: String line;
159:
160: while ((line = dataInputStream.readLine()) != null) {
161: String key = "";
162: String value = "";
163:
164: if ((line.indexOf(sectionPat) > -1)
165: && (!line.equals(""))) {
166: if (merke.equals("")) {
167: merke = line;
168: sectionKey = line;
169: } else {
170: merke = sectionKey;
171:
172: if (!line.equals("[END]"))
173: sectionKey = line;
174:
175: //---- [SECTIONS] -> key/val-Paare ----//
176: if (line.equals("[END]"))
177: sectionsHash.put(sectionKey.substring(1,
178: sectionKey.length() - 1), lineHash);
179: else
180: sectionsHash.put(merke.substring(1, merke
181: .length() - 1), lineHash);
182:
183: }
184:
185: if (!line.equals("[END]"))
186: lineHash = new TKHashtable();
187:
188: }
189: //---- line key=val ----//
190: else {
191: line = cutEmptyStrings(line);
192: if ((!line.equals(""))
193: && (!line.startsWith(comentPat))) {
194: int idx = line.indexOf(splitPat);
195: if (idx > -1) {
196: key = line.substring(0, idx);
197: value = line.substring(idx + 1, line
198: .length());
199: lineHash.put(key, value);
200: }
201: }
202: }
203: }
204:
205: //TKHttp.out().println("<br><b>sectionsHash: </b>"+sectionsHash);
206: return sectionsHash;
207:
208: } catch (IOException e) {
209: cat.error("Can't open Inifile: ", e);
210: return null;
211: }
212:
213: }
214:
215: //***********************************************************************
216: /**
217: * Beginnen eingelesene Zeilen mit eine Leerzeichen oder einem Tab,
218: * so werden diese entfernt
219: *
220: * @param String line, eine Zeile des Inifiles
221: *
222: * @return eine Zeile des Inifiles, die nicht mit einem Leerzeichen oder eine tab beginnt
223: */
224: public String cutEmptyStrings(String line) {
225:
226: if (!line.equals("")) {
227:
228: while (line.startsWith(emptyPat) || line.startsWith(tabPat)) {
229:
230: if (line.startsWith(emptyPat))
231: line = emptyString(line);
232:
233: if (line.startsWith(tabPat))
234: line = tabString(line);
235:
236: }
237: }
238: return line;
239: }
240:
241: //***********************************************************************
242: /**
243: * Beginnt eine eingelesene Zeile mit eine Leerzeichen,
244: * so werden diese entfernt
245: *
246: * @param String line, eine Zeile des Inifiles
247: *
248: * @return eine Zeile des Inifiles, die nicht mit einem Leerzeichen beginnt
249: */
250: public String emptyString(String line) {
251:
252: while (line.startsWith(emptyPat))
253: line = line.substring(1, line.length());
254:
255: return line;
256: }
257:
258: //***********************************************************************
259: /**
260: * Beginnt eine eingelesene Zeile mit einem Tab,
261: * so werden diese entfernt
262: *
263: * @param String line, eine Zeile des Inifiles
264: *
265: * @return eine Zeile des Inifiles, die nicht mit einem Tab beginnt
266: */
267: public String tabString(String line) {
268:
269: while (line.startsWith(tabPat))
270: line = line.substring(1, line.length());
271:
272: return line;
273: }
274:
275: //***********************************************************************
276: /**
277: * Die key/val-paare einer bestimten Section werden ausgelesen
278: * Inifile-Objekt wird erzeugt
279: *
280: * @param String section, eine [SECTION]
281: * @return verschachtelte Hashtable:
282: */
283: public TKHashtable getOneSection(String section) throws TKException {
284:
285: TKHashtable iniHash = getAllSections();
286: TKHashtable contentHash = (TKHashtable) iniHash.get(section);
287: return contentHash;
288:
289: }
290:
291: //***********************************************************************
292: /**
293: * Die key/val-paare einer bestimten Section werden ausgelesen
294: * Es wird kein Inifile-Objekt erzeugt
295: *
296: * @param String section, eine [SECTION]
297: * @param TKHashtable iniHash, Hashtable mit allen sections
298: *
299: * @return Hashtable mit den key/val-paaren einer Section
300: */
301: public TKHashtable getOneSection(String section, TKHashtable iniHash) {
302:
303: TKHashtable contentHash = (TKHashtable) iniHash.get(section);
304: return contentHash;
305:
306: }
307:
308: //***********************************************************************
309: /**
310: * Die Values einer section werden gelesen
311: * Inifile-Objekt wird erzeugt
312: *
313: * @param String section, eine [SECTION]
314: *
315: * @return Vector mit allen Values einer Section
316: */
317: public TKVector getValsFromOneSection(String section)
318: throws TKException {
319: TKHashtable iniHash = getAllSections();
320: return getKeysFromOneSection(section, iniHash);
321:
322: }
323:
324: //***********************************************************************
325: /**
326: * Die Keys einer section werden gelesen
327: * Inifile-Objekt wird erzeugt
328: *
329: * @param String section, eine [SECTION]
330: *
331: * @return Vector mit allen Keys einer Section
332: */
333: public TKVector getValsFromOneSection(String section,
334: TKHashtable iniHash) {
335:
336: TKVector valVector = new TKVector();
337: TKHashtable contentHash = (TKHashtable) iniHash.get(section);
338:
339: Enumeration contentEnum = contentHash.keys();
340: while (contentEnum.hasMoreElements()) {
341: String contentKey = (String) contentEnum.nextElement();
342: String contentVal = (String) contentHash.get(contentKey);
343: valVector.addElement(contentVal);
344: }
345:
346: return valVector;
347: }
348:
349: //***********************************************************************
350: /**
351: * Die Keys einer section werden gelesen
352: * Es wird kein Inifile-Objekt erzeugt
353: *
354: * @param String section, eine [SECTION]
355: * @param TKHashtable iniHash, Hashtable mit allen Sections
356: *
357: * @return Vector mit allen Keys einer Section
358: */
359:
360: public TKVector getKeysFromOneSection(String section)
361: throws TKException {
362: TKHashtable iniHash = getAllSections();
363: return getKeysFromOneSection(section, iniHash);
364:
365: }
366:
367: //***********************************************************************
368: /**
369: * Die Keys einer section werden gelesen
370: * Es wird kein Inifile-Objekt erzeugt
371: *
372: * @param String section, eine [SECTION]
373: * @param TKHashtable iniHash, Hashtable mit allen Sections
374: *
375: * @return Vector mit allen Keys einer Section
376: */
377:
378: public TKVector getKeysFromOneSection(String section,
379: TKHashtable iniHash) {
380:
381: TKVector keyVector = new TKVector();
382: TKHashtable contentHash = (TKHashtable) iniHash.get(section);
383:
384: Enumeration contentEnum = contentHash.keys();
385: while (contentEnum.hasMoreElements()) {
386: String contentKey = (String) contentEnum.nextElement();
387: keyVector.addElement(contentKey);
388: }
389:
390: return keyVector;
391: }
392: }
|