View Javadoc

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  }