Révision 1238
| tmp/org.txm.translate.rcp/src/org/txm/rcp/translate/i18n/PluginMessages.java (revision 1238) | ||
|---|---|---|
| 9 | 9 |
import java.io.PrintWriter; |
| 10 | 10 |
import java.io.UnsupportedEncodingException; |
| 11 | 11 |
import java.util.ArrayList; |
| 12 |
import java.util.Arrays; |
|
| 12 | 13 |
import java.util.HashMap; |
| 13 | 14 |
import java.util.LinkedHashSet; |
| 14 | 15 |
import java.util.Map; |
| 15 | 16 |
import java.util.Properties; |
| 16 | 17 |
|
| 17 |
import org.apache.tools.ant.types.resources.First; |
|
| 18 |
import org.apache.commons.io.FilenameUtils; |
|
| 19 |
import org.apache.commons.lang.StringUtils; |
|
| 18 | 20 |
import org.txm.utils.BiHashMap; |
| 19 | 21 |
import org.txm.utils.io.IOUtils; |
| 20 | 22 |
|
| ... | ... | |
| 27 | 29 |
*/ |
| 28 | 30 |
public class PluginMessages {
|
| 29 | 31 |
|
| 30 |
File projectDirectory; |
|
| 31 |
File messageFile; |
|
| 32 |
|
|
| 32 | 33 |
public static String ENCODING = "UTF-8"; |
| 33 |
|
|
| 34 | 34 |
public boolean debug = true; |
| 35 |
|
|
| 36 |
/** |
|
| 37 |
* Project root directory. |
|
| 38 |
*/ |
|
| 39 |
protected File projectDirectory; |
|
| 35 | 40 |
|
| 41 |
/** |
|
| 42 |
* Java message file, eg.: TXMCoreMessages.java, ConcordanceUIMessages.java, etc. |
|
| 43 |
*/ |
|
| 44 |
protected File javaMessageFile; |
|
| 45 |
|
|
| 46 |
/** |
|
| 47 |
* Source files of the project. |
|
| 48 |
*/ |
|
| 49 |
protected ArrayList<File> srcFiles; |
|
| 50 |
|
|
| 51 |
/** |
|
| 52 |
* Extensions to use when creating the source files list. |
|
| 53 |
*/ |
|
| 54 |
protected String[] srcFilesExtensions = new String[] {"java", "groovy"};
|
|
| 55 |
|
|
| 56 |
|
|
| 36 | 57 |
LinkedHashSet<String> messageKeys = new LinkedHashSet<String>(); |
| 37 | 58 |
HashMap<File, BiHashMap<String, String>> langs = new HashMap<File, BiHashMap<String, String>>(); |
| 38 | 59 |
BiHashMap<File, String> file2lang = new BiHashMap<File, String>(); |
| 60 |
|
|
| 61 |
|
|
| 62 |
|
|
| 63 |
|
|
| 64 |
/** |
|
| 65 |
* |
|
| 66 |
* @param projectDirectory |
|
| 67 |
* @param javaMessageFile |
|
| 68 |
* @throws UnsupportedEncodingException |
|
| 69 |
* @throws FileNotFoundException |
|
| 70 |
* @throws IOException |
|
| 71 |
*/ |
|
| 72 |
public PluginMessages(File projectDirectory, File javaMessageFile) throws UnsupportedEncodingException, FileNotFoundException, IOException {
|
|
| 39 | 73 |
|
| 40 |
public PluginMessages(File projectDirectory, File messageFile) throws UnsupportedEncodingException, FileNotFoundException, IOException {
|
|
| 74 |
this.javaMessageFile = javaMessageFile; |
|
| 75 |
this.projectDirectory = projectDirectory; |
|
| 76 |
this.srcFiles = new ArrayList<File>(); |
|
| 41 | 77 |
|
| 42 |
this.messageFile = messageFile; |
|
| 43 |
this.projectDirectory = projectDirectory; |
|
| 44 |
|
|
| 45 | 78 |
System.out.println("********************************************************************************************************************");
|
| 46 |
System.out.println("PluginMessages.PluginMessages(): project directory = " + this.projectDirectory);
|
|
| 47 |
System.out.println("PluginMessages.PluginMessages(): message file = " + this.messageFile);
|
|
| 79 |
System.out.println("PluginMessages.PluginMessages(): project root directory = " + this.projectDirectory);
|
|
| 80 |
System.out.println("PluginMessages.PluginMessages(): java message file = " + this.javaMessageFile);
|
|
| 48 | 81 |
|
| 49 |
File[] propFiles = messageFile.getParentFile().listFiles();
|
|
| 82 |
File[] propFiles = javaMessageFile.getParentFile().listFiles();
|
|
| 50 | 83 |
for (File propFile : propFiles) {
|
| 51 | 84 |
String name = propFile.getName(); |
| 52 | 85 |
if (!name.endsWith(".properties")) continue;
|
| ... | ... | |
| 65 | 98 |
} |
| 66 | 99 |
} |
| 67 | 100 |
|
| 68 |
if (messageFile != null) {
|
|
| 69 |
BufferedReader reader2 = new BufferedReader(new InputStreamReader(new FileInputStream(messageFile), ENCODING));
|
|
| 101 |
if (javaMessageFile != null) {
|
|
| 102 |
BufferedReader reader2 = new BufferedReader(new InputStreamReader(new FileInputStream(javaMessageFile), ENCODING));
|
|
| 70 | 103 |
String line2 = reader2.readLine(); |
| 71 | 104 |
while (line2 != null) {
|
| 72 | 105 |
line2 = line2.trim(); |
| ... | ... | |
| 78 | 111 |
} |
| 79 | 112 |
reader2.close(); |
| 80 | 113 |
} |
| 114 |
|
|
| 115 |
// create the project source files list |
|
| 116 |
this.loadSourceFilesList(); |
|
| 81 | 117 |
} |
| 82 | 118 |
|
| 83 | 119 |
public BiHashMap<String, String> getMessagesForLang(String lang) {
|
| 84 |
File p = new File(messageFile.getParentFile(), "messages"+lang+".properties");
|
|
| 120 |
File p = new File(javaMessageFile.getParentFile(), "messages" + lang + ".properties");
|
|
| 85 | 121 |
return langs.get(p); |
| 86 | 122 |
} |
| 87 | 123 |
|
| 88 | 124 |
public void put(String lang, String key, String message) {
|
| 89 | 125 |
messageKeys.add(key); |
| 90 | 126 |
|
| 91 |
File p = new File(messageFile.getParentFile(), "messages"+lang+".properties");
|
|
| 127 |
File p = new File(javaMessageFile.getParentFile(), "messages"+lang+".properties");
|
|
| 92 | 128 |
|
| 93 | 129 |
if (!langs.containsKey(p)) {
|
| 94 | 130 |
langs.put(p, new BiHashMap<String, String>()); |
| ... | ... | |
| 103 | 139 |
} |
| 104 | 140 |
|
| 105 | 141 |
public String get(String lang, String key) {
|
| 106 |
File p = new File(messageFile.getParentFile(), "messages"+lang+".properties");
|
|
| 142 |
File p = new File(javaMessageFile.getParentFile(), "messages"+lang+".properties");
|
|
| 107 | 143 |
|
| 108 | 144 |
if (!file2lang.containsKey(p)) return null; |
| 109 | 145 |
|
| ... | ... | |
| 115 | 151 |
} |
| 116 | 152 |
|
| 117 | 153 |
public File getMessageFile() {
|
| 118 |
return messageFile;
|
|
| 154 |
return javaMessageFile;
|
|
| 119 | 155 |
} |
| 120 | 156 |
|
| 121 | 157 |
public String getMessageClassName() {
|
| 122 |
return messageFile.getName().substring(0, messageFile.getName().length()-5);
|
|
| 158 |
return javaMessageFile.getName().substring(0, javaMessageFile.getName().length()-5);
|
|
| 123 | 159 |
} |
| 124 | 160 |
|
| 125 | 161 |
public String getMessageFullClassName() {
|
| 126 |
return messageFile.getAbsolutePath().substring(messageFile.getAbsolutePath().lastIndexOf("org/txm/"), messageFile.getAbsolutePath().length()-5).replace("/", ".");
|
|
| 162 |
return javaMessageFile.getAbsolutePath().substring(javaMessageFile.getAbsolutePath().lastIndexOf("org/txm/"), javaMessageFile.getAbsolutePath().length()-5).replace("/", ".");
|
|
| 127 | 163 |
} |
| 128 | 164 |
|
| 129 | 165 |
public String getMessageName() {
|
| 130 |
return messageFile.getName().substring(0, messageFile.getName().length()-5-8);
|
|
| 166 |
return javaMessageFile.getName().substring(0, javaMessageFile.getName().length()-5-8);
|
|
| 131 | 167 |
} |
| 132 | 168 |
|
| 133 | 169 |
public String getMessageFullName() {
|
| 134 |
return messageFile.getAbsolutePath().substring(messageFile.getAbsolutePath().lastIndexOf("org/txm/")+8, messageFile.getAbsolutePath().length()-5-8).replace("/", ".");
|
|
| 170 |
return javaMessageFile.getAbsolutePath().substring(javaMessageFile.getAbsolutePath().lastIndexOf("org/txm/")+8, javaMessageFile.getAbsolutePath().length()-5-8).replace("/", ".");
|
|
| 135 | 171 |
} |
| 136 | 172 |
|
| 137 | 173 |
// public def getMissingsMessageKeys(String lang) {
|
| ... | ... | |
| 176 | 212 |
} |
| 177 | 213 |
|
| 178 | 214 |
// write message File |
| 179 |
if (messageFile == null) return;
|
|
| 215 |
if (javaMessageFile == null) return;
|
|
| 180 | 216 |
|
| 181 |
File oldFile2 = new File(messageFile.getParentFile(), messageFile.getName()+".old");
|
|
| 182 |
messageFile.renameTo(oldFile2); // back up
|
|
| 217 |
File oldFile2 = new File(javaMessageFile.getParentFile(), javaMessageFile.getName()+".old");
|
|
| 218 |
javaMessageFile.renameTo(oldFile2); // back up
|
|
| 183 | 219 |
|
| 184 | 220 |
String className = getMessageClassName(); |
| 185 | 221 |
String name = getMessageName(); |
| 186 | 222 |
String classPackage = getMessageFullClassName().substring(0, getMessageFullClassName().length()- getMessageClassName().length()); |
| 187 | 223 |
|
| 188 |
PrintWriter out = IOUtils.getWriter(messageFile, ENCODING);
|
|
| 224 |
PrintWriter out = IOUtils.getWriter(javaMessageFile, ENCODING);
|
|
| 189 | 225 |
|
| 190 | 226 |
// write start |
| 191 | 227 |
out.println("package "+classPackage+";\n");
|
| ... | ... | |
| 238 | 274 |
} |
| 239 | 275 |
|
| 240 | 276 |
|
| 241 |
public void getFilesUsingKey(File path, String fileExtension, String key, HashMap<File, String> files) {
|
|
| 277 |
/*** |
|
| 278 |
* Returns all source files using the specified message key (except the main Java message file). |
|
| 279 |
* @param key |
|
| 280 |
* @return |
|
| 281 |
*/ |
|
| 282 |
public HashMap<File, String> getFilesUsingKey(String key) {
|
|
| 283 |
|
|
| 284 |
HashMap<File, String> files = new HashMap<File, String>(); |
|
| 242 | 285 |
|
| 286 |
for (File file : this.srcFiles) {
|
|
| 287 |
ArrayList<String> lines = IOUtils.getLines(file, PluginMessages.ENCODING); |
|
| 288 |
|
|
| 289 |
for (String line : lines) {
|
|
| 290 |
if(line.contains(key)) {
|
|
| 291 |
files.put(file, key); |
|
| 292 |
}; |
|
| 293 |
|
|
| 294 |
} |
|
| 295 |
} |
|
| 296 |
|
|
| 297 |
return files; |
|
| 298 |
} |
|
| 299 |
|
|
| 300 |
|
|
| 301 |
/** |
|
| 302 |
* Parses the project and stores a list of the source files. |
|
| 303 |
*/ |
|
| 304 |
private void loadSourceFilesList(File path) {
|
|
| 243 | 305 |
File[] list = path.listFiles(); |
| 244 | 306 |
|
| 245 | 307 |
if (list == null) {
|
| 246 | 308 |
return; |
| 247 | 309 |
} |
| 248 | 310 |
|
| 249 |
for (File f : list) {
|
|
| 250 |
if (f.isDirectory()) {
|
|
| 251 |
this.getFilesUsingKey(f, fileExtension, key, files); |
|
| 252 |
// System.out.println( "Dir:" + f.getAbsoluteFile() ); |
|
| 311 |
for (File file : list) {
|
|
| 312 |
if (file.isDirectory()) {
|
|
| 313 |
this.loadSourceFilesList(file); |
|
| 253 | 314 |
} |
| 254 |
else if (f.getName().endsWith(fileExtension)
|
|
| 255 |
&& !f.equals(this.messageFile)
|
|
| 315 |
else if (!file.equals(this.javaMessageFile)
|
|
| 316 |
&& Arrays.asList(this.srcFilesExtensions).contains(FilenameUtils.getExtension(file.getName()))
|
|
| 256 | 317 |
) {
|
| 257 |
//System.out.println("File: " + f.getAbsoluteFile());
|
|
| 258 | 318 |
|
| 259 |
ArrayList<String> lines = IOUtils.getLines(f, PluginMessages.ENCODING); |
|
| 260 |
|
|
| 261 |
for (String line : lines) {
|
|
| 262 |
//println ""+line |
|
| 263 |
if(line.contains(key)) {
|
|
| 264 |
files.put(f, key); |
|
| 265 |
// System.err.println("PluginMessages.walk(): file " + f + " contains key " + key);
|
|
| 266 |
}; |
|
| 267 |
|
|
| 319 |
if(debug) {
|
|
| 320 |
System.out.println("PluginMessages.loadSourceFilesList(): adding source files " + file + ".");
|
|
| 268 | 321 |
} |
| 269 |
|
|
| 322 |
|
|
| 323 |
this.srcFiles.add(file); |
|
| 270 | 324 |
} |
| 271 | 325 |
} |
| 272 |
}
|
|
| 326 |
}
|
|
| 273 | 327 |
|
| 274 |
/** |
|
| 275 |
* Returns all Java files using the specified message key. |
|
| 276 |
* @param key |
|
| 277 |
*/ |
|
| 278 |
public HashMap<File, String> getFilesUsingKey(String key) {
|
|
| 279 |
HashMap<File, String> files = new HashMap<File, String>(); |
|
| 280 |
this.getFilesUsingKey(this.projectDirectory, ".java", key, files); |
|
| 281 |
return files; |
|
| 328 |
/** |
|
| 329 |
* Parses the project and stores a list of the source files. |
|
| 330 |
*/ |
|
| 331 |
public void loadSourceFilesList() {
|
|
| 332 |
|
|
| 333 |
if(debug) {
|
|
| 334 |
System.out.println("PluginMessages.loadSourceFilesList(): creating source files list for extensions [" + StringUtils.join(this.srcFilesExtensions, ", ") + "]...");
|
|
| 335 |
} |
|
| 336 |
|
|
| 337 |
this.loadSourceFilesList(this.projectDirectory); |
|
| 338 |
|
|
| 339 |
if(debug) {
|
|
| 340 |
System.out.println("PluginMessages.loadSourceFilesList(): done. Source files count = " + this.srcFiles.size() + ".");
|
|
| 341 |
} |
|
| 342 |
|
|
| 282 | 343 |
} |
| 344 |
|
|
| 283 | 345 |
|
| 284 |
|
|
| 346 |
/** |
|
| 347 |
* Returns the keys of all messages that are not used in the project. |
|
| 348 |
* @return |
|
| 349 |
*/ |
|
| 285 | 350 |
public ArrayList<String> findUnusedKeys() {
|
| 286 | 351 |
ArrayList<String> unusedKeys = new ArrayList<String>(); |
| 287 | 352 |
for (String key : messageKeys) {
|
Formats disponibles : Unified diff