]> git.somenet.org - irc/pjirc-ng.git/blob - src/main/java/irc/FileTextProvider.java
Pjirc 2.2.1 as available on the net, reformatted and made it compile.
[irc/pjirc-ng.git] / src / main / java / irc / FileTextProvider.java
1 /*****************************************************/\r
2 /*          This java file is a part of the          */\r
3 /*                                                   */\r
4 /*           -  Plouf's Java IRC Client  -           */\r
5 /*                                                   */\r
6 /*   Copyright (C)  2002 - 2005 Philippe Detournay   */\r
7 /*                                                   */\r
8 /*         All contacts : theplouf@yahoo.com         */\r
9 /*                                                   */\r
10 /*  PJIRC is free software; you can redistribute     */\r
11 /*  it and/or modify it under the terms of the GNU   */\r
12 /*  General Public License as published by the       */\r
13 /*  Free Software Foundation; version 2 or later of  */\r
14 /*  the License.                                     */\r
15 /*                                                   */\r
16 /*  PJIRC is distributed in the hope that it will    */\r
17 /*  be useful, but WITHOUT ANY WARRANTY; without     */\r
18 /*  even the implied warranty of MERCHANTABILITY or  */\r
19 /*  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU   */\r
20 /*  General Public License for more details.         */\r
21 /*                                                   */\r
22 /*  You should have received a copy of the GNU       */\r
23 /*  General Public License along with PJIRC; if      */\r
24 /*  not, write to the Free Software Foundation,      */\r
25 /*  Inc., 59 Temple Place, Suite 330, Boston,        */\r
26 /*  MA  02111-1307  USA                              */\r
27 /*                                                   */\r
28 /*****************************************************/\r
29 \r
30 package irc;\r
31 \r
32 import java.io.BufferedReader;\r
33 import java.io.IOException;\r
34 import java.io.InputStream;\r
35 import java.io.InputStreamReader;\r
36 import java.util.Hashtable;\r
37 \r
38 /**\r
39  * Provides text from langage file.\r
40  */\r
41 public class FileTextProvider implements TextProvider {\r
42         private Hashtable _mainlist;\r
43         private Hashtable _backlist;\r
44 \r
45         /**\r
46          * Create a new file text provider.\r
47          * \r
48          * @param fname\r
49          *          langage file name.\r
50          * @param encoding\r
51          *          langage file encoding. Empty string for default encoding.\r
52          * @param backname\r
53          *          backup langage file name.\r
54          * @param backencoding\r
55          *          backup langage file encoding. Empty string for default encoding.\r
56          * @param file\r
57          *          a file handler to load file.\r
58          */\r
59         public FileTextProvider(String fname, String encoding, String backname, String backencoding, FileHandler file) {\r
60                 _mainlist = new Hashtable();\r
61                 _backlist = new Hashtable();\r
62                 load(_mainlist, fname, encoding, file);\r
63                 load(_backlist, backname, backencoding, file);\r
64         }\r
65 \r
66         private void parse(Hashtable dest, String line) {\r
67                 try {\r
68                         int pos = line.indexOf(' ');\r
69                         if (pos == -1)\r
70                                 return;\r
71                         String id = line.substring(0, pos);\r
72                         String end = line.substring(pos + 1).trim();\r
73                         if (line.indexOf('[') != -1) {\r
74                                 pos = line.indexOf(']');\r
75                                 if (pos == -1)\r
76                                         return;\r
77                                 end = line.substring(pos + 1).trim();\r
78                         }\r
79                         int iid = Integer.parseInt(id, 16);\r
80                         end = replace(end, "\\s", " ");\r
81                         dest.put(new Integer(iid), end);\r
82                 } catch (Exception ex) {\r
83                         throw new RuntimeException(ex.toString());\r
84                 }\r
85         }\r
86 \r
87         private void load(Hashtable dest, String fname, String encoding, FileHandler handler) {\r
88                 InputStream stream = handler.getInputStream(fname);\r
89                 if (stream == null)\r
90                         return;\r
91 \r
92                 BufferedReader reader = null;\r
93                 try {\r
94                         if (encoding.length() > 0)\r
95                                 reader = new BufferedReader(new InputStreamReader(stream, encoding));\r
96                         else\r
97                                 reader = new BufferedReader(new InputStreamReader(stream));\r
98                 } catch (Exception ex) {\r
99                         return;\r
100                 }\r
101 \r
102                 try {\r
103                         String line = reader.readLine();\r
104                         while (line != null) {\r
105                                 line = line.trim();\r
106                                 if (line.length() > 0) {\r
107                                         if (line.charAt(0) != '#') {\r
108                                                 parse(dest, line);\r
109                                         }\r
110                                 }\r
111                                 line = reader.readLine();\r
112                         }\r
113                         reader.close();\r
114                 } catch (IOException ex) {\r
115                         ex.printStackTrace();\r
116                 }\r
117 \r
118         }\r
119 \r
120         private String replace(String on, String what, String with) {\r
121                 int pos = on.indexOf(what);\r
122                 while (pos >= 0) {\r
123                         String before = on.substring(0, pos);\r
124                         String after = on.substring(pos + what.length());\r
125                         on = before + with + after;\r
126                         pos = on.indexOf(what);\r
127                 }\r
128                 return on;\r
129         }\r
130 \r
131         @Override\r
132         public String getString(int code, String[] params) {\r
133                 String ans = (String) _mainlist.get(new Integer(code));\r
134                 if (ans == null)\r
135                         ans = (String) _backlist.get(new Integer(code));\r
136                 if (ans == null)\r
137                         ans = (String) _mainlist.get(new Integer(ERROR_NOT_DEFINED));\r
138                 if (ans == null)\r
139                         ans = (String) _backlist.get(new Integer(ERROR_NOT_DEFINED));\r
140                 if (ans == null)\r
141                         return getStringP(ERROR_NOT_DEFINED);\r
142                 for (int i = params.length - 1; i >= 0; i--)\r
143                         ans = replace(ans, "%" + (i + 1), params[i]);\r
144                 return ans;\r
145         }\r
146 \r
147         @Override\r
148         public String getString(int code) {\r
149                 return getString(code, new String[0]);\r
150         }\r
151 \r
152         @Override\r
153         public String getString(int code, String p1) {\r
154                 String p[] = { p1 };\r
155                 return getString(code, p);\r
156         }\r
157 \r
158         @Override\r
159         public String getString(int code, String p1, String p2) {\r
160                 String p[] = { p1, p2 };\r
161                 return getString(code, p);\r
162         }\r
163 \r
164         @Override\r
165         public String getString(int code, String p1, String p2, String p3) {\r
166                 String p[] = { p1, p2, p3 };\r
167                 return getString(code, p);\r
168         }\r
169 \r
170         private String getStringP(int code) {\r
171                 switch (code) {\r
172                 case ERROR_NOT_DEFINED:\r
173                         return "Undefined string";\r
174                 default:\r
175                         return null;\r
176                 }\r
177         }\r
178 \r
179 }\r