Revision 1084 org.gvsig.scripting/trunk/org.gvsig.scripting/org.gvsig.scripting.app/org.gvsig.scripting.app.mainplugin/src/main/java/org/gvsig/scripting/app/extension/ScriptingUtils.java
ScriptingUtils.java | ||
---|---|---|
1 |
/* |
|
2 |
* To change this license header, choose License Headers in Project Properties. |
|
3 |
* To change this template file, choose Tools | Templates |
|
4 |
* and open the template in the editor. |
|
5 |
*/ |
|
6 | 1 |
package org.gvsig.scripting.app.extension; |
7 | 2 |
|
8 | 3 |
import java.io.File; |
... | ... | |
24 | 19 |
import java.util.List; |
25 | 20 |
import java.util.function.Predicate; |
26 | 21 |
import javax.swing.JOptionPane; |
22 |
import javax.swing.SwingUtilities; |
|
27 | 23 |
import org.apache.commons.io.FileUtils; |
28 | 24 |
import org.apache.commons.io.FilenameUtils; |
29 | 25 |
import org.apache.commons.io.IOCase; |
30 | 26 |
import org.apache.commons.lang3.BooleanUtils; |
27 |
import org.gvsig.scripting.DataFolderFound; |
|
31 | 28 |
import org.gvsig.scripting.ScriptingBaseScript; |
32 | 29 |
import org.gvsig.scripting.ScriptingFolder; |
33 | 30 |
import org.gvsig.scripting.ScriptingLocator; |
... | ... | |
42 | 39 |
import org.gvsig.tools.ToolsLocator; |
43 | 40 |
import org.gvsig.tools.exception.BaseException; |
44 | 41 |
import org.gvsig.tools.i18n.I18nManager; |
42 |
import org.gvsig.tools.packageutils.PackageManager; |
|
43 |
import org.gvsig.tools.packageutils.Version; |
|
45 | 44 |
import org.gvsig.tools.swing.api.ToolsSwingLocator; |
46 | 45 |
import org.gvsig.tools.swing.api.threadsafedialogs.ThreadSafeDialogsManager; |
46 |
import org.gvsig.tools.swing.api.windowmanager.Dialog; |
|
47 | 47 |
import org.gvsig.tools.swing.api.windowmanager.WindowManager; |
48 |
import org.gvsig.tools.swing.api.windowmanager.WindowManager_v2; |
|
48 | 49 |
import org.gvsig.tools.task.SimpleTaskStatus; |
49 | 50 |
import org.gvsig.tools.visitor.VisitCanceledException; |
50 | 51 |
import org.gvsig.tools.visitor.Visitor; |
51 | 52 |
import org.slf4j.Logger; |
52 | 53 |
import org.slf4j.LoggerFactory; |
53 |
|
|
54 |
import org.gvsig.tools.util.FolderSet; |
|
55 |
import org.gvsig.tools.util.impl.DefaultFolderSet; |
|
54 | 56 |
/** |
55 | 57 |
* |
56 | 58 |
* @author jjdelcerro |
57 | 59 |
*/ |
60 |
@SuppressWarnings("UseSpecificCatch") |
|
58 | 61 |
public class ScriptingUtils { |
59 | 62 |
|
60 | 63 |
public static final String SKIP_AUTORUNS = "skipAutoruns"; |
61 | 64 |
|
62 |
private static final Logger logger = LoggerFactory.getLogger(ScriptingExtension.class);
|
|
65 |
private static final Logger LOGGER = LoggerFactory.getLogger(ScriptingExtension.class);
|
|
63 | 66 |
|
64 | 67 |
private boolean executingAutorunScripts = false; |
65 | 68 |
private static boolean composer_initialized = false; |
... | ... | |
84 | 87 |
public static void log(int level, String message, Throwable th) { |
85 | 88 |
switch( level ) { |
86 | 89 |
case TRACE: |
87 |
logger.trace(message, th);
|
|
90 |
LOGGER.trace(message, th);
|
|
88 | 91 |
break; |
89 | 92 |
case ERROR: |
90 |
logger.error(message, th);
|
|
93 |
LOGGER.error(message, th);
|
|
91 | 94 |
break; |
92 | 95 |
case WARN: |
93 |
logger.warn(message, th);
|
|
96 |
LOGGER.warn(message, th);
|
|
94 | 97 |
break; |
95 | 98 |
default: |
96 | 99 |
case INFO: |
97 |
logger.info(message, th);
|
|
100 |
LOGGER.info(message, th);
|
|
98 | 101 |
break; |
99 | 102 |
} |
100 | 103 |
} |
104 |
private String appversion; |
|
105 |
private File pluginHomeFolder; |
|
101 | 106 |
|
102 | 107 |
public ScriptingUtils() { |
103 | 108 |
message = new MessageWait(); |
... | ... | |
141 | 146 |
|
142 | 147 |
public void initializaPaths(List<File> pluginsFolder, File installFolder, File pluginHoneFolder, String appversion) { |
143 | 148 |
|
149 |
this.appversion = appversion; |
|
150 |
this.pluginHomeFolder = pluginHoneFolder; |
|
144 | 151 |
ScriptingManager manager = ScriptingLocator.getManager(); |
145 | 152 |
manager.setHomeFolder(getScriptsHomeFolder(pluginHoneFolder, appversion)); |
146 | 153 |
|
... | ... | |
179 | 186 |
try { |
180 | 187 |
FileUtils.forceMkdir(localAddonRepositoryFolder); |
181 | 188 |
} catch (IOException ex) { |
182 |
logger.info("Can't create addons folder in '" + localAddonRepositoryFolder.getAbsolutePath() + "'.", ex);
|
|
189 |
LOGGER.info("Can't create addons folder in '" + localAddonRepositoryFolder.getAbsolutePath() + "'.", ex);
|
|
183 | 190 |
} |
184 | 191 |
} |
185 | 192 |
File initAddonFile = new File(localAddonRepositoryFolder, "__init__.py"); |
... | ... | |
187 | 194 |
try { |
188 | 195 |
FileUtils.touch(initAddonFile); |
189 | 196 |
} catch (IOException ex) { |
190 |
logger.info("Can't create addons __init__ file in '" + localAddonRepositoryFolder.getAbsolutePath() + "'.", ex);
|
|
197 |
LOGGER.info("Can't create addons __init__ file in '" + localAddonRepositoryFolder.getAbsolutePath() + "'.", ex);
|
|
191 | 198 |
} |
192 | 199 |
} |
193 | 200 |
} |
... | ... | |
278 | 285 |
status.add(); |
279 | 286 |
final I18nManager i18nManager = ToolsLocator.getI18nManager(); |
280 | 287 |
try { |
281 |
logger.info("Searching "+title+" scripts...");
|
|
288 |
LOGGER.info("Searching "+title+" scripts...");
|
|
282 | 289 |
dialogs.message( |
283 | 290 |
i18nManager.getTranslation("_Searching_autorun_scripts_Xhorizontal_ellipsisX"), |
284 | 291 |
JOptionPane.INFORMATION_MESSAGE |
... | ... | |
296 | 303 |
if( script.isEnabled() ) { |
297 | 304 |
scripts.add(script); |
298 | 305 |
} else { |
299 |
logger.info("Skip "+title+" script '" + script.getFile().getAbsolutePath() + "'.");
|
|
306 |
LOGGER.info("Skip "+title+" script '" + script.getFile().getAbsolutePath() + "'.");
|
|
300 | 307 |
} |
301 | 308 |
} |
302 | 309 |
} |
... | ... | |
318 | 325 |
|
319 | 326 |
} finally { |
320 | 327 |
composer_initialized = true; |
321 |
logger.info("Running "+title+" scripts terminated.");
|
|
328 |
LOGGER.info("Running "+title+" scripts terminated.");
|
|
322 | 329 |
dialogs.message("", JOptionPane.INFORMATION_MESSAGE); |
323 | 330 |
status.terminate(); |
324 | 331 |
} |
... | ... | |
421 | 428 |
status.setCurValue(n++); |
422 | 429 |
} |
423 | 430 |
try { |
424 |
logger.info("running " + title + " script '" + script.getFile().getAbsolutePath() + "' (" + getScriptOrderKey(script) + ", " + script.getIsolationGroup() + ").");
|
|
431 |
LOGGER.info("running " + title + " script '" + script.getFile().getAbsolutePath() + "' (" + getScriptOrderKey(script) + ", " + script.getIsolationGroup() + ").");
|
|
425 | 432 |
dialogs.message( |
426 | 433 |
i18nManager.getTranslation( |
427 | 434 |
"_Running_autorun_script_from_XnameX", |
... | ... | |
436 | 443 |
try { |
437 | 444 |
script.run(); |
438 | 445 |
} catch (Exception ex) { |
439 |
logger.warn("Can't execute " + title + " from '" + script.getFile().getAbsolutePath() + "'.", ex);
|
|
446 |
LOGGER.warn("Can't execute " + title + " from '" + script.getFile().getAbsolutePath() + "'.", ex);
|
|
440 | 447 |
} |
441 | 448 |
} |
442 | 449 |
} |
... | ... | |
488 | 495 |
if (script.isEnabled()) { |
489 | 496 |
scripts.add(script); |
490 | 497 |
} else { |
491 |
logger.info("Skip " + title + " script '" + file.getAbsolutePath() + "'.");
|
|
498 |
LOGGER.info("Skip " + title + " script '" + file.getAbsolutePath() + "'.");
|
|
492 | 499 |
} |
493 | 500 |
} |
494 | 501 |
} |
... | ... | |
506 | 513 |
Files.walkFileTree(Paths.get(folder.getFile().toURI()), opts, Integer.MAX_VALUE, visitor); |
507 | 514 |
} |
508 | 515 |
} catch (Exception ex) { |
509 |
logger.warn("Can't execute " + title + " in home.", ex);
|
|
516 |
LOGGER.warn("Can't execute " + title + " in home.", ex);
|
|
510 | 517 |
} |
511 | 518 |
sortScripts(scripts); |
512 | 519 |
executeScripts(scripts, null); |
513 | 520 |
|
514 | 521 |
} finally { |
515 |
logger.info("Running " + title + " scripts terminated.");
|
|
522 |
LOGGER.info("Running " + title + " scripts terminated.");
|
|
516 | 523 |
dialogs.message("", JOptionPane.INFORMATION_MESSAGE); |
517 | 524 |
executingAutorunScripts = false; |
518 | 525 |
} |
526 |
checkDataFoldersVersions(); |
|
519 | 527 |
} |
520 | 528 |
|
521 | 529 |
} |
530 |
|
|
531 |
private void checkDataFoldersVersions() { |
|
532 |
final ScriptingManager manager = ScriptingLocator.getManager(); |
|
533 |
PackageManager versionFactory = ToolsLocator.getPackageManager(); |
|
534 |
Version currentVersion = versionFactory.createVersion(this.appversion); |
|
535 |
FolderSet folders = new DefaultFolderSet(); |
|
536 |
folders.add(this.pluginHomeFolder); |
|
537 |
final List<DataFolderFound> dataFoldersFound = manager.searchOldVersions(currentVersion, folders); |
|
538 |
if( dataFoldersFound == null || dataFoldersFound.isEmpty() ) { |
|
539 |
return; |
|
540 |
} |
|
541 |
Runnable askUser = new Runnable() { |
|
542 |
@Override |
|
543 |
public void run() { |
|
544 |
WindowManager_v2 winManager = (WindowManager_v2) ToolsSwingLocator.getWindowManager(); |
|
545 |
DataFoldersRecoverPanel panel = new DataFoldersRecoverPanel(dataFoldersFound); |
|
546 |
Dialog dialog = winManager.createDialog( |
|
547 |
panel, |
|
548 |
"Recuperacion de preferencias", |
|
549 |
"Seleccione los complementos de los que recuperar las preferencias.", |
|
550 |
WindowManager_v2.BUTTONS_OK_CANCEL |
|
551 |
); |
|
552 |
dialog.show(WindowManager.MODE.DIALOG); |
|
553 |
if (dialog.getAction() == WindowManager_v2.BUTTON_OK) { |
|
554 |
List<DataFolderFound> toRestore = panel.getSelectedDataFolders(); |
|
555 |
for (DataFolderFound dataFolderFound : dataFoldersFound) { |
|
556 |
if (toRestore.contains(dataFolderFound)) { |
|
557 |
dataFolderFound.restore(); |
|
558 |
} else { |
|
559 |
dataFolderFound.leave(); |
|
560 |
} |
|
561 |
} |
|
562 |
} |
|
563 |
} |
|
564 |
}; |
|
565 |
if( SwingUtilities.isEventDispatchThread() ) { |
|
566 |
askUser.run(); |
|
567 |
} else { |
|
568 |
SwingUtilities.invokeLater(askUser); |
|
569 |
} |
|
570 |
} |
|
522 | 571 |
} |
Also available in: Unified diff