Revision 202

tmp/org.txm.core/src/groovy/org/txm/scripts/i18n/SplitExternalizedStringFiles.groovy (revision 202)
1
package org.txm.scripts.i18n
2

  
3
import java.io.File;
4
import java.util.ArrayList;
5
import java.util.regex.Matcher
6
import java.util.regex.Pattern;
7

  
8
// PARAMETERS
9

  
10
File workspaceDir = new File("/home/mdecorde/workspace079")
11
String sourceProject = "org.txm.core";
12
String targetProject = "org.txm.core";
13

  
14
// VARIABLES
15
def langs = ["", "_fr", "_ru"]
16
String sourceRootPackage = sourceProject
17
if (sourceProject.endsWith(".core")) sourceRootPackage = sourceProject.substring(0, sourceProject.lastIndexOf("."))
18
File sourceProjectDir = new File(workspaceDir, sourceProject)
19
File sourceRootPackageDir = new File(sourceProjectDir, "src/java/"+sourceRootPackage.replace(".", "/"))
20
if (!sourceRootPackageDir.exists()) sourceRootPackageDir = new File(sourceProjectDir, "src/java/main/"+sourceRootPackage.replace(".", "/"))
21
File sourceOSGIDir = new File(sourceProjectDir, "OSGI/l10n");
22

  
23
if (!sourceRootPackageDir.exists()) {println "MISSING FILE: $sourceRootPackageDir";}
24
if (!sourceOSGIDir.exists()) {println "MISSING FILE: $sourceOSGIDir";}
25

  
26
String targetRootPackage = targetProject
27
if (targetRootPackage.endsWith(".core")) targetRootPackage = targetProject.substring(0, targetProject.lastIndexOf("."))
28
File targetProjectDir = new File(workspaceDir, targetProject)
29
File targetPluginFile = new File(targetProjectDir, "plugin.xml")
30
File targetRootPackageDir = new File(targetProjectDir, "src/java/"+targetRootPackage.replace(".", "/"))
31
if (!targetRootPackageDir.exists()) targetRootPackageDir = new File(targetProjectDir, "src/java/main/"+targetRootPackage.replace(".", "/"))
32
File targetOSGIDir = new File(targetProjectDir, "OSGI/l10n");
33

  
34
if (!targetRootPackageDir.exists()) {println "MISSING FILE: $targetRootPackageDir";}
35
if (!targetOSGIDir.exists()) {println "MISSING FILE: $targetOSGIDir";}
36
if (!workspaceDir.exists()) { println "missing file $workspaceDir";return}
37
if (!targetProjectDir.exists()) { println "missing file $targetProjectDir";return}
38

  
39
// 1- find all keys from Java&Groovy files
40
def listJavaFiles(File directory) {
41
	def javaFiles = [];
42

  
43
	println "scan directory : "+directory;
44
	LinkedList<File> filesToProcess = new LinkedList<File>();
45
	filesToProcess.add(directory);
46
	while (!filesToProcess.isEmpty()) {
47
		File current = filesToProcess.removeFirst();
48
		if (current.isDirectory() && !current.getName().startsWith(".")) {
49
			List<String> currentpfiles = [];
50
			for (File sfile : current.listFiles()) {
51
				if (sfile.isDirectory())
52
					filesToProcess.add(sfile);
53
				else if (sfile.getName().endsWith(".java"))
54
					javaFiles.add(sfile);
55
			}
56
		}
57
	}
58
	return javaFiles;
59
}
60

  
61
def targetJavaFiles = listJavaFiles(targetProjectDir)
62

  
63
// 2- find keys in Java files
64
println "processing "+targetJavaFiles.size()+" files..."
65
def keys = new HashSet<String>();
66

  
67
def p = /Messages\.([A-Z][^+ ),;}]++)/
68
Matcher m;
69
for (def javaFile : targetJavaFiles) {
70
	javaFile.eachLine("UTF-8") { line->
71
		if ((m = line =~ p)) {
72
			keys << m.group(1)
73
		}
74
	}
75
}
76
println "Java files keys: "+keys.sort()
77
//println new HashSet(keys.collect{k-> k[-1]})
78

  
79
// 3- find keys in the plugin.xml file
80
println "processing "+targetJavaFiles.size()+" files..."
81
def pluginKeys = new HashSet<String>();
82

  
83
def p2 = /"\%([^"]++)"/
84

  
85
targetPluginFile.eachLine("UTF-8") { line->
86
	if ((m = line =~ p2)) {
87
		pluginKeys << m.group(1)
88
	}
89
}
90

  
91
println "Plugin file keys: "+pluginKeys.sort()
92

  
93
// 4- process each lang properties file
94
println "Extracting translations from source properties files and write to target properties files..."
95
for (def lang : langs) {
96
	File sourceBundleFile = new File(sourceOSGIDir, "bundle"+lang+".properties")
97
	File sourcePropertiesFile = new File(sourceRootPackageDir, "messages"+lang+".properties")
98
	File targetBundleFile = new File(sourceOSGIDir, "bundle"+lang+".properties")
99
	File targetPropertiesFile = new File(sourceRootPackageDir, "messages"+lang+".properties")
100

  
101
	if (sourcePropertiesFile.exists()) {
102
		println " Extracting translations from $sourcePropertiesFile"
103

  
104
		sourcePropertiesFile.eachLine("UTF-8") { line->
105
			def split = line.split("=", 2);
106
			def k = split[0]
107
			if (keys.contains(k)) {
108
				targetPropertiesFile << line
109
			}
110
		}
111
	}
112
	if (sourceBundleFile.exists()) {
113
		println " Extracting translations from $sourceBundleFile"
114
		sourceBundleFile.eachLine("UTF-8") { line->
115
			def split = line.split("=", 2);
116
			def k = split[0]
117
			if (pluginKeys.contains(k)) {
118
				targetBundleFile << line
119
			}
120
		}
121
	}
122
}
123

  
124
// 5- create the Messages.java files
125
def content1 = """package $targetRootPackageDir;
126

  
127
import org.eclipse.osgi.util.NLS;
128
import org.txm.core.messages.TXMCoreMessages;
129

  
130
public class Messages extends NLS {
131
	private static final String BUNDLE_NAME = "org.txm.messages"; //\$NON-NLS-1\$
132
"""
133

  
134
for (String k : keys) {
135
	content1 +="\n	public static String $k;"
136
}
137

  
138
def content2 = """
139
	static {
140
		TXMCoreMessages.initializeMessages(BUNDLE_NAME, Messages.class);
141
	}
142

  
143
	private Messages() {
144
	}
145
}
146
"""

Also available in: Unified diff