Révision 924
tmp/org.txm.rcp/src/main/java/org/txm/rcp/TxmPreferences.java (revision 924) | ||
---|---|---|
46 | 46 |
* |
47 | 47 |
* @author mdecorde |
48 | 48 |
*/ |
49 |
@Deprecated |
|
49 | 50 |
public class TxmPreferences { |
50 | 51 |
|
51 | 52 |
|
tmp/org.txm.core/src/java/org/txm/Toolbox.java (revision 924) | ||
---|---|---|
447 | 447 |
|
448 | 448 |
/** |
449 | 449 |
* Removes an engines manager. |
450 |
* @param engine |
|
450 |
* @param enginesManager
|
|
451 | 451 |
*/ |
452 |
private static void removeEngineManager(EnginesManager<?> engine) { |
|
453 |
enginesManagers.remove(engine.getClass()); |
|
452 |
private static void removeEngineManager(EnginesManager<?> enginesManager) { |
|
453 |
enginesManagers.remove(enginesManager.getClass()); |
|
454 |
Log.finest("Engines manager removed: " + enginesManager); |
|
454 | 455 |
} |
455 | 456 |
|
456 | 457 |
/** |
... | ... | |
489 | 490 |
stopEnginesManagers(); |
490 | 491 |
|
491 | 492 |
|
492 |
// FIXME: tmp solution before IProject: remove all not persistable result nodes |
|
493 |
TXMPreferences.deleteAllNotPersistableResultsNodes(); |
|
494 |
// FIXME: tmp solution before IProject: remove result local nodes if persistence preference is disabled |
|
495 |
if (!TBXPreferences.getBoolean(TBXPreferences.PERSISTENCE_ENABLED, TBXPreferences.PREFERENCES_NODE)) { |
|
496 |
TXMPreferences.deleteAllResultsNodes(); |
|
497 |
} |
|
493 |
try { |
|
494 |
// FIXME: tmp solution before IProject: remove all not persistable result nodes |
|
495 |
//TXMPreferences.deleteAllNotPersistableResultsNodes(); |
|
496 |
// FIXME: tmp solution before IProject: remove result local nodes if persistence preference is disabled |
|
497 |
if (!TBXPreferences.getBoolean(TBXPreferences.PERSISTENCE_ENABLED, TBXPreferences.PREFERENCES_NODE)) { |
|
498 |
TXMPreferences.deleteAllResultsNodes(); |
|
499 |
} |
|
498 | 500 |
|
499 |
|
|
500 |
if(Toolbox.workspace != null) { |
|
501 |
Toolbox.workspace.save(); |
|
501 |
|
|
502 |
if(Toolbox.workspace != null) { |
|
503 |
Toolbox.workspace.save(); |
|
504 |
} |
|
505 |
Toolbox.workspace = null; |
|
506 |
state = false; |
|
507 |
|
|
508 |
//save preferences |
|
509 |
TXMPreferences.saveAll(); |
|
502 | 510 |
} |
503 |
Toolbox.workspace = null; |
|
504 |
state = false; |
|
505 |
|
|
506 |
//save preferences |
|
507 |
TXMPreferences.saveAll(); |
|
511 |
catch (Exception e) { |
|
512 |
// TODO Auto-generated catch block |
|
513 |
e.printStackTrace(); |
|
514 |
} |
|
508 | 515 |
} |
509 | 516 |
|
510 | 517 |
/** |
... | ... | |
553 | 560 |
EnginesManager<?> enginesManager = enginesManagers.get(et); |
554 | 561 |
Log.finest(enginesManager.getClass().getSimpleName() + ": stopping " + enginesManager.getEngines().size() + " " + enginesManager.getEnginesDescription() + " engine(s)..."); |
555 | 562 |
result = result && enginesManager.stopEngines(); |
556 |
removeEngineManager(enginesManager); // remove the engine anyway |
|
563 |
removeEngineManager(enginesManager); // remove the engines manager anyway
|
|
557 | 564 |
} |
558 | 565 |
|
559 | 566 |
return true; |
tmp/org.txm.core/src/java/org/txm/core/preferences/TXMPreferences.java (revision 924) | ||
---|---|---|
61 | 61 |
*/ |
62 | 62 |
public static ArrayList<String> alternativeNodesQualifiers = new ArrayList<String>(); |
63 | 63 |
|
64 |
|
|
65 |
public final static String DEFAULT_ENCODING = "UTF-8"; //$NON-NLS-1$ |
|
66 |
|
|
64 | 67 |
/** |
65 | 68 |
* Default unit/token property String. |
66 | 69 |
*/ |
... | ... | |
164 | 167 |
* Save all preferences in the default app directory |
165 | 168 |
*/ |
166 | 169 |
public static void saveAll() { |
170 |
|
|
171 |
Log.info("Saving preferences and session results."); |
|
167 | 172 |
IPreferencesService service = Platform.getPreferencesService(); |
168 | 173 |
try { |
169 | 174 |
service.getRootNode().flush(); |
tmp/org.txm.core/src/java/org/txm/objects/Workspace.java (revision 924) | ||
---|---|---|
51 | 51 |
import org.eclipse.core.runtime.Platform; |
52 | 52 |
import org.eclipse.osgi.util.NLS; |
53 | 53 |
import org.txm.PostTXMHOMEInstallationStep; |
54 |
import org.txm.Toolbox; |
|
54 | 55 |
import org.txm.core.messages.TXMCoreMessages; |
55 | 56 |
import org.txm.core.preferences.TBXPreferences; |
56 | 57 |
import org.txm.core.preferences.TXMPreferences; |
... | ... | |
124 | 125 |
} |
125 | 126 |
} |
126 | 127 |
|
127 |
String path = TXMPreferences.getString(TBXPreferences.INSTALL_DIR, TBXPreferences.PREFERENCES_NODE);
|
|
128 |
String path = Toolbox.getPreference(TBXPreferences.INSTALL_DIR);
|
|
128 | 129 |
File installDirectory = new File(path); |
129 | 130 |
if (!installDirectory.exists()) { |
130 | 131 |
System.out.println("Error: Workspace cannot found install directory: "+installDirectory.getAbsolutePath()); |
... | ... | |
133 | 134 |
|
134 | 135 |
File redistDirectory = new File(installDirectory, "redist"); |
135 | 136 |
if (!redistDirectory.exists()) { |
136 |
System.out.println("Warning: Workspace cannot found redist directory: "+redistDirectory.getAbsolutePath());
|
|
137 |
System.err.println("Warning: Workspace cannot found redist directory: "+redistDirectory.getAbsolutePath());
|
|
137 | 138 |
} else { |
138 | 139 |
FileCopy.copyFiles(redistDirectory, txmhomedir); |
139 | 140 |
} |
... | ... | |
190 | 191 |
xmlfile.getParentFile().mkdir(); |
191 | 192 |
try { |
192 | 193 |
OutputStreamWriter writer = new OutputStreamWriter( |
193 |
new FileOutputStream(xmlfile), "UTF-8"); //$NON-NLS-1$
|
|
194 |
new FileOutputStream(xmlfile), TXMPreferences.DEFAULT_ENCODING);
|
|
194 | 195 |
writer.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"); //$NON-NLS-1$ |
195 | 196 |
writer.write("<workspace>\n"); //$NON-NLS-1$ |
196 | 197 |
writer.write("<projects>\n"); //$NON-NLS-1$ |
... | ... | |
319 | 320 |
|
320 | 321 |
// Création du fichier de sortie |
321 | 322 |
Writer writer = new BufferedWriter(new OutputStreamWriter( |
322 |
new FileOutputStream(xmlDefinitionFile), "UTF-8")); //$NON-NLS-1$
|
|
323 |
new FileOutputStream(xmlDefinitionFile), TXMPreferences.DEFAULT_ENCODING));
|
|
323 | 324 |
Result resultat = new StreamResult(writer); |
324 | 325 |
|
325 | 326 |
// Configuration du transformer |
326 | 327 |
TransformerFactory fabrique = new net.sf.saxon.TransformerFactoryImpl(); |
327 | 328 |
Transformer transformer = fabrique.newTransformer(); |
328 | 329 |
transformer.setOutputProperty(OutputKeys.INDENT, "yes"); //$NON-NLS-1$ |
329 |
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); //$NON-NLS-1$
|
|
330 |
transformer.setOutputProperty(OutputKeys.ENCODING, TXMPreferences.DEFAULT_ENCODING);
|
|
330 | 331 |
|
331 | 332 |
// Transformation |
332 | 333 |
transformer.transform(source, resultat); |
tmp/org.txm.utils/src/org/txm/utils/StreamConsumer.java (revision 924) | ||
---|---|---|
1 |
package org.txm.utils; |
|
2 |
|
|
3 |
import java.io.BufferedReader; |
|
4 |
import java.io.IOException; |
|
5 |
import java.io.InputStream; |
|
6 |
import java.io.InputStreamReader; |
|
7 |
|
|
8 |
import org.txm.utils.logger.Log; |
|
9 |
|
|
10 |
/** |
|
11 |
* Consumer for dumping stdout and stderr from a native process. |
|
12 |
* @author sjacquot |
|
13 |
* |
|
14 |
*/ |
|
15 |
public class StreamConsumer extends Thread { |
|
16 |
|
|
17 |
InputStream is; |
|
18 |
int type; |
|
19 |
|
|
20 |
public StreamConsumer(InputStream is, int type) { |
|
21 |
this.is = is; |
|
22 |
this.type = type; |
|
23 |
} |
|
24 |
|
|
25 |
@Override |
|
26 |
public void run() { |
|
27 |
try { |
|
28 |
InputStreamReader isr = new InputStreamReader(this.is); |
|
29 |
BufferedReader br = new BufferedReader(isr); |
|
30 |
String line = null; |
|
31 |
while ((line = br.readLine()) != null) { |
|
32 |
if(this.type == 0) { |
|
33 |
Log.finest(line); |
|
34 |
} |
|
35 |
else { |
|
36 |
Log.severe(line); |
|
37 |
} |
|
38 |
} |
|
39 |
} |
|
40 |
catch (IOException e) { |
|
41 |
e.printStackTrace(); |
|
42 |
} |
|
43 |
} |
|
44 |
} |
|
0 | 45 |
tmp/org.txm.statsengine.r.core/src/org/txm/statsengine/r/core/StartRserve.java (revision 924) | ||
---|---|---|
29 | 29 |
|
30 | 30 |
import java.io.File; |
31 | 31 |
|
32 |
import org.apache.commons.lang.StringUtils; |
|
32 | 33 |
import org.eclipse.osgi.util.NLS; |
33 | 34 |
import org.rosuda.REngine.Rserve.RConnection; |
34 | 35 |
import org.txm.statsengine.r.core.messages.RCoreMessages; |
... | ... | |
59 | 60 |
public class StartRserve { |
60 | 61 |
|
61 | 62 |
/** shortcut to <code>launchRserve(cmd, "--no-save --slave", "--no-save --slave", false)</code>. */ |
62 |
public static Process Rserveprocess;
|
|
63 |
public static Process rProcess;
|
|
63 | 64 |
|
64 | 65 |
/** |
65 | 66 |
* Launch rserve. |
... | ... | |
72 | 73 |
if (new File(cmd).exists() && !new File(cmd).isDirectory() |
73 | 74 |
&& new File(cmd).canExecute()) |
74 | 75 |
return launchRserve(cmd, |
75 |
"--no-save --slave --encoding utf8 "+rArgs, "--RS-encoding utf8 --no-save --slave --encoding utf8 "+rServeArgs, port, debug); //$NON-NLS-1$ //$NON-NLS-2$
|
|
76 |
"--no-save --slave --encoding utf8 " + rArgs, "--RS-encoding utf8 --no-save --slave --encoding utf8 " + rServeArgs, port, debug); //$NON-NLS-1$ //$NON-NLS-2$
|
|
76 | 77 |
return false;//checkLocalRserve(port, debug, rArgs, rServeArgs); |
77 | 78 |
} |
78 | 79 |
|
... | ... | |
140 | 141 |
// Rserveprocess = builder.start(); |
141 | 142 |
|
142 | 143 |
Runtime runtime = Runtime.getRuntime(); |
143 |
Rserveprocess = runtime.exec(cmdline); |
|
144 |
Log.info(RCoreMessages.bind(RCoreMessages.info_startingRWithCommandLine, StringUtils.join(cmdline, " "))); //$NON-NLS-1$ |
|
145 |
rProcess = runtime.exec(cmdline); |
|
144 | 146 |
|
145 | 147 |
//Log.info(Messages.StartRserve_0+Arrays.toString(cmdline)); |
146 |
StreamHog errStream = new StreamHog(Rserveprocess.getErrorStream(), debug);
|
|
147 |
StreamHog inStream = new StreamHog(Rserveprocess.getInputStream(), debug);
|
|
148 |
StreamHog errStream = new StreamHog(rProcess.getErrorStream(), debug);
|
|
149 |
StreamHog inStream = new StreamHog(rProcess.getInputStream(), debug);
|
|
148 | 150 |
RWorkspace.getRWorkspaceInstance().registerLogger(errStream, inStream); |
149 | 151 |
|
150 | 152 |
//if (!debug && !isWindows) Rserveprocess.waitFor(); |
151 | 153 |
// System.out.println("call terminated, let us try to connect ..."); |
152 | 154 |
} catch (Exception x) { |
153 |
System.err.println(RCoreMessages.error_failedToStartRServeWithCommand + x.getMessage());
|
|
155 |
Log.severe(RCoreMessages.error_failedToStartRServeWithCommand + x.getMessage());
|
|
154 | 156 |
return false; |
155 | 157 |
} |
156 | 158 |
|
157 |
System.err.print(RCoreMessages.info_statisticsEngineLaunched);
|
|
159 |
Log.info(RCoreMessages.info_statisticsEngineLaunched);
|
|
158 | 160 |
|
159 | 161 |
try { |
160 | 162 |
Thread.sleep(200); |
tmp/org.txm.statsengine.r.core/src/org/txm/statsengine/r/core/RStatsEngine.java (revision 924) | ||
---|---|---|
9 | 9 |
import org.txm.statsengine.r.core.messages.RCoreMessages; |
10 | 10 |
import org.txm.statsengine.r.core.preferences.RPreferences; |
11 | 11 |
import org.txm.utils.OSDetector; |
12 |
import org.txm.utils.StreamConsumer; |
|
12 | 13 |
import org.txm.utils.logger.Log; |
13 | 14 |
|
14 | 15 |
/** |
... | ... | |
83 | 84 |
// System.out.println("success"); |
84 | 85 |
//System.out.println("file transfert ? "+RWorkspace.isFileTranfert()); |
85 | 86 |
} catch (RWorkspaceException e) { |
86 |
System.err.println(RCoreMessages.error_connectionFailed);
|
|
87 |
Log.severe(RCoreMessages.error_connectionFailed);
|
|
87 | 88 |
started = false; |
88 | 89 |
} |
89 | 90 |
|
... | ... | |
91 | 92 |
} |
92 | 93 |
|
93 | 94 |
|
95 |
|
|
96 |
|
|
94 | 97 |
/** |
95 | 98 |
* kill Rserve process. |
96 | 99 |
*/ |
... | ... | |
98 | 101 |
if (!TXMPreferences.getBoolean(RPreferences.REMOTE, RPreferences.PREFERENCES_NODE)) { |
99 | 102 |
|
100 | 103 |
try { |
101 |
if (StartRserve.Rserveprocess != null) { |
|
102 |
StartRserve.Rserveprocess.destroy(); |
|
104 |
if (StartRserve.rProcess != null) { |
|
105 |
Log.finest("Quitting R process."); |
|
106 |
StartRserve.rProcess.destroy(); |
|
103 | 107 |
} |
104 | 108 |
} catch (Exception e1) { |
105 | 109 |
// TODO Auto-generated catch block |
... | ... | |
109 | 113 |
// Windows OS |
110 | 114 |
if (OSDetector.isFamilyWindows()) { |
111 | 115 |
try { |
116 |
String cmd = "taskkill /IM Rterm.exe /F"; //$NON-NLS-1$ |
|
117 |
//String cmd = "cmd /c FOR /F \"tokens=5 delims= \" %P IN ('netstat -ano ^| findstr :6330 ^| findstr LISTENING') DO taskkill /F /PID %P"; //$NON-NLS-1$ |
|
118 |
Log.finest("Executing command: " + cmd); |
|
119 |
|
|
112 | 120 |
Process p = Runtime.getRuntime().exec( |
113 | 121 |
//"taskkill /IM Rserve.exe /F"); //$NON-NLS-1$ |
114 |
"cmd /c FOR /F \"tokens=5 delims= \" %P IN ('netstat -ano ^| findstr :6330 ^| findstr LISTENING') DO taskkill /F /PID %P"); //$NON-NLS-1$ |
|
122 |
cmd |
|
123 |
); |
|
115 | 124 |
|
125 |
// consumes streams |
|
126 |
new StreamConsumer(p.getErrorStream(), -1).start();; |
|
127 |
new StreamConsumer(p.getInputStream(), 0).start(); |
|
128 |
|
|
116 | 129 |
p.waitFor(); |
117 | 130 |
started = false; |
118 | 131 |
} catch (IOException e) { |
119 | 132 |
Log.severe(RCoreMessages.error_failedToKillRServe+Log.toString(e)); |
120 | 133 |
System.out.println(RCoreMessages.error_failedToKillRServe+Log.toString(e)); |
121 | 134 |
try { |
135 |
|
|
136 |
String cmd = "cmd /c FOR /F \"tokens=5 delims= \" %P IN ('netstat -ano ^| findstr :6330 ^| findstr LISTENING') DO tskill %P"; //$NON-NLS-1$ |
|
137 |
Log.finest("Executing command: " + cmd); |
|
138 |
|
|
122 | 139 |
Process p = Runtime.getRuntime().exec( |
123 | 140 |
//"tskill Rserve.exe"); //$NON-NLS-1$ |
124 |
"cmd /c FOR /F \"tokens=5 delims= \" %P IN ('netstat -ano ^| findstr :6330 ^| findstr LISTENING') DO tskill %P"); //$NON-NLS-1$ |
|
141 |
cmd |
|
142 |
); |
|
125 | 143 |
p.waitFor(); |
126 | 144 |
started = false; |
127 | 145 |
} catch (IOException e2) { |
128 | 146 |
Log.severe(RCoreMessages.error_failedToKillRServe2+Log.toString(e2)); |
129 |
System.out.println(RCoreMessages.error_failedToKillRServe2+Log.toString(e2)); |
|
130 | 147 |
Log.printStackTrace(e2); |
131 | 148 |
} catch (InterruptedException e3) { |
132 | 149 |
Log.severe(Log.toString(e3)); |
133 |
System.out.println(Log.toString(e3)); |
|
134 |
org.txm.utils.logger.Log.printStackTrace(e3); |
|
150 |
Log.printStackTrace(e3); |
|
135 | 151 |
} |
136 |
} catch (InterruptedException e) { |
|
152 |
} |
|
153 |
catch (InterruptedException e) { |
|
137 | 154 |
Log.severe("Error while closing R: " + e.getLocalizedMessage()); |
138 |
System.out.println(Log.toString(e)); |
|
139 |
org.txm.utils.logger.Log.printStackTrace(e); |
|
155 |
Log.printStackTrace(e); |
|
140 | 156 |
} |
141 | 157 |
} |
142 | 158 |
// Mac, Linux |
tmp/org.txm.statsengine.r.core/src/org/txm/statsengine/r/core/messages/messages_fr.properties (revision 924) | ||
---|---|---|
26 | 26 |
info_lastSafeEvalExpression = Dernier 'safeeval' : {0}. |
27 | 27 |
info_rPathNotSetTryingToFindIt = Chemin d'accès à R non fourni, tentative de résolution... |
28 | 28 |
info_savingChartToFile = Sauvegarde du graphique dans le fichier : {0}. |
29 |
info_startingRUsingPath = Démarrage de R avec le chemin d'accès : {0}.
|
|
29 |
info_startingRWithCommandLine = Démarrage de R avec la ligne de commande : {0}.
|
|
30 | 30 |
info_startingStatsEngine = Démarrage du moteur de statistiques : utilisateur : {0}, distant : {1}, port : {2}, debug : {3} |
31 | 31 |
info_statisticsEngineLaunched = Moteur statistique lancé |
32 | 32 |
info_tryingToStartRFrom = Tentative de démarrage de R depuis : {0}... |
tmp/org.txm.statsengine.r.core/src/org/txm/statsengine/r/core/messages/RCoreMessages.java (revision 924) | ||
---|---|---|
12 | 12 |
*/ |
13 | 13 |
public class RCoreMessages extends NLS { |
14 | 14 |
|
15 |
private static final String BUNDLE_NAME = "org.txm.statsengine.r.core.messages.messages"; //$NON-NLS-1$ |
|
16 |
|
|
15 | 17 |
public static String error_cantFindRServeInPath; |
16 | 18 |
public static String error_connectionFailed; |
17 | 19 |
public static String error_errorDuringItemsListExtraction; |
... | ... | |
37 | 39 |
public static String info_lastSafeEvalExpression; |
38 | 40 |
public static String info_rPathNotSetTryingToFindIt; |
39 | 41 |
public static String info_savingChartToFile; |
40 |
public static String info_startingRUsingPath;
|
|
42 |
public static String info_startingRWithCommandLine;
|
|
41 | 43 |
public static String info_startingStatsEngine; |
42 | 44 |
public static String info_statisticsEngineLaunched; |
43 | 45 |
public static String info_tryingToStartRFrom; |
... | ... | |
47 | 49 |
|
48 | 50 |
static { |
49 | 51 |
// initialize resource bundle |
50 |
Utf8NLS.initializeMessages(RCoreMessages.class); |
|
52 |
Utf8NLS.initializeMessages(BUNDLE_NAME, RCoreMessages.class);
|
|
51 | 53 |
} |
52 | 54 |
|
53 | 55 |
private RCoreMessages() { |
tmp/org.txm.statsengine.r.core/src/org/txm/statsengine/r/core/messages/messages.properties (revision 924) | ||
---|---|---|
26 | 26 |
info_lastSafeEvalExpression = Last safeeval expression: {0}. |
27 | 27 |
info_rPathNotSetTryingToFindIt = R path is not set, trying to find it... |
28 | 28 |
info_savingChartToFile = Saving chart to file: {0}. |
29 |
info_startingRUsingPath = Starting R using path: {0}.
|
|
29 |
info_startingRWithCommandLine = Starting R with command line: {0}.
|
|
30 | 30 |
info_startingStatsEngine = Starting Statistics Engine: user: {0}, remote: {1}, port: {2}, debug: {3} |
31 | 31 |
info_statisticsEngineLaunched = Statistical Engine launched |
32 | 32 |
info_tryingToStartRFrom = Try to start R from: {0}... |
tmp/org.txm.statsengine.r.core/src/org/txm/statsengine/r/core/RWorkspace.java (revision 924) | ||
---|---|---|
340 | 340 |
throw new RWorkspaceException(RCoreMessages.error_rservePathNotSet); |
341 | 341 |
} |
342 | 342 |
} else { |
343 |
Log.info(RCoreMessages.bind(RCoreMessages.info_startingRUsingPath, pathToRExecutable)); |
|
344 | 343 |
isRServerOk = StartRserve.launchRserve(pathToRExecutable, port, debug, rargs, rServeArgs); |
345 | 344 |
// System.out.println("ap launchRserve"); |
346 | 345 |
if (!isRServerOk) { |
347 |
System.out.println("Rserve not started with "+pathToRExecutable+". Trying with commons R installation paths (will works if Rserve, textometry and FactoMineR are installed).");
|
|
346 |
Log.severe("Rserve not started with " + pathToRExecutable + ". Trying with commons R installation paths (will works if Rserve, textometry and FactoMineR are installed).");
|
|
348 | 347 |
isRServerOk = StartRserve.checkLocalRserve(port, debug, rargs, rServeArgs); |
349 | 348 |
} |
350 | 349 |
|
... | ... | |
356 | 355 |
if (isRServerOk) { |
357 | 356 |
Log.finest("RSERVE_ACTIVATED"); //$NON-NLS-1$ |
358 | 357 |
System.out.println(RCoreMessages.info_connected); |
359 |
RserveProcess = StartRserve.Rserveprocess;
|
|
358 |
RserveProcess = StartRserve.rProcess;
|
|
360 | 359 |
} |
361 | 360 |
return isRServerOk; |
362 | 361 |
} |
... | ... | |
485 | 484 |
initRserve(pathToRExecutable, port, debug, rArgs, rServeArgs); |
486 | 485 |
return true; |
487 | 486 |
} catch (RWorkspaceException e) { |
488 |
System.out.println(RCoreMessages.error_failedToStartRServe);
|
|
487 |
Log.severe(RCoreMessages.error_failedToStartRServe);
|
|
489 | 488 |
org.txm.utils.logger.Log.printStackTrace(e); |
490 | 489 |
} |
491 | 490 |
return false; |
Formats disponibles : Unified diff