1 package com.tapina.robe.swi.msgtrans;
2
3 import java.util.Properties;
4 import java.util.ArrayList;
5 import java.util.Arrays;
6 import java.util.logging.Logger;
7 import java.util.logging.Level;
8 import java.io.FileReader;
9 import java.io.BufferedReader;
10 import java.io.FileNotFoundException;
11 import java.io.IOException;
12
13 /***
14 * This class represents a Messages file loaded with MessageTrans.OpenFile.
15 */
16 public class MessageFile {
17 protected final Logger log = Logger.getLogger(getClass().getName());
18 private static int handleSequence = 0x1001;
19
20 private final int handle;
21 private final Integer handleObject;
22 private final String filename;
23 private final Properties properties;
24
25 public MessageFile(String filename) throws IOException {
26 this.handle = handleSequence++;
27 this.handleObject = new Integer(this.handle);
28 this.filename = filename;
29 this.properties = new Properties();
30 loadMessages();
31 }
32
33 private void loadMessages() throws IOException {
34 BufferedReader reader = new BufferedReader(new FileReader(filename));
35 String line;
36 ArrayList tokens = new ArrayList(5);
37
38 try {
39 for (line = reader.readLine(); line != null; line = reader.readLine()) {
40 final int delimeterPos = line.indexOf(':');
41 final String foundToken = delimeterPos >= 0? line.substring(0, delimeterPos) : line;
42
43 final int slashPos = line.indexOf('/');
44 if (slashPos > 0 && (delimeterPos < 0 || slashPos < delimeterPos)) {
45 tokens.addAll(Arrays.asList(foundToken.split("/")));
46 } else {
47 tokens.add(foundToken);
48 }
49 if (delimeterPos >= 0) {
50 final String value = line.substring(delimeterPos + 1);
51 for (int i = 0; i < tokens.size(); i++) {
52 final String token = (String) tokens.get(i);
53 if (token.indexOf('?') != -1 || token.indexOf('*') != -1) {
54 log.warning("We do not support tokens with wildcards: " + token);
55 }
56 log.finer("Adding message " + token + ':' + value);
57 properties.setProperty(token, value);
58 }
59 tokens.clear();
60 }
61 }
62 } finally {
63 reader.close();
64 }
65 }
66
67 public int getHandle() {
68 return handle;
69 }
70
71 public Object getHandleObject() {
72 return handleObject;
73 }
74
75 public String getFilename() {
76 return filename;
77 }
78
79 public Properties getProperties() {
80 return properties;
81 }
82
83 public String lookup(String token, String defaultValue) {
84 return properties.getProperty(token, defaultValue);
85 }
86 }