| 76 |
76 |
* The Class Project represent a Corpus project with its sources, corpus indexes, texts, editions, pages, etc.
|
| 77 |
77 |
*/
|
| 78 |
78 |
public class Project extends TXMResult {
|
| 79 |
|
|
|
79 |
|
| 80 |
80 |
public static final String TXMCORPUSNATURE = "org.txm.core.CorpusNature";
|
| 81 |
|
|
| 82 |
|
//private ArrayList<String> pEditionNames = new ArrayList<String>();
|
|
81 |
|
|
82 |
// private ArrayList<String> pEditionNames = new ArrayList<String>();
|
| 83 |
83 |
private IProject rcpProject;
|
| 84 |
|
|
|
84 |
|
| 85 |
85 |
private ProjectScope preferenceScope;
|
| 86 |
|
|
|
86 |
|
| 87 |
87 |
/**
|
| 88 |
88 |
* If true, the computing will build the main corpus, editions, texts, etc.
|
| 89 |
89 |
*/
|
| 90 |
90 |
protected boolean needToBuild;
|
| 91 |
|
|
| 92 |
|
|
| 93 |
|
@Parameter(key=TBXPreferences.CLEAN)
|
|
91 |
|
|
92 |
|
|
93 |
@Parameter(key = TBXPreferences.CLEAN)
|
| 94 |
94 |
private boolean pCleanAfterBuild;
|
| 95 |
|
|
|
95 |
|
| 96 |
96 |
/**
|
| 97 |
97 |
* Name of import module.
|
| 98 |
98 |
*/
|
| 99 |
|
@Parameter(key=TBXPreferences.IMPORT_MODULE_NAME)
|
|
99 |
@Parameter(key = TBXPreferences.IMPORT_MODULE_NAME)
|
| 100 |
100 |
String pImportModuleName;
|
| 101 |
101 |
|
| 102 |
102 |
/**
|
| 103 |
103 |
* Name of import module.
|
| 104 |
104 |
*/
|
| 105 |
|
@Parameter(key=TBXPreferences.CORPUS_VERSION)
|
|
105 |
@Parameter(key = TBXPreferences.CORPUS_VERSION)
|
| 106 |
106 |
String pCorpusVersion;
|
| 107 |
|
|
|
107 |
|
| 108 |
108 |
/**
|
| 109 |
109 |
*
|
| 110 |
110 |
*/
|
| 111 |
|
@Parameter(key=TBXPreferences.LINKS)
|
|
111 |
@Parameter(key = TBXPreferences.LINKS)
|
| 112 |
112 |
private HashMap<String, Alignement> links;
|
| 113 |
|
|
|
113 |
|
| 114 |
114 |
/**
|
| 115 |
115 |
* Default edition.
|
| 116 |
116 |
*/
|
| 117 |
|
@Parameter(key=TBXPreferences.DEFAULT_EDITION)
|
|
117 |
@Parameter(key = TBXPreferences.DEFAULT_EDITION)
|
| 118 |
118 |
private String pDefaultEditionName;
|
| 119 |
|
|
|
119 |
|
| 120 |
120 |
/**
|
| 121 |
121 |
* Encoding.
|
| 122 |
122 |
*/
|
| 123 |
|
@Parameter(key=TBXPreferences.ENCODING)
|
|
123 |
@Parameter(key = TBXPreferences.ENCODING)
|
| 124 |
124 |
private String pEncoding;
|
| 125 |
|
|
|
125 |
|
| 126 |
126 |
/**
|
| 127 |
127 |
* Language.
|
| 128 |
128 |
*/
|
| 129 |
|
@Parameter(key=TBXPreferences.LANG)
|
|
129 |
@Parameter(key = TBXPreferences.LANG)
|
| 130 |
130 |
private String pLanguage;
|
| 131 |
|
|
|
131 |
|
| 132 |
132 |
/**
|
| 133 |
133 |
* Source directory.
|
| 134 |
134 |
*/
|
| 135 |
|
@Parameter(key=TBXPreferences.SOURCE)
|
|
135 |
@Parameter(key = TBXPreferences.SOURCE)
|
| 136 |
136 |
private File pSrcDirectory;
|
| 137 |
|
|
| 138 |
|
// /** The front xslt path. */
|
| 139 |
|
// @Parameter(key=TBXPreferences.FRONT_XSL)
|
| 140 |
|
// private String pXsl;
|
| 141 |
|
// /** The front xslt path. */
|
| 142 |
|
// @Parameter(key=TBXPreferences.FRONT_XSL_PARAMETERS)
|
| 143 |
|
// private HashMap<String, String> pXsltParameters;
|
| 144 |
|
|
|
137 |
|
|
138 |
// /** The front xslt path. */
|
|
139 |
// @Parameter(key=TBXPreferences.FRONT_XSL)
|
|
140 |
// private String pXsl;
|
|
141 |
// /** The front xslt path. */
|
|
142 |
// @Parameter(key=TBXPreferences.FRONT_XSL_PARAMETERS)
|
|
143 |
// private HashMap<String, String> pXsltParameters;
|
|
144 |
|
| 145 |
145 |
/**
|
| 146 |
146 |
* Author.
|
| 147 |
147 |
*/
|
| 148 |
|
@Parameter(key=TBXPreferences.AUTHOR)
|
|
148 |
@Parameter(key = TBXPreferences.AUTHOR)
|
| 149 |
149 |
private String pAuthor;
|
| 150 |
|
|
|
150 |
|
| 151 |
151 |
/**
|
| 152 |
152 |
* Font.
|
| 153 |
153 |
*/
|
| 154 |
|
@Parameter(key=TBXPreferences.FONT)
|
|
154 |
@Parameter(key = TBXPreferences.FONT)
|
| 155 |
155 |
private String pFont = "Arial";
|
| 156 |
|
|
|
156 |
|
| 157 |
157 |
/**
|
| 158 |
158 |
* Description.
|
| 159 |
159 |
*/
|
| 160 |
|
@Parameter(key=TBXPreferences.DESCRIPTION)
|
|
160 |
@Parameter(key = TBXPreferences.DESCRIPTION)
|
| 161 |
161 |
private String pDescription;
|
| 162 |
|
|
|
162 |
|
| 163 |
163 |
/**
|
| 164 |
164 |
*
|
| 165 |
165 |
*/
|
| 166 |
|
@Parameter(key=TBXPreferences.ANNOTATE)
|
|
166 |
@Parameter(key = TBXPreferences.ANNOTATE)
|
| 167 |
167 |
private boolean pAnnotate;
|
| 168 |
|
|
|
168 |
|
| 169 |
169 |
/**
|
| 170 |
170 |
* Instantiates a new project and define if it needs to build its main corpus, texts, editions, etc..
|
| 171 |
171 |
*
|
| ... | ... | |
| 175 |
175 |
*/
|
| 176 |
176 |
public Project(Workspace workspace, String name, boolean needToBuild) throws Exception {
|
| 177 |
177 |
super("/project/" + name + "/" + createUUID() + "_Project", workspace);
|
| 178 |
|
|
|
178 |
|
| 179 |
179 |
this.needToBuild = needToBuild;
|
| 180 |
180 |
this.internalPersistable = true;
|
| 181 |
181 |
this.userName = name;
|
| ... | ... | |
| 190 |
190 |
TXMPreferences.flush(this);
|
| 191 |
191 |
}
|
| 192 |
192 |
}
|
| 193 |
|
|
|
193 |
|
| 194 |
194 |
/**
|
| 195 |
195 |
* Instantiates a new project that needs to build its main corpus, texts, editions, etc..
|
|
196 |
*
|
| 196 |
197 |
* @param workspace
|
| 197 |
198 |
* @param name
|
| 198 |
199 |
* @throws Exception
|
| ... | ... | |
| 200 |
201 |
public Project(Workspace workspace, String name) throws Exception {
|
| 201 |
202 |
this(workspace, name, true);
|
| 202 |
203 |
}
|
| 203 |
|
|
|
204 |
|
| 204 |
205 |
public boolean isOpen() {
|
| 205 |
206 |
return rcpProject != null && rcpProject.isOpen();
|
| 206 |
207 |
}
|
| ... | ... | |
| 217 |
218 |
|
| 218 |
219 |
if (monitor != null) monitor.subTask("loading results");
|
| 219 |
220 |
this.loadResults(null);
|
| 220 |
|
|
|
221 |
|
| 221 |
222 |
for (TXMResult cb : getCorpora()) {
|
| 222 |
223 |
if (!cb.compute(false)) {
|
| 223 |
|
Log.warning("Deleting broken corpus: "+cb+" of "+cb.getProject());
|
|
224 |
Log.warning("Deleting broken corpus: " + cb + " of " + cb.getProject());
|
| 224 |
225 |
cb.delete();
|
| 225 |
226 |
}
|
| 226 |
227 |
}
|
| 227 |
228 |
|
| 228 |
229 |
if (monitor != null) monitor.subTask("");
|
| 229 |
|
} catch (CoreException e) {
|
|
230 |
}
|
|
231 |
catch (CoreException e) {
|
| 230 |
232 |
e.printStackTrace();
|
| 231 |
233 |
}
|
| 232 |
234 |
}
|
| ... | ... | |
| 253 |
255 |
|
| 254 |
256 |
this.preferenceScope = null;
|
| 255 |
257 |
|
| 256 |
|
} catch (Exception e) {
|
|
258 |
}
|
|
259 |
catch (Exception e) {
|
| 257 |
260 |
e.printStackTrace();
|
| 258 |
261 |
}
|
| 259 |
262 |
}
|
| ... | ... | |
| 275 |
278 |
/**
|
| 276 |
279 |
* Instantiates a new existing project from persistence.
|
| 277 |
280 |
* This project will not be builded, main corpus, texts, editions, etc. will be restored from persistence.
|
| 278 |
|
*
|
|
281 |
*
|
| 279 |
282 |
* @param nodePath
|
| 280 |
283 |
* @throws CoreException
|
| 281 |
284 |
*/
|
| 282 |
285 |
public Project(String parametersNodePath) throws CoreException {
|
| 283 |
286 |
super(parametersNodePath);
|
| 284 |
|
|
|
287 |
|
| 285 |
288 |
this.needToBuild = false;
|
| 286 |
289 |
this.internalPersistable = true;
|
| 287 |
290 |
this.dirty = false;
|
| 288 |
291 |
this.hasBeenComputedOnce = true;
|
| 289 |
292 |
this.setVisible(false);
|
| 290 |
|
|
|
293 |
|
| 291 |
294 |
initRCPStuffs();
|
| 292 |
|
|
| 293 |
|
//
|
| 294 |
|
// this.setPath(project.getPath() + getName());
|
| 295 |
|
// params = parameters;
|
| 296 |
|
// setSelfElement(params.root);
|
| 297 |
|
// this.project = project;
|
| 298 |
|
// //load();
|
| 299 |
|
// this.userName = params.name;
|
| 300 |
|
// if (!userName.equals(userName.toUpperCase())) {
|
| 301 |
|
// System.out.println("Warning in Base.init: binary corpus name contains lower case letters: "+this.userName);
|
| 302 |
|
// }
|
| 303 |
|
//
|
| 304 |
|
// this.scope = new BasePreferenceScope(this);
|
| 305 |
|
|
|
295 |
|
|
296 |
//
|
|
297 |
// this.setPath(project.getPath() + getName());
|
|
298 |
// params = parameters;
|
|
299 |
// setSelfElement(params.root);
|
|
300 |
// this.project = project;
|
|
301 |
// //load();
|
|
302 |
// this.userName = params.name;
|
|
303 |
// if (!userName.equals(userName.toUpperCase())) {
|
|
304 |
// System.out.println("Warning in Base.init: binary corpus name contains lower case letters: "+this.userName);
|
|
305 |
// }
|
|
306 |
//
|
|
307 |
// this.scope = new BasePreferenceScope(this);
|
|
308 |
|
| 306 |
309 |
// reloading existing results
|
| 307 |
310 |
this.loadResults(null);
|
| 308 |
311 |
}
|
| 309 |
|
|
| 310 |
|
|
|
312 |
|
|
313 |
|
| 311 |
314 |
@Override
|
| 312 |
315 |
public boolean canCompute() throws Exception {
|
| 313 |
|
if(userName == null) {
|
|
316 |
if (userName == null) {
|
| 314 |
317 |
Log.severe("Project.canCompute(): can not compute with missing name.");
|
| 315 |
318 |
return false;
|
| 316 |
319 |
}
|
| 317 |
|
|
| 318 |
|
if(this.needToBuild == true && (pSrcDirectory == null || pImportModuleName == null)) {
|
|
320 |
|
|
321 |
if (this.needToBuild == true && (pSrcDirectory == null || pImportModuleName == null)) {
|
| 319 |
322 |
Log.severe("Project.canCompute(): the project needs to build but source directory or import module name is missing.");
|
| 320 |
323 |
return false;
|
| 321 |
324 |
}
|
| 322 |
325 |
return true;
|
| 323 |
326 |
}
|
| 324 |
|
|
|
327 |
|
| 325 |
328 |
/**
|
| 326 |
329 |
* flag the project to be rebuild with the Import module
|
| 327 |
330 |
*/
|
| 328 |
331 |
public void setNeedToBuild() {
|
| 329 |
332 |
needToBuild = true;
|
| 330 |
333 |
}
|
| 331 |
|
|
| 332 |
|
|
|
334 |
|
|
335 |
|
| 333 |
336 |
@Override
|
| 334 |
337 |
protected boolean _compute() throws Exception {
|
| 335 |
|
|
|
338 |
|
| 336 |
339 |
// build the main corpus, texts, editions, etc.
|
| 337 |
|
if(this.needToBuild) {
|
| 338 |
|
|
| 339 |
|
// if (pImportXMLParameters != null) {
|
| 340 |
|
// pImportXMLParameters.load();
|
| 341 |
|
// this._load(pImportXMLParameters.name);
|
| 342 |
|
// // convert to new preferences persistence
|
| 343 |
|
// }
|
| 344 |
|
|
| 345 |
|
//FIXME if the corpus name change, the TXMResults node path become wrong
|
| 346 |
|
// if (!rcpProject.getName().equals(userName)) { // project directory and project name must stay in sync
|
| 347 |
|
// IPath destination = new Path(this.getName());
|
| 348 |
|
// if (destination.toFile().exists()) {
|
| 349 |
|
// System.out.println("Error: could not rename project since one already existing with the same new name="+this.getName());
|
| 350 |
|
// return false;
|
| 351 |
|
// }
|
| 352 |
|
// rcpProject.move(destination, true, null);
|
| 353 |
|
// }
|
| 354 |
|
|
|
340 |
if (this.needToBuild) {
|
|
341 |
|
|
342 |
// if (pImportXMLParameters != null) {
|
|
343 |
// pImportXMLParameters.load();
|
|
344 |
// this._load(pImportXMLParameters.name);
|
|
345 |
// // convert to new preferences persistence
|
|
346 |
// }
|
|
347 |
|
|
348 |
// FIXME if the corpus name change, the TXMResults node path become wrong
|
|
349 |
// if (!rcpProject.getName().equals(userName)) { // project directory and project name must stay in sync
|
|
350 |
// IPath destination = new Path(this.getName());
|
|
351 |
// if (destination.toFile().exists()) {
|
|
352 |
// System.out.println("Error: could not rename project since one already existing with the same new name="+this.getName());
|
|
353 |
// return false;
|
|
354 |
// }
|
|
355 |
// rcpProject.move(destination, true, null);
|
|
356 |
// }
|
|
357 |
|
| 355 |
358 |
ImportEngines engines = Toolbox.getImportEngines();
|
| 356 |
|
|
| 357 |
|
//File scriptfile = new File(Toolbox.getTxmHomePath(), "scripts/groovy/user/org/txm/scripts/importer/"+importName+"/"+importName+"Loader.groovy"); //$NON-NLS-1$
|
|
359 |
|
|
360 |
// File scriptfile = new File(Toolbox.getTxmHomePath(), "scripts/groovy/user/org/txm/scripts/importer/"+importName+"/"+importName+"Loader.groovy"); //$NON-NLS-1$
|
| 358 |
361 |
ImportEngine engine = engines.getEngine(getImportModuleName());
|
| 359 |
362 |
if (engine == null) {
|
| 360 |
|
//
|
| 361 |
|
// engine = new ScriptedImportEngine(scriptfile) {
|
| 362 |
|
// @Override
|
| 363 |
|
// public boolean build(Project project, IProgressMonitor monitor) {
|
| 364 |
|
// // TODO Auto-generated method stub
|
| 365 |
|
// return false;
|
| 366 |
|
// }
|
| 367 |
|
// };
|
| 368 |
|
//Log.severe("Project._compute(): Import engine not found.");
|
| 369 |
|
|
|
363 |
//
|
|
364 |
// engine = new ScriptedImportEngine(scriptfile) {
|
|
365 |
// @Override
|
|
366 |
// public boolean build(Project project, IProgressMonitor monitor) {
|
|
367 |
// // TODO Auto-generated method stub
|
|
368 |
// return false;
|
|
369 |
// }
|
|
370 |
// };
|
|
371 |
// Log.severe("Project._compute(): Import engine not found.");
|
|
372 |
|
| 370 |
373 |
// no import set
|
| 371 |
374 |
return true;
|
| 372 |
375 |
}
|
| 373 |
|
|
|
376 |
|
| 374 |
377 |
if (monitor == null || monitor.isCanceled()) {
|
| 375 |
|
monitor = new LogMonitor("computing "+this);
|
|
378 |
monitor = new LogMonitor("computing " + this);
|
| 376 |
379 |
}
|
| 377 |
|
|
|
380 |
|
| 378 |
381 |
Log.finest("RUNNING IMPORT MODULE WITH NAME = " + getImportModuleName());
|
| 379 |
|
|
|
382 |
|
| 380 |
383 |
boolean state = engine.build(this, monitor).isOK();
|
| 381 |
|
if (state == true) {
|
|
384 |
if (state == true) {
|
| 382 |
385 |
this.needToBuild = false;
|
| 383 |
386 |
// This step could be done only if the compiler step if done and only if it modifying/deleting the corpus builds
|
| 384 |
387 |
for (CorpusBuild corpus : getCorpusBuilds()) {
|
| 385 |
388 |
if (corpus != null) {
|
| 386 |
|
// corpus.compute(false);
|
|
389 |
// corpus.compute(false);
|
| 387 |
390 |
}
|
| 388 |
391 |
}
|
| 389 |
|
} else { // import failed
|
|
392 |
}
|
|
393 |
else { // import failed
|
| 390 |
394 |
for (CorpusBuild corpus : getCorpusBuilds()) { // Cleaning eventual broken corpus
|
| 391 |
395 |
if (corpus != null) {
|
| 392 |
396 |
corpus.delete();
|
| ... | ... | |
| 394 |
398 |
}
|
| 395 |
399 |
}
|
| 396 |
400 |
return state;
|
| 397 |
|
|
|
401 |
|
| 398 |
402 |
}
|
| 399 |
403 |
// Nothing to do if the project does not need to build
|
| 400 |
|
else {
|
|
404 |
else {
|
| 401 |
405 |
return true;
|
| 402 |
406 |
}
|
| 403 |
407 |
}
|
| ... | ... | |
| 413 |
417 |
String n = this.getName();
|
| 414 |
418 |
this.rcpProject = rcpWorkspace.getRoot().getProject(n);
|
| 415 |
419 |
}
|
| 416 |
|
|
|
420 |
|
| 417 |
421 |
if (!rcpProject.exists()) {
|
| 418 |
422 |
createRCPProject();
|
| 419 |
423 |
}
|
| 420 |
|
|
| 421 |
|
// if (!rcpProject.isOpen()) {
|
| 422 |
|
// try {
|
| 423 |
|
// rcpProject.open(monitor);
|
| 424 |
|
// } catch (Exception e) {
|
| 425 |
|
// System.out.println("Warning: restoring corpus project files: "+e);
|
| 426 |
|
//// rcpProject.delete(true, monitor);
|
| 427 |
|
//// createRCPProject();
|
| 428 |
|
// }
|
| 429 |
|
// }
|
|
424 |
|
|
425 |
// if (!rcpProject.isOpen()) {
|
|
426 |
// try {
|
|
427 |
// rcpProject.open(monitor);
|
|
428 |
// } catch (Exception e) {
|
|
429 |
// System.out.println("Warning: restoring corpus project files: "+e);
|
|
430 |
//// rcpProject.delete(true, monitor);
|
|
431 |
//// createRCPProject();
|
|
432 |
// }
|
|
433 |
// }
|
| 430 |
434 |
if (isOpen()) {
|
| 431 |
435 |
this.preferenceScope = new ProjectScope(rcpProject);
|
| 432 |
436 |
}
|
| 433 |
437 |
}
|
| 434 |
|
|
|
438 |
|
| 435 |
439 |
private void createRCPProject() throws CoreException {
|
| 436 |
440 |
|
| 437 |
441 |
IProjectDescription description = ResourcesPlugin.getWorkspace().newProjectDescription(rcpProject.getName());
|
| 438 |
442 |
IFolder folder = Workspace.getInstance().corporaProject.getFolder(rcpProject.getName());
|
| 439 |
443 |
|
| 440 |
444 |
description.setLocation(folder.getLocation());
|
| 441 |
|
description.setNatureIds(new String[] {TXMCORPUSNATURE});
|
|
445 |
description.setNatureIds(new String[] { TXMCORPUSNATURE });
|
| 442 |
446 |
|
| 443 |
447 |
rcpProject.create(description, monitor);
|
| 444 |
448 |
rcpProject.open(monitor);
|
| 445 |
|
//TODO might fail if corpus source directory changed
|
|
449 |
// TODO might fail if corpus source directory changed
|
| 446 |
450 |
IFolder srcFolder = rcpProject.getFolder("src");
|
| 447 |
451 |
if (pSrcDirectory != null && !pSrcDirectory.getName().isEmpty()) {
|
| 448 |
452 |
IPath path = new Path(pSrcDirectory.getAbsolutePath());
|
| ... | ... | |
| 451 |
455 |
}
|
| 452 |
456 |
}
|
| 453 |
457 |
}
|
| 454 |
|
|
|
458 |
|
| 455 |
459 |
/**
|
| 456 |
460 |
* Loads and creates the persisted results from the preferences service.
|
| 457 |
461 |
*/
|
| 458 |
|
public void loadResults(Class clazz) {
|
| 459 |
|
|
|
462 |
public void loadResults(Class clazz) {
|
|
463 |
|
| 460 |
464 |
Log.finest("*** Project.loadResults(): reloading project persitent results...");
|
| 461 |
|
|
|
465 |
|
| 462 |
466 |
ArrayList<String> resultNodePaths = TXMPreferences.getAllResultsNodePaths(this.getParametersNodeRootPath());
|
| 463 |
|
|
|
467 |
|
| 464 |
468 |
Log.fine("Loading " + resultNodePaths.size() + " result(s) from project " + this.getName() + "...");
|
| 465 |
|
|
| 466 |
|
//TXMPreferences.dump();
|
| 467 |
|
|
| 468 |
|
HashMap<String, TXMResult> loaded = new HashMap<String, TXMResult>();
|
| 469 |
|
ArrayList<String> errors = new ArrayList<String>();
|
|
469 |
|
|
470 |
// TXMPreferences.dump();
|
|
471 |
|
|
472 |
HashMap<String, TXMResult> loaded = new HashMap<>();
|
|
473 |
ArrayList<String> errors = new ArrayList<>();
|
| 470 |
474 |
for (String resultNodePath : resultNodePaths) {
|
| 471 |
|
|
|
475 |
|
| 472 |
476 |
try {
|
| 473 |
477 |
Preferences node = TXMPreferences.preferencesRootNode.node(resultNodePath);
|
| 474 |
|
|
|
478 |
|
| 475 |
479 |
String className = node.get("class", ""); //$NON-NLS-1$ //$NON-NLS-2$
|
| 476 |
|
|
|
480 |
|
| 477 |
481 |
// Skip Project object
|
| 478 |
|
if (Project.class.getName().equals(className)) { // already loaded in loadProjectFromProjectScope
|
|
482 |
if (Project.class.getName().equals(className)) { // already loaded in loadProjectFromProjectScope
|
| 479 |
483 |
continue;
|
| 480 |
484 |
}
|
| 481 |
|
|
|
485 |
|
| 482 |
486 |
if (className == null || className.length() == 0) {
|
| 483 |
487 |
errors.add(NLS.bind("Warning: can not restore object with no class name set with path={0}.", resultNodePath)); //$NON-NLS-1$
|
| 484 |
488 |
node.removeNode();
|
| 485 |
489 |
continue;
|
| 486 |
490 |
}
|
| 487 |
|
|
|
491 |
|
| 488 |
492 |
if (clazz != null && !clazz.getName().equals(className)) {
|
| 489 |
493 |
continue; // only load the result of class=clazz
|
| 490 |
494 |
}
|
| 491 |
|
|
|
495 |
|
| 492 |
496 |
Log.fine("\nProject.loadResults(): loading from result node qualifier " + resultNodePath);
|
| 493 |
|
//Log.finest("Toolbox.initialize(): class = " + TXMPreferences.getString("class", nodeQualifier));
|
| 494 |
|
//TXMPreferences.dump();
|
|
497 |
// Log.finest("Toolbox.initialize(): class = " + TXMPreferences.getString("class", nodeQualifier));
|
|
498 |
// TXMPreferences.dump();
|
| 495 |
499 |
|
| 496 |
|
// //TODO see if necessary to prevent errors
|
| 497 |
|
// TXMResult result2 = TXMResult.getResult(this, resultNodePath);
|
| 498 |
|
// if (result2 != null) { // result already restored
|
| 499 |
|
// continue;
|
| 500 |
|
// }
|
|
500 |
// //TODO see if necessary to prevent errors
|
|
501 |
// TXMResult result2 = TXMResult.getResult(this, resultNodePath);
|
|
502 |
// if (result2 != null) { // result already restored
|
|
503 |
// continue;
|
|
504 |
// }
|
| 501 |
505 |
Log.fine("Project.loadResults(): class = " + className); //$NON-NLS-1$
|
| 502 |
|
// Log.finest("Toolbox.initialize(): parent_uuid = " + TXMPreferences.getString(TXMPreferences.PARENT_UUID, nodeQualifier));
|
|
506 |
// Log.finest("Toolbox.initialize(): parent_uuid = " + TXMPreferences.getString(TXMPreferences.PARENT_UUID, nodeQualifier));
|
| 503 |
507 |
Log.fine("Project.loadResults(): parent_uuid = " + node.get(TXMPreferences.PARENT_PARAMETERS_NODE_PATH, "")); //$NON-NLS-1$
|
| 504 |
508 |
String bundleId = node.get(TXMPreferences.BUNDLE_ID, ""); //$NON-NLS-1$
|
| 505 |
509 |
if (bundleId == null || bundleId.length() == 0) {
|
| ... | ... | |
| 514 |
518 |
node.removeNode();
|
| 515 |
519 |
continue;
|
| 516 |
520 |
}
|
| 517 |
|
|
|
521 |
|
| 518 |
522 |
Class<?> cl = bundle.loadClass(className);
|
| 519 |
523 |
|
| 520 |
|
// TXMResult parent = loaded.get(node.get(TXMPreferences.PARENT_PARAMETERS_NODE_PATH, null));
|
| 521 |
|
// TXMResult result = null;
|
| 522 |
|
// if (parent == null) {
|
| 523 |
|
Constructor<?> cons = cl.getConstructor(String.class);
|
| 524 |
|
TXMResult result = (TXMResult) cons.newInstance(resultNodePath);
|
| 525 |
|
// } else {
|
| 526 |
|
// Constructor<?> cons = cl.getConstructor(String.class, TXMResult.class);
|
| 527 |
|
// result = (TXMResult) cons.newInstance(resultNodePath, parent);
|
| 528 |
|
// }
|
|
524 |
// TXMResult parent = loaded.get(node.get(TXMPreferences.PARENT_PARAMETERS_NODE_PATH, null));
|
|
525 |
// TXMResult result = null;
|
|
526 |
// if (parent == null) {
|
|
527 |
Constructor<?> cons = cl.getConstructor(String.class);
|
|
528 |
TXMResult result = (TXMResult) cons.newInstance(resultNodePath);
|
|
529 |
// } else {
|
|
530 |
// Constructor<?> cons = cl.getConstructor(String.class, TXMResult.class);
|
|
531 |
// result = (TXMResult) cons.newInstance(resultNodePath, parent);
|
|
532 |
// }
|
| 529 |
533 |
loaded.put(resultNodePath, result);
|
|
534 |
|
| 530 |
535 |
// not an internal persistence (eg. corpus or partition)
|
| 531 |
|
if (!result.isInternalPersistable()) {
|
| 532 |
|
result.setUserPersistable(true);
|
|
536 |
if (!result.isInternalPersistable()) {
|
|
537 |
result.setUserPersistable(true, false);
|
| 533 |
538 |
}
|
| 534 |
|
} catch (Exception e) {
|
|
539 |
|
|
540 |
}
|
|
541 |
catch (Exception e) {
|
| 535 |
542 |
// TODO Auto-generated catch block
|
| 536 |
543 |
e.printStackTrace();
|
| 537 |
544 |
}
|
| 538 |
545 |
}
|
| 539 |
546 |
if (errors.size() > 0) {
|
| 540 |
|
for (int i = 0 ; i < 20 && i < errors.size() ; i++) {
|
|
547 |
for (int i = 0; i < 20 && i < errors.size(); i++) {
|
| 541 |
548 |
Log.fine(errors.get(i));
|
| 542 |
549 |
}
|
| 543 |
550 |
if (errors.size() > 20) {
|
| 544 |
|
Log.fine("more: "+(errors.size()-20)+"...");
|
|
551 |
Log.fine("more: " + (errors.size() - 20) + "...");
|
| 545 |
552 |
}
|
| 546 |
553 |
}
|
| 547 |
|
|
| 548 |
|
// // load the corpus builds
|
| 549 |
|
// for (CorpusBuild corpus : getCorpusBuilds()) {
|
| 550 |
|
// if (corpus != null) {
|
| 551 |
|
// corpus.compute(false);
|
| 552 |
|
// }
|
| 553 |
|
// }
|
|
554 |
|
|
555 |
// // load the corpus builds
|
|
556 |
// for (CorpusBuild corpus : getCorpusBuilds()) {
|
|
557 |
// if (corpus != null) {
|
|
558 |
// corpus.compute(false);
|
|
559 |
// }
|
|
560 |
// }
|
| 554 |
561 |
}
|
| 555 |
|
|
| 556 |
|
// public BasePreferenceScope getPreferenceScope() {
|
| 557 |
|
// return scope;
|
| 558 |
|
// }
|
| 559 |
|
|
| 560 |
|
// /* (non-Javadoc)
|
| 561 |
|
// * @see org.txm.objects.TxmObject#save()
|
| 562 |
|
// */
|
| 563 |
|
// @Override
|
| 564 |
|
// protected boolean _save() {
|
| 565 |
|
// //System.out.println("SAVE BASE: "+params.root+" "+params.paramFile);
|
| 566 |
|
// try {
|
| 567 |
|
// // Création de la source DOM
|
| 568 |
|
// Source source = new DOMSource(params.root);
|
|
562 |
|
|
563 |
// public BasePreferenceScope getPreferenceScope() {
|
|
564 |
// return scope;
|
|
565 |
// }
|
|
566 |
|
|
567 |
// /* (non-Javadoc)
|
|
568 |
// * @see org.txm.objects.TxmObject#save()
|
|
569 |
// */
|
|
570 |
// @Override
|
|
571 |
// protected boolean _save() {
|
|
572 |
// //System.out.println("SAVE BASE: "+params.root+" "+params.paramFile);
|
|
573 |
// try {
|
|
574 |
// // Création de la source DOM
|
|
575 |
// Source source = new DOMSource(params.root);
|
| 569 |
576 |
//
|
| 570 |
|
// // Création du fichier de sortie
|
| 571 |
|
// Writer writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(params.paramFile), "UTF-8")); //$NON-NLS-1$
|
| 572 |
|
// Result resultat = new StreamResult(writer);
|
|
577 |
// // Création du fichier de sortie
|
|
578 |
// Writer writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(params.paramFile), "UTF-8")); //$NON-NLS-1$
|
|
579 |
// Result resultat = new StreamResult(writer);
|
| 573 |
580 |
//
|
| 574 |
|
// // Configuration du transformer
|
| 575 |
|
// TransformerFactory fabrique = new net.sf.saxon.TransformerFactoryImpl();
|
| 576 |
|
// Transformer transformer = fabrique.newTransformer();
|
| 577 |
|
// transformer.setOutputProperty(OutputKeys.INDENT, "yes"); //$NON-NLS-1$
|
| 578 |
|
// transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); //$NON-NLS-1$
|
| 579 |
|
//
|
| 580 |
|
// // Transformation
|
| 581 |
|
// transformer.transform(source, resultat);
|
| 582 |
|
// writer.close();
|
| 583 |
|
// } catch (Exception e) {
|
| 584 |
|
// e.printStackTrace();
|
| 585 |
|
// Log.severe("Error while saving corpus parameters: "+e.getLocalizedMessage());
|
| 586 |
|
// return false;
|
| 587 |
|
// }
|
| 588 |
|
// return true;
|
| 589 |
|
// }
|
| 590 |
|
|
|
581 |
// // Configuration du transformer
|
|
582 |
// TransformerFactory fabrique = new net.sf.saxon.TransformerFactoryImpl();
|
|
583 |
// Transformer transformer = fabrique.newTransformer();
|
|
584 |
// transformer.setOutputProperty(OutputKeys.INDENT, "yes"); //$NON-NLS-1$
|
|
585 |
// transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); //$NON-NLS-1$
|
|
586 |
//
|
|
587 |
// // Transformation
|
|
588 |
// transformer.transform(source, resultat);
|
|
589 |
// writer.close();
|
|
590 |
// } catch (Exception e) {
|
|
591 |
// e.printStackTrace();
|
|
592 |
// Log.severe("Error while saving corpus parameters: "+e.getLocalizedMessage());
|
|
593 |
// return false;
|
|
594 |
// }
|
|
595 |
// return true;
|
|
596 |
// }
|
|
597 |
|
| 591 |
598 |
/**
|
| 592 |
599 |
* Retro compatibility method for import.xml files.
|
| 593 |
600 |
*
|
| 594 |
601 |
* @return
|
| 595 |
|
* @throws IOException
|
| 596 |
|
* @throws SAXException
|
| 597 |
|
* @throws ParserConfigurationException
|
|
602 |
* @throws IOException
|
|
603 |
* @throws SAXException
|
|
604 |
* @throws ParserConfigurationException
|
| 598 |
605 |
*/
|
| 599 |
606 |
public boolean _load(BaseOldParameters params) throws Exception {
|
| 600 |
607 |
params.load();
|
| 601 |
608 |
userName = params.name;
|
| 602 |
|
|
|
609 |
|
| 603 |
610 |
// set the improt module name using the Loader script name
|
| 604 |
611 |
this.pImportModuleName = params.scriptFile;
|
| 605 |
612 |
if (this.pImportModuleName != null) {
|
| ... | ... | |
| 608 |
615 |
this.pImportModuleName = this.pImportModuleName.substring(0, idx);
|
| 609 |
616 |
idx = this.pImportModuleName.lastIndexOf("/");
|
| 610 |
617 |
if (idx > 0 && this.pImportModuleName.length() > idx) {
|
| 611 |
|
this.pImportModuleName = this.pImportModuleName.substring(idx+1);
|
|
618 |
this.pImportModuleName = this.pImportModuleName.substring(idx + 1);
|
| 612 |
619 |
}
|
| 613 |
620 |
}
|
| 614 |
|
} else {
|
|
621 |
}
|
|
622 |
else {
|
| 615 |
623 |
this.pImportModuleName = "xtz";
|
| 616 |
624 |
}
|
| 617 |
|
|
|
625 |
|
| 618 |
626 |
this.pSrcDirectory = params.paramFile.getParentFile();
|
| 619 |
627 |
if (pSrcDirectory == null) {
|
| 620 |
628 |
pSrcDirectory = new File(getProjectDirectory(), "src");
|
| 621 |
629 |
}
|
| 622 |
|
|
|
630 |
|
| 623 |
631 |
File dir = new File(this.getWorkspace().getLocation(), userName);
|
| 624 |
632 |
File paramFile = new File(dir, "import.xml");
|
| 625 |
633 |
if (!paramFile.exists()) return false;
|
| 626 |
|
|
| 627 |
|
|
|
634 |
|
|
635 |
|
| 628 |
636 |
// get Alignements
|
| 629 |
|
//System.out.println("Load alignement from params: "+params.links);
|
|
637 |
// System.out.println("Load alignement from params: "+params.links);
|
| 630 |
638 |
for (String alignname : params.links.keySet()) {
|
| 631 |
639 |
Element link = params.links.get(alignname);
|
| 632 |
|
|
|
640 |
|
| 633 |
641 |
String target = link.getAttribute("target"); //$NON-NLS-1$
|
| 634 |
642 |
String[] split = target.split("#"); //$NON-NLS-1$
|
| 635 |
643 |
if (split.length != 3) {
|
| ... | ... | |
| 638 |
646 |
}
|
| 639 |
647 |
String from = split[1].trim();
|
| 640 |
648 |
String to = split[2].trim();
|
| 641 |
|
|
| 642 |
|
Alignement align = new Alignement(this, from, to,
|
|
649 |
|
|
650 |
Alignement align = new Alignement(this, from, to,
|
| 643 |
651 |
link.getAttribute("alignElement"), Integer.parseInt(link.getAttribute("alignLevel"))); //$NON-NLS-1$ //$NON-NLS-2$
|
| 644 |
|
links.put("#"+from+" #"+to, align); //$NON-NLS-1$ //$NON-NLS-2$
|
| 645 |
|
|
| 646 |
|
align = new Alignement(this, to, from,
|
|
652 |
links.put("#" + from + " #" + to, align); //$NON-NLS-1$ //$NON-NLS-2$
|
|
653 |
|
|
654 |
align = new Alignement(this, to, from,
|
| 647 |
655 |
link.getAttribute("alignElement"), Integer.parseInt(link.getAttribute("alignLevel"))); //$NON-NLS-1$ //$NON-NLS-2$
|
| 648 |
|
links.put("#"+to+" #"+from, align); //$NON-NLS-1$ //$NON-NLS-2$
|
|
656 |
links.put("#" + to + " #" + from, align); //$NON-NLS-1$ //$NON-NLS-2$
|
| 649 |
657 |
}
|
| 650 |
|
|
|
658 |
|
| 651 |
659 |
return true;
|
| 652 |
660 |
}
|
| 653 |
|
|
| 654 |
|
|
|
661 |
|
|
662 |
|
| 655 |
663 |
/**
|
| 656 |
664 |
* Gets the text.
|
| 657 |
665 |
*
|
| ... | ... | |
| 666 |
674 |
}
|
| 667 |
675 |
return null;
|
| 668 |
676 |
}
|
| 669 |
|
|
|
677 |
|
| 670 |
678 |
/**
|
| 671 |
679 |
* Gets the texts.
|
| 672 |
680 |
*
|
| ... | ... | |
| 676 |
684 |
public List<Text> getTexts() {
|
| 677 |
685 |
return (List<Text>) getChildren(Text.class);
|
| 678 |
686 |
}
|
| 679 |
|
|
|
687 |
|
| 680 |
688 |
/**
|
| 681 |
689 |
* Gets the texts id.
|
| 682 |
690 |
*
|
| ... | ... | |
| 689 |
697 |
}
|
| 690 |
698 |
return ids;
|
| 691 |
699 |
}
|
| 692 |
|
|
|
700 |
|
| 693 |
701 |
/**
|
| 694 |
702 |
* Gets the next text.
|
| 695 |
703 |
*
|
| ... | ... | |
| 704 |
712 |
return texts.get(idx);
|
| 705 |
713 |
}
|
| 706 |
714 |
}
|
| 707 |
|
|
|
715 |
|
| 708 |
716 |
return t;
|
| 709 |
717 |
}
|
| 710 |
|
|
|
718 |
|
| 711 |
719 |
/**
|
| 712 |
720 |
* Gets the previous text.
|
| 713 |
721 |
*
|
| ... | ... | |
| 717 |
725 |
public Text getPreviousText(Text t) {
|
| 718 |
726 |
List<Text> texts = getTexts();
|
| 719 |
727 |
if (texts.size() > 0) {
|
| 720 |
|
int idx = texts.indexOf(t) -1 ;
|
|
728 |
int idx = texts.indexOf(t) - 1;
|
| 721 |
729 |
if (idx >= 0) {
|
| 722 |
730 |
return texts.get(idx);
|
| 723 |
731 |
}
|
| 724 |
732 |
}
|
| 725 |
|
|
|
733 |
|
| 726 |
734 |
return t;
|
| 727 |
735 |
}
|
| 728 |
|
|
|
736 |
|
| 729 |
737 |
/**
|
| 730 |
738 |
* Gets the last text.
|
| 731 |
739 |
*
|
| ... | ... | |
| 734 |
742 |
public Text getLastText() {
|
| 735 |
743 |
List<Text> texts = getTexts();
|
| 736 |
744 |
if (texts.size() > 0) return texts.get(texts.size() - 1);
|
| 737 |
|
|
|
745 |
|
| 738 |
746 |
return null;
|
| 739 |
747 |
}
|
| 740 |
|
|
|
748 |
|
| 741 |
749 |
/**
|
| 742 |
750 |
* Gets the first text.
|
| 743 |
751 |
*
|
| ... | ... | |
| 746 |
754 |
public Text getFirstText() {
|
| 747 |
755 |
List<Text> texts = getTexts();
|
| 748 |
756 |
if (texts.size() > 0) return texts.get(0);
|
| 749 |
|
|
|
757 |
|
| 750 |
758 |
return null;
|
| 751 |
759 |
}
|
| 752 |
|
|
| 753 |
|
|
|
760 |
|
|
761 |
|
| 754 |
762 |
public boolean hasEditions() {
|
| 755 |
763 |
return pDefaultEditionName != null;
|
| 756 |
764 |
}
|
| 757 |
|
|
|
765 |
|
| 758 |
766 |
public String getDefaultEdition() {
|
| 759 |
767 |
return pDefaultEditionName;
|
| 760 |
768 |
}
|
| 761 |
|
|
|
769 |
|
| 762 |
770 |
public List<String> getEditionNames() {
|
| 763 |
771 |
IEclipsePreferences node = this.getPreferencesScope().getNode(EditionDefinition.class.getSimpleName());
|
| 764 |
772 |
try {
|
| 765 |
773 |
return Arrays.asList(node.childrenNames());
|
| 766 |
|
} catch (BackingStoreException e) {
|
|
774 |
}
|
|
775 |
catch (BackingStoreException e) {
|
| 767 |
776 |
Log.printStackTrace(e);
|
| 768 |
777 |
}
|
| 769 |
|
|
| 770 |
|
return new ArrayList<String>();
|
|
778 |
|
|
779 |
return new ArrayList<>();
|
| 771 |
780 |
}
|
| 772 |
|
|
|
781 |
|
| 773 |
782 |
/**
|
| 774 |
783 |
* @return the defaultEditionName
|
| 775 |
784 |
*/
|
| 776 |
785 |
public String getDefaultEditionName() {
|
| 777 |
786 |
return pDefaultEditionName;
|
| 778 |
787 |
}
|
| 779 |
|
|
|
788 |
|
| 780 |
789 |
/**
|
| 781 |
790 |
* @param defaultEditionName the defaultEditionName to set
|
| 782 |
791 |
*/
|
| 783 |
792 |
public void setDefaultEditionName(String defaultEditionName) {
|
| 784 |
793 |
this.pDefaultEditionName = defaultEditionName;
|
| 785 |
794 |
}
|
| 786 |
|
|
|
795 |
|
| 787 |
796 |
public Workspace getWorkspace() {
|
| 788 |
797 |
return (Workspace) getParent();
|
| 789 |
798 |
}
|
| 790 |
|
|
|
799 |
|
| 791 |
800 |
public boolean export(File exportzip) {
|
| 792 |
801 |
return export(exportzip, null);
|
| 793 |
802 |
}
|
| 794 |
|
|
|
803 |
|
| 795 |
804 |
/**
|
| 796 |
805 |
* Export.
|
| 797 |
806 |
*
|
| ... | ... | |
| 800 |
809 |
*/
|
| 801 |
810 |
public boolean export(File exportzip, IProgressMonitor monitor) {
|
| 802 |
811 |
File binarydir = this.getProjectDirectory();
|
| 803 |
|
|
|
812 |
|
| 804 |
813 |
if (binarydir.exists() && exportzip.getParentFile().exists()) {
|
| 805 |
814 |
this.save();
|
| 806 |
|
|
|
815 |
|
| 807 |
816 |
try {
|
| 808 |
817 |
Zip.compress(binarydir, exportzip, monitor);
|
| 809 |
|
} catch (IOException e) {
|
|
818 |
}
|
|
819 |
catch (IOException e) {
|
| 810 |
820 |
org.txm.utils.logger.Log.printStackTrace(e);
|
| 811 |
821 |
return false;
|
| 812 |
822 |
}
|
| 813 |
823 |
return true;
|
| 814 |
|
} else {
|
|
824 |
}
|
|
825 |
else {
|
| 815 |
826 |
System.out.println(NLS.bind(TXMCoreMessages.binaryDirectoryP0NotFound, binarydir));
|
| 816 |
827 |
System.out.println(NLS.bind(TXMCoreMessages.parentDirectoryP0NotFound, exportzip.getParentFile()));
|
| 817 |
|
|
|
828 |
|
| 818 |
829 |
}
|
| 819 |
830 |
return false;
|
| 820 |
831 |
}
|
| 821 |
|
|
|
832 |
|
| 822 |
833 |
/**
|
| 823 |
834 |
* Gets the base directory.
|
| 824 |
835 |
*
|
| ... | ... | |
| 826 |
837 |
*/
|
| 827 |
838 |
public File getProjectDirectory() {
|
| 828 |
839 |
if (this.rcpProject == null || this.rcpProject.getLocation() == null) {
|
| 829 |
|
return new File(Toolbox.workspace.getLocation(), "corpora/"+this.userName);
|
|
840 |
return new File(Toolbox.workspace.getLocation(), "corpora/" + this.userName);
|
| 830 |
841 |
}
|
| 831 |
842 |
return this.rcpProject.getLocation().toFile();
|
| 832 |
843 |
}
|
| 833 |
|
|
|
844 |
|
| 834 |
845 |
public HashMap<String, Alignement> getLinks() {
|
| 835 |
846 |
return links;
|
| 836 |
847 |
}
|
| 837 |
|
|
|
848 |
|
| 838 |
849 |
public ArrayList<Alignement> getLinksFrom(String from) {
|
| 839 |
|
ArrayList<Alignement> rez = new ArrayList<Alignement>();
|
| 840 |
|
for(String key : links.keySet())
|
| 841 |
|
if(key.startsWith("#"+from+" ")) //$NON-NLS-1$ //$NON-NLS-2$
|
|
850 |
ArrayList<Alignement> rez = new ArrayList<>();
|
|
851 |
for (String key : links.keySet())
|
|
852 |
if (key.startsWith("#" + from + " ")) //$NON-NLS-1$ //$NON-NLS-2$
|
| 842 |
853 |
rez.add(links.get(key));
|
| 843 |
854 |
return rez;
|
| 844 |
855 |
}
|
| 845 |
|
|
|
856 |
|
| 846 |
857 |
public ArrayList<Alignement> getLinksTo(String to) {
|
| 847 |
|
ArrayList<Alignement> rez = new ArrayList<Alignement>();
|
| 848 |
|
for(String key : links.keySet())
|
| 849 |
|
if(key.endsWith(" #"+to)) //$NON-NLS-1$
|
|
858 |
ArrayList<Alignement> rez = new ArrayList<>();
|
|
859 |
for (String key : links.keySet())
|
|
860 |
if (key.endsWith(" #" + to)) //$NON-NLS-1$
|
| 850 |
861 |
rez.add(links.get(key));
|
| 851 |
862 |
return rez;
|
| 852 |
863 |
}
|
| 853 |
|
|
|
864 |
|
| 854 |
865 |
public Alignement getLink(String from, String to) {
|
| 855 |
|
return links.get("#"+from+" #"+to ); //$NON-NLS-1$ //$NON-NLS-2$
|
|
866 |
return links.get("#" + from + " #" + to); //$NON-NLS-1$ //$NON-NLS-2$
|
| 856 |
867 |
}
|
| 857 |
|
|
|
868 |
|
| 858 |
869 |
@Override
|
| 859 |
870 |
public boolean saveParameters() throws Exception {
|
| 860 |
871 |
StringBuilder str = new StringBuilder();
|
| 861 |
872 |
if (links != null) {
|
| 862 |
873 |
for (String l : links.keySet()) {
|
| 863 |
874 |
Alignement a = links.get(l);
|
| 864 |
|
str.append("\t"+a.from+"#"+a.to+"#"+a.struct+"#"+a.level);
|
|
875 |
str.append("\t" + a.from + "#" + a.to + "#" + a.struct + "#" + a.level);
|
| 865 |
876 |
}
|
| 866 |
877 |
if (str.length() > 0) {
|
| 867 |
878 |
this.setParameter(TBXPreferences.LINKS, str.substring(1));
|
| 868 |
879 |
}
|
| 869 |
880 |
}
|
| 870 |
|
|
|
881 |
|
| 871 |
882 |
if (this.pSrcDirectory != null) {
|
| 872 |
883 |
this.saveParameter(TBXPreferences.SOURCE, pSrcDirectory.getAbsolutePath());
|
| 873 |
884 |
}
|
| 874 |
|
|
|
885 |
|
| 875 |
886 |
return true;
|
| 876 |
887 |
}
|
| 877 |
|
|
|
888 |
|
| 878 |
889 |
@Override
|
| 879 |
890 |
public boolean loadParameters() throws Exception {
|
| 880 |
|
|
|
891 |
|
| 881 |
892 |
String path = this.getStringParameterValue(TBXPreferences.SOURCE);
|
| 882 |
893 |
if (path != null && path.length() > 0) {
|
| 883 |
894 |
this.pSrcDirectory = new File(path);
|
| 884 |
895 |
}
|
| 885 |
|
|
|
896 |
|
| 886 |
897 |
String linksString = this.getStringParameterValue(TBXPreferences.LINKS);
|
| 887 |
898 |
if (linksString != null && !linksString.isEmpty()) {
|
| 888 |
899 |
String split[] = linksString.split("\t");
|
| ... | ... | |
| 891 |
902 |
new Alignement(this, split2[0], split2[1], split2[2], Integer.parseInt(split2[3]));
|
| 892 |
903 |
}
|
| 893 |
904 |
}
|
| 894 |
|
|
| 895 |
|
// String xsltParamteresString = this.getStringParameterValue(TBXPreferences.FRONT_XSL_PARAMETERS);
|
| 896 |
|
// if (xsltParamteresString != null && !xsltParamteresString.isEmpty()) {
|
| 897 |
|
// String[] split = xsltParamteresString.split("\t");
|
| 898 |
|
// for (String s: split) {
|
| 899 |
|
// String split2 [] = s.split("=", 2);
|
| 900 |
|
// pXsltParameters.put(split2[0], split2[1]);
|
| 901 |
|
// }
|
| 902 |
|
// }
|
| 903 |
|
|
|
905 |
|
|
906 |
// String xsltParamteresString = this.getStringParameterValue(TBXPreferences.FRONT_XSL_PARAMETERS);
|
|
907 |
// if (xsltParamteresString != null && !xsltParamteresString.isEmpty()) {
|
|
908 |
// String[] split = xsltParamteresString.split("\t");
|
|
909 |
// for (String s: split) {
|
|
910 |
// String split2 [] = s.split("=", 2);
|
|
911 |
// pXsltParameters.put(split2[0], split2[1]);
|
|
912 |
// }
|
|
913 |
// }
|
|
914 |
|
| 904 |
915 |
return true;
|
| 905 |
916 |
}
|
| 906 |
|
|
|
917 |
|
| 907 |
918 |
@Override
|
| 908 |
919 |
public boolean setParameters(TXMParameters parameters) throws Exception {
|
| 909 |
920 |
return false;
|
| 910 |
921 |
}
|
| 911 |
|
|
|
922 |
|
| 912 |
923 |
@Override
|
| 913 |
924 |
public String getName() {
|
| 914 |
925 |
return userName;
|
| 915 |
926 |
}
|
| 916 |
|
|
|
927 |
|
| 917 |
928 |
@Override
|
| 918 |
929 |
public String getSimpleName() {
|
| 919 |
930 |
return userName;
|
| 920 |
931 |
}
|
| 921 |
|
|
|
932 |
|
| 922 |
933 |
@Override
|
| 923 |
934 |
public String getDetails() {
|
| 924 |
935 |
return userName;
|
| 925 |
936 |
}
|
| 926 |
|
|
|
937 |
|
| 927 |
938 |
@Override
|
| 928 |
939 |
public void clean() {
|
| 929 |
940 |
if (rcpProject != null) {
|
| 930 |
941 |
try {
|
| 931 |
|
//Toolbox.getEngineManager(EngineType.SEARCH).getEngine("CQP").stop(); //$NON-NLS-1$
|
| 932 |
|
|
| 933 |
|
rcpProject.delete(true, new LogMonitor("Cleaning "+this));
|
| 934 |
|
|
| 935 |
|
|
| 936 |
|
//Toolbox.getEngineManager(EngineType.SEARCH).getEngine("CQP").start(null); //$NON-NLS-1$
|
| 937 |
|
|
| 938 |
|
} catch (Exception e) {
|
|
942 |
// Toolbox.getEngineManager(EngineType.SEARCH).getEngine("CQP").stop(); //$NON-NLS-1$
|
|
943 |
|
|
944 |
rcpProject.delete(true, new LogMonitor("Cleaning " + this));
|
|
945 |
|
|
946 |
|
|
947 |
// Toolbox.getEngineManager(EngineType.SEARCH).getEngine("CQP").start(null); //$NON-NLS-1$
|
|
948 |
|
|
949 |
}
|
|
950 |
catch (Exception e) {
|
| 939 |
951 |
// TODO Auto-generated catch block
|
| 940 |
952 |
e.printStackTrace();
|
| 941 |
953 |
}
|
| 942 |
954 |
}
|
| 943 |
|
|
|
955 |
|
| 944 |
956 |
Toolbox.notifyEngines(this, "clean");
|
| 945 |
|
//DeleteDir.deleteDirectory(getProjectDirectory());
|
|
957 |
// DeleteDir.deleteDirectory(getProjectDirectory());
|
| 946 |
958 |
}
|
| 947 |
|
|
|
959 |
|
| 948 |
960 |
public void setName(String name) {
|
| 949 |
961 |
this.userName = name;
|
| 950 |
962 |
}
|
| 951 |
|
|
| 952 |
|
|
| 953 |
|
|
|
963 |
|
|
964 |
|
|
965 |
|
| 954 |
966 |
@Override
|
| 955 |
967 |
public boolean toTxt(File outfile, String encoding, String colseparator, String txtseparator) throws Exception {
|
| 956 |
968 |
return false;
|
| 957 |
969 |
}
|
| 958 |
|
|
|
970 |
|
| 959 |
971 |
@Override
|
| 960 |
972 |
public String getResultType() {
|
| 961 |
973 |
return "Project";
|
| 962 |
974 |
}
|
| 963 |
|
|
|
975 |
|
| 964 |
976 |
public String getImportModuleName() {
|
| 965 |
977 |
return pImportModuleName;
|
| 966 |
978 |
}
|
| 967 |
|
|
|
979 |
|
| 968 |
980 |
/**
|
| 969 |
981 |
* Gets the encoding.
|
| 970 |
982 |
*
|
| ... | ... | |
| 973 |
985 |
public String getEncoding() {
|
| 974 |
986 |
return pEncoding;
|
| 975 |
987 |
}
|
| 976 |
|
|
|
988 |
|
| 977 |
989 |
/**
|
| 978 |
990 |
* Gets the lang.
|
| 979 |
991 |
*
|
| ... | ... | |
| 982 |
994 |
public String getLang() {
|
| 983 |
995 |
return pLanguage;
|
| 984 |
996 |
}
|
| 985 |
|
|
|
997 |
|
| 986 |
998 |
/**
|
| 987 |
999 |
* Gets the srcdir.
|
| 988 |
1000 |
*
|
| ... | ... | |
| 991 |
1003 |
public File getSrcdir() {
|
| 992 |
1004 |
return pSrcDirectory;
|
| 993 |
1005 |
}
|
| 994 |
|
|
|
1006 |
|
| 995 |
1007 |
/**
|
| 996 |
1008 |
* Gets the author.
|
| 997 |
1009 |
*
|
| ... | ... | |
| 1000 |
1012 |
public String getAuthor() {
|
| 1001 |
1013 |
return pAuthor;
|
| 1002 |
1014 |
}
|
| 1003 |
|
|
|
1015 |
|
| 1004 |
1016 |
/**
|
| 1005 |
1017 |
* Gets the description.
|
| 1006 |
1018 |
*
|
| ... | ... | |
| 1009 |
1021 |
public String getDescription() {
|
| 1010 |
1022 |
return this.pDescription;
|
| 1011 |
1023 |
}
|
| 1012 |
|
|
|
1024 |
|
| 1013 |
1025 |
/**
|
| 1014 |
1026 |
* Gets the description.
|
| 1015 |
1027 |
*
|
| ... | ... | |
| 1018 |
1030 |
public void setDescription(String desc) {
|
| 1019 |
1031 |
this.pDescription = desc;
|
| 1020 |
1032 |
}
|
| 1021 |
|
|
|
1033 |
|
| 1022 |
1034 |
/**
|
| 1023 |
1035 |
* @return the font
|
| 1024 |
1036 |
*/
|
| 1025 |
1037 |
public String getFont() {
|
| 1026 |
1038 |
return pFont;
|
| 1027 |
1039 |
}
|
| 1028 |
|
|
|
1040 |
|
| 1029 |
1041 |
/**
|
| 1030 |
1042 |
* @param font the font to set
|
| 1031 |
1043 |
*/
|
| 1032 |
1044 |
public void setFont(String font) {
|
| 1033 |
1045 |
this.pFont = font;
|
| 1034 |
1046 |
}
|
| 1035 |
|
|
|
1047 |
|
| 1036 |
1048 |
public void setLang(String lang) {
|
| 1037 |
1049 |
this.pLanguage = lang;
|
| 1038 |
1050 |
}
|
| 1039 |
|
|
|
1051 |
|
| 1040 |
1052 |
public void setEncoding(String encoding) {
|
| 1041 |
1053 |
this.pEncoding = encoding;
|
| 1042 |
1054 |
}
|
| 1043 |
|
|
|
1055 |
|
| 1044 |
1056 |
public void setSourceDirectory(String sourcePath) {
|
| 1045 |
1057 |
this.pSrcDirectory = new File(sourcePath);
|
| 1046 |
1058 |
}
|
| 1047 |
|
|
|
1059 |
|
| 1048 |
1060 |
public void setXsltParameter(String name, String value) {
|
| 1049 |
1061 |
this.getPreferencesScope().getNode("xsl").node(TBXPreferences.FRONT_XSL_PARAMETERS).put(name, value);
|
| 1050 |
1062 |
}
|
| 1051 |
|
|
|
1063 |
|
| 1052 |
1064 |
public HashMap<String, String> getXsltParameters() {
|
| 1053 |
1065 |
Preferences params = this.getPreferencesScope().getNode("xsl").node(TBXPreferences.FRONT_XSL_PARAMETERS);
|
| 1054 |
1066 |
HashMap<String, String> hparams = new HashMap<>();
|
| ... | ... | |
| 1056 |
1068 |
for (String k : params.childrenNames()) {
|
| 1057 |
1069 |
hparams.put(k, params.get(k, null));
|
| 1058 |
1070 |
}
|
| 1059 |
|
} catch (BackingStoreException e) {
|
|
1071 |
}
|
|
1072 |
catch (BackingStoreException e) {
|
| 1060 |
1073 |
// TODO Auto-generated catch block
|
| 1061 |
1074 |
e.printStackTrace();
|
| 1062 |
1075 |
}
|
| 1063 |
1076 |
return hparams;
|
| 1064 |
1077 |
}
|
| 1065 |
|
|
|
1078 |
|
| 1066 |
1079 |
public void removeXsltParameter(String name) {
|
| 1067 |
1080 |
this.getPreferencesScope().getNode("xsl").node(TBXPreferences.FRONT_XSL_PARAMETERS).remove(name);
|
| 1068 |
1081 |
}
|
| 1069 |
|
|
|
1082 |
|
| 1070 |
1083 |
public String getFrontXSL() {
|
| 1071 |
1084 |
return this.getPreferencesScope().getNode("xsl").get(TBXPreferences.FRONT_XSL, null);
|
| 1072 |
1085 |
}
|
| 1073 |
|
|
|
1086 |
|
| 1074 |
1087 |
public void setXslt(String xslpath) {
|
| 1075 |
1088 |
this.getPreferencesScope().getNode("xsl").put(TBXPreferences.FRONT_XSL, xslpath);
|
| 1076 |
1089 |
}
|
| 1077 |
|
|
|
1090 |
|
| 1078 |
1091 |
public void setAnnotate(boolean b) {
|
| 1079 |
1092 |
this.pAnnotate = b;
|
| 1080 |
1093 |
}
|
| 1081 |
|
|
|
1094 |
|
| 1082 |
1095 |
public Boolean getAnnotate() {
|
| 1083 |
1096 |
return pAnnotate;
|
| 1084 |
1097 |
}
|
| 1085 |
|
|
|
1098 |
|
| 1086 |
1099 |
public void setCleanAfterBuild(boolean clean) {
|
| 1087 |
1100 |
this.pCleanAfterBuild = clean;
|
| 1088 |
1101 |
}
|
| 1089 |
|
|
|
1102 |
|
| 1090 |
1103 |
public Boolean getCleanAfterBuild() {
|
| 1091 |
1104 |
return this.pCleanAfterBuild;
|
| 1092 |
1105 |
}
|
| 1093 |
|
|
|
1106 |
|
| 1094 |
1107 |
public void addTokenizerParameter(String name, String value) {
|
| 1095 |
1108 |
IEclipsePreferences params = this.getPreferencesScope().getNode("Tokenizer");
|
| 1096 |
1109 |
params.put(name, value);
|
| 1097 |
1110 |
}
|
| 1098 |
|
|
|
1111 |
|
| 1099 |
1112 |
public String getTokenizerParameter(String name, String defaultvalue) {
|
| 1100 |
1113 |
IEclipsePreferences params = this.getPreferencesScope().getNode("Tokenizer");
|
| 1101 |
1114 |
return params.get(name, defaultvalue);
|
| 1102 |
1115 |
}
|
| 1103 |
|
|
|
1116 |
|
| 1104 |
1117 |
public String[] getTextualPlans() {
|
| 1105 |
1118 |
try {
|
| 1106 |
1119 |
return this.getPreferencesScope().getNode("TextualPlans").childrenNames();
|
| 1107 |
|
} catch (BackingStoreException e) {
|
|
1120 |
}
|
|
1121 |
catch (BackingStoreException e) {
|
| 1108 |
1122 |
// TODO Auto-generated catch block
|
| 1109 |
1123 |
e.printStackTrace();
|
| 1110 |
1124 |
}
|
| 1111 |
1125 |
return new String[0];
|
| 1112 |
1126 |
}
|
| 1113 |
|
|
|
1127 |
|
| 1114 |
1128 |
public String getTextualPlan(String name) {
|
| 1115 |
1129 |
return this.getPreferencesScope().getNode("TextualPlans").get(name, "");
|
| 1116 |
1130 |
}
|
| 1117 |
|
|
|
1131 |
|
| 1118 |
1132 |
public void setTextualPlan(String name, String elements) {
|
| 1119 |
1133 |
this.getPreferencesScope().getNode("TextualPlans").put(name, elements);
|
| 1120 |
1134 |
}
|
| 1121 |
|
|
|
1135 |
|
| 1122 |
1136 |
public String getTokenizerWordElement() {
|
| 1123 |
1137 |
IEclipsePreferences params = this.getPreferencesScope().getNode("Tokenizer");
|
| 1124 |
1138 |
return params.get("word_tags", "w");
|
| 1125 |
1139 |
}
|
| 1126 |
|
|
|
1140 |
|
| 1127 |
1141 |
public boolean getDoTokenizerStep() {
|
| 1128 |
1142 |
IEclipsePreferences params = this.getPreferencesScope().getNode("Tokenizer");
|
| 1129 |
1143 |
return params.getBoolean("doTokenizeStep", true);
|
| 1130 |
1144 |
}
|
| 1131 |
|
|
|
1145 |
|
| 1132 |
1146 |
public EditionDefinition getEditionDefinition(String name) {
|
| 1133 |
1147 |
return new EditionDefinition(this, name);
|
| 1134 |
1148 |
}
|
| 1135 |
1149 |
|
| 1136 |
1150 |
public ArrayList<EditionDefinition> getEditionDefinitions() {
|
| 1137 |
|
ArrayList<EditionDefinition> editions = new ArrayList<EditionDefinition>();
|
|
1151 |
ArrayList<EditionDefinition> editions = new ArrayList<>();
|
| 1138 |
1152 |
IEclipsePreferences editionNode = this.getPreferencesScope().getNode(EditionDefinition.class.getSimpleName());
|
| 1139 |
1153 |
try {
|
| 1140 |
1154 |
for (String editionName : editionNode.childrenNames()) {
|
| ... | ... | |
| 1142 |
1156 |
editions.add(getEditionDefinition(editionName));
|
| 1143 |
1157 |
}
|
| 1144 |
1158 |
}
|
| 1145 |
|
} catch (BackingStoreException e) {
|
|
1159 |
}
|
|
1160 |
catch (BackingStoreException e) {
|
| 1146 |
1161 |
// TODO Auto-generated catch block
|
| 1147 |
1162 |
e.printStackTrace();
|
| 1148 |
1163 |
}
|
| ... | ... | |
| 1152 |
1167 |
public CorpusCommandPreferences getCommandPreferences(String name) {
|
| 1153 |
1168 |
return new CorpusCommandPreferences(this, name);
|
| 1154 |
1169 |
}
|
| 1155 |
|
|
|
1170 |
|
| 1156 |
1171 |
public ProjectScope getPreferencesScope() {
|
| 1157 |
1172 |
return this.preferenceScope;
|
| 1158 |
1173 |
}
|
| 1159 |
|
|
|
1174 |
|
| 1160 |
1175 |
public CorpusBuild getCorpusBuild(String id) {
|
| 1161 |
1176 |
return getCorpusBuild(id, null);
|
| 1162 |
1177 |
}
|
| ... | ... | |
| 1168 |
1183 |
* @return
|
| 1169 |
1184 |
*/
|
| 1170 |
1185 |
public CorpusBuild getCorpusBuild(String id, Class<? extends CorpusBuild> clazz) {
|
| 1171 |
|
// System.out.println("CLASS="+clazz);
|
|
1186 |
// System.out.println("CLASS="+clazz);
|
| 1172 |
1187 |
List<CorpusBuild> builds = getCorpusBuilds();
|
| 1173 |
|
// System.out.println("BUILDS="+builds);
|
|
1188 |
// System.out.println("BUILDS="+builds);
|
| 1174 |
1189 |
for (CorpusBuild build : builds) {
|
| 1175 |
1190 |
if (id == null) {
|
| 1176 |
1191 |
if (clazz == null) {
|
| 1177 |
1192 |
return build;
|
| 1178 |
|
} else if (build.getClass().equals(clazz) ) {
|
|
1193 |
}
|
|
1194 |
else if (build.getClass().equals(clazz)) {
|
| 1179 |
1195 |
return build;
|
| 1180 |
1196 |
}
|
| 1181 |
|
} else if (id.equals(build.getID())) {
|
|
1197 |
}
|
|
1198 |
else if (id.equals(build.getID())) {
|
| 1182 |
1199 |
if (clazz == null) {
|
| 1183 |
1200 |
return build;
|
| 1184 |
|
} else if (build.getClass().equals(clazz)) {
|
|
1201 |
}
|
|
1202 |
else if (build.getClass().equals(clazz)) {
|
| 1185 |
1203 |
return build;
|
| 1186 |
1204 |
}
|
| 1187 |
1205 |
}
|
| 1188 |
1206 |
}
|
| 1189 |
1207 |
return null;
|
| 1190 |
1208 |
}
|
| 1191 |
|
|
|
1209 |
|
| 1192 |
1210 |
@SuppressWarnings("unchecked")
|
| 1193 |
1211 |
private List<CorpusBuild> getCorpusBuilds() {
|
| 1194 |
1212 |
return (List<CorpusBuild>) getChildren(CorpusBuild.class);
|
| 1195 |
1213 |
}
|
| 1196 |
|
|
|
1214 |
|
| 1197 |
1215 |
public void setImportModuleName(String name) {
|
| 1198 |
1216 |
this.pImportModuleName = name;
|
| 1199 |
1217 |
}
|
| 1200 |
|
|
|
1218 |
|
| 1201 |
1219 |
/**
|
| 1202 |
1220 |
* Checks if the edition specified by its name exists in the project.
|
| 1203 |
1221 |
*
|
| ... | ... | |
| 1208 |
1226 |
public boolean hasEditionDefinition(String name) {
|
| 1209 |
1227 |
try {
|