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 }