From a149f88656ddbdbba86ee60f2a6434fb1856146a Mon Sep 17 00:00:00 2001 From: aschwinn <al.schwinn@gsi.de> Date: Thu, 1 Sep 2016 16:15:02 +0200 Subject: [PATCH] removed plugin from release-branch --- silecs-eclipse-plugin-feature/.project | 17 - .../build.properties | 1 - silecs-eclipse-plugin-feature/feature.xml | 746 --------------- silecs-eclipse-plugin-update-site/.gitignore | 2 - silecs-eclipse-plugin-update-site/.project | 17 - .../artifacts.jar | Bin 703 -> 0 bytes silecs-eclipse-plugin-update-site/content.jar | Bin 79343 -> 0 bytes .../deliverToWebDav.sh | 29 - silecs-eclipse-plugin-update-site/index.html | 60 -- silecs-eclipse-plugin-update-site/install.sh | 10 - silecs-eclipse-plugin-update-site/site.xml | 18 - silecs-eclipse-plugin-update-site/test.txt | 1 - .../web/site.css | 12 - .../web/site.xsl | 214 ----- silecs-eclipse-plugin/.classpath | 10 - silecs-eclipse-plugin/.gitignore | 4 - silecs-eclipse-plugin/.project | 36 - silecs-eclipse-plugin/.pydevproject | 8 - .../org.eclipse.core.resources.prefs | 3 - .../.settings/org.eclipse.jdt.core.prefs | 13 - .../org.eclipse.ltk.core.refactoring.prefs | 2 - .../.settings/org.eclipse.m2e.core.prefs | 4 - .../JNLP-INF/APPLICATION_TEMPLATE.JNLP | 69 -- silecs-eclipse-plugin/LICENSE | 674 -------------- silecs-eclipse-plugin/META-INF/MANIFEST.MF | 114 --- .../OSGI-INF/l10n/bundle.properties | 2 - silecs-eclipse-plugin/README.md | 40 - silecs-eclipse-plugin/build.properties | 18 - silecs-eclipse-plugin/build.xml | 527 ----------- .../icons/class-document.png | Bin 1035 -> 0 bytes .../icons/deploy-document.png | Bin 1028 -> 0 bytes silecs-eclipse-plugin/icons/diag-tool.gif | Bin 197 -> 0 bytes .../icons/generated-code.gif | Bin 591 -> 0 bytes silecs-eclipse-plugin/icons/silecs-logo.ico | Bin 15086 -> 0 bytes .../icons/validate-document.gif | Bin 76 -> 0 bytes silecs-eclipse-plugin/plugin.xml | 874 ------------------ silecs-eclipse-plugin/pom.xml | 136 --- silecs-eclipse-plugin/project.properties | 3 - .../java/cern/silecs/activator/Activator.java | 70 -- .../silecs/activator/WebStartLauncher.java | 52 -- .../control/core/DeployProjectNature.java | 103 --- .../control/core/DesignProjectNature.java | 110 --- .../control/core/SilecsProjectNature.java | 162 ---- .../control/handlers/AboutSilecsHandler.java | 68 -- .../silecs/control/handlers/BaseHandler.java | 175 ---- .../handlers/DiagnosticToolHandler.java | 76 -- .../control/handlers/ExpandAllHandler.java | 60 -- .../control/handlers/GenerateCodeHandler.java | 154 --- .../silecs/control/handlers/SilecsWikis.java | 54 -- .../handlers/UpdateSilecsProjectHandler.java | 77 -- .../control/handlers/ValidateHandler.java | 52 -- .../silecs/control/validation/Validator.java | 103 --- .../control/validation/internal/Handler.java | 91 -- .../control/validation/internalRules.java | 201 ---- .../model/document/SilecsDocumentError.java | 106 --- .../model/document/XmlBasedDocument.java | 234 ----- .../model/exception/SilecsException.java | 95 -- .../src/java/cern/silecs/utils/OSExecute.java | 142 --- .../cern/silecs/utils/SilecsConstants.java | 97 -- .../java/cern/silecs/utils/SilecsUtils.java | 311 ------- .../src/java/cern/silecs/utils/XmlUtils.java | 188 ---- .../java/cern/silecs/view/Application.java | 68 -- .../view/ApplicationActionBarAdvisor.java | 27 - .../view/ApplicationWorkbenchAdvisor.java | 74 -- .../ApplicationWorkbenchWindowAdvisor.java | 179 ---- .../java/cern/silecs/view/Perspective.java | 28 - .../silecs/view/console/ConsoleHandler.java | 109 --- .../view/dialogs/SilecsMessageDialog.java | 48 - .../view/editor/DeployMultiPageEditor.java | 25 - .../view/editor/DesignMultiPageEditor.java | 25 - .../view/editor/XMLMultiPageEditor.java | 169 ---- .../view/editor/internal/SchemaHelper.java | 58 -- .../SilecsTableColumnViewerLabelProvider.java | 181 ---- .../SilecsXMLTableTreeContentProvider.java | 111 --- ...MLTableTreePropertyDescriptionFactory.java | 194 ---- .../internal/SilecsXMLTableTreeViewer.java | 176 ---- .../silecs/view/explorer/ContentSorter.java | 64 -- .../silecs/view/explorer/ProjectContent.java | 137 --- .../view/explorer/SilecsProjectExplorer.java | 199 ---- .../cern/silecs/view/job/BaseFileJob.java | 79 -- .../cern/silecs/view/job/BaseProjectJob.java | 76 -- .../silecs/view/job/GenerateClassJob.java | 99 -- .../silecs/view/job/GenerateDeployJob.java | 107 --- .../silecs/view/job/UpdateVersionJob.java | 115 --- .../cern/silecs/view/job/ValidationJob.java | 223 ----- .../cern/silecs/view/marker/SilecsMarker.java | 64 -- .../view/marker/SilecsMarkerUpdater.java | 48 - .../preferences/EditorPreferencePage.java | 232 ----- .../preferences/LoggingPreferencePage.java | 121 --- .../view/preferences/MainPreferencePage.java | 344 ------- .../preferences/PreferenceInitializer.java | 59 -- .../view/wizards/GenerateCodeWizard.java | 70 -- .../view/wizards/ImportDeployFileWizard.java | 79 -- .../view/wizards/ImportDesignFileWizard.java | 76 -- .../view/wizards/NewSilecsDeployWizard.java | 113 --- .../view/wizards/NewSilecsDesignWizard.java | 115 --- .../wizards/UpdateSilecsProjectWizard.java | 52 -- .../view/wizards/page/ChooseFilePage.java | 136 --- .../view/wizards/page/PickTemplatePage.java | 58 -- .../view/wizards/page/PickVersionPage.java | 72 -- .../view/wizards/page/SilecsProjectPage.java | 152 --- snap7/.gitignore | 3 +- 102 files changed, 2 insertions(+), 10808 deletions(-) delete mode 100644 silecs-eclipse-plugin-feature/.project delete mode 100644 silecs-eclipse-plugin-feature/build.properties delete mode 100644 silecs-eclipse-plugin-feature/feature.xml delete mode 100644 silecs-eclipse-plugin-update-site/.gitignore delete mode 100644 silecs-eclipse-plugin-update-site/.project delete mode 100644 silecs-eclipse-plugin-update-site/artifacts.jar delete mode 100644 silecs-eclipse-plugin-update-site/content.jar delete mode 100755 silecs-eclipse-plugin-update-site/deliverToWebDav.sh delete mode 100644 silecs-eclipse-plugin-update-site/index.html delete mode 100755 silecs-eclipse-plugin-update-site/install.sh delete mode 100644 silecs-eclipse-plugin-update-site/site.xml delete mode 100644 silecs-eclipse-plugin-update-site/test.txt delete mode 100644 silecs-eclipse-plugin-update-site/web/site.css delete mode 100644 silecs-eclipse-plugin-update-site/web/site.xsl delete mode 100644 silecs-eclipse-plugin/.classpath delete mode 100644 silecs-eclipse-plugin/.gitignore delete mode 100644 silecs-eclipse-plugin/.project delete mode 100644 silecs-eclipse-plugin/.pydevproject delete mode 100644 silecs-eclipse-plugin/.settings/org.eclipse.core.resources.prefs delete mode 100644 silecs-eclipse-plugin/.settings/org.eclipse.jdt.core.prefs delete mode 100644 silecs-eclipse-plugin/.settings/org.eclipse.ltk.core.refactoring.prefs delete mode 100644 silecs-eclipse-plugin/.settings/org.eclipse.m2e.core.prefs delete mode 100644 silecs-eclipse-plugin/JNLP-INF/APPLICATION_TEMPLATE.JNLP delete mode 100644 silecs-eclipse-plugin/LICENSE delete mode 100644 silecs-eclipse-plugin/META-INF/MANIFEST.MF delete mode 100644 silecs-eclipse-plugin/OSGI-INF/l10n/bundle.properties delete mode 100644 silecs-eclipse-plugin/README.md delete mode 100644 silecs-eclipse-plugin/build.properties delete mode 100644 silecs-eclipse-plugin/build.xml delete mode 100644 silecs-eclipse-plugin/icons/class-document.png delete mode 100644 silecs-eclipse-plugin/icons/deploy-document.png delete mode 100644 silecs-eclipse-plugin/icons/diag-tool.gif delete mode 100644 silecs-eclipse-plugin/icons/generated-code.gif delete mode 100644 silecs-eclipse-plugin/icons/silecs-logo.ico delete mode 100644 silecs-eclipse-plugin/icons/validate-document.gif delete mode 100644 silecs-eclipse-plugin/plugin.xml delete mode 100644 silecs-eclipse-plugin/pom.xml delete mode 100644 silecs-eclipse-plugin/project.properties delete mode 100644 silecs-eclipse-plugin/src/java/cern/silecs/activator/Activator.java delete mode 100644 silecs-eclipse-plugin/src/java/cern/silecs/activator/WebStartLauncher.java delete mode 100644 silecs-eclipse-plugin/src/java/cern/silecs/control/core/DeployProjectNature.java delete mode 100644 silecs-eclipse-plugin/src/java/cern/silecs/control/core/DesignProjectNature.java delete mode 100644 silecs-eclipse-plugin/src/java/cern/silecs/control/core/SilecsProjectNature.java delete mode 100644 silecs-eclipse-plugin/src/java/cern/silecs/control/handlers/AboutSilecsHandler.java delete mode 100644 silecs-eclipse-plugin/src/java/cern/silecs/control/handlers/BaseHandler.java delete mode 100644 silecs-eclipse-plugin/src/java/cern/silecs/control/handlers/DiagnosticToolHandler.java delete mode 100644 silecs-eclipse-plugin/src/java/cern/silecs/control/handlers/ExpandAllHandler.java delete mode 100644 silecs-eclipse-plugin/src/java/cern/silecs/control/handlers/GenerateCodeHandler.java delete mode 100644 silecs-eclipse-plugin/src/java/cern/silecs/control/handlers/SilecsWikis.java delete mode 100644 silecs-eclipse-plugin/src/java/cern/silecs/control/handlers/UpdateSilecsProjectHandler.java delete mode 100644 silecs-eclipse-plugin/src/java/cern/silecs/control/handlers/ValidateHandler.java delete mode 100644 silecs-eclipse-plugin/src/java/cern/silecs/control/validation/Validator.java delete mode 100644 silecs-eclipse-plugin/src/java/cern/silecs/control/validation/internal/Handler.java delete mode 100644 silecs-eclipse-plugin/src/java/cern/silecs/control/validation/internalRules.java delete mode 100644 silecs-eclipse-plugin/src/java/cern/silecs/model/document/SilecsDocumentError.java delete mode 100644 silecs-eclipse-plugin/src/java/cern/silecs/model/document/XmlBasedDocument.java delete mode 100644 silecs-eclipse-plugin/src/java/cern/silecs/model/exception/SilecsException.java delete mode 100644 silecs-eclipse-plugin/src/java/cern/silecs/utils/OSExecute.java delete mode 100644 silecs-eclipse-plugin/src/java/cern/silecs/utils/SilecsConstants.java delete mode 100644 silecs-eclipse-plugin/src/java/cern/silecs/utils/SilecsUtils.java delete mode 100644 silecs-eclipse-plugin/src/java/cern/silecs/utils/XmlUtils.java delete mode 100644 silecs-eclipse-plugin/src/java/cern/silecs/view/Application.java delete mode 100644 silecs-eclipse-plugin/src/java/cern/silecs/view/ApplicationActionBarAdvisor.java delete mode 100644 silecs-eclipse-plugin/src/java/cern/silecs/view/ApplicationWorkbenchAdvisor.java delete mode 100644 silecs-eclipse-plugin/src/java/cern/silecs/view/ApplicationWorkbenchWindowAdvisor.java delete mode 100644 silecs-eclipse-plugin/src/java/cern/silecs/view/Perspective.java delete mode 100644 silecs-eclipse-plugin/src/java/cern/silecs/view/console/ConsoleHandler.java delete mode 100644 silecs-eclipse-plugin/src/java/cern/silecs/view/dialogs/SilecsMessageDialog.java delete mode 100644 silecs-eclipse-plugin/src/java/cern/silecs/view/editor/DeployMultiPageEditor.java delete mode 100644 silecs-eclipse-plugin/src/java/cern/silecs/view/editor/DesignMultiPageEditor.java delete mode 100644 silecs-eclipse-plugin/src/java/cern/silecs/view/editor/XMLMultiPageEditor.java delete mode 100644 silecs-eclipse-plugin/src/java/cern/silecs/view/editor/internal/SchemaHelper.java delete mode 100644 silecs-eclipse-plugin/src/java/cern/silecs/view/editor/internal/SilecsTableColumnViewerLabelProvider.java delete mode 100644 silecs-eclipse-plugin/src/java/cern/silecs/view/editor/internal/SilecsXMLTableTreeContentProvider.java delete mode 100644 silecs-eclipse-plugin/src/java/cern/silecs/view/editor/internal/SilecsXMLTableTreePropertyDescriptionFactory.java delete mode 100644 silecs-eclipse-plugin/src/java/cern/silecs/view/editor/internal/SilecsXMLTableTreeViewer.java delete mode 100644 silecs-eclipse-plugin/src/java/cern/silecs/view/explorer/ContentSorter.java delete mode 100644 silecs-eclipse-plugin/src/java/cern/silecs/view/explorer/ProjectContent.java delete mode 100644 silecs-eclipse-plugin/src/java/cern/silecs/view/explorer/SilecsProjectExplorer.java delete mode 100644 silecs-eclipse-plugin/src/java/cern/silecs/view/job/BaseFileJob.java delete mode 100644 silecs-eclipse-plugin/src/java/cern/silecs/view/job/BaseProjectJob.java delete mode 100644 silecs-eclipse-plugin/src/java/cern/silecs/view/job/GenerateClassJob.java delete mode 100644 silecs-eclipse-plugin/src/java/cern/silecs/view/job/GenerateDeployJob.java delete mode 100644 silecs-eclipse-plugin/src/java/cern/silecs/view/job/UpdateVersionJob.java delete mode 100644 silecs-eclipse-plugin/src/java/cern/silecs/view/job/ValidationJob.java delete mode 100644 silecs-eclipse-plugin/src/java/cern/silecs/view/marker/SilecsMarker.java delete mode 100644 silecs-eclipse-plugin/src/java/cern/silecs/view/marker/SilecsMarkerUpdater.java delete mode 100644 silecs-eclipse-plugin/src/java/cern/silecs/view/preferences/EditorPreferencePage.java delete mode 100644 silecs-eclipse-plugin/src/java/cern/silecs/view/preferences/LoggingPreferencePage.java delete mode 100644 silecs-eclipse-plugin/src/java/cern/silecs/view/preferences/MainPreferencePage.java delete mode 100644 silecs-eclipse-plugin/src/java/cern/silecs/view/preferences/PreferenceInitializer.java delete mode 100644 silecs-eclipse-plugin/src/java/cern/silecs/view/wizards/GenerateCodeWizard.java delete mode 100644 silecs-eclipse-plugin/src/java/cern/silecs/view/wizards/ImportDeployFileWizard.java delete mode 100644 silecs-eclipse-plugin/src/java/cern/silecs/view/wizards/ImportDesignFileWizard.java delete mode 100644 silecs-eclipse-plugin/src/java/cern/silecs/view/wizards/NewSilecsDeployWizard.java delete mode 100644 silecs-eclipse-plugin/src/java/cern/silecs/view/wizards/NewSilecsDesignWizard.java delete mode 100644 silecs-eclipse-plugin/src/java/cern/silecs/view/wizards/UpdateSilecsProjectWizard.java delete mode 100644 silecs-eclipse-plugin/src/java/cern/silecs/view/wizards/page/ChooseFilePage.java delete mode 100644 silecs-eclipse-plugin/src/java/cern/silecs/view/wizards/page/PickTemplatePage.java delete mode 100644 silecs-eclipse-plugin/src/java/cern/silecs/view/wizards/page/PickVersionPage.java delete mode 100644 silecs-eclipse-plugin/src/java/cern/silecs/view/wizards/page/SilecsProjectPage.java diff --git a/silecs-eclipse-plugin-feature/.project b/silecs-eclipse-plugin-feature/.project deleted file mode 100644 index a49d71b..0000000 --- a/silecs-eclipse-plugin-feature/.project +++ /dev/null @@ -1,17 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<projectDescription> - <name>silecs-eclipse-plugin-feature</name> - <comment></comment> - <projects> - </projects> - <buildSpec> - <buildCommand> - <name>org.eclipse.pde.FeatureBuilder</name> - <arguments> - </arguments> - </buildCommand> - </buildSpec> - <natures> - <nature>org.eclipse.pde.FeatureNature</nature> - </natures> -</projectDescription> diff --git a/silecs-eclipse-plugin-feature/build.properties b/silecs-eclipse-plugin-feature/build.properties deleted file mode 100644 index 64f93a9..0000000 --- a/silecs-eclipse-plugin-feature/build.properties +++ /dev/null @@ -1 +0,0 @@ -bin.includes = feature.xml diff --git a/silecs-eclipse-plugin-feature/feature.xml b/silecs-eclipse-plugin-feature/feature.xml deleted file mode 100644 index 14d3b07..0000000 --- a/silecs-eclipse-plugin-feature/feature.xml +++ /dev/null @@ -1,746 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<feature - id="silecsEclipsePluginFeature" - label="Silecs-eclipse-plugin-feature" - version="1.0.0.qualifier"> - - <description url="http://www.example.com/description"> - SILECS Eclipse Plugin - </description> - - <copyright url="http://www.example.com/copyright"> - Copyright 2016 CERN and GSI - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see <http://www.gnu.org/licenses/>. - </copyright> - - <license url="http://www.gnu.org/licenses"> - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - <one line to give the program's name and a brief idea of what it does.> - Copyright (C) <year> <name of author> - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - <program> Copyright (C) <year> <name of author> - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -<http://www.gnu.org/licenses/>. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -<http://www.gnu.org/philosophy/why-not-lgpl.html>. - </license> - - <requires> - <import plugin="org.eclipse.ui"/> - <import plugin="org.eclipse.core.runtime"/> - <import plugin="org.eclipse.ui.workbench"/> - <import plugin="org.eclipse.core.resources"/> - <import plugin="org.eclipse.ui.ide"/> - <import plugin="org.eclipse.ui.editors"/> - <import plugin="org.eclipse.wst.xml.core"/> - <import plugin="org.eclipse.wst.xml.ui"/> - <import plugin="org.eclipse.ui.navigator.resources"/> - <import plugin="org.eclipse.core.filesystem"/> - <import plugin="org.eclipse.ui.console"/> - <import plugin="org.eclipse.ui.views"/> - <import plugin="org.eclipse.wst.validation"/> - <import plugin="org.eclipse.wst.validation.infopop"/> - <import plugin="org.eclipse.wst.validation.ui"/> - <import plugin="org.eclipse.jface.text"/> - <import plugin="org.eclipse.wst.sse.ui"/> - <import plugin="org.eclipse.ui.workbench.texteditor"/> - <import plugin="org.eclipse.text"/> - <import plugin="org.eclipse.wst.sse.core"/> - <import plugin="org.eclipse.ui.navigator"/> - <import plugin="org.eclipse.xsd"/> - <import plugin="org.eclipse.wst.xsd.core"/> - <import plugin="org.eclipse.core.expressions"/> - <import plugin="org.eclipse.cdt"/> - <import plugin="org.eclipse.cdt.core"/> - <import plugin="org.eclipse.cdt.ui"/> - <import plugin="org.eclipse.cdt.managedbuilder.ui"/> - <import plugin="org.eclipse.ltk.core.refactoring"/> - <import plugin="org.eclipse.ltk.ui.refactoring"/> - <import plugin="org.eclipse.equinox.launcher"/> - </requires> - - <plugin - id="silecs.eclipse.plugin" - download-size="0" - install-size="0" - version="0.0.0" - unpack="false"/> - -</feature> diff --git a/silecs-eclipse-plugin-update-site/.gitignore b/silecs-eclipse-plugin-update-site/.gitignore deleted file mode 100644 index 0d55b7c..0000000 --- a/silecs-eclipse-plugin-update-site/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -/features/* -/plugins/* \ No newline at end of file diff --git a/silecs-eclipse-plugin-update-site/.project b/silecs-eclipse-plugin-update-site/.project deleted file mode 100644 index e9558b3..0000000 --- a/silecs-eclipse-plugin-update-site/.project +++ /dev/null @@ -1,17 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<projectDescription> - <name>silecs-eclipse-plugin-update-site</name> - <comment></comment> - <projects> - </projects> - <buildSpec> - <buildCommand> - <name>org.eclipse.pde.UpdateSiteBuilder</name> - <arguments> - </arguments> - </buildCommand> - </buildSpec> - <natures> - <nature>org.eclipse.pde.UpdateSiteNature</nature> - </natures> -</projectDescription> diff --git a/silecs-eclipse-plugin-update-site/artifacts.jar b/silecs-eclipse-plugin-update-site/artifacts.jar deleted file mode 100644 index a87d7ab050a527669b91f8d1c7c95b33f7f74ff4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 703 zcmWIWW@Zs#;Nak3xLU~Q$$$iS8CVz+i%K%n5|c}c^(u06{+(iAxI67&(Jcdkw)Zxz zd_GfUvb?t$re!_2GRHc%=$*#4gewzOLnqx9Xe(cTfWukZL*t#w<;7)te}&KgKXtCZ zycS<wK<*5Y<PK&QM$uNCnKSwy-hF%aH;<qC-Wsnhsm4J!&WCs&UUQ}U@2b+fzYOoD zv94Tk+i~iVpbxE)T#d0B;*+Z6E;JdZW;pD>?sKBu!L?DG<CZPcVXdQ?+MN7WrL!i> zG3>k)6d3NyYw+fxrpxS#*&okZh@RHU(pfp>cGrhntc6A{83M~A=Ny%2bJymM)b#CL z_;lTsSF_ASD{q)>j0|_tY`;)0^1H9(tmX{Eyp?i?SC_Aw$p2u~gCi1V$$DyM=dga? zs$sczUz@|Vu&ZS}zfYS^wLTlZ@X^;foWkFxuZgLBtH0eP?4bFg^0)Tt#phWrb}MuF ze&TNw&)@gI>Gj#){Ap8eM9EuUGOK>&Q~9DZFYKPqy!>ZBf3e(n%`TVE!4%fFFmaC9 zv*gc5mh;}1o^NjwBcM2E5l`Zr2Pvy7Pc`~iuAE}eI(<n=pU^a}>etJX(lyIH&T%Ep zP5E(RN_t(<{H-b3&m~k>=>EPt<8?=RiBRP0!?kYKJ-yryAIdgJ+Z@(7n%VMC==?i5 z3yZKOx0gQ+9#yn_FnGz}ew;5$fcJkkdud-z%SCCow)pB7dIvv$x$w~B+@#N$F3l!V zDeHS5Phx!ik56jP(Z*d*X8qgFJhhDJ4b%UaZ=LT;=3H7hd)bSg{)pX0FKu%EFIV3i zAK=Z-VYa37pf(c&!+UN9h5&CyCJ_ciT0@otr8QK5k@5n(S=m5J7=h3pNM`|!WncgR D8nY|i diff --git a/silecs-eclipse-plugin-update-site/content.jar b/silecs-eclipse-plugin-update-site/content.jar deleted file mode 100644 index 5d4662ba608c642e81076909afa6682abd697802..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 79343 zcmV)FK)=6GO9KQH00;;O0M&5;NdN!<000000000001E&F0Ap`%bY*UIE_iKh{>lIV z)V*tS+enfw{C$4~BHlP-D}ttPJ>Ao{-H>IvtsPm?N^*NTHcsq;2v9;B1ULXFne*%4 zyjK<g${sg4Cr(f7+Lp+yTUJ(HpZw`RJ}t}SE^peRu6};>eERHBl2`LOE2^8HAHBbN z^W-m&{^Q^O?Wg}(=3SblU3!tP>bB_WX5+tw-@}hJ;kQ+~%z?rRzLY1IMVCKHy3GoH zR5v%%d|no-HlOByUl&#VX<AfW-c)HhUA>s<NYg-UdQ#8R^4(wxkD{5w9RB^^lH{jV zQ?K%-EAlpJi+{j~FX-ptH##{OtSgpz+oj7DkV?xn{P6iV-#vTw=a=99<>g;qe*fs{ z)^E=1<*LcsHqY#<U9-;l8$Ue_lc0aEtD@8CJb$V4!Jj5Y_Vc5*DD!!1+p;RxH%0X* z-r?ud7tfx5`|P_H-#>r$;yWRMM0krIAk(DP4UGHW&v1_>Ls|!qk~W92if;4sqi4G2 zhjwyoPqM}ToLo&`t*flepPa&vY+o*ET2JP6wJ2@^`5}oh)_|?9JhA`fM+j5xZMagu zD>9q>_s@E>$6sbNbh}FD+s7}~k7R;haZXP^H)eZNOs{E8dmQEW^e&ykUq7ZdHq0EZ z+*HO&=Us7^!ku!%5WD<g%5dskQ<v~(lkbiAZHoKXw0j!>n6H3q29*B=Lzp<+`B=+3 z%gbq2&)3Vm>h?rF|1{56d)caWSCqRy<GUii-wRPZ+O{rt&-O$-E7G#Q+0S-N^Q_p1 zFmSZ@$K*W7r&S3OXHQG`y}sTL;bq!<+}ET*U0LJ}Xm|OZnC8CtN7`ijB@Umv+0BK* zpZ(8#y_z=b3e~`!5Je3lg`eH#)9ZP@8{Y2GoX*R%Z5PFk<Vv6VO<sW}INu9xl;3+H zjLPex*wMw=MjRiu{SE+@NLS2vbAcWhq*>3qb(8MsDRl!i`3=b3T~qy(mg#PEi9S)d zO2w}9paJdtQ<qmrb?4j6^vhy5Z_pUwY5Vt`UsNUzUxfFk-H~oFAm8lhZ5t47;rf7r z{*RptT_)e<%T)<x{GMjtHSpQJk*?ZB-7I%6eR+USZMml#ij;RQ(H-gOe3_L+wWp1b zhJa_gt5^HnCvtd!(y_-=4rA;^Q}6?2^>Ux&_oPye3^A?O-D<tpgNGabX`l4>a@Nao znsvKBV<rpF%wmtEkvm`PclOgZ{j{$k_VETU%N;s@#t83a)~mF;-3!ra`e{$o-Jh5z z>cH9Qs@M<h#k!hzd(pRv{O{==OdFzHU;m!ZyFE=Cqax`Zw*~$m`tkNeeV4Zq4lv)H z9ZA%7sz(^bZ+_n~O)$!Lcb@~vY0>RaPB2})#Csx(R{6e2@6=FX+W6b+e23l-A-j9F z6)~`5s-UIp^bL)uPOsB;cPe^J`Zh0DyNX8!>O0kxndGM(a>D(~-5FM2Wpr$b-|LSs z|3v9)#J!h5@|7c$n4ePoLjuG+0_8(&AAm9zC_TY`(jdjg@)cfw<MS2dm!HcW@Dp4Y zmisZ>zptQ&A^c$4?vnDlnBLdT$LqYB-|l11d0Vd=ihJ#N)^L71r^)fr9nbZ??a0{S zG>m;v-Zi(uPE_e#af4YY`#M454h*HWo3_iBJ70h$0PL79Mnw0(AU?}wf3&AXwWwG1 zYOiDLnj3##z^A4isgJv!cDn~z?IkKrTQfR#ImrIDWA|dpi<8|_{?ulBkf?38hfN@P zho)QJN@Q}U)UzFP0}$NDCIHo)t42U`nO2~{X4mVY%rJzp;~~oKqiQoCi-3!Z>Sp&N zz%|($eN~vt6invZe8<<2kKkiZc6>K|xkJ+KOuw7H*bCc4v;Rvx`=6ewiC{lTo36m) zvgC4aGw3f9N*SW`kKUBNGWp!i$R=Pv>gx6Uc2yS@=eBP#nQ$5pSVw`#>$FS97FSf9 z$%1lh<oEF>l8^c3=SQ&B#UgLJ=wnGD8ReIo<#k;a^HVscACl2s`LTsdQRZD;{qQqp z`~T_x`*irDeEnBm$`8qKzx<@0x>>o^_#cO@d>U^9|NN(?ST`Vl@0AeDc)I5_+c$aI ztx>_1KYve~{*G^{DHtUFzkDF^|4Xv=r364e_JnuyiA?M(N&>)ao;QVN8Os>QC$po= zM7AK|J@{j^r|YIP`nO%T`r+x*`+LkTO_!?@Ma}Z5pGs`qf2JOxzo%bYj_}9Me1|?2 zJ<dPkRN-otsge5JLcefvBi<G;`?|adQ+qrz4ZM_TS?Y9Jy7UJ|GbZshviO0OKYXdb zc-{Xm$>)C*t5u%$q%&^$ZUrd(9K?KHwfX2t$?uYNQ$&~krdm&7v!3dAAHgTehd<$0 z^2_P_<d@m$?BehwIe-7^<oGCo|C^m&&gd0M#{ZL7C3!hXUVNYY=eo+17tfx3M_=LZ z9o4H%Q{3Ek$>XB~`epK_$@Ap0UUc_qlP7O#c%aBCo+QWBe46~J?0%G4FWLpo_)j;T zkek7gZ)zB(XcG`%%c29*G3n}L4&x+gl_gmL8(mzlyByi$8YnOEmmukwLcK`3Tllu_ zqn4XY68KIszXjC>UeN^Ktv0FZE`b|X-{;xXE$V^)&YL`4UYEK5^wn+7`-{oTX_=g_ zuVM7$L}mcvq{#v{WkRbc^F?Q~Tht8^X?44BiFF6+Y4WkCvKE(vmUKJq4`@6DB$8#_ zcF72hRfDBfbC?qmN$|HIg^HUh&xjW6YzL}klHRAAWK*vjnrK!panIXZrAFJ9!^Y+^ z8&F#|3DpjzZ8u?3pWOwlxu`Ne&zp4$T4o2F(i@exqdzhnl1c;GlN6R#-!$p+$rB)k z+Hul?T*6~*@?{FQkx0gSi#vscuo!aP0yS912RId+`F5s-PvR$t)C23YV}RM=igeT; zaZc%KRiZkRmTj$TOskEY5^gC>yUf!THwU>FkK=knGfmgsZB29itzIYdv?6NwJEcTB zDEraEa_TzbmJhdimE6Myt@89EP7im+<~PA#;hL#F1I;cx9yyN*-Vh?QYG9o(hcg&z zd<SCgN}^-wZqp7Ann>NIcg#wT)!eP-%RHE8@>tlRxe3<>s4SCWfuxiBqP;zs*if*Z zd0yNh0d(C0*(^`sjBo>Q@{R<+!sc|J;(OG&ujA(&+uJmN1abt-an7?uLRC`b_e6;1 z9L@sgY$QKc^}W%~YNSiN1$*AR-!+ox@_EO%g9L0#CspOVx2q<<1F6Owgv<{6nB~<5 z&rcV{^!dv;@3j3Wzoy&0ZW_Ff4XuwqH6_^soKPcU;0N)rh}ay|Nw`<At?ddfVR2oQ z1*zz={i7%7cW#1HC>F}Ga9Ofqfo%N4kS0tIe})_283nHvtvA}OH$YcZ;>m-vY2h&r zk^{E$Hb-hi<_6PLXqQMzB#T@&V7Z1ny#l2vfp@U0d9(6)vBKQ_mRAT`q8&cWvmG#D zCbyS}^{xd_*wCe&=%<O6V^!Wo<6@w72yA7OYj1(A=q3n5!Mh2n1x<BBw21NGUxl(# zw12OGlS(ufWZok1SeT!mjIknIw(d6R?tzQCeAWIylpa4n02Twe+R;15S^;ia!~}RF z9=|w%^8j(fyodr%gb1HSai@G*<~JZ{NE0BRp{fECf5JfWDM?>pr~!B23^H5gpVC#` z{zwxM*(yJgg_6{#4S>bZK`J*OZLy*cpB1@Sd~Qw7N(6}O24AxcF%PXLl3i1t#x*c6 zKRjUy{1imfXn{Y%1S~8|gVGuc5CQfWUgrsw?ZIMraxAp633C8Xw4nC^)RrY49Xx@k z_`o;QPWCWMK=y;)Rj*rEtiDh@ExbA?ZVLFNjT`OpWxb>gF6JYz07@lZb&}4p`T~C_ zrVZY=W?d1P;nI2n1iu6}6tOz+Q3;b<-`vtimT9#{GXpLaUuTi9ZA}slbq_caeA7`C zgn@xgD$F&6OAosu><om`0;P<+c+3sJiT=#oqc!q8umDXspoisDOp4P}f(*LGJ66x< z>jt$V9vKu%-sw79qZNm&1S%lhg=`IagB}We6D3yxWKc&&QPk$Jo_l6TQfo;MSy#B- zt1g8F#&Z2W5ASd|DcmL5dfj>CKYDBGTae8xh(x8#h1F}hvpQ`U=~z~29G5mQMflk@ zoO#t1vi+j`U`{3+tj!8PlL6PK8S-I5bxbllGNM%q(9rsAB)3@O@f-KB5Vdsx!?g5x z>hsAmt@paHRv3woqQd!35`?JO=-Yvt+}*+?VRAqa1Fg8Ul9V>%*A@O+h3#dB1vV(G z*JTzA5B-old2k(JRwApAS4m6}w=801w#K)C^spzZb+f|FK!%39+_Y@#5M$M?JTqBM z`U7f7cE9iHB4hT2rxwm7$&jHN{(?@7bywOoHe+lP=C~BTyZEF5gXAF85z7G?5?xSD zk#}jcnTkroDhr-vkZ<r}tW~_}WubB53X7Clw>-R4S9A(hT|L1$4a_6C81fjB>R7{N zVt)X#F1{jgx7|a6jHMEph0&Z$0Qfkb)aMPvtJ%f7%jEF%b#ioe`uh0l`0Vu3f9cs2 z-r7Y`@hl>GfBO5n?tZ-TFCqPewQ}MPy_+xXc5XFBMo62TE_BHfS>`G1hCS9#$^wqD zOz-8fVLJncjtx>)n9&TJh&Thb&X)yl@ESumAdcIQ<Lk@8fToihEDy~gn@LJS8O<Uw zbKwri*%y4Xb)`u%OJNG~F*dfdjG=LGVmuCN#PpY`PDQ?-x4Iv4@chr9;K{F-XpiNQ zJcf1F%}rWK;?+Qd=Wnu7qJ!|7c-z&fL8?3IoLRaep@9EbrA?>jjNc)$aG~J_rtK}V z0qX_$It67b=t&bfGdRaeUP#jY(RAkL7BuELD{As)!Je&4dhTeF1>V52#9j1DaSyaC zif73*K~*Z$pd~e${>C4?ChOL|hLiH2kGAhnzB8|3Ecg~}ft&<wUS7!ZKsr=5G2tyY zG!4p60q=u+Wc;vDWTiJCf3}=gMr=w38><ZTCZ=FE;=k&(2rzdF_ayB}JhE8=oQ2N> z%&^Vz!ob@I|11mQcr|N_YJn%4(*wYaPf~bJp9<#<R}~&60z82~^7*<G*A_}L)`R3p zNK8M*PoNEifIGRK|G6w284DDna*c5Um5@Xzl9G>U@jz0Rop^BxHn=cbdY2X@O_}W` z-W`%uYzF{Cx2QV8Ls9{Cw9@EU2@i-ZLAb*Ad0CF17i{2NK6<%OnxMQAjmj2BaxJfL zQZkslIgQ$#bXKUAiu-`gN7$oxq+cOyNXkxQ+JuyJ22=)68Rciy9%4{9I-C^q2O0`o zuZrh^J}kCm#1F}ffqjc_LKVim%Xu*R0cHf@+XZIHM#bFWiXUA(*%PvyPHWWFM2eZm z53e5TRm{EY!H`2wc^*}vx(85P7FABl4QgNN`;<rlQ$W+t=E5E-n@C{SiY8+wAWsJl zm#t{o$A>K|c@-WD(>uQM3z9DtVvT6jN4-P(ShOV8dEbo=(GQP}KB+uwvb5nTF7kUh zKJzz+2kCfW{?KqznDoNx6b#Q^LRv7e3K%aLKPME%bFV7jVUPmr3HvShB;df%?ZpC( zs4erHd=V(L8?1}K=%Ht$=Tk7!$b)c%9)!NO#QfoW405LyL6V9PWYr2ig&=RS@Otn{ zkt37^fENpF_I36EpHbP7A1vHl)arOLN^!{-X6r+7iB?0}WXZAac#o(%3YG!<fE4t* zdI7Tp{WlmONGd~J4OR&%eTw3szJa$M{;eMX+q=#-=+>I(Va(H@soQ`ptJm~G@rIJP znXk*#+_p>Ht`fBGb$WxIvMLV>F}j0+eaj6i!s)Vx&jxn}Z3@YK5pPOn%PC)yZ3_H) z-J~dU!!r&$!LLYAzeFzBvo~=<({u~^B(f_Qp>>(dEqk0Eu+yI?WV%Ha93}`RIa86o zn0(I<)4TL{*rFp4pmk+Y8#8xNP6pKo2BD7=5%(36FV_d~!Zvp(<}21>S?r536(%mW zzijqkd=xvtxaeJEdn_698XYT7QnV}kyu7LH;4w`2A>=nOc&Kq-(81@F(cYB!hr)7r z;p+-BAt%b}aQX1_r~#9)O|KDule}~v^QOv6e3GgR#2LFPc+<cnfcM+{F3h#_M2h&} zeE7pmr$C0;9H6ejOXp`L=AUMb@{E{XOFPw^b8dqWS>n&ajSSL(Z!QR(E_@g1_8onJ z!;k8QJ<5n9Dspcq(295zVo2G-vNQ?q&nCDJ*z)es-^`9IVY&s+KJ0=$DF-xVr055w z@IbAe%diQ2X=ukOyTiOc0@o*oebAGDW!~2J=%bk6bDq^XUlzT;CZWlR#U@l=5YXQD zeF|M&v#le)fU6WZ*+Og@@X$-ph|%tJbJ%WRBiv;QG4<w;*PQpt2*h`tr$6m^`$tcj zg|Fx{PFFJ1JE5F=^gPsaR8caP0dmy*OBZ31GvQE9-oLFJCC%U+mTlxH^`=Uf7<et& z178*ux@g<=wQZHEI%aO^eWOkG9#nAwvm&m#0Y(S076w%;#HA%oVqK}vf;=3|D+_cp zU4tf?=auu=`MJ1=G3<C7ZF&EWjqN#yr98u#ouna!rZvYb0yXjdK?i(Ieo|UAo5I6+ zL_;#~(y(7PxA@NYg)O`CMEYYSXSnJY)8tj!f*?FM%PzL|55Z`cz{m|nwX+col9*b5 zt=cTQr}P;d1WnF0P(`5%REc4AcQspqmdZptiO$7LC4{=U@GHx_Qx~|-149|0?w~@S zg5rbzF$(RhtFl-YN+*uFsPGyZ+u}W7AP_!5_;5w9xlAb7@Z?pHe_wCn?V)G7-~(rB zljH_$9u)Mg2|s$1$=_OZ>rM=oFhGB;pjlM)eVJ!BIj@okX-IUDEYgDGxu|{<<KbPq zOG{QH+OW;no7nJ<7=U7XU`s41bc35ErW3mpqA9xQU{+gvovjdaBzSKnyvil2e5st1 z=8n*O@6pLADG%x-0_LJvz0OK3oZcjAiyaFuVy#dja$mjYx9J^UVt6RXGLBVxFvH4q z%l=*@1M{O-M0PEN*HONL6xR6eg5y3_cnZXy=(t+r@SrwecmpVyKxU_I&+@{{Z8kLd z(NH!bZkAKec-M)L*xV!{?PQ66*k`_O&1vQ*+dE7%c`O`DVW((k;0n>fUFWxHxtNG- zpdYbA2%Tx<Ibb(6PH93yfY!<0co&0N@-<U03p-9Z#!Y01vMnjk!bSjRX$TEt!FkE& zcw4Oa350J(e0^m5DPAbcS(z8je7!_d2o0PlTMPLJjTQWc9hv865>~Jq=u}UVOVWc8 ztPX9MC@1Sjbdu3?_WYT}8Cq0u;5ab<qQ&5XpYY2m$|a54y?1dt_J>^X&3}XYcL>kt zlOtLO#wBo=lis~Pt)tV%w;uTF8kGsq?laR*Q0LRo2b|jcwyMke246L?;8TkChfQ?u zJdh>HVqJpTQ4+JkZrsTAlFy^DD5~W1=lUjoI6gmf5~;&r6wuA;RYz{t<i)e(HSE#y z8c00<{`+t7V)7#gQXWlDa`Y=-DW6LSiu}sa)=2EquP1&4Db0v)EQy;~Fmp1+eTo}| z8z6ywIAyZ0;09e6@__Y+jrKFqv6I-5MQTy>RkfY@U|52KV&2RP;xu^!M&4<<36_3R zI~MlKNhJj%E82O9VPjksWw>?nX3}e#7y^oJe-v8shA3IkY=OX!^9sc{ncVP(pqVkM z#FJ(<VPV3#2Mx0&TK3HOyw$Q^+v~yciaTy>ucLGRX6nSkubP5+#BS2DM^X5pm#wKw z*LV=GDN@h)!Q&TOys?;~g<%lbYq)>KdO7}NRPCymuQ{2)k}QHx5~GtSb=q6JC^-g@ zB){}Q&m}MHW1g?@pfP-saw-MoJrI1VD!j4chw59kkyodBqN>%Mg(ov{kfif@-KaSt zqVKy9hhr|xJ~I*7*z~$Zv}G1g8*`*`;>!))L$PyRI@7pQ6FymM$YWa&#ZH?u^l(VZ z8APtEYWX`plwrI5fuZtaZ{S8~agI>CUae}BvrX^@hg6-AuN6(_&z?))sm>}E!LMUU zEIoGh0i=OKE*ewczZtnS3ekq6FNzaPJ(`}|RTAZL5k<vOHuz?Y(<O?VOWcqSzV(mo z4}OJ7k{*z<&JJBvR_3sw8|PUbWoFCPE5tTHQiV9$Bv~t^1lBuDqohKDc--r+8kdq; zjD{u1j+s_`!@QQkcZxsTIvop1eWzxESk~m&lNGX$+y4TMMm+>QWTe6_r7gEm!p-qE z%nw2qplb2-hJg%j%+KH)slA{#($FPy$Q&KT@LAN7+1UX%t!`T`unj>bS?_=d<$`sZ z8N`BS;%|FTS239sI4a`}hu4BwcA|2MR^Z<^F=HkFn(X_DJKUSJ$x6%)L#u<+6*nBc zVQ7}DZ`z><Lv7J$#1^aHU$y;R%5}PtB$?nW3#?s9DSs}BOo6bZms09fo5LdbHPJNB zzE3hqvIESAvPs;g?E~>V*gcYtY)5cB%_waR?)`}SC9c2dP3@277HFXf$qgc{TSnYI z(j=JBNQPEqo*yy~$vWZ0yEsh4-d|ICV&#x|jZa2*RRY9WzQU{@abAm+7&{5ck%0D0 z#SzH>eXZ;lX>Rt)#8hB{*A(v2z`i=#SYujZ;0|9l3)xK6+(y>{W@g;g<$B5QEy%ID z0j9;@MUit=T3mKT<y`&g%?;iJOF$@e{$cZITe{YzYXmh#)}o4G7PL@O2srx^rW9#} z^<WIu#e&!FItNLEJ0>p6kOw2)1h)P#_*s$NJ9f&tU#Mm2I)kTro^sx?yWuF}yy_Fj z>w}`B#3Gja)++#~pmoXH{|3(TGY^04u^I^z*i+3iPn{(q9b0%N@Ra_%^~LUmoR@It zf%TqX(j$r4Q8#99(7uiq*s;okCIE77L<cys@q2+5(rmzFgr|@cQVKiYZd$SiB*oJR zJq}R{_o)$fKbVkWyIiGJp^m>GjK+Po#V1y~(j;3q?C{hPm}q!ZL0HyH&Z8lwC#QVK z8HU~BMBSlI@_&6F(jZG4be>eK@=g+ZfLOH!RRQ!Kymy#;xyjRp{q^o6;bC`<Le-vE z{D?MO1H!xIv}*SLv4<&I7PV8N=ln*Dc2zb+!w^-;@0>){sS+R@kXaNDIp|pt@dp=i ziOfzE!>wNA$vDr1MbSZgInPWqVo&CaQ#O`0=e~$*53X)oSCXE^=^Z*Y8k;`w<<zj? zt~6VKI1lS1Law~nN}sziXltaJam2B2;-0D&n{23z3jaH49^2;rXeHap9p*UiN_O>~ zxEV($+gC@^lA1A*MpU%w{o{y0J)fs7DVS`_V{!<Fy3mosnb~UKBP9(Y_}ZKCrSS7^ z7tW0Duqyu4wd%azUJq5fEdu0POji;Ke2#KF9M-d74RLmf(aFdC0wg}O1J;^(XG3Vh zamQyFLrhK%ZKXKb#_A^Mhdcq|6r;3QH|*wR&f!PWR6VhdqB^KA<<p)k!EGCt4p3?Y z&B&QrN;($P?SS7WTUjn#T+ZZWF;Oh2Csn7{<uQBfSgw!^#iIyLwatOiAweWUwDm_L zX_GG8;q(CZY@oSV1ap*Xj6x^?>l8k9ru4WKw<%HPQV-Ni3yw)YxZ|*`7m;;ETAVES z7KBy%SrQYuPdIaRP_uRkGS`v-V{_eQ3D6T|PgBUEXp!SN@1c!M?zVT+@~t;*O}^Y! zo;Odr`U(EYDVCOit2=MBa3u%<*I1-Erz9%g(~<m)VelEr2scOmTOe?qvov4O<0MBY zsS}#<6W=uPmx-goiJPovL9t;(uNttNa~``1qiKZEEALk-BuuB9U{0y=>xq{t$_xPs zYZw1I%C5-bklR4aZcEm~ungL$q;80z(?+^O$nR~}OE$T}ht>YGd_i`YVPQY*4jd=> zBMfiFrH^6mnSb;3!|=|hOV9>bi>~ovz-MmjGSi4?8(wBjZLk~-QXa}oO19t?ffGtY z45FganGExoF})X!B=|0B@kJ%~nU<cKmQzR~ZnSzy#ID!Z-C|u*u3;M@QixGm-tn0% z(z}{cj7dvMZ?pi>XC69VWfz`G%5`+<iD&{&<TRq)8`f{|DQs4x{nnh>3QTJ0cBz1m zxFWYn&+ntD4C|<Rt2dp5mqynvr9!fhe%AXaoBH!^t<&a1%s*jhhu&Jc94n3w!6K-* zj&odTf|!XHDaNA*(_4ier=vrj7*_ztfiBZxQ2of(XfN>AVUWNE;c2fcB2QWi{shL9 zlwyldk?w;WNj_=zXy%e=tUIRb^4F4&@|Y9Z*vW8A0+LzSC(iks>+*G%u;4lqciswn zY-JcWnn-=ERLCI83LgLq-XaW=7<yT#4K+UvXVc{)wXZ`*lIFlh6Ge%~)CM%TfWO_Y zrRLEz(J@Dq+BK#O=lv&8BHdk4tx>=THoGYJA!2|cg9N4UK_>7Rq^n~Jv6RZOXkl+1 zuaWcAD87E3lgnfnQ$$|7#$2yu+Dr95UPJ-fY9Ow?Z(ScEv4(Nz5JL8;Y72oxU^Ch8 zd`OyemJV0Fip^>Pbbhu|9n#%tNr_r`$95=+G~FdSam?wGN(=W6o4P8=h^xF?7v08m zZhjug^FVo7k4L@I@l0EKz~Nt@?f*kc40uAL&nxdk9K_I#Ca>>x?tKL8d}Fm|+XY1| zmbFA2eb~Z0Yve;?>9v5ToS#|bgR16a1gGBug^mhpIf94^?52Mwdps=28f;}mr$Fhj zmaFM~;Nn!o+%6`}@7BfHyMsYapI?)+Ew^pQF!wc;AZJ8IZ>cA#E)mp?sZd43jdTGR zAuA;ONPv*;eYkSAH;r4GoS^aFL|D#5cg(!X{l(`9<MU*OATLwxAu)5ZoLo)!w|O;) zSfb#|%Y|hJ`B-^|@-gQOL3%6cfeEP$EX{N<nA2TRQwKp_=(^-QSbY$>dX8zt3sDO~ znrb?4>bCX7dih5W+#!}OTlqjWe{+ob;QHvr<N8V>V16dn+2#HymK5wLq0vZ)Ea_$Y zZ%_4S;n~YT6&s&sp_Vl~1X`1g*dzBiao9X~L5*+L6-LG=K?EJglE5R@XS9poO_ReA zrn}1f4sa<R3m*vqFDs92a-WTcH%00p1`cT=sxJKNji#wtUv}|@kej+;KbkzkA$rTx z8=n!+AeC^X1ST~Zhy$q_|03mBWDRFXaZzwUjsW9;%ldqgigzbQSw?bS1+<0cz+Tuv zjV30D(tDeZ?<!p~ifw3hicfX7bO9;EZ#uotWVnRDqc8$LC207$F*v?CvMUOZb%Tl% z7dXkndPz{2hssZ&Zo~L$KAQ%{F2k{eFkDtD&@x>9Cc=7IOQP8LkeXVNc2Y!%0+n2B zn0LZk$@d<0_{Uo~Nj6pemm$?&0*dv$n+|*z&0T>(V(aT(7u&1gm>z_%5;?O(s*cVA zC6I{ViKH!v_lfMrVem3eXQf!Qq6Lwsel&$CjM&R??C_|mrcJX+6+2GRHu{k!#yZoS zQccl<nU74^PMPY3#2g4uVwfM=+IeF+tc-ReV;npvaN@*0`qePx^;**O$llg0A`FFM zc$A9o3RQQ^E2tF--aXdO%W0G6e<tz${M-I~epGGQhny~~Y@f`x=FT3}P$cMr2^^`l z%&ri7=dCmVADW38KOx<>QSa{{q;G^Iw6DQ`J{k_{qK=fZi=ya;tC=65NU`iu;4ZUC zBP{_={HCbP2@rVQEhnHEY=Jpa=p0*Hz&&!FRJU{YREpd>AFnySctWWm3J#Z+9l#+9 zW8gQ|0`SKVIWmcQg>Yg7CX0XJoD+gf>YtSPH*^8RLGuGl*e!X(G3<s++RIaIz@)=v zbJnmJUKBi9Iv&MO@vJ7{D{Oj;ZcBUD4(G7&9E#Z&%PLA%4J&l;S$ee2$F7I8iIbG@ zMQEdKK;YZa<2GVNcfdEB;U>wOL#Q!JQ733x&Q|HE+6#Xc)y98TUUJTu8>MZ44WQ!H zRHWhp0QiH^4H*;%u|)0Ve)dzRNS{Er4`{6@KUwvXNQ}HglARqCGu#=u<LHmkSfZuP zhoFi+|HG`>jFS1p7*su^;5r+&22&A1+w$|ADv@kU98KA%R>e9^wyZ2X8KMR7G38Vj ziyGAc+STSMP96<jIijQsagqvJ$)VtY>*S&$hrSZ)G?lR@F0gXE3%%qJk38T&Y2yqL z{MOj)(WYhdu14h>uJE1YrfplxnBRw{&r1AY5f9i$6XO@gLPUMWGFdI_(^pSUC<6+% zg-*vgX$CAG;|%eY5)x!$3)^9YdQO~2WCj7S$P^gZH;029MRyD9{=J;2S}1iYE)gLB z5xCqx)gDXBKxp)<Y3t0MAI;iNuaT{Nyi2w~d^7NLMf3m5l#I5bVt<eSl`5H3ENkUv z0SvKs$^x4~^P)B^VnP@f4s&Y>Z4#AqIL%e(iq6<^Vj~9E&_+<`5M7K-TS_yHOFcVT zP#(cb`kEmpMSO-0i6|=hFa+d&&1KFWEp;%a@cY$mBo?2?Zl<>`f09fWOf+W9VRCDX zD#4xT{ybj;bmlm}3q<r)+=Tpe<ilY{!a+C!O>{7SKRG(Vd@Dz_<*1ZXye$g`tP2|) zR}BVq1myUXfn6pc(NIyskdzFvNDG1=q|3OFxHx}4Y!BhyEpxAdQG7twRxpghx6hJ{ z^s+@KCq+eE1GauwH+fAb5>-5Y(dNo~VjJw%IasECi&j?Tty>$B`TY7O%oPP|HH)Ib zOs!&>$Kbj4(26{RA+~asq6n}Seh@5O2^Pdt4~0ncwFIyOW!v|ce&30XWG%t8R_1o# z$;A%XAb0RngS#3#(#-W5Zny5FT~>7D3)&Lugk-(i_GtQ%4MK~@)s0JrslILY1)@hD zQ=3C3X+xc7g&vnoTs>~`chCaKny(E7s><(U#C6S{VX>zgKvZsk+LzzU@2BLgT~W;> z+Fhb*ODOs+m)dSAq|!8HA1Gsd&zN~AA35VRES<avXDUmMvhhL*_hB^$8J%)XhM{GR zr|?n)hYSRXM5P)Og}G_T(Pt7f_$0#=WnKtCNRNwgk~(Bk+c^hyp(+tY<0HU3UnhXC z1K;epLSWnL#f2ojn(|!WD%j3ucs3_T6m~k47LOcGjKYepQA1?onrYtn(aQOWB(9Ji zB#&m;lYtCju)1CrK3W5Z`U=ZO#b9_{-(v%d9PEP&OX`ZgOfZWk*|yYp#!<HD#rJZs zbxQouDmRmABFF<1(`G_MK~9e0zG&=r&EY80Bcn}^?~g!@m!{H%QcEs2FK9=veO!#B zmFdM}D4U0s*lXx)McXn22}6oY9ObkKC6CON=mDV7gG;hf83E{`c7kZzoCgmkwtj|k zIayU2r?bqP8|FEWUP+R4+vR7io7)s%*@5OWR>^R=Qp3XG#I6ocmtQ-Ie#Z=6C~+<o zrpem}Fk=lbeEgDVp%F*nIQe6vwF{u#W>g{0J}`=*gFyxFL&kQJLf4YZG-!?nbZv?w zSPSJECn<&2{R*oG<Gp@O#_3z;Hc@o^{%5F+r|UH@kSb-<M)Ji1GZD912jaj$;WlDn zwi>{d3h5}c-h(zl?Sybcw%H32M330cCKq)cK>#4qep7GKQUa~D%RJ?Z(J-g6`D_F0 z+xXQZ@(&6O%*eb6xmi)}KE)!Ra5Xpc2ql8kzbQ6|74vKKM`85!M*Sdc*#^5rz7XDt zEQG-({4j#F;$*N%NEEhKFli~h5|)(cCoV{jZHi-s9Kc@9+4JYq<lG}qtAq+kb?h^S z@tkBD=)`zM&0$Z)KwJDHJ#E6FuSU>d=K(sKifZ{a43dQqHw^AK6i8`Kjm}vv_+T+H zEbXBDYzu(^ljcv)hdoiy#=j$}dM}B8BDh_c-;Fg1xqT%=nx}Ko-{iDWA7E=pe>2fX z4UuChD($$4Y!J|4E7bfAa)T%hD<KwrrX&9^!%RrLwZD0+QlYa<bYV@R;H7V!8bvV; zv9hNNs=OIPJ{Xw;OAvnOotK>!7eKrwo&)MqSy^$vLgtWq(#0JhXc5=;jL^;IEoJX( zOCPZe^~g_S(WxzJz>JIA!<wA-nUbT)fMF0ExG6J)b~O3-Bp|9qJ`VRljd1c79-e3h zJ);s)ZX+JQ$Q-VDAz{OkCZK>ZsL*E=FP@6*$~JzA-H=-Rj`bZZ*9cBtUt01T3KDa) zd?%->jk>N_?A|oFco{jhr0CeMDkZU)08@(@IAPPY7JV-#PlAQ@9~<aur6UaN1?haC z-{Udw@+##DcI#fXmS_=w%A+|SOdWhNvn8)hd(*_nZfQNNO&Jiiw2<KnmMwcQSgq$P z4=F;lAIcN#Dfx(~1?!=*=aQ|LYB2RsX1g`j-0Mb)`x6%pQ0PcaMUL}R0|Lx!R+x$G zvxSj~R=mg#NJftvtXDK;Itb;};3p}`st8UWRnw{f`{dHswUl+sx?wHoUDh59GKr90 z-Zb1+1Y4&dPB&Y7l&U3LcAZxs2P4mVk8!LIjq{ZmzUJeXHp;|{Ka<^`5rM-L8SB!K z`zuv?W7O=+P&8y%z<=#?R0Q4|dD0|CXQ*xo<FDh3rEZxXBPIfe<;oNW)-~?}!;rHQ zs{S#as;h_|t0^aXF$sPn%~RmBoeC^xhlh}BIi%Z##O`HgL?p4IVR4e7uFu?47WrKs z@{f9#cY@LBcAavjBO4j8{wj}f%ek3wWRc3NE4;yi)Zw#uF9jLMnCiV&^A$cJu87H~ z|AN3mD5O0m=18&e3IDk|a?u7HgI+V`)Bx%<f#2q+@0ZxYL7*A5tv5Ueu8eAgoz!_M zODWo3T!U|d_~#H7GL*>0!vw{bA|#Y>VPG>omHx25VTG!%h(6U6^uX24CZGn4VZd^z z*euKz*6vd8xKLzbfM9Lk9AulskQh0n7O-(xw+Y5$FTc<9v5>#VZ>7&9-)_-OV`H}e zGKI|)M;s~c!3Tk_WMFEGN4vad2}|ouCMk<rv*dn<YHo6SYBMvQXvoE)cX^d=mX<77 zhj^5X6d?);dYQV`1rT?`wL2oQ?8L%7^5gdDv&K2mo+{BB5&Z5fpVa+2xLfLXpHP)# z#A73`4MBYmWlUU5JP??c3oqGjk2!s{AYA^;JcHcX2!DLQuNTIyU_Mm6Z9Y6{C()mR zU36=!#X6EgU9?{6QWC+4D3Dkj&M_xnO~yz&!pK2bs+@8ClWdRfQ}b9%LSW{_Uy^re z1E+|cbNh*Tw}qm*JI}5ad=Ut0v$im^xG`K#n>i*hKN-_&3^`O495AQMmlic0kxVU- zoMsbXb%IZBw#bYR!0W<$Sc=bIOc77<(%Mb}Uz{Oj#i@J4eYpCXXb;eq{YROAY9^1> zz$SdwHNk{&Sj=g~@hT1y$s5I#pRAZ$*^Uk~7V6!2uvXY@)C6#RbLwsX{xm4m+|o*= z*H8^<YeAgR(%80GuFEdf#(bP7J3xpWcw`h0ODkN_jYL}!zA7)=Aa>LD*U4nDi7f$K z_5FJ)aB;iIB^&ZOv{E=UBt<R0EYVA!s>w@go0XfJmgX)$d<!Jj(rF?l5nZCR)W1m| zV|MV`Hd5zBp=J%i2D@f{4GK&x8k7c{JFS_Zak1+d4BqpXQ>^9)x-)j^Iz)TB{*q>0 zUzLs<Dad^ktm>nPJVZAd#J2P)jCySm9p<djrehB-Cy{bjRxgFc6<R3(se2HdUh65T zyW3t=K<OmDfG0u;q69W8`5j1eb8wLkBsCU81Lq4?DtPP~?0rf3a`U|5gjv@p$m~xu zG&v#0&D!mg)R1tkXUtpQOp}WoxB%AjYwnw5Zt+IpHg0Qd&AI7<g4qaF>7<I$?tUt! zZppUx*K}VoJctW|KMC0v&LE<N>*fQ<6NRBgc)eB86oz;pImG6YB;yWe%c;Ehg$%3I zO6z0D4c}-eYdXp5J|4$N98=jE_KhLNNy|YFT*G$Y`ROOBH3H~b79|m}@)F6|R+ZL@ z1NcjEm1%GPm{7cjtiFqbAFHW)K5c6wPMvhZy|;;R1qHcWosVrx6GU-XXlkO)nF!gu zxlvVrI?6Y}=N)kwkqDeNOhGl%gm(}X`FOv**1DbPLSp9pw$|X55+d)P%`<q&x8I1q z;^AjJIBMXtPaAIJ4ZlI_iX;v<A@zIMjvRjf@*o*0?$MebB=2#4rGzZXs*L0RVGn)A zlZ)W^SD5#UhSG1T`(*4@JE7B8_0d*_TYn=CDxc0=HzDo5_b5f3N~${gmeXr`nx29@ zNYz6<lK4f63_m1hPSG+Yo1SlkC|waZ$1?WMQ>ztWKKvlnBC%wBJG+=A$Ct_JS@PlV z;^Of1>bK<0*#-V0Ilnmj<>K(&B)K}Hf6xAQH9NgZ&Sw|zj<2p}uaj555t+mD^ONJF z!&fJ><mB)JwzB-&(d_&x`S5mjnw;SfAC50)$>r4{e(Cr$`EYT3b$t2@5j{FP|Lx-V zm$z3$>h0Od>)8c0AAJh5pf4xqhZk4JvrC-Mug9-ver{UxcL{3{;qu}5>h0P4D_aiH zJ$nNre@p&)eENEl%#Mld>~H56v&&1E5{z{G4%RS(Uml+xoxFbyvzsKZfXeCFRdR9+ z>xGY9o$*tN<ICrD6r3K6@osi;^cMbk`0DuN7<LkSsJ=PAI)!0qR}XnDNAFJ#FIaNE zzc@d;oJ|wnU?2p?adCY4*94X%+x}ng4~-b?J<xe~czQI$@!U=jIXFmMe)8MddwjQG zA5LCJ+l5;=OJ2|3%#N;(f1OS6lQ7if`*$-rjms+_%*T3ilAO+tVD5((za^Kmi(ikA zXkRX7=ZD7^xNApe7Z*tB>@;S+Z>L;$Vj;2<Emnwy(<$=Z>{sNf_opYgOBb{MdJlVm zyp_a!h2tImaxtTWa9l*RJ{-ej@q~??5@w|deGPsQSm`%l%(LX(+3Vvscx=LIM`x$M z&VIYJ1J)gba|jH7`05Nd?G;SunC1mD!5zf2eSP@u@R!-8;~*TDMgQz{c5!$zNiNT4 zN5}XV_zZ9|Fv<yU<LM==8;>7;AcT@b-~*(B%*<y^#NNYILWVt6CWATP&-|nxhdB(H zI5|1HywpQ}eRy@4(Cp#QS2O&^#q1O|j&ADV(b4-0xV88R{1(jW@;%(+<5NB%TssMi z<BQkK&vI3X*WVl-pS-{5Gb+yD47L=>60^F~;ZIy1@I6DuNRHpYkVkLjIFm>y{Fc0h z<9RiMj~%}L^_Z@*j0KZDmi>{H5*69om|MS_atk!<&1D>WIjD;pdsnka#9BcfexZym zK&aM<keoP$KD3BtEv~E)dxmS~81`R^8srV=sH&4|0K~hDtsL2by+#}__O7sIF4WR{ z@rEF--@L53EFSCWK2i522}D*1xL%hCR6<=2SaU){rMN3fw~i4nRZp=D+22vAVyH`s zHzwdkg!ua)#}kKzV_G-c0MkeQ1AZpH_)J^t@ZVc*k9kPj$2pT%T5s|jKFFt_q05BY zk$|H#H6%mn-f(s;ndhE7?wthCWPLYO)-A9sn3+{*lfS6=ej<Uhwqp=H%$~iaD2nB8 zOIWpFQWR)3NJ!T1s0Tbcwz-RyIfdEb!ibR}9I4KRe(zdJ%$#6FMJn#wpsj1Ar<p>U zpnFWQhBjU3QgH=FVX0pL{gBJIC<o8g<Zzq0Hfqt%_G_o%e925;_KMpD5H%tr{p-o> zP-s%K4>cnrZZ%%A;{h8<uWGW3*`=d^Ym2qPrsEnHsF3$q^G_w%MODtE6p_?zkjCe* z=23>aZi;+?v9{DO?<6QP{nJesNLyp{<nhq~4TKP@_z@nKNY+}rY+tqS6DIj8<Tgco z^MktmVs0rqwX|J)ifbLmquCEy4{00OV@B*DTW6x?-@w5W(uYFX<m0$R|6phlP9NTs zuy*SMdW+E~Eh8j<2wOnF4FMJ&Eq~QZ@wrpo^hd)dK%69^r#|i=F+&MyU%iBl-=<wA zL9@KfgJq3W9`b%@q>CLBef&ZUUHOY+^$v07>-GVRQiPrv_Lxm<xI>uXlM~<GcHQcS zr%&(i@25A_dRjL(Pc`M~DRQx!;vpv6VsW5{x<Vi+7UvWgnR6r>d+4D5wy7&bGQ=il z=?YW3VAW&q{K{MWQjt-5=h#Gru6B@1ai^M2{m&>AuquF;OLz;2&E657F@uSFJbi>b z`(Y?MR7}vV{>mFa;A`%=Kxc9I>hkR5{nhN`H*XL!YMQV_(rtj@|4)mXde8D|8q@6y zkMQu(3zU~QAp52xSz=UJbQnT~xq5!|W6vep;-=;f4n2mqn-#j8DWaWNf9h!FG_#nV z@OP^ySq_DQpJor)zQq%sBxeiK#4K&2C*O58L~%)Hh#*JmYfzZFU)~>w9tYBSie|Sa zCy~5UphE(`UDuyRGDh8vrBrlGx~2)`AZF?fCi+O=BeZVPR?c~IK$({4eGpm3y>clg zivWEN;8IyJD8vqM&)pyjwDfwOy|Ijv_}=1GiTahZK8rsPFNjH-^AnO7y!3xgYOs6x z0ikGKKF(A1$e19*qT{7Ks-z|d9_~&mkw{T=MPBYnNim7DsWBp-OY_x@t5jw@e=4O% zfkE5EuM4H}@r*D!!cZJxR0(8u;;(jH2W1d-XY!4`*BqUDNw>-BNuudrxH%`7o!LC( z_QgcJ9Lo|0VMD}qqmn|bL7<vc%t(9auvWJPSSa=CcJuW9cJl;w|4DhXDyO&IvZV9- zH`UdD(u4i?f9w6AwVwp`TsOtfkKA|?{+q&ud}^P11RpEE;A8)8lL(^t#k1$%CP%Z2 zQ)1I!E|0xT+L4B}Gwo_On$<t0RqaBf+JQFp$2F<1)1r2xLG4g`vP)xZ&0PJ{({)wo z-|??tg8clb1=DHX&gNyYYV-4QeN$9#a_UwyUC5s|Aj?*d^yGhj^nCgZ{)gA%*>^9# zeg5r>?;c4^wZmU8;91J;CjG?Vg#YANl(_QqqyNT%o=t`W9>9ob@)q6Z=SR;TJ+;vU zSs5J;ZSfBv@r}FF`r8dzV?RHFy_@Ddn<<7_tNPP)^<s*@e1z$XYxvA1&H0IZ?8%B| z{Y0i42L58=S<ZdaVJE{F$0xI+%S1LN;hp(ow5K5NjQ$p}=cn?|4~B}Hu?CNWIX~_! zo`%El=Yy^?J)P&h(_yFw!UtM`g0yw;V*N;Fw;TSACrvZ7pGX8=r~LAzpR*M`|1)#; zA6OU0?ZoWSN&I2zpw{Hm24NbIrS~_^x|pK2d7W4D+x@R6XYWzF=M@1L?0E#x3%a`5 z>pJe+Zu)6i($4)W#@R1F!=6>?9mZno=3m1H#BqfCL!Afqyf`!r>T=&~hmnQ7Go3Ul zq<8LLHPRH#%~ien7mm1Je*Yca1k*16)a`po?cU!a|3=V~So-aA$bZ$w?OV8dvA550 zKDF82--tHb`*xAcmP$!<mh5$`Y_A*!<oCZ_FvgzMP#9sER@f`|dR<^r)Sd?{yN{|X zf&_(I1Lo<z$Ae4yFB(lhP^N2;rTNZ90^3yf8Mb+YQT}|2|MT|KWcZ{1y{l<FXxjar zHhx}xyKcmD@V}k)1``9#uFD($qXescoaiO@#Z(#_=)mpIXzLz$N>BTwetN2_4#uV0 zlJ=9XUe9kS_Dmj<YF(DjQth4RPlgOIVm(_ue$OA;cM=U<p@UEO?I6DuCp#tQ?_Zr9 zA0_aAv(wAj_Uw#AbHJ0AljOzs$$ze^oXUuti#`r@;V&QXTOL>Qsds)Y+6B!xM8Ia6 z|4_66e8O7)q2t!MVBxdZKzS*}TTDTH+(RH#bWTzR1*20~ML73@{9LMv{CAEO#tQB9 zWl;)-qHPd_23Jw$i>Qj4b0l=T3?U);SYS{LGYhbCa}XAZu;M81VuXeO3Rn~6lw6<O zQ%rL_I*g8{Qq|JXM6;UGJ=$BPCW$9nB8UN#R~xBsYC9`d|I996z)UMwZ`LW5s^$Gr zc{}<e6H;c>lu10RPo4y@f`+{E+I+x(E^J@43oMqNQs-${#s}#evz=)r)beGnWp2!h zE7DPaq)36J)l;NTYYIZEc!s^A_)8{XXatDe&`cHanL~ychu~maVQ3IOa7AUAF(@1L zOSq>}l=LH|?#D6Ud#>}QMr)1cGV^&%tRRir(_;8^-E7%`n7fkbShUWZNNGWVXEk@L zLrrI#AoW<-K`@(?=ayO@c3-r&2a{0Ju9c_08A=Rr#a|>slKADmj-PXEZ_^M&beQ8j z7hDqRtCin}q^@ulTm>d15mLZtXSHT<VKvAgg$rBS<nzuWPtr+IqeKd0QvWXIAOTCu z@@gZ2Pu-o?YN9E<@1y*hZnu?5hRW#}KQOBL(xAV=+ezzD1120hLBDfc-MvtbO$^ER zhapW$LBNWLE@BkCTD0D1x5kPEM`xo5C>rmU!cHR7Z;nftVFtaiqOO9~0Q;S*zYL{Q z=GhLIFw^RCB-XnYSo%qqcA}pqT8>qD7mbSvOfw6U(}aknPYJ|APozw=i19czRnFP( z-)qi^q%Mm%As<`*<@{uf6(z!T4_wscD`|#7eKj!@-MQKcsX~u4P7s8I5rT*pT}YbG zg5enOcbsV(R~#}-OPm@R;;?;WgEx}pkl89-f{Dmh`H3u)q&{r`ES@^&66(ULGyr%# zw<c#LA_OrF6(y2gQqf8^qV({DDezMeO`|0+C7pnUEw;3+2wf_q=@|>HY{DGC6D^uh zwnlMVNov;S9`J3D{k0YW>kAc{FBoW{jvMXqC8iC*22)~b{}n)~#H)5ar9}@X9Nsk} zMvQjkh(vEe*%rj=6YS`1J(dt%W{oBrTq?nsVF}yTQ<wULZ#wnRLL>;x6<My}(o-uB zt)(SkzJ<Ja%ngXz@6OCUS|iVcRF<-n86i6)GpWP&<3R>p6U+<uDU{ecd^zQv78n6; z^{Rc-TRjxQAF<-o6^bIt7w2qOR%=NQSyxiM1q+Pj`h6bW;c!y8OZ{p>;6F~8A;1pF z77~mqX7yU`tWKLF-Ly*MxU|8_{uo>oQG`kPfxX0gWwWBf<b<K@Jnjz%)1^S!ko@J_ z)RLA8<BWS)h}t?PabsweX}#BlwZcez6atq{nb|%+0-?nahk!t(D_UB)VFW$l*OkXe zyzB@mT~Z9p@Gy8De)0${Q)LxZ;e|$&u`*j%+V%N~VAv7r1l;9D8gmh2SrHy)4c+IY zCE5K({QRg&IYWky&?Q>YU8OCBS8p7|sb*NZ)Nh~iG!>PGRTfSjQ~tu50~K$2S!mo) zdO<D8Xn!1tDo+71VQ@|Z^GGhncwy=yw6Sv!Nx^MDoiGw0K~8D=yn*<+GKObUcxx41 zaI8Vzm46BQ?T<$b<-efdp9vlHQs&7LVe~6|te;RCEJBbbao3F4AZ3NQrhY#PY1ih< z0ylV#ZZi<a?Z@%;S+&TpyEEYi$V|Aul1B{Kf<rNta%=e*8{1s0&9Egr4r;`lf~ixH z@8^cYDF@I03<{p&gmJ?TFOR88)Z-iXG<g1|B!|f$(#}Oe_Q<Khy$V6+%+eJJ1p>ix zz4~JOuSMG47S_+03yX#w*d{Spd9FPY1Nbv&%yU-MrrHJ7LnJtO)YLD<J<zf!S4fSj zQlSQI0BPk9Dk_nDjp{+%=eHoqIz%6j*d`fpNMv2v#D@5=G$=m>)z;c$J1m3s+Hzi5 z9a^)K%1|(l%|z4NSb(`x;G|#@k8GB#-Gg&r4V>=z*tX4%ZQD-Awr$(CJGPUKosMnW zwv$c2@64UKceb{+w)Ss0Rp(TldOp9ecmsK##2~Z~hLEy_3RnXx&?si!R?uBY1?Nl* z)q1~%mL|oB8hipdA+wb}fr0SH+@-hDy#=VU4KTY3q(l%A<x3ixE?dgN(cnR^aC+5N zQIe}zL=lK=xcmx6OiU#+rz&6>QLIFy`^mwxJEZE^u>LP*0e4cYWSW?L4OzEE#<ZfC z$PEco6}CfOy*tFmW8B|2FnQQOR)V;Dpnie5DxP7e(Sa|(u%IGFKhGT-zg+~!rrHU8 zHE&)o^^KP1X;~Wf{r23Z=ey<IGpHK<S$$Dx&MkMjpfh}43w7Z<eiL0_lPNsse-McB zc(8aaEB*f`0U?;-5qe*z=jQK+WC*{e+G9K7GBglLLDvXAX!I980CDtrLoQ2+LpPs> zYBV@)RE)Y}6axGzT#@MUKags|4qIiM8bS9LY^SVM5yyAZD__nNb7q}SN#o0k?M;Rl z5R6lyI`OF9D9`^Hq3N0caBUz!FLDmZ3tiPoJQBl(-o%*`rI=K#rimXR)reIaeg5B^ z1Hv}lD-qPZZy;bmAp~Rwpg6*lzRs5NyqYo}K(lK$qDj%ikN%vha>5nAD$9-$>{9}z zrouq1pn%6tvM}K&zcj(9OFg|UhyDn=wgHsA?a4eD1{^jcTf&BeB)Sn+P@h4Kz&;d$ zS(trP$kSA3_Eb~b-Js$Vv|s!OpUsD&=M=~Y^)(kPyrL*WCXfLVlgfox?}i@z|0ixJ zTkKaR#t7n-6<+_@_=Vzs(Y*MTHrOSm2K%hsyb^eWDKhnH+m903krL$7ny>xv>P(zz zZM~9xzvf&JI7L~|NqGZL4z?zSv68D--1iS>0Ic`4*&?Ca5IZMO+f7t9CYW4S>CFTq z15|}9{oYQ(7Ey8SD$a(c!~Mj;9YA>Z{xn}qW?eOu9_UbToNR>^G?K^=CUcI1^KwK4 zB=}FpFhn083RD#)Mi`Prg91^Ov$fFr*DpY<r{SpgIYl9#xb)^E0cS8O-UmX-tJnO# zBZ1^0W^Y>S;9DIChJDK;cOTDWFj7sNhPy7IgD|^#;|;E^URjLS6)s%_l+pph^MJ%+ zSk1Q4L9jr$WHb~Vyc@Ed^fU(9ZO@^y)7-zn=P^g?%AaD_9+9@a{0hqn_0W-jqZPe% z`XKcV8VMYIU=IMeWKd0)xIinz!6@2PKACMI?c=2P;#^#6R#}Wuny7*(UG$V61f@2! z%g5GpLb&Ty7#y9Axm<G4R=)#2!;Yt(o^XQApm?BWip|cAjKp{&8trwAbhSdU&+1dm z*%_CejT4;9Fl-)q_`J`HUO~Z|B*sc`PYwB~Zyj{)qO)2_CZEM8=IB@HP9v+CMFZJ+ zNr|~%_IqleF$^nvSSp`T?ALGy0~bhigqIV5vs2s9rokxvRaL=?qyo9qE1l|ILTi^D zYI`EC?NaEw*G8m=@(X!LOW6%J+WH1h+?pkuz^eu8ia}Hd^u@J1o{nd3mN&jk2E?i8 z7zVkmfGz#KO62$DfZmC-;+-ci8_pAJ<LrFgF%XxWWT+)*<zTx@YD%Seqkd)$Tip)N zDp>fNo;)@;Yc|Npy4;KiIPP`@P+o<|MGT^jarqCaJ>JZ&c(4-g(!{Vf26k@CIy;ZV zQW_WPjxfx#RcEblcu+=EK)3Rj9ayp`*87XPO*$8}qxGFp=n6ntdb#%6=l<XZ-Ia^V zL}eO3Me2-G$UZki2lMYlyjQ+2P@fyf%X!c^E(>c+B>mLSeQ9GUNzb*qqMz8Wv!f2q z&d=5-*a0)Tw$`9UnalJUfFry>CAG20nhgr#=WlypNF&u{dZ@46OEO#+7F|UgPPnDE z0<lX8nWjg}f);+TuG=L?=)$~tP^htY9{!gZSV3afMmIDSnigD@VEUs=EzO_dWS@rZ zP-Z&}hlD%S`#43@(o9Y>hDg*XYLmS?L^w$7xm;<l$9xc?d);kqf8zGtz3hiA`rAX| z92UCP$em$~E#}oR3HwY+^9f|j3E|sW+^v<<o?&|}3<StgZsN1fwB8|nn%B_^T;w%N z2%Q@<qKPDXeQIqDzz-dn$`a`xK?_@qo~jImh0x`Y*67DVoZr4YZTVWN^g=~S#`qji z9XMJqhxi<rS(3P%EFtp+;5Vv|q!iO?^~qMT*FmKNzuAq#8j`av1#|0t=ofrQJDrob z7{zO#c&k{O@?xZH&+-ENWIJcT?(r?V$}Y^Ej|qO8AS0OzTB}2Z;pCAIiHd>%FyIc} zL^tFq4*;D&gXp6&9~+jKmn^CI_5-ByXjz^JSdvgjcdC|_ARGTv540AQReJh(tYq-q z(+_T4pQ>Xah%8`7QfdT^1XM-T8+79MGM2ljj4x%4>q(&XlB<Jh84TDT#AqbxzUCbz zpg%H9{dAkg;FW;=88Mha`Ar6f)J|?spJlJHa>fS)`qUf@V#1E!Xu)#-WV^c&)z_Uk zS6s}LE;xex7P(fnIBIh$wl6V(fnvrJuA5tImcRfkmYrXI*Z7p}M6>=6Cy*C#>G0PH zDBRI|4J=^eC^|R$O?<34o^UOw4-!2)Q->D~RrC5W%MXhfp1!dWr;5&i9{ao*{DK`_ zE;wo3@FU(Qiijw%x}Lx&kwRfhZ6U<<I>TSXQ&jNaALZn7QczFt53$KIbx%sC(X2sO z1CT)7HA^(AN<vb*qK{5My4bU?>9$z!do3b>m5Re<sw%|xXY)Ch6}hO7o_Dn%V^?<3 z{>A+0*v(&{051TKSyn4$K1PEh@Gg<?A}|cpI4S%bq5uuxt(HaHgnloI)n){jUQmFM zSw*ji0=zEVX*h?li%Tfjs+Vm7R+pFlytX-~B25Mw19dza<zX)4Xb<}7jm)HaTQky? z+tS}Dky)9f!=5nRvU3dU9$J)Ha@8gi?O9=m_t6ES?^^}<Q@mA{ErA3%%h<n(iV`Ln z&MoFYaDbt%fQJkWb>UH>biz5m|EL+#yqT*dcTMu-pZ~%ErBx8*7QB`?9c&qzdBJ2P zY+;QynD%etiF$&>m>Ti!KEvE3XGY8D@6)aW3eD$FVcUr_+Q|U+DK+$GVp&TDq<>@u z!L-3Wi+96F%!3rbc4~Qmod+UHgV2zWmVb(2TS`k=Os=i(qt&OEwnkS2kB_%hj5Tey z`Qud7t)T8DwGX%cprLKgcc}inKLoQ4ASFQI{Hk?tq|rW`WeLb2vQ!wPht{B=1j+Ia zzwqo3RfGRy*Lgf(>6#r_ID!!ov6qqYzi<FY*wk~9b9d>l!b&E$@}?sFbpu{S?_D=< zd8Z_`0f#LQ&~21PTKBiDdGDV2-u|ttH8u$3d-|Mt_1PcvH*8LlzMHQGPlA(DAQ4r! z<Z1Wf1}^i_FRf%re_~Ydm;vJ)i8*@|%%YIMHN+bL6A^O+6~!sfz1q!3u;NhUh*6xI zo8_Ww-+BiKAuNT!iJ2}NXm}yNw^~)$E^em~(#+iD1k{$73xfjS4x^!2`c}0v;cY_M z`(LlTg#sz8$J}LV2ibOWBC6J)Kx{jz%@8CbpB_)~*R@<?zbvMxe1x%2q(#3yz-h2E z@)-@ZKkZn!{tl<H5HpNI^7~{fT9Ljv9<OD4U=AvxuN`9Q@VPL<`l(1x)Sa{%3hqGa z-MBFEqfr;TaiIJF1rV(_cb#)_p{cz`XiW5<Vt6kO7U~wN?-z=U2F*_$tD>n5j7FAO zp8|EOcEv~;R%OxPuWaU6Ye(P4go}MR$1GRU_E*{UsDi|ciULa2bpy?OF4=9PD||7K z(-&@QiCz>xiP}7d`QR9w$#GR+d`feK-lfebIuTFov0$b>uF42L=PJ&t-%COZHjx0W zXmiQJK)D4t@SzXXYC>7s22Qv3-2mZJ=YCBln=1$zcI!9le-IKAg)||gX*=`J|8)RH z7qe-O&+*JEa+L+8aHmo)jYpDpYiMoH*HKwzMTLe88*tCw^~nc)g9p+&Xvk1!<^KQx zhcgTbu^kUxJPceUVIpBoU*-hXlRjKoc)cl60dIo-)7n22K|r;#JBbhFw^TMt`P4m! zd8uePi9U8i`kHh^XAzC;>en<76^{)hWDdD@hl`GMds!Ls!)TdjouX@1JTiolf}Tfp z<-1&k4>lTI55-j@sqLe8hY~;edigj8XOZj*a^S?FfA*O*FSf@el)_MV<>oTL@DiuT z!|gpgX&q5dpx?8PAWEJFnY<6M$-EoymfG!-ovF)PVa!y3Q6FUu+4PxV>EDmOB|}|o zQ2zfg{r{T&Kc@ecy{Fc&xxIhnun?{L$12NUQwjt|h0-NPQuGllVFK1rP11&<PCCs< z2mvVdlgGS^i%N<QP*$1dYIKn5&K{gY3HsA4mqWr(@=KFly~rZ(W8TWm=Zr@(Z_-02 zf35_VBskz|dk|&#A#+5VJ%v1AdqHKQns=`wI6(g0{4XOkNv|!Uw#s<;;L8}Ri7jY$ zo`{dJx4BTFCIsI%Y>KVSm-t+ATk{UQBZs(XT(Z)9?XI<@=u~p{Qab-}iMToLy;uD; zbaEU={s*<kK5wiMLz%ChWfi)^8H1!&z-@K5Cb$vp9WsiNau6+-Xak%h!E5$>W}I|J z%~g8opoSFxfPuWeE^&vw$6GAi@$<0FYlD=!WpW@JTxk3bre75K40cGF?+}|80IdU0 zY2D9Q(7N=+oIR5kzswt#Gl3bLHG@KuyO=dEUflJzO2Y!iJ0^xBf4-W*nEi^+AL*pH z`4=WyRsuCTD4#Hlyir^p3hyuoUZ9h+G+~M&2O7<J)gFsO4%XmOjiW<4jA6vE<x<*N zFi-Ux4YHSCGgg@8mF7~Yc%?oLXHcAX`KllR;<EH37k<KFR#Cr7jX{G3Kz8nha;TH5 zhGIV2W*u$>k&J7&ERJJa;cQ=Le{r=W<L-~EMNn5>qQ}Fdcy9Ql)CaeDD%`2YB5<6~ zWJ73ST83@NXx^H|crT-Zku%S1PkcbGEwzgk7Xi@0&a)w=@di;|<`f->>!~T~TLIE& zes5b>t40;^{O)Go(~S{4c<6dCP0SfedCtlM3lIDjc2tJnk&t)o&i0R&dU10{OZ!%1 z)@uyo-ZG@anDI9g-pPe+!t!jzf~c@;v!Hq)WpUTUfP!sLJEJR`%r@prnQ32SeGX)8 zhKDMbbi861x#UbB?&%ir;pvG7`xg1tWFKLqP+c8bYA$iH$)*(ej*|$5zZ3A%;zoOB zrNIL^Hc*`<Kqnigok!ejUkRKZaOT3$^U;Es7o0Zdt<S<AZe#IUgs8QfZ~ZMk4>2Bk zA7&zl9+HK7-lZ!W#y%9NDVG%l3*r&fXU875a!#lE8dCj#u<}j_(pb7dG?HQ0iCx<7 z*1BH@U~N@WMMWtDKyb#8`ioUgnW1-Ql7$jVyRsZ(kPRB{5Lc&{qb;$tPKows5<MUQ zhcY9opnpDy&ds+NM2^)^PW&E47THS`V;8n{_t<0F#VkasPU<Nn1GXnn+0!k=iLBg# zp`?X^8%ET_u~W~bQ@ptxpcoUstnh1|##x5uDxDbsQSh*xyU{L^60L)+lD#RrOra$R zewHbDN{2~Ba6=K@E&+k%V*?vv6LS#(thbT3-vuI9SEGZ3x|4r_oVUi%oiLs2SvF=* zK?oU($W#ui)mcoSVC5|=RxQj%QOM^fMaMqOzE-{M6vO?zL6c38QTZ|!Z%Xwu@V+V* z(k>FbBChYcbgt`!ia8O0po(XbDm*==E>+@;{Qt7^?|anghg_pn>WpiSXeO`QGFo8? z6l=uB+}jrLM<&0VsR<#ZyJ(SqY_@cl*irb=)nJo)h&mqua)ozxbkIUu`0?^yx>^s< zp{=&Un{GRi%~SeId>Ry)UC}aKoA8m=yBxJA)Fl6pocNRV{2Ld<2{s|*h2?c_Y)D|+ zd`h%7iU^z5#5;gUgmEm8Yq|`UIi%e#n~1TjU(cBh2jGMr^mx4B(ef(LW&B-XTXuVi z;{M``+r-TvvLvj6T}$J+Upq;KrX>x4?|Yn5joJ;=&Hw}q%deO+w`-8}c|OWJ+hd@R zz(eq~TFu)K!)4g?#?+EkKZ($>!%BUI4hpwMC+>*cU3HnhpUd}X8!3;~xRd%j94HNR zDJn^oSgOa{4fkf*vD)zF$mEnek<+4UeiT&&L)HTkmwvXa{W1w`L(b*N(XP#satk`o z4W+D~4Yvu7f7U6ifvvVxZ^EUB_P|}8gun&`s1-b0b3f)OXUQ9jFs#5TbdbX1UB&Ag z0u4gAh+T0$7_g)o8($EVXO4W+R5BG9b1?$TLs7I$`xo`fH<W(wA91J<t)#GL)GJg) zIA>U?tGh7@LvI_7VxQzE!R2XN=j`s!Y$p>-wjq$0<t5`l!L`WJ{%|;^s*_d1^xOra z8fu@Gg1Z?8hD&0dMCi4Rp1`x#V7;<X?%ILclCW8AZi;&GHhW#AaX)5XGr@1oaSaMq zQydf0=Nx;zUr0nA^$W26HD@oI0XR0qF631d1d_hI+K8T%$YGBcj|tL4r1bq~2nWsq zWrL>j?a3kE;@5mxi*OKt@V3L3vM06B9m|KsDrduySi@s$Q%kJt2wIpeSWdOsr*C?~ zjH>ea)lIh|X<~$N)jG8w;iIg&9+R04NCh2Pko^w*@04jW1&Po(E$8ZEX%EWNuwIr% zL=;Y8bi=unS?N7Rxs&<T1H{V08cYYp0n_EUu>1sgA^yuHt;6#fMQ}r?Zru%0gB$mA z6OXf7@)4(BvSC3S(l*fwq%FuBxkr|MlQ>7N{$X7anQ^%>UhL=M>=0sk;c&nBxH$jc z4g0qb>ywBhO2%46?q6zof;@kZcY=xD0IF;D(nD?WN-@rkp=D>GpxVPOziMynvt)}a z-#m+CQeA~x*J>W=rN7c>sK@`du@*kOJIf?l+`u(vYo3*^mHG*jV+mh1%!FY;Wl9+V zV7UX{JDaR0!2KW}#;hv^z$M@8?R)Z+eJs9+ByDMI1D>OG?g#4t&d1VHQAa$XRkP!A zCcA1ZBG#2h^Gg=vNn`$=7&{0pwgNj9rrN&3%l|ljX#OxxVpaY~{nrpF^3T}Jcicw) z`a?@0|MJ^6414VcQ?>IlFob06yvKv5+c!#g%b&_j;V!AAt4I+(V@1uHP-V<AE8wFT zTTCW+qhgcnuu|l7ed(hK1y&vMecoyl0-{oKT0&!3ayvy3aF`HC;gT#AP>yp61ydv@ z*AgL=qa6r-ad_x^B+kQy&5m%Vf+|E2f5iM;yJP`$!Mj%MgL|5nBB3QbSPoiyRBE#) zuB~KaD9)WIXz)0)FoIFF3qpqfu*`Mb6eQmvOK1`Dh~rJvk^^J*={a{&do_Z=J)ow< zM)Y2{b%kd7b;9~lvXoK1GWJqu7_BMpVT!Hfqi>D%E>hkIRjf;whZDd{OJ_nNf^u+# zyye%ev4j?g$40U8bnyYP=wwKuOVYG1cjV!AKHAp_uGNYq5#uU(`V=&vT8|-+e19+O zljew$xEX)ugZqiX(~d|QgXBf7LgrgL;&G=fzhaIa7^#?NO)}crq#bd4kV?#2r{*@< z*eLlKgJ(>sk@g=*!a|24w{vo9`&>}G;xf7Y8faBcBeTWtiDK!vzLClg7R3qP+mDT2 zr1f*jR0w8&>!ApN14HeA$6S+u(w3r~%j3YBZla7?#`KI%OcFfv30?@i(dj1JyQgu? zq~P@VVp9Gy_mF`uo?LHE{9@pr9;R6ZY_FGRhh0an3A-&B?1Z9mC6JltBG^K>b{-6o zFJ@($7|9t+0DxfLUB+fk>A$#YoZ~QPmNvKS)$IRZ{eFu00uBmhVze2wUP<AaYY;Ej zl9A~igw%Vog@Qd0@xt<2K>zAd;DgX?6{t<53vnfk)~AQ;gHZ>|Od2R7m|xozAR%>< zTw5s2XD{GkrG!JZ5AbL)nZuV$c7*4yL8>fXZkWpubwo19PyUC>0?zXX*y=9+i8(Ty zH%kB*7yR^!vhrAsejIgBi@sg=FMdf!3#UnkUhv3peRJ>wQ%wkvG-h89-t+JP)=ylC z1y6~0<lc+EcbiIy;R`CvS?=t}PqLEeR{%|+*UWHUi!dB11@j>hqd-46&0mMMaoED< zYLIouOt>$;m?na|RUZ@3*6SkZizHAwuZv|0D02u@o^5%fnGE}Z@f@`vJE5EIE9Ulq z1D3lSd9=yNs83WzaAoA$>wp1h_SRDn8&;c&k6q38h-31x@62e~tNCE#EiF8iBj&l3 z92qbeV7>mCj6!B&iN10``5OCscJT8M<hDCI;U?2eKM)UCcW)xccQVkCSgFl{pfCcV zyhU$z%Z971_DYsv%LcF1wt5|+xAz~4NV|U#Fo=!0I+U-Lo<$5^$|Odn#w$rh#C()1 zB1J;dH>LR_v&vY`JUQHwsHuI``B$rQ_Vwt*O@hDj;N8*IC|2wJzErUcN4qKE&baHH z??q?Qyj^W%lkqxFS?pg;0#uNK#;n#`sRs{S@aVdYBNBf5#oe2e5F4gZi}%BmcEzI% zObOn&SyO4E)26V6&wd6VIA&gXpPi3|pl949IDME`6C>ShF!J2b=)R@bLqw@KP+kYt zCn2FSV*6f!r3$K6j@DaSO8s{w_F}-M@kK8|BE-poOuw~AtuxfFQ$v$jnMS?wk~^pa z{cYtF#?b3DyKef9C9jWpfpo_+)5-@XBD-{a9W8Eaw_*{S=tLKch)@XV`x391$aZHu zxr~8R$Y~1wCuf)1Y03$M0g;_rwY0vT_8l!f3<uS(Q~bTMwus}p42OL5#BH`&ZcyH} zvK|K)H;C30p*C&ta~%^=VI(RnG;++-*Kr=>_^kuNuTocca*S-7B}!Ay`gp*znp=q9 zI4S{*lP1YOf4T*Nmi3$7=s+>XF)Vmi9a4D-Y9S^ne1ZB0%ZqzTkH;JAA%8kL@8`p^ zgLRsWmI2P219eX*Y|+&P2J$nRY1+EMX<;rvaFyLDrzkddwt#Jc+)NQt8&SkZhC)Wr ziHK9|^!1o{{P@uK?T1p)Mf5JGJoc~1l;MZP==VF2uTxK>soW^qwEs0c0MNVI#WBnp zPRQUOPNTP1Yl9p$q~nu&Vo2y4yCs<`(Y2AE`R9+-moZc(WemIGdLTTI?nuu(TC9uv z6jI7!rnDkjlgY>j+`{_)<GhIp_e@-*$TtGnpr%o;g}b4^q!dI!x@UB*f+n~Ov2+zS zSP2jI+#kA_GmUo4=TXULBYNIY=Pi44w);JQ#rx~qLl24SU<bV7ji$Avxe?IQpzG9c z;5oip2(-MXyMwhhAbvjk>C#1M_j;9jta-W3%I5QdwjVF5Mmm!Ox0!X$7m)-YDiGAM zXBo<NWkkih1jPr|Ds$|;lCR)xlpNNj1@(+ac9UGqg2^Is9X%r7*+7dpyXI(9Jrg0! zn^^0c*c-NFu{uiY`7jnQVK|ijVAqpPr=zjpBudvH;+P=oIR(jGw~EKa_ge~nszu4| zP9w_MEo#aJ>0%cejZk_Dd9!<9nZe7Wd5dKPT#&}A@Rxb6v<!gUt4*7W*i*qFNnneh z<Wpz(U5|@vLOtJpqgPeCRtmZOd^o@M`C%?!+FFz>S@R2Pb}@jxps3EePAgTrJo<%Q z&czRb<9e6^FGaN_A3MC6$V)}1Mc};nswQ#709g~L<@D`Id3)C-QHpin*{sOUOguuv zOFci8S0yoZo|TG?jb=jI=NV1BvS?0Nny5|Kyv#R|_s{uulXc-_q~HWr0IbWzI~Gcs z1~UaLyQ>D1z@EVp14hRYU5VNRqLb<QtaI3-%LnO1Th|X<HpRF%3bh3>ME5Wo<}m9M zC5(qvBF=I30+}H^Em@+2>Pj7`NUBCf0L3Q)_Rd8mMc3b*rGB##UVw5zNWzd-s<&Km zhlkrlxZ)PnAz+i}mCD!4EX!{Rw+Dyr{g4gS3UMpBCT0$TQJGC^<Yk0A8dGV%yVA+f zIqU!{50=*1M%H(u`>fX&mopsaKtUT2%V#A}3pPHKr8g3+FKSM@4BQaVL41+w>9Pcb zp_eAW<H(_eBCkCv@+o0%_#MI~NG1N@PNpci-#}xkmL)F^#bI~N$S*o2EO>Lr#IqOI zvz%iKMJ1*L;<SWZ^xVzKDO-X}H&IIx861!%)K&ecLIuB0-Tg7Q`N{Ch4PM<F9h^^9 z>A`DtQ8bJ5B*@bic@GN8p_LPVErl#>w|077IGYKv-rcdF{L?APHeiZtmyrmO-8wD6 zq8Rdu;K%Kak7t!L*Ie+x_=|N_FAb^iCSRuMb)0QCqW56`l$+grk7+LJ`Y^Un;3BF7 zj*Z~yQ!OsX`{#iGqvH25Pd@R@y?04S^&}O{p|5_t*C=xI-kTcwD|FbREybsi<q8+U zlA6<kDwyA&qBzRD*{wE$tKL@%5uC}&&i6DWOZUt?pzd+yp&leRktmox;^SHQ#*(Z& zTM!CuL^d(T=eZ@SRDE900_7qGBd;zl3{o+4iE|D6{X2t$J0}aaBbg1*?;;L9_K#zO zJM9t<&Z1vA9~Txb9?4l#w41oP+7mkDH9o|Qp+`sLLt>#dvL+)VJK$EvFTV>`UQ}*( zF3y=b`U!b)bSD$WDumu=Z_ICZcE4xz_vl0(PA;EogEw@xHDU8>4T(z)&=$O}C?*2B zvXk(1)iI{2?76zJx>N7#jfYoAiv)cK{WlA14NpItaq>MM!NfmP-XEUtA4t-1kylo> zCh1I4Q|U=DPM&cq^})Kid3iY9zpzZ$By<3i=Nc;Z_c0cs@!L7~N|1(9r_LzYc`)`i z&UcS#-tVp#Zblf+Ngn0B9le~P`lqY$ZZ%>yb8&QP_q}}WeOx#)$vS%ZA!7D+pKog* zsU?~}x;OE$7?wTr?k=zI%|iBCvk4sR;#%JKe>Xfm+w}5gb;LA7|F%o%$mvYS)yDne z%-kl|FCBZjGI794{mGve`>;>Kk&WBC4o~MJMQe)QjfX$er8PbYA4_Mq6f;Rn8#lXR zKJK+8+j==5Xhg12i2z-qwBNo`GpuqYCuf&RYx4Dg_Xyxl75)M>#Pxn)APT<I5@zPj z9x}2EiOoeiE{Xh#^-fefYul4%I?~>-G-P|d9JCNKDeIg4;bIP6$pv<Vfbn^~fN8Tz zl{U>V0c{e%6=wSOdcCnj*B~_{z)l<a`Oh6}qXey-shF4>x@*jBBfTW#%|CNeYHWCX z@B9#?p*`T@py}yT8DX8F6+tkb<<ek|J-IIud~l8!jP?!=F79Qa@2}UV^uJd6b8AeV zqa#-+t#CHx`wI%5(CsX5ke_MN77jdHhK5SK1Y2B?(1y@!(sK{Wk!rd*xOv@uXH1o| zdNHji6G%;*OZszLxVJq+qT+G7{Rv|?NA1bt<)3NXp@;4)!0@@eKF%1ljWMCgJgMJ^ zsYrj+|7Q5@!*+mXwwyV}{^%f&&h}Vs5+BwS!2K?WsqH6Ug-pm{59Mu!IH94XPW%Y7 zG|q6|jlwdFJ*}WZz622FimAy_59}Guu5+%fKcQ7x^t1~rpw;cJ?x@baIOm;zDTNeP ziD1`Bi&z@ehEsbO6e4N=Gsy;*Sf@P40JFZkKygq$6~$J%Clcc3Ng#$C4tl83rWvp} z_8t6P+Uq90d2y%v_d4EPTyv}=Sxw{SKATsZoPba&WD_x<n7M^`$ZY4%xd!7DkNY|o zWZuZDO=+d3o;p2K#Wb0(!p(;;kg4?$fm<4nr<4N9*j7rdMQ<U+v{_tS<%R;ho0F9z zI+Y_-Lw_(Lu@JjrHtfe{Q&Jj7Z$yOh`fmZvB}qA^U}k}*Gy_=cw&|i>sHi^0Zh%+9 zR9gkOoQjbhR!8gk{OpS*+5VS=^qzCn-_QgW!lJKBi7UUR3r+AXL`ByvI*f*ZSrc>? zjL;jT!~mDjECXeRSZL)5uj&qSC2J$gvm_{q%GL;?r}QTZV4OElUVsd(%k(!T<c(fS zGHK(Q{~Z6lmyQKNsCq-pO&wp^<g(Ibu|+O@t1@gI@q7sG{5H6*=wxBu{*1E386(z! z--tKMT0a!EEYv(HJkjkRNL~mZTt6~oAO6`pO_askL8*VS2!4-NAg3WJ{)y1+=Z6hM z&8_iSp1SK;(smLXBIn00AuQ*;E?^LXG~49?iQO&JE*)Uvo(?{SRmQ#lF)fbHMfUm} zjL~+BK6Hw^JHB)Qj8O!^!*tG&xoj6o-%n27)p^mj056xjxwR!{TmH~!W0PYsI;XU6 zz&0o(-8{I<5APhzuSh*fNzZsB&iptn@MW#^Gt4MVW^xv_*rm68X!9lc_j3_Z!Tn@i zIF$AULF%q7OZIE70)?Im0A1=e8bW3#F}EQY@{`*ug!^N^yh~|Xp5{j~n@`Wux}*Q( z?)AdK%E(*A%82bIfzdp(et6*;K>t@R8rwt8!2)yf8am$2P60Xvojw1fj9C3ZY3(t6 z5R~J?`|(hYRO6t`1TKyTj4d0L6Ni#8SKa6Q%(%G;1JBNtszN;u6e!;WUcGlDIk&_l zT4A{Qs;FGonN`?s!X$z~%=}Uwy>oX59~=){;T_6^jf^ajdkKFih);VpU$jwF8@5#0 zahj71@~FW0Jht?Ge2<vfMqyRf-Ju^N&CDA?eU#^cqBI)dD^5>Qy@7lf?siVQ0E*ek z1GlFkCh1M*U<J|xm8mzHFM$q1BI^-334`0oSJu4V(=D*zOovxi$!R=;K#0hYl&7+U z3>^1*wlYzC{&7UddSZeBlBtrRFmLK%1@_Ofako!p$ylJk=5Sqf$%8#ieW##b?0uz3 z!{-CK7j1B(1gDex*q${UoKFchi3^FsbKQ21vh-XH?!y<6;cgr$q%eIUVP~SG!D@m0 zEM;l&kJI{9Hqf>5rwbQ{Cm$DwkmsL?w<apGw(Z6eM^Cop6<>wmZ&zQ7ZvvKlkms#7 z5xMxSHze<D!O$=Bybln(sy@9#pBrR|!Z(qoQ{6H#Cg>#t#obzXp6QLmu$HE)3pUIZ zzLFKI!J<vT)~B(Sin=8t7ovfyzaEWJ|14*;zLu1nl}~r?>Gp!WyeL2y&vj%IwT(g9 zJeF&1p)3&d9OmNl<nDf5!*Rb|4*s6%_P!aX9g&OTdPcyM<bQdY@#V|x`}(IZqo+-; zI%DnQbALXgL`(xQa?EZP=?f5!era=R%VwnV@lK)nJ~gs%k9zH%&c_jq&(pWx&+>kl zP#hfA6uC<lho9hQ-8f=6&{WPR^OLSPnf$T)9YVicu3zipeulU(@#|CF_7TRMpPijb z9;7)&w-SE@q<c3j$H!*;u{cd<F5{7X^y);LGg(%h6Xp+Z2_stBP+Ipv2%*bMe^SvW z(5KaHCt|mZ{a1#IEwFe$UEVt#hJj=oC59juexygUG^)0V+&=8A(b2s?I+d&MpX1$) z@7jz8wf`3UO{L$_sR`d21E{t+eqYbbCVt`_L2eJ6<t-1*&eN+0Ul3%yja;G*A_gDX z%|*ERWu$MROtbFpb!+B^7RCF@*Z5L}c_0Ai*v9_|%_ydVI5l4dbFvUq9(w+YzV)OF zQgGKs;c8=F3)|~&-U5W+vF*x)zV9KJ@Yt;C1zCOJm+=91a9vX7D>81w*3OqhsaC9` z;xXgrYQ)@t|EOP{z-AV8TmAGtLQf7?dV&|OT84iy5wl(Mvy%dl)f2l6<qkMP<o(PU zX8R{9qv1q%rSp0Vkh|(2$A&_ArIpV$JNLraA9mlZ2jSM-?$I>mo#CJ|&nw3fRfjIq z3!k(w=AE#WD9OP%kkp_5h68EyT;e^uHKtBCX1;jw8I?}W%@oO#AbROlx3wa-c0bn@ zvOI*{LG60{j!E2+s$MgD=|U%5a#F%0<LYaWQwnTaQenW?*p$7R!+QAS1YZoRaLB9f znbFK*yo&sRO2o(Zmftm|2??HdH5o%<!L>jfwaeChl}5IUdf~s{c<e$!o>r~1%M&kB z;iX&XYEepW{eI!xC3F=Ux52X(fw9b>GOg(H8X~G(64qEpKKt9fbybC%QGTnec$|dq zA`bad_j0oK^+$oB)Vq#vka~=yF7YL8=_j~oo+5((=mH`IzQG$nQXT&Z<Rfw!<C0f! z>ejOtDDdNB1Lh&zGh{XN*aybt*3apF1Rr{9R|$7*X$HAl&YHvDZ)uK`$#55wrm#o9 z9W!w7H*U19)?%V?W&4-G540Vz&xMmW^#^S?&d)%?xk__koEx`ZfT#iWhMX9P+Q7kX z)M?)ecm|#JRXSJCFxn6QY%!>Kt;WB$oSFajj9bvjpKW9*FiZ_Rx8-u7EAC)lp*fJV zZUzruHSt^qNpKC&8Kd>jR-AGfhvm1!&je6*t;PbJFxKz~%G9ob2FY4}K`?$&Xu^yW z=@}GpZg@l7&Nz?m`Y~<{MRsT1wP!gjc3nr#)s@+`PH660yd|T19&DYz@<p2SAt$#W zT$@W^M2we;1v}L_k=HFvVH`Hg=b`jEy6?zFoay&bTCsGeS-wwtt0_&E^#^!Sf#8<& zVzzD&71gv}o^bN|yBkx>^g0!*R{>2O7sDH3%$%g))2gnsWX!-9Z1_ruxsi;I*;H9k zf$t+~B~p$RR|CDf_<tLW`GpjKDfg6R@<t|yXl>RO_irlZj`{2M{N>Iz2i(yy?fL80 zf8aaRvYLtn@Uo1&IYG`?S3>~_(BQs_l3`43h?6@WLyNo;5cISiJCjqLIeTndrg^Ir zUiCILPkjG$Z#jnextxAAU6McaB9`?-Yl4wQF<0{#oz`Yx4ah_{l}+CwR;*ayVrx{f zWNx;Ik3NGTye57SzVdxX>SOTi(^rD`t3a*lwvs&Ce$17Mf9Gg%!_a7VQK{hP+%nxg zRtggw@6J!bCQ}%-q^xdVX9usOp05d6I@2{oRir_CX&u=F^eytQ)@p|UAQ$6i`&Q1+ zTmRMmJqz9kP^(B60VX(=bEZLh%GGIpviMIZWv`P_iht1yz__%)nR4hvR9#P;ynIW4 zl(TbB#$HG4N!>-a<2h2^#Y$J@Y}%Rx+p;*+KkNk=XfNy7Mg1Gu82Sfaguw+Ip9Rhy zmTnR2mqbm+6%){thuF!Lc_Bu2fR;h{t0U|Xpc<`)kYy}@tjuoyU;&I(NVBE(@M%Jf z+HGzKLC#(I?zG6?zhpW~+ReH9DsRSo4$ogK3ZQB5yd{$V+7TB@Zj$LLtlnO%{PP$* zdgYJMH&mmU2R8QH1276tUzH@~tL|<lb<NsBg!>>?{)lQOUB38JOCESCdC^%}C>t^f zgw=g>TDr-SEA_*Wh5>yXeQ{<GJr}vrV_oeAxKD8%Im_xbew)n@C)D$Df&T$BdKdB5 zT^dH&V*zD;{nqNg5X?`Ictv^nDT_;0aIHs-{o}gY!29n)hvttzciuCbc+!HJP$IGD zX}{dF4?4-5-$jT>wq-8Qo;ijdSz!tMaR42&j%GC>q_QgBc>$P$8}vv_3B#=gqFhv| zppc2$;Ple`gj1)uws=xx%SYX9>yQZmt&v1IfY(jjn-H&ozAelv7J~4S*bB>sO&}-y z2K+8w9->17kgHmxWYAOJ_e01x{BEnna4}OS86uzk`S|Xt^o9|Xo1-&8>CkA{HfkFB zZ51@k(27Q=6K<dXM^OdF&kAYvsB$*N6Jap`!rGdNbIbhazbFO{QM}TX2B9mP_ClCX zrV*#&mKF<LNobu~T2??N1#c0$cQu}IhUkx>8wZDJw{H#R63j{%+5Qco4+kHnp-7ox zH#qI-t;$#$>#`Pvrw?m(KVPye5`zT{E7C5l?m#4*YQR*0X8HCN1`VAk?2)PzLx*~g z;;}2aJFz%vdeyA|K$ul>?y#W5=^R+k?h!#U_GwoAj~n&)$ibt<{YqgF0-!T1lo48i zBJwO(54S#)XUeeR8AT!HZyI9^dI+C6f1vILQ&YF6bH^|w3hkvJVP=ec2#{ko19EKM zr-Pu^*T|Fx_N`=qUe2Hg=kkk}SKX9{q931;e);MJLgG|^LFFm$sz{amusPx{hJBdT zaa>CMw~Z2{_GkFCM~pN;aGhRwgRyGS%%rC%fmeZAf6e1`JMvmaOeL<Zm0)ws0W=j4 z@C61wH^Y*4f6&kdK=$7B5U(o!NML%0<8K!wfL8c~^4rQNRgj%4Z~Wi|`-^2#R0*Ih zqJ=*kmMEKA$TjALh5`0}Qba)9#Uq}nRgv--X+r`rQPZcKJ-NGu_Dk&0QvL`7QU&;8 zIEQ7~Kpen7VH&E`8OvTUXVL(znq{Z8{vMdE6JT)pC*B5fq>C)9R+hH%_gzqUU(tdM z#E}7$gj&vCs;>Y$z}Q%?_Y2N1G6<BScyT|x7^N?IYO7I24S)*<Boo*|XwMjC>3Q;> zlO~w1pOcUZTb>3`zPH_a%hDl^)T*Q*FmYE7qVc)U->4d+5}GRsWlw9f9uq#Z#^F5* zzsf5fVYG}bXJA?58c+kzitgvWWi^ttZ@D_hi)4c_8XcDkNmI2^{f?6C@Yq{Lp_0r9 zw7sttQBp8hGu8*7IG`JVRk<ln4gLdrU3Qid>UtU>3;4#llLdAduN7r)_Y%zSq_j3O z%^jZC!9*Tah)L0}=)KARj)QX2K-tl>O2}-&6td9vT{8i;j#rgkXW&0yv5AU`<2~)w zNg(aRJwLDW5tMgX7FDy`ZvqvzimUI7GTA1XX-=~4qP7cM!e|4uU-!Y$%_Z!DOBw3q zGa{QWBR_quD@q+#)*u@mT3$X3fxagi?I}fMipu!gF43gZ=5YHomA`IW!e2FXCy9kT z*?6M3GQWP80dz|caFbc2NX)`2Y%7>dFQP(%nje<+Q(V|ZgJJCOH}{OR>hS;!1g@w@ zy)O*U!pt%xr6W1{{N>N}53AXqh*-;NK^rR5jquDfR;b1VDwhn#YWy|B=qt|^IkE&X zx8Us~#dh32ojm5Mje<f&QeSOla1@9)^)IaX1awiOvYz;T(7|Y+bm=AXL#Vg2lnhE? z5NJFb2>31D&8Pu{9Xc2C)Hw=0<TVIU%K>wIwRB}6FHnWuwxv8V2vDvTeKQNY2er_d zYLSr-@{7;&YIB`6VL$S-I~V9{y$)4iuEs~&Rn9hudd@m0p0tYO_fTD(J)F27Qn7>| zG(rML?&o29J%GGJ`{1VIUK=@?m6Q=reSQ7y&Di+By`c?ROg5JiYs`22#b|F>ZLv^| zlmr$<Vq~b%9Yc}I(cRviUeP2n!=5tMtk=*yTr?ZCwTMLB+^KTbEQXs5b}>Z@E;sdF z6N{ZXiHxE~xS)O_UTdt3yi?lb0DthZu%X<-5x@2Yg4sjtHQ6$Ycp_ZhRJ<@8j<4bo z!BPzO5S|%@T~}q)Hj<RsNBnFPWh<y9fI`M(koe{TsKKbh;F4asNjhf4fpaHf;;-Ea zUi8t3n}Fjva83$7#iQRXk8{B-^)9<oA_C<G%J6AMdz4=h1ZsEaRb~Qo=df$B5`o6O zYOdT@aif;LdLFeE?@|t9$ydOCfIBhlr4bY?A@^Jc)8H0Gr9uQiUvN2VRATZqW2ZF7 z4g%3ZJ0~rK)dZcBq`GMRnS4br4tVNhMh*y`QZsLpH>2t<+XaEL%5o@zvhjz|@Z!qz zJ62NtZ>*$x+>{zby-83`Kjwk+Oyw$>NQ?p+fDWyYE{><CB*|r;9Qv=|(TR#_*@bSn z`_;l<L0H8^`x1+C1#=n`U<|-VFyDynjR<<$-3!qBt2EP7Rwk&{b*!T;;6GC(qor5p z;_!w!U@{wIR+W5mWFXGgu_E!>gsmxg-oNJ$QHTkO5em34mR(zoMcB3V(|fkR@8PJ? zi5l5rnha6u#(h^xA|3>xmHfn+;(n5p>aJ$1<aWj*XB2A&5jFf?T3}4o6t!l<#_c`j zPf>$*DXS!&Melujr|*>df+XPt0@O%GYhrLrJ#EUc07;x4GDrAZC}{w;N!zeH;;~@K zvAFTxTGzDlC3La%xeN+NC4b?NP2{bask<c-X|JCe%Ur$36DoV3vemnmC)WO_PcoVC z97=52DdBy|*DD#k@O{(e=o_CJX6g`slDVJwjGZy+exn|fe^8Gwa3TPeclnk`d!i%~ z{$olJ{2jX%%QJv;^z>=d7@u?G-#UrX|EQC=+(2v%+PBAa_3Q|FPrQAz9#g^)6eLOP zmY9E8&!&8!gM$&|oPEttF;GuMII|J<{9NS>*oY%W1b;eMg{*1Z!;g3eZ-ZrUo{^_2 ztkdf64?D}nDHKq?_fko1*^g%DeRKs=59m7c9w9mb8qxN-3Fy=JVCBOu+nd*$45lh8 zzvt?sRWF9yNBA6OXx$mptZJiTwucD*h5E9?(tM-YXtw(TGq0c#wvcl>kQ}zbA53N4 z(m%jO%YGZT?RL#D!z?=dDJjUtEK^=!aHO(ez2GU`1xksD`G@v6>dOy~B7pd32y2#4 z1z^J<)qL9?W?&iSDXF8nJ4<^+LtTi@r}bT2?EL?#khC!jQKMPxzRj7-O%~hv;?5+E zw=-WHRnc_aY3q+wbH{&TjGSD(4zjx^vl2i|X%)1HL-(ql;$W<7kYxQ=edHWeX3{GX z)4{L*(&opBVWoUAESu^|SoWH^c*iK)DbSL$9tH3`?rAr81pMm|MdMt`{JQv`a6{T3 z9j||y-QWxPfWDzmT3ZxcBLXefnXBXn+(!LzI_-0hdt*Ga><`w(C2t{H#uv><nRdiL zQt9apDl;@==l1aiDjSC3R1Km0NTYZ(oT;YbIkzR7SyCz_8G<`2Z0ya>fOj*gN(!gI z0i?O`4agZJZKr7#YZIyg9LP;g$QnkK5ZQyQO1Vc-Y+dMmfo$O(Eyt}y9qOz}q96YR zN2>n~jx3!-H=bzK8RJyk&nAVwce2Ag7}Z!5X+YEzc!5$@-fVyld5>PBgz?STH~rZW zu<p4Isd2_<*>X-k)dn}ZFZg9O(55cSV^}`NZ{V2tAO6REEp2X`uGulo<W`OS+fO4J zw_v)#GCp%^(~1&dAB&wM2%2KK!!651OJT($Kx~wI!<Y;%Nq178vmaov!S-*EI!n2u zK>%hI5i&=C9?hD3wyE7ALu^GozYZUNr$+iK$0I#9tFcb6RtC&y_KBHQud!W>a&jfq z09mHXV!Yi<$7hWCh0`i?k<N7A$9G|1p9oK#GUGtIaSF6%TQ)q=e;fJ^b8Nk{iFXUR z@#f;p@Y2)z&*8XUK1iTG6*NCSV!GH){g(qetJhHd`CJ|jnyc8shw$xyYJ=DEzw07( zBqnDMa^!{z$|FZp4>IrcJY3F5=7GHw7;F`b*bWV3e<6^+=zQ(t3p}5fY4S%?69dO< za!t|{DTs*AK^QYq`~6!uzCZwGFzqpJFSWO9?GuhG(smDTmczt{+?hHdyqfE3SWft4 z_CO4^Vq|_z`NcSRKN1egorexW$p|+6wd|Y>{j<b@+On-!`<9s{$|@@1I%}{C+Yl|D zDxk;+esD?$p(Gl!Cc!chY<uze$bJYL$V8L?X$~`$xmf>lV8#j(jpv~kS=0HF*#?)6 z{SfR7C+CsvA6e@6a)fbWmqa+8h(37SMw1fYyvOOAZxhr8RKbQus4@Q&a&wiNYIWf{ zQGxZ$V3RSem;c)YwZe1`)}b?j#ewL0lpH0nJ!<CE-25$xXxOr&Sr%XaiNG(noh8Q5 z)-2c9P;+BM28VnKL~#@r-g>eJb}t;?fJW>qZXo++$o$nU#&}JoN?c35=^@z}_J%b( z1QFS+#P@cReK15nQ<C3t@kjY>eDzA-m$6Hu8!(CI8_%4B9h%`bw*eMbX6SD<r;4tW zO;IDamk1H0LbbgC%1YuQ|I9zwiqb|4Htrlp?t&=A79Y7-eiET8DB~Ch+J>-e=eM*D zz@BVle=WPTMHhh=RyGKsCns|tIGu5i1&&*pbqZPm<CG(aW%@NK0@ZF3L?s|W?z)@m zGSm61TfqPi!~M5%2s<ux=&Q~INL}T~_umd9{NG=oSkWF39>eTV?MW`{eg4(j5{!Hh z6#NUjC$PYnTA8`M9Ew~5wm3q+#|a&sQ2I@a*09;i$}>Wct%Twv9@nsgYW1*1zF`pN z%i8A5zc2`Qw$-s}lycSIcWWRD^_^wqiP*K}r+K!5rg|eMMs>@<F>I>INLw*(1pPdk zb=0!K!@bJdmO%Afm7h^S19hznW!ZZxKzd&f5FP2Ua$-N(GfQ0vA8xKuf)V(tRUDdq zHmmEvou3B@?n=zITSjyvQ_B<btdy3o{m+d_E1N*H3<N6#^9{zm%XHD+pg;O%Vuvq; zcX5@-V4H*bSdX6>v&dAT<Cb2Gk}8l0rY~3ue7hZJR17Xi3B-UG=?TOMzwVprbqiZp zsE}iUptBTO#DL#U%?zW>gZ;U@R;Z1b6dkd(!NbN|%2KNCO+YwQ7kV0>+bJBXB_oA? zCQUBn>S*uC&;tnmI)fh|uD8MhUxKiRI2S?fr#Aalh(P~}l=9sSQL%;l+YGTu`F24q z**HTisQ=3awXt^IP*QcukIj06$vtozuYX5F7O~}pC2?xtBVypt>egL#0NDYnq&7d< zRDPe>U+u*5r~>N;$mX&-r!cQ-y<>A0*}8TuXUE+^W%8uHAcOEEq~SUl!m)-r0$Laj zF~Vm647UQ}ZVw+`f&6basMC5F3n8oo_MTmsa=ip>`9p8N%`b9~4x&Im*ZL-Wp_+MQ zH3K(?6Br%~PX!@mA;O+{;C?>|K21Ll4cPgObL5L1_d6J3>6DXHc^mUjFeI6E5rU!D zs*Jm8MfZvq3D4z-LixgdBGznzgFu?5M5W;=mPdM~xiour_*I?jUmnDLKvFK74zS~= z1>La$=b<Y6-YcR-RDnEbSAy=&JkF%A<b;qr#Y7yvocOYv1bYf1j%X(v=|@~H>2J!= zA#@~aI0xR9g@v}BYyypNr0*l#Ga6atv=uF&Nvtw}IMfyHIVx#Y-^KXj{i@L2D)X%X zwK0)vTz?bQ=^?rW6C8a_MQo0g#gHhv)NKB32+`kyR}Nc|zDR;vZ5rcLPz;W^VWDRz zo;hsW(Kh6F-&DIcJ5yJG^|KPwf_r!7gGxItkP%riRX7N*7zZBQnR;yqyXW6l$Og#2 zt&sG3Lgt;8J)M7v5G8GMa|h%rA)O!lpr}S8OS^mee<~pg_*2K1#yv?pBka(w^+qC7 zi<9ZPG#ih1-qjI@on6L+)WM);lf|>!v`%O0pW-3A3Lqt`k3E0>>4e;f5!XtfU)p&9 zc(P7wQ3r5Ha)=V5__;&nvVM0$aM>uM$II|a|3aaz#9jWyyWut>8d+8^*uL^s*Rc3? za;;X*QuTI_bW4JsWi3|<K#%-$b0~@kFpeC1co`!HSFZUZE?W($u65^}B{|jw<o86v z6tEtZ(KWRe<V*3Y_`@uIW$8IUFHyedsQ!N{AsBio|5*u{h7|elR7mZ=QK8=dq(YE$ zl!)V$EM7b}iXy`ZakVZtrig7skwP{+4DHaBq57DO3KAO#LM7o&p?+7^tEib;JN*`4 zm^yK|CTYuZ^Zt7zzCjC`_SXypIWKIwd@xsDZ9vw3O~+7lU|xr98YbUVsBf%t8m!+e z?zVQE#CYsA%n~NQa6TQzejMUTgcvdtqF_XM)VsLquN49sh<2glKQGU=u2o<+fXzgR z@54$S!{$vC@lZk>NNX&-mqbS3xt)Ib!M0OIQdtm4o)5{MFc((3G_|#@v|KImR)z65 z5MtM^91+_>@>^l(sz5%3b#(KTntZ2frb&u2p1Nm>6W>_Lx69ml#VhQE9OhzLQ!3SP z;)ZY;gmj7FPcmAVc!xN{_Xc*7_MUx%eLvhD(hldCkp^rbwo=5?Um{chC^IN^BZZmU zoaPxhO^M)t!$P2Dl_+!GFP0->9L5CLT$sfq1nI#%c9UCLp-bAmAr;c=?w03u$@<G? zBri<~gn=rm&j4!IX!;2Q<*C8z@^^Fe8MOGr-WOa6D8Se>D5Q9?i`aq4&zTz<7I-ws zxQ@(<b3{h$SG?a`XcNUa5=hjdAu<4;2#kVJTpkMFNbxTh3PO-7$B9IHT)e@<ED`;_ z<{?X)=p&8jZXKdlqq6GnA&0K;f3bH@(Uom)gT^biZQHg{F)9_?sMxmcq+%x(+qNpU zZL8vRQgzNB-CvKs?Ta(UJJ#4&`)03wvF4h;`FPi#g#68g(%!ic&sPfqk`FEv50}MZ zd}uvavQUc3zi-SnOR<`cDmK&2RWI}<?~ryfgs4E0k!FR<{HWL)Vg8|jhE;vK>A{6~ z9B8u|7tS?*JAw7ayQhPH`7J3A{lXVCQ@P;14k9NQH}91AHy3gcs6v&bLimhVPd|?N zFrnf~vq7<MjQWsOiXOgkqmHgC1W|`AAPnNT+!lv}n>hTZ4q~m+^T!M!EcXGun<3A~ zv#g-QYd72aU0U0ls)`@L9J#tTiH`)cB)-iIB*i9;F|?nQ2O+)jAmFFk;FQNq6k5uL zATZw|{CB172S!U)v{%^Zd1Z~juUKbs5t+zFhGy;E(v#Xg%#eE%z5QQiNECcZT^vrz zo3WC4dPql_O+*9-*d_Ng*5;iInHO_(e~=;IWHZi+l7dS=hl|fnA8`<_f5kyI`rfxd zVg5yiCe^<1%NL6h5me{--L1oX#6bkILL+2L<VG-Y0e=qlFA+5~TI1ukX7#gKgv2la z24`)neB##g5dHe>nT8!mziPPV;4OKjaxVt%tm<l>?#7I{hCCE>z>#Mv=dd|m52;Yo zezFBcz~=DNli9^z=q53Vt(8zqfO1m;LW&ao-)#`0Ja!89uODrY=|}h2k2VN7QB%d2 z+JL$DHi%XvDWLFSn{?0*iKK8ntd#Vv>@!fbXyIqq-2e7MU;}JmML8hV<?mhym~2r6 z3^;)Ot0!OrbWckY+D96MfFIqGDq)H-?IR7M2q9<gED@lThb5jP>?1+T+M7;K@vxQ) z`{oQr1|dJ|g^_iKC|7E^YP->5awdU6T;Fc#P?HWFdHFXP+MtvJ3<1Z5Fc)Z*HDJ5* zOJYb%(3@1F3Ff}_gD;@hf8R{hm0OU;DiUXQ%3fAK8NqB*#?%*2DGa5=TdBikIE;p9 zhtD0N>tXV3zfM=BX(?jV#=5XG#K-NX#B=btuJgSNqJ)ePD9FGqG2|3b%=ONO!avy1 zmTk(;Lj!Sprq{gYxNI@aQ}lFG{%PEU()xlQW-PEKy$?}c;0a`v6KOumMRr2bCDKNF zovW7{fd`hD;1lNae(q)#?U5Ko3wfxt7uz)uGDRRR$QffQ^AzGnZ$;=-+9#j+RYyS< zKODozTKmXTnwgI>$mb??2@%V*sCjJd)~p#y$h(HW%OGkL|0;v%ew9Lf>rO_Z{653; zVTV8;<MzP77c?2WewRVIe$44iZPsJ3PzR!cL@7mnzEo%}mcNHgUCUWUJWYAUM9mOF z@Tj6Bsx({3rpnC!eC&SWDz=QC=T9ey6axUY4vX6Wqht<yZ)Ddbezhkzo19RDR7-7K zV*m9tfG^DUn2(B%gJ=(Qpx*br45AqSrwk(CdlT!YlH*vJsd<2Wh;(oVP=>Ng_Lm@< zSQKCo8Xm;?>=oXR2*Zl!OZoWx@z&7iuP_MrpD;+vg^Nsrm?OYv1=eE4Dw#MOE-2YR z699K9j@`Z-(OIffvtwkkDA0<PtUM?NF_5yIXzNZFTlrWa<q(II;Rz%(6^;TyFzhWV zxW=4X20`EsmRi?Z)5X>jxrab1ccO(_O*f3Ir->`okaLSI*e4T%=k7Xq`Ai1ll5Ad& zyPaToIet`5oc+ARDt8Uz;EH%?0n++P9MPivUKeI5x=*Oz0ePPGDud+h8!C_1Mq-Ks zVhgvt!L#9gdR~9rH8KMWmT6048Q(n{%z1JO)!$vx68PL3Z5)Qqz0EUVScnY0;=WNS zGE%6{P5l&P=pCbwT!dCbtJ6h5>TaxzD$6&EE6VFJEoY-W496j3)whPR$cMyH`T#^a z1vbU|qO9?s4M{x4qT>j0b%h8+zwnj<+Oq948b>8^qAT3LJaQt2jq9^bs|RHgPlNdM zYuF{PVERd1h}wH;RiOL{gV_I97zBhfxg!%hU8kJ}tZtV);Uf$}tAYlOZ44851U`64 zf#!$-l9jCl(UWZuE21X%AkZ8R6%uy659CsGwo3U66TJ`2zzQTu{{BogHb$#{VNhHi zQ8}t?UC}{nGDH|7DpN$mMK-+CGPBL%sKLZoWUaAnlK$7ZRj-D8rBV&KnXnm32{-K@ zK$NUUW^9TAFxL&|n@`o{>wHLnV7eypi7VXP-s|vCW*giLBC(FO0f>&)u@kh(FY{=1 zb|J>7eBQbxA=XiKGKOw8QI3rGcy=)Nf+*FWHL3+G5nA74`2>m?*G0+#=6h!#YX%CZ z2BYmm<B*phs@R;np<>qXGi!Nc`2hy1TQPv}A!w0@i`pwasnuzUE$QSLqN2Lsq!q`k z<7dKz?s$)^@ME|BQ6cA@a9x#VXN0l%MC|NKLC9aa93Np2nLx!6%)tK)gVdQ0Px5p^ z^A1%CtD>Re=MD6+i{mi<kRMBEmP-iExs>nX%KQ@sVHeVwKkf@5PEWhi82%tcyNhYq zlhxA%b<P{sTa={-n02A%X-q%;@kZ0|Aglv!@Lk>)#atQv!)6`i?oD8@kEp2eQ2aI> z9Kv9zZ7bo%U}jJ}z7Ky8qL_aXqJD}?j}Jl=^A#8UJ1Y_)q^+&SS=gSX8tms7TnvPF zLiEMV-IP*OtZv8P+LxU3+J+%ksQ?X5agm$4PfN&{YAKOG3?2V3L&Rj969gF1-bhT9 zAP=B9BU8D=y1miWJ2wuW7^j%OX`|%g(Z{`Cq8v-S>hPd?yvGWX?3m@;&v<C1Y^%ba z*7&1)diPgk&N_o1nnZZMU~;R+Cxma#o7+jkND=Ii0~=9gd%q1);C~q+wdO>P0s*^P z!TADq-?~b3o0wRW)t{BkOl!x#4AR>5Er`k@*I%IXFU>iBLJ><Y*2cJ3@e^;!9P?wN zldphMkBR~{#uDHJ%yH#Q%W-8l6SSNJ6#Z2O!4deRlmF7ZR3Hgas|4#ZjFGD=Ep)u7 zSZa0b6qVp5r-M&;O{r5uc=Edp!unnY0r-Q6!XHpy<k3CazVLyo*LTsz(D^$NLg`i_ z@P*@-p+mDm^6P#BiKER|?hf_#-15DtleQ`M1~}PC<MHB^8FSw?O^^flI>4)+JT6|4 zArr1VgMAkdUE9MqHA$**J6puOph})DEnfGG2|6T*!dALsB^LcfDxzGK*4c{5Ms-Q+ zaWN7=@cVxvB6Wb*kPSy&Pquk-ou@>N|3*YHyk;sKi8)h|VS}ImIQ7Cm*Ci|`#9pL= zMUoB&-$o2ciPx4$a7(@(P$Oxo2q3rKrc36M7bupV9QaaN1ybTcm->)^^WBV%$fQDv zw2Ec`73Wu1zt>p?32yVkxcG}jMo%!ZQ-2b_r$L1982nv#3abugU|Dp!hfZ~6WuByl zCJh2~E7`5vMk{M`hdRiz|8hj1$j&!5V+aqLC=qnA-sRz*^%xWcRw8pYBsv;O^XJR0 zd~ij_ONEobnH{ImbDbv9-9L`#t6pUN`OeoS#d(yl)e=rLIwB#-P?#r05)xDZ`h;X3 zB35ate>ox)O&W*5j5hpqxEnX_eQB+Nv@Xll615LU<j%71S4E{gYChyPy~cc5g;g3< zM?ob_Lu0`1X9x!4+H&i@D;YYm;Is+MCBdsS<NG4Fbp752scyK5HfljKJ98i^dqN`n zk2Z)f>$mSACu_Zf!c1EJfW8MdaSpKsQeXrc?~aIHNyPfGC`Bo-S{Amw{6{I*9gLg6 zdG(!6v<R@Xi>94Af_b{HL-XPiQBh*Fd1BJ<G)T~&G>EFl&jC7%#27R$(w1`sACKU0 zhr_{_1hwC3kZ5LuI`6l&-J&9As~zz;^mIiB$;Q7N5xpMaZly+w;CQnUr8S1FlHe>~ zzoY}kq!7n0vlcgSN6a3@g-Idc^x`JLjt1<ZBSDp$Dh5of%2Xx$kleiSnJVgoH15Uc z^bxM^1N-TMaC-wHpgZk7`Bhs>Qf$?{t0PFON_>Y~)z&0mXaj%O2DA2VvR)Jh%o}aF zDtJg!xDbvn=G+^6%AaYMyoK`Tr8w#U9UwOvSdN}Z9IfF^l$PeOGI*3lIXY#IxD(2d zrOC>>*aV*KR8Sf72K%Oew?Tj#EA^Og-rFFOm4dU%rM!x0H=T;NtY2Z!ivdQm^=jy` z7Fzt)Y;pz%A$?gi?V>FZOL_+h>g2G398z_-9WOizqClQ;I}&ik+m~~&2Kvo^8AA5{ zcN>IjrN%%1mNYJ2q)fGPogg)JC1Ytc91XKl<%YIm`gFL{S26hWkd(X#!4Iv1atDgw zmfaPc7!^moP22~UmhJa8$kczdL6%zH+aP%IiSKO?pbD6T$Fq@S_V0~k^e|9#CJh77 z+B8M9UPc)LXXgHVyc_dS`pT8K!)vT~8MSc-v|Y5#b+dXn;*y%oT1SY%I{e6D)Ufl( zaTTQ768~<4go`%(aG@3@pugU#7;32vROlUR($raV$W~lUH=ajqF9J7PRZCV~L5H0- ziiGGTBWmrZ3@Y{o+KYdf$|)f7ok1KjWd$%IbGEJ#F>?Q;#kTe%|NglT{g^^aWm$Y9 zOaWW<c&2TWS3^^}R^fLW1o@96x>Z%DMC#XNC`1`(VHX2t3yuD0gDgeLFd-kUKI)b6 zf3!h7?T$`gU)le(L6o&&Oeue`=l-aYt};tX{fc$XAXBeQP`w{B>8g^l8EQ#PC~{xi zYTdRVJ+Dm`)<;_Zb))!rUBM@8hcwB&)4`<Rw<CJC4bgi1Dy{WpnR<1lmf7iHQysrb zNd}1_<iL9>_Knmde6j1B!Mh`3Okn{&mjC03X2@aCxyr;Q*cTm&KH4DqqyKJ$Jf^+3 zL4XG$kasLmO0U=uTvS$z(3YnP>5u9}w&{&wSaDkHxI*$;s$D6l%kvWi2^_S63#VNr zuFf3EP~g*g$u5KyeZf18C^~pdEn#V=e252ftTx>HW%6-bK;5(vwJbB{p_3gVd`DlI zh2j7hEN3HSVuiY!G8n8pm}JK6HUJk!Dw?cfn|iPU3|3|rQmPKWfYc<)=f_cswzSAe zkqnjp)ds=x<@@pBh?r5&QsMArYoTcp=he|1bWz}dh0JNi8PBZipm+P|43hKfYk31# zE+Pu53*t)8wr!w$84}8TEH(7fYO!}ZQ3rkY3p2^psk6S3OJMd+NdkX3B9aeBL_H1r z;+&Nn_`3~K^Mmu>ZIA#P&_8XE&mV0Na%TB?DWJvX_cn+V$6sv_7zFk*xQ{jnMR2IQ zlvPFDnNjnn(KKyk%#|sh!6)NmXxyt+www~@dz4?1nD-~siC8W@Ruj#HAwAM!JTR#~ zJ?C1u*rKs+%==(LzZ^VC0;mNQ`!C=4g`%8o5wPDNnc7S!UlN;T1GVb(IXx8dER4k- zscht2*zFX-7CiPp7*V|92P3j)=ApU5SB0DXbn!PMvVctacN%25YB!V~&okOQMy0wv zJxw<DP{h_Y#hsm-kB__QIk}aCXF!|Sc)zeC4X+)GB&qP`e29;hj4Wwrap!sU=F0Yp z)8#fMkb|3xD+3p&oil@YAPBEAVV5tG)HrD<s39(H2f6T`zAc#;Eh*?e|4{sD)7_PW z=OF-;hm+^YnfGP)lmzDX?&kh>CoLt4H$ZVBDXymHdgO2iaQ^!E=C-#&+U}KB2aZsK zSBh>uqrIc{bfU4)N@p-?XuXiE;`5M!M32m?jU#VUqc=&H)U;D&5X7^stL=LhjiuBw zzSUP=MuskKo8knG*U@EImSl`Bb6(Zjg?^xA=wVX*et)y%@DiCkgy-wJ6rHRNX3i18 z`R>8X<tB&Z*sp!#LbN!WZs0(l4fe4@G%r~lNx{1}XD<^!fK%Nxry#P=NNMBpzJY#z zy{BY&vg_L|AolE@I5AM-?BZIoYf_Q4g&i`Y_u|P%TQ4mkY5jd9(C=Lk_p~&rNS)K5 zeZ07^p@)iTqMVV3ofB)<$gf<SJbVK&GO~JmPnM%DWT=E(a|Qt_?CJRH(w-vau3om` zUpX_M2i&p%u9Oh3QO2C^M;`oPyKN96ZgnBU`jA*1C6W_FZ&>a{bn>G*lM9Dhrst>s zWI+naI%IgY767RFHn0JE@Y*>=a@u@Bq)jy|5%cgfPLF$>f;yyVvB5T5sUOM6;;wtP z<!x<PIa0Q?H<&tyI>`s5`s1J$ehVT{30NOEYh(i>-fx&EJQ^eh3rL2HDnPHJbdNSF zLYX0P+tXoCJUjD2NkI^0xUcRkT~=wbGTzqq3UE>HJgcXyPj;h0M-lCO6IWLD-rxG1 zn7Uy9UxFwNw}bDTk+OUPSuC{YuPO-k?<z=vmCkT(gKe5PF)}Zy)uywS^oD*=g;)BN zVq%j{l|pvZNxUe+Qvb^1OR{>Ft`+U}LYS7;%0x?w2;m&!)dkeZ0ieHmdQmKr(1B2x z$=p^V%3Q`~8VBtYojA-Ds5yB_oZa75kX1dLKUI+2{Dv)<u4d0`!#>l?WZ7RK&2-}U z)xEyQvxra$a!EjQX%li3mZAB}1Kvr+xhkMHPVvR)SFw8C{;miFuWLQdTea3w7HuUu zkDXqf<GpCVYU^O%+IH`fgM@kerL@f2hd#dxB7UJH5Eh`n1X0=SA`AUEjmrufB7fYA zro381yrF=BQnvJK&dyT|@K_2AT9?qx35$q4bO(*@tZz^be{O=m!D*yxXRdx~i^_L} zWE@%z21b9P*~N)dP07wt1f%z2X*<kPvyp2GMc$`XiayK~`)u_-oCR>I7r=v{w0046 z?xeULi@lU05w7J5ESP;LMxRA0OEmu6N&2adj8Rw`X|ua*LdGqnZAnLN9il@A5l4m= z``V4AoVx16#sLt@9h|x65yX=m#{KMC!XHHMSrGbt`GS;Lk@ij%bu*TaEXeD~EGe`_ z#AMvSXE0`jM3ug%i&|!b{HBpR#V6ibVr?*Ug<dwk;$^zMM7`X^`Y>6W@@;G8Cz)dc z3qrS1(3X)oj2{p4b{D|+a$>3O*o6mpH#FUstHKa&4ZK<N=pIwdf>%M6Aiyi|!`->N z6|NM#PQ|IO2DcEEGKdj>x*(9I%5A{i=To$CS*lt)UDf^aXMc4;Rv-TuqAMJ|o#QhI z^SmNgqpaVC2>zoBqGiQ;jF-vV*4Bojop9P%T#-S!^U(!S-y-m}VBnZYYVH>NZ$qS+ zpfUuXnwI~~-?6JaXzih{;huy@|1e#j2&H*RfL26e7VDNTSFW@4(;Drpdgsy!R<ZGD zU#|y`2er$czV;tP6u{O#@HZmrJG^`v8M^#z1#dh1j))9uKmy<RU=VK;cW2pg8>qOu zdp^_2wf90Svf&INVg-l<DHhQykIQ<VH3_S)Os#Zf4_vsmh$b<K)FK_r;*_N+p+=EC zubL!KD}R(hw5vUW-W8DyT3!f-c`nhq0}Jz3=oow$_KymIk(rk(PfS;Av3&|PP07C% zQL17lD17c&KO!=Yz<g~McCS>ONLCauui!DM#ctX>n18MCx!)k;S%M^kD)q!Zqy{Aw zXutx>iXB@pAWeFPu@$sD;<|b(rF@6&obe^t76^l>oud?@U&HHD9%xI_Ieh5eu6|l^ zMK}Z_HK$gNJOu~Gg|!tiQV6n0(#~#1JhDKVLjb~qMoNXHW&z{;b>UZ6WOQLtPfhUQ z0jll;@T4v98VP(mqF1wd2RTxCC(`u=^}d4@$Q9BO(U9(rX!e2NvC?zfCqj6-fm(m9 z1^DA;c?p6&d^s6P!l^UP(pv`rREfIwwf7%=jThjEPgScdY5Vx6*<XlA8t!iWt?b&b z-xG16rY!6o5k0&kqQJipQT=mx)JqEuVel5(c!pOJw)B{6u(VfGvg`L7e#|*PQ)ReZ z)fd{bBLe1Pu!(}#M$%hDwV56hIk+O8#e9Z(qw?3~>3Zs$^Lu4_0Z-2v??YxQ(rd#i z%c~kgH^unhWe}~wOlAC$xxdOF&wt7wzv$ZCURT46qlgQdyZ$bNM1&!|jx~Y*E`#)j zWJEk7;dX|<mqAib$D=ZMT+M344Grztnfp3)f~{84=hiKUFrOX}CM?sg&HB-eXi8+a zZ^IZ~uMoP?)bB?@%6^wYQj}hV6R}8NPr7Q-o(h0Sda$RrhbBb`{l$|Rz06M-2Dz}j zf)=hNA70|Jw~R`=uJQK<()*^Z(O=ys6blNkTkSYCj(m=Q$^-<KI9w)qV`q7w-}=J} zP?ltg0V^auAEqi6V>7(QQ(nN9x*OAzc{oG(xH*eh9vb@@VFst3QVVJNi!8>jY(3lF zUUp7+%<fu=Hhg);Ke=`l6#r_DS~g;OtyM$ZeGPZH8yV-XVQlMCF;{%!aOcPV?BG>& z-I>7_6ev))!nUkypnEPw76Eyf{#0XxncLJ<KIgR+{<QncD<@T_b%@X6t}Wl_+$zS4 z$V8I*<&I-FQ>4)YN}2BNj$^!#bomKu(!h-jZOD8mUf6g@Yk&A|SeO3!bqK`nL=`3g zL&-Fx&DPk$C##4@wsGaTpqWriu8~D2<IIh>G0$tt{L#m7$(Q;ko(6HHv|*-hDjWLl z_`p4%6<@?7-(y9PT7P=MD&O={Maj2$7-!hm5ml>7`iT=(ms78Jo%$%Gww-o#NqwO7 z#s>_GRUp2p=`%Smx8jz+${^CSV->&4Ak~_*>G?|>;~lDo-T=poSC{7(LBqypcY#Mi z-14t>f?YNaL2a-Ze!zaa+i#B@BQ8`UFuW`2P_LR=)oT&fv;nYhUS2^!=KFnLtdyNf z$A3AtHTEng(7gV-+`U&+HyU{!8uE^U3Xc-8xdkcD8q~deyT|ZMVmb&ihTDO8)ZD+h zY3E2S(c{kLIkidjDquTQc^o=sP9~sFY$6XHJzA$dya*tYOhBAuykow12)z-K9mpWP znA=+`L{|WAkUEE-)n-R?V8#6gv&REt72t*E{_LngjrSTpsacgI;MZb^=VvU^Tv~o7 z6j`-2_Jrl;B{df3u0|)Ybz%zjR%-Nwk&MZ8VmkTFOf}?3xtm_f@|Lz~`l*xk{mN|5 zZ%~%ea17t!>@6VgC$?!k|KQ9zju+U#r62htiM%=d7b9og3C*4x2G;H`El|;22YK#^ zzC{*xUh}7PZ&#^Nygk5G2JzLgu0bih0}2PE*$0%t)gatkg=Q%{(WC=dNaY{S<UB=e ztSIaVZyUV*+Nf~XpfE7pmak7;bd+#1JhoN!$DV-|cn228Fe`H3?J9|WF>%)?XVJ#G zVYUa3pIIDK3&8L7NNQ(nDAcS>!}P`AY2>tI4_qq-x?p*ABVU-m(^lR?=Dj6>C+=PP z0WD?_K6$0GJC5g!ufskR{b}5l<KH&|y_WXx-8hbCZPP4p-~SmZ(7h)%COczjPns`{ z;(VvyLOoi$N_K%by#hhkMvCVT_gv}xBBy2D)XrXexg%iH(#ykM!rM$FWjfc!FW#hn z=`2kQu1I^zj?~ZXx?y@nyi6W>M7%~fAi~mnv2(?Wy2<f$i$3pV!f})8Dc;fVG%j#w zrES>UBA%NrFc8$=G2QrKQgXAtIwtaE{SpfFaIQyTxaiFFO}xsoGGRVKKb|}@Jver6 z@+@*TKz|WnF~q%^2D0rw9SLG8Z67>XK<Hp=+;g<p{?^Mgwsb#*QKS>f96yBt4p-&o zJ3a{fu(u`^&FhFC=<uqwGq<|^5@R0qr1ZG^fRkCXM<;T%-f~1YxY_75N;kUH=(fTa zTX^Y0#K+vgBSqV9Y(0=<ti96WLpR#c=(IvNT-o@B-oahC^(*`(UlqCITV&8)KiznI zqt~K#BG%;t;w_wk&<fAc>)_>u-ci&J`wGt$ngNS@pzupKci?!mlNY|-X2ztKS9y0E z(3u~&c6^leTe25B(B>HhF5&*hE5@rzV%O^S+hnWnIEU{#XZ7~e<p>z|Qu^VqZ8SIC zRFhk;2xY!c7X$sI&KiEn9xsN1(FDF;_K7zE8+HwZ>hDA>&aSe@pxbao7bieKt1#8x z#7<;L43$!O`px4xWT(OX>6!@N!N(9dH%hk(Loi<3T)D<fbyRjE*;5Mi$5q^H_I(T^ zb5VVuyXMi<Tk_4}F52x(+3;!q8+-JXsTAnz1D*`Q{c+9yc!$gDPrp3)L6tW?af17^ zAU>u5{_#Vt!d^THg8LQK_HG=n^9AkANGI6~l(YN)aWE9z1GqeY&+Da6M>o#@IBy#h z?_Z-WANrc~e)%(S!#ICF{DOT$$!Dh@QjXvH&*`c9`8G@5hnsUqC2=VepEGehE<~}W zZO2t`A2~e0W4<|3@w3rWnW=o-huhKgF+X^K&v6g#Kw)zGnMelZ$C9PcYQyCC%8GYG zzWVKp6I#?cYUCTDs{6p$dHYOe+xfeD+xJ2_cF1tZV~Ty&1u?lYyuELc#(J7Pb<4cq z%I1xYiyL~_w6VQ=oxQvv_j!|*p(UL&ciG@`QH)K>-RXlHdNUj0cDX!R{Po@<T5-kn za`}umY0823WE3A}BtQj=^MlNKXBo1fODl0^3U%4%%g7nauO|l@`OO+8bc`pZ3W2Fh z@FhD(Qy#Y_^1EQQit!48x-QVBdrKR-b>t_oebvIQhw`_vBW}%~i4W%om{MgPRei_7 zj#Z;*Sn8{SoP}oB%1e48t4dx}mEtVsU^IsX^92je!EWKKsRlaXEDi_*<@3zob*rEh zUo{dq*j7P?Ei2VsTvIKZ9H?lSOO$379@IV)Roj5+Xu%ZG%tSgX6#g_apfNZv08|R3 zW#Sz#VeMlr?W9Oo{f@o*eKYziCcJbh+ie^fJvxhq)ly3H`=OAO0n1`S{k8c@OZ0L8 zjMWx8%nSWs><KNY>k`M?<KJ!}2R@bb;2f6n$?t2KcR?GAq&FBwEnp?dhG1IGbKDAz z<<W3s5130*?G~Ii&P7e3C8uhmVc`t1#adR9IHA~#fSEIRK>@4nA6hlG%E&st--q9e z#c~$|28i|<y0N-{j(uAot7o!0#z78lq6&#LB;v_8B{y>lV|FUtvt-fUTjPuy=!U&j zY-FV$rkt$b6|wW6ul`Y+ZP{I}j?Ow#)kKE~@0OYSNo66WXx^d9MtfkKqrSng6Mhh( zvY(?O_R*Wn&{Gm<GNng#BgJBHefVgue~c14$r;LIt!aIR)je)JKb;X`AyB4x^n3j= zCKr}fvS0L~Po%1rWj;dF7ceaI=_H#~)9cjto|BXMd=pF5o@|78{U@@ob@tx}dUCq< zvShm30IONQnG5k!C4&4o5Pa=Ix{2?hoxIT9RWa3v*?FqsBc+D(3Ix6g_f-zN!;*(e z?GKaSZnk5A;qDi({lrmWhaC~vBxnyIACf0rJs9w*1oi9&GoJKFNSmSR%B4zl(4&V7 zm}U|dZ*K7>nLch=($AqBB)l?Tl50wKS|w8PduV?j{TxAM0!?`nXnjs9KD3BOCzcwe z(=XC~KQEMF34|9dATpXsjcA7_t@DmF9Js0+`?Pit+NGW2z0YT_FVCM;pm&Z)A<|uo zt9yW*-(%?P-q)XOdRh<EdaqTH*@g>8o*{u@OaXV8zAEbM$g&@W!9ve&!)gc^wLD8U zm#1W!5D=>Gl2yycJ_>(Yc*f4Ng_%Nqg59VgL<<`)8&eGdm+nJjR&U6EN={+`+S?5x zqxQ-4HNk+n_^k3y-%P(O5!Ev^3|J?U&1igL?FrM*PKZbba?S>6gUhNf#XQT6425%N zT2&cwh<?d(QnUa{oka^x3Qz{?lLqLhbs@sk{z^q?&4A|&B1d^y9%mmZj&v`?U~$nt zYa!lq(=dmCe@{}G9X#t3mAJ6+a+JbbEir=n6T0!Md%8$BD~dSt49|wxhk=791!bi` zAOugsEy{tJ@xkwt!0Mr5`$YE0WEVBpdEE)fyy=Z=BycGgP6@$i66jQ#GQQkAsrBn( zH=aV%kVegBP$CPkTXRrt0_#R@BbB@f5<T#-&5zv7c43^RhUiCKUQjJbtXrG7u3wc# z$Il)vY#GQO#CZ*S*PUKBb6@B2Q&r(ZB)&tHDBBu4EUvg@IGSQ7%~cBDFG7#Ct{@9~ z%6q~~K!ANK=^i)eyfqDUPnLU>H~M*M1(^WIT<3`uq+aX%+|NTTY=PHF55tr3=w2;# z+)7)DBD$4JZqt?vT%*(Q=!hS~HeV^Gf(;$)qqMRV8_&8u&+@7kaM}lYttY3_FhY%v z`$*t&wZYk4EUZLO5t~eCsoFbi9$*D@s4F{X(I%>gFVv%1j#cjvTvaTZ@x7Gr1)%QT z#jz>IFg$fDK<&pG3{J3k383{iQ^`mCL?`OTZs>MG%VgGx#`foQOcM+gM*FI{lUlnL zDUz?705Z-v$mYzT_B%MG)!0p#zZ6*bj^${xONYrC3o=}Y(S&e?zTi+bN}a&*&-Ez- zpVhmGMOS?#tf5bdgZP9u5ZAoU-<p=z(IN&bt3~$teO0nBX?i*i>Mh?`-}xJw$WTde z|I>(9!|Yz6<Qw9YtO^y`*+k33l;ysRzJZQO&9tFLwXl*4<V@wj<50D?zD7aA)k0-D zfWiPM1=XktXryo&fckz3AjFE^0cfwy_4385Eq&JEj_b0J-Jnuztej|#*r-M$knJ7F zy7{VUtkf43U-$5cQ|caYqPAd02D9Fqq$=8XV8<o__XpVR%v044T#4cK@RmGM(ttS6 zPH#NCM->i;TggaUI9bFTKBqHD&J!bF;2qbl9dK+rnW!{QSOZP(VJ>>#0=lRBeki+` z4`oO3q3ldJukD~PuhURiTxz_HPGd8;)C_#steb=>AIloS)L8pUb{GT{DQB`sSW;g5 z@zP=(zG?S}JdA(d;fg;WrAmfs7a@+0!{6EsFo(+%GKE4~vsIYRdq$?m*&*r)3LvCv z1AM62{-Ae^3o3?LYz*%wi@hn<5q7Rnti;xmT@D&SSflbHRd$mOKml11J=>|m50t2? z$3t;1rr~}va*yq{d;I$0@Gj`()miU}G8?dLEV7C9dBigO-|5^l@Dl$5D*gO5Ut9!{ zzK>q5IfG0VVk~HA-j4nfH#EhvOlu=BmPRs7n|K%r&G%E%0$6d%dLZv?tgkqm1QfdV zwNnQwKfV#D`&tKBUGLi7w|aZCJ#6d>n)+TzFjFpL57o8yiVPWC?ai1uO{r$9QJw*@ z;`xZ4i*<DG8BuUWgn&~VLKi`2F%FLx^Yms}n_J6|;+c?Jr%+^oJytHnBJdGgfgYf) z`!kNZ#9bTQ00{$cE`t~iDfO*vrr>FEFX~sP$xzPB3Wt6lfUCegQXFkN>53MTb-^*r zZUzf)q#RC*$C_!M`9%=}hzlUirw-*-WKQ6tDXA9z-MbZ=U86oHAks-)>57sYwZO@J zmyKAPvKMo*DC#4PWg=F}v}%Ek$;Zw5n0Hk?G!<CbIB2zdKl)y9&O7XW&fd&}zv(_g zmKxU*T%xapM5n{xBSY@DtDs!hjRrgoenE9dwAMMe)AJF{ExSr{M<B2LCS}}tkZqj1 zuTMWU=x6<JZ)aPGDi9kAZ!inV6M%2UpxyjSB8Dg)#2XFD{LbP%nw4)(z^B^SR5W|3 zXWxsWotzHW2ciaJnogpS?`$mRgiH-|4?uC?Gz+K%@n}WQZ(RiKz_LJ6bVCv9cLcfS zdf(vr$^4vhIY<3lUJ!$<Ux6hOYpK>WR39*j4U<*Uk0uLcv2qfVbqm*kjA}+WNQP!V zACDw;CI4wfkW82}XhO+JaD(MW}M{AJ{O2c<%CyB;Rk_>B*DM~HT^h{cg@+6>}> zxQG%yVfKB5#w`uEaynCVFkYAhn-rXsLm{R;xNAS?Q1ek1e-Z(FqPVsw;(H4@ncsiW zJ7?WvEaYpFZ&lQHeaVneXv^BctEqT>u=KR9Xp6X#kFBBu!(qs$!@P7>X47uaNS@#i zFwnSWc~G49X^cy%h;MQ#uypQ<gow6zrLakGd{LP67|S=9muy3lztpvo9uPD07=dj1 z%OOcIlYuWhQ`ZBU95ckuaMIwsk_RZFb?d>3zFo{csD?ZgTFPf2On(zCNU<BUfG3oE zR&9(C;Jo+=l3fGwH^2L=_!D>c{Uk2i3c86<XH-2gf=ydf#Fb2GYrM+cHUTdtu4?~7 z)YeD-e<{59ZlDBLS|Eh`Dfm8!Royi_Q%dSUkBK;M!!@ObgIx4Yy9`ARZPd07((Iv- zKGLts@bITCyaCdRRb@mS-X+NFi-P8u7ZZ|lVUuU}cKB?S2w%PnN~Pa!vly!_e!A4$ z-;Ls0d+mxd+N636pH3LPkpZ`h$_O%xq?G7q<d018IwX{`CB+^dYH3Kw&BJKz5fqL5 zVl`qP;4@F+wvi+fLc3J(m&%ho$3j^AC~l30HXebZ<Me8vf30E!7RVx<OgyT=hXcDF z23(b5nh?Hjwa4Y^Kt*E!4P`?ZYH>0T-osA3f;M)H4MaZb$F5P)4mpS8+@QLOn<`jD zKC2)~dCzVYytLN6XSb;S&ThSEcA%40Oo0M#ephv@s`CODZ2=Z7CofKiF^TS-dHgnO zG|7`cu0v;HTi`<pshA}J-O}=70g{;<>5`ZejVS^CXs^4X^eUpc(*Xy4_>%(|$|Eu| z-c6LeNg+*AU-5*^R&p3*MSB&^8c_Lq7a2Gn?IBAN2nbe2E9BMrA}c8z&ol@gdlaig zdFP&hz<Tn<?;=-U!D?_9BI&^y3UgR>v*zBS;#f<b4>NJI7^-R4rN-Bekjsnm)jUZh z;uQY9MOM~UBG9Y_+yz7`$W{ERUVA+!!CGN7oKecKiW(HXNZ|7_e`S{tN^Q#hyafcc za~e(#kgF^iLLJ)B+2i8g?nCOF>V>Kc!aYb5!e6s)p6P2BB!NM`)Y~fgU`*zVtS9Gv zx;h>=q2RNE&N#bNV!9FMwCraJfrb3fA(164uyAHTfowX!NP{Ocrz%>`O+N!k`7nn? zshxIbm<l*yh*{Y}#JE(q@b11hL~#6k*5e8?C5;Nur#L~D2Q7!kS)uNbNeYV@1bsx{ z@}KzrzNyDiVLMio7}zB9B*KXy8RcKmE@tQmbM@gGe(()ym~35YcI_(;Ewpc*fSaiZ z+ISc|eNcwU2`=*E%P1*=CL6;4r`XFNM#}@!kKm})C6t<zJs{5AKY3sZV`47a=(NFq z&FR|k)xH>E7$%8WZgaBXx(iCX{^{j+!{xt!J%n%yw2jFA(`H{Q^XsJPwmO_Ui;y8; z?bGND(#!+%4L~7l2W^R=LqJ7}$^}K=6A(f=7o353wMkNzBX!84H>R>}+s?HKbtvV- zb5nZ=UV(9;450-*I>@%stgDda+)iK34$FiIiyuM8+eMF)Gs8m+5Jgl0+5fEgE+a^6 zkf4k}6;=ww@QJ;F?>6Iy+I_K@sdfO4Ww0ihCY$0GVnod3Zxrj&A9PfF{q(fPp|+S^ zfI!zwn;}5?eqcjAo#p{{4Tc)E_f|5Tg~D56xiB5FNS9iN#PUJXxCq5lo7D4f47h~o zrAb*j3r&oof87$V!K|X!JrVe69+Jpo#~Y`1_pSB}r=oE?&;%#_noXY!)l(6C51~ao z2v=k?2v$v@q5KkmO(8Gi(r<vS-dP_ZCqNfIi)E!FM-zq*!?1>SkH!xJ+5o{l7Cl|~ z$F#<_$Pj}!@%<DRPf}~u`jvYGSj1*rd^WPbTUK#l@gLE*tE82F6;iCkhWb(ZiXGcm zEZYkXZa){oj%=cDF(wdPu%Fw(PgCW#_!%?YnMBnbq_@w>K3%DR#H(sLsILs)CzFcc z%1)vS8bdWA@frzdh~L0R|JCyZW@T6<9Kmeqwpoxv9n8ww`v|yIsW#1uC#hW_U6I;X zJBXhe$MF^*FGG+PQ(?XXqlp=EGBB4e6iJFFC1Y6;an}|>q)(pp-Y9sQBs5iWB^tK< zGU_zSGe|rZH@bQZR`aXU9{)tyH8mV#P4+Eh6^wO}AhreIoCHLts~^3D1aa_wy2oTI zuu&BQG(MMs+9k}j8t6L3tNFG)HTIDk3sP@2=|ILww8zRT+WR^k!2!WG`N@|h8z_<$ z>^NOdcscLlzG*B_#zs~?Kf63f-!=9?%kM&a2jqd{If<iVu#KjQ)7HKg;EY3_Zhr8n z=DCCTsLVuO%UsQ&LwTL@7)aP!P<o3o{{!%&LBI)A0_#C(z;4@wq*0x(6+#GH%85Ww zFU@E-d*T{&Xhw;avQ7k<qa{h;L&H}<SJ}u1PJe#@0`4G%ygqp(jw9yc=Z>e@;<Pvm z-Uql9<E+N%x@5*OHMTw{%S&o}&0(wKN?m^MegR_%t2K-^x)sRNXWO7J{nh>Q_i?gG z4s7cvxal1xxW>#3|Dp)ktJ*F)6UAQ9ClQ|Rzaz%)R<ILnP^40Jf@W%YH{6@s322Ob zHrd(Exul}6rn>>F%?h;`KC>b^4?xIdS!~#{^$T@JMG<Iv>pbTp{ROKj&#CO?>JY%z z^$9$noDV)~u-X(`gQ$q28ch+pCMzITu=7At<x3udQX9utG$^eWRoGZi3R2n;Z$AVp zKy@$lXX>Fd98SZ0G&9xa@r@rDh2dO|Y}g`c%74mV_LafA?bnc<5GI;ecO5=8t^0p; zAD~;Y>fVnU;XHkyao~)p1}^OrnL!s2CtQ_t2wz<BQP^e%t~f`B+RjMB-|a6T&d!*h z>kzfkMnI%Q+yQyfUltx*m!nzm;bpN7Y=XZu%EG+2zk-pMXE|x09G*dRnNQyPUsX#9 zq^jyQJqpGf0zJ8q-PLLgk%7q>X;%PD&@*~jmfB<wc!ffk2Br~Xaj}YP@`7;iCG}a9 z-fMopV5^dr{~ySYAFrF9K(wXTMEQSnexo^!BLd^0!F-Luk_HYr=w~;CQGqU`=Ap1# z*DgkR2yTqpY1LK5@5Rh=p2lWrMM&<jO&m@(%v9cs-I>aba%OdJcDQRIK&AH-*pnsn z66O!WNcKDF6$K@|xZ4EzO)s*a`pYYLWm)Mfy0F*fStVAzKiL}>$~jZ?2$@>f3^v)0 zUbchzSuzV@D3Z-bh}eOJG!F)K4eBxP*<(Qw+|PbqDBZg>KpFQtEueUr6>y$A)wG*6 z2zih8+LOd|?voGn=<-0#!5h;ta6UAqdiNSTcB(Ncu=<l?JFSeM>)G0xQ1$iAC9(<d z?SQ}+E{KKI8?n*Z!Sclx9ECU_?+SR(W;$v>M4G2@@=t)P#W2;`AE-#N@p$5$8Z=qk zU<{4u<?uJhK1ElI=-<s%X%Jw9env<$TL!`k0*(Qn?8l4fB-L!}IRrRa<hQE=-y`2e z50Lw`N8!GdJhkn(lE=(g=$fUaW-aw76AGj{PV~_PTfATaFWFlo5Pffg?H*+rogx~P z`+U;3Tg?VO2&pcl$Rfwwaqj0~ju~3Df6szl7u4;HXzshb7%1>`@nPthe$vQqjR@fC zLbR?ENwEWzXOITFz<AkUf+bqPez4N@Rvnvi7l?|(&gLgWzC>DQzDx?q?G8yT)fcGJ z6|TUnOtZsn0m(J>pQJihrX-ds6s9knxw!3>L?IC3?_TQ56gdc`hHbj-J)y0{4K$n( zC2<gfPA8qh0c>wDRW`Q`fGc@1b{23<*45*a2aAk*Mo_Zq>l%P}+go>kp>MrDgscUa z%b{vTzxaM^_T5yt7J{xu5DWS}3)aIJ7f<6Xvf)1k??+DIKq`dI)a^DY=6jxlsvU2e zX?py_lq2AiP3|fbe2bZJsz?iQsV)-X7nNLFmmcG4F)K=6^ti-$EmOdp&$yi0yQJI+ z{tosR!ps1lZ7~sUA0OV^V9P9~9VkTVKH@NzNfMU`Njt1Z_a4Z@6QYai>AS?OEbn13 zl30*?)%{%aqj9z}+Eh4(H~(xL*Kdcmr5wD#saZRm{f$$A2q9<`{eEE6ivhTWSV7zj zv;dJnngxAXk1=&7bo7VxVmfgb)yuJgWMv>;fOe313tI|#Pxzl>Wm9-knm$D&=rz-M z(L9hBLL2Cl^~3`c*HnUyJ)|CAG*c~DCxmcWMU+)BLSsb`cPKF$R1QPpeS%sel!{fk zt&YYr^TZUL-UVu^@c107r;{6y)4M(Cs&5VGRiiHXGuJRjKT_08%^!Myl}wIsH8sav zzEe!xLH<Ih_mc=Hgv6$w)UbYZc_h4^c!K_9_ZsIK(e?~^JMYMl;Zzg_VZ~4Q<2ng0 zx${Fp$caQAn^TYDNB9tyaD^cF>Y!qpJYvAqp^Pg4=6!0MF;|q-S-^v5^Fq%2mTABc zHRl0Gu~6n!5>A_5d+~w*w;*Xv6#6aB_1Zq8Z=7s=Q9Ca98gttM751%Dfw<Q9XeLi@ z?_N=BV&i()KG+Xk!sP04%=Vl}XCJGCr-hb$PS2EN>!1g9Pn8G{Q?detd-r*i5HB9Z z4<XGHipZQiJCP{3sME5=sk*1<i>hB)_yICF>^BwZb0D-rLcJDe9nXd_*>#*7dJj+8 zvHBH}NZvb^1bk!W@U<^|e+ps3zYAd-kg5QG7s4<s%o<oY1hzY3D$_#Fl3fy>!k$3; z_lKYb)(Vz{^!5xmno=w)uB*|igu9aH&;ntvs;;1S^~b;kT&WIyAml(3jW{t%4-1Nl zF7d2tH5p-*@cgA&KBHd>&iH;(kluHgW%jIueLaZe>YXwq!z<deij>FGz-x6*(-sFx z&J1yIY~oXsgd~@kH6a#Gw4Zow$$q8g<^um(b!m!XrrINv#j&X3wu6cW+v|rmb6-Hi zz$p3&!5$mR`#lgA9J(GA*8^YBGTH)bEshI?2LV7Q8C7N%^$`erfaeKfhAF0fUR2UG zORMTToCm(9v6GP~we$D~{QU#|{sDjgfWLph-#_5*AMp1N`1=R^{R95~0e}C1zkk5r zKj7~l@Mq;uu8F`lz<Bo$`1=R^{R95~0e}C1zmI6xKj7~l@b~{6_`7j`Hh(^e!7X`q zd)^v~BU|@+yILL^IUKR-;Ca5Au<T#Yb7V-lk-n^W-v3OuQa1T+_SPOA5K1k>1N7(c zndzfdl`{K}(e$5piGacDo60v1&vAiSf*1<0wG?mXM1@ww(NC;odu(4|Cp2@9z1CFu zlCZKcS-v^vIgM%8Mj7~IO7=Lb)`C8T^tynd8Gf(pFqVf|=)E@T#^X@0R~C67Eo2qm z4tRC}iJEzo7bMTl#Cs{E#_C<I>ELyHeNNq94}bS-bRAHdweN59>aM>r=7%&%RA%C6 zW<12<8V!tVJ0vYxMnn<!cDyr1e#v2=C)={ob&jMj!L0QB@j%H4JoJ4=P%ZYzN1BON zuN#I<SuA`pQ9P>C#hHV)9UF)MP-DlwdG5*juG}2WV*d0H3VTrzJc0Z3{p**IPx<cI z%yM)0nMfdTJsllFa;@$UK_mfh{Oafpe8)q(?~>4D@m&%Y6Z|C!O`b>pmV~3`e@jBM zqyLK}6foicOA;Cu6(RJ$OF~Dp-;yxv+q)$6VERiE{?gYhd+WvcHFEwYTruk$=e2a= zCi!!1o$yU`B2ne>)NYtB%=!tnT<hf2E<;wj{uf)$(47oz>|$(VSbIy`Si)&SkIwx| z9Ms-I4JIU0=@g<m+xQY7gR5JHb<=~igGh9i^|wy$)nD$`;%|A2H$Wq`AgU>Rjbb{f z!@NDL6;A3KZ=9B4XHl=m*@-rVroYB(?~Wg-og`FHsiB!$q_v*#NRr+6gz1{-`lpPA z$SgfY)qizH-PCf$yL_t-x?JxpER*Z=zBS(^;5>UMAFn?De(up7=eJT6-X=M=*1?&9 zOLFlxG}LFnrb0d$@4vH4?s6$~)v?4_SjvjV5K2^WKf<+gFm20w*S;W9lZ6uGeImTc zE`ns1twJUdPShCu$=wl@sDd~t`twAzWCtzX<1oZTPv4hPet-tjHaHHFw{+d^7A4H5 z)+`KV(ef%%#529`bUAsRfhXimr8=Ll)O{G#fSYv)ZRjM>5@?ChCpyu;tarP*7Vd=X zqdGxyEa_D8CJ>jTpr$DL^O}`AFn0-<_EYwsYgv%2mM^ND`nwf*U#d&zwVNpnr;WDM zFmg0ADQwOaeNJY7%;bisV={w8G^K+sY0<NvEa**!kdBzp#lp*rn6xZN7+l{M;cS$p zKNB;42?11&-4*aLmbR(lrvK3`y4fiuhoDm7EJ-yBxP#r*Ux_~82}LEdwOtfXf;|tO zcZbsukCE^y`kk18cr$SXR&KpRE&J9TmuMs^&vFR;=f6mb$O!I)T*~^E>d)1qXg%!h zTU;nEF$jj;ri22jHPoNCUF2U?CWKAaQ_0F3`nB_XfP)U&BQx#Htwy2&Un=`uXbo+P zeyV$7(Fbl)vs1_i_ClhuIx10Q!N<k91`D24#*eeL!&9as-=5|ban{A@!^SRoyyFuR z*oqlbYLU!|f{vkzLr3*FOR=4(5miy~;81}ov#=?M`6C0^^sGW`G%OYJ0a7KE$AQ;m z|KKj*bm?Al=Q@)Pgt|amWiaJj5Eo=m0+)VfsRm`HgvuHT`fp~os&{G#){HqQ5eW{g zJfx$w3jnZlO{mEsQb~?^nFUqYC5$K$VL$4>p`sSvrzLzY(pzJQl+s7oX858uwm5yx zB4q#Lkc@Uv2*;Cy3s+ABqHzrn&El%=#weS$A~<}Z@hdJxC_GSBB`GXgDWR4<I0P?L zIjnDo{)SW9rx8Uzy*x{A5PK+#R)h&@qZWH-vY4_fq(yRZ55iC88JHXj2+_Awj|c}% zvm8_i1O=8Nu7ryu5OeX>QgE^=fP5g6jF`oz`B0UWeUY@3*`}d48-HsN5u9pr2vK}= zw^J6Nb<jm^Q<>&=xoouH*@>ACB7z?Z11`nBe@5l~CB*4eEiDXJ#xPr*R)=u`pA@kT z#K$Xm_Va?ynwqC>RW7PDYvb21SHUFa3K2MnaO?JFhk*g&@XfVqJ^6)Wj44af4uoh| zTMTSENDxj&XOo!DxWtp+(??YVM7?dZ`sWOz1(=FCdo7qijsUb}zE6Fb_2q(7IGktA zH#=oUP3Wo8IA94Sl+f0>U@7@9A^F5e-JtqSo~c1j>}kkfex$BIJ`aG?7UL0Zuuy#O zFVz}KpEYE<@cqp}R7?oV9l}J)#2*0Ew%V!{<uly76Hq)bDEl47+FMx?qpcKz42Gwf z&vXgQp3wU|h7}7Ow9w`ti7w^EZapQCFRXD&?Sl*%iuzr|)zvMVvT`qumy%9e7vwfQ z1zM9gb!T(#hjO>dC`-sGm~TWP5*CYRNOxrO@(57`d|EUlGuid1M<7Jtmn~$}Vppxq z_u)x?8V^p$SH+3iD<8&g&0;CrC<AoRB6Sg6^yf@f4tJ}F?$Sy5$bYnu_F%sA&k#f% zY@0n^Ayx__l>acs9qL0Li_`Ki4?QEGXoM<568$nCi;(yWEBKe;EH_q<dPyH`&?Af1 zV^ZaEgj=O$kMT_AhEF6X2DU+nH3O?#X(l`+7S$H14N}qqzF|O9&YgmqZq<-72x6m1 z14i)nUc=^#>eZKyMfQZM=mhH)I_*xq&#LiN25%!D4WuOi4UwRIfrw;;u4d#1PfJ7H z-HnG#fv)LlhZVm55q$}@yWM&&Ol~iQ%237-d$g&PsGXUOx$jwaMu#c>fU^d6WklPy z_F=V6w54sV`%Sl4fRS5E4^8za&~<|X`WZDjtaAme?Rr5abE$tc#_rXl{0GK>VexzL zQzMpa7d;d|yXJz#Y5`Pe_s;snXcJvu8*n><@<A}-xfC`}D@%u0BCm&orJI70en5jH zDPmGA#eyVrf%F%}y_b)KU8Cd|wOZ-FUWGEgC3clY9I@VpG6Y-)mT*pi@~?c+)KDiM zQh|#lBe;RvYF<$B|B@;mIaz`d+N<8CnGnq^M@)h@y;ritU!bLd8y>&dEN%ClGq#0n zwyj7EU->gJRYatsSwYM|UKex7?uCo^VU|zNf7pt&;gS)9#36h~vUEko)F<zspR*>p z&M2|WI>pj)W-t(cfc1Q^3N`G&2Ot;_3;3-3`^k4wv16TC(Zh}rNLs@UetJ=)S3ZyU zMP1;k;^#J6@r>#;8_!MrygX{LTW4^IAf;^9ouMY`g5MZX)}iq?UAS5PjxS>`3`o&Q zKtUr)wG)??BNAEx1Kl@~70-b?k^w42kYWnw(Y&Y{r-aBf)j<}<FD~Nk{2L;`3TIzI zf2WClc=uQ^E=Y=D)f=Qq2yCAz?s7qY@eaLP6z}xerK-a+sa4E~qXP_Z)YREev4jb) zN-X9PgcDR&*L$_*1x>0#gc49Hn@||!u~ceP4&@q({dA!xAhEIl<c`Vt^K&eY6|I>= zD>{z6Ywf8!Iqig5XL<jBD2eRH>4PwGxi=V4a9ELmp(b3|M1t?i$|Sc<vvA(0nucEm zXVvy~p>$`X&Aa<=eGGk@A=^`Qg<s4Bo-BXpk%{t45r{g`SDxFBgjzQX_PSXc!^@YJ z;#W67*KEhr4YGoG_RS=9BjZm&@1Q^&C81)@8e8r77aXDzXdm4*tL@p26!{uVANE9u zh#aH*FUIaENRzNp({<U#SGH~2wr$(hW!tuGciFaWyQ|CWp6Y+ap0)R05fgKg$L~Q# z9%SbIT>n)@JnSvf_+{*t{slw93k0f_j^51Zkg1d?!yX`gbiy9?727IQx;Y!&bZTCI z0rwZ_U?uq$iRdpaZ}yEMef4F8Kg<{ExNnXUXWZQr6gqc~76#5z7XCvKRTE2*ZT)YG zNCf<?!#BCxwa-Xoii}^%4B{|G4_%g(5t`9T?2BI85_KbnrTcY=7lEQ5Zy1lL^Hb$# z>9g-KO74%^(;OF^knyBPTDdAhyw_7>p{P4O+@DwHu(<rHMP2_-|4^vPdiAQ8`w>9* z3w~vjTq2DTFP+X!wSnR!AT5UEU8>YxzkKDD5}HmHbJK2@;D&1WU;W?%T~;VOKwhZ# zRar+!xar{wlU-%3BjJaPu7y|&Pr6^2UH~ZGxi|$!Zxp6>fo}Hv@|?+3XBYHY`+fpo z{`i1Y$O^4LXOY)nUdrA|EIKR9!dRAzgPrPhFXtaTw!wAh40@+CtYJ=86;|eAl<uKh zO1(-7wTgUoZDAovbqiN>p{dHg{trQP81f&2==XkwvDrn~?OGLGEk<}NlN8|GJS&h~ zn(lGh<ZSJb_?ra&`5%FZHbB9MYR=J|!b-Bxews<=%*&rUwe9~VbEy6Sup-h#|LjE& z|F6KI(!Yr}xTjzuvp!82!Et>@j*RSwNV?IDO*P8k+N$0Oj$7arw@<i|^*iZ}=vLC@ z<2a|&v{<Od-a6n{V9EOu^kDeZL7K<0T7tjFhx8H)-45@!IkXH!&8}YL^WWxB>C*b# zl8?O|c-H)enn)3>Z3s2|TB{%PZfmydM3gA%IPcbI*o&bCz5SH19@d6y(%`#aBt7@} zC87<VUu(q<(_po%RGiiJ^U8~x(ReU-WCd3QO+7t8-U2ywBrX&KxiK$dTjST8TUF@0 zhAq|@b&p%GR#Tw($w;+!C1CK1(m)8t#>Zp8DW91a{7@mr+rnjK58aEXxaDS`j8HjL zD(bC>V8+W6;;Ck7K}oD6m-aW}$Mn`{j=5iB?hxyDm)wZv9z{9iR%??muy)~GNOpSh zEetKLnjMynlEq3wg$z#dLo^@Sl<5Q9bDU$c!xC>Xn@V|MLx5%%k+4UDTq-mC^lILq zLmb3?e3vhZ@fm3zit>I|he@lkGil3cN4!7RDbd+k9r8>qRK}5+l{%qrFd~y*QLK5a zeA7bd%NJ<!|97-dx_X=R4Hkg-|40jAZ~UW$g!H=KOZz7@(bVqWTzpXlWas2_MF+)c zH92X&X(9TCw?nOaY)jErjr@OILRv|kn%Bfay-%r6-52OWJ#M17ak`(tZ<1Fb@3ZT3 zreSpS3Km-O5f?)O`HoZNyr-H3$Qm9y(K*pGd1DDcrPzYTiu-A>5j6b{t)s_R+E^ig zt<?zaA1u_q^&y%-zKxeq^}RP?7TVcJ7>cP-h(4t_)nX{r3?8)7+Y)?1d3n98_8lT5 zO;X43L4C=EK4dO$R*G2tPf-YuFK*{yNyx@MYQu^Pvp%o1u)o&pJ3$a53u<stS8u64 zpeVLo9qBe>3=X6XQgFtaG&RvOvcD7m|MdsUlR1r=ETJ6gpY5)F-P|XrYPI&XyqS@~ zAu>2oT*O7cKH34?%BQ!XP)18y#XIj651y)Du~oH|xmWwLL-I52;wz5d(Sc5vrx92N zcCiVA`x{T|A6DlNP?3|dUBO!58O*{mJrxEXpWzi8+yZVMYXZNkj>p`~8e`;7ZZPAE zhH6B@Cp71UjLttZ<E2Wr!W7US#)V(^>%|uxJC_;bVrb|R8~fQr^68ZJ^iCq&ucHEO zxr164z*JY)^I~RZ2w*$hbN7TSINJ3{TR`E|!wckwwJAU~98kri1-`t$uA@)sYJ3sn zjDR+XmZY;xJdeU}RhN5q!v29mYovl6l)mIU4D*)DBJ(1nO6#R9M*sx00_mhTAwgj6 zVp^Y}3X)KM+S$ZSXs;v8PBVne;$lqizm5mYbwANsndL<yJPeTrgY3|-hJ(zH9lRwp zm@?5gsnI@8iECDeusrtnIG9Yp{pFs&#_?{|v@K+;W=I1@=_DM+d1z<Md{I3wN%X=V z&f6xS9$Wn!ft_>h!AVhb%mQ0wq~KD+V(bkA(@|WjCK_kRddStg%8rs{ldc7?P8WzP zem%^3>XXE_{kJBR>^_QH`Bvj}_kZGqlKryZMfM7$Hk!7YLKMU+seun^4M;8}a@LH= zM&*TXfq|Z7Cy=EUp-8}t`gEY!EThGt@#IJw>f_i~Gt`%9I(sMS{y&yb3f8wJWb})T zKKmE(Syc<CtJsC^*To9@E*K~wTIU}@UgD`TC&$==vT=P?rs*JnGz@StLt}Qz8dUWz zZXH{Z=Z!g+WL6AKv6HTf6XT(r;T2+VerYu)PJYv3^!xXFhv0H;9@|cwT{}?Jv8&*s z;$Sh_ms|}XdBLlspMT|6YWKFhU%Tu`y}v1;38rsKNSos0|3wL10sfm3+Fe6kS#O*U zCI@o17lh=5@%1_sgtcNfWFAzJgrN$}t^WzH1q$-JC9p{R>bVlwT>!HqXm!(II1KA~ z1CU=LCz{mC#>49dfzQfYMMz6yk2fX+={yNJ&G_t1@jog9<QE{b6?JN6ift{dtE{HJ zU0+h(>sh6W&4(<41#RpT<klSZo`zHRTsxzkm6LI4mjBHN>5gqTuo=wQ{S3}SNA`C_ zP9MJ%W!k<F!-s#6T}Q(kK6{v!BzZRN<unV9+EfD5-JCS0(D<K*P)OcDSSp6jMK4Zp zoA~C9cZ^;Db>qbQWW`-y@@b>pZM^!t{4Hbn4~_X1jze=?U0V%2Ii@2(m+1~;Kyr^i zE^@``LkkhO%4Kd4cx)lP>oFs<4!jSpR4^3(i@7JwrnL@z4%VKL#%E>bW%u69d({pC zFf-~>swhZ)F)m{G6RoC5PS5c9@sT|UO8y40&5Y~@QkLVk6N5>_#6%%oO)^96)OC0_ z&><SmMCS|B*&T^hRi37V68`epz13Li{x~2@`gc@LWvR%Rap(6^oh8LoX!Mk%J^)qQ zO!GfU!O3cWO59+pF<*m|BvK@j-RA<7?P4fT4t{@LY|v&>*p5-05)`;$-XMid?y1Lj zP|&oz0ol{CpYfQB2HBJ+v5Icx)O28jq(0Ll5_8OdFj)(3I+~G{Fb>GR%I*CX%O?jc zR#=OxrS=>CgPVhH@5hq%{Yl+Jw_j6b-hMt@BP)>ovN71$V6LN+nN6t_A@!Bs{D{S4 z@Eqr~;E=Zuw>g*012~_&a|lST;;@3x(y#$}91MkhQyln67;=wwzw_*mYd}mHvUq*B zLFK%9lQ5WzG`xXAw<<C-7-@~(r&dVa_+f&M!t^c3m60ZdovJd&@VpiA4$;1Mw)+UV z#%sf-e;9^oI2QRcs@p#21cA{LBAyRiqs5<@HN+vF{5nCL2EV>FbRUS1g#XbJ&_vcU zLEYwM62)O1^jMM_@##|MGQ4EA<z=O*Si)-bc>^13+}H-Q)g#-iheV*ME9vasWzsI< z*gur>^@DR9C5F#xbU-VR8R6maBFptB=7@{-`2B&%A9R=7WO$*_15U=?M)-K3Un+Bw zvM-L?lPH9<OX*qBigRTwu}N1Z)(XgX<DV@1<Fj<x^oI1HfVpYa{?_ps?O;Pw8|W5j zV!eEeb~F%taV;Fb6f2U4nGQ4-NWWyP_%*KGf|22hN!lRgxv|I}(E|8{o~BALj#fy# z4aSw?w|cfb1z}Z>y6FA0ciP+55qYis;_WBq57S<i7${|)lu4vE2q@qgbtc6T&gE7s zr)#~Q9k<474N>y@+PU(*+1Uxp6uiw<g=r}L>Rr=knDa{OOKV9r0clE1HnP2bK>ja# zs0S9c4&!<jR&RO=JS5hcPEE4*k2by~sN|hjls8#g<F?|{5>i&(^|-GcPZAg?4m=tu ze(S1rFv@GTA03<dA><ft+wwIqvu>FJp+sk6)C~xVyi!_okOML(5*8)p8!l}IKB${p z0Fp};ZY1D-bpaQ;JnZ+=6^b7DO$KpJt4+U`(8N<qP&ndzozCIr$La}@u?=Qt+kaYw zOq9TB)4qF%ESEF{v!14zDqvTyHrR{B9jh==x*n6QBw{s>NOxRDy&S89T_ZIOteAEx zkB=xAr-R>RXUKer5mR2<7pZX)oBN>nf7FD<<fWMkfZh1(TM(R(L;%=5y=$c}$O#Xz z%Xz)9lVafRR=gs7Hs>NF7vN9i=b51{4X2$g@_nH}#u<t-$f8x^Y1<RWa4gLbT38G8 zgt+RBS-X(4@?!n&N<)wKaug2n+8O);6c#$qbP_lp+Kve<)}w1#Y2+hhAe~I)Rg&$< z3_whhSo`6iA)dc(CNDN^cb4lAf4@z=jaQz>A=c;oxpaXadMF7alvBATVs`<Mb!Ih; z%VRf!4QSM*Mg0pAz{kgukb+*-4?#^7A(G4&wJ?{)s`QP5Sma&%h;eIpp}M>f7!S#+ z!68)WPPaO(d`zJKoCorVE|$LFMx56FD-nKmd!`sf!dK)+y1MrY43eR%qitAnil&iS z{`IR6fSv;joMh*Z6Q;eoLz0wdcZ}a2>K{4`#ZaA_@q<rf0*eSZ$^hoI^%bvv9U{ch z&bVz->yJwwyC$h?t0!HvlZh7(&K`V2q6=qbr>6hB3hrN~G>KlUM?USMXQ4tEh;I;c zu=3m?DMCiWtvl{72?(T2p#IIE8mG02Bpj6#6w5`737N8bmaN*%!z7IL+t+LnfD8J= zNQWy62x;V{?Ob22+Z1yv;TjFmO`{!%;?TjvIe)>iv7dwh%uBle&c#>Jr`bd;gzyRi zjY8V-Fp`XrvcGT<m2zsHFMDpVf81;x94gpqgiS?Lb8iI>?dn#!0DUAbnNp~rC>q|8 zq9w)kmr%I>wo8(y(ulv6qBjEN>We+6=JB+&Q{j^vL$Vw*Cxiq*UDyI3vofm`0A`Gw z!(toQqhQI=_D>x`{|;^dA$jleP{~gjgt#6JD;Z1VmdXclsBN*Vi=w&~K~(4w0M%@p zZ^;wuA+*G~gFn)0#$luZWefhr>9OD+IrLiXJ}v_jP~3Av-C*pAmi(*bwaN>ejAWo| zOj$RMCMrAbjA9|pcigJV>cg_vPT(@wS}KS>LoiWW%w6j`cd86F5HU_Ph9LOEe&k~d z=E6n<cQbuozz!bVtx=k=gR)A`oBe?Vi7E;ozFfv`QBnqq$4{kp1=`SJM{aB#&dV|` zgj?dwyjx;6`BMEBUnLRe>_}}41HM90eBgN*Afei#v#sq-{#qQ4D}&Lj0R<6eT7d<) z3yqbSEO9Mg?ju6A^w7o!HuMmKMKI#vEP<AH!;$6AU@r{YxEtJG$mJ=%qrz6RHy~Qd zcGJ=AD&q?)6(|hoZP$@7RLd?bo=d8A<9FXE5rI<<!YGVP1J=~$`Kg0b?JnWk9BGfz z!&T?V%+TGehN9+u@nY<Imw%F;gXEHHM`I+S_}f}m*$EivRp>0JB`H|4h<tqxjXU%` zM713@TBr&`!uS=>*tLzyyn)$gY=D5IQ8aW$M^P;AFME}HpdmjygcxEa<y=_JfN<2? z^Zr8)b>b7S1T1rvSR;K?Ugk#ffHshwO2<i&zF738+Sr6VKD2&^xDp0&0*vNFnxo)< zkfEw!Zn@H{$mU|)dSMWR-_xLRDeU4A{XaX!5!vZ7J=iGs4q*IEZMFAwJ3sk3eW-SK z+;g5bB<jFOoQdihKqv^f#eCndCvcG!jkFv+a+1s3j!p82I+eG<veuPFxG5=Icz>+R z()?qF=swKX2Pr#sG|OL@F<KKIRB@38BA{@e6<WqpS3pwg0kJIJe#$oa)H@%Z7!1H4 z=7US<v40srSvRZL-n>8SMJI+$wd6Qhn1@Z%Guc7MLR;Q#h0m#MO>7eFP*NTnva@q# zxQ`a|7K=N=5T=D8uZ>MNiKkiRpN<Cyx|oYnAGt*2qdY_4qbOzH6d{gT&zeZ%(>O7s z?>=ViNCEjH_GKIh0+D5~fK$;~BUc+&>H(hBFRO0pb6F=pj0j1!ZMZMj^C2RM!9=@2 zAiU+h__$fa-dgT|$WU?*oeXhJGk9DxL@XY#ypPZ@eFrdnC>dPVp?sR^6(&<rLstmh z;M~?d;jbON3pU0W#Jg?kBBj?qR&9bkwjD>ggQRt<jea@~Q`jD)lb)YNBPTDS80$05 zY;tda*&1pb4i4MXhleQ^DxByh9O^D}#Znsbxs~v=6Rq>27gOkHAgcoj^9$z&Li|oL z;+YrR{<bu?oxX>wxEn@mDma^Bdq`~E>j1V6(0uEE#!y+EM%PYLl9$#%;+(Ba0qSU} z0JvXC?*6fn`%cop3i2s~q4zn{3KK0Rd&`3a5f@p<)Y!})4$DBxnYBrfR{CEiqi#ZT z3G1lvgwh;9H&gW|29W2qJBG8Q>v}cTE|l-^rJK*B%FwbKkdqO6Ed0C?68cDRG7xiv zSW8JHta+u5h-(jo#T}x}O=fN)o=ic(5FipoFwjw9jZ%{f76Di-$?T%|7)VHmM@1A; zxXht-ImMkwsZhngkq>g`Py^Ni?cH;T=3l&&h^3NL^qKX*H#S7)PLCtz<#nu`#!iQ6 zYxc3##Mvh^%R+xm=geWX2YDe0WVMmgVF{bMLBkN#1QvD=ek!qJ%3pmrq879Xai)M= zM)k(9MpJKiIrAP->O3BLbFFid_1dLYOQo_r2-a=Jh@p9&Mcl%E*gvDi3G*>)KfeB9 zTzQpN<CbYHF@1p1c-$NtQPi%~-yUh=N<n$tw*}u?3<`m8iY(5-E-cBTLfwJF=IbD( zN<|K&x1{KAljD3fG@i0Rnv$wg_Tce2c@CS+v8Wf7+Vpsnx+-G^PjDyn9CcgGqd#j< z<aE;5S~@vHDB8n=U`T<I0cZU21w^>IKRCt^Ns6t67S~SzIiUx&c>}^SJOLTT^k}FU z`eG#Ho}{=|G_}ksLDs20f(+C8%P1koGS^&_5A)ZP%VP2_OPlWc@1;3I>^XWW{eG>< zs@Rk%GD2kUT2Obx0LQBaMjYsU=P*|^ZG{RsK^~#q1b%O#qI07yt&^gdAuu4u8;2{A z#zR4yn}qTdCTo*RYy|?Xy@5IW41YmGAmWG71}$WF0+U1q%Ixe}D3F2Qdzd&OF>idY z#f0x(Bz{Ouwlnkx4C_3N4UC%dh$O0H5{#Pmf<|=UDmCrugLoic>);n1a)k^-K;&E& zb9wMhuyee0D3gM2$1Dh6TocQSkq1##L-@&oUY{h9><8-_B-RbE#j~R&+FtN-O@v2b zi(lG7DTdaj(>?<_$&pr8Iu{mv@R)L0dwc}XU_v;55lS!lK>unwb}{x{(Qw%AMN!T~ zb6q)fZxtXWu#xsnoG5{wYQ{)+sf4gg&Ks>2ywRLMv@OquXqJT|eD#U44E$bo{ViDv zVu5uv2vSr~`GNpnoH41Hc^*XU(3yeAJt~M2g70-^Ha3A3sd1|y*ppOD+iehri=x2Y z1)4#3sGX18z0p!~>}z*N5~Udb$%>tOsRSyXvTg6;ylD{_M@|+7?7V+t4ZIvj{WlM@ zSo`?M5m9wa>XvJ$gYY~u6{<0|;fvOV@(er_UJBa;m_)g7j#8f$O+U5w0j-OO><#ap zN3xD6x4XOLoWqp-)bd?kzV`d$4RND)Gu_6N<b0B~grAyxBsh@ljJctFnbpj@eq<gP z{FQ+E;!5k|d=p0deV|YL`=@3d?4;q^rJ8pfV4<8h`(dGf0b{ALq(jOs%X15TRb(>- zMacykYtrySD|prRtK&X}c>P&~b3k+gQoNRtK-OD7@u|rkerM6vyYN(>17$a#(+WsL z!kAh)hX57{s7cF`9FQ*;GfjFFsu6(9SJzBxCGCbZywXpBY^s*IB(dDmy1>u%+F8={ zJk2u=-aVxp90+N2cYl*M86|juwtqoxgIK8DZMt^CJw7nroQI2BD{|yxHd+7n%5y{Z za;RYTVj*gXLtL!JE$v^bzKf~$v6vK=0{fc&C@OZ`lSmP3;yQVmhWwYiTk|kY3c+~P zRg+$>&`fWM8VR0@s_>AYxUe(kye`Mtmcc$~SMmwXvqc5`;`)H7L>HmXeW1}BAB#Q7 zYLSs=LU65oskv%0zVskIX)0U9wQ~a_#FdnUWZGX(y!)g8rN)?*rmxe7T{3~&5Ads0 z5EQFm*PF>;h+-W*(c_&Vffh_;Q_mOy9S8B1VI&cj-4Np`i@ID|kpjpMuejU57BX8< z#ahR~vrQN4D(;AMRwYk*h13bY6Z$$IR9jLeF}jOs1cQVWs$H=uQ?!(z3|2kz9p+kP z3x=TG%bRgEfF3~;2E96TBcy}p9FHvOSQ=`z<dkrObaGgdi0x>UXlFEL3~aCbJ>%fz zy!KJ@-Y?o738(pD$~1Z+j#G7e1`@cw1kXBFf@hm0y!3>;I0d{mvvDtNCe~ho%3K_j zjTX>5m3`<~ZaA=csI;vzOgVgQcBpM3ybXGC+c3O{*X(`#A-6>l%aWc&y?|rn=aHmv z=x4V>_q*#XgA6OTF>Vc_vUiJ_T%Oz>T6ScRW%Gt<K!fJ^#Gt|=ff{EZKK}eEXk85x z(cGaLF@8#_L}Wg?&a72Z0;MW?R7MXB*);+rZe##c=5d8K!YUlG30fwRrOq#@Zo#(@ zKYAO4W$tfM4_%uPMxnDk%yd_6$jZ(SceVpqDaD`O@GQ+ZLq?m+Ou(<E0c(^l6_lI< zIm!mws;(i4+O%9N<N?=Ui1w@FF^K(B!>IHl7ITpO<(x}R$p^Z!1!f18-ePX;%5tnk zEo6Tef~44*$BYe01g`L{1}SMzTMj(|5?Dv#!1v7+r&(<zJFcN#h<P<^HSCrk^L^Y; z?|lM{p;^+}k&o8ZL~=7REJ@f~svaLJbqRw$A<1@3qHVm)gW+UYb^GFjr49A>uxn8} zC4ac_Y0(<Rf~uGMC_pgMaP*qOt`cO8Xe42@Kdr&_--TuMRkv7obX&hkp`o8a!<{Z! z5z?ZNDW{(tbtbY1`g-Cu-Q%@ZLJg}`l?I@oDpPclpo8+TD6I1CH$?;9&pSX(T(TZv z)OsQfKd%_5R-d}|+Y^Iwnhb0G%@QH6#cS8octe$H>1@O0)h!kpA<L7UI%z7?eTGA| zCnA>lpyidlq8@JFlVOnL4^cgd(+I&DtR@{~vZ{k&-3VtJEpa#v7*$S9(hYxkM5Je@ z>wrvm3JY2LR~1SHU~*Xhl+O_n?#TPS@xDZuopyj0($P)hn>dZ{fJSR#U}Q5`#sYhq zrgI`)g>)ldn9)S)ds6?qSJ)GY9PN*&`CbF0k`AN8W&krPwsyhVmg<%?79yrd4ZRfW ztziq;Nhkv?p^ROr8(if+j(e#Xh15>?&3S~$WFx|rINDLgNk8;<_({N5vO>*^U_mvd zw5{lp3}z!8buBsM{6AC3^sA!K6JE;K0#d+Kg^b^hjwCMC^?LWJpE4LkuWoj1RRt^& z4*(*U!ek=CZBMP5iXbr?`_^5o5+=7UWh0`v!di$9CdRM-Z3;aTaD$r9I@mzlONpF+ zEjeX{cmEYHi3%rhvZ)^8`fx1}-aX(j)GHh=BrfrT&yJf>U_fLYn&3-%0G;v9Gms~W zR!nvJ+*_R|$<qZJ>l<v*Ur+Us*{0B|-^9A@t%&Dl(R{~o|7QyIu&w*vQ;MZZue$v+ zg-EmV5_la~MRtHcg~h_~QP|2Ivtr81aR#I{T(eBDKF$J9qvpAM<~E2MO?_Fi;+lTb z^5mQT3SYXo`@9!<wq_1BFvVD!xVpHr%hQv;+bj0hjhkg?j$U}YdA)ab&Fc9Kn1N%U zpB<$bO1CJ!wtdBy*7|c~>gtr)<Ilo9M?OFD@!K|KhCckR^!JZvKki=K{Jv3f1#%36 zvZFNz`o>C*<mROXwCH&JaHak9=IDb*XWpy<&)rxB2|wGU2M$;l!-IQ2pEq-7x5}jf zcZz!9WP&Dx(X;X&?ARvF-=~q4Xx741KDYX0pEg4C<Kh?K>f(kko@!1nOnsOzb7x0* zfG6n6nOA}SdN?b^z|=oKy0P@SC;xPLb@pLLpn+ynHHc-H6X9sD63P0Ol{XxvlOC+S zm@;D_u;?5uDQ(AGc|XWtRSwPmeyk|sz}gUO{@~#iz!LJeCu`_vNM!uF9y*5Et!+TC zC|__MK#6NwTBu%_IC<Tn3|9!NGuLpC=*DTDnrF1T+R$?6=Y}>RkQXp*UU=Mj1zR)Y z?!=5MZ?L9FzChE?${7p)^#Od6YZ-AZn}lwB;EHf&|A-*Jvhs#iv*`NxQr!UI*w*x_ zE95`4wuEdS!Xvi6`r(90d)<Iv9uub=X8_yRQ2a=QJ1zC>?#%56zBMXwW9t0J{?Vum zhn5ELJb>_dcLD~uF~gk4977iep@H)D=Jw(7`JM+s1^Y@mC&-O28*1jw){BuJy-UB# zbW9o&;wm=d%@6%C^c+s$D6+wr18ND5z;eUJ?v7rEg1hd*WoiU>$0Be(#vb-eG&@V) zoN0T1ap#<Ia6XjJAaNIaan4JNySscaF|oqBt^Eq-Lla}|j(+?5HOC$5G;YwCm#_3; zS_6IVz53ww+Byqg6?1@;mWnkxeB}ng*VtY31r9-+-4DH!_s7syrkL=7$TPX^+?3Mm z`rYFWW<B!@It0(@(?O;&O?TUGt1lx#viSn`^t^Q~8iu+nJv~ukb=3QP*y?i-%{KYr zV^Jh88e}=`?J9^{tjSE0O@DdoeGbELt=tsQ{#`T56G?<?zB|uEk5E<@``UI32dKOE z84b455fT0!ikjZxz;QODx-}X?>H%uV60X2PW#1Zgdwe|oD$z#Pf0&Tv52@dSm<Ayu zdpej3=j^siep?b5yT1)M=RE28RaQ6uc#E7cg}3{JWOk?cBqQDt=0n2gLN2?4;dWFI zVN1VEHdh<wc|W%Q;tUvl=o)CTFEax+RVNeshY96?TFk^r-U0D>M=PO?IJjuG7L_s1 zSEMAA>=?m&I@+qB)40JT4~1fq(BV?ehPAlUfv~uYS5U6|+H7{3dR0-80_`x3VrLms zsf1!#!g}0?77!@E1B~x<<q=XdZHiECO#5z0bH0c8x%HhofNbHj58j_F-J#ejH^YO* zBV=Oh$A1HbmT<6bjvOx{54N7@TP+#I$taE|7r%|EHAJtHv601;*awpGLvqD$uROI; zrz6?Wq&&n069)_IUe{RB#pLnva}CA?7^CwG?-(by9@AfGJbjEy^)lJ2xZ3-n{WS2= zuFBQiq~{mwh}&7XhO7-Qio9mByC%}1z<8)X*=Kr9D3#-nQ+bTv1RU%ih&6WD;LYnq z@JnG6y^D;4z?2VI9t_-L^q}SOEXesQ`+@9B4L%Q#*`X{cOR79E)B5DQXJ(pn(abc3 zspH@KNtQ(8qEh)2h17kHEck?DzHROWwxKmzY+@%z;@u(<`bhKs{Mog0I(BsQ@$oS* z<0Vk>lVc3z2Y1-F=E(`xKt~GcRYgOXMC=q7n8+noR2YWv>hSXkI|Ht8T&oe-QX|7{ zji>K7K)}MZrrU)UqmTyu7)G=5M*ee-5RH%~pe))4wtuEqgx`c1^~L91@LLknagWI8 z*ZJac@VU}enE~I9KA74#zP@yJeICFG8O|D&Al||o4E&o90eH$gULmySK*xW+JAhTK zD-gMtlV}pvAzCPeL%+Oyn|R?nvy8^c+Ty&!+{I_#cOH#!FMFyiPCObve17%e7)(0R zq&&BJPPyUByQ9sfRYFx+7bo5`V_iSQyCq7%jjR{4ywo>{tsMo{$QxX^S&$n3r8-YE z^rNdzz>QFRCsvG-JD|=<&<u&?2{?cs_qAbBPI<Cp8=q(qr5llUszRN9)HJYQ4q10n zi8XW``L+WmBrvVybc04LW%vb9C#_na^QiR->@B3ashd+cTu}L!y;A7*1Tv(^>kX>> zGLtD7F1ih4&2ol|>)>G5i5!JGihg2>j|x11^Cz3=u?&5$mt*GS@L7E2BO#+>=DC{? zB|$7y5sB!CQI9jB%h(@l4YvdyWDoM4b?<@mZI*3wrL)ZbK0~Kjpxh4M@f%pdZj?n7 zZ6lF=x1ki_aiRVkRlyRz7Om_pYE8<g(`QE?e{W9|^}iFB=FQmKx3}u;{{BdMUltqd zeP2XxLd61&M;&|W4EP;?I6pa{Fzz)4o+y26pTG$|vJnPFe?OGZ_0GwQFS+oR)mxY_ zB=;tTJ*~7<*MCDo<h7SJmZ}Cq+3zoGm3!r4zIgDLG}a1UR*#xXm4Dtm`|6H=-K`l0 zb$c#@Em`fxoK{;erC?Nl$+h~a8MkH)B>nA%ZnAxlbpJC_Y!O_3;O|J6_vh}jelCyy z?*a0ds>j`xnP-}GkCXr^*MY+|Y#<E-{uhSpBdddlCz=;n^3P2?eO|Bkb4_m(b2CRy z)|EbCRDWj=Z9i{8o9mI{2KV43ah3qatIj{H>%0X03<SVFP6YfcLrenS!*d(^75R6L zwMPv0K1#|vj}1wyW3RTZ%u}95%-Wg$^*2HZ9-Dsg>klGtH@Sg_WfH;fz|-+t(I#7P zeFFQ`$vZ#Nt`U^@2nFWJDJ6SyH9jPGJL_Hij)ab&o+xkw(~10FatWHr`TnLceIQ=b z@ZET>7w5kI)IqeC<5~xi1I4{?Sexs`4ru$KS9kVv&ySz%M|_q8Z?PjxuM?sW!}`jW z19$v~ImfH(&%x9Wg~tcGITy`lx8KOdjZe=4E(mwSM86Q#@n1)iL5B+TeXmR)6GI*R z&f67<dR_ij=0O<R+h5N3H;g%W@BW3h4;rZZZ24GKvF?4-Io^ZHL6Pcn*f{aGKIm<A zd@}x}^ZZb$<@3N%^nE!I&Ya0i+NXUh^QG&(fQFs%|2Tp1^)X>%eRR~QDOA6G>IG3; z=J;kVKh#`D2!)1fp-(S<-ZJPe{#A6i4^(SJY-;(uBo4Ht{({@+Hct`2>HpjPmGaa7 zanHa86EVyEFKwHjZl&JZ0oSX8MNeoT_>8@V{Z~Bm__I?H#tsH3y)7Xg2SfiV-#r~( zx!jizZ8Q6kvaQtDMBVP31JiR1e$ta)t8<!lQ@#KVi(vRu&D(3F0IM5Ht6pKP!t04( zA9`SJQ*?E@#ZfZtr@t#d&Qmc9^FV;b-pR&8pZQ;lK6<9u@s9H&MU2mT;Jy=2J_66P zwI;2@2s#jUluwZr%(sxVKcHi^E(2k6`r&E6IDbTIBN2FHL!sv+M-&jc!^}XHYbWFf zSKawzBpA^y%Nqbn38^>f66X79)lZlwi^yX_Xw#WVP5ac5&_GRrP3_wTiIFvM59zr# z4TXW}igXLElC7hlM@=9X7J{0!+c@XNVjbg8)wNCbBTJx!`;SioAF{J@$*cX%(FqO7 zGpjj1KvY&HTQs!eS}aT_W1^TFEuJP&NodxKH1wkoDHlTPqE!P!msM(b@ydSZU5!2x zXd|@xWZGoHG!Mp<tmQK*_cwUOJW9z2rbbb0(!})9a>BubHA3Q6GV-g8BOM~4*;c2( z4?@;4(y@@64S7MoWJD={M$Lb5Lii~B*wwVOqtP_qjMqh7Y~ZB}QFz(PLyu6<0N6zz zXPT%aDelK-b*-c=VS$$5KR6lAl5@FuBoVk9u>F+iC~c8Btz-y8LDgNrXe5I0>!=?( z+iqMlVkGgxJnA;pN2#e++r_DvdJbypZ<i`Sn{UHtC2S|eDFHtSN@73pIm@JQDsNCE z4r6Nc!^kBhm(fYN0)^x^bHkpA6!+Y#|Fr4e$s)JPTw?M!OnD*`@-O{)v{)=HyWSe? zcS70aO+~@3LcT|^Wk(DK%uMXQAQV^~`VgyLO{3M|!a5j0{M%msdf0sNuzeh>Y#9fq zhPvI}sZZrOy~*{SGkcXtSJIt}HBA>*@@rTod#b#V&O_A-{RxdE^K=k`A|QeX5jsRv z!4hk0Fj!(<b=RWLuRJ7jm^zw~kU+=J*J;%ajcd@2Kz^Za+mQ*brW(5NJa;O0pY{>c z351k%7%9YJA+*GbAtDagPeO8w^C-bm+t{*X#7M<FSR=++^PCp1Kg5jYZwN({G64pm zEI!Q{@ztPtDcD_;!&XuX6s$2djWlT&XEC~q=<kC@qInf0_+lYuGOU0wI<HA}%~TkA zFL7a;#3ks0Ky@7%ouPKR;H=ViiC6c8uU1mvDOj@+jFc9|_t;fWh=#(3ekfWw1K<Q{ zRvQhKtS86ggB?^8Q46s+$w&2ww*KNg5iy6_MzCvUZ^n(mQsX$Rqy{-Y$9W3RrN%G- zqY#k#u{|n1U)p_wt~TkZ&V95*Ik4u(PF{yZ_0f<0X=P_-P%}u9WOqfsZPR(S#csu1 z;kepx28@<PSrWlg{Ze}`lI);Qk}RK2V5JaGC*iIn?P#xYznKjkqo8jyg5d_QEjLI_ zx*2-tjbt1S#hp<*f~)GhV$H|GY#r@lRO>R5rY&LPTQ&uWW~3G{qC3#Ps9<E`BBAD) z`w$s$l~+_J_y5D5Rx&co$;U@3>W2SA7gO6*`@S<l9WydM>S7T&^X50QARPoRm?U-2 zXk{(JaKYG_+YuLv1&^t;MMNMrzVw`k0)CTORLvkQFO4V`P4km>6~BNH0*`4fl*f;$ z(2hGpD-`^Kuv?ksq(?tcf4`K{?f_7{Mj6(cE@v&6`d!W_6(LRT^Pl0o@S3GWsiFNQ z&b@?Zg2UOmfa^77h6Ylsx_A<$QX(J<xR^>a{NE$z^0Io`SUfKYs;bXR&?Mw2q>@`_ z@WXSZOuTp@Kh@X4yI_v>-qRWB{I@eH|AIsRU7nW$$&`=@S+9R=^b2CtEFhdYtioy( zl7?}Keew%gtfTrxt+~(FJ`==g?{|}zZyw!J%|qe<6d!U)^J6psA3qAXT<2kIe7(%n zu86MCPmqKhsthi)&wv_{!h!c|361vvx;O|=AKxUc;*3L{)$^S^c&Htf{*0K^`+T`T zJ5=aQ7YzpuMl$Hc`f23TV5+F2wk3~=4A4r`aKfbZgNh9$_LIwU+C_O8LK%ETg_P54 zc~D`5Z=RPbT@t=ZnGB*fv1Ji5G&Q0x?2YjDflsz6Zefh2jR^z+d!ydX(9TcuIwdd2 z&EdAuK5fzK>3XfGZSlH-S#{VX8MZqXEMp5C1iaXjv^gZ2k4S-97xNf%P_;TWvlUrM zKKg6)nMZd;m%2_7-p1W7kd%ZkA|H%qU08Iu|D9sx17d%LS>2wD6CFAdUQGF(NxpZN zx@s<Zs#q66N4qpdJv_NILmpadBO(r=mUUa5yizz`3bg%E?ZuBtLuSl8kQMmH2zIJG z!ijdI&+2xj@Yu%fa8K3GOMb!!rkVvE>LaTX99i2S^rOsx;5;?oh|t*JSx8Kn!EyTS zGsB4nf~Ky9MaEhF{#i6nda@_c=~nAIsT;ocR<F+(fNZtxL>UHaoEurEgyrwLLskFz z-jvlm-t%RU3_otby`mdhM2RUZ8?Y6pk;_EXshiJw)1k%z6M>gU-Dk+F47v^ph$QN- z1YUqBgCQ-`d&3ioAIm0Q00uHWYoW2Sf5i=&N}Qq|$UVwo2-`;?Af?V*?E(RkDuC9i z6V+&FlBW@;p|z_?)Bp_X#tytxSa~rp&@nh~Il8S)^la!2Q#VSG7EG%3u<A^?mfEYd z!j%FBhyjqHB1*6ynfe?@%CoIIe`(3MNQ^OZ=}T#D$R>!j(OBcTSg{3@1pF94c);*V zOg-;E0~A=60G$OT8SrAHzgN@PP~k(kzWW5iMboN|wQP$HFU4c4dmyK+D3M7`g{Mi# zYPsiKA{hb|K|Q>WfH3CaMkv<a4jR$e!Q!ZtG6o;V!Ligl#nK`-^dnR^SQ?#h8SWLG z=}Cqr=b<^Br?9d!l&oTVZ&ft{&lE)QnN8}z#L#Jb7kpsYdvej^kByTE;?mY(zEPxn z5K!$JcB_&Lh6|r68%*y0SR?WadZj?9X;<v30D0ptEcMuYX^gHFfyQ&IuN%hUXRWCk zeR>-WsUCYy^B%IU<`!KJ&Tk_j3og<xgT{`)+0-9~<fIs%p1^09vg_<!?s4%81|3Y} zj<gm-C?~Nx2tbzsmOw`6hhfBiTy@<q^SzbsPI+`rS+=h*H|O4$ChR>NscAow<6;jQ zP3x36Uc-JN$bo?gblo*?e|g@Fx;qlN4X{+(hQ*iE7cNVX{;Zqz6-;|Un223S90`x} zB;KJuPj(Iw2?O|+%c`a=yU(&zV+qaMKmCzJ#$djdQ@GFJ(3`HIF2p-fpoVh1QOO^y ztD9IoFc7U-9VMFsM(hC7Vc*QP*C(<;s$q5#A2|xQk+&&@ANJ@$J8T=@+Ur;%_0h_A z>P*VoRsD<1i}=(%c&|5nd~qrB4wX!iDkBeuvMo~MJkX(2;VhW)-avn=t3^Bx8eDGT zUn^63!a1@X6=B^2nX1=64KdaUED8yXh(Ntsw0`i_xmDl#8n_xep0;n^iI7FPN~;o| zOAsB6`9V6l>H_Oglk9{$r2MD9GMAJn)UG&g!;b2OqL7_jrJXOXLWa9*{U$w@uJ@s` zflLEm#y{e?#p25+p@%k$5Q@QzdQk*;cP=evK!mOjU<ZI*y=Pg6$<p=of^iK9-|(%; z1YMczlqOP2M9Q0ftlN%+)g3*M;WkditJ`ZgAYp>}i8`h$>e(7=_l)mo&vtA0de_-C zis^;^x@SdX;8WJ&L)@Ciav|NSB7ct8J8|w%>;8d<Ln}qb)_3Z1;^a`1QWhebuJ|K~ zMi<tIZo4&pBnmBZH0|vj31>IgETIAcB5i<VDKc~V3rWv)9=R6=xKnf49%raJM$1f0 z*J24{k#IbiGqM3Y_^8<&mI6z(w$X$?IzThM>gbTKk1ho3EAAg>u%=8x!#tlb*ReZU zrR9ltY?CmEvZtrKZDFSX{DFF8JR;ic1*tzysnFI81G==!=uQ2)&|+CsX(0v8hn(2i z?CCdd(d)2mbqbknTb9L(9XHaT(!wlC+6~YA+NMbtx`g8|ia=C}K4Nc;sT?QVpJDF{ zcN$lh>8UmDB+X=R8#aY}mogbjC(5aXA{?ygIDxkEb0sXV|8C}7H=i`L8orsizU|>l zFL*mZE@t&GE4DY!TvUHrO{HGOu?jStLSs@0hkVfV>ljAQI;W5bA(>Pq7xHrl=s0Qk zrcQS|?vqHR^R3?SE9~IS$2sUBpdHNBC2jlaf%~*c&H5UgQGh{J0614cn80Z5^yihA z+FpP4D8MK1x1Wya*(~UL`H3I;G6HS(@~OVKNut_>#oV!+k3eq*XCzoELqMgKl7suO z<?E-FJN7En1bzP3Q~jQedc%BCQL({nYK{xlI)vYer4^_9#TlwV(63TWDFr1AX`?aa zoP<!>z^{fWokRI;eT~n6(jD=uOsPGs>v7>$%J-`E*%l_!fes&_={h}=)p7sETf89! zYmbm6W7HVdLT6ja;5ft-W)e_PARGntkD_YvRIPc_K%kzal$hyaW$sFp_$+i4Eu`mu z80q_o^3t?LsHWB08#52xHEoHH&+<T2*k52l8!D=+d;-wgEJlc^f8gu$&_^k$cQpen zi6~%GsI^r;x^5{<c5JKO^7`Rmni%tsCp{wr$5N@SiFzM}=E&r(*P6Eb#YJ9A6!oc4 zZ2qGWIF&wBAJGiRcsdUtpd2QdxP*x9Au_$O)=Uq99)!}>;ZVhgmFAIj(v|!~;aMBV z?99z#qEhrg67$fRBo_k1q)`(2ZS#j`ReSm583$rAzBf>~QwFopyl>#p=q@6fW4(Zz z&(y{Lx%{#Ayv7!}`wFCybZiAOK^un4Mz+$Q#o0=gr}%b_L0!2ZhBxa^3yl+)fvCFE zG3ICGRf!AQ&*OF?d!HkMt&qwJPGPfL+|GjUlLg`DSaduv(rDKkZvkahtuKrk)`9@n z5CDru3VyWjUG1$nls+jJz=MywXR7PQ_Tvb6mKQm1Y%U`jlXI%OXA)sNyYvASE3pf) zV`&qmE6>qg8-7kSy(Ja`wK5}j8)<?F;seek<$`wS!(=msPxmRqjA@3^#K1U|Zq^5d zyYXTP0k#z5gea^XeK(PHMa&cODUCF!SEYcNP^{ON*cr`HgJR$Ou9+UHwrKRVK_kJV zz#@)wyi@DE-b;4Ct=^Vji5s-7Z!1u`P+c@=u<5jxxrFyjWT7tb9NYAra)>+|*)sa@ zn&^ZuO1^0tU0g^79AsdqyZ6x#cnx-Po}fdkO=X8~cz{YQBl?Zj>8^x>LkM1uksYel z{<g8Nd|TGi62hV+kAM|%f!k^goZvl*)0uV&8@Yw0sS1}+KLtndtKlK5c6eP%vgB$Y zPfJA<g>4W@Xq|p80KKtDy(R<<@_A%I9D4~5aJI9Xg55MRvJJ5YOvu8&TFv*+3C^W1 z(nxbi<&o&3q>bBYe53m{G6TO222QBT?5D%4o2GZPk6l)Frz^^&n*oS|0WM@H^od`C zx>6^o1K@ez)J+ju0Yt^boa6=u8aM)L1fcxt@J1}Ur<(LN6_d`a@~o+>Fw-;QRr5LZ z9irk`0eBt1dO#fUTj>2h3|6R&tgj9fuAW;5!Jx;IIc2bk$p4_;F6Mh1T$3LAK#DeA z-9rc9D^0t1G6`seD90alvdR&TcOc;H55p7>2LhIDgC;QZgjFS(u6?{M=dleV%GuG> z+Ex|Za9@hInV@8ZAnnSwEOdO0_5av5?j;SWcom4>D8Ualm1*mtxeAtd8-*42vxB&8 zaZmhxaHEt>vmf};M4rk~UKCxj$qa5UUTPaCne_Q|OY+>nBT;BMhvOysQ#TV%W6Ekp zrj|TS7B+%jqr>@t+boz3PCfN=vIC`*olPNs<yQfP*sz1HtF)(U4d$~~;=?VAN%COq z>pe@d%rO28M!79vG^TieM;t}Utf?npfTzTPk==KHs?zARPF1Hrs)brT&#rWC2eW}K zs%4%wMXz#$+=iyu=T9zcyq!y5YmB>d_J*%Jmflz5PE2mF+{yw7vwb1$f&_?T(n~xs z$divgYlR{6fN4Vk(K2`(uCRG@AR?U<(!klStAdy{&O@lm(U!SbekUOJ<>RW&dW}S| zZo^e9QSf7YOT>r|eszCBU&!^|DJwwK+g((frM4!NeEZ_{dcZI_Sy)F<cDA+XF`N~M z_qzg4lPOLXi7%=0vc(hop=jVGkE#)*!(M$TLgHMO#)=nxQRcS$uuEcrk)F^^N*=PR zRySpGznZGegz|H6rI&ZnT@k7Ay9HQf{I3>3FfSJ7N^tX<aBN%{IHCMb%0}%CivzrE zdiYd`p_Y>TYd<R7ELVIL-P(!wV2kh@Kx9vR@C{0|ndt#HvZhU>V_!=a-iqay3oA<4 z{83W%3S%`PN8|0ViSOHy-L%cWv7)fA5Tr>B#8GttWH%riF{5sSK^!4Haj4=W&hrX4 z<En}oUVhX`YSlYD7Wp%w5H;vE(gFKpYF+7Ic!s#KV4QJKgASMLjMp6$VhO59W4B&a z>PB84%uU+OK%xD+1t68w?0H>7?leXY-_|y6L#%-`!fH@b+A$O<k936`dSU<IVeYsd zGX6`YpMYzgupVEH+J^dtJn4VFZxX=w;Lz*C+5Ir0HxJR$e`$xu4;q?JO1!x~MLQ2M zVp(wCpzS!B=8Pl*7c_}Z4>SgMr_Y!a5P;S(`Nn^=47=h?U72}dF(-KK<=+FEWYmw% z4oCz6w5~{OCY$|EysVO1FdLomJT81tyS=Uyttk$s2!hUduotafo82qW<Fr-$C=E*R zI7p!0Mt~`*i~1J>{5X6;rX1p*+?5U+B0IX<M9+{kziU1&HoY|A^T1}eGk${>=7Cqs zKJ{O)+i{^&$Jz&?G2t0$cQHxQ8h7t>pGQ4H*{7T@)rPAeh~`^|ZE-~+otL*<*R2O{ z1-wd~Clife=L_#Z%9FmAOcZM|&ugm7o}Sc`*_~tr*dCi=;_P^U<veh#9k~4(47mdD zdJx8Va0WIi*0mW@s_sjJ+yp}D&QsBiG^6EE{bCI%qv3Hj*oq?^=obeCkCdow-5hV{ z{!yQXt&$&Xf}msl41`6$M3F$Uqsi_H3|&q+r8V#~0yqK=EyV``AR8ap$t@Vcr4}a& z`{U~S4`G#|*LSx_`eb)m<k?L&!=8dsH*MwtNXs?4f1toUQX?Cjo(|N8$V!@Qq@a0| z!4J?GE}8Hq{SEUKAa1^`P}hrFR*|B#-9|g9#Hub)9)t|~*%rrN4OP`};@c@*zGA8I zcb-cR5qXfqW_-7g(qklccfg2$sSCk~OEKpIxbrn?C3hR=&!2ked*TCf97>)a^%TvW z_DX-lJ=GK<#+G0peJ-)Uo*B-B3i{f4P`0Qs%^OS#ka;k34Ncbwsf)M3LWQf<l)VHt zs~|V%Ei?A$EKO_`1Ip&+CN|Q1rxr$g0l3F8S-(eoOQoD51MFiWsZs2QVFlroAzlxF zh<3fZoIBZdI9jhneEvA|J5zTa4bhbMz3UF$@m3N^E}?lx%;bng){)m(CyCPv-KAES z76tp%_yFHGl7<lWroQ%LrUaH`x&lTY8>=)j_G3_Y>Y*TM5C`k>Kw~^7tOEyBqu<)> zvG+8C1ibbU5?wF&AdB9rO_m|oco^_cG>kznEr@e-f5kgWg`$hGV<RM*L2vdETq+E* z2o*HN#up<^ar1&DCBtu%yfEH1cpiYSxHKDxn8E=Q?{k_1A?oBWQ2${Z4+E5S*{Z=E z9W#AI(3DY6xNR*KFYK2&@{3Lp#l}X#{(UE8WSd+sdbA07tDBNte|<x4JEw!M_ZDRh z3K~kq%|K&B0#_#c6FSK>g)J<pq};$H0d^Fy`0kSw<v}4%Nzz*{yBTCc$Y4t&feKXg zx(nE;j!K6!!AZ(JEWCxm*cbi0k-ufZrU!T)2Ma1dWBS!0Mmf0Gd`pKr0f(Z{^1O{; zVBnmpULa;zofZ#Tn3x@KT|h>Rwe6DNuvcAKfyO&}FfB#vPAFths;-T|w;^dsw|wV! z@!s+%3{|fT@YZv{Bk#NLkk!&!HzX~+w`NUJ5M%q}gVN{I#+92~Ff}Ri#GDrEAl~`& z_O_4=CY&^*MWJ+1d{4PZ<X22WoVSM6OyzR(C4+brwm4QLk?pf!D%41Hl)qN+8*Z6T zVWlc9eNmQ(r|K|y8+IHCBoJY8Fx$iXti!uY4w*N%>W<06B$(dhtM#fh6q!-Fy=g~I z+Nnz}JpEAYHo|ktvfAQLx1NjnE7C~MgP_qW)lAbzc01%-kzV&DhhLf6f2nu()h6_^ z4;T7E|5;j9RK%ESN{lYrY_(t!07)!5UvTVPCXa0iX*l9o(ar^OU)^zynJEZAm8@`a zwIB69=B>0pxn)A{aN^f@^H~UhF+;OeuyYbsOB$(dwfMfX#v9dXy+aKRCBw3eMpV~5 zOJt=zq`z>O1KrC{kb&GaTK19LgGI9TReuhY1Y4n6XTUSS;qP>?z~mPxojjv6_h|hb zX|>rj(R@dRIgjpg15<Cs;(n*y&^|Lsm*XBLB=bbhvcw7~ZFT8tZM60f<;XrKU&ub9 zUb!FS(IHc6P4{D1h5W1KHv!GGw$X;du2}gx9XNhIaHE@`?u;b04EB*JT&|d(kYsGc zB>8kG3D+kQGs`{#ryll;^VNhjt)k%vY}NR~p7;tq()8G9!8sB7$wmU3rsUHyzE7SC zSrh-hrI2_l<*L{!3yU|iCTxKn^-o=~N=v1#OU{i6k^!1E%1dD|Wnh{O6a-2IdTD3L zRL$~AS3W2Alp{6Cexke|{fUdCP{^<9Yv%)HWDj)^Cp@|b@iB5&*)r*Skl_p~Nn3Hv z{2${h-6HhE=xMyiBIOkd`FxoqAk?(5w{b3uEpa~6ETS4w*@CD#QO^)3rg0RA*;e5F z#3}`5dvH4cD>oI$>KH|L3+wb==AssIo{9q^7!iTP{)zUuvf^v<)uM4`&rfRYQ)zJ@ z@8Tt3-%NPAqVfM_fJR%jCV!9rl_;5*EUW2eMuwQ|GSg<@xR6$#O$a@OZEP*FO@fjh zc5}0HNoQP3QF=7j(1BU#fL)ACTZEa$sh(V^byr5Tl0Ik1NfD2*K@o*1AIgB7=3JKK z(Gmw^5q`h9jl|-!*v<6D;V02_!Agk8IgD<NP9=E9x<8Fq37sj<?*b92ikqRI4t+S} zNI0@B5TJwAX9q`TFyB_4+H#c2$=;SF5!TrP$615MjsPdVAYzx?fQG^n22F7%ODZml z7*W_=!WQA@ZF!LQ?ymG27{&*9ZWYleeE&3CpkB7z@lIh9SL;~6t+!>3I}&9)e$nFc zd!h^M=GmI2d<$n*m5rMlHuL%U<(XD@2iXm!G&88u6_e-cL(B3kbkTdVghha~@FTNy zIam-6-4c=Jdk$b*%ewC0`E|#37_}6JwNbYN4K8-Tn%sd;weD){NK@CV-ELV)y{zEK zXSOBK3FBIe0zcADaPly_Zpq*ZxAGUTJ@lCB7#0j0+WDi9oRZw-<7WRGv_Q1xYh{62 zm-jK_x}axB?1=^tr5k|u<=67B1N7EzFlQ3%E>^WU6#a%$ZF>@_1g7i*WyJ3pA0EUb zF9?PugJ<E4X~_{9&r-OD>v@pTToYH>vbrI>7{NgUfg@3c1VzKxB<1Kczzo_+8zPSj z2ng|U(UT+&nL=02QC)~igwgnj@XqH6!0SLaJI)a3d%Y-;B*`f+nXZEDY@%m#aztpS zEw#8~b7B@&aE&S>8|6&X!gprQ=L}pyJ%}GoTa%UyA+ovzg%8%iP+npFC>so?^?kSr zP}?9JN&$66Uq+fmm25pZo^g~ddhxv+Y@8C`w#wC{%9(i}S8c{33cPbf_l12odkROP z9vLlqe1Di~e5ER#rCL(5d4(%_?c-vVlwprrj&w|^`3=riuq`b}Xb_h;%Bc}b>X|ap zjiAw!OOjF<5$J+;0&LragAXRQd<L<cq$+i{b60L}=*)TcN|dC1m!Gt5DpLSy2ZCo@ zXYJ{74hw}7ceOoTe(oUp-C^)TiLg`vlh+RbVht{Q{E|qb5k=t${Be-ng`nLoFhiVt zU>HLW232?;7Gx(0buGF~O><PDYgHVfGWH$@$%)o!hSh`dUOy*2={;l1g&jZr45sny zlHvuNrL5XWxm*GgvDZ3a2L=eY4hyr904`@pN1^qE+61%{<PGVw7b1!tww+Zj$~a5_ z0Mq`qJ`^hswAK!JN*SXzrmpeyk@X$??1A|Q1O^~7Zw#9iVfQf>`Gm5$>5L!{9RH26 zLCBcjgFgzQuQ%ccA<Ne668?g{6AKH2<@7K@8E6E9<pvbiQZU7eYbD$v(2re^p4$}q zG7MmnbN1}nAiMC)(;}e^R7XDJ(4Uh`Eu9#ys5<O18K}oUl4ui-eKn#6yD;i(Osb{V z&?E~oZYbTaB}fUTM#jt+yfvAambR6C*3*E|r1{<RVNVdW@$XQo-ZSuz1-A?HyS{S6 z_N|E0yqL58#=8yr09ixwn_M0>V2;J8v^zy;g9IIR4Vu4FZeUC8Oo(NA=+OU5G!q<e zO&8C~xU()SAPSm#@6a%csf?A0E-3P*i}|2q3?xD5p?6+(oScz(<^BZJD>=%-`(?-> z@uagmfY~Ch^%=pNO-oAN*9JeL2=&NMqtU4zHDE-^?KUT;eHQ3wQeqe&2i~q0K<%jV z?};(0MLrJqKy{qto->>af}U835Zegb&oYN{UQpPOq%jsSA{F|K;zdK@Rp~oVu^Up7 z-yy$)<Qme+%S(%XLuO)*rtjp``XH_=61z9slD&)sEva_oSLKvg0Kn922Igd%)~xT9 z=t<D9{$nLwT}uxwdx0w-$oHtvkL9|c40f$vwdZINeaf>r9}OIRF&#^qo7AR>w_Ra9 zq)jOiHJ6Z~43?fXXwBB2D^DqcZ9jw)Oq6_J)C%*#wC5FBFYDIOEzPzUYVLI-;r)q| z1~7CarXt1pu>b)en}ud#@!7=4Ofp`01sKueI!ltKR0ly^4SW(oR+Tw@L`_>8?URGA zODb#6yu)0;yDT*rcn}6J-)^a_2$W6%o^G=C5URyXc3rN69E?2c$-&V&G|pG1{F;xy z(_V5f{#15<Mg+DYGFqjh^jB)-jZw8PEon%(fPYC(R7BnzdD1vWr>t%n@vp;+C2pDI zAZAR5<<b;d)-|mH(U6l8D*iDVs>_J($|=Y8;wI>gR8N6NJ5`X*9v(u<<=|=;9J}X{ zVI!F)4YQLBbbUHKtE&818vZD`yg5Xtn|(n@M=~<P{MTi~TMjD0Dn_&NtIKDD1gYa^ z@m>lvkOAtw7xOiIf?W}Lr~d-ULNKJ=CFW4E@qqtQ9Jycvc2TdXa;gM%0^rv%%KOE3 zun9D!w)KW*%ayV2I8Nd`<*8In64#)c!2UU)g|rm8xEoV^F+zfX3niOLRQh4MV3nw^ zz&^FD@PVth2V)KB;((=4v09i-n7f1CQKCq$gkVi-4w6lxOpFv#Gj1HxZOnK~@O`R} z8Geu6N{=M(x9A43F`K?jwwUaQL&e>E5b#Rcq1Je`!##6YT5d8*S<spp`)%3W==PLi zW;9U4V&S{IDGqlE7OX8E#XUugLd;$!u5~8FJy7lrODx?nyGOp?w0+VzbE&Bky%FYj zC;24q*Vf$<zk7~ZlF=FKcx{mCyDeklWa5^<R4hEB-5wKswL)J0g?a|5vJw3Fh+Z#< zU4`*r_O|-)xST{f1ik25R*Q5bp}J_i)I|_MhbZ7!9E`C<U(JG;cK9HhuoOAt>L=+M z-52Vy$SpAQ{4d$tVjFf5D(9xayxU4x-JNGw6TXlHb-ULvGrKVyrcE6afKLW^jWUOd zf)mUs^`%8cM;NKal2dI0$WHL!W{u4F0K7~*;Zl6|d;olkGc7wA&cy^;7M{9SREI0o zL=!?=@*gdjR5N=l1~&4u?vW;p!eUM<j%RU{F>VwfKZ|OvX*<$QSE%>k$y&o|gC+p| zt5dK4`vX&`sic)iueKV})XX>|sj*FUw_oiFDa=PW*%m`&%OfLvSd!riZX{d^`zpV1 zt=LWKuj9c&5nCj<O8t8xaACR8C2P12$rQGNq@cyGR^X*C#N<V_P1DU)OLLb$d@D$- zJEw`LM07xD&VS=N#^m7DWyH#h+?o~yYpt64H83!>+=4V9?6e?3<7C$^8oX!U4IrDt zbZ4m2H3WOR{*q!{zYC5VDaa`c*7{c#dBASeifzeL7}eUscIaev79D$VIvJ<Cl6uKU zT&R_dNZpg*B&DY~@2)?o0O2G)fhS@KLI9hl{I;aII=D~=;v9>%f%643Wj=NZ_I`(W zxp}!Iz^p42r1qy8ngob(qju}WIV6<p8K12`4YFw&PC=N<yV4iQ?D0myGWHd=CTu#h zU~aipuA~al?i7kCOVU^V8t*HF2Vp|tPh|EDdl0n+^QH|bGohgcdc94xt(5VAF~sVU zMB@%dOHf|;!UD3?R$9l93cg`iT6B`seb|nUIHnxyux>;#j#>_!z<pQ_*gyHidJhD; zilW3uG`)lo+oIBHasYiP&N5Bbj~a^Ckkof}@Iy9L;?veL;#f(??!69-GAPjH>U?ZH zMG)CxA<#q_Gd85-rb1QeaOB*W&pSG0*o2+5HUw2o6Iww~<m2`BT5JEIGhpWYwwB<Q zG=$zi9jAH7`)@?5c=!>wwmO`%PX{XG9exAW6-pc`Lh9GB>Dc`A@<213+#@+Z(7fmQ z<rK0ART;<sZ4Eu*$whGdD@^N!UCFn^ebV)+o#F0_`lvI5rN3bZm4`FeTZ7#vk5W{r zWL-z!a(Ydo=?TdLXFb#%z%Nu}=pj*a3a80vdb$y;bVa8*ma%^xXs!sI!}pvm5=+)M zqv<Fc&$9DL_I@~>4$m(?WUnSu_(gUxoxGk7-{#rn1phty$K~k!GP@W}-;OUYN2l4# z57^A`;^J(4GJJV9%Fc%Gp_Ju6PDU4(+50!6^K1fLydTd-+3a!%UmBlh@2BI-@%d|P z^kj1JVLE>O<`SEFGdVjQO|kgsaTo=DIlCB6FUO-9jOX3>bmYe-Ie)V-2No{x$Cqy= zSC={+Y<Kc1H2ER>Wqf{`XQMGTJNn1PbTpfVA%&jCZ^Il$;g{p{le4SSFuFW@8Cp4? zTxMtEFyHX8%LzS|&_91(dV%4EKHiR|CvU<(hcCxx<FJxYL-p18@;r2dt2(5)oLrp^ zrzAPArWcdhXpqqYhlav-OvkfdvM?oH_P<{ZwXv}Fp`EwG^OF(u=T-un3mXa3&pu49 z;N1%AaCRCk7cAi@I~~0mom`IJjdJ*8=xTQLcEr0ey9^D}ww|43=cAJ__TltHHXBXf zjZbi0rlX7DcnYg_GMP@HrOA1G_`V-d-ie0D&LmkO7Eb4I?ndw6R9&5)!75Ehf4>TA z0B0+U&lU7Hd_5iEMz~XiZM`3d!NLyfamwf@<@mMm3p+|5!oi$mZzreYSFmk-)J`Vn z??xYHy1}wyVIS<k4_{7T(O!lDjd5IIB(Q?8x2MCm!`GvkJ3-JdiT=^~XgWO0v)RSy zWDI`^p9v>99F#L!#`9U2H*A0S0XLKl!#RLf;4sr(V`Eq0D#3w0mqQlD06+7Cer#iC zAL8t6GMmXJpAIjF8IC^u`Emr`n2yfF!r@IFo}64w!>xr+z_-GvW>?`JkI!j`VD2a^ z#?w<e&wN$!tiKwL&#tEFL4^@a!jeL>cv#);&?ja`bkE>mWaC$%%ab>}omnIlK4fpg z_PiX0j}1@XjqxgTUtzFgULT$*w!&*0pVl7+R00iZbLoklwesS+-ql4UVl^QTzOafe zfMx4MOil!$w-V8$#jR@Ko}rvMqW$Nj27Uu}nAJ%+0PJ0cQjX-n-UE*pc~?j?=hljQ z_J#nj-+Wb5T0G>_eZuNX9Ee;4;d;FSq7tlfK$;U6D%Hno<>t}hrAib_Lw`r9ik6oY zFO2a;Sp2<(@q})}Htn~4gy|jsh4YN(;xlEf?Y}ov9&?DxN0`Y=$v61`5Au1?(0M>j zN5GMb8ls_euROa7=DA0Y`;G%>Jii-E>t<ROKxS1^<S$CT&pB|`?1%&p(6hG~MN#}V zhgB<T3ImNw2}#-=)_@1cHdV1wr!YBOh%wT_k>YGfYu6$$Glz_dg59^KtxKk-nnD85 z9b>GaDV8!-n1Qx%CtnEqA*F922G8Z>P?@<VD$!2%>rTS?j7*^86_*RZ*033_Uyo*o zP?M^CD2R->)cA@V4^T*YQ=?r>E*&9UTke%M9p<<Mg*-W$e_RE-XkAiM!bs{CNaAyl z^T=IYZ>w?%v9>}v?>Hzj_~Xsan%2VT+2fNV><B1U;Um;7Hd#yVvVK*+kDTNi!!||d z=0|b+#iym(iKXr0Q<Ur29nF5wdMKL69@EAivUPGX|5^?ngAZBS<l{I+|EO&d4jx_< zo4eKly@lwLq!FS≥(N8jKbmEPv5U;kgst^e5#f0G=dlPkh`aF)f8ORWHNB_i2}z zX_m9nENf`xA@7Goy2vq+@)ttr%3mDKcZiX%{T*ma5qqYsF`3xm4gtca#B+PQ+iiY4 zKEA)dAKa|>gL->&ERd&TIK^&=Ljc=Ca-gTW0wO6A=NK57QzRN{=z#xrTd#r15Q>}? z8-R9&S$Dnj8*lM*M#joJ$8r(6QbDeOmD=va{|rI_vI1zj$hQF8>^tN$CNgo)rw^28 zKelCuhzY#azw^eo&NbCsz`Yp0oK4QIE=Ok{yg^8;X?!HI-60(K|7l=R?@3+_;&xNv zVGkd^K;;TLB;Rx-OSBad9m-IluAZNK-*b+(xS_d?1CQbDVFNB_jA&<CpE?>jjx27E z&vzp%S&oH*o@P(k-s1_+vdI!PF@<d;@?A!QE#BcC0?Cp18ic0q_0`yF9B}0+9NiwB zMEp(#9WtD^>-tj%V$|JOgrWoJ8V6JcF;gD^=)-{zE8QfeoXhPIA}zuDz_N^L<zh@0 z2>Kksr5r_5h#ldcyFnOeNot<GQbb97Z{ey$^~y<~g&(jNM5WEe8A=SA`frmO<X(P2 zD5{r_aH^geGsv)LdvT4{oRbqC?j2_$p`z%Lyxfyg0Ely2Lqxvh;;RRjsZ4zSm`V=< z1DA<j7liWBh#)#bR2<eT2Qqi;uXa@jxf5|`(v7_rjLtp7Z5DN&3H%Ed=M2!9+lSn~ z0K_XHEuj@Q1YS2xDTEvZ%t-}A+C!VQxvheQQg3b#$M?5~Ct>xUtZp`|!R_vDh5Pph z(ba#Jjs4pnk{>ks6FZ*!ZS~@j>yN{KgK!~_^;3_+$5vnPvA^jcOcXzV`t1AcWHdd; zWBPhF_A==!X;@!PyZSns)o;?OzJ^Bi6||{;Uz7TMTGZFkpuVE^q?bmIHJ$38kN4|J z{tkZ)Cdi9NO)#D2&1k-=Hcff4+TT>`S0z@f87%qFe-_(EvhOb*JsUg?|AR~M^oQr) zKl}dqQ@u4mGp{k2`%U$)^2MX?+>Mgo9?%wg@hFUZP*T4G2y(9LPlL_#0sQh2fCu;C zGcz3B6aLtf4UX>#5A4zLZ*F{1Qq}S>6YFDqHaeMQyaXAo!N1q`AV?c+zeni!p&Xl} zvnBMa3ht%8H6?lk<kZ;&rJ{Fy)&3Dr;A`yp@$Vai{0P)O8IEjc(%*0Df+#Qt+SKPJ z`h}Cj{lLZ7pDZgV31LHf+%XKM!Ia@NF8~d7q;1Ac{0!K)pbqY2gP-{gmR}M>H3a&$ z56}GJOZ~<3)<NlycJ+RKi*6F^qi2Kb=BDc3N!Q3JREF=EaD~`0_SCk2AAbU9Ctp1J zSGC!ci|9i@HMKAOw~pP{TzCG*HrL~LoceQ3&FL7pCd53Tknm?7R!8JRem?&-LhqEk zN2ew{GVoRn{`>zg?TLqLN>uNFA9$wdZ(-CwA8*TGWmN$3{M#S?FHlPd2%5F2v|lv= z0F<``08mQ-0u%rg00;;O0M&5;Nt(5(v|lv=0F<``01E&F0000000000000000001E nZ*FvDZgehqZEXI^002-+1qJ{B000310RTM!005jd0RR91@)lgz diff --git a/silecs-eclipse-plugin-update-site/deliverToWebDav.sh b/silecs-eclipse-plugin-update-site/deliverToWebDav.sh deleted file mode 100755 index c5ff0fe..0000000 --- a/silecs-eclipse-plugin-update-site/deliverToWebDav.sh +++ /dev/null @@ -1,29 +0,0 @@ -#! /bin/bash - -kinit - -function copyFileToWebDav -{ - -cadaver -t <<EOF -open https://www.acc.gsi.de/dav/eclipse-luna/silecs -mput $1 -quit -EOF - -} - -for file in features/* -do - copyFileToWebDav $file -done - -for file in plugins/* -do - copyFileToWebDav $file -done - -copyFileToWebDav artifacts.jar -copyFileToWebDav content.jar -copyFileToWebDav index.html -copyFileToWebDav site.xml \ No newline at end of file diff --git a/silecs-eclipse-plugin-update-site/index.html b/silecs-eclipse-plugin-update-site/index.html deleted file mode 100644 index c6627db..0000000 --- a/silecs-eclipse-plugin-update-site/index.html +++ /dev/null @@ -1,60 +0,0 @@ -<html> -<head> -<title>silecs-eclipse-plugin-update-site</title> -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> -<style>@import url("web/site.css");</style> -<script type="text/javascript"> - var returnval = 0; - var stylesheet, xmlFile, cache, doc; - function init(){ - // NSCP 7.1+ / Mozilla 1.4.1+ / Safari - // Use the standard DOM Level 2 technique, if it is supported - if (document.implementation && document.implementation.createDocument) { - xmlFile = document.implementation.createDocument("", "", null); - stylesheet = document.implementation.createDocument("", "", null); - if (xmlFile.load){ - xmlFile.load("site.xml"); - stylesheet.load("web/site.xsl"); - } else { - alert("Document could not be loaded by browser."); - } - xmlFile.addEventListener("load", transform, false); - stylesheet.addEventListener("load", transform, false); - } - //IE 6.0+ solution - else if (window.ActiveXObject) { - xmlFile = new ActiveXObject("msxml2.DOMDocument.3.0"); - xmlFile.async = false; - xmlFile.load("site.xml"); - stylesheet = new ActiveXObject("msxml2.FreeThreadedDOMDocument.3.0"); - stylesheet.async = false; - stylesheet.load("web/site.xsl"); - cache = new ActiveXObject("msxml2.XSLTemplate.3.0"); - cache.stylesheet = stylesheet; - transformData(); - } - } - // separate transformation function for IE 6.0+ - function transformData(){ - var processor = cache.createProcessor(); - processor.input = xmlFile; - processor.transform(); - data.innerHTML = processor.output; - } - // separate transformation function for NSCP 7.1+ and Mozilla 1.4.1+ - function transform(){ - returnval+=1; - if (returnval==2){ - var processor = new XSLTProcessor(); - processor.importStylesheet(stylesheet); - doc = processor.transformToDocument(xmlFile); - document.getElementById("data").innerHTML = doc.documentElement.innerHTML; - } - } -</script> -</head> -<body onload="init();"> -<!--[insert static HTML here]--> -<div id="data"><!-- this is where the transformed data goes --></div> -</body> -</html> diff --git a/silecs-eclipse-plugin-update-site/install.sh b/silecs-eclipse-plugin-update-site/install.sh deleted file mode 100755 index c989b39..0000000 --- a/silecs-eclipse-plugin-update-site/install.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/sh -set -e - -INSTALL_DIR=$1 - -SCRIPT=$(readlink -f "$0") -SCRIPTPATH=$(dirname "$SCRIPT") # path where this script is located in - -mkdir -p ${INSTALL_DIR} -cp -ruv ${SCRIPTPATH}/* ${INSTALL_DIR} \ No newline at end of file diff --git a/silecs-eclipse-plugin-update-site/site.xml b/silecs-eclipse-plugin-update-site/site.xml deleted file mode 100644 index 1989289..0000000 --- a/silecs-eclipse-plugin-update-site/site.xml +++ /dev/null @@ -1,18 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<site> - <feature url="features/silecsEclipsePluginFeature_1.0.0.201602241715.jar" id="silecsEclipsePluginFeature" version="1.0.0.201602241715"> - <category name="0.9.0"/> - </feature> - <feature url="features/silecsEclipsePluginFeature_1.0.0.201604071714.jar" id="silecsEclipsePluginFeature" version="1.0.0.201604071714"> - <category name="0.10.0"/> - </feature> - <feature url="features/silecsEclipsePluginFeature_1.0.0.201607291027.jar" id="silecsEclipsePluginFeature" version="1.0.0.201607291027"> - <category name="1.0.0"/> - </feature> - <feature url="features/silecsEclipsePluginFeature_1.0.0.201608011414.jar" id="silecsEclipsePluginFeature" version="1.0.0.201608011414"> - <category name="1.0.0"/> - </feature> - <category-def name="0.9.0" label="0.9.0"/> - <category-def name="0.10.0" label="0.10.0"/> - <category-def name="1.0.0" label="1.0.0"/> -</site> diff --git a/silecs-eclipse-plugin-update-site/test.txt b/silecs-eclipse-plugin-update-site/test.txt deleted file mode 100644 index 5e40c08..0000000 --- a/silecs-eclipse-plugin-update-site/test.txt +++ /dev/null @@ -1 +0,0 @@ -asdf \ No newline at end of file diff --git a/silecs-eclipse-plugin-update-site/web/site.css b/silecs-eclipse-plugin-update-site/web/site.css deleted file mode 100644 index 62c6f9f..0000000 --- a/silecs-eclipse-plugin-update-site/web/site.css +++ /dev/null @@ -1,12 +0,0 @@ -<STYLE type="text/css"> -td.spacer {padding-bottom: 10px; padding-top: 10px;} -.title { font-family: sans-serif; color: #99AACC;} -.bodyText { font-family: sans-serif; font-size: 9pt; color:#000000; } -.sub-header { font-family: sans-serif; font-style: normal; font-weight: bold; font-size: 9pt; color: white;} -.log-text {font-family: sans-serif; font-style: normal; font-weight: lighter; font-size: 8pt; color:black;} -.big-header { font-family: sans-serif; font-style: normal; font-weight: bold; font-size: 9pt; color: white; border-top:10px solid white;} -.light-row {background:#FFFFFF} -.dark-row {background:#EEEEFF} -.header {background:#99AADD} -#indent {word-wrap : break-word;width :300px;text-indent:10px;} -</STYLE> diff --git a/silecs-eclipse-plugin-update-site/web/site.xsl b/silecs-eclipse-plugin-update-site/web/site.xsl deleted file mode 100644 index ccb882e..0000000 --- a/silecs-eclipse-plugin-update-site/web/site.xsl +++ /dev/null @@ -1,214 +0,0 @@ -<xsl:stylesheet version = '1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform' xmlns:msxsl="urn:schemas-microsoft-com:xslt"> -<xsl:output method="html" encoding="UTF-8"/> -<xsl:key name="cat" match="category" use="@name"/> -<xsl:template match="/"> -<xsl:for-each select="site"> - <html> - <head> - <title>silecs-eclipse-plugin-update-site</title> - <style>@import url("web/site.css");</style> - </head> - <body> - <h1 class="title">silecs-eclipse-plugin-update-site</h1> - <p class="bodyText"><xsl:value-of select="description"/></p> - <table width="100%" border="0" cellspacing="1" cellpadding="2"> - <xsl:for-each select="category-def"> - <xsl:sort select="@label" order="ascending" case-order="upper-first"/> - <xsl:sort select="@name" order="ascending" case-order="upper-first"/> - <xsl:if test="count(key('cat',@name)) != 0"> - <tr class="header"> - <td class="sub-header" width="30%"> - <xsl:value-of select="@name"/> - </td> - <td class="sub-header" width="70%"> - <xsl:value-of select="@label"/> - </td> - </tr> - <xsl:for-each select="key('cat',@name)"> - <xsl:sort select="ancestor::feature//@version" order="ascending"/> - <xsl:sort select="ancestor::feature//@id" order="ascending" case-order="upper-first"/> - <tr> - <xsl:choose> - <xsl:when test="(position() mod 2 = 1)"> - <xsl:attribute name="class">dark-row</xsl:attribute> - </xsl:when> - <xsl:otherwise> - <xsl:attribute name="class">light-row</xsl:attribute> - </xsl:otherwise> - </xsl:choose> - <td class="log-text" id="indent"> - <xsl:choose> - <xsl:when test="ancestor::feature//@label"> - <a href="{ancestor::feature//@url}"><xsl:value-of select="ancestor::feature//@label"/></a> - <br/> - <div id="indent"> - (<xsl:value-of select="ancestor::feature//@id"/> - <xsl:value-of select="ancestor::feature//@version"/>) - </div> - </xsl:when> - <xsl:otherwise> - <a href="{ancestor::feature//@url}"><xsl:value-of select="ancestor::feature//@id"/> - <xsl:value-of select="ancestor::feature//@version"/></a> - </xsl:otherwise> - </xsl:choose> - <br /> - </td> - <td> - <table> - <xsl:if test="ancestor::feature//@os"> - <tr><td class="log-text" id="indent">Operating Systems:</td> - <td class="log-text" id="indent"><xsl:value-of select="ancestor::feature//@os"/></td> - </tr> - </xsl:if> - <xsl:if test="ancestor::feature//@ws"> - <tr><td class="log-text" id="indent">Windows Systems:</td> - <td class="log-text" id="indent"><xsl:value-of select="ancestor::feature//@ws"/></td> - </tr> - </xsl:if> - <xsl:if test="ancestor::feature//@nl"> - <tr><td class="log-text" id="indent">Languages:</td> - <td class="log-text" id="indent"><xsl:value-of select="ancestor::feature//@nl"/></td> - </tr> - </xsl:if> - <xsl:if test="ancestor::feature//@arch"> - <tr><td class="log-text" id="indent">Architecture:</td> - <td class="log-text" id="indent"><xsl:value-of select="ancestor::feature//@arch"/></td> - </tr> - </xsl:if> - </table> - </td> - </tr> - </xsl:for-each> - <tr><td class="spacer"><br/></td><td class="spacer"><br/></td></tr> - </xsl:if> - </xsl:for-each> - <xsl:if test="count(feature) > count(feature/category)"> - <tr class="header"> - <td class="sub-header" colspan="2"> - Uncategorized - </td> - </tr> - </xsl:if> - <xsl:choose> - <xsl:when test="function-available('msxsl:node-set')"> - <xsl:variable name="rtf-nodes"> - <xsl:for-each select="feature[not(category)]"> - <xsl:sort select="@id" order="ascending" case-order="upper-first"/> - <xsl:sort select="@version" order="ascending" /> - <xsl:value-of select="."/> - <xsl:copy-of select="." /> - </xsl:for-each> - </xsl:variable> - <xsl:variable name="myNodeSet" select="msxsl:node-set($rtf-nodes)/*"/> - <xsl:for-each select="$myNodeSet"> - <tr> - <xsl:choose> - <xsl:when test="position() mod 2 = 1"> - <xsl:attribute name="class">dark-row</xsl:attribute> - </xsl:when> - <xsl:otherwise> - <xsl:attribute name="class">light-row</xsl:attribute> - </xsl:otherwise> - </xsl:choose> - <td class="log-text" id="indent"> - <xsl:choose> - <xsl:when test="@label"> - <a href="{@url}"><xsl:value-of select="@label"/></a> - <br /> - <div id="indent"> - (<xsl:value-of select="@id"/> - <xsl:value-of select="@version"/>) - </div> - </xsl:when> - <xsl:otherwise> - <a href="{@url}"><xsl:value-of select="@id"/> - <xsl:value-of select="@version"/></a> - </xsl:otherwise> - </xsl:choose> - <br /><br /> - </td> - <td> - <table> - <xsl:if test="@os"> - <tr><td class="log-text" id="indent">Operating Systems:</td> - <td class="log-text" id="indent"><xsl:value-of select="@os"/></td> - </tr> - </xsl:if> - <xsl:if test="@ws"> - <tr><td class="log-text" id="indent">Windows Systems:</td> - <td class="log-text" id="indent"><xsl:value-of select="@ws"/></td> - </tr> - </xsl:if> - <xsl:if test="@nl"> - <tr><td class="log-text" id="indent">Languages:</td> - <td class="log-text" id="indent"><xsl:value-of select="@nl"/></td> - </tr> - </xsl:if> - <xsl:if test="@arch"> - <tr><td class="log-text" id="indent">Architecture:</td> - <td class="log-text" id="indent"><xsl:value-of select="@arch"/></td> - </tr> - </xsl:if> - </table> - </td> - </tr> - </xsl:for-each> - </xsl:when> - <xsl:otherwise> - <xsl:for-each select="feature[not(category)]"> - <xsl:sort select="@id" order="ascending" case-order="upper-first"/> - <xsl:sort select="@version" order="ascending" /> - <tr> - <xsl:choose> - <xsl:when test="count(preceding-sibling::feature[not(category)]) mod 2 = 1"> - <xsl:attribute name="class">dark-row</xsl:attribute> - </xsl:when> - <xsl:otherwise> - <xsl:attribute name="class">light-row</xsl:attribute> - </xsl:otherwise> - </xsl:choose> - <td class="log-text" id="indent"> - <xsl:choose> - <xsl:when test="@label"> - <a href="{@url}"><xsl:value-of select="@label"/></a> - <br /> - <div id="indent"> - (<xsl:value-of select="@id"/> - <xsl:value-of select="@version"/>) - </div> - </xsl:when> - <xsl:otherwise> - <a href="{@url}"><xsl:value-of select="@id"/> - <xsl:value-of select="@version"/></a> - </xsl:otherwise> - </xsl:choose> - <br /><br /> - </td> - <td> - <table> - <xsl:if test="@os"> - <tr><td class="log-text" id="indent">Operating Systems:</td> - <td class="log-text" id="indent"><xsl:value-of select="@os"/></td> - </tr> - </xsl:if> - <xsl:if test="@ws"> - <tr><td class="log-text" id="indent">Windows Systems:</td> - <td class="log-text" id="indent"><xsl:value-of select="@ws"/></td> - </tr> - </xsl:if> - <xsl:if test="@nl"> - <tr><td class="log-text" id="indent">Languages:</td> - <td class="log-text" id="indent"><xsl:value-of select="@nl"/></td> - </tr> - </xsl:if> - <xsl:if test="@arch"> - <tr><td class="log-text" id="indent">Architecture:</td> - <td class="log-text" id="indent"><xsl:value-of select="@arch"/></td> - </tr> - </xsl:if> - </table> - </td> - </tr> - </xsl:for-each> - </xsl:otherwise> - </xsl:choose> - </table> - </body> - </html> -</xsl:for-each> -</xsl:template> -</xsl:stylesheet> diff --git a/silecs-eclipse-plugin/.classpath b/silecs-eclipse-plugin/.classpath deleted file mode 100644 index 2dfef36..0000000 --- a/silecs-eclipse-plugin/.classpath +++ /dev/null @@ -1,10 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<classpath> - <classpathentry exported="true" kind="lib" path="ext-jars/xml-apis-1.3.04.jar"/> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/> - <classpathentry exported="true" kind="con" path="org.eclipse.pde.core.requiredPlugins"/> - <classpathentry kind="src" path="src/java"/> - <classpathentry exported="true" kind="lib" path="jaxen-1.1.6.jar"/> - <classpathentry exported="true" kind="lib" path="xalan-2.7.2.jar"/> - <classpathentry kind="output" path="target/classes"/> -</classpath> diff --git a/silecs-eclipse-plugin/.gitignore b/silecs-eclipse-plugin/.gitignore deleted file mode 100644 index 60a467d..0000000 --- a/silecs-eclipse-plugin/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -/target/ -/ext-jars/* -/jaxen-1.1.6.jar -/xalan-2.7.2.jar diff --git a/silecs-eclipse-plugin/.project b/silecs-eclipse-plugin/.project deleted file mode 100644 index 5a975ee..0000000 --- a/silecs-eclipse-plugin/.project +++ /dev/null @@ -1,36 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<projectDescription> - <name>silecs-eclipse-plugin</name> - <comment></comment> - <projects> - </projects> - <buildSpec> - <buildCommand> - <name>org.eclipse.jdt.core.javabuilder</name> - <arguments> - </arguments> - </buildCommand> - <buildCommand> - <name>org.eclipse.pde.ManifestBuilder</name> - <arguments> - </arguments> - </buildCommand> - <buildCommand> - <name>org.eclipse.pde.SchemaBuilder</name> - <arguments> - </arguments> - </buildCommand> - <buildCommand> - <name>org.eclipse.m2e.core.maven2Builder</name> - <arguments> - </arguments> - </buildCommand> - </buildSpec> - <natures> - <nature>org.eclipse.m2e.core.maven2Nature</nature> - <nature>org.eclipse.jdt.core.javanature</nature> - <nature>org.springsource.ide.eclipse.gradle.core.nature</nature> - <nature>org.eclipse.pde.PluginNature</nature> - <nature>org.python.pydev.pythonNature</nature> - </natures> -</projectDescription> diff --git a/silecs-eclipse-plugin/.pydevproject b/silecs-eclipse-plugin/.pydevproject deleted file mode 100644 index 3328e17..0000000 --- a/silecs-eclipse-plugin/.pydevproject +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<?eclipse-pydev version="1.0"?><pydev_project> -<pydev_property name="org.python.pydev.PYTHON_PROJECT_INTERPRETER">Default</pydev_property> -<pydev_property name="org.python.pydev.PYTHON_PROJECT_VERSION">jython 2.7</pydev_property> -<pydev_pathproperty name="org.python.pydev.PROJECT_SOURCE_PATH"> -<path>/${PROJECT_DIR_NAME}/src/scripts</path> -</pydev_pathproperty> -</pydev_project> diff --git a/silecs-eclipse-plugin/.settings/org.eclipse.core.resources.prefs b/silecs-eclipse-plugin/.settings/org.eclipse.core.resources.prefs deleted file mode 100644 index 8dd9b1d..0000000 --- a/silecs-eclipse-plugin/.settings/org.eclipse.core.resources.prefs +++ /dev/null @@ -1,3 +0,0 @@ -eclipse.preferences.version=1 -encoding//src/test/java=UTF-8 -encoding/<project>=UTF-8 diff --git a/silecs-eclipse-plugin/.settings/org.eclipse.jdt.core.prefs b/silecs-eclipse-plugin/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index 13b3428..0000000 --- a/silecs-eclipse-plugin/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,13 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.8 -org.eclipse.jdt.core.compiler.debug.lineNumber=generate -org.eclipse.jdt.core.compiler.debug.localVariable=generate -org.eclipse.jdt.core.compiler.debug.sourceFile=generate -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning -org.eclipse.jdt.core.compiler.source=1.8 diff --git a/silecs-eclipse-plugin/.settings/org.eclipse.ltk.core.refactoring.prefs b/silecs-eclipse-plugin/.settings/org.eclipse.ltk.core.refactoring.prefs deleted file mode 100644 index b196c64..0000000 --- a/silecs-eclipse-plugin/.settings/org.eclipse.ltk.core.refactoring.prefs +++ /dev/null @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.ltk.core.refactoring.enable.project.refactoring.history=false diff --git a/silecs-eclipse-plugin/.settings/org.eclipse.m2e.core.prefs b/silecs-eclipse-plugin/.settings/org.eclipse.m2e.core.prefs deleted file mode 100644 index f897a7f..0000000 --- a/silecs-eclipse-plugin/.settings/org.eclipse.m2e.core.prefs +++ /dev/null @@ -1,4 +0,0 @@ -activeProfiles= -eclipse.preferences.version=1 -resolveWorkspaceProjects=true -version=1 diff --git a/silecs-eclipse-plugin/JNLP-INF/APPLICATION_TEMPLATE.JNLP b/silecs-eclipse-plugin/JNLP-INF/APPLICATION_TEMPLATE.JNLP deleted file mode 100644 index cf8e499..0000000 --- a/silecs-eclipse-plugin/JNLP-INF/APPLICATION_TEMPLATE.JNLP +++ /dev/null @@ -1,69 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<jnlp spec="1.0+" codebase="*" href="silecs_launcher.jnlp"> <!-- URL to the site containing the jnlp application. It should match the - value used on export. Href, the name of this file --> - <information> - <!-- user readable name of the application --> - <title> Silecs-Eclipse-Plugin</title> - <!-- vendor name --> - <vendor>CERN</vendor> - <!-- vendor homepage --> - <homepage href="https://wikis/display/SIL/SILECs+Home"/> - <!-- product description --> - <description>Silecs Configuration tool</description> - </information> - - <!--request all permissions from the application. This does not change --> - <security> - <all-permissions /> - </security> - <update check="always" policy="always"></update> - - <!-- The name of the main class to execute. This does not change --> - <application-desc main-class="cern.silecs.activator.WebStartLauncher"> - <argument>-nosplash</argument> - <argument>-consoleLog</argument> - <argument>-data</argument> - <argument>@noDefault</argument> - </application-desc> - - <resources> - <!-- Reference to the launcher jar.--> - <jar href="*" /> - - <property name="app.name" value="Silecs-Eclipse-Plugin"></property> - <property name="app.version" value="1.m.p"></property> - - <!-- The id of the product to run, like found in the overview page of the - product editor --> - <property name="eclipse.application" value="silecs.eclipse.plugin.application" /> - <property name="osgi.parentClassloader" value="current" /> - <property name="osgi.framework" value="org.eclipse.osgi" /> - <property name="osgi.bundles" - value="org.eclipse.core.runtime@start,org.eclipse.equinox.common@2:start,org.eclipse.equinox.ds@1:start,org.eclipse.equinox.simpleconfigurator@1:start,org.eclipse.osgi@-1:start,org.eclipse.equinox.event@3:start" /> - </resources> - - <resources os="Windows"> - <j2se version="1.8+" - java-vm-args="-Xms128m -Xmx1024m -Dpython.cachedir.skip=true -Dpython.cachedir=/tmp -Dpython.home=. -Dpython.console.encoding=UTF-8" /> - - <property name="osgi.instance.area" value="@user.home/Silecs-Eclipse-Plugin/1.m.p/"/> - <property name="osgi.configuration.area" value="@user.home/Silecs-Eclipse-Plugin/1.m.p/"/> - - <extension name="Wrapper feature" - href="*" /> - </resources> - - <resources os="Linux"> - <j2se version="1.8+" - java-vm-args="-Xms128m -Xmx1024m -Dpython.cachedir.skip=true -Dpython.cachedir=/tmp -Dpython.home=. -Dpython.console.encoding=UTF-8" /> - - <property name="jnlp.osgi.instance.area" value="@user.home/Silecs-Eclipse-Plugin/1.m.p/" /> - <property name="jnlp.osgi.configuration.area" value="@user.home/Silecs-Eclipse-Plugin/1.m.p/" /> - <property name="jnlp.Dosgi.user.area" value="@user.home"/> - <property name="osgi.ws" value="gtk"/> - - <extension name="Wrapper feature" - href="*" /> - - </resources> -</jnlp> \ No newline at end of file diff --git a/silecs-eclipse-plugin/LICENSE b/silecs-eclipse-plugin/LICENSE deleted file mode 100644 index 20d40b6..0000000 --- a/silecs-eclipse-plugin/LICENSE +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - <one line to give the program's name and a brief idea of what it does.> - Copyright (C) <year> <name of author> - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - <program> Copyright (C) <year> <name of author> - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -<http://www.gnu.org/licenses/>. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -<http://www.gnu.org/philosophy/why-not-lgpl.html>. \ No newline at end of file diff --git a/silecs-eclipse-plugin/META-INF/MANIFEST.MF b/silecs-eclipse-plugin/META-INF/MANIFEST.MF deleted file mode 100644 index c498624..0000000 --- a/silecs-eclipse-plugin/META-INF/MANIFEST.MF +++ /dev/null @@ -1,114 +0,0 @@ -Manifest-Version: 1.0 -Bundle-ManifestVersion: 2 -Bundle-Name: %Bundle-Name -Bundle-SymbolicName: silecs.eclipse.plugin;singleton:=true -Bundle-Version: 1.1.1.qualifier -Bundle-Activator: cern.silecs.activator.Activator -Bundle-RequiredExecutionEnvironment: JavaSE-1.8 -Require-Bundle: org.eclipse.ui, - org.eclipse.core.runtime, - org.eclipse.ui.workbench, - org.eclipse.core.resources, - org.eclipse.ui.ide, - org.eclipse.ui.editors, - org.eclipse.wst.xml.core, - org.eclipse.wst.xml.ui, - org.eclipse.ui.navigator.resources, - org.eclipse.core.filesystem, - org.eclipse.ui.console, - org.eclipse.ui.views, - org.eclipse.wst.validation, - org.eclipse.wst.validation.infopop, - org.eclipse.wst.validation.ui, - org.eclipse.jface.text, - org.eclipse.wst.sse.ui, - org.eclipse.ui.workbench.texteditor, - org.eclipse.text, - org.eclipse.wst.sse.core, - org.eclipse.ui.navigator, - org.eclipse.xsd, - org.eclipse.wst.xsd.core, - org.eclipse.core.expressions, - org.eclipse.cdt, - org.eclipse.cdt.core, - org.eclipse.cdt.ui, - org.eclipse.cdt.managedbuilder.ui, - org.eclipse.ltk.core.refactoring, - org.eclipse.ltk.ui.refactoring, - org.eclipse.equinox.launcher, - org.eclipse.cdt.make.core;bundle-version="7.3.0", - org.eclipse.cdt.make.ui;bundle-version="7.2.0", - org.eclipse.cdt.managedbuilder.core;bundle-version="8.3.0" -Bundle-ActivationPolicy: lazy -Bundle-ClassPath: ., - ext-jars/xalan-2.7.2.jar, - ext-jars/jaxen-1.1.6.jar, - ext-jars/xml-apis-1.3.04.jar -Permissions: all-permissions -Codebase: http://abwww.cern.ch/ap/dist/silecs/1.m.p/configuration/ -Application-Name: Silecs-Eclipse-Plugin -Export-Package: org.apache.bcel, - org.apache.bcel.classfile, - org.apache.bcel.generic, - org.apache.bcel.util, - org.apache.bcel.verifier, - org.apache.bcel.verifier.exc, - org.apache.bcel.verifier.statics, - org.apache.bcel.verifier.structurals, - org.apache.regexp, - org.apache.xalan, - org.apache.xalan.client, - org.apache.xalan.extensions, - org.apache.xalan.lib, - org.apache.xalan.lib.sql, - org.apache.xalan.processor, - org.apache.xalan.res, - org.apache.xalan.serialize, - org.apache.xalan.templates, - org.apache.xalan.trace, - org.apache.xalan.transformer, - org.apache.xalan.xslt, - org.apache.xalan.xsltc, - org.apache.xalan.xsltc.cmdline, - org.apache.xalan.xsltc.cmdline.getopt, - org.apache.xalan.xsltc.compiler, - org.apache.xalan.xsltc.compiler.util, - org.apache.xalan.xsltc.dom, - org.apache.xalan.xsltc.runtime, - org.apache.xalan.xsltc.runtime.output, - org.apache.xalan.xsltc.trax, - org.apache.xalan.xsltc.util, - org.apache.xml.dtm, - org.apache.xml.dtm.ref, - org.apache.xml.dtm.ref.dom2dtm, - org.apache.xml.dtm.ref.sax2dtm, - org.apache.xml.res, - org.apache.xml.utils, - org.apache.xml.utils.res, - org.apache.xpath, - org.apache.xpath.axes, - org.apache.xpath.compiler, - org.apache.xpath.domapi, - org.apache.xpath.functions, - org.apache.xpath.jaxp, - org.apache.xpath.objects, - org.apache.xpath.operations, - org.apache.xpath.patterns, - org.apache.xpath.res, - org.jaxen, - org.jaxen.dom, - org.jaxen.dom4j, - org.jaxen.expr, - org.jaxen.expr.iter, - org.jaxen.function, - org.jaxen.function.ext, - org.jaxen.function.xslt, - org.jaxen.javabean, - org.jaxen.jdom, - org.jaxen.pattern, - org.jaxen.saxpath, - org.jaxen.saxpath.base, - org.jaxen.saxpath.helpers, - org.jaxen.util, - org.jaxen.xom, - org.w3c.dom diff --git a/silecs-eclipse-plugin/OSGI-INF/l10n/bundle.properties b/silecs-eclipse-plugin/OSGI-INF/l10n/bundle.properties deleted file mode 100644 index 3ed82f2..0000000 --- a/silecs-eclipse-plugin/OSGI-INF/l10n/bundle.properties +++ /dev/null @@ -1,2 +0,0 @@ -#Properties file for silecs.eclipse.plugin -Bundle-Name = Silecs-config \ No newline at end of file diff --git a/silecs-eclipse-plugin/README.md b/silecs-eclipse-plugin/README.md deleted file mode 100644 index 04caae1..0000000 --- a/silecs-eclipse-plugin/README.md +++ /dev/null @@ -1,40 +0,0 @@ -# silecs-codegen - -This component of the SILECS PLC-framework is used in order to generate and manage silecs-project. - -## Getting Started - -Please check the lab-specific SILECS-Wikis for more information: - -[CERN SILECS Wiki Page][CERN_Wiki] - -[GSI SILECS Wiki Page][GSI_Wiki] - -## License - -Licensed under the GNU GENERAL PUBLIC LICENSE Version 3. See the [LICENSE file][license] for details. - -[license]: LICENSE -[CERN_Wiki]: https://wikis.cern.ch/display/SIL/SILECs+Home -[GSI_Wiki]: https://www-acc.gsi.de/wiki/Frontend/SILECS - -## Dependencies - -### Eclipse Plugins -Install Eclipse plug-in development environment – repo: Official Eclipse repo -install eclipse-core-tool – http://eclipse.org/eclipse/platform-core/updates - -### Maven -Configure the Eclipe-Maven: -https://www-acc.gsi.de/wiki/bin/viewauth/IN/Maven - -Goto project-folder in console and run: -“mvn install†-Right click on project in eclipse configure → Convert to Maven Project -Goto eclipse and run project-->Build - -## Execution - -Goto eclipse-perspective -double-click plugin.xml -Launch an Eclipse Application \ No newline at end of file diff --git a/silecs-eclipse-plugin/build.properties b/silecs-eclipse-plugin/build.properties deleted file mode 100644 index eafceb4..0000000 --- a/silecs-eclipse-plugin/build.properties +++ /dev/null @@ -1,18 +0,0 @@ -source.. = src/java/ -output.. = bin/java/,\ - bin/ -bin.includes = plugin.xml,\ - META-INF/,\ - .,\ - icons/,\ - JNLP-INF/,\ - src/java/,\ - OSGI-INF/,\ - ext-jars/xml-apis-1.3.04.jar,\ - ext-jars/xalan-2.7.2.jar,\ - ext-jars/serializer-2.7.2.jar,\ - jaxen-1.1.6.jar,\ - xalan-2.7.2.jar -src.includes = src/ -jars.compile.order = . -qualifier = context diff --git a/silecs-eclipse-plugin/build.xml b/silecs-eclipse-plugin/build.xml deleted file mode 100644 index 223e13e..0000000 --- a/silecs-eclipse-plugin/build.xml +++ /dev/null @@ -1,527 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project name="silecs.eclipse.plugin" default="build.jars" basedir="."> - - <property name="p2.build.repo" value="file:${buildDirectory}/buildRepo"/> - <property name="basews" value="${ws}"/> - <property name="baseos" value="${os}"/> - <property name="basearch" value="${arch}"/> - <property name="basenl" value="${nl}"/> - <property name="bundleId" value="silecs.eclipse.plugin"/> - <property name="bundleVersion" value="1.1.1.201608011414"/> - <property name="p2.publishonerror" value="false"/> - - <!-- Compiler settings. --> - <property name="javacFailOnError" value="false"/> - <property name="javacDebugInfo" value="on"/> - <property name="javacVerbose" value="false"/> - <property name="logExtension" value=".log"/> - <property name="compilerArg" value=""/> - <property name="compilation.prereq.log" value="${buildDirectory}/prereqErrors.log"/> - <property name="javacSource" value="1.3"/> - <property name="javacTarget" value="1.2"/> - <condition property="dir_bootclasspath" value="${java.home}/../Classes"> - <and> - <os family="mac"/> - <available file="${java.home}/../Classes" type="dir"/> - </and> - </condition> - <property name="dir_bootclasspath" value="${java.home}/lib"/> - <path id="path_bootclasspath"> - <fileset dir="${dir_bootclasspath}"> - <include name="*.jar"/> - </fileset> - </path> - <property name="bootclasspath" refid="path_bootclasspath"/> - <condition property="bundleBootClasspath" value="${JavaSE-1.8}" > - <isset property="JavaSE-1.8"/> - </condition> - <condition property="bundleJavacSource" value="1.8" > - <isset property="JavaSE-1.8"/> - </condition> - <condition property="bundleJavacTarget" value="1.8" > - <isset property="JavaSE-1.8"/> - </condition> - <property name="bundleJavacSource" value="${javacSource}"/> - <property name="bundleJavacTarget" value="${javacTarget}"/> - <property name="bundleBootClasspath" value="${bootclasspath}"/> - - <target name="init" depends="properties"> - <condition property="pluginTemp" value="${buildTempFolder}/plugins" > - <isset property="buildTempFolder"/> - </condition> - <property name="pluginTemp" value="${basedir}"/> - <condition property="build.result.folder" value="${pluginTemp}/silecs.eclipse.plugin_1.1.1.201608011414" > - <isset property="buildTempFolder"/> - </condition> - <property name="build.result.folder" value="${basedir}"/> - <property name="temp.folder" value="${basedir}/temp.folder"/> - <property name="plugin.destination" value="${basedir}"/> - <condition property="p2.publish.parts" value="true" > - <istrue value="${p2.gathering}"/> - </condition> - <property name="compilation.problem.marker" value="${build.result.folder}/compilation.problem"/> - <condition property="compilation.problem.marker.exists" value="true" > - <and> - <available file="${compilation.problem.marker}"/> - <isfalse value="${p2.publishonerror}"/> - </and> - </condition> - </target> - - <target name="properties" if="eclipse.running"> - <property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/> - - </target> - - <target name="build.update.jar" depends="init" description="Build the plug-in: silecs.eclipse.plugin for an update site."> - <delete dir="${temp.folder}"/> - <mkdir dir="${temp.folder}"/> - <antcall target="build.jars"/> - <antcall target="gather.bin.parts"> - <param name="destination.temp.folder" value="${temp.folder}/"/> - </antcall> - <jar destfile="${plugin.destination}/silecs.eclipse.plugin_1.1.1.201608011414.jar" basedir="${temp.folder}/silecs.eclipse.plugin_1.1.1.201608011414" filesetmanifest="merge"/> - <delete dir="${temp.folder}"/> - </target> - - <target name="@dot.nestedJars"> - <mkdir dir="${buildDirectory}/nestedJars/org.eclipse.equinox.registry_3.6.0.v20150318-1503"/> - <unzip src="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.equinox.registry_3.6.0.v20150318-1503.jar" dest="${buildDirectory}/nestedJars/org.eclipse.equinox.registry_3.6.0.v20150318-1503" overwrite="false"> - <patternset includes="runtime_registry_compatibility.jar"/> - </unzip> - <mkdir dir="${buildDirectory}/nestedJars/com.ibm.icu_54.1.1.v201501272100"/> - <unzip src="../../../../../../../../opt/eclipse/mars/plugins/com.ibm.icu_54.1.1.v201501272100.jar" dest="${buildDirectory}/nestedJars/com.ibm.icu_54.1.1.v201501272100" overwrite="false"> - <patternset includes="icu-data.jar"/> - </unzip> - <mkdir dir="${buildDirectory}/nestedJars/org.eclipse.e4.core.services_2.0.0.v20150403-1912"/> - <unzip src="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.e4.core.services_2.0.0.v20150403-1912.jar" dest="${buildDirectory}/nestedJars/org.eclipse.e4.core.services_2.0.0.v20150403-1912" overwrite="false"> - <patternset includes="injection_annotations.jar"/> - </unzip> - </target> - <target name="@dot" depends="init,@dot.nestedJars" unless="@dot" description="Create jar: silecs.eclipse.plugin @dot."> - <delete dir="${build.result.folder}/@dot"/> - <mkdir dir="${build.result.folder}/@dot"/> - <path id="@dot.classpath"> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.ui_3.107.0.v20150507-1945.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.core.runtime_3.11.1.v20150903-1804.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/javax.annotation_1.2.0.v201401042248.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/javax.inject_1.0.0.v20091030.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.osgi_3.10.102.v20160118-1700.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.osgi.compatibility.state_1.0.100.v20150402-1551.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.equinox.common_3.7.0.v20150402-1709.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.core.jobs_3.7.0.v20150330-2103.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.core.runtime.compatibility.registry_3.6.0.v20150318-1505/runtime_registry_compatibility.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.core.runtime.compatibility.registry_3.6.0.v20150318-1505"/> - <pathelement path="${buildDirectory}/nestedJars/org.eclipse.equinox.registry_3.6.0.v20150318-1503/runtime_registry_compatibility.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.equinox.registry_3.6.0.v20150318-1503.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/javax.xml_1.3.4.v201005080400.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.equinox.preferences_3.5.300.v20150408-1437.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.core.contenttype_3.5.0.v20150421-2214.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.equinox.app_1.3.300.v20150423-1356.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.osgi.services_3.5.0.v20150519-2006.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/javax.servlet_3.1.0.v201410161800.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.swt_3.104.2.v20160212-1350.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.swt.gtk.linux.x86_64_3.104.2.v20160212-1350.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.jface_3.11.1.v20160128-1644.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.core.commands_3.7.0.v20150422-0725.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.equinox.bidi_0.10.0.v20130327-1442.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.ui.workbench_3.107.1.v20160120-2131.jar"/> - <pathelement path="${buildDirectory}/nestedJars/com.ibm.icu_54.1.1.v201501272100/icu-data.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/com.ibm.icu_54.1.1.v201501272100.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.e4.core.commands_0.11.0.v20150422-0725.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.core.expressions_3.5.0.v20150421-2214.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.e4.core.contexts_1.4.0.v20150828-0818.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.e4.core.di_1.5.0.v20150421-2214.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.e4.core.di.annotations_1.4.0.v20150528-1451.jar"/> - <pathelement path="${buildDirectory}/nestedJars/org.eclipse.e4.core.services_2.0.0.v20150403-1912/injection_annotations.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.e4.core.services_2.0.0.v20150403-1912.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.e4.ui.workbench_1.3.1.v20160203-0951.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.e4.ui.model.workbench_1.1.100.v20150407-1430.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.emf.ecore_2.11.2.v20160208-0816.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.emf.common_2.11.1.v20160208-0816.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.core.resources_3.10.1.v20150725-1910.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.ant.core_3.4.0.v20150428-1928.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.core.variables_3.2.800.v20130819-1716.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.core.filesystem_1.5.0.v20150725-1910.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.core.filesystem.java7_1.0.100.v20150423-0754.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.core.filesystem.linux.x86_64_1.2.200.v20140124-1940.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.e4.emf.xpath_0.1.100.v20150513-0856.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.apache.commons.jxpath_1.3.0.v200911051830.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.e4.ui.services_1.2.0.v20150422-0725.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.e4.ui.di_1.1.0.v20150422-0725.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.e4.core.di.extensions_0.13.0.v20150421-2214.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.emf.ecore.change_2.11.0.v20160208-0816.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.emf.ecore.xmi_2.11.1.v20160208-0816.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.e4.ui.workbench.renderers.swt_0.13.0.v20150901-1347.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.e4.ui.workbench.swt_0.13.0.v20150504-0621.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.core.databinding_1.5.0.v20150422-0725.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.core.databinding.observable_1.5.0.v20150422-0725.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.core.databinding.property_1.5.0.v20150422-0725.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.jface.databinding_1.7.0.v20150406-2148.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.e4.ui.css.core_0.11.0.v20150511-1937.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.w3c.css.sac_1.3.1.v200903091627.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.apache.batik.css_1.7.0.v201011041433.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.w3c.dom.events_3.0.0.draft20060413_v201105210656.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.w3c.dom.svg_1.1.0.v201011041433.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.w3c.dom.smil_1.0.1.v200903091627.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.apache.batik.util_1.7.0.v201011041433.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.apache.batik.util.gui_1.7.0.v200903091627.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.e4.ui.css.swt_0.12.0.v20150511-1003.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.e4.ui.bindings_0.11.0.v20150422-0725.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.e4.ui.workbench3_0.13.0.v20150422-0725.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.e4.ui.css.swt.theme_0.10.0.v20150422-0725.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.e4.ui.swt.gtk_1.0.1.v20150708-1529.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.e4.ui.widgets_1.1.0.v20150427-1751.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.equinox.ds_1.4.300.v20150423-1356.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.equinox.util_1.0.500.v20130404-1337.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.equinox.event_1.3.100.v20140115-1647.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.help_3.6.0.v20130326-1254.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.e4.ui.workbench.addons.swt_1.2.0.v20150512-1414.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.ui.ide_3.11.0.v20150825-2158.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.ui.views_3.8.0.v20150422-0725.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.jface.text_3.10.0.v20150603-1752.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.text_3.5.400.v20150505-1044.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.ui.forms_3.6.200.v20150506-2029.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.equinox.p2.engine_2.4.0.v20150511-1532.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.equinox.p2.core_2.4.0.v20150527-1706.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.equinox.p2.metadata_2.3.0.v20150511-1532.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.equinox.p2.metadata.repository_1.2.200.v20150428-1613.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.equinox.p2.repository_2.3.100.v20150428-1613.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.equinox.security_1.2.100.v20150423-1356.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.tukaani.xz_1.3.0.v201308270617.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.ui.editors_3.9.0.v20150213-1939.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.ui.workbench.texteditor_3.9.100.v20141023-1946.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.compare.core_3.5.500.v20150505-1058.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.core.filebuffers_3.5.500.v20140723-1040.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.wst.xml.core_1.1.902.v201501211904.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.apache.xerces_2.9.0.v201101211617.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.apache.xml.resolver_1.2.0.v201005080400.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.apache.xml.serializer_2.7.1.v201005080400.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.wst.common.uriresolver_1.2.200.v201505132009.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.wst.sse.core_1.1.900.v201401092025.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.wst.validation_1.2.700.v201508251749.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.wst.common.frameworks_1.2.200.v201304241450.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.wst.common.environment_1.0.400.v200912181831.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.osgi.util_3.3.100.v20150423-1351.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.wst.common.core_1.2.0.v200908251833.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.wst.common.project.facet.core_1.4.300.v201111030423.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.jem.util_2.1.200.v201404021757.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.wst.common.emf_1.2.400.v201505132009.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.wst.common.emfworkbench.integration_1.2.101.v201107081800.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.emf.edit_2.11.1.v20160208-0841.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.wst.xml.ui_1.1.501.v201501212057.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.wst.sse.ui_1.3.400.v201505141512.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.debug.ui_3.11.101.v20160203-1230.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.ui.console_3.6.100.v20150822-1912.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.debug.core_3.10.0.v20150303-1130.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.search_3.10.0.v20150318-0856.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.ltk.core.refactoring_3.6.201.v20150819-1034.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.ltk.ui.refactoring_3.7.200.v20140625-1835.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.ui.navigator_3.6.0.v20150422-0725.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.compare_3.5.600.v20150420-1449.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.team.core_3.7.100.v20150203-1452.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.team.ui_3.7.200.v20150203-1452.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.wst.common.ui_1.1.500.v200911182011.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.wst.validation.ui_1.2.500.v201310231452.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.wst.common.frameworks.ui_1.2.400.v201504292002.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.ui.navigator.resources_3.5.1.v20160128-1644.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.ui.views.properties.tabbed_3.6.100.v20150423-0822.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.wst.validation.infopop_1.0.300.v201309101952.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.xsd_2.11.0.v20160208-0841.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.wst.xsd.core_1.1.900.v201401141857.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.cdt_8.8.0.201509131935.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.ui.intro_3.4.300.v20141007-1449.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.help.base_4.0.301.v20160212-1500.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.equinox.http.jetty_3.1.2.v20160115-1350.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.equinox.http.servlet_1.2.2.v20160202-2102.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.jetty.http_9.2.13.v20150730.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.jetty.util_9.2.13.v20150730.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.slf4j.api_1.7.2.v20121108-1250.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/ch.qos.logback.slf4j_1.0.7.v201505121915.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.slf4j.impl.log4j12_1.7.2.v20131105-2200.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.apache.log4j_1.2.15.v201012070815.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/ch.qos.logback.core_1.0.7.v20121108-1250.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/ch.qos.logback.classic_1.0.7.v20121108-1250.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.m2e.logback.appender_1.6.2.20150902-0002.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.m2e.core.ui_1.6.2.20150902-0002.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.m2e.core_1.6.2.20150902-0002.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.m2e.maven.runtime_1.6.2.20150902-0001"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.m2e.maven.runtime_1.6.2.20150902-0001/jars/takari-local-repository-0.9.0.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.m2e.maven.runtime_1.6.2.20150902-0001/jars/takari-filemanager-0.7.0.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.m2e.maven.runtime_1.6.2.20150902-0001/jars/maven-core-3.3.3.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.m2e.maven.runtime_1.6.2.20150902-0001/jars/maven-model-3.3.3.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.m2e.maven.runtime_1.6.2.20150902-0001/jars/maven-settings-3.3.3.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.m2e.maven.runtime_1.6.2.20150902-0001/jars/maven-settings-builder-3.3.3.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.m2e.maven.runtime_1.6.2.20150902-0001/jars/maven-builder-support-3.3.3.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.m2e.maven.runtime_1.6.2.20150902-0001/jars/maven-repository-metadata-3.3.3.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.m2e.maven.runtime_1.6.2.20150902-0001/jars/maven-artifact-3.3.3.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.m2e.maven.runtime_1.6.2.20150902-0001/jars/maven-plugin-api-3.3.3.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.m2e.maven.runtime_1.6.2.20150902-0001/jars/maven-model-builder-3.3.3.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.m2e.maven.runtime_1.6.2.20150902-0001/jars/maven-aether-provider-3.3.3.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.m2e.maven.runtime_1.6.2.20150902-0001/jars/aether-api-1.0.2.v20150114.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.m2e.maven.runtime_1.6.2.20150902-0001/jars/aether-util-1.0.2.v20150114.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.m2e.maven.runtime_1.6.2.20150902-0001/jars/plexus-interpolation-1.21.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.m2e.maven.runtime_1.6.2.20150902-0001/jars/plexus-utils-3.0.20.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.m2e.maven.runtime_1.6.2.20150902-0001/jars/plexus-classworlds-2.5.2.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.m2e.maven.runtime_1.6.2.20150902-0001/jars/plexus-component-annotations-1.5.5.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.m2e.maven.runtime_1.6.2.20150902-0001/jars/plexus-sec-dispatcher-1.3.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.m2e.maven.runtime_1.6.2.20150902-0001/jars/maven-embedder-3.3.3.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.m2e.maven.runtime_1.6.2.20150902-0001/jars/plexus-cipher-1.7.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.m2e.maven.runtime_1.6.2.20150902-0001/jars/commons-cli-1.2.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.m2e.maven.runtime_1.6.2.20150902-0001/jars/maven-compat-3.3.3.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.m2e.maven.runtime_1.6.2.20150902-0001/jars/wagon-provider-api-2.9.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.m2e.maven.runtime_1.6.2.20150902-0001/jars/org.eclipse.sisu.plexus-0.3.0.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.m2e.maven.runtime_1.6.2.20150902-0001/jars/cdi-api-1.0.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.m2e.maven.runtime_1.6.2.20150902-0001/jars/jsr250-api-1.0.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.m2e.maven.runtime_1.6.2.20150902-0001/jars/org.eclipse.sisu.inject-0.3.0.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.m2e.maven.runtime_1.6.2.20150902-0001/jars/sisu-guice-3.2.5-no_aop.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.m2e.maven.runtime_1.6.2.20150902-0001/jars/guava-18.0.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.m2e.maven.runtime_1.6.2.20150902-0001/jars/plexus-build-api-0.0.7.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.m2e.maven.runtime_1.6.2.20150902-0001/jars/aether-impl-1.0.2.v20150114.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.m2e.maven.runtime_1.6.2.20150902-0001/jars/aether-spi-1.0.2.v20150114.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.m2e.maven.runtime_1.6.2.20150902-0001/jars/aether-connector-okhttp-0.15.0.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.m2e.maven.runtime_1.6.2.20150902-0001/jars/okhttp-2.3.0.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.m2e.maven.runtime_1.6.2.20150902-0001/jars/okio-1.3.0.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.m2e.maven.runtime_1.6.2.20150902-0001/jars/aether-connector-basic-1.0.2.v20150114.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.m2e.maven.runtime_1.6.2.20150902-0001/jars/aether-transport-wagon-1.0.2.v20150114.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.m2e.maven.runtime_1.6.2.20150902-0001/jars/wagon-file-2.9.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.m2e.maven.runtime_1.6.2.20150902-0001/jars/commons-lang-2.6.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.m2e.maven.runtime.slf4j.simple_1.6.2.20150902-0001"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.m2e.maven.runtime.slf4j.simple_1.6.2.20150902-0001/jars/slf4j-simple-1.7.5.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.m2e.archetype.common_1.6.2.20150902-0001/archetype-common-2.3.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.m2e.archetype.common_1.6.2.20150902-0001/archetype-catalog-2.3.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.m2e.archetype.common_1.6.2.20150902-0001/archetype-descriptor-2.3.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.m2e.archetype.common_1.6.2.20150902-0001/archetype-registry-2.3.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.m2e.archetype.common_1.6.2.20150902-0001/maven-invoker-2.1.1.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.m2e.archetype.common_1.6.2.20150902-0001/commons-collections-3.1.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.m2e.archetype.common_1.6.2.20150902-0001/commons-io-2.2.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.m2e.archetype.common_1.6.2.20150902-0001/commons-lang-2.1.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.m2e.archetype.common_1.6.2.20150902-0001/dom4j-1.6.1.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.m2e.archetype.common_1.6.2.20150902-0001/jchardet-1.0.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.m2e.archetype.common_1.6.2.20150902-0001/jdom-1.0.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.m2e.archetype.common_1.6.2.20150902-0001/oro-2.0.8.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.m2e.archetype.common_1.6.2.20150902-0001/plexus-velocity-1.1.8.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.m2e.archetype.common_1.6.2.20150902-0001/velocity-1.5.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.m2e.maven.indexer_1.6.2.20150902-0001"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.m2e.maven.indexer_1.6.2.20150902-0001/indexer-core-3.1.0.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.m2e.maven.indexer_1.6.2.20150902-0001/indexer-artifact-3.1.0.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.m2e.maven.indexer_1.6.2.20150902-0001/lucene-core-2.4.1.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.m2e.maven.indexer_1.6.2.20150902-0001/lucene-highlighter-2.4.1.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.m2e.workspace.cli_0.3.1.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/com.google.guava_15.0.0.v201403281430.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.m2e.model.edit_1.6.2.20150902-0002.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.emf.ecore.edit_2.9.0.v20160208-0841.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.jetty.server_9.2.13.v20150730.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.jetty.io_9.2.13.v20150730.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.jetty.servlet_9.2.13.v20150730.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.jetty.security_9.2.13.v20150730.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.apache.lucene.analysis_3.5.0.v20120725-1805.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.apache.lucene.core_3.5.0.v20120725-1805.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.core.net_1.2.300.v20141118-1725.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.core.net.linux.x86_64_1.1.100.v20140124-2013.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.ui.cheatsheets_3.4.200.v20131227-1524.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.help.ui_4.0.100.v20140401-0608.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.cdt.core_5.11.0.201509131935.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.cdt.core.native_5.8.0.201509131935.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.cdt.core.linux_5.3.0.201509131935.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.cdt.core.linux.x86_64_5.3.0.201509131935.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.cdt.ui_5.11.0.201509131935.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.cdt.managedbuilder.ui_8.2.2.201509131935.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.cdt.make.core_7.3.0.201509131935.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.cdt.make.ui_7.2.0.201509131935.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.cdt.managedbuilder.core_8.3.0.201509131935.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.equinox.launcher_1.3.100.v20150511-1540.jar"/> - <pathelement path="../../../../../../../../opt/eclipse/mars/plugins/org.eclipse.equinox.launcher.gtk.linux.x86_64_1.1.300.v20150602-1417"/> - <pathelement path="ext-jars/xalan-2.7.2.jar"/> - <pathelement path="${build.result.folder}/../silecs.eclipse.plugin_1.1.1.201608011414/ext-jars/xalan-2.7.2.jar"/> - <pathelement path="ext-jars/jaxen-1.1.6.jar"/> - <pathelement path="${build.result.folder}/../silecs.eclipse.plugin_1.1.1.201608011414/ext-jars/jaxen-1.1.6.jar"/> - <pathelement path="ext-jars/xml-apis-1.3.04.jar"/> - <pathelement path="${build.result.folder}/../silecs.eclipse.plugin_1.1.1.201608011414/ext-jars/xml-apis-1.3.04.jar"/> - </path> - <!-- compile the source code --> - <javac destdir="${build.result.folder}/@dot" failonerror="${javacFailOnError}" verbose="${javacVerbose}" debug="${javacDebugInfo}" includeAntRuntime="no" bootclasspath="${bundleBootClasspath}" source="${bundleJavacSource}" target="${bundleJavacTarget}" > - <compilerarg line="${compilerArg}" compiler="${build.compiler}"/> - <classpath refid="@dot.classpath" /> - <src path="src/java/" /> - <compilerarg value="@${basedir}/javaCompiler...args" compiler="org.eclipse.jdt.core.JDTCompilerAdapter" /> - <compilerarg line="-log '${build.result.folder}/@dot${logExtension}'" compiler="org.eclipse.jdt.core.JDTCompilerAdapter" /> - </javac> - <antcall target="checkCompilationResults"/> - <!-- Copy necessary resources --> - <copy todir="${build.result.folder}/@dot" failonerror="true" overwrite="false"> - <fileset dir="src/java/"> - <exclude name="**/*.java"/> - <exclude name="**/package.htm*"/> - </fileset> - </copy> - </target> - - <target name="src.zip" depends="init" unless="src.zip"> - <mkdir dir="${build.result.folder}"/> - <antcall target="zip.src.zip"/> - </target> - <target name="zip.src.zip"> - <zip destfile="${build.result.folder}/src.zip" filesonly="false" whenempty="skip" update="false"> - <fileset dir="src/java/"> - <include name="**/*.java"/> - </fileset> - </zip> - </target> - <target name="copy.src.zip"> - <copy todir="${source.destination.folder}/" failonerror="true" overwrite="true"> - <fileset dir="src/java/"> - <include name="**/*.java"/> - </fileset> - </copy> - </target> - - <target name="build.jars" depends="init" description="Compile classes and build nested jars for the plug-in: silecs.eclipse.plugin."> - <delete file="${compilation.problem.marker}" quiet="true"/> - <available property="@dot" file="${build.result.folder}/@dot"/> - <antcall target="@dot"/> - </target> - - <target name="checkCompilationResults" if="compilation.error.occured"> - <echo file="${compilation.problem.marker}" message="silecs.eclipse.plugin_1.1.1.201608011414${line.separator}compilation.error.occured=${compilation.error.occured}"/> - <eclipse.logCompileError log="${compilation.prereq.log}" bundle="silecs.eclipse.plugin_1.1.1.201608011414"> - </eclipse.logCompileError> - </target> - - <target name="build.sources" depends="init"> - <available property="src.zip" file="${build.result.folder}/src.zip"/> - <antcall target="src.zip"/> - </target> - - <target name="publish.bin.parts" depends="init" if="p2.publish.parts" unless="compilation.problem.marker.exists"> - <mkdir dir="${build.result.folder}/silecs.eclipse.plugin_1.1.1.201608011414"/> - <copy todir="${build.result.folder}" failonerror="true" overwrite="true"> - <fileset dir="${basedir}"> - <include name="META-INF/MANIFEST.MF"/> - <include name="plugin.xml"/> - <include name="fragment.xml"/> - </fileset> - </copy> - <eclipse.versionReplacer path="${build.result.folder}" version="1.1.1.201608011414"/> - <antcall target="apitools.generation"> - <param name="projectLocation" value="${basedir}"/> - <param name="binary.folders" value="${build.result.folder}/@dot:/common/home/bel/schwinn/lnx/git/git/silecs-eclipse-plugin/ext-jars/xml-apis-1.3.04.jar:/common/home/bel/schwinn/lnx/git/git/silecs-eclipse-plugin/ext-jars/jaxen-1.1.6.jar:/common/home/bel/schwinn/lnx/git/git/silecs-eclipse-plugin/ext-jars/xalan-2.7.2.jar"/> - <param name="projectName" value="${bundleId}_${bundleVersion}"/> - <param name="target.folder" value="${build.result.folder}"/> - </antcall> - <eclipse.gatherBundle - metadataRepository="${p2.build.repo}" - artifactRepository="${p2.build.repo}" - buildResultFolder="${build.result.folder}" - unpack="false" - baseDirectory="${basedir}" - /> - </target> - - <target name="gather.bin.parts" depends="init" if="destination.temp.folder"> - <mkdir dir="${destination.temp.folder}/silecs.eclipse.plugin_1.1.1.201608011414"/> - <copy todir="${destination.temp.folder}/silecs.eclipse.plugin_1.1.1.201608011414" failonerror="true" overwrite="false"> - <fileset dir="${build.result.folder}/@dot"> - <include name="**"/> - </fileset> - </copy> - <copy todir="${destination.temp.folder}/silecs.eclipse.plugin_1.1.1.201608011414" failonerror="true" overwrite="true"> - <fileset dir="${basedir}"> - <include name="plugin.xml"/> - <include name="META-INF/"/> - <include name="icons/"/> - <include name="JNLP-INF/"/> - <include name="src/java/"/> - <include name="OSGI-INF/"/> - <include name="ext-jars/xml-apis-1.3.04.jar"/> - <include name="ext-jars/xalan-2.7.2.jar"/> - <include name="ext-jars/serializer-2.7.2.jar"/> - <include name="jaxen-1.1.6.jar"/> - <include name="xalan-2.7.2.jar"/> - </fileset> - </copy> - <eclipse.versionReplacer path="${destination.temp.folder}/silecs.eclipse.plugin_1.1.1.201608011414" version="1.1.1.201608011414"/> - <antcall target="apitools.generation"> - <param name="projectLocation" value="${basedir}"/> - <param name="binary.folders" value="${build.result.folder}/@dot:/common/home/bel/schwinn/lnx/git/git/silecs-eclipse-plugin/ext-jars/xml-apis-1.3.04.jar:/common/home/bel/schwinn/lnx/git/git/silecs-eclipse-plugin/ext-jars/jaxen-1.1.6.jar:/common/home/bel/schwinn/lnx/git/git/silecs-eclipse-plugin/ext-jars/xalan-2.7.2.jar"/> - <param name="projectName" value="${bundleId}_${bundleVersion}"/> - <param name="target.folder" value="${destination.temp.folder}/silecs.eclipse.plugin_1.1.1.201608011414"/> - </antcall> - </target> - - <target name="build.zips" depends="init"> - </target> - - <target name="gather.sources" depends="init" if="destination.temp.folder"> - <mkdir dir="${destination.temp.folder}/silecs.eclipse.plugin_1.1.1.201608011414"/> - <copy file="${build.result.folder}/src.zip" todir="${destination.temp.folder}/silecs.eclipse.plugin_1.1.1.201608011414" failonerror="false" overwrite="false"/> - <antcall target="copy.src.includes"> - <param name="source.destination.folder" value="${destination.temp.folder}/silecs.eclipse.plugin_1.1.1.201608011414"/> - </antcall> - </target> - - <target name="gather.individual.sources" depends="init"> - <antcall target="copy.src.zip"> - <param name="source.destination.folder" value="${destination.temp.folder}"/> - </antcall> - <antcall target="copy.src.includes"> - <param name="source.destination.folder" value="${destination.temp.folder}"/> - </antcall> - </target> - - <target name="copy.src.includes" depends="init"> - <copy todir="${source.destination.folder}" failonerror="false" overwrite="false"> - <fileset dir="${basedir}"> - <include name="src/"/> - </fileset> - </copy> - </target> - - <target name="gather.logs" depends="init" if="destination.temp.folder"> - <mkdir dir="${destination.temp.folder}/silecs.eclipse.plugin_1.1.1.201608011414"/> - <copy todir="${destination.temp.folder}/silecs.eclipse.plugin_1.1.1.201608011414" failonerror="false" overwrite="false"> - <fileset dir="${build.result.folder}"> - <include name="@dot${logExtension}"/> - </fileset> - </copy> - </target> - - <target name="clean" depends="init" description="Clean the plug-in: silecs.eclipse.plugin of all the zips, jars and logs created."> - <delete dir="${build.result.folder}/@dot"/> - <delete file="${build.result.folder}/src.zip"/> - <delete file="${plugin.destination}/silecs.eclipse.plugin_1.1.1.201608011414.jar"/> - <delete file="${plugin.destination}/silecs.eclipse.plugin_1.1.1.201608011414.zip"/> - <delete dir="${temp.folder}"/> - <delete file="${compilation.problem.marker}" quiet="true"/> - </target> - - <target name="refresh" depends="init" if="eclipse.running" description="Refresh this folder."> - <eclipse.convertPath fileSystemPath="/common/home/bel/schwinn/lnx/git/git/silecs-eclipse-plugin" property="resourcePath"/> - <eclipse.refreshLocal resource="${resourcePath}" depth="infinite"/> - </target> - - <target name="zip.plugin" depends="init" description="Create a zip containing all the elements for the plug-in: silecs.eclipse.plugin."> - <delete dir="${temp.folder}"/> - <mkdir dir="${temp.folder}"/> - <antcall target="build.jars"/> - <antcall target="build.sources"/> - <antcall target="gather.bin.parts"> - <param name="destination.temp.folder" value="${temp.folder}/"/> - </antcall> - <antcall target="gather.sources"> - <param name="destination.temp.folder" value="${temp.folder}/"/> - </antcall> - <delete> - <fileset dir="${temp.folder}"> - <include name="**/*.bin${logExtension}"/> - </fileset> - </delete> - <zip destfile="${plugin.destination}/silecs.eclipse.plugin_1.1.1.201608011414.zip" basedir="${temp.folder}" filesonly="true" whenempty="skip" update="false"/> - <delete dir="${temp.folder}"/> - </target> - - <target name="apitools.generation" if="generateAPIDescription"> - <apitooling.apigeneration projectName="${projectName}" project="${projectLocation}" binary="${binary.folders}" target="${target.folder}" extramanifests="${extraManifests}" allownonapiproject="${allowNonApiProject}" /> - </target> - -</project> diff --git a/silecs-eclipse-plugin/icons/class-document.png b/silecs-eclipse-plugin/icons/class-document.png deleted file mode 100644 index 80984b14d8f98dba890f8e9e56b08f7c642ba50c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1035 zcmWksO^6m$6g@L0qt;-Wpoab6K#shE<fMyAnB*J2nSKTteTgkBTHHkuBr^~M$<qup zh@eeetECiA5JrfIX3-B(*;R(>fwXFq5V;Yeh>+8p#eJ81FT8v1Ip^%bx#9SRyEgzB zpPd=Z_k8DStXtFH$%i%`>S<(Qes};EukQE*82#(u(}$;f6ChxK0|5vLNJKIuM+zh% z1DVK%?8t#E6rd2rP#h&tgbGxm8mglPs?dN&G(&T=KvVx4B4m(50rjHqCSimV(PvCx zB9k#WQ!t4c%w#rZXAWkufQ2l^;w-@;R<M%QSe-Rk#RfLA8Jn{On<!AEjB+Zdj-#JV zgBjcq9hN0nq9wEBmco)O!!j+KWw#ubWd&Af#jLoMup+ClN~>not%g-ugEd++Yi=#9 z$pjNkW^z-QIt86^I?UmY=!|%RCwekZ?kPOUGd$C?d3Mj?Szh3UUd)So2`};ruk>nO z-D`N2H+Z8r^XA^dn_O_wWiEGxtFzz5X21d-h%QDXL}Db1<dGthA|o;*TV#(Mkrf3| z7{#J^l!&6Jh{~uI)uTpKMME@3vuGYIqA7$BLl*K-gtTgeu12S%<Lbk1g#;xknUX7o zl9ZuLWm9(LP?ic*sA4Lv5-L)KDpgI@RYO&3P@|fuxmu{LF6&0?YIn-}-Mv2h==UFY z*N-gD&mF?l^=sV+7<uuj;Q(jW-ZRsS^{>txT>x&sYc)o2?!#@pIkq_a%=FlAqj#(y z-E!rNmA8BA&Dp^dhqwLw&bv#SzL{EgTPqV=Cw2`7dj`YD9(et;iJhO{yZO)OFP&d` z|2QA~@sV5GH-EjbxU&89eGB(LXZwaX);@k=*Y595TzF~em;ZkFYSYV~zW3x$i(AfI z9(#DrsbiDN&z@YKe`RX&#+RR5`e@IU%g5hZeq;aX54P^U$-U=)-9Pv5_-nU*KezG7 Xx6?cR`FrP5hlAPaxxvK)FP!=x3@y|_ diff --git a/silecs-eclipse-plugin/icons/deploy-document.png b/silecs-eclipse-plugin/icons/deploy-document.png deleted file mode 100644 index 894abc409c39559e46105f195802d42f64241321..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1028 zcmWksO^6m$6g}SzgN-^g7||f6n~3lc{oEk2MPK#}GgCPZ<M)Dg5^}`VNX{;!mm)cB zBtq&|&`?422p8={qMudJRfKpDL{J+mYAGeQIK5fice(e%yXT&BHddAwX14F%4q#?! zakSd=>{i@0+24mAzWZoTgVU=Ehj97&o<D(!TPrV&=X(<{fPe!52nk4rL?lNFBq0OY zkcsTbfh-iD7z$AwB~XM4R6`}IqXw$bfM#e!bF@HH{~I!hkV66WqVF~X4Q_}&vjj_K ziI&__SdwK}Hp{f^mcz2Fz=~O+6}J*rWEED;Dy_QJuqtb?X4YuUt%Wt2U@{X;ZVFS! z(a$!5gcH$WF@edL$mC4HBxW!hGnt(^n8gAXV<C&P1dCX~YOG{+)?gJI*o=*A&K7K< zKp92Ksh~OqopE!};g0Bxc!DSML{IK1JjpXWn`e4<&*52K;KjVqi+c$#@(Qo!m0sOz zc$GJJGjH_f-ol$)aG8rPcZI97-^I2710IMjMkGYCNQ~r>B9bB_vPEWOj~tN|1yL*t zqj;2vqNs>!Q5n^vMpQ*ZG>gV)9xb9Ngph?8@=%1dWrVIqr=;WR!)}EHB~zl3D}|Dj zp=`=jcI8l(3RFymDy|YLQiZCiQq@&MRccT(HLAH<sBJClM(b*K%KP2D-Z=REXWjLK z_0{F07~cG;`v8NNpI;c^!qokXy_i0=_|j=$$30sy!22K0_2#zqrNi^vex2AkJ^AP# zpG@uUtusrbXU20szINow%;aM`uU`9f|J6MooZ9>1-Um;fx%B3hw+{b(d-lL^_VZoe z9{Ks7S4S&9Ouuq|{hjgn!j8c&(;r`Yck|BXvHMQ$I{xGn|Ghmo+&r+n@3*sa!+#(D zZt(QEwToX||7z_-yf=Jy?Tv%?p8N9Rc;X{&JoU}({rmoU<n`aD(&BSB*1mq=e8+*M M`Q_2&L&whk59;>LIsgCw diff --git a/silecs-eclipse-plugin/icons/diag-tool.gif b/silecs-eclipse-plugin/icons/diag-tool.gif deleted file mode 100644 index 3748db1fddb2fe61380bac4dc029d6a617236453..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 197 zcmZ?wbhEHb6krfwXc1%h&j3Ua0!07+&rr_*L=XZ*HvyRp43d(P#>U1zK0aw_Y4!E> zGiT1+v}x0sGiRPYefl3SQ2fcl$iN`apaU`mWG4fw(*t!Q70r1sj;rXLUh@3bHhrD& z;@(r7^OkSFmw)`w&zJ+JE=F8Dn&$Lecvb>Og4T-Af~`}x-O>9d@~kf~_2bSOx7p4N F)&S-kU`_x4 diff --git a/silecs-eclipse-plugin/icons/generated-code.gif b/silecs-eclipse-plugin/icons/generated-code.gif deleted file mode 100644 index 18ffabe77f499a954f2ef0d2077da4ff4365e391..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 591 zcmZ?wbhEHb6krfwc*el+|IGh?|2O{ozxm()3;+LZ{{Mf=@2@NW{yhEf>xzG0SN;9E z>fg^Ze}BLJ|M%Uum$SaToc-(5;eUTVyuZ=$;dal*TRk6c_I`V@`^&8fUvBhmSl0Xg z?Ta@js=nOc`1WM&`Xznu-@aV8xPR@E$&WXszS^DpYFFOz{hLl4*!*O3`s0lmuXp9W z+Evh9=+j*s`0m1zovWw+{`lzF{;e+_-{~$4=qe1}xoSpFVQ_ar@YxwDy#+z1_isM2 zZ_A5EcfNf3@b%M&Q+qa-C4`nHMwBFkuWc*c&{np-wRBy3MR`I*X<}4KLga?FijD1+ zYul^VE|{}s!JLh)6`R^BH?>u7Y^^F!h$@SZEQybLeE(i~T;$q$v)9a@Qyw2(78mvZ z|9=KL0>z&!j0_CX3_2h?L2<&szNR6%smUqGueqbyIm*C~#ns9!u(Qd5$;_SA$AsB; zO0<DC_hNQlLmP%pKj%mR`A~VD*7goZAqlb2?%w{1lcPPoB4nhd&0q~OW^`{>)zjBs z$i>CU#$ja89HeW#I+9<(L6I-mC7{VW+;*FUsDogTu(*hQ2gAV-Svhw}X?IUojj0I> vn~rdZYG(cTp~A|_r=q^(hJfIc%R<_gU3UtSm`+aiZ=Upr*|R7>fx#L8Moafv diff --git a/silecs-eclipse-plugin/icons/silecs-logo.ico b/silecs-eclipse-plugin/icons/silecs-logo.ico deleted file mode 100644 index 2b22b71097787713417cae9933d9604b169ea962..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15086 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 aNMJ$&6B77tBrtp)i2oBsnz(=8a`=C-`vvd- diff --git a/silecs-eclipse-plugin/icons/validate-document.gif b/silecs-eclipse-plugin/icons/validate-document.gif deleted file mode 100644 index 23c97f09e677bb8812b26d4415fd97997e5c95a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 76 zcmZ?wbhEHb6krfwn8?f!yfVYEKB{JS)&Kwh6@RiYGB7YR=r8~QNS=X7c257w({Jy) dG&pl*gzr#W|He>ggQJQAZ^o%@>w*~=tO0mX7=r)+ diff --git a/silecs-eclipse-plugin/plugin.xml b/silecs-eclipse-plugin/plugin.xml deleted file mode 100644 index 8784193..0000000 --- a/silecs-eclipse-plugin/plugin.xml +++ /dev/null @@ -1,874 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<?eclipse version="4.5"?> -<plugin> - <extension - id="application" - point="org.eclipse.core.runtime.applications"> - <application> - <run - class="cern.silecs.view.Application"> - </run> - </application> - </extension> - <extension - point="org.eclipse.core.resources.natures" - id="cern.fesa.plugin.core.fesaClassProjectNature" - name="cern.fesa.plugin.core.fesaClassProjectNature"> - </extension> - - <extension - point="org.eclipse.ui.perspectives"> - <perspective - class="cern.silecs.view.Perspective" - fixed="false" - id="silecs.eclipse.plugin.perspective" - name="Silecs"> - </perspective> - </extension> - <extension - point="org.eclipse.ui.perspectiveExtensions"> - <perspectiveExtension - targetID="silecs.eclipse.plugin.perspective"> - <view - closeable="false" - id="cern.silecs.view.explorer" - minimized="false" - moveable="false" - ratio="0.25" - relationship="left" - relative="org.eclipse.ui.editorss" - visible="true"> - </view> - <view - closeable="false" - id="org.eclipse.ui.views.ProblemView" - minimized="false" - ratio="0.8f" - relationship="bottom" - relative="org.eclipse.ui.editorss" - visible="true"> - </view> - <view - closeable="false" - id="org.eclipse.ui.console.ConsoleView" - minimized="false" - relationship="stack" - relative="org.eclipse.ui.views.ProblemView"> - </view> - <view - closeable="false" - id="org.eclipse.wst.xml.ui.views.annotations.XMLAnnotationsView" - minimized="false" - relationship="stack" - relative="org.eclipse.ui.views.ProblemView" - visible="true"> - </view> - </perspectiveExtension> - </extension> - <extension - point="org.eclipse.ui.ide.projectNatureImages"> - <image - icon="icons/deploy-document.png" - id="cern.silecs.control.core.DeployProjectNature.img" - natureId="cern.silecs.control.core.deployprojectnature"> - </image> - <image - icon="icons/class-document.png" - id="cern.silecs.control.core.DesignProjectNature.img" - natureId="cern.silecs.control.core.designprojectnature"> - </image> - </extension> - <extension - id="deployprojectnature" - point="org.eclipse.core.resources.natures"> - <runtime> - <run - class="cern.silecs.control.core.DeployProjectNature"> - </run> - </runtime> - </extension> - <extension - point="org.eclipse.ui.commands"> - <category - id="cern.silecs.view.category" - name="Cat"> - </category> - <command - categoryId="cern.silecs.view.category" - defaultHandler="cern.silecs.control.handlers.ValidateHandler" - id="cern.silecs.control.handlers.validate" - name="SILECS Validate"> - <commandParameter - id="silecs-eclipse-plugin.commandParameter" - name="silecs-eclipse-plugin.commandParameter" - optional="false"> - </commandParameter> - </command> - <command - categoryId="cern.silecs.view.category" - defaultHandler="cern.silecs.control.handlers.GenerateCodeHandler" - id="cern.silecs.control.handlers.generatecodehandler" - name="SILECS Generate Code"> - <commandParameter - id="silecs-eclipse-plugin.commandParameter" - name="silecs-eclipse-plugin.commandParameter" - optional="false"> - </commandParameter> - </command> - <command - categoryId="cern.silecs.view.category" - defaultHandler="cern.silecs.control.handlers.AboutSilecsHandler" - id="cern.silecs.control.handlers.aboutsilecs" - name="About Silecs"> - </command> - <command - categoryId="cern.silecs.view.category" - defaultHandler="cern.silecs.control.handlers.SilecsWikis" - id="cern.silecs.control.handlers.silecswikis" - name="Silecs Wikis"> - </command> - <command - categoryId="cern.silecs.view.category" - defaultHandler="cern.silecs.control.handlers.ExpandAllHandler" - id="cern.silecs.control.handlers.expandallhandler" - name="Expand All"> - </command> - <command - categoryId="cern.silecs.view.category" - defaultHandler="cern.silecs.control.handlers.DiagnosticToolHandler" - id="cern.silecs.control.handlers.launchdiagnostitoolhandler" - name="SILECS Diagnostic Tool"> - <commandParameter - id="silecs-eclipse-plugin.commandParameter" - name="silecs-eclipse-plugin.commandParameter" - optional="false"> - </commandParameter> - </command> - <command - categoryId="cern.silecs.view.category" - defaultHandler="cern.silecs.control.handlers.UpdateSilecsProjectHandler" - id="cern.silecs.control.handlers.updatesilecsprojecthandler" - name="SILECS Update Project"> - <commandParameter - id="silecs-eclipse-plugin.commandParameter" - name="silecs-eclipse-plugin.commandParameter" - optional="false"> - </commandParameter> - </command> - </extension> - <extension - point="org.eclipse.ui.menus"> - <menuContribution - locationURI="menu:org.eclipse.ui.main.menu"> - <menu - label="Silecs"> - <command - commandId="cern.silecs.control.handlers.silecswikis" - label="Silecs wikis" - style="push"> - </command> - <command - commandId="cern.silecs.control.handlers.aboutsilecs" - label="About Silecs" - style="push"> - </command> - - <visibleWhen - checkEnabled="false"> - <reference - definitionId="cern.silecs.view.perspectivedefinition"> - </reference> - </visibleWhen> - </menu> - - </menuContribution> - <menuContribution - locationURI="toolbar:org.eclipse.ui.main.toolbar"> - <toolbar - id="cern.silecs.view.toolbars.projectFunctions" - label="SILECS Toolbar"> - <command - commandId="cern.silecs.control.handlers.validate" - icon="icons/validate-document.gif" - label="SILECS Validate" - style="push"> - <visibleWhen - checkEnabled="false"> - <or> - <reference - definitionId="cern.silecs.view.editors.design.activeEditor"> - </reference> - <reference - definitionId="cern.silecs.view.editors.deploy.activeEditor"> - </reference> - </or> - </visibleWhen> - <parameter - name="silecs-eclipse-plugin.commandParameter" - value="toolbar"> - </parameter> - </command> - <command - commandId="cern.silecs.control.handlers.generatecodehandler" - icon="icons/generated-code.gif" - label="SILECS Generate Code" - style="push"> - <visibleWhen - checkEnabled="false"> - <or> - <reference - definitionId="cern.silecs.view.editors.design.activeEditor"> - </reference> - <reference - definitionId="cern.silecs.view.editors.deploy.activeEditor"> - </reference> - </or> - </visibleWhen> - <parameter - name="silecs-eclipse-plugin.commandParameter" - value="toolbar"> - </parameter> - </command> - <command - commandId="cern.silecs.control.handlers.launchdiagnostitoolhandler" - icon="icons/diag-tool.gif" - label="SILECS Diagnostic Tool" - style="push"> - <visibleWhen - checkEnabled="false"> - <reference - definitionId="cern.silecs.view.editors.deploy.activeEditor"> - </reference> - </visibleWhen> - <parameter - name="silecs-eclipse-plugin.commandParameter" - value="toolbar"> - </parameter> - </command> - </toolbar> - </menuContribution> - <menuContribution - allPopups="false" - locationURI="popup:org.eclipse.ui.navigator.ProjectExplorer#PopupMenu?after=additions"> - <menu - id="silecs_submenu" - label="SILECS"> - <command - commandId="cern.silecs.control.handlers.validate" - label="SILECS Validate" - style="push"> - <visibleWhen - checkEnabled="false"> - <or> - <reference - definitionId="cern.silecs.control.core.designprojectdefinition"> - </reference> - <reference - definitionId="cern.silecs.control.core.deployprojectdefinition"> - </reference> - <reference - definitionId="cern.silecs.menu.designFile"> - </reference> - <reference - definitionId="cern.silecs.menu.deployFile"> - </reference> - </or> - </visibleWhen> - <parameter - name="silecs-eclipse-plugin.commandParameter" - value="menubar"> - </parameter> - </command> - <command - commandId="cern.silecs.control.handlers.generatecodehandler" - label="SILECS Generate Code" - style="push"> - <visibleWhen - checkEnabled="false"> - <or> - <reference - definitionId="cern.silecs.control.core.designprojectdefinition"> - </reference> - <reference - definitionId="cern.silecs.control.core.deployprojectdefinition"> - </reference> - <reference - definitionId="cern.silecs.menu.designFile"> - </reference> - <reference - definitionId="cern.silecs.menu.deployFile"> - </reference> - </or> - </visibleWhen> - <parameter - name="silecs-eclipse-plugin.commandParameter" - value="menubar"> - </parameter> - </command> - <command - commandId="cern.silecs.control.handlers.launchdiagnostitoolhandler" - label="SILECS Diagnostic Tool" - style="push"> - <visibleWhen - checkEnabled="false"> - <or> - <reference - definitionId="cern.silecs.control.core.deployprojectdefinition"> - </reference> - <reference - definitionId="cern.silecs.menu.deployFile"> - </reference> - </or> - </visibleWhen> - <parameter - name="silecs-eclipse-plugin.commandParameter" - value="menubar"> - </parameter> - </command> - <command - commandId="cern.silecs.control.handlers.updatesilecsprojecthandler" - label="Update SILECS version" - style="push"> - <visibleWhen - checkEnabled="false"> - <or> - <reference - definitionId="cern.silecs.control.core.designprojectdefinition"> - </reference> - <reference - definitionId="cern.silecs.control.core.deployprojectdefinition"> - </reference> - <reference - definitionId="cern.silecs.menu.designFile"> - </reference> - <reference - definitionId="cern.silecs.menu.deployFile"> - </reference> - </or> - </visibleWhen> - <parameter - name="silecs-eclipse-plugin.commandParameter" - value="menubar"> - </parameter> - </command> - </menu> - </menuContribution> - <menuContribution - allPopups="false" - locationURI="popup:cern.silecs.view.explorer#PopupMenu?after=additions"> - <menu - id="silecs_submenu" - label="SILECS"> - </menu> - </menuContribution> - </extension> - <extension - point="org.eclipse.ui.editors"> - <editor - class="cern.silecs.view.editor.DesignMultiPageEditor" - contributorClass="org.eclipse.wst.xml.ui.internal.tabletree.XMLMultiPageEditorActionBarContributor" - default="true" - icon="icons/class-document.png" - extensions="xml" - filenames="silecsdesign" - id="cern.silecs.view.editors.design" - name="XML Editor"> - <contentTypeBinding - contentTypeId="cern.silecs.model.contenttype.design"> - </contentTypeBinding> - </editor> - <editor - class="cern.silecs.view.editor.DeployMultiPageEditor" - contributorClass="org.eclipse.wst.xml.ui.internal.tabletree.XMLMultiPageEditorActionBarContributor" - default="true" - icon="icons/deploy-document.png" - extensions="xml" - filenames="silecsdeploy" - id="cern.silecs.view.editors.deploy" - name="XML Editor"> - <contentTypeBinding - contentTypeId="cern.silecs.model.contenttype.deploy"> - </contentTypeBinding> - </editor> - </extension> - <extension - id="designprojectnature" - point="org.eclipse.core.resources.natures"> - <runtime> - <run - class="cern.silecs.control.core.DesignProjectNature"> - </run> - </runtime> - </extension> - <extension - id="cern.silecs.view.marker" - name="%silecs.marker.problem" - point="org.eclipse.core.resources.markers"> - <super - type="org.eclipse.core.resources.problemmarker"> - </super> - <persistent - value="false"> - </persistent> - <attribute - name="xPath"> - </attribute> - </extension> - <extension - point="org.eclipse.ui.editors.markerUpdaters"> - <updater - class="cern.silecs.view.marker.SilecsMarkerUpdater" - id="cern.silecs.view.marker.updater" - markerType="cern.silecs.view.marker"> - </updater> - </extension> - <extension - point="org.eclipse.ui.newWizards"> - <category - id="cern.silecs.view.category.wizards" - name="Silecs"> - </category> - <wizard - category="cern.silecs.view.category.wizards" - class="cern.silecs.view.wizards.NewSilecsDesignWizard" - finalPerspective="silecs.eclipse.plugin.perspective" - icon="icons/class-document.png" - id="cern.silecs.view.wizards.newdesignclass" - name="Design" - project="true"> - </wizard> - <wizard - category="cern.silecs.view.category.wizards" - class="cern.silecs.view.wizards.NewSilecsDeployWizard" - finalPerspective="silecs.eclipse.plugin.perspective" - icon="icons/deploy-document.png" - id="cern.silecs.view.wizards.newdeployclass" - name="Deploy" - project="true"> - </wizard> - </extension> - <extension - id="product" - point="org.eclipse.core.runtime.products"> - <product - application="silecs.eclipse.plugin.application" - name="Silecs-Eclipse-Plugin 1.1.1"> - <property - name="appName" - value="Silecs-Eclipse-Plugin 1.1.1"> - </property> - </product> - </extension> - <extension - point="org.eclipse.ui.importWizards"> - <category - id="cern.silecs.view.category.wizards" - name="Silecs"> - </category> - <wizard - category="cern.silecs.view.category.wizards" - class="cern.silecs.view.wizards.ImportDeployFileWizard" - icon="icons/deploy-document.png" - id="cern.silecs.view.wizards.importdeploywizard" - name="Import Silecs-1 Deploy-Unit File"> - </wizard> - <wizard - category="cern.silecs.view.category.wizards" - class="cern.silecs.view.wizards.ImportDesignFileWizard" - icon="icons/class-document.png" - id="cern.silecs.view.wizards.importdesignfilewizard" - name="Import Silecs-1 Design File"> - </wizard> - </extension> - <extension - point="org.eclipse.team.core.fileTypes"> - <fileTypes - extension="*.silecsdesign" - type="text"> - </fileTypes> - <fileTypes - extension="*.silecsdeploy" - type="text"> - </fileTypes> - </extension> - <extension - point="org.eclipse.core.contenttype.contentTypes"> - <content-type - base-type="org.eclipse.core.runtime.xml" - file-extensions="silecsdesign" - id="cern.silecs.model.contenttype.design" - name="Design"> - </content-type> - <content-type - base-type="org.eclipse.core.runtime.xml" - file-extensions="silecsdeploy" - id="cern.silecs.model.contenttype.deploy" - name="Deploy"> - </content-type> - </extension> - <extension - point="org.eclipse.core.expressions.definitions"> - <definition id="cern.silecs.designFile"> - <iterate ifEmpty="false"> - <adapt - type="org.eclipse.core.resources.IFile"> - <test - property="org.eclipse.core.resources.extension" - value="silecsdesign"> - </test> - </adapt> - </iterate> - </definition> - - <definition id="cern.silecs.deployFile"> - <iterate ifEmpty="false"> - <adapt - type="org.eclipse.core.resources.IFile"> - <test - property="org.eclipse.core.resources.extension" - value="silecsdeploy"> - </test> - </adapt> - </iterate> - </definition> - - <definition - id="cern.silecs.menu.designFile"> - <with - variable="activeMenuSelection"> - <reference - definitionId="cern.silecs.designFile"> - </reference> - </with> - </definition> - - <definition - id="cern.silecs.menu.deployFile"> - <with - variable="activeMenuSelection"> - <reference - definitionId="cern.silecs.deployFile"> - </reference> - </with> - </definition> - - <definition - id="cern.silecs.control.core.deployprojectdefinition"> - <iterate - ifEmpty="false"> - <adapt - type="org.eclipse.core.resources.IProject"> - <test - property="org.eclipse.core.resources.projectNature" - value="cern.silecs.control.core.deployprojectnature"> - </test> - </adapt> - </iterate> - </definition> - <definition - id="cern.silecs.control.core.designprojectdefinition"> - <iterate - ifEmpty="false"> - <adapt - type="org.eclipse.core.resources.IProject"> - <test - property="org.eclipse.core.resources.projectNature" - value="cern.silecs.control.core.designprojectnature"> - </test> - </adapt> - </iterate> - </definition> - <definition - id="cern.silecs.view.editors.design.activeEditor"> - <with variable="activeEditorId"> - <equals - value="cern.silecs.view.editors.design"> - </equals> - </with> - </definition> - <definition - id="cern.silecs.view.editors.deploy.activeEditor"> - <with variable="activeEditorId"> - <equals - value="cern.silecs.view.editors.deploy"> - </equals> - </with> - </definition> - <definition - id="cern.silecs.view.perspectivedefinition"> - <with - variable="activeWorkbenchWindow.activePerspective"> - <equals - value="silecs.eclipse.plugin.perspective"> - </equals> - </with> - </definition> - </extension> - <extension - point="org.eclipse.ui.decorators"> - <decorator - adaptable="true" - class="org.eclipse.cdt.internal.ui.navigator.CNavigatorProblemsLabelDecorator" - id="cern.silecs.view.decorators.ErrorDecorator" - label="Project error decorator" - lightweight="true" - location="BOTTOM_LEFT" - objectClass="org.eclipse.core.resources.IResource" - state="true"> - <enablement> - <and> - <objectClass - name="org.eclipse.core.resources.IResource"> - </objectClass> - <or> - <objectClass - name="org.eclipse.core.resources.IFolder"> - </objectClass> - <objectClass - name="org.eclipse.core.resources.IFile"> - </objectClass> - </or> - </and> - </enablement> - </decorator> - </extension> - <extension - point="org.eclipse.ui.bindings"> - <scheme - id="cern.silecs.control.bindingscheme" - name="Binding scheme"> - </scheme> - <key - commandId="cern.silecs.control.handlers.expandallhandler" - contextId="org.eclipse.ui.contexts.window" - schemeId="org.eclipse.ui.defaultAcceleratorConfiguration" - sequence="M1+M2+A"> - </key> - </extension> - <extension - point="org.eclipse.ui.views"> - <category - id="cern.silecs.view.ui" - name="Silecs"> - </category> - <view - category="cern.silecs.view.ui" - class="cern.silecs.view.explorer.SilecsProjectExplorer" - icon="icons/silecs-logo.ico" - id="cern.silecs.view.explorer" - name="Silecs Explorer" - restorable="true"> - </view> - </extension> - <extension - point="org.eclipse.ui.navigator.navigatorContent"> - <commonFilter - activeByDefault="true" - id="cern.silecs.view.explorer.filter.hiddenfiles" - name=".* resources" - visibleInUI="true"> - <filterExpression> - <and> - <adapt - type="org.eclipse.core.resources.IResource"> - <test - property="org.eclipse.core.resources.name" - value=".*"> - </test> - </adapt> - </and> - </filterExpression> - </commonFilter> - <navigatorContent - activeByDefault="true" - contentProvider="cern.silecs.view.explorer.ProjectContent" - id="cern.silecs.view.explorer.content" - labelProvider="org.eclipse.ui.model.WorkbenchLabelProvider" - name="Silecs Project Content" - priority="normal"> - <triggerPoints> - <or> - <adapt - type="org.eclipse.core.resources.IWorkspaceRoot"> - </adapt> - <adapt - type="org.eclipse.core.resources.IFolder"> - </adapt> - <adapt - type="org.eclipse.core.resources.IProject"> - <or> - <test - property="org.eclipse.core.resources.projectNature" - value="cern.silecs.control.core.DesignProjectNature"> - </test> - <test - property="org.eclipse.core.resources.projectNature" - value="cern.silecs.control.core.DeployProjectNature"> - </test> - </or> - </adapt> - </or> - </triggerPoints> - <possibleChildren> - <or> - <adapt - type="org.eclipse.core.resources.IProject"> - </adapt> - <adapt - type="org.eclipse.core.resources.IFolder"> - </adapt> - <adapt - type="org.eclipse.core.resources.IFile"> - </adapt> - </or> - </possibleChildren> - <commonSorter - class="cern.silecs.view.explorer.ContentSorter" - id="cern.silecs.view.explorer.sorter.ContentSorter"> - </commonSorter> - <dropAssistant - class="org.eclipse.cdt.internal.ui.navigator.CNavigatorDropAdapterAssistant" - id="cern.silecs.view.explorer.resourceDropAdapter"> - <possibleDropTargets> - <or> - <adapt - type="org.eclipse.core.resources.IProject"> - </adapt> - <adapt - type="org.eclipse.core.resources.IFolder"> - </adapt> - <adapt - type="org.eclipse.core.resources.IFile"> - </adapt> - </or></possibleDropTargets> - </dropAssistant> - <actionProvider - class="org.eclipse.cdt.internal.ui.navigator.CNavigatorEditActionProvider" - id="cern.silecs.view.explorer.actions.EditActions"> - </actionProvider> - <actionProvider - class="org.eclipse.cdt.internal.ui.navigator.CNavigatorRefactorActionProvider" - id="cern.silecs.view.explorer.actions.RefactorActions"> - </actionProvider> - </navigatorContent> - </extension> - <extension - point="org.eclipse.ui.navigator.viewer"> - <viewer - viewerId="cern.silecs.view.explorer"> - <popupMenu - allowsPlatformContributions="true" - id="cern.silecs.view.explorer#PopupMenu"> - <insertionPoint - name="group.new" - separator="true"> - </insertionPoint> - <insertionPoint - name="group.goto"> - </insertionPoint> - <insertionPoint - name="group.open" - separator="true"> - </insertionPoint> - <insertionPoint - name="group.openwith"> - </insertionPoint> - <insertionPoint - name="silecs" - separator="true"> - </insertionPoint> - <insertionPoint - name="group.edit" - separator="true"> - </insertionPoint> - <insertionPoint - name="group.reorganize" - separator="true"> - </insertionPoint> - <insertionPoint - name="group.port" - separator="true"> - </insertionPoint> - <insertionPoint - name="group.generate" - separator="true"> - </insertionPoint> - <insertionPoint - name="group.search" - separator="true"> - </insertionPoint> - <insertionPoint - name="group.build" - separator="true"> - </insertionPoint> - <insertionPoint - name="additions" - separator="true"> - </insertionPoint> - <insertionPoint - name="group.properties" - separator="true"> - </insertionPoint> - </popupMenu> - </viewer> - <viewerContentBinding - viewerId="cern.silecs.view.explorer"> - <includes> - <contentExtension - isRoot="true" - pattern="cern.silecs.view.explorer.content"> - </contentExtension> - <contentExtension - pattern="cern.silecs.view.explorer.filter.*"> - </contentExtension> - <contentExtension - pattern="org.eclipse.ui.navigator.resources.linkHelper"> - </contentExtension> - <contentExtension - pattern="org.eclipse.ui.navigator.resources.filters.workingSet"> - </contentExtension> - </includes> - </viewerContentBinding> - <viewerActionBinding - viewerId="cern.silecs.view.explorer"> - <includes> - <actionExtension - pattern="org.eclipse.ui.navigator.resources.*"> - </actionExtension> - <actionExtension - pattern="cern.silecs.view.explorer.*"> - </actionExtension> - </includes> - </viewerActionBinding> - <dragAssistant - class="org.eclipse.cdt.internal.ui.navigator.CNavigatorDragAdapterAssistant" - viewerId="cern.silecs.view.explorer"> - </dragAssistant> - </extension> - <extension - point="org.eclipse.core.runtime.preferences"> - <initializer - class="cern.silecs.view.preferences.PreferenceInitializer"> - </initializer> - </extension> - <extension - point="org.eclipse.ui.preferencePages"> - <page - class="cern.silecs.view.preferences.MainPreferencePage" - id="Silecs" - name="Silecs"> - </page> - <page - category="Silecs" - class="cern.silecs.view.preferences.EditorPreferencePage" - id="cern.silecs.plugin.preferences.editor" - name="XML-Editor"> - </page> - <page - category="Silecs" - class="cern.silecs.view.preferences.LoggingPreferencePage" - id="cern.silecs.plugin.preferences.logging" - name="Logging"> - </page> - </extension> -</plugin> diff --git a/silecs-eclipse-plugin/pom.xml b/silecs-eclipse-plugin/pom.xml deleted file mode 100644 index e507277..0000000 --- a/silecs-eclipse-plugin/pom.xml +++ /dev/null @@ -1,136 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> - <modelVersion>4.0.0</modelVersion> - <parent> - <groupId>de.gsi.cs.co</groupId> - <artifactId>csco-parent</artifactId> - <version>1.0.7</version> - </parent> - <groupId>de.gsi.cs.co.fe</groupId> - <artifactId>silecs.eclipse.plugin</artifactId> - <name>silecs-eclipse-plugin</name> - <packaging>eclipse-plugin</packaging> - <version>1.1.1.qualifier</version> - <description>Management of Silecs projects</description> - <url>https://www-acc.gsi.de/wiki/Frontend/SILECS</url> - - <properties> - <tycho-version>0.21.0</tycho-version> - <platform-version-name>mars</platform-version-name> - <eclipse-site>http://download.eclipse.org/releases/${platform-version-name}</eclipse-site> - </properties> - <profiles> - <profile> - <id>platform-mars</id> - <activation> - <property> - <name>platform-version-name</name> - <value>mars</value> - </property> - </activation> - <properties> - <eclipse-site>http://download.eclipse.org/releases/mars</eclipse-site> - <platform-version>[4.4,4.6)</platform-version> - <swtbot-site>http://download.eclipse.org/technology/swtbot/mars/dev-build/update-site</swtbot-site> - </properties> - </profile> - </profiles> - <repositories> - <repository> - <id>default</id> - <url>https://artifacts.acc.gsi.de/nexus/content/repositories/default</url> - </repository> - <repository> - <id>mars</id> - <layout>p2</layout> - <url>${eclipse-site}</url> - </repository> - </repositories> - <dependencies> - <dependency> - <groupId>xalan</groupId> - <artifactId>xalan</artifactId> - <version>2.7.2</version> - </dependency> - <dependency> - <groupId>jaxen</groupId> - <artifactId>jaxen</artifactId> - <version>1.1.6</version> - </dependency> - </dependencies> - <build> - <plugins> - <plugin> - <artifactId>maven-eclipse-plugin</artifactId> - <version>2.10</version> - <configuration> - <pde>true</pde> - </configuration> - </plugin> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-compiler-plugin</artifactId> - <configuration> - <source>1.8</source> - <target>1.8</target> - <compilerVersion>1.8</compilerVersion> - </configuration> - </plugin> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-dependency-plugin</artifactId> - <executions> - <execution> - <id>copy-dependencies</id> - <phase>process-sources</phase> - <goals> - <goal>copy-dependencies</goal> - </goals> - <configuration> - <artifactItems> - <artifactItem> - <groupId>xalan</groupId> - <artifactId>xalan</artifactId> - </artifactItem> - <artifactItem> - <groupId>jaxen</groupId> - <artifactId>jaxen</artifactId> - </artifactItem> - </artifactItems> - <outputDirectory>${basedir}/ext-jars</outputDirectory> - <overWriteReleases>false</overWriteReleases> - <overWriteSnapshots>true</overWriteSnapshots> - </configuration> - </execution> - </executions> - </plugin> - <plugin> - <artifactId>maven-clean-plugin</artifactId> - <version>2.3</version> - <configuration> - <filesets> - <fileset> - <directory>${basedir}/ext-jars</directory> - <includes> - <include>*.jar</include> - </includes> - <followSymlinks>false</followSymlinks> - </fileset> - </filesets> - </configuration> - </plugin> - <plugin> - <groupId>org.eclipse.tycho</groupId> - <artifactId>tycho-maven-plugin</artifactId> - <version>${tycho-version}</version> - <extensions>true</extensions> - <configuration> - <pomDependencies>consider</pomDependencies> - <executionEnvironment>JavaSE-1.8</executionEnvironment> - </configuration> - </plugin> - </plugins> - </build> - -</project> diff --git a/silecs-eclipse-plugin/project.properties b/silecs-eclipse-plugin/project.properties deleted file mode 100644 index 2dbdd52..0000000 --- a/silecs-eclipse-plugin/project.properties +++ /dev/null @@ -1,3 +0,0 @@ -eclipseLocalOverride=true -javadoc.enabled=false -junit.enabled=false \ No newline at end of file diff --git a/silecs-eclipse-plugin/src/java/cern/silecs/activator/Activator.java b/silecs-eclipse-plugin/src/java/cern/silecs/activator/Activator.java deleted file mode 100644 index 3eea8ab..0000000 --- a/silecs-eclipse-plugin/src/java/cern/silecs/activator/Activator.java +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright 2016 CERN and GSI -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -package cern.silecs.activator; - -import org.eclipse.jface.resource.ImageDescriptor; -import org.eclipse.ui.plugin.AbstractUIPlugin; -import org.osgi.framework.BundleContext; - -/** - * The activator class controls the plug-in life cycle - */ -public class Activator extends AbstractUIPlugin { - - // The plug-in ID - public static final String PLUGIN_ID = "silecs.eclipse.plugin"; //$NON-NLS-1$ - - // The shared instance - private static Activator plugin; - - public Activator() { - } - - /* - * (non-Javadoc) - * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext) - */ - @Override - public void start(BundleContext context) throws Exception { - super.start(context); - plugin = this; - } - - /* - * (non-Javadoc) - * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext) - */ - @Override - public void stop(BundleContext context) throws Exception { - plugin = null; - super.stop(context); - } - - public static Activator getDefault() { - return plugin; - } - - /** - * Returns an image descriptor for the image file at the given - * plug-in relative path - * - * @param path the path - * @return the image descriptor - */ - public static ImageDescriptor getImageDescriptor(String path) { - return imageDescriptorFromPlugin(PLUGIN_ID, path); - } -} diff --git a/silecs-eclipse-plugin/src/java/cern/silecs/activator/WebStartLauncher.java b/silecs-eclipse-plugin/src/java/cern/silecs/activator/WebStartLauncher.java deleted file mode 100644 index e3ee96e..0000000 --- a/silecs-eclipse-plugin/src/java/cern/silecs/activator/WebStartLauncher.java +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright 2016 CERN and GSI -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -package cern.silecs.activator; - -import java.util.Properties; -import java.util.Set; - -import org.eclipse.equinox.launcher.WebStartMain; - -/** - * This class is only used by jnlp launcher. - * It is not used locally. - */ -@SuppressWarnings("restriction") -public class WebStartLauncher { - - public static void main(String[] args) { - Properties properties = System.getProperties(); - // copy properties to avoid ConcurrentModificationException - Properties copiedProperties = new Properties(); - copiedProperties.putAll(properties); - Set<Object> keys = copiedProperties.keySet(); - for (Object key : keys) { - if (key instanceof String) { - String keyString = (String) key; - if (keyString.startsWith("jnlp.")) { - // re set all properties starting with the jnlp-prefix - // and set them without the prefix - String property = System.getProperty(keyString); - String replacedKeyString = keyString.replaceFirst("jnlp.", ""); - - System.setProperty(replacedKeyString, property); - } - } - } - - WebStartMain.main(args); - } -} \ No newline at end of file diff --git a/silecs-eclipse-plugin/src/java/cern/silecs/control/core/DeployProjectNature.java b/silecs-eclipse-plugin/src/java/cern/silecs/control/core/DeployProjectNature.java deleted file mode 100644 index 8442589..0000000 --- a/silecs-eclipse-plugin/src/java/cern/silecs/control/core/DeployProjectNature.java +++ /dev/null @@ -1,103 +0,0 @@ -// Copyright 2016 CERN and GSI -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -package cern.silecs.control.core; - -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.IProjectNature; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.NullProgressMonitor; -import org.eclipse.core.runtime.SubProgressMonitor; - -public class DeployProjectNature extends SilecsProjectNature implements IProjectNature { - - private static final String CERN_FESA_PLUGIN_CORE_FESA_DEPLOY_PROJECT_NATURE = "cern.fesa.plugin.core.fesaDeployProjectNature"; - public static final String NATURE_ID = "cern.silecs.control.core.deployprojectnature"; - - public static void addDeployNature(IProject project, IProgressMonitor mon) throws CoreException { - IProgressMonitor monitor = mon; - if (monitor == null) { - monitor = new NullProgressMonitor(); - } - - try { - monitor.beginTask("Add silecs deploy nature", 2); - addNature(project, NATURE_ID, new SubProgressMonitor(monitor, 1)); - addCppNature(project, new SubProgressMonitor(monitor, 1)); - } finally { - monitor.done(); - } - } - - public static void removeDeployNature(IProject project, IProgressMonitor mon) throws CoreException { - IProgressMonitor monitor = mon; - if (monitor == null) { - monitor = new NullProgressMonitor(); - } - - try { - monitor.beginTask("Remove silecs deploy nature", 2); - removeNature(project, NATURE_ID, new SubProgressMonitor(monitor, 1)); - removeCppNature(project, new SubProgressMonitor(monitor, 1)); - } finally { - monitor.done(); - } - } - - public static void convertToDeployNature(IProject project, IProgressMonitor mon) throws CoreException { - IProgressMonitor monitor = mon; - if (monitor == null) { - monitor = new NullProgressMonitor(); - } - - try { - monitor.beginTask("Converting project to silecs deploy nature", 2); - removeAllNatures(project, new SubProgressMonitor(monitor, 1)); - addDeployNature(project, new SubProgressMonitor(monitor, 1)); - } finally { - monitor.done(); - } - } - - public static void addFESADeployUnitNature(IProject project, IProgressMonitor mon) throws CoreException { - IProgressMonitor monitor = mon; - if (mon == null) { - monitor = new NullProgressMonitor(); - } - monitor.beginTask("Adding FESA Class Nature to project", 2); - try { - addNature(project, CERN_FESA_PLUGIN_CORE_FESA_DEPLOY_PROJECT_NATURE, new SubProgressMonitor(monitor, 1)); - addManageBuilderNature(project,mon); - } finally { - monitor.done(); - } - } - - public static void removeFESADeployUnitNature(IProject project, IProgressMonitor mon) throws CoreException { - IProgressMonitor monitor = mon; - if (mon == null) { - monitor = new NullProgressMonitor(); - } - monitor.beginTask("Removing FESA Nature from project", 2); - try { - removeNature(project, CERN_FESA_PLUGIN_CORE_FESA_DEPLOY_PROJECT_NATURE, new SubProgressMonitor(monitor, 1)); - removeManageBuilderNature(project,mon); - } finally { - monitor.done(); - } - } - -} diff --git a/silecs-eclipse-plugin/src/java/cern/silecs/control/core/DesignProjectNature.java b/silecs-eclipse-plugin/src/java/cern/silecs/control/core/DesignProjectNature.java deleted file mode 100644 index be974ee..0000000 --- a/silecs-eclipse-plugin/src/java/cern/silecs/control/core/DesignProjectNature.java +++ /dev/null @@ -1,110 +0,0 @@ -// Copyright 2016 CERN and GSI -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -package cern.silecs.control.core; - -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.IProjectNature; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.NullProgressMonitor; -import org.eclipse.core.runtime.SubProgressMonitor; - -import cern.silecs.view.console.ConsoleHandler; - -public class DesignProjectNature extends SilecsProjectNature implements IProjectNature { - - public static final String NATURE_ID = "cern.silecs.control.core.designprojectnature"; - - private static final String CERN_FESA_PLUGIN_CORE_FESA_CLASS_PROJECT_NATURE = "cern.fesa.plugin.core.fesaClassProjectNature"; - - public static void addClassNature(IProject project, IProgressMonitor mon) throws CoreException { - ConsoleHandler.printMessage("Debug0", true); - IProgressMonitor monitor = mon; - if (monitor == null) { - monitor = new NullProgressMonitor(); - } - - try { - monitor.beginTask("Add silecs class nature", 2); - ConsoleHandler.printMessage("Debug1", true); - addNature(project, NATURE_ID, new SubProgressMonitor(monitor, 1)); - ConsoleHandler.printMessage("Debug2", true); - addCppNature(project, new SubProgressMonitor(monitor, 1)); - ConsoleHandler.printMessage("Debug3", true); - } finally { - monitor.done(); - } - } - - public static void removeClassNature(IProject project, IProgressMonitor mon) throws CoreException { - IProgressMonitor monitor = mon; - if (monitor == null) { - monitor = new NullProgressMonitor(); - } - - try { - monitor.beginTask("Remove silecs class nature", 2); - removeNature(project, NATURE_ID, new SubProgressMonitor(monitor, 1)); - removeCppNature(project, new SubProgressMonitor(monitor, 1)); - } finally { - monitor.done(); - } - } - - public static void convertToClassNature(IProject project, IProgressMonitor mon) throws CoreException { - IProgressMonitor monitor = mon; - if (monitor == null) { - monitor = new NullProgressMonitor(); - } - - try { - monitor.beginTask("Converting project to silecs class nature", 2); - removeAllNatures(project, new SubProgressMonitor(monitor, 1)); - addClassNature(project, new SubProgressMonitor(monitor, 1)); - } finally { - monitor.done(); - } - } - - public static void addFESAClassNature(IProject project, IProgressMonitor mon) throws CoreException { - IProgressMonitor monitor = mon; - if (mon == null) { - monitor = new NullProgressMonitor(); - } - monitor.beginTask("Adding FESA Class Nature to project", 2); - try { - addNature(project, CERN_FESA_PLUGIN_CORE_FESA_CLASS_PROJECT_NATURE, new SubProgressMonitor(monitor, 1)); - addManageBuilderNature(project,mon); - } finally { - monitor.done(); - } - } - - public static void removeFESAClassNature(IProject project, IProgressMonitor mon) throws CoreException { - IProgressMonitor monitor = mon; - if (mon == null) { - monitor = new NullProgressMonitor(); - } - monitor.beginTask("Removing FESA Nature from project", 2); - try { - removeNature(project, CERN_FESA_PLUGIN_CORE_FESA_CLASS_PROJECT_NATURE, new SubProgressMonitor(monitor, 1)); - removeManageBuilderNature(project,mon); - } finally { - monitor.done(); - } - } - -} diff --git a/silecs-eclipse-plugin/src/java/cern/silecs/control/core/SilecsProjectNature.java b/silecs-eclipse-plugin/src/java/cern/silecs/control/core/SilecsProjectNature.java deleted file mode 100644 index c7ea191..0000000 --- a/silecs-eclipse-plugin/src/java/cern/silecs/control/core/SilecsProjectNature.java +++ /dev/null @@ -1,162 +0,0 @@ -// Copyright 2016 CERN and GSI -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -package cern.silecs.control.core; - - -import org.eclipse.cdt.core.CCProjectNature; -import org.eclipse.core.resources.ICommand; -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.IProjectDescription; -import org.eclipse.core.resources.IncrementalProjectBuilder; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.NullProgressMonitor; - -import org.eclipse.core.runtime.SubProgressMonitor; - -import cern.silecs.model.exception.SilecsException; -import cern.silecs.utils.SilecsConstants; -import cern.silecs.view.console.ConsoleHandler; - - -public abstract class SilecsProjectNature extends CCProjectNature { - - public static final String PROJECT_FILE = ".project"; - public static final String CDT_PROJECT_FILE = ".cproject"; - - private static final String ORG_ECLIPSE_CDT_MANAGEDBUILDER_CORE_SCANNER_CONFIG_NATURE = "org.eclipse.cdt.managedbuilder.core.ScannerConfigNature"; - private static final String ORG_ECLIPSE_CDT_MANAGEDBUILDER_CORE_MANAGED_BUILD_NATURE = "org.eclipse.cdt.managedbuilder.core.managedBuildNature"; - - private static final String FESA_BUILD_COMMAND_1 = "org.eclipse.cdt.managedbuilder.core.genmakebuilder"; - private static final String FESA_BUILD_COMMAND_2 = "org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder"; - - protected static void removeAllNatures(IProject project, IProgressMonitor mon) throws CoreException { - IProgressMonitor monitor = mon; - if (mon == null) { - monitor = new NullProgressMonitor(); - } - try { - IProjectDescription desc = project.getDescription(); - desc.setNatureIds(new String[0]); - project.setDescription(desc, null); - } finally { - monitor.done(); - } - } - - protected static void addCppNature(IProject project, IProgressMonitor mon) throws CoreException { - IProgressMonitor monitor = mon; - if (mon == null) { - monitor = new NullProgressMonitor(); - } - monitor.beginTask("Adding C++ Nature to project", 2); - - try { - addNature(project, C_NATURE_ID, new SubProgressMonitor(monitor, 1)); - addNature(project, CC_NATURE_ID, new SubProgressMonitor(monitor, 1)); - } finally { - monitor.done(); - } - } - - protected static void removeCppNature(IProject project, IProgressMonitor mon) throws CoreException { - IProgressMonitor monitor = mon; - if (mon == null) { - monitor = new NullProgressMonitor(); - } - - monitor.beginTask("Removing C++ Nature from project", 2); - - try { - removeNature(project, C_NATURE_ID, new SubProgressMonitor(monitor, 1)); - removeNature(project, CC_NATURE_ID, new SubProgressMonitor(monitor, 1)); - } finally { - monitor.done(); - } - } - - @Override - public void configure() throws CoreException { - // Do nothing. this allow to put fesa nature first - } - - public static SilecsConstants.ProjectType getProjectType(IProject project) throws CoreException, SilecsException { - if (project.hasNature(DesignProjectNature.NATURE_ID)) { - return SilecsConstants.ProjectType.DESIGN_PROJECT; - } else if (project.hasNature(DeployProjectNature.NATURE_ID)) { - return SilecsConstants.ProjectType.DEPLOY_PROJECT; - } else { - throw new SilecsException("Project " + project.getName() + " has no fesa nature"); - } - } - - protected static void addManageBuilderNature(IProject project, IProgressMonitor mon) throws CoreException { - IProgressMonitor monitor = mon; - if (mon == null) { - monitor = new NullProgressMonitor(); - } - monitor.beginTask("Adding Managebuilder Nature to project", 2); - - try { - addCppNature(project,mon); - addNature(project, ORG_ECLIPSE_CDT_MANAGEDBUILDER_CORE_MANAGED_BUILD_NATURE, new SubProgressMonitor(monitor, 1)); - addNature(project, ORG_ECLIPSE_CDT_MANAGEDBUILDER_CORE_SCANNER_CONFIG_NATURE, new SubProgressMonitor(monitor, 1)); - } finally { - monitor.done(); - } - } - - protected static void removeManageBuilderNature(IProject project, IProgressMonitor mon) throws CoreException { - IProgressMonitor monitor = mon; - if (mon == null) { - monitor = new NullProgressMonitor(); - } - - monitor.beginTask("Removing Managebuilder Nature from project", 2); - - try { - removeCppNature(project,mon); - removeNature(project, ORG_ECLIPSE_CDT_MANAGEDBUILDER_CORE_MANAGED_BUILD_NATURE, new SubProgressMonitor(monitor, 1)); - removeNature(project, ORG_ECLIPSE_CDT_MANAGEDBUILDER_CORE_SCANNER_CONFIG_NATURE, new SubProgressMonitor(monitor, 1)); - } finally { - monitor.done(); - } - } - - public static void addBuildSpecs(IProject project) - { - try { - IProjectDescription desc = project.getDescription(); - ICommand[] commands = new ICommand[2]; - final ICommand command0 = desc.newCommand(); - final ICommand command1 = desc.newCommand(); - command0.setBuilderName(FESA_BUILD_COMMAND_1); - command1.setBuilderName(FESA_BUILD_COMMAND_2); - commands[0] = command0; - commands[1] = command1; - - //remove auto-build options - commands[0].setBuilding(IncrementalProjectBuilder.AUTO_BUILD, false); - commands[1].setBuilding(IncrementalProjectBuilder.AUTO_BUILD, false); - commands[1].setBuilding(IncrementalProjectBuilder.CLEAN_BUILD, false); - desc.setBuildSpec(commands); - project.setDescription(desc, null); - } catch (CoreException e) { - e.printStackTrace(); - ConsoleHandler.printStackTrace(e); - } - } -} diff --git a/silecs-eclipse-plugin/src/java/cern/silecs/control/handlers/AboutSilecsHandler.java b/silecs-eclipse-plugin/src/java/cern/silecs/control/handlers/AboutSilecsHandler.java deleted file mode 100644 index f639039..0000000 --- a/silecs-eclipse-plugin/src/java/cern/silecs/control/handlers/AboutSilecsHandler.java +++ /dev/null @@ -1,68 +0,0 @@ -// Copyright 2016 CERN and GSI -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -package cern.silecs.control.handlers; - -import org.eclipse.core.commands.AbstractHandler; -import org.eclipse.core.commands.ExecutionEvent; -import org.eclipse.core.commands.ExecutionException; -import org.eclipse.core.commands.IHandler; -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.swt.widgets.Shell; -import org.eclipse.ui.PlatformUI; - -import cern.silecs.utils.SilecsConstants; -import cern.silecs.view.dialogs.SilecsMessageDialog; - -/** - * This handler displays basic information about the Silecs tool. - */ -public class AboutSilecsHandler extends AbstractHandler implements IHandler { - - @Override - public Object execute(ExecutionEvent event) throws ExecutionException { - Shell shell = PlatformUI.getWorkbench().getDisplay().getActiveShell(); - - //GSI-Hack .. use GSI-Support - String dialogMessage = "About SILECS\n\n" - + "A 'Design project' defines the data to be exchanged with the controller (blocks and the registers) in a hardware independent manners while a 'Deploy project' binds several design instances on a physical controller. \n" - + "Purpose of this tool is to provide an easy-to-use graphical interface to guide the user in the definition of his design/deploy projects and to generate the client and controller resources necessary for the communication via the Silecs communication library.\n\n" - - + "If you are using this tool you may also be interests in: \n" - + "\u2022 Silecs communication library \n" - + "\u2022 Silecs diagnostic tool \n\n" - + "Support contact: silecs-support@gsi.de \n" - + "Silecs wiki: "+ SilecsConstants.SILECS_WIKIS_PATH + "\n\n\n" - - + "Copyright 2016 CERN and GSI\n" - + "This program is free software: you can redistribute it and/or modify\n" - + "it under the terms of the GNU General Public License as published by\n" - + "the Free Software Foundation, either version 3 of the License, or\n" - + "(at your option) any later version.\n\n" - - + "This program is distributed in the hope that it will be useful,\n" - + "but WITHOUT ANY WARRANTY; without even the implied warranty of\n" - + "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" - + "GNU General Public License for more details.\n\n" - + "You should have received a copy of the GNU General Public License\n" - + "along with this program. If not, see <http://www.gnu.org/licenses/>.\n\n"; - - - MessageDialog dialog = new SilecsMessageDialog(shell, "About Silecs", null, dialogMessage, - MessageDialog.INFORMATION, new String[] { "OK" }, 0); - dialog.open(); - return null; - } -} diff --git a/silecs-eclipse-plugin/src/java/cern/silecs/control/handlers/BaseHandler.java b/silecs-eclipse-plugin/src/java/cern/silecs/control/handlers/BaseHandler.java deleted file mode 100644 index 5167a21..0000000 --- a/silecs-eclipse-plugin/src/java/cern/silecs/control/handlers/BaseHandler.java +++ /dev/null @@ -1,175 +0,0 @@ -// Copyright 2016 CERN and GSI -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -package cern.silecs.control.handlers; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -import org.eclipse.core.commands.AbstractHandler; -import org.eclipse.core.commands.ExecutionEvent; -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.IResource; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.swt.widgets.Event; -import org.eclipse.swt.widgets.MenuItem; -import org.eclipse.ui.IEditorPart; -import org.eclipse.ui.IFileEditorInput; -import org.eclipse.ui.handlers.HandlerUtil; -import org.eclipse.ui.ide.IDE; - -import cern.silecs.control.core.DeployProjectNature; -import cern.silecs.control.core.DesignProjectNature; -import cern.silecs.utils.SilecsUtils; - -public abstract class BaseHandler extends AbstractHandler { - - - - /** - * Gives the list of selected documents - * Asks the user to save the file if dirty in an editor - * - * @param event - * @return - */ - protected List<IFile> retrieveIeplcFiles(ExecutionEvent event) { - List<IFile> files = retrieveIeplcFilesNonCheck(event); - return ensureFileSaved(files); - } - - /** - * Gives the Ieplc file form file selection or project selection - * @param event - * @return - */ - private List<IFile> retrieveIeplcFilesNonCheck(ExecutionEvent event) { - List<IFile> files = new ArrayList<IFile>(); - - // get from where the command was fired - Object trigger = event.getTrigger(); - if (trigger instanceof Event) { - Event ev = (Event) trigger; - - if (ev.widget instanceof MenuItem) { - // if fired by a popup - IStructuredSelection selection = (IStructuredSelection) HandlerUtil.getActiveMenuSelection(event); - - for (Object o : selection.toList()) { - if (o instanceof IFile) { - files.add((IFile) o); - } else if (o instanceof IProject) { - // if project selected return the design or du file - IProject project = (IProject) o; - try { - files.add(retriveIeplcFileFromProject(project)); - } catch (CoreException e) { - // if project nature can't be retrieve, log but do nothing - //LOGGER.error("Could not retrieve project nature for {}", project.getName()); - } catch (Exception e) { - //LOGGER.error("Project nature not supported for {}", project.getName()); - } - - } - } - - } else { - // the command was fired by a shortcut or a toolbar button - IEditorPart editor = HandlerUtil.getActiveEditor(event); - IFileEditorInput input = (IFileEditorInput) editor.getEditorInput(); - files.add(input.getFile()); - } - } - - return files; - } - - /** - * Gives the list of selected project - * - * @param event - * @return - */ - protected List<IProject> retrieveProjects(ExecutionEvent event) { - List<IProject> projects = new ArrayList<IProject>(); - - // get from where the command was fired - Object trigger = event.getTrigger(); - if (trigger instanceof Event) { - Event ev = (Event) trigger; - - if (ev.widget instanceof MenuItem) { - IStructuredSelection selection = (IStructuredSelection) HandlerUtil.getActiveMenuSelection(event); - List<?> resources = IDE.computeSelectedResources(selection); - for (Object o : resources) { - if (o instanceof IProject) { - projects.add((IProject) o); - } else if (o instanceof IFile) { - IProject project = ((IFile) o).getProject(); - - if (project != null) { - projects.add(project); - } - } - } - } else { - IEditorPart editor = HandlerUtil.getActiveEditor(event); - if (editor == null) return projects; - IFileEditorInput input = (IFileEditorInput) editor.getEditorInput(); - projects.add(input.getFile().getProject()); - } - } - - if (projects.isEmpty()) { - //LOGGER.info("No projects could be retrieved"); - } - - return projects; - } - - /** - * Finds the Ieplc file from the project root - * @param project - * @return - * @throws Exception - * @throws Exception - */ - private IFile retriveIeplcFileFromProject(IProject project) throws Exception { - if (project.hasNature(DeployProjectNature.NATURE_ID)) { - return SilecsUtils.getSilecsDeployFile(project); - } else if (project.hasNature(DesignProjectNature.NATURE_ID)) { - return SilecsUtils.getSilecsDesignFile(project); - } else { - throw new Exception(); - } - } - - /** - * Ensure the documents are not dirty in an open editor - * @param files - * @return - */ - private List<IFile> ensureFileSaved(List<IFile> files) { - if (IDE.saveAllEditors(files.toArray(new IResource[files.size()]), true)) { - return files; - } else { - return Collections.<IFile> emptyList(); - } - } - -} diff --git a/silecs-eclipse-plugin/src/java/cern/silecs/control/handlers/DiagnosticToolHandler.java b/silecs-eclipse-plugin/src/java/cern/silecs/control/handlers/DiagnosticToolHandler.java deleted file mode 100644 index 362d5d1..0000000 --- a/silecs-eclipse-plugin/src/java/cern/silecs/control/handlers/DiagnosticToolHandler.java +++ /dev/null @@ -1,76 +0,0 @@ -// Copyright 2016 CERN and GSI -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -package cern.silecs.control.handlers; - -import java.util.HashMap; -import java.util.Map; - -import org.eclipse.core.commands.AbstractHandler; -import org.eclipse.core.commands.ExecutionEvent; -import org.eclipse.core.commands.ExecutionException; -import org.eclipse.core.commands.IHandler; -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.IProject; - -import cern.silecs.control.core.DeployProjectNature; -import cern.silecs.utils.OSExecute; -import cern.silecs.utils.SilecsUtils; -import cern.silecs.view.console.ConsoleHandler; -import cern.silecs.view.preferences.MainPreferencePage; - -public class DiagnosticToolHandler extends AbstractHandler implements IHandler { - - @Override - public Object execute(ExecutionEvent event) throws ExecutionException { - - try - { - ConsoleHandler.clear(); - - IProject project = SilecsUtils.extractSilecsFileFromEvent(event).getProject(); - - if( project.hasNature(DeployProjectNature.NATURE_ID) == false ) - throw new Exception("The project: " + project.getName() + " is not a silecs-deploy-project"); - - SilecsUtils.checkSilecsVersion(project); - IFile deployFile = SilecsUtils.getSilecsDeployFile(project); - - String binary = MainPreferencePage.getDiagToolBasePath(SilecsUtils.getSilecsVersion(project)) + "/bin/x86_64/silecs-diagnostic"; - String snap7lib = MainPreferencePage.getSNAP7LibraryBasePath(SilecsUtils.getSilecsVersion(project)) + "/bin/x86_64-linux"; - - ConsoleHandler.printMessage("Starting Silecs Diagnostic Tool from:" + binary, true); - - String[] command = new String[3]; - command[0] = binary; - command[1] = "-d"; - command[2] = deployFile.getRawLocation().makeAbsolute().toOSString(); - String envVarName = "LD_LIBRARY_PATH"; - Map<String, String> env = new HashMap<String, String>(); - env.put(envVarName, snap7lib); - ConsoleHandler.printMessage("Setting environment variable: '" + envVarName + "' to '" + snap7lib + "'", true); - ConsoleHandler.printMessage("Executing command: " + command[0] + " " + command[1] + " " + command[2], true); - OSExecute.executeCommand(env, command); - } - catch (Exception e) - { - ConsoleHandler.printError("Could not launch Silecs Diagnostic Tool", true); - e.printStackTrace(); - } - - return null; - } - -} diff --git a/silecs-eclipse-plugin/src/java/cern/silecs/control/handlers/ExpandAllHandler.java b/silecs-eclipse-plugin/src/java/cern/silecs/control/handlers/ExpandAllHandler.java deleted file mode 100644 index e9e4559..0000000 --- a/silecs-eclipse-plugin/src/java/cern/silecs/control/handlers/ExpandAllHandler.java +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright 2016 CERN and GSI -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -package cern.silecs.control.handlers; - -import java.util.ArrayList; - -import org.eclipse.core.commands.AbstractHandler; -import org.eclipse.core.commands.ExecutionEvent; -import org.eclipse.core.commands.ExecutionException; -import org.eclipse.core.commands.IHandler; -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.IWorkspaceRoot; -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.ui.ISelectionService; -import org.eclipse.ui.PlatformUI; -import cern.silecs.view.explorer.SilecsProjectExplorer; - -/** - * This handler is responsible for expanding selected projects in the silecs explorer.<br> - * It calls SilecsProjectExplorer's expandHelper to expand projects to src-file level. - */ -public class ExpandAllHandler extends AbstractHandler implements IHandler { - - @Override - public Object execute(ExecutionEvent event) throws ExecutionException { - IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); - ArrayList<IProject> projects = new ArrayList<>(); - - ISelectionService selectionService = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getSelectionService(); - - IStructuredSelection selections = (IStructuredSelection) selectionService - .getSelection(SilecsProjectExplorer.VIEW_ID); - - for(Object selection : selections.toArray()) { - if(selection instanceof IProject) - projects.add((IProject)selection); - } - - SilecsProjectExplorer explorer = (SilecsProjectExplorer) PlatformUI.getWorkbench().getActiveWorkbenchWindow() - .getActivePage().findView(SilecsProjectExplorer.VIEW_ID); - - explorer.expandHelper(root, projects); - - return null; - } -} diff --git a/silecs-eclipse-plugin/src/java/cern/silecs/control/handlers/GenerateCodeHandler.java b/silecs-eclipse-plugin/src/java/cern/silecs/control/handlers/GenerateCodeHandler.java deleted file mode 100644 index 94b33bc..0000000 --- a/silecs-eclipse-plugin/src/java/cern/silecs/control/handlers/GenerateCodeHandler.java +++ /dev/null @@ -1,154 +0,0 @@ -// Copyright 2016 CERN and GSI -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -package cern.silecs.control.handlers; - -import java.io.File; -import java.io.FileInputStream; -import java.io.InputStream; - -import org.eclipse.core.commands.ExecutionEvent; -import org.eclipse.core.commands.ExecutionException; -import org.eclipse.core.commands.IHandler; -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.IFolder; -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.IResource; -import org.eclipse.jface.wizard.IWizard; -import org.eclipse.jface.wizard.WizardDialog; -import org.eclipse.swt.widgets.Shell; -import org.eclipse.ui.handlers.HandlerUtil; - - -import cern.silecs.control.core.DeployProjectNature; -import cern.silecs.control.core.DesignProjectNature; -import cern.silecs.model.exception.SilecsException; -import cern.silecs.utils.SilecsUtils; -import cern.silecs.view.console.ConsoleHandler; -import cern.silecs.view.job.BaseProjectJob; -import cern.silecs.view.job.GenerateClassJob; -import cern.silecs.view.job.GenerateDeployJob; -import cern.silecs.view.preferences.MainPreferencePage; -import cern.silecs.view.wizards.GenerateCodeWizard; - -public class GenerateCodeHandler extends BaseHandler implements IHandler { - - @Override - public Object execute(ExecutionEvent event) throws ExecutionException { - - ConsoleHandler.clear(); - - BaseProjectJob job = null; - try { - IFile silecsFile = SilecsUtils.extractSilecsFileFromEvent(event); - IProject project = silecsFile.getProject(); - SilecsUtils.checkSilecsVersion(project); - - IFolder src = project.getFolder("src"); - if(project.hasNature(DesignProjectNature.NATURE_ID) ) - { - IFile fesaDesignDoc = src.getFile(project.getName() + ".design"); - boolean designDocExists = fesaDesignDoc.exists(); - if(designDocExists) - { - IFile backup = src.getFile(fesaDesignDoc.getName() + ".backup"); - ConsoleHandler.printMessage("Existing FESA Design document detected - new data will be inserted", true); - ConsoleHandler.printWarning("Please note that old, obsolete xml-elements are not deleted automatically! Sometimes this can lead to an invalid FESA Design document!", true); - ConsoleHandler.printWarning("If this is the case, please remove the obsolete elements by hand.", true); - ConsoleHandler.printMessage("A backup of your old document will be saved at: " + backup.getRawLocation().makeAbsolute(), true); - if(backup.exists()) - backup.delete(true, null); - fesaDesignDoc.copy(backup.getFullPath(), true, null); - } - else - { - File[] templates = MainPreferencePage.getFESADesignTemplates(); - File template = pickTemplate(event,templates); - if( template == null) // cancel pressed - return null; - ConsoleHandler.printMessage("The following template will be used:" + template.getAbsolutePath(), true); - InputStream source = new FileInputStream(template); - fesaDesignDoc.create(source, IResource.NONE, null); - } - job = new GenerateClassJob(project, fesaDesignDoc); - } - else if(project.hasNature(DeployProjectNature.NATURE_ID) ) - { - IFile fesaDeployDoc = src.getFile(project.getName() + ".deploy"); - boolean deployDocExists = fesaDeployDoc.exists(); - if(deployDocExists) - { - IFile backup = src.getFile(fesaDeployDoc.getName() + ".backup"); - ConsoleHandler.printMessage("Existing FESA Deploy-Unit document detected - new data will be inserted", true); - ConsoleHandler.printWarning("Please note that old, obsolete xml-elements are not deleted automatically! Sometimes this can lead to an invalid FESA Deploy-Unit document !", true); - ConsoleHandler.printWarning("If this is the case, please remove the obsolete elements by hand.", true); - ConsoleHandler.printMessage("A backup of your old document will be saved at: " + backup.getRawLocation().makeAbsolute(), true); - if(backup.exists()) - backup.delete(true, null); - fesaDeployDoc.copy(backup.getFullPath(), true, null); - } - else - { - File[] templates = MainPreferencePage.getFESADeployUnitTemplates(); - File template = pickTemplate(event,templates); - if( template == null) // cancel pressed - return null; - ConsoleHandler.printMessage("The following template will be used:" + template.getAbsolutePath(), true); - InputStream source = new FileInputStream(template); - fesaDeployDoc.create(source, IResource.NONE, null); - } - - job = new GenerateDeployJob(project, fesaDeployDoc,!deployDocExists); - } - else - { - ConsoleHandler.printError("Failed to find SILECS Project Nature", true); - return null; - } - } catch (Exception e) - { - ConsoleHandler.printError("Failed to generate code: ", true); - ConsoleHandler.printStackTrace(e); - return null; - } - - job.setUser(true); - job.schedule(); - - return null; - } - - private File pickTemplate(ExecutionEvent event, File[] templates) throws SilecsException - { - if(templates.length < 1) - { - String error = "Failed to generate FESA Class. No templates found. please fix your FESA-PATH in the preferences!"; - ConsoleHandler.printError(error, true); - throw new SilecsException(error); - } - if( templates.length == 1 ) - { - return templates[0]; - } - //TODO: Would be nice to add the possibility to pick a foreign template from the file system - Shell activeShell = HandlerUtil.getActiveShell(event); - IWizard wizard = new GenerateCodeWizard(templates); - WizardDialog dialog = new WizardDialog(activeShell, wizard); - dialog.open(); - return ((GenerateCodeWizard)wizard).getChoice(); - } - - -} diff --git a/silecs-eclipse-plugin/src/java/cern/silecs/control/handlers/SilecsWikis.java b/silecs-eclipse-plugin/src/java/cern/silecs/control/handlers/SilecsWikis.java deleted file mode 100644 index 0973f98..0000000 --- a/silecs-eclipse-plugin/src/java/cern/silecs/control/handlers/SilecsWikis.java +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright 2016 CERN and GSI -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -package cern.silecs.control.handlers; - -import org.eclipse.core.commands.AbstractHandler; -import org.eclipse.core.commands.ExecutionEvent; -import org.eclipse.core.commands.ExecutionException; -import org.eclipse.core.commands.IHandler; - -import cern.silecs.utils.SilecsUtils; -import cern.silecs.utils.SilecsConstants; - -import java.awt.Desktop; -import java.io.IOException; -import java.net.URI; -import java.net.URISyntaxException; - -/** - * This handler opens silecs-wiki in the browser. - */ -public class SilecsWikis extends AbstractHandler implements IHandler { - - @Override - public Object execute(ExecutionEvent event) throws ExecutionException { - - // Open windows default browser (or firefox under linux) and load Silecs Wikis pages - try { - if (SilecsUtils.isWindows) { - Desktop.getDesktop().browse(new URI(SilecsConstants.SILECS_WIKIS_PATH)); - } else { - Runtime runtime = Runtime.getRuntime(); - runtime.exec("/usr/bin/firefox -new-window " + SilecsConstants.SILECS_WIKIS_PATH); - } - } catch (IOException e) { - e.printStackTrace(); - } catch (URISyntaxException e) { - e.printStackTrace(); - } - return null; - } -} diff --git a/silecs-eclipse-plugin/src/java/cern/silecs/control/handlers/UpdateSilecsProjectHandler.java b/silecs-eclipse-plugin/src/java/cern/silecs/control/handlers/UpdateSilecsProjectHandler.java deleted file mode 100644 index 6966b77..0000000 --- a/silecs-eclipse-plugin/src/java/cern/silecs/control/handlers/UpdateSilecsProjectHandler.java +++ /dev/null @@ -1,77 +0,0 @@ -// Copyright 2016 CERN and GSI -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -package cern.silecs.control.handlers; - - -import org.eclipse.core.commands.AbstractHandler; -import org.eclipse.core.commands.ExecutionEvent; -import org.eclipse.core.commands.ExecutionException; -import org.eclipse.core.commands.IHandler; -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.IProject; -import org.eclipse.jface.wizard.IWizard; -import org.eclipse.jface.wizard.WizardDialog; -import org.eclipse.swt.widgets.Shell; -import org.eclipse.ui.handlers.HandlerUtil; - -import cern.silecs.model.exception.SilecsException; -import cern.silecs.utils.SilecsUtils; -import cern.silecs.view.console.ConsoleHandler; -import cern.silecs.view.job.BaseProjectJob; - -import cern.silecs.view.job.UpdateVersionJob; -import cern.silecs.view.wizards.UpdateSilecsProjectWizard; - - -public class UpdateSilecsProjectHandler extends AbstractHandler implements IHandler { - - @Override - public Object execute(ExecutionEvent event) throws ExecutionException - { - - ConsoleHandler.clear(); - - BaseProjectJob job = null; - - try - { - String newVersion = pickVersion(event); - IFile silecsFile = SilecsUtils.extractSilecsFileFromEvent(event); - IProject project = silecsFile.getProject(); - job = new UpdateVersionJob(project, newVersion); - - } catch (Exception e) - { - ConsoleHandler.printError("Failed to update SILECS version: " , true); - ConsoleHandler.printStackTrace(e); - return null; - } - - job.setUser(true); - job.schedule(); - - return null; - } - - private String pickVersion(ExecutionEvent event) throws SilecsException - { - Shell activeShell = HandlerUtil.getActiveShell(event); - IWizard wizard = new UpdateSilecsProjectWizard(); - WizardDialog dialog = new WizardDialog(activeShell, wizard); - dialog.open(); - return ((UpdateSilecsProjectWizard)wizard).getSelectedVersion(); - } -} diff --git a/silecs-eclipse-plugin/src/java/cern/silecs/control/handlers/ValidateHandler.java b/silecs-eclipse-plugin/src/java/cern/silecs/control/handlers/ValidateHandler.java deleted file mode 100644 index 37e7e05..0000000 --- a/silecs-eclipse-plugin/src/java/cern/silecs/control/handlers/ValidateHandler.java +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright 2016 CERN and GSI -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -package cern.silecs.control.handlers; - -import org.eclipse.core.commands.ExecutionEvent; -import org.eclipse.core.commands.ExecutionException; -import org.eclipse.core.commands.IHandler; -import org.eclipse.core.resources.IFile; - -import cern.silecs.view.console.ConsoleHandler; -import cern.silecs.view.job.ValidationJob; -import cern.silecs.utils.SilecsUtils; - - -public class ValidateHandler extends BaseHandler implements IHandler { - - @Override - public Object execute(ExecutionEvent event) throws ExecutionException { - - ConsoleHandler.clear(); - ConsoleHandler.printMessage("Validating XML ...", true); - ValidationJob job; - try - { - IFile file = SilecsUtils.extractSilecsFileFromEvent(event); - SilecsUtils.checkSilecsVersion(file.getProject()); - job = new ValidationJob(file); - } - catch (Exception e) - { - ConsoleHandler.printError("Failed to validate file:", true); - ConsoleHandler.printStackTrace(e); - return null; - } - - job.schedule(); - return null; - } -} diff --git a/silecs-eclipse-plugin/src/java/cern/silecs/control/validation/Validator.java b/silecs-eclipse-plugin/src/java/cern/silecs/control/validation/Validator.java deleted file mode 100644 index e9e0197..0000000 --- a/silecs-eclipse-plugin/src/java/cern/silecs/control/validation/Validator.java +++ /dev/null @@ -1,103 +0,0 @@ -// Copyright 2016 CERN and GSI -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -package cern.silecs.control.validation; - -import java.io.File; -import java.io.FileInputStream; -import java.io.InputStream; -import java.util.List; - -import org.apache.xerces.parsers.DOMParser; -import org.apache.xerces.xni.parser.XMLInputSource; -import org.eclipse.core.resources.IFile; - -import cern.silecs.control.validation.internal.Handler; -import cern.silecs.model.document.SilecsDocumentError; -import cern.silecs.view.console.ConsoleHandler; - -/** - * Class used for validating single xmlFile - */ -public class Validator -{ - /** - * This method takes as an argument xml file.<br> - * If the document is not xml file or is somehow broken list with "Document is not parsed correctly" error is returned."<br> - * - * External python validation is called in this method! - * - * @param xmlFile - * @return list of errors - */ - public static List<SilecsDocumentError> validate(File xmlFile) - { - List<SilecsDocumentError> errors = null; - try { - // create DOM parser which validates, use a grammar pool, - // support xincludes and allow the access to the nodes - // during the parsing - DOMParser parser = new DOMParser(); - - parser.setFeature("http://xml.org/sax/features/validation", true); - parser.setFeature("http://apache.org/xml/features/validation/schema", true); - parser.setFeature("http://apache.org/xml/features/honour-all-schemaLocations", true); - parser.setFeature("http://apache.org/xml/features/xinclude", true); - parser.setFeature("http://apache.org/xml/features/xinclude/fixup-base-uris", false); - parser.setFeature("http://apache.org/xml/features/xinclude/fixup-language", false); - parser.setFeature("http://apache.org/xml/features/dom/defer-node-expansion", false); - - // Set the error handler - Handler handler = new Handler(xmlFile, parser); - parser.setErrorHandler(handler); - - // create the input - String uri = xmlFile.toURI().toString().replace("%20", " "); - - InputStream inputStream = new FileInputStream(xmlFile); - XMLInputSource inputSource = new XMLInputSource("", uri, uri, inputStream, "UTF-8"); - parser.parse(inputSource); - - // get the errors and the model - errors = handler.getErrors(); - errors.addAll(internalRules.validate(xmlFile)); - - } - catch (Exception e) - { - ConsoleHandler.printError("Document " + xmlFile.getName() + " has not been parsed correctly: " + e.getMessage(), true); - ConsoleHandler.printStackTrace(e); - } - - return errors; - } - - public static boolean isDocumentValid(IFile silecsDocument) - { - try - { - File xmlFile = new File(silecsDocument.getLocationURI()); - if (validate(xmlFile).isEmpty()) - return true; - return false; - } - catch (Exception e) - { - e.printStackTrace(); - ConsoleHandler.printStackTrace(e); - return false; - } - } -} diff --git a/silecs-eclipse-plugin/src/java/cern/silecs/control/validation/internal/Handler.java b/silecs-eclipse-plugin/src/java/cern/silecs/control/validation/internal/Handler.java deleted file mode 100644 index 56f49f7..0000000 --- a/silecs-eclipse-plugin/src/java/cern/silecs/control/validation/internal/Handler.java +++ /dev/null @@ -1,91 +0,0 @@ -// Copyright 2016 CERN and GSI -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -package cern.silecs.control.validation.internal; - -import java.io.File; -import java.util.ArrayList; -import java.util.List; - -import org.apache.xerces.parsers.DOMParser; -import org.w3c.dom.Element; -import org.xml.sax.ErrorHandler; -import org.xml.sax.SAXException; -import org.xml.sax.SAXNotRecognizedException; -import org.xml.sax.SAXNotSupportedException; -import org.xml.sax.SAXParseException; - -import cern.silecs.model.document.SilecsDocumentError; -import cern.silecs.model.document.SilecsDocumentError.ErrorLevel; -import cern.silecs.view.console.ConsoleHandler; - -public class Handler implements ErrorHandler -{ - private static final String CURRENT_NODE = "http://apache.org/xml/properties/dom/current-element-node"; - - private final DOMParser parser; - private final String fileName; - private List<SilecsDocumentError> errors; - - public Handler(File xmlFile, DOMParser parser) { - this.parser = parser; - this.fileName = xmlFile.getName(); - this.errors = new ArrayList<SilecsDocumentError>(); - } - - @Override - public void warning(SAXParseException e) throws SAXException { - addError(ErrorLevel.WARNING, e); - } - - @Override - public void error(SAXParseException e) throws SAXException { - addError(ErrorLevel.ERROR, e); - } - - @Override - public void fatalError(SAXParseException e) throws SAXException { - addError(ErrorLevel.FATAL, e); - } - - public final List<SilecsDocumentError> getErrors() { - return errors; - } - - private void addError(ErrorLevel level, SAXParseException e) { - Element element = null; - try - { - element = (Element) parser.getProperty(CURRENT_NODE); - } - catch (SAXNotRecognizedException | SAXNotSupportedException e1) - { - ConsoleHandler.printStackTrace(e1); - return; - } - SilecsDocumentError error = null; - String file = e.getSystemId(); - if (!file.endsWith(fileName)) { - // if the error is in the included xml or in the schema, we want to report the problem - // on the validated file but with a specific message - error = new SilecsDocumentError(level, "Error in included file: " + file + " at " + e.getLineNumber() + ":" - + e.getColumnNumber() + " => " + e.getMessage(), -1, -1, null); - } else { - error = new SilecsDocumentError(level, e, element); - } - - errors.add(error); - } -} diff --git a/silecs-eclipse-plugin/src/java/cern/silecs/control/validation/internalRules.java b/silecs-eclipse-plugin/src/java/cern/silecs/control/validation/internalRules.java deleted file mode 100644 index 0b2524b..0000000 --- a/silecs-eclipse-plugin/src/java/cern/silecs/control/validation/internalRules.java +++ /dev/null @@ -1,201 +0,0 @@ -// Copyright 2016 CERN and GSI -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -package cern.silecs.control.validation; - -import java.io.File; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; - -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; - -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; -import org.xml.sax.SAXException; - -import cern.silecs.model.document.SilecsDocumentError; -import cern.silecs.utils.SilecsUtils; - -public class internalRules { - - public static List<SilecsDocumentError> validate(File file) throws ParserConfigurationException, SAXException, IOException - { - // Some of the XSD-checks are version-specific. This is painful and will vanish some day when using XSD1.1 for all checks - //String silecs_version = - - List<SilecsDocumentError> errors = new ArrayList<SilecsDocumentError>(); - - DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); - DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); - Document doc = dBuilder.parse(file); - - if( SilecsUtils.isSilecsDesign(file.getAbsolutePath()) ) - { - errors.addAll(classRule_RegisterDim2(doc)); - errors.addAll(classRule_RO_Slave(doc)); - errors.addAll(classRule_WO_Master(doc)); - errors.addAll(classRule_StringLength(doc)); - } - if( SilecsUtils.isSilecsDeploy(file.getAbsolutePath()) ) - { - errors.addAll(deployRule_addressing_SchneiderM340(doc)); - errors.addAll(deployRule_addressing_BeckhoffCX90xx(doc)); - } - return errors; - } - - private static String getXPath(Node node) - { - Node parent = node.getParentNode(); - if (parent == null) - { - return "/"; - } - - if(!((Element)node).getAttribute("name").isEmpty()) - return getXPath(parent) + "/" + node.getNodeName() + "[@name='"+ ((Element)node).getAttribute("name") + "']"; - - return getXPath(parent) + "/" + node.getNodeName(); - } - - private static List<SilecsDocumentError> classRule_RegisterDim2(Document doc) - { - List<SilecsDocumentError> errors = new ArrayList<SilecsDocumentError>(); - NodeList regNodes = doc.getElementsByTagName("Register"); - for( int i = 0; i< regNodes.getLength() ; i++) - { - Element register = (Element)regNodes.item(i); - if( register.hasAttribute("array-dim2") && !register.hasAttribute("array-dim1") ) - { - SilecsDocumentError newError = new SilecsDocumentError( SilecsDocumentError.ErrorLevel.ERROR, "array-dim1 is required if array-dim2 is defined", -1, -1,getXPath(register)); - errors.add(newError); - } - } - return errors; - } - - private static List<SilecsDocumentError> classRule_RO_Slave(Document doc) - { - List<SilecsDocumentError> errors = new ArrayList<SilecsDocumentError>(); - NodeList blockNodes = doc.getElementsByTagName("Block"); - for( int i = 0; i< blockNodes.getLength() ; i++) - { - Element block = (Element)blockNodes.item(i); - if( block.getAttribute("mode").equals("READ-ONLY") ) - { - NodeList registerNodes = block.getElementsByTagName("Register"); - for( int j = 0; j< registerNodes.getLength() ; j++) - { - Element register = (Element)registerNodes.item(j); - if( register.getAttribute("synchro").equals("SLAVE") ) - { - SilecsDocumentError newError = new SilecsDocumentError( SilecsDocumentError.ErrorLevel.ERROR, "Register cannot have SLAVE synchro attribute within READ-ONLY block", -1, -1,getXPath(register)); - errors.add(newError); - } - } - } - } - return errors; - } - - private static List<SilecsDocumentError> classRule_WO_Master(Document doc) - { - List<SilecsDocumentError> errors = new ArrayList<SilecsDocumentError>(); - NodeList blockNodes = doc.getElementsByTagName("Block"); - for( int i = 0; i< blockNodes.getLength() ; i++) - { - Element block = (Element)blockNodes.item(i); - if( block.getAttribute("mode").equals("WRITE-ONLY")) - { - NodeList registerNodes = block.getElementsByTagName("Register"); - for( int j = 0; j< registerNodes.getLength() ; j++) - { - Element register = (Element)registerNodes.item(j); - if( register.getAttribute("synchro").equals("MASTER") ) - { - SilecsDocumentError newError = new SilecsDocumentError( SilecsDocumentError.ErrorLevel.ERROR, "Register cannot have MASTER synchro attribute within WRITE-ONLY block", -1, -1,getXPath(register)); - errors.add(newError); - } - } - } - } - return errors; - } - - private static List<SilecsDocumentError> classRule_StringLength(Document doc) - { - List<SilecsDocumentError> errors = new ArrayList<SilecsDocumentError>(); - NodeList registerNodes = doc.getElementsByTagName("Register"); - for( int j = 0; j< registerNodes.getLength() ; j++) - { - Element register = (Element)registerNodes.item(j); - if( register.getAttribute("format").equals("string") == false ) - { - if( register.hasAttribute("string-len")) - { - SilecsDocumentError newError = new SilecsDocumentError( SilecsDocumentError.ErrorLevel.ERROR, "string-len attribute only allowed for @format='string'.", -1, -1,getXPath(register)); - errors.add(newError); - } - } - } - return errors; - } - - private static List<SilecsDocumentError> deployRule_addressing_SchneiderM340(Document doc) - { - List<SilecsDocumentError> errors = new ArrayList<SilecsDocumentError>(); - NodeList schneiderPLCNode = doc.getElementsByTagName("Schneider-PLC"); - for( int i = 0; i< schneiderPLCNode.getLength() ; i++) - { - Element plc = (Element)schneiderPLCNode.item(i); - if( plc.getAttribute("model").equals("M340")) - { - int basAddress = Integer.parseInt( plc.getAttribute("base-address")); - if( basAddress%2 != 0 ) - { - SilecsDocumentError newError = new SilecsDocumentError( SilecsDocumentError.ErrorLevel.ERROR, "Only even addressing is allowed for UNITY_M340. Please change the base address value to an even number.", -1, -1,getXPath(plc)); - errors.add(newError); - } - } - } - return errors; - } - - private static List<SilecsDocumentError> deployRule_addressing_BeckhoffCX90xx(Document doc) - { - List<SilecsDocumentError> errors = new ArrayList<SilecsDocumentError>(); - NodeList schneiderPLCNode = doc.getElementsByTagName("Beckhoff-PLC"); - for( int i = 0; i< schneiderPLCNode.getLength() ; i++) - { - Element plc = (Element)schneiderPLCNode.item(i); - if( plc.getAttribute("model").equals("CX9020")) - { - int basAddress = Integer.parseInt( plc.getAttribute("base-address")); - if( basAddress%2 != 0 ) - { - SilecsDocumentError newError = new SilecsDocumentError( SilecsDocumentError.ErrorLevel.ERROR, "Only even addressing is allowed for TWINCAT_CX9020. Please change the base address value to an even number.", -1, -1,getXPath(plc)); - errors.add(newError); - } - } - } - return errors; - } - -} diff --git a/silecs-eclipse-plugin/src/java/cern/silecs/model/document/SilecsDocumentError.java b/silecs-eclipse-plugin/src/java/cern/silecs/model/document/SilecsDocumentError.java deleted file mode 100644 index 1e0f25d..0000000 --- a/silecs-eclipse-plugin/src/java/cern/silecs/model/document/SilecsDocumentError.java +++ /dev/null @@ -1,106 +0,0 @@ -// Copyright 2016 CERN and GSI -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -package cern.silecs.model.document; - -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import org.w3c.dom.Node; -import org.xml.sax.SAXParseException; - -import cern.silecs.utils.XmlUtils; - - -public class SilecsDocumentError { - - public enum ErrorLevel { - INFO, - WARNING, - ERROR, - FATAL - } - - /** - * error level - */ - public final ErrorLevel level; - - /** - * text with the description of the error - */ - public final String message; - - /** - * line of the error - */ - public final int lineNumber; - - /** - * column of the error - */ - public final int columnNumber; - - /** - * Element which cause the error - */ - public final String xPath; - - /** - * If an identity constraint has been violated, this contains the name of the violated key - */ - public final String violatedKey; - - /** - * If an identity constraint has been violated, this contains the incorrect value which is the cause of the error - */ - public final String incorrectValue; - - private static final String CONSTRAINT_MESSAGE_PATTERN = "cvc-identity-constraint.4.3: Key '(.*)' with value '(.*)' not found for identity constraint of element '(.*)'\\."; - - public SilecsDocumentError(ErrorLevel level, String message, int lineNumber, int columnNumber, String xPath) { - this.level = level; - this.message = message; - this.lineNumber = lineNumber; - this.columnNumber = columnNumber; - this.xPath = xPath; - - String key = ""; - String value = ""; - Pattern constraintPattern = Pattern.compile(CONSTRAINT_MESSAGE_PATTERN); - Matcher m = constraintPattern.matcher(message); - if (m.find()) { - key = m.group(1); - value = m.group(2); - } - - this.violatedKey = key; - this.incorrectValue = value; - } - - public SilecsDocumentError(ErrorLevel level, SAXParseException e, Node node) { - this(level, e.getMessage(), e.getLineNumber(), e.getColumnNumber(), XmlUtils.xPathFromNode(node)); - } - - public boolean isIdentityConstraintError() { - return !violatedKey.isEmpty(); - } - - @Override - public String toString() { - return lineNumber + ":" + columnNumber + " => " + message; - } -} - diff --git a/silecs-eclipse-plugin/src/java/cern/silecs/model/document/XmlBasedDocument.java b/silecs-eclipse-plugin/src/java/cern/silecs/model/document/XmlBasedDocument.java deleted file mode 100644 index e48c06a..0000000 --- a/silecs-eclipse-plugin/src/java/cern/silecs/model/document/XmlBasedDocument.java +++ /dev/null @@ -1,234 +0,0 @@ -// Copyright 2016 CERN and GSI -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -package cern.silecs.model.document; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -import javax.xml.transform.TransformerException; -import javax.xml.transform.TransformerFactoryConfigurationError; - -import org.apache.xpath.XPathAPI; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; - -import cern.silecs.model.exception.SilecsException; -import cern.silecs.utils.XmlUtils; -import cern.silecs.view.console.ConsoleHandler; - -public class XmlBasedDocument { - - public static final String XML_EXTENSION = ".xml"; - public static final String XSD_EXTENSION = ".xsd"; - - protected Document xmlDocument; - - /** - * Abstract class for data access object based on xml DOM - */ - public XmlBasedDocument(Document xmlDocument) { - this.xmlDocument = xmlDocument; - } - - /** - * Give the DOM - * - * @return - */ - public Document getXmlDocument() { - return xmlDocument; - } - - /** - * Helper that gives the list of element from an xPath query - * - * @param xPathQuery - * @return - * @throws SilecsException - */ - public List<Element> getElements(String xPathQuery) throws SilecsException { - return getElements(xmlDocument, xPathQuery); - } - - /** - * Helper that gives the list of element from an xPath query - * - * @param node node from where the query is executed - * @param xPathQuery - * @return - * @throws SilecsException - */ - public List<Element> getElements(Node node, String xPathQuery) throws SilecsException { - List<Node> nodes = getNodes(node, xPathQuery); - List<Element> elements = new ArrayList<Element>(nodes.size()); - - for (Node n : nodes) { - if (n instanceof Element) { - elements.add((Element) n); - } - } - - return elements; - } - - /** - * Helper that gives the first element from an xPath query - * - * @param xPathQuery - * @return - * @throws SilecsException - */ - public Element getSingleElement(String xPathQuery) throws SilecsException { - Node foundNode = getSingleNode(xPathQuery); - if (foundNode instanceof Element) { - return (Element) foundNode; - } else { - return null; - } - } - - /** - * Helper that gives the first element from an xPath query - * - * @param node node from where the query is executed - * @param xPathQuery - * @return - * @throws SilecsException - */ - public Element getSingleElement(Node node, String xPathQuery) throws SilecsException { - Node foundNode = getSingleNode(node, xPathQuery); - if (foundNode instanceof Element) { - return (Element) foundNode; - } else { - return null; - } - } - - public List<Node> getNodes(String xPathQuery) throws SilecsException { - return getNodes(xmlDocument, xPathQuery); - } - - public List<Node> getNodes(Node node, String xPathQuery) throws SilecsException { - if (xPathQuery == null || xPathQuery.isEmpty()) { - return Collections.emptyList(); - } - - // check the node is from the document - if (node != xmlDocument && node.getOwnerDocument() != xmlDocument) { - throw new SilecsException("The given node is not part of the document being queried"); - } - - try { - NodeList foundNodes = XPathAPI.selectNodeList(node, xPathQuery); - List<Node> nodes = new ArrayList<Node>(foundNodes.getLength()); - - for (int i = 0; i < foundNodes.getLength(); i++) { - nodes.add(foundNodes.item(i)); - } - - return nodes; - } catch (TransformerException e) { - throw new SilecsException("Could not get entity's node using xpath " + xPathQuery, e); - } - } - - /** - * Helper that gives the first node from an xPath query - * - * @param xPathQuery - * @return - * @throws SilecsException - */ - public Node getSingleNode(String xPathQuery) throws SilecsException { - if (xPathQuery == null || xPathQuery.isEmpty()) { - return null; - } - - try { - return XPathAPI.selectSingleNode(xmlDocument, xPathQuery); - } catch (TransformerException e) { - throw new SilecsException("Could not get entity's node using xpath " + xPathQuery, e); - } - } - - /** - * Helper that gives the first node from an xPath query - * - * @param node node from where the query is executed - * @param xPathQuery - * @return - * @throws SilecsException - */ - public Node getSingleNode(Node node, String xPathQuery) throws SilecsException { - if (xPathQuery == null || xPathQuery.isEmpty()) { - return null; - } - - // check the node is from the document - if (node.getOwnerDocument() != xmlDocument) { - throw new SilecsException("The given node is not part of the document being queried"); - } - - try { - return XPathAPI.selectSingleNode(node, xPathQuery); - } catch (TransformerException e) { - throw new SilecsException("Could not get entity's node using xpath " + xPathQuery, e); - } - } - - /** - * Helper that gives the tag name of the elements matched by the xpath - * - * @param xPathQuery - * @return - * @throws SilecsException - */ - public List<String> getTagNames(String xPathQuery) throws SilecsException { - List<Element> elements = getElements(xPathQuery); - List<String> nodeNames = new ArrayList<String>(elements.size()); - - for (Element e : elements) { - nodeNames.add(e.getTagName()); - } - - return nodeNames; - } - - /** - * Give the string representation of the DOM - */ - @Override - public String toString() - { - try - { - return XmlUtils.nodeToString(xmlDocument); - } - catch( TransformerException e) - { - ConsoleHandler.printStackTrace(e); - return super.toString(); - } - catch(TransformerFactoryConfigurationError e) - { - ConsoleHandler.printStackTrace(e.getException()); - return super.toString(); - } - } -} \ No newline at end of file diff --git a/silecs-eclipse-plugin/src/java/cern/silecs/model/exception/SilecsException.java b/silecs-eclipse-plugin/src/java/cern/silecs/model/exception/SilecsException.java deleted file mode 100644 index 0e8ff65..0000000 --- a/silecs-eclipse-plugin/src/java/cern/silecs/model/exception/SilecsException.java +++ /dev/null @@ -1,95 +0,0 @@ -// Copyright 2016 CERN and GSI -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -package cern.silecs.model.exception; - - -public class SilecsException extends Exception { - - private static final long serialVersionUID = 5282474727123991544L; - - /** - * The error code which can be used to localize the error messages - */ - private final int errorCode; - - /** Empty constructor **/ - public SilecsException() { - this.errorCode = -1; - } - - /** - * Constructor with the Silecs error code - * - * @param errorCode - */ - public SilecsException(int errorCode) { - this.errorCode = errorCode; - } - - /** - * Constructor - * - * @param message - */ - public SilecsException(String message) { - super(message); - this.errorCode = -1; - } - - /** - * Constructor with the Silecs error code - * - * @param errorCode - * @param message - */ - public SilecsException(int errorCode, String message) { - super(message); - this.errorCode = errorCode; - } - - /** - * Constructor - * - * @param message - * @param cause previous cause of the error (exception chaining) - */ - public SilecsException(String message, Throwable cause) { - super(message, cause); - this.errorCode = -1; - } - - /** - * Constructor - * - * @param errorCode - * @param message - * @param cause - */ - public SilecsException(int errorCode, String message, Throwable cause) { - super(message, cause); - this.errorCode = errorCode; - } - - /** - * Returns the Silecs error code - * -1 is the default value if no error code is set - * @return - */ - public int getErrorCode() { - return errorCode; - } -} - diff --git a/silecs-eclipse-plugin/src/java/cern/silecs/utils/OSExecute.java b/silecs-eclipse-plugin/src/java/cern/silecs/utils/OSExecute.java deleted file mode 100644 index 929f7d2..0000000 --- a/silecs-eclipse-plugin/src/java/cern/silecs/utils/OSExecute.java +++ /dev/null @@ -1,142 +0,0 @@ -// Copyright 2016 CERN and GSI -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -package cern.silecs.utils; - -import java.io.BufferedReader; -import java.io.File; -import java.io.IOException; -import java.io.InputStreamReader; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import cern.silecs.model.exception.SilecsException; -import cern.silecs.view.console.ConsoleHandler; -import cern.silecs.view.preferences.MainPreferencePage; - -public class OSExecute -{ - - public static String getlatestSilecsFesaCodegen(String codegenBaseDirectory, String silecsVersion) throws SilecsException - { - String fesaBaseDirectory = codegenBaseDirectory + "/fesa"; - if(!new File(fesaBaseDirectory).exists()) - { - throw new SilecsException("The directory: '" + fesaBaseDirectory + "' does not exist. Please check your Eclipse-Silecs preferences!"); - } - List<String> availableFesaVersions = MainPreferencePage.getAllFesaVersions(); - String selectedFesaVersion = MainPreferencePage.getFESAVersion(); - String tempFesaVersion = selectedFesaVersion; - int fesaVersionIndex = availableFesaVersions.lastIndexOf(selectedFesaVersion); - String fesaDirectory = ""; - while(true) - { - String fesaVersionUnderscored = tempFesaVersion.replaceAll("\\.", "_"); - fesaDirectory = fesaBaseDirectory + "/fesa_" + fesaVersionUnderscored; - if(new File(fesaDirectory).exists()) - { - return fesaDirectory; - } - fesaVersionIndex ++ ; - if( fesaVersionIndex >= availableFesaVersions.size() ) - { - throw new SilecsException("No matching silecs code-generation found for FESA-version '" + selectedFesaVersion + "'. Please select a more recent FESA-version in the Eclipse-Silecs preferences!"); - } - ConsoleHandler.printError("No silecs code-generation for the FESA-version '" + tempFesaVersion + "' found. Attempt to use silecs-codegen for the older FESA-version: '" + availableFesaVersions.get(fesaVersionIndex) + "'", true); - tempFesaVersion = availableFesaVersions.get(fesaVersionIndex); - } - } - - - public static void executePython(String file, String method, String silecsVersion, String[] parameters) throws IOException, InterruptedException, SilecsException - { - String[] command = new String[3]; - command[0] = "python"; - command[1] = "-c"; - - String codegenBaseDirectory = MainPreferencePage.getCodeGenBasePath(silecsVersion); - String fesaDirectory = getlatestSilecsFesaCodegen(codegenBaseDirectory, silecsVersion); - - // Add required root directories - command[2] = "import sys; "; - command[2] += "sys.path.append('" + codegenBaseDirectory + "'); "; - command[2] += "sys.path.append('" + codegenBaseDirectory + "/migration'); "; - command[2] += "sys.path.append('" + fesaDirectory + "'); "; - - // import file - command[2] += "import " + file + "; "; - - // execute method - command[2] += file +"." + method + "("; - - for(int i=0;i<parameters.length;i++) - { - command[2] += "'" + parameters[i] + "'"; - if( i < parameters.length - 1) - { - command[2] += ","; - } - } - command[2] += ")"; - int exitCode = executeCommand(command); - if (exitCode != 0) - { - throw new SilecsException("Executing python-command '" + command[2] + "' failed. Error code: " + exitCode); - } - } - - class Environment - { - String environmentVariableName; - - - }; - - public static int executeCommand(String... command) throws IOException, InterruptedException, SilecsException - { - Map<String, String> env = new HashMap<String, String>(); - return executeCommand(env, command); - } - - public static int executeCommand(Map<String, String> environmentVariables, String... command) throws IOException, InterruptedException, SilecsException - { - ProcessBuilder pb = new ProcessBuilder(command); - Map<String, String> env = pb.environment(); - env.putAll(environmentVariables); - - Process process = pb.start(); - process.waitFor(); - int exitCode = process.exitValue(); - - BufferedReader input = new BufferedReader(new InputStreamReader(process.getInputStream())); - String line; - while ((line = input.readLine()) != null) - { - ConsoleHandler.printMessage(line, true); - } - input.close(); - - BufferedReader error = new BufferedReader(new InputStreamReader(process.getErrorStream())); - - while ((line = error.readLine()) != null) - { - ConsoleHandler.printError(line, true); - } - error.close(); - - return exitCode; - } -} \ No newline at end of file diff --git a/silecs-eclipse-plugin/src/java/cern/silecs/utils/SilecsConstants.java b/silecs-eclipse-plugin/src/java/cern/silecs/utils/SilecsConstants.java deleted file mode 100644 index a9f157a..0000000 --- a/silecs-eclipse-plugin/src/java/cern/silecs/utils/SilecsConstants.java +++ /dev/null @@ -1,97 +0,0 @@ -// Copyright 2016 CERN and GSI -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -package cern.silecs.utils; - -import java.util.Arrays; -import java.util.List; - -public class SilecsConstants { - - public enum ProjectType { - DESIGN_PROJECT, - DEPLOY_PROJECT - } - - public static final String SILECS_NAME = "Silecs-Eclipse-Plugin"; - - //consistency check - public static final String DESIGN_CLASS_NODE = "SILECS-Class"; - - public static final String DEPLOY_UNIT_NODE = "Deploy-Unit"; - - public static final String NAME = "name"; - - public static final String HOST_NAME = "host-name"; - - // schema files - public static final String DESIGN_SCHEMA_XSD = "DesignSchema.xsd"; - - public static final String DEPLOY_SCHEMA_XSD = "DeploySchema.xsd"; - - //file extensions - public static final String IEDESIGN_FILE = "silecsdesign"; - - public static final String IEDEPLOY_FILE = "silecsdeploy"; - - //name patterns - public static final String DESIGN_PATTERN = "[A-Z][A-Za-z0-9_]*"; - - public static final String DEPLOY_PATTERN = "[A-Z][A-Za-z0-9_]*"; - - public static final int MAX_DESIGN_LENGTH = 20; - - public static final int MAX_DEPLOY_LENGTH = 20; - - // SILECS versions which are supported by this plugin - public static final String[] SUPPORTED_SILECS_MAJOR_VERSIONS = { "1","DEV"}; - public static final List<String> ADDITIONAL_SILECS_TARGET_MIGRATION_VERSIONS = Arrays.asList("0.10.0"); //e.g. in order to allow migration from 0.9.0 to 0.10.0 - public static final int DEFAULT_SILECS_VERSION_INDEX = 0; - - // SILECS Versions which are NOT supported by this plugin - // All other versions foudn in the silecs-search path are supported - public static final String[] SILECS_VERSION_BLACKLIST = { "0.9.0" }; - - //Wizards - //New Design Wizard - public static final String NEW_DESIGN_WIZARD_TITLE = "New Design Wizard"; - public static final String NEW_DESIGN_PAGE_TITLE = "New Design Project"; - - //New Deploy Wizard - public static final String NEW_DEPLOY_WIZARD_TITLE = "New Deploy Wizard"; - public static final String NEW_DEPLOY_PAGE_TITLE = "New Deploy Project"; - - //New Class Wizard Page - - public static final String INVAILD_PROJECT_NAME= "Invaild project name. Project name must follow pattern:"; - - public static final String INITIAL_PROJECT_VERSION = "1.0.0"; - - //Generate Fesa Class Wizard - public static final String GENERATE_FESA_CLASS_WIZARD_TITLE = "Generate Fesa Class Wizard"; - public static final String GENERATE_FESA_CLASS_PAGE_TITLE = "Generate Fesa Class"; - - //Generate Client Resources Wizard - public static final String GENERATE_CLIENT_RESOURCES_WIZARD_TITLE = "Generate Client Resources Wizard"; - public static final String GENERATE_CLIENT_RESOURCES_PAGE_TITLE = "Generate Client Resources"; - - //Deliver Client Resources Wizard - public static final String DELIVER_CLIENT_RESOURCES_WIZARD_TITLE = "Deliver Client Resources Wizard"; - public static final String DELIVER_CLIENT_RESOURCES_PAGE_TITLE = "Deliver Client Resources"; - - //GSI-Hack Use GSI SILECS Wiki - //public static final String SILECS_WIKIS_PATH = "https://wikis.cern.ch/display/SIL"; - public static final String SILECS_WIKIS_PATH = "https://www-acc.gsi.de/wiki/Frontend/SILECS"; -} diff --git a/silecs-eclipse-plugin/src/java/cern/silecs/utils/SilecsUtils.java b/silecs-eclipse-plugin/src/java/cern/silecs/utils/SilecsUtils.java deleted file mode 100644 index 517c96b..0000000 --- a/silecs-eclipse-plugin/src/java/cern/silecs/utils/SilecsUtils.java +++ /dev/null @@ -1,311 +0,0 @@ -// Copyright 2016 CERN and GSI -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -package cern.silecs.utils; - -import java.io.File; -import java.net.URL; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; - -import org.eclipse.core.commands.ExecutionEvent; -import org.eclipse.core.commands.ExecutionException; -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.IProject; -import org.eclipse.core.runtime.FileLocator; -import org.eclipse.core.runtime.IAdaptable; -import org.eclipse.core.runtime.Path; -import org.eclipse.core.runtime.Platform; -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.jface.viewers.ITreeSelection; -import org.eclipse.jface.viewers.TreePath; -import org.eclipse.jface.viewers.TreeSelection; -import org.eclipse.swt.widgets.Display; -import org.eclipse.ui.IEditorDescriptor; -import org.eclipse.ui.IEditorPart; -import org.eclipse.ui.IFileEditorInput; -import org.eclipse.ui.IWorkbenchPage; -import org.eclipse.ui.IWorkbenchWindow; -import org.eclipse.ui.PlatformUI; -import org.eclipse.ui.handlers.HandlerUtil; -import org.eclipse.ui.part.FileEditorInput; -import org.w3c.dom.Document; -import org.w3c.dom.Node; - -import cern.silecs.activator.Activator; -import cern.silecs.control.core.DeployProjectNature; -import cern.silecs.control.core.DesignProjectNature; -import cern.silecs.model.exception.SilecsException; -import cern.silecs.view.console.ConsoleHandler; -import cern.silecs.view.preferences.MainPreferencePage; - -public class SilecsUtils { - - public static final String CLASS_VERSION_MATCHER = "version"; - - static public String userName; - static public boolean isWindows = false; - static { - String system = System.getProperty("os.name"); - isWindows = system.toLowerCase().contains("win"); - userName = System.getProperty("user.name"); - } - - public static String findInBundle(String resourceToLocate) { - try { - URL fileURL = FileLocator.find(Platform.getBundle(Activator.PLUGIN_ID), new Path(resourceToLocate), null); - fileURL = FileLocator.toFileURL(fileURL); - if(isWindows) - return fileURL.getPath().toString().substring(1); - - return fileURL.getPath().toString(); - } catch (Exception e1) { - e1.printStackTrace(); - } - return null; - } - - public static String getSilecsDesignFilePath(String workspacePath, String projectName) { - return workspacePath + "/" + projectName + "/" + getSilecsDesignFilePathRelative(projectName); - } - - public static String getSilecsDeployFilePath(String workspacePath, String projectName) { - return workspacePath + "/" + projectName + "/" + getSilecsDeployFilePathRelative(projectName); - } - - public static String getSilecsDesignFilePathRelative(String projectName) { - return "/src/" + projectName + "." + SilecsConstants.IEDESIGN_FILE; - } - - public static String getSilecsDeployFilePathRelative(String projectName){ - return "/src/" + projectName + "." + SilecsConstants.IEDEPLOY_FILE; - } - - public static Boolean isSilecsDesign(String filePath) - { - String extension = ""; - int i = filePath.lastIndexOf('.'); - if (i > 0) - extension = filePath.substring(i+1); - if(extension.equals(SilecsConstants.IEDESIGN_FILE) ) - return true; - return false; - } - - public static Boolean isSilecsDeploy(String filePath) - { - String extension = ""; - int i = filePath.lastIndexOf('.'); - if (i > 0) - extension = filePath.substring(i+1); - if(extension.equals(SilecsConstants.IEDEPLOY_FILE) ) - return true; - return false; - } - - public static IFile getSilecsDesignFile(IProject project) { - return project.getFile(getSilecsDesignFilePathRelative(project.getName())); - } - - public static IFile getSilecsDeployFile(IProject project) { - return project.getFile(getSilecsDeployFilePathRelative(project.getName())); - } - - public static IFile getSilecsDocument(IProject project) throws Exception - { - if ( project.hasNature(DesignProjectNature.NATURE_ID) ) - { - return SilecsUtils.getSilecsDesignFile(project); - } - else if( project.hasNature(DeployProjectNature.NATURE_ID) ) - { - return SilecsUtils.getSilecsDeployFile(project); - } - else - throw new Exception("The project: " + project.getName() + " is not a silecs-project"); - } - - public static String getSilecsVersion(IProject project) throws SilecsException { - String filePath = ""; - try - { - if( project.hasNature(DeployProjectNature.NATURE_ID) ) - { - filePath = getSilecsDeployFile(project).getRawLocation().makeAbsolute().toOSString(); - } - else if( project.hasNature(DesignProjectNature.NATURE_ID) ) - { - filePath = getSilecsDesignFile(project).getRawLocation().makeAbsolute().toOSString(); - } - else - { - throw new SilecsException("Faild to extract project nature from: " + project.getName()); - } - - DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); - DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); - Document doc = dBuilder.parse(filePath); - Node root; - if( project.hasNature(DesignProjectNature.NATURE_ID) ) - root = doc.getElementsByTagName("SILECS-Design").item(0); - else - root = doc.getElementsByTagName("SILECS-Deploy").item(0); - return root.getAttributes().getNamedItem("silecs-version").getTextContent(); - } - catch(Exception ex) - { - ConsoleHandler.printError("Faild to extract silecs-version from: " + filePath, true); - - throw new SilecsException("Faild to extract silecs-version from: " + filePath, ex); - } - } - - public static String getSilecsDesignVersion(String filePath) throws SilecsException { - try - { - DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); - DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); - Document doc = dBuilder.parse(filePath); - Node classNode = doc.getElementsByTagName("SILECS-Class").item(0); - return classNode.getAttributes().getNamedItem(CLASS_VERSION_MATCHER).getNodeValue(); - } - catch(Exception ex) - { - ConsoleHandler.printError("Faild to extract class-version from: " + filePath, true); - throw new SilecsException("Faild to extract class-version from: " + filePath, ex); - } - } - - public static String getDeployVersion(String filePath) throws SilecsException { - try - { - DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); - DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); - Document doc = dBuilder.parse(filePath); - Node deployNode = doc.getElementsByTagName("Deploy-Unit").item(0); - return deployNode.getAttributes().getNamedItem(CLASS_VERSION_MATCHER).getNodeValue(); - } - catch(Exception ex) - { - ConsoleHandler.printError("Faild to extract deploy-version from: " + filePath, true); - throw new SilecsException("Faild to extract deploy-version from: " + filePath, ex); - } - } - - public static void openInEditor(final IFile file) - { - Display.getDefault().asyncExec(new Runnable() { - @Override - public void run() { - IEditorDescriptor desc = PlatformUI.getWorkbench().getEditorRegistry().getDefaultEditor(file.getName()); - IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); - try { - page.openEditor(new FileEditorInput(file), desc.getId()); - } catch (Exception e) { - ConsoleHandler.printError("Failed to open file:" + file, true); - e.printStackTrace(); - } - } - }); - } - - - public static void checkSilecsVersion(IProject project) throws SilecsException - { - String version = getSilecsVersion(project); - if( isSilecsVersionSupported(version) == false ) - { - throw new SilecsException("The old silecs version: '" + version + "' is not supported by this silecs-plugin. Please update your SILECS project to a more recent version (right-click --> SILECS Update Project)"); - } - } - - - public static Boolean isSilecsVersionSupported(String version) - { - for(String supportedVersion: SilecsConstants.SUPPORTED_SILECS_MAJOR_VERSIONS) - { - if(version.startsWith(supportedVersion)) - return true; - } - return false; - } - - public static List<String> readOutAvailableSilecsVersions() - { - List<String> silecsVersions = new ArrayList<String>(); - if (MainPreferencePage.isLocalDirectoryUsed()) - { - silecsVersions.add("DEV"); - return silecsVersions; - } - - // We just pick any sub-project - File silecsBaseFolder = new File(MainPreferencePage.getGlobalSilecsDirectory() + "/silecs-model"); - for (final File fileEntry : silecsBaseFolder.listFiles()) - { - silecsVersions.add(fileEntry.getName()); - } - Collections.sort(silecsVersions); - Collections.reverse(silecsVersions); - return silecsVersions; - } - - public static IFile extractSilecsFileFromEvent(ExecutionEvent event) throws Exception - { - String parameter = event.getParameter("silecs-eclipse-plugin.commandParameter"); - if ( parameter.equals("menubar")) - { - IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindow(event); - IWorkbenchPage activePage = window.getActivePage(); - - // Get the Selection from the active WorkbenchPage page - ISelection selection = activePage.getSelection(); - if(selection instanceof ITreeSelection) // Event was triggered by right-click on project - { - TreeSelection treeSelection = (TreeSelection) selection; - TreePath[] treePaths = treeSelection.getPaths(); - TreePath treePath = treePaths[0]; - - // The first segment should be a IProject - Object firstSegmentObj = treePath.getFirstSegment(); - IProject theProject = (IProject) ((IAdaptable)firstSegmentObj).getAdapter(IProject.class); - if( theProject == null ) - { - ConsoleHandler.printError("Failed to find the right project", true); - throw new ExecutionException("Failed to find the right project"); - } - return getSilecsDocument(theProject); - } - } - if (parameter.equals("toolbar")) - { - // The default: the toolbar button was pressed - IEditorPart editor = HandlerUtil.getActiveEditor(event); - if (editor == null) - { - ConsoleHandler.printError("Failed to find active SILECS editor", true); - throw new Exception("Failed to find active SILECS editor"); - } - return ((IFileEditorInput) editor.getEditorInput()).getFile(); - } - String message = new String("Failed to find correct silecs-project/file - command: '" + event.getCommand().getName() + "' send with parameter: '" + parameter + "'."); - ConsoleHandler.printError(message, true); - throw new Exception(message); - } -} diff --git a/silecs-eclipse-plugin/src/java/cern/silecs/utils/XmlUtils.java b/silecs-eclipse-plugin/src/java/cern/silecs/utils/XmlUtils.java deleted file mode 100644 index 218810b..0000000 --- a/silecs-eclipse-plugin/src/java/cern/silecs/utils/XmlUtils.java +++ /dev/null @@ -1,188 +0,0 @@ -// Copyright 2016 CERN and GSI -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -package cern.silecs.utils; - -import java.io.StringWriter; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import javax.xml.transform.OutputKeys; -import javax.xml.transform.Transformer; -import javax.xml.transform.TransformerConfigurationException; -import javax.xml.transform.TransformerException; -import javax.xml.transform.TransformerFactory; -import javax.xml.transform.TransformerFactoryConfigurationError; -import javax.xml.transform.dom.DOMSource; -import javax.xml.transform.stream.StreamResult; - -import org.eclipse.jface.text.IDocument; -import org.eclipse.ui.IEditorPart; -import org.eclipse.ui.IEditorReference; -import org.eclipse.ui.IWorkbenchPage; -import org.eclipse.ui.IWorkbenchWindow; -import org.eclipse.ui.PlatformUI; -import org.eclipse.ui.texteditor.ITextEditor; -import org.eclipse.wst.sse.core.StructuredModelManager; -import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel; -import org.eclipse.wst.xml.core.internal.contentmodel.modelquery.ModelQuery; -import org.eclipse.wst.xml.core.internal.contentmodel.modelqueryimpl.CMDocumentLoader; -import org.eclipse.wst.xml.core.internal.contentmodel.modelqueryimpl.InferredGrammarBuildingCMDocumentLoader; -import org.eclipse.wst.xml.core.internal.modelquery.ModelQueryUtil; - -import org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel; -import org.w3c.dom.Attr; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; - -@SuppressWarnings("restriction") -public class XmlUtils { - - private static TransformerFactory TRANSFORMER_FACTORY; - - public static String nodeToString(Node node) throws TransformerFactoryConfigurationError, TransformerException { - Transformer transformer = createPrettyTransformer(); - - // if given node is not a complete document, we do not - // put the xml declaration. we also omit if the document already has - // a type - if (!(node instanceof Document) || ((Document) node).getDoctype() != null) { - transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes"); - } - - // write node to string - DOMSource source = new DOMSource(node); - StringWriter writer = new StringWriter(); - StreamResult result = new StreamResult(writer); - transformer.transform(source, result); - - return writer.toString(); - } - - - private static Transformer createPrettyTransformer() throws TransformerConfigurationException, - TransformerFactoryConfigurationError { - if (TRANSFORMER_FACTORY == null) { - TRANSFORMER_FACTORY = TransformerFactory.newInstance(); - } - Transformer t = TRANSFORMER_FACTORY.newTransformer(); - t.setOutputProperty(OutputKeys.INDENT, "yes"); - t.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4"); - - return t; - } - - public static String xPathFromNode(Node node) { - if (node == null) { - return ""; - } - - switch (node.getNodeType()) { - case Node.DOCUMENT_NODE: - return ""; - - case Node.ATTRIBUTE_NODE: - Attr attr = (Attr) node; - return xPathFromNode(attr.getOwnerElement()) + "/@" + attr.getName(); - - case Node.ELEMENT_NODE: - Element elem = (Element) node; - Node parent = elem.getParentNode(); - String name = elem.getTagName(); - NodeList childs = parent.getChildNodes(); - - int index = 1; - for (int i = 0; i < childs.getLength(); i++) { - Node n = childs.item(i); - if (n.equals(elem)) { - // first element in xPath is 1, not 0 - return xPathFromNode(parent) + "/" + node.getNodeName() + "[" + index + "]"; - } else if (n instanceof Element && n.getNodeName().equals(name)) { - // there is another element with the same name before in the list - index++; - } - } - - default: - throw new IllegalStateException("Unexpected Node type: " + node.getNodeType()); - } - } - - /** - * Return the string contained in the string builder. Remove the ending if equals to the parameter (use for joining - * strings in loops) - * - * @param stringBuilder - * @param endingToRemove - * @return - */ - public static String finalize(StringBuilder stringBuilder, String endingToRemove) { - if (stringBuilder == null) { - throw new IllegalArgumentException("stringBuilder cannot be null"); - } else if (endingToRemove == null) { - throw new IllegalArgumentException("endingToRemove cannot be null"); - } - - int length = stringBuilder.length(); - int endingLength = endingToRemove.length(); - if (length > endingLength && stringBuilder.substring(length - endingLength).equals(endingToRemove)) { - return stringBuilder.substring(0, length - endingLength); - } else { - return stringBuilder.toString(); - } - } - - public static void reloadDependencies() { - List<IEditorReference> editors = new ArrayList<>(); - for (IWorkbenchWindow window : PlatformUI.getWorkbench().getWorkbenchWindows()) { - for (IWorkbenchPage page : window.getPages()) { - editors.addAll(Arrays.asList(page.getEditorReferences())); - } - } - - for (IEditorReference er : editors) { - IEditorPart editor = er.getEditor(false); - ITextEditor textEditor = null; - if (editor instanceof ITextEditor) - textEditor = (ITextEditor) editor; - else if (editor != null) { - Object o = editor.getAdapter(ITextEditor.class); - if (o != null) - textEditor = (ITextEditor) o; - } - if (textEditor != null) { - IDocument document = textEditor.getDocumentProvider().getDocument(textEditor.getEditorInput()); - IStructuredModel model = StructuredModelManager.getModelManager().getExistingModelForRead(document); - if (model != null) { - ModelQuery modelQuery = null; - try { - modelQuery = ModelQueryUtil.getModelQuery(model); - } finally { - model.releaseFromRead(); - } - Document domDocument = ((IDOMModel) model).getDocument(); - if ((modelQuery != null) && (modelQuery.getCMDocumentManager() != null)) { - modelQuery.getCMDocumentManager().getCMDocumentCache().clear(); - CMDocumentLoader loader = new InferredGrammarBuildingCMDocumentLoader(domDocument, modelQuery); - loader.loadCMDocuments(); - } - } - } - } - } -} diff --git a/silecs-eclipse-plugin/src/java/cern/silecs/view/Application.java b/silecs-eclipse-plugin/src/java/cern/silecs/view/Application.java deleted file mode 100644 index b74bc99..0000000 --- a/silecs-eclipse-plugin/src/java/cern/silecs/view/Application.java +++ /dev/null @@ -1,68 +0,0 @@ -// Copyright 2016 CERN and GSI -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -package cern.silecs.view; - -import org.eclipse.equinox.app.IApplication; -import org.eclipse.equinox.app.IApplicationContext; -import org.eclipse.swt.widgets.Display; -import org.eclipse.ui.IWorkbench; -import org.eclipse.ui.PlatformUI; - -/** - * This class controls all aspects of the application's execution - */ -public class Application implements IApplication { - - /* (non-Javadoc) - * @see org.eclipse.equinox.app.IApplication#start(org.eclipse.equinox.app.IApplicationContext) - */ - @Override - public Object start(IApplicationContext context) throws Exception { - Display display = PlatformUI.createDisplay(); - - // Displaying ChooseWorkspace Dialog and then assigning new workspace to the application - // Add "-data @noDefault" to PROGRAM ARGUMENTS to make workspace choosing working - - try { - int returnCode = PlatformUI.createAndRunWorkbench(display, new ApplicationWorkbenchAdvisor()); - if (returnCode == PlatformUI.RETURN_RESTART) - return IApplication.EXIT_RESTART; - else - return IApplication.EXIT_OK; - } finally { - display.dispose(); - } - - } - - /* (non-Javadoc) - * @see org.eclipse.equinox.app.IApplication#stop() - */ - @Override - public void stop() { - if (!PlatformUI.isWorkbenchRunning()) - return; - final IWorkbench workbench = PlatformUI.getWorkbench(); - final Display display = workbench.getDisplay(); - display.syncExec(new Runnable() { - @Override - public void run() { - if (!display.isDisposed()) - workbench.close(); - } - }); - } -} diff --git a/silecs-eclipse-plugin/src/java/cern/silecs/view/ApplicationActionBarAdvisor.java b/silecs-eclipse-plugin/src/java/cern/silecs/view/ApplicationActionBarAdvisor.java deleted file mode 100644 index 8ff8da6..0000000 --- a/silecs-eclipse-plugin/src/java/cern/silecs/view/ApplicationActionBarAdvisor.java +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2016 CERN and GSI -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -package cern.silecs.view; - - -import org.eclipse.ui.application.ActionBarAdvisor; -import org.eclipse.ui.application.IActionBarConfigurer; - -public class ApplicationActionBarAdvisor extends ActionBarAdvisor { - - public ApplicationActionBarAdvisor(IActionBarConfigurer configurer) { - super(configurer); - } -} diff --git a/silecs-eclipse-plugin/src/java/cern/silecs/view/ApplicationWorkbenchAdvisor.java b/silecs-eclipse-plugin/src/java/cern/silecs/view/ApplicationWorkbenchAdvisor.java deleted file mode 100644 index 6d6f682..0000000 --- a/silecs-eclipse-plugin/src/java/cern/silecs/view/ApplicationWorkbenchAdvisor.java +++ /dev/null @@ -1,74 +0,0 @@ -// Copyright 2016 CERN and GSI -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -package cern.silecs.view; - -import java.net.URL; -import java.net.URLClassLoader; - -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.IResource; -import org.eclipse.core.resources.IResourceChangeEvent; -import org.eclipse.core.resources.IResourceChangeListener; -import org.eclipse.core.resources.IResourceDelta; -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IAdaptable; -import org.eclipse.ui.IWorkbenchPreferenceConstants; -import org.eclipse.ui.PlatformUI; -import org.eclipse.ui.application.IWorkbenchConfigurer; -import org.eclipse.ui.application.IWorkbenchWindowConfigurer; -import org.eclipse.ui.application.WorkbenchAdvisor; -import org.eclipse.ui.application.WorkbenchWindowAdvisor; -import org.eclipse.ui.ide.IDE; - -import cern.silecs.utils.OSExecute; -import cern.silecs.utils.SilecsConstants; -import cern.silecs.utils.XmlUtils; -import cern.silecs.view.console.ConsoleHandler; - -/** - * In this class a lot of initialization takes place because this is the point when workbench is already created. - */ -public class ApplicationWorkbenchAdvisor extends WorkbenchAdvisor { - - private static final String PERSPECTIVE_ID = "silecs.eclipse.plugin.perspective"; //$NON-NLS-1$ - - @Override - public WorkbenchWindowAdvisor createWorkbenchWindowAdvisor(IWorkbenchWindowConfigurer configurer) { - return new ApplicationWorkbenchWindowAdvisor(configurer); - } - - @Override - public String getInitialWindowPerspectiveId() { - return PERSPECTIVE_ID; - } - - @Override - public void initialize(IWorkbenchConfigurer configurer) { - super.initialize(configurer); - - configurer.setSaveAndRestore(true); - PlatformUI.getPreferenceStore().setValue(IWorkbenchPreferenceConstants.SHOW_TRADITIONAL_STYLE_TABS, false); - - IDE.registerAdapters(); - } - - @Override - public IAdaptable getDefaultPageInput() { - return ResourcesPlugin.getWorkspace().getRoot(); - } - -} diff --git a/silecs-eclipse-plugin/src/java/cern/silecs/view/ApplicationWorkbenchWindowAdvisor.java b/silecs-eclipse-plugin/src/java/cern/silecs/view/ApplicationWorkbenchWindowAdvisor.java deleted file mode 100644 index c8de392..0000000 --- a/silecs-eclipse-plugin/src/java/cern/silecs/view/ApplicationWorkbenchWindowAdvisor.java +++ /dev/null @@ -1,179 +0,0 @@ -// Copyright 2016 CERN and GSI -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -package cern.silecs.view; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.swt.graphics.Point; -import org.eclipse.ui.IEditorPart; -import org.eclipse.ui.IFileEditorInput; -import org.eclipse.ui.IPartListener; -import org.eclipse.ui.IWorkbench; -import org.eclipse.ui.IWorkbenchPage; -import org.eclipse.ui.IWorkbenchPart; -import org.eclipse.ui.PlatformUI; -import org.eclipse.ui.application.ActionBarAdvisor; -import org.eclipse.ui.application.IActionBarConfigurer; -import org.eclipse.ui.application.IWorkbenchWindowConfigurer; -import org.eclipse.ui.application.WorkbenchWindowAdvisor; -import org.eclipse.ui.internal.dialogs.WorkbenchWizardElement; -import org.eclipse.ui.internal.wizards.AbstractExtensionWizardRegistry; -import org.eclipse.ui.wizards.IWizardCategory; -import org.eclipse.ui.wizards.IWizardDescriptor; - -import cern.silecs.utils.SilecsConstants; - -@SuppressWarnings("restriction") -public class ApplicationWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor { - - public ApplicationWorkbenchWindowAdvisor(IWorkbenchWindowConfigurer configurer) { - super(configurer); - } - - @Override - public ActionBarAdvisor createActionBarAdvisor(IActionBarConfigurer configurer) { - return new ApplicationActionBarAdvisor(configurer); - } - - @Override - public void preWindowOpen() { - IWorkbenchWindowConfigurer configurer = getWindowConfigurer(); - configurer.setInitialSize(new Point(700, 500)); - configurer.setShowCoolBar(true); - configurer.setShowStatusLine(true); - configurer.setTitle(SilecsConstants.SILECS_NAME); //$NON-NLS-1$ - configurer.setShowProgressIndicator(true); - } - - @Override - public void postWindowOpen() { - super.postWindowOpen(); - - addChangedEditorListener(); - - // removing unnecessary wizards from new and import menu. - AbstractExtensionWizardRegistry wizardRegistry = (AbstractExtensionWizardRegistry) PlatformUI.getWorkbench() - .getNewWizardRegistry(); - IWizardCategory[] categories = PlatformUI.getWorkbench().getNewWizardRegistry().getRootCategory() - .getCategories(); - - for (IWizardDescriptor wizard : getAllWizards(categories)) { - if (wizard.getCategory().getId().matches("org.eclipse.ui.Basic")) { - WorkbenchWizardElement wizardElement = (WorkbenchWizardElement) wizard; - wizardRegistry.removeExtension(wizardElement.getConfigurationElement().getDeclaringExtension(), - new Object[] { wizardElement }); - } else if (wizard.getCategory().getId().matches("org.eclipse.wst.xml.examples")) { - WorkbenchWizardElement wizardElement = (WorkbenchWizardElement) wizard; - wizardRegistry.removeExtension(wizardElement.getConfigurationElement().getDeclaringExtension(), - new Object[] { wizardElement }); - } else if (wizard.getCategory().getId().matches("org.eclipse.wst.XMLCategory")) { - WorkbenchWizardElement wizardElement = (WorkbenchWizardElement) wizard; - wizardRegistry.removeExtension(wizardElement.getConfigurationElement().getDeclaringExtension(), - new Object[] { wizardElement }); - } else if (wizard.getCategory().getId().matches("org.eclipse.cdt.ui.newCWizards")) { - WorkbenchWizardElement wizardElement = (WorkbenchWizardElement) wizard; - wizardRegistry.removeExtension(wizardElement.getConfigurationElement().getDeclaringExtension(), - new Object[] { wizardElement }); - } - - } - - wizardRegistry = (AbstractExtensionWizardRegistry) PlatformUI.getWorkbench().getImportWizardRegistry(); - - categories = PlatformUI.getWorkbench().getImportWizardRegistry().getRootCategory().getCategories(); - - for (IWizardDescriptor wizard : getAllWizards(categories)) { - if (wizard.getCategory().getId().matches("org.eclipse.cdt.ui.importWizardCategory")) { - WorkbenchWizardElement wizardElement = (WorkbenchWizardElement) wizard; - wizardRegistry.removeExtension(wizardElement.getConfigurationElement().getDeclaringExtension(), - new Object[] { wizardElement }); - } else if (wizard.getCategory().getId().matches("org.eclipse.debug.ui")) { - WorkbenchWizardElement wizardElement = (WorkbenchWizardElement) wizard; - wizardRegistry.removeExtension(wizardElement.getConfigurationElement().getDeclaringExtension(), - new Object[] { wizardElement }); - } else if (wizard.getCategory().getId().matches("org.eclipse.wst.XMLCategory")) { - WorkbenchWizardElement wizardElement = (WorkbenchWizardElement) wizard; - wizardRegistry.removeExtension(wizardElement.getConfigurationElement().getDeclaringExtension(), - new Object[] { wizardElement }); - } else if (wizard.getCategory().getId().matches("org.eclipse.team.ui.importWizards")) { - WorkbenchWizardElement wizardElement = (WorkbenchWizardElement) wizard; - wizardRegistry.removeExtension(wizardElement.getConfigurationElement().getDeclaringExtension(), - new Object[] { wizardElement }); - } - } - } - - private IWizardDescriptor[] getAllWizards(IWizardCategory[] categories) { - List<IWizardDescriptor> results = new ArrayList<IWizardDescriptor>(); - for (IWizardCategory wizardCategory : categories) { - results.addAll(Arrays.asList(wizardCategory.getWizards())); - results.addAll(Arrays.asList(getAllWizards(wizardCategory.getCategories()))); - } - return results.toArray(new IWizardDescriptor[0]); - } - - private void addChangedEditorListener() { - IWorkbench workbench = PlatformUI.getWorkbench(); - IWorkbenchPage page = workbench.getActiveWorkbenchWindow().getActivePage(); - page.addPartListener(new IPartListener() { - - @Override - public void partOpened(IWorkbenchPart part) { - setApplicationTitle(); - } - - @Override - public void partDeactivated(IWorkbenchPart part) { - setApplicationTitle(); - } - - @Override - public void partClosed(IWorkbenchPart part) { - setApplicationTitle(); - } - - @Override - public void partBroughtToTop(IWorkbenchPart part) { - setApplicationTitle(); - } - - @Override - public void partActivated(IWorkbenchPart part) { - setApplicationTitle(); - } - - private void setApplicationTitle() { -// IEditorPart editorPart = page.getActiveEditor(); -// IWorkbenchWindowConfigurer configurer = getWindowConfigurer(); -// -// if (editorPart != null) { -// IFileEditorInput editorInput = (IFileEditorInput) editorPart.getEditorInput(); -// IFile file = editorInput.getFile(); -// -// configurer.setTitle(file.getFullPath() + " - " + SilecsConstants.SILECS_NAME + " - " -// + ResourcesPlugin.getWorkspace()); -// } else { -// configurer.setTitle(SilecsConstants.SILECS_NAME + " - " + ResourcesPlugin.getWorkspace() ); -// } - } - }); - - } -} diff --git a/silecs-eclipse-plugin/src/java/cern/silecs/view/Perspective.java b/silecs-eclipse-plugin/src/java/cern/silecs/view/Perspective.java deleted file mode 100644 index 2404834..0000000 --- a/silecs-eclipse-plugin/src/java/cern/silecs/view/Perspective.java +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2016 CERN and GSI -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -package cern.silecs.view; - -import org.eclipse.ui.IPageLayout; -import org.eclipse.ui.IPerspectiveFactory; - -public class Perspective implements IPerspectiveFactory { - - @Override - public void createInitialLayout(IPageLayout layout) { - // TODO Auto-generated method stub - - } -} diff --git a/silecs-eclipse-plugin/src/java/cern/silecs/view/console/ConsoleHandler.java b/silecs-eclipse-plugin/src/java/cern/silecs/view/console/ConsoleHandler.java deleted file mode 100644 index 454b9d5..0000000 --- a/silecs-eclipse-plugin/src/java/cern/silecs/view/console/ConsoleHandler.java +++ /dev/null @@ -1,109 +0,0 @@ -// Copyright 2016 CERN and GSI -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -package cern.silecs.view.console; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.widgets.Display; -import org.eclipse.ui.console.ConsolePlugin; -import org.eclipse.ui.console.IConsole; -import org.eclipse.ui.console.MessageConsole; -import org.eclipse.ui.console.MessageConsoleStream; - -public class ConsoleHandler { - - private static MessageConsole console; - private static MessageConsoleStream messageStream; - private static MessageConsoleStream errorStream; - private static MessageConsoleStream warningStream; - - static { - console = new MessageConsole("Console", null); - ConsolePlugin.getDefault().getConsoleManager().addConsoles(new IConsole[] { console }); - - messageStream = console.newMessageStream(); - errorStream = console.newMessageStream(); - warningStream = console.newMessageStream(); - - final Display display = Display.getDefault(); - Display.getDefault().asyncExec(new Runnable() - { - public void run() - { - errorStream.setColor(display.getSystemColor(SWT.COLOR_RED)); - warningStream.setColor(display.getSystemColor(SWT.COLOR_DARK_YELLOW)); - } - }); - } - - public static void clear() { - console.clearConsole(); - } - - /** - * Prints message in the silecs console. - * - * @param message Message to appear in the console - * @param activateOnWrite determines whether to activate the console - */ - public static void printMessage(String message, boolean activateOnWrite) { - messageStream.setActivateOnWrite(activateOnWrite); - messageStream.println(message); - } - - /** - * Prints error message in the silecs console. - * - * @param Error message to appear in the console - * @param activateOnWrite determines whether to activate the console - */ - public static void printError(String message, boolean activateOnWrite) { - errorStream.setActivateOnWrite(activateOnWrite); - errorStream.println(message); - } - - - private static void printTrace(Throwable ex) { - if( ex == null) - return; - StackTraceElement[] stacktrace = ex.getStackTrace(); - - for(int i=1; i<stacktrace.length; i++){ - errorStream.println(stacktrace[i].toString()); - } - } - - public static void printStackTrace(Exception ex) { - errorStream.println(ex.getLocalizedMessage()); - errorStream.println("Stacktrace: "); - printTrace(ex); - errorStream.println("Caused by: "); - printTrace(ex.getCause()); - errorStream.setActivateOnWrite(true); - } - - - /** - * Prints error message in the silecs console. - * - * @param Warning message to appear in the console - * @param activateOnWrite determines whether to activate the console - */ - public static void printWarning(String message, boolean activateOnWrite) { - warningStream.setActivateOnWrite(activateOnWrite); - warningStream.println(message); - } - -} diff --git a/silecs-eclipse-plugin/src/java/cern/silecs/view/dialogs/SilecsMessageDialog.java b/silecs-eclipse-plugin/src/java/cern/silecs/view/dialogs/SilecsMessageDialog.java deleted file mode 100644 index d9ea685..0000000 --- a/silecs-eclipse-plugin/src/java/cern/silecs/view/dialogs/SilecsMessageDialog.java +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright 2016 CERN and GSI -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -package cern.silecs.view.dialogs; - -import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.widgets.Shell; -import org.eclipse.ui.PlatformUI; - -import cern.silecs.utils.SilecsUtils; - -/** - * This class adds Silecs logo to jface Message Dialog. - * @see MessageDialog - */ -public class SilecsMessageDialog extends MessageDialog{ - - private Image image = null; - - /** - * @see MessageDialog#MessageDialog(Shell, String, Image, String, int, String[], int) - */ - public SilecsMessageDialog(Shell parentShell, String dialogTitle, Image dialogTitleImage, String dialogMessage, - int dialogImageType, String[] dialogButtonLabels, int defaultIndex) { - super(parentShell, dialogTitle, dialogTitleImage, dialogMessage, dialogImageType, dialogButtonLabels, defaultIndex); - - String imagePath = SilecsUtils.findInBundle("icons/silecs-logo.ico"); - image = new Image(PlatformUI.getWorkbench().getDisplay(), imagePath); - } - - @Override - public Image getImage() { - return image; - } -} \ No newline at end of file diff --git a/silecs-eclipse-plugin/src/java/cern/silecs/view/editor/DeployMultiPageEditor.java b/silecs-eclipse-plugin/src/java/cern/silecs/view/editor/DeployMultiPageEditor.java deleted file mode 100644 index e1d4967..0000000 --- a/silecs-eclipse-plugin/src/java/cern/silecs/view/editor/DeployMultiPageEditor.java +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2016 CERN and GSI -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -package cern.silecs.view.editor; - -public class DeployMultiPageEditor extends XMLMultiPageEditor { - - public static String ID = "cern.silecs.view.editors.deploy"; - public DeployMultiPageEditor() { - super(); - } - -} diff --git a/silecs-eclipse-plugin/src/java/cern/silecs/view/editor/DesignMultiPageEditor.java b/silecs-eclipse-plugin/src/java/cern/silecs/view/editor/DesignMultiPageEditor.java deleted file mode 100644 index f8f5711..0000000 --- a/silecs-eclipse-plugin/src/java/cern/silecs/view/editor/DesignMultiPageEditor.java +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2016 CERN and GSI -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -package cern.silecs.view.editor; - -public class DesignMultiPageEditor extends XMLMultiPageEditor { - - public static String ID = "cern.silecs.view.editors.design"; - public DesignMultiPageEditor() { - super(); - } - -} diff --git a/silecs-eclipse-plugin/src/java/cern/silecs/view/editor/XMLMultiPageEditor.java b/silecs-eclipse-plugin/src/java/cern/silecs/view/editor/XMLMultiPageEditor.java deleted file mode 100644 index 1ca464a..0000000 --- a/silecs-eclipse-plugin/src/java/cern/silecs/view/editor/XMLMultiPageEditor.java +++ /dev/null @@ -1,169 +0,0 @@ -// Copyright 2016 CERN and GSI -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -package cern.silecs.view.editor; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.IResourceChangeEvent; -import org.eclipse.core.resources.ResourcesPlugin; - -import org.eclipse.jface.text.BadLocationException; -import org.eclipse.jface.text.IDocument; -import org.eclipse.jface.text.IRegion; -import org.eclipse.jface.text.ITextViewer; -import org.eclipse.swt.layout.GridData; -import org.eclipse.ui.IEditorInput; -import org.eclipse.ui.IEditorPart; -import org.eclipse.ui.IEditorReference; -import org.eclipse.ui.IEditorSite; -import org.eclipse.ui.IFileEditorInput; -import org.eclipse.ui.IWorkbenchPage; -import org.eclipse.ui.IWorkbenchWindow; -import org.eclipse.ui.PartInitException; -import org.eclipse.ui.PlatformUI; -import org.eclipse.wst.sse.ui.StructuredTextEditor; -import org.eclipse.wst.sse.ui.internal.contentassist.ContentAssistUtils; -import org.eclipse.wst.xml.core.internal.document.NodeImpl; -import org.eclipse.wst.xml.ui.internal.XMLUIPlugin; -import org.eclipse.wst.xml.ui.internal.tabletree.IDesignViewer; -import org.eclipse.wst.xml.ui.internal.tabletree.XMLMultiPageEditorPart; -import org.eclipse.wst.xml.ui.internal.tabletree.XMLTableTreeHelpContextIds; -import org.eclipse.core.runtime.IProgressMonitor; - -import cern.silecs.view.console.ConsoleHandler; -import cern.silecs.view.editor.internal.SilecsXMLTableTreeViewer; -import cern.silecs.view.job.ValidationJob; - -@SuppressWarnings("restriction") -public class XMLMultiPageEditor extends XMLMultiPageEditorPart { - - SilecsXMLTableTreeViewer xmlTableTreeViewer; - - public XMLMultiPageEditor() { - super(); - } - - @Override - public void init(IEditorSite site, IEditorInput input) throws PartInitException { - super.init(site, input); - - // useless to instantiate toolbar since not used - noToolbar(); - } - - @Override - public void dispose() { - ResourcesPlugin.getWorkspace().removeResourceChangeListener(xmlTableTreeViewer); - super.dispose(); - } - - @Override - protected void createPages() { - super.createPages(); - - // add itself as resource change listener - ResourcesPlugin.getWorkspace().addResourceChangeListener(xmlTableTreeViewer, IResourceChangeEvent.POST_CHANGE); - } - - @Override - protected IDesignViewer createDesignPage() { - xmlTableTreeViewer = new SilecsXMLTableTreeViewer(getContainer(), this); - xmlTableTreeViewer.getControl().setLayoutData(new GridData(GridData.FILL_BOTH)); - - // Set the default info-pop for XML design viewer. - XMLUIPlugin.getInstance().getWorkbench().getHelpSystem() - .setHelp(xmlTableTreeViewer.getControl(), XMLTableTreeHelpContextIds.XML_DESIGN_VIEW_HELPID); - - return xmlTableTreeViewer; - } - - public IDocument getDocument() { - IDocument document = null; - StructuredTextEditor textEditor = (StructuredTextEditor) getAdapter(StructuredTextEditor.class); - if (textEditor != null) { - document = textEditor.getDocumentProvider().getDocument(textEditor.getEditorInput()); - } - - return document; - } - - public static XMLMultiPageEditor getOpenedEditor(IFile file) { - - // get all the opened editors - List<IEditorReference> editors = new ArrayList<>(); - for (IWorkbenchWindow window : PlatformUI.getWorkbench().getWorkbenchWindows()) { - for (IWorkbenchPage page : window.getPages()) { - editors.addAll(Arrays.asList(page.getEditorReferences())); - } - } - - for (IEditorReference er : editors) { - IEditorPart editor = er.getEditor(false); - try { - IEditorInput editorInput = er.getEditorInput(); - if (editor instanceof XMLMultiPageEditor && editorInput instanceof IFileEditorInput) { - IFileEditorInput input = (IFileEditorInput) editorInput; - - if (input.getFile().equals(file)) { - return (XMLMultiPageEditor) editor; - } - } - } catch (PartInitException e) { - e.printStackTrace(); - } - } - return null; - } - - - public NodeImpl getNodeAtPosition(int line, int column) { - try { - // line 1 is considered as line 0 by eclipse - // same for columns - if (line > 0) { - IRegion region = getDocument().getLineInformation(line - 1); - ITextViewer viewer = ((StructuredTextEditor) getAdapter(StructuredTextEditor.class)).getTextViewer(); - return (NodeImpl) ContentAssistUtils.getNodeAt(viewer, region.getOffset() + column - 2); - } - } catch (BadLocationException e) { - e.printStackTrace(); - } - - return null; - } - - @Override - public void doSave(IProgressMonitor monitor) - { - IEditorInput editorInput = getEditorInput(); - if (editorInput instanceof IFileEditorInput) - { - IFile fesaFile = ((IFileEditorInput) editorInput).getFile(); - - super.doSave(monitor); - - ConsoleHandler.printMessage("Validating XML ...", true); - ValidationJob job; - job = new ValidationJob(fesaFile); - job.schedule(); - } - } - - -} diff --git a/silecs-eclipse-plugin/src/java/cern/silecs/view/editor/internal/SchemaHelper.java b/silecs-eclipse-plugin/src/java/cern/silecs/view/editor/internal/SchemaHelper.java deleted file mode 100644 index 0754660..0000000 --- a/silecs-eclipse-plugin/src/java/cern/silecs/view/editor/internal/SchemaHelper.java +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright 2016 CERN and GSI -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -package cern.silecs.view.editor.internal; - -import java.util.Collections; -import java.util.List; - -import org.eclipse.wst.xml.core.internal.contentmodel.CMElementDeclaration; -import org.eclipse.wst.xml.core.internal.document.CMNodeUtil; -import org.eclipse.wst.xsd.contentmodel.internal.XSDImpl.XSDElementDeclarationAdapter; -import org.eclipse.xsd.XSDElementDeclaration; -import org.eclipse.xsd.XSDIdentityConstraintDefinition; -import org.w3c.dom.Element; - -@SuppressWarnings("restriction") -public abstract class SchemaHelper { - - public static List<XSDIdentityConstraintDefinition> findIdentityConstraints(Element element) { - CMElementDeclaration elemDecl = CMNodeUtil.getElementDeclaration(element); - if (elemDecl instanceof XSDElementDeclarationAdapter) { - XSDElementDeclarationAdapter xsdElemAdapt = (XSDElementDeclarationAdapter) elemDecl; - XSDElementDeclaration xsdElementDecl = (XSDElementDeclaration) xsdElemAdapt.getKey(); - - // get all the key constraints definitions - List<XSDIdentityConstraintDefinition> constraints = xsdElementDecl.getResolvedElementDeclaration() - .getIdentityConstraintDefinitions(); - constraints.addAll(xsdElementDecl.getResolvedElementDeclaration().getIdentityConstraintDefinitions()); - - return constraints; - } else { - return Collections.emptyList(); - } - } - - public static XSDIdentityConstraintDefinition findIdentityConstraint(Element element, String constraintName) { - List<XSDIdentityConstraintDefinition> constraints = findIdentityConstraints(element); - for (XSDIdentityConstraintDefinition c : constraints) { - if (c.getName().equals(constraintName)) { - return c; - } - } - - return null; - } -} diff --git a/silecs-eclipse-plugin/src/java/cern/silecs/view/editor/internal/SilecsTableColumnViewerLabelProvider.java b/silecs-eclipse-plugin/src/java/cern/silecs/view/editor/internal/SilecsTableColumnViewerLabelProvider.java deleted file mode 100644 index 75fd12b..0000000 --- a/silecs-eclipse-plugin/src/java/cern/silecs/view/editor/internal/SilecsTableColumnViewerLabelProvider.java +++ /dev/null @@ -1,181 +0,0 @@ -// Copyright 2016 CERN and GSI -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -package cern.silecs.view.editor.internal; - -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; - -import org.eclipse.core.resources.IMarker; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.jface.viewers.CellLabelProvider; -import org.eclipse.jface.viewers.LabelProviderChangedEvent; -import org.eclipse.jface.viewers.ViewerCell; -import org.eclipse.swt.SWT; -import org.eclipse.swt.graphics.Color; -import org.eclipse.swt.graphics.Point; -import org.eclipse.swt.widgets.Display; -import org.eclipse.wst.xml.ui.internal.tabletree.XMLTableTreeContentProvider; -import org.w3c.dom.Node; - -import cern.silecs.utils.XmlUtils; - - -/** - * Label provider for the design view of the FesaEditor - */ -@SuppressWarnings("restriction") -public class SilecsTableColumnViewerLabelProvider extends CellLabelProvider { - - private static final int TOOLTIP_DELAY_MS = 500; - - // since we could not have multiple inheritance in java, - // we inject the base label provider in this CellLabelProvider - // which adds support for tool-tips in the registered treeViewer - private final XMLTableTreeContentProvider baseLabelProvider; - - // These 2 maps behave like a bidirectional map - // marker -> node - // node -> Set<marker> - private final Map<IMarker, Node> markerToNode = new HashMap<>(); - private final Map<Node, Set<IMarker>> nodeToMarkers = new HashMap<>(); - - public SilecsTableColumnViewerLabelProvider(XMLTableTreeContentProvider baseLabelProvider) { - this.baseLabelProvider = baseLabelProvider; - } - - /** - * Register an error/warning with its associated node - * Fire a label provider changed event - * - * @param marker - * @param node - */ - public void addFault(IMarker marker, Node node) { - markerToNode.put(marker, node); - if (nodeToMarkers.containsKey(node)) { - nodeToMarkers.get(node).add(marker); - } else { - Set<IMarker> markers = new HashSet<>(); - markers.add(marker); - nodeToMarkers.put(node, markers); - } - - fireLabelProviderChanged(new LabelProviderChangedEvent(this, node)); - } - - /** - * Remove the marker and its associated node from the faulty list - * Fire a label provider changed event - * - * @param marker - */ - public void removeFault(IMarker marker) { - Node node = markerToNode.remove(marker); - if (node != null) { - Set<IMarker> markers = nodeToMarkers.get(node); - markers.remove(marker); - if (markers.isEmpty()) { - nodeToMarkers.remove(node); - } - fireLabelProviderChanged(new LabelProviderChangedEvent(this, node)); - } - } - - /** - * Clears all the registered marker/nodes - */ - public void clearFaults() { - markerToNode.clear(); - nodeToMarkers.clear(); - } - - /** - * Provide a tool-tip for the faulty node with the error message of the associated markers - */ - @Override - public String getToolTipText(Object element) { - if (nodeToMarkers.containsKey(element)) { - Set<IMarker> markers = nodeToMarkers.get(element); - StringBuilder sb = new StringBuilder(); - for (IMarker marker : markers) { - try { - sb.append(marker.getAttribute(IMarker.MESSAGE) + "\n"); - } catch (CoreException e) { - // don't do anything - } - } - - return XmlUtils.finalize(sb, "\n"); - } - - return null; - } - - @Override - public Point getToolTipShift(Object object) { - return new Point(5, 5); - } - - @Override - public int getToolTipDisplayDelayTime(Object object) { - return TOOLTIP_DELAY_MS; - } - - @Override - public int getToolTipTimeDisplayed(Object object) { - return -1; - } - - /** - * Use the base label provider for the content If the element is fault, compute the background color - */ - @Override - public void update(ViewerCell cell) { - Object element = cell.getElement(); - int index = cell.getColumnIndex(); - - cell.setText(baseLabelProvider.getColumnText(element, index)); - cell.setImage(baseLabelProvider.getColumnImage(element, index)); - - cell.setForeground(baseLabelProvider.getForeground(element, index)); - if (nodeToMarkers.containsKey(element)) { - // background of the faulty cell - cell.setBackground(computeCellBackground((Node) element)); - } else { - cell.setBackground(baseLabelProvider.getBackground(element, index)); - } - } - - /** - * Helper to compute the background color of a faulty cell - * - * @param node - * @return - */ - private Color computeCellBackground(Node node) { - Set<IMarker> markers = nodeToMarkers.get(node); - int color = SWT.COLOR_YELLOW; - for (IMarker marker : markers) { - if (marker.getAttribute(IMarker.SEVERITY, IMarker.SEVERITY_ERROR) == IMarker.SEVERITY_ERROR) { - color = SWT.COLOR_RED; - break; - } - } - return Display.getCurrent().getSystemColor(color); - } -} diff --git a/silecs-eclipse-plugin/src/java/cern/silecs/view/editor/internal/SilecsXMLTableTreeContentProvider.java b/silecs-eclipse-plugin/src/java/cern/silecs/view/editor/internal/SilecsXMLTableTreeContentProvider.java deleted file mode 100644 index 1fce623..0000000 --- a/silecs-eclipse-plugin/src/java/cern/silecs/view/editor/internal/SilecsXMLTableTreeContentProvider.java +++ /dev/null @@ -1,111 +0,0 @@ -// Copyright 2016 CERN and GSI -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -package cern.silecs.view.editor.internal; - -import org.eclipse.osgi.util.TextProcessor; -import org.eclipse.wst.xml.ui.internal.tabletree.XMLTableTreeContentProvider; -import org.w3c.dom.Attr; -import org.w3c.dom.Element; -import org.w3c.dom.NamedNodeMap; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; - -import cern.silecs.utils.SilecsConstants; - -@SuppressWarnings("restriction") -public class SilecsXMLTableTreeContentProvider extends XMLTableTreeContentProvider{ - - @Override - public String getColumnText(Object object, int column) { - String result = super.getColumnText(object, column); - - if ((result.isEmpty() || result.startsWith("(")) && object instanceof Element && column == 1) { - result = getElementValueHelper((Element) object); - } - - result = TextProcessor.process(result); - return result != null ? result : ""; - } - - private String getElementValueHelper(Element element) { - - StringBuilder sb = new StringBuilder(); - if (element.hasAttributes()) { - NamedNodeMap map = element.getAttributes(); - - sb.append("("); - // put name first - Attr name = (Attr) map.getNamedItem(SilecsConstants.NAME); - if (name != null) { - sb.append(name.getValue() + ": "); - } - - // put other attributes - for (int i = 0; i < map.getLength(); i++) { - Attr a = (Attr) map.item(i); - String attrName = a.getName(); - - // name has already been added - // do not propagate id - if (!(attrName.equals(SilecsConstants.NAME))) { - sb.append(attrName + "=" + a.getValue() + ", "); - } - } - - } - - if (sb.length() < 2) { - // if we didn't find smth interesting - // the node behaves like a container - return getContainerElementValueHelper(element); - } else if (sb.charAt(0) == '(') { - // remove the last comma/colon and close the parenthesis - sb.setLength(sb.length() - 2); - sb.append(")"); - } - - return sb.toString(); - } - - private String getContainerElementValueHelper(Element element) { - if (element.hasAttribute(SilecsConstants.NAME)) { - return element.getAttribute(SilecsConstants.NAME); - } else if (element.hasChildNodes()) { - NodeList nodeList = element.getChildNodes(); - - StringBuilder sb = new StringBuilder(); - for (int i = 0; i < nodeList.getLength(); i++) { - Node n = nodeList.item(i); - if (n instanceof Element) { - String val = getContainerElementValueHelper((Element) n); - if (!val.isEmpty()) { - if (sb.length() != 0) { - sb.append(", "); - } - - sb.append(val); - } - - } - } - - return sb.toString(); - } else { - return ""; - } - } - -} diff --git a/silecs-eclipse-plugin/src/java/cern/silecs/view/editor/internal/SilecsXMLTableTreePropertyDescriptionFactory.java b/silecs-eclipse-plugin/src/java/cern/silecs/view/editor/internal/SilecsXMLTableTreePropertyDescriptionFactory.java deleted file mode 100644 index e0a32b4..0000000 --- a/silecs-eclipse-plugin/src/java/cern/silecs/view/editor/internal/SilecsXMLTableTreePropertyDescriptionFactory.java +++ /dev/null @@ -1,194 +0,0 @@ -// Copyright 2016 CERN and GSI -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -package cern.silecs.view.editor.internal; - -import java.io.File; -import java.io.FileFilter; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.HashSet; -import java.util.List; -import java.util.Set; -import java.util.TreeSet; - -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; - -import org.eclipse.core.resources.IWorkspaceRoot; -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.ui.views.properties.IPropertyDescriptor; -import org.eclipse.wst.xml.core.internal.contentmodel.CMNode; -import org.eclipse.wst.xml.ui.internal.properties.EnumeratedStringPropertyDescriptor; -import org.eclipse.wst.xml.ui.internal.tabletree.XMLTableTreePropertyDescriptorFactory; -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.Node; - -import cern.silecs.model.exception.SilecsException; -import cern.silecs.utils.SilecsConstants; -import cern.silecs.view.console.ConsoleHandler; - -@SuppressWarnings("restriction") -class SilecsXMLTableTreePropertyDescriptorFactory extends XMLTableTreePropertyDescriptorFactory { - - public static final String DESIGN_NAME_MATCHER = "silecs-design-name"; - public static final String DESIGN_VERSION_MATCHER = "silecs-design-version"; - - - @Override - protected IPropertyDescriptor createPropertyDescriptorHelper(String name, Element element, CMNode cmNode) - { - Collection<String> values = null; - try - { - if (isSilecsDesignName(element,name)) - { - - values = getPossibleClassNames(); - } - if (isSilecsDesignVersion(element,name) ) - { - if( !element.getAttribute(DESIGN_NAME_MATCHER).isEmpty() ) - { - values = getPossibleClassVersions(element.getAttribute(DESIGN_NAME_MATCHER)); - } - } - } - catch (SilecsException e) - { - ConsoleHandler.printStackTrace(e); - } - - if (values != null && !values.isEmpty()) - { - return new EnumeratedStringPropertyDescriptor(name, name, values.toArray(new String[values.size()])); - } - else - { - return super.createPropertyDescriptorHelper(name, element, cmNode); - } - } - - private static boolean isSilecsDesignName(Element element, String attribute) - { - if (element.getTagName().matches("SilecsDesign") && attribute.matches(DESIGN_NAME_MATCHER)) - return true; - return false; - } - - private static boolean isSilecsDesignVersion(Element element, String attribute) - { - if (element.getTagName().matches("SilecsDesign") && attribute.matches(DESIGN_VERSION_MATCHER)) - return true; - return false; - } - - private static List<String> getPossibleClassNames() throws SilecsException - { - Set<File> classes = getClassFiles(); - String searchTerm = "." + SilecsConstants.IEDESIGN_FILE; - List<String> classNames = new ArrayList<>(); - - for (File classFile : classes) - { - String className = classFile.getName().replace(searchTerm,""); - classNames.add(className); - } - return classNames; - } - - private static List<String> getPossibleClassVersions(String className) throws SilecsException - { - Set<File> classes = getClassFiles(); - List<String> classVersions = new ArrayList<>(); - String searchTerm = "." + SilecsConstants.IEDESIGN_FILE; - - for (File classFile : classes) - { - String classNameFile = classFile.getName().replace(searchTerm,""); - //ConsoleHandler.printMessage("getPossibleClassVersions - classNameFile: " + classNameFile, true); - //ConsoleHandler.printMessage("getPossibleClassVersions - className: " + className, true); - if (classNameFile.equals(className) ) - { - try - { - DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); - DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); - Document doc = dBuilder.parse(classFile); - Node classNode = doc.getElementsByTagName("SILECS-Class").item(0); - if( classNode != null ) - { - classVersions.add( classNode.getAttributes().getNamedItem("version").getNodeValue() ); - } - } - catch(Exception e) - { - e.printStackTrace(); - ConsoleHandler.printError("No version found in class: " + classNameFile, true); - } - } - } - return classVersions; - } - - private static Set<File> getClassFiles() throws SilecsException - { - IWorkspaceRoot workspaceRoot = ResourcesPlugin.getWorkspace().getRoot(); - Set<File> projects = listDirectories(workspaceRoot.getLocation().toFile()); - Set<File> classes = new HashSet<File>(); - - String searchTerm = "." + SilecsConstants.IEDESIGN_FILE; - for (File p : projects) - { - File designFolder = new File(p.getAbsolutePath()+"/src"); - if( !designFolder.exists() ) - continue; - - File[] listOfFiles = designFolder.listFiles(); - for (int i = 0; i < listOfFiles.length; i++) - { - if (listOfFiles[i].getName().endsWith(searchTerm)) - { - classes.add(listOfFiles[i]); - } - } - } - return classes; - } - - private static Set<File> listDirectories(File directory) - { - File[] directories = directory.listFiles(new FileFilter() - { - @Override - public boolean accept(File pathname) - { - return pathname.isDirectory(); - } - }); - - if (directories != null) - { - return new TreeSet<File>(Arrays.asList(directories)); - } - else - { - return Collections.emptySet(); - } - } -} diff --git a/silecs-eclipse-plugin/src/java/cern/silecs/view/editor/internal/SilecsXMLTableTreeViewer.java b/silecs-eclipse-plugin/src/java/cern/silecs/view/editor/internal/SilecsXMLTableTreeViewer.java deleted file mode 100644 index e70cdcc..0000000 --- a/silecs-eclipse-plugin/src/java/cern/silecs/view/editor/internal/SilecsXMLTableTreeViewer.java +++ /dev/null @@ -1,176 +0,0 @@ -// Copyright 2016 CERN and GSI -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -package cern.silecs.view.editor.internal; - -import java.util.Arrays; -import java.util.Comparator; - -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.IMarker; -import org.eclipse.core.resources.IMarkerDelta; -import org.eclipse.core.resources.IResource; -import org.eclipse.core.resources.IResourceChangeEvent; -import org.eclipse.core.resources.IResourceChangeListener; -import org.eclipse.core.resources.IResourceDelta; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.jface.viewers.ColumnViewerToolTipSupport; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.TreeItem; -import org.eclipse.ui.IEditorInput; -import org.eclipse.ui.IEditorPart; -import org.eclipse.ui.IFileEditorInput; -import org.eclipse.wst.xml.core.internal.document.NodeImpl; -import org.eclipse.wst.xml.ui.internal.tabletree.XMLTableTreeContentProvider; -import org.eclipse.wst.xml.ui.internal.tabletree.XMLTableTreeViewer; -import org.w3c.dom.Element; -import org.w3c.dom.Node; - -import cern.silecs.view.marker.SilecsMarker; - -@SuppressWarnings("restriction") -public class SilecsXMLTableTreeViewer extends XMLTableTreeViewer implements IResourceChangeListener{ - - - - private final IEditorPart parentEditor; - private final SilecsTableColumnViewerLabelProvider labelProvider; - - - /** - * @param parent - */ - public SilecsXMLTableTreeViewer(Composite parent, IEditorPart parentEditor) { - super(parent); - this.parentEditor = parentEditor; - - this.propertyDescriptorFactory = new SilecsXMLTableTreePropertyDescriptorFactory(); - XMLTableTreeContentProvider provider = new SilecsXMLTableTreeContentProvider(); - setContentProvider(provider); - this.labelProvider = new SilecsTableColumnViewerLabelProvider(provider); - setLabelProvider(labelProvider); - ColumnViewerToolTipSupport.enableFor(this); - } - - @Override - protected void inputChanged(Object input, Object oldInput) { - super.inputChanged(input, oldInput); - - labelProvider.clearFaults(); - IEditorInput editorInput = parentEditor.getEditorInput(); - if (editorInput instanceof IFileEditorInput) { - try { - IFile inputFile = ((IFileEditorInput) editorInput).getFile(); - IMarker[] markers = inputFile.findMarkers(SilecsMarker.TYPE, false, IResource.DEPTH_ZERO); - - for (IMarker m : markers) { - displayMarker(m); - } - } catch (CoreException e) { -// LOGGER.error(e.getMessage()); - } - } - refresh(); - } - - - @Override - public void refresh(Object element, boolean updateLabels) { - super.refresh(element, updateLabels); - - // we also want to refresh label of parents elements - if (element instanceof Element) { - Node parent = ((Element) element).getParentNode(); - while (parent != null) { - super.refresh(parent, updateLabels); - parent = parent.getParentNode(); - } - } - } - - - @Override - public void resourceChanged(IResourceChangeEvent event) { - IEditorInput editorInput = parentEditor.getEditorInput(); - if (editorInput instanceof IFileEditorInput) { - // only apply changes if input is a file - final IFile inputFile = ((IFileEditorInput) editorInput).getFile(); - - // sort the markers so that we handle first the deletion and the the creation - final IMarkerDelta makerDelta[] = event.findMarkerDeltas(SilecsMarker.TYPE, false); - Arrays.sort(makerDelta, new Comparator<IMarkerDelta>() { - @Override - public int compare(IMarkerDelta md1, IMarkerDelta md2) { - if (md1.getKind() == IResourceDelta.ADDED) { - return md2.getKind() == IResourceDelta.ADDED ? 0 : 1; - } else if (md1.getKind() == IResourceDelta.REMOVED) { - return md2.getKind() == IResourceDelta.REMOVED ? 0 : -1; - } else if (md2.getKind() == IResourceDelta.ADDED) { - return -1; - } else if (md2.getKind() == IResourceDelta.REMOVED) { - return 1; - } else { - return 0; - } - } - }); - - getControl().getDisplay().syncExec(new Runnable() { - @Override - public void run() { - // this is a hack to avoid automatic scrolling to - // one of the faulty nodes - TreeItem item = getTree().getTopItem(); - for (IMarkerDelta md : makerDelta) { - if (md.getResource().equals(inputFile)) { - if (md.getKind() == IResourceDelta.ADDED) { - displayMarker(md.getMarker()); - } else if (md.getKind() == IResourceDelta.REMOVED) { - removeMarker(md.getMarker()); - } - } - } - - if (item != null) { - getTree().setTopItem(item); - } - } - }); - } - } - - public void displayMarker(final IMarker marker) { - NodeImpl node = null; - try { - node = (NodeImpl) marker.getAttribute(SilecsMarker.NODE_ATTR); - if (node != null) { - labelProvider.addFault(marker, node); - reveal(node); - } - } catch (CoreException e) { - //LOGGER.error("Could not highlight node: {}", e.getMessage()); - } - } - - public void removeMarker(final IMarker marker) { - labelProvider.removeFault(marker); - } - - @Override - public String getTitle() { - return "Tree View"; - } - -} diff --git a/silecs-eclipse-plugin/src/java/cern/silecs/view/explorer/ContentSorter.java b/silecs-eclipse-plugin/src/java/cern/silecs/view/explorer/ContentSorter.java deleted file mode 100644 index 091b1a6..0000000 --- a/silecs-eclipse-plugin/src/java/cern/silecs/view/explorer/ContentSorter.java +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright 2016 CERN and GSI -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -package cern.silecs.view.explorer; - -import org.eclipse.core.resources.IProject; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.jface.viewers.Viewer; -import org.eclipse.jface.viewers.ViewerSorter; -import org.eclipse.ui.views.navigator.ResourceComparator; - -import cern.silecs.control.core.DesignProjectNature; - -public class ContentSorter extends ViewerSorter { - - private ResourceComparator resourceComparator; - - public ContentSorter() { - resourceComparator = new ResourceComparator(ResourceComparator.NAME); - } - - @Override - public int compare(Viewer viewer, Object e1, Object e2) { - if (e1 instanceof IProject && e2 instanceof IProject) { - - IProject f1 = (IProject) e1; - IProject f2 = (IProject) e2; - - if (!f1.isOpen() || !f2.isOpen()) - return resourceComparator.compare(viewer, e1, e2); - - boolean f1b = false; - boolean f2b = false; - try { - f1b = f1.hasNature(DesignProjectNature.NATURE_ID); - f2b = f2.hasNature(DesignProjectNature.NATURE_ID); - } catch (CoreException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - if (f1b ^ f2b) - if (f1b == true) { - return -1; - } else { - return 1; - } - } - - // else let the resource comparator do the ordering - return resourceComparator.compare(viewer, e1, e2); - } -} diff --git a/silecs-eclipse-plugin/src/java/cern/silecs/view/explorer/ProjectContent.java b/silecs-eclipse-plugin/src/java/cern/silecs/view/explorer/ProjectContent.java deleted file mode 100644 index 77bf856..0000000 --- a/silecs-eclipse-plugin/src/java/cern/silecs/view/explorer/ProjectContent.java +++ /dev/null @@ -1,137 +0,0 @@ -// Copyright 2016 CERN and GSI -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -package cern.silecs.view.explorer; - -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.IFolder; -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.IResource; -import org.eclipse.core.resources.IResourceChangeEvent; -import org.eclipse.core.resources.IResourceChangeListener; -import org.eclipse.core.resources.IWorkspaceRoot; -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.jface.viewers.ITreeContentProvider; -import org.eclipse.jface.viewers.Viewer; -import org.eclipse.swt.widgets.Display; - -public class ProjectContent implements ITreeContentProvider, IResourceChangeListener { - - private Viewer attachedViewer; - - private static final Object[] NO_OBJECTS = new Object[0]; - - public ProjectContent() { - ResourcesPlugin.getWorkspace().addResourceChangeListener(this); - } - - @Override - public void dispose() { - ResourcesPlugin.getWorkspace().removeResourceChangeListener(this); - } - - @Override - public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { - attachedViewer = viewer; - } - - @Override - public Object[] getElements(Object inputElement) { - if (inputElement instanceof IWorkspaceRoot) { - // if root return the projects - return ((IWorkspaceRoot) inputElement).getProjects(); - } else if (inputElement instanceof IProject || inputElement instanceof IFolder) { - // if folder or project, return the content - return getChildren(inputElement); - } else { - return NO_OBJECTS; - } - } - - @Override - public Object[] getChildren(Object parentElement) { - if (parentElement instanceof IProject) { - IProject p = (IProject) parentElement; - try { - return p.members(); - } catch (CoreException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - - } else if (parentElement instanceof IFolder) { - try { - return ((IFolder) parentElement).members(); - } catch (CoreException e) { - // The resource is not found - return NO_OBJECTS; - } - } - return NO_OBJECTS; - } - - @Override - public Object getParent(Object element) { - if (element instanceof IProject) { - return ((IProject) element).getWorkspace().getRoot(); - } else if (element instanceof IFolder) { - IFolder folder = (IFolder) element; - if (folder.getParent() instanceof IProject) { - // parent of folder is the project - return folder.getProject(); - } else { - return folder.getParent(); - } - } else if (element instanceof IFile) { - IFile file = (IFile) element; - return file.getParent(); - } else { - return null; - } - } - - @Override - public boolean hasChildren(Object element) { - IResource[] members = null; - - try { - if (element instanceof IFolder) { - members = ((IFolder) element).members(); - } - } catch (CoreException e) { - // error while accessing members - } - - // has children if element is project or not empty folder - return element instanceof IProject || (members != null && members.length > 0); - } - - @Override - public void resourceChanged(IResourceChangeEvent event) { - if (attachedViewer != null && !attachedViewer.getControl().isDisposed()) { - - // make the UI thread update the viewer - Display.getDefault().asyncExec(new Runnable() { - - @Override - public void run() { - attachedViewer.refresh(); - } - }); - } - } - -} diff --git a/silecs-eclipse-plugin/src/java/cern/silecs/view/explorer/SilecsProjectExplorer.java b/silecs-eclipse-plugin/src/java/cern/silecs/view/explorer/SilecsProjectExplorer.java deleted file mode 100644 index 927d650..0000000 --- a/silecs-eclipse-plugin/src/java/cern/silecs/view/explorer/SilecsProjectExplorer.java +++ /dev/null @@ -1,199 +0,0 @@ -// Copyright 2016 CERN and GSI -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -package cern.silecs.view.explorer; - -import java.time.LocalDateTime; -import java.time.ZoneOffset; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.List; - -import org.eclipse.core.resources.IContainer; -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.IResource; -import org.eclipse.core.resources.IWorkspaceRoot; -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.NullProgressMonitor; -import org.eclipse.jface.action.IAction; -import org.eclipse.jface.action.IStatusLineManager; -import org.eclipse.jface.viewers.DoubleClickEvent; -import org.eclipse.jface.viewers.ILabelProvider; -import org.eclipse.jface.viewers.ISelection; -import org.eclipse.jface.viewers.ISelectionChangedListener; -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.jface.viewers.SelectionChangedEvent; -import org.eclipse.jface.viewers.TreeViewer; -import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.ui.IActionBars; -import org.eclipse.ui.navigator.CommonNavigator; -import org.eclipse.ui.navigator.CommonViewer; -import org.eclipse.ui.navigator.ICommonActionConstants; - -import cern.silecs.control.core.DeployProjectNature; -import cern.silecs.control.core.DesignProjectNature; -import cern.silecs.utils.SilecsUtils; - -/** - * This class is a subclass of CommonNavigator that provide changes concerning expanding tree. - * - * @see CommonNavigator - */ -public class SilecsProjectExplorer extends CommonNavigator { - - public static final String VIEW_ID = "cern.silecs.view.explorer"; - - @Override - public void createPartControl(Composite aParent) { - super.createPartControl(aParent); - CommonViewer viewer = getCommonViewer(); - - IActionBars bars = getViewSite().getActionBars(); - final IStatusLineManager lineManager = bars.getStatusLineManager(); - - final ILabelProvider labelProvider = (ILabelProvider) viewer.getLabelProvider(); - - viewer.addPostSelectionChangedListener(new ISelectionChangedListener() { - - @Override - public void selectionChanged(SelectionChangedEvent event) { - - ISelection aSelection = event.getSelection(); - if (aSelection != null && !aSelection.isEmpty() && aSelection instanceof IStructuredSelection) { - IStructuredSelection selection = (IStructuredSelection) aSelection; - IResource file = null; - - if (selection.size() == 1 && selection.getFirstElement() instanceof IProject) { - IProject project = (IProject) selection.getFirstElement(); - try { - if (project.hasNature(DesignProjectNature.NATURE_ID)) { - file = SilecsUtils.getSilecsDesignFile(project); - } else if (project.hasNature(DeployProjectNature.NATURE_ID)) { - file = SilecsUtils.getSilecsDeployFile(project); - } - } catch (Exception e) { - e.printStackTrace(); - } - - } else if(selection.size() == 1 && selection.getFirstElement() instanceof IFile) { - file = (IFile) selection.getFirstElement(); - } - - if(file != null) { - Image img = null; - img = labelProvider.getImage(((IStructuredSelection) aSelection).getFirstElement()); - long modificationTime = file.getLocalTimeStamp() / 1000; - - DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-YYYY HH:mm:ss"); - LocalDateTime dateAndTime = LocalDateTime.ofEpochSecond(modificationTime, 0, ZoneOffset.ofHours(2)); - - lineManager.setMessage(img,"Last modfication: " + formatter.format(dateAndTime) + " : " + file.getFullPath()); - } - } - - } - }); - - } - - /** - * This method is responsible for expanding the project tree from the root to the silecs file(*.silecsdesign or - * *.silecsdeploy) - */ - @Override - protected void handleDoubleClick(DoubleClickEvent anEvent) { - - IStructuredSelection selection = (IStructuredSelection) anEvent.getSelection(); - Object element = selection.getFirstElement(); - if (element instanceof IProject && !((IProject) element).isOpen()) { - try { - ((IProject) element).open(new NullProgressMonitor()); - } catch (CoreException e) { - e.printStackTrace(); - } - return; - - } else if (element instanceof IProject && ((IProject) element).isOpen()) { - List<IProject> projectList = new ArrayList<IProject>(); - projectList.add((IProject) element); - - IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); - - expandHelper(root, projectList); - return; - } - super.handleDoubleClick(anEvent); - } - - /** - * This method expands elements in the tree. Since the tool does not have knowledge about project structure it must - * be done recursively. - * - * @param root {@link WorkspaceRoot} - * @param projects List of projects that need to be expanded - */ - public void expandHelper(IWorkspaceRoot root, List<IProject> projects) { - for (IProject project : projects) { - if (project.isOpen()) { - try { - IFile file = null; - if (project.hasNature(DeployProjectNature.NATURE_ID)) { - file = SilecsUtils.getSilecsDeployFile(project); - } else if (project.hasNature(DesignProjectNature.NATURE_ID)) { - file = SilecsUtils.getSilecsDesignFile(project); - } - if (file == null) - continue; - - IContainer parent = file.getParent(); - List<Object> toExpand = new ArrayList<>(); - - do { - toExpand.add(0, parent); - } while ((parent = parent.getParent()) != root); - boolean expand = !getCommonViewer().getExpandedState(project); - for(Object o: toExpand ) - expand(o, expand); - } catch (Exception e) { - e.printStackTrace(); - } - } - } - } - - /** - * Expands single element in the viewer - * - * @param element - * @return true if expanded - */ - private boolean expand(Object element, boolean expand) { - IAction openHandler = getViewSite().getActionBars().getGlobalActionHandler(ICommonActionConstants.OPEN); - - if (openHandler == null) { - - TreeViewer viewer = getCommonViewer(); - if (viewer.isExpandable(element)) { - viewer.setExpandedState(element, expand); - return true; - } - } - return false; - } - -} diff --git a/silecs-eclipse-plugin/src/java/cern/silecs/view/job/BaseFileJob.java b/silecs-eclipse-plugin/src/java/cern/silecs/view/job/BaseFileJob.java deleted file mode 100644 index 563bb7b..0000000 --- a/silecs-eclipse-plugin/src/java/cern/silecs/view/job/BaseFileJob.java +++ /dev/null @@ -1,79 +0,0 @@ -// Copyright 2016 CERN and GSI -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -package cern.silecs.view.job; - -import java.util.HashMap; -import java.util.Map; - -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.IResource; -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.resources.WorkspaceJob; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Status; -import org.eclipse.core.runtime.jobs.ISchedulingRule; - -import cern.silecs.activator.Activator; - -public abstract class BaseFileJob extends WorkspaceJob { - - protected final IFile file; - protected final Map<IResource, Exception> failures; - - - /** - * @param name - */ - public BaseFileJob(String name, IFile file) { - super(name); - this.file = file; - this.failures = new HashMap<IResource, Exception>(); - - // set the job rule - setRule(createJobRule()); - } - - public Map<IResource, Exception> getFailures(){ - return failures; - } - - protected IStatus computeReturnStatus() { - if (failures.isEmpty()) { - return Status.OK_STATUS; - } else { - // return INFO status so that eclipse does not open the default error pop up - // we handle manually the error reporting - return new Status(IStatus.INFO, Activator.PLUGIN_ID, ""); - } - } - - - /** - * Create the job rule to avoid concurrency on the used resources - * - * @return rule used for the job - */ - protected ISchedulingRule createJobRule() { - return null; - } - - protected final ISchedulingRule workspaceRule() { - return ResourcesPlugin.getWorkspace().getRoot(); - } - - - -} diff --git a/silecs-eclipse-plugin/src/java/cern/silecs/view/job/BaseProjectJob.java b/silecs-eclipse-plugin/src/java/cern/silecs/view/job/BaseProjectJob.java deleted file mode 100644 index ba40902..0000000 --- a/silecs-eclipse-plugin/src/java/cern/silecs/view/job/BaseProjectJob.java +++ /dev/null @@ -1,76 +0,0 @@ -// Copyright 2016 CERN and GSI -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -package cern.silecs.view.job; - -import java.util.HashMap; -import java.util.Map; - - -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.IResource; -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.resources.WorkspaceJob; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Status; -import org.eclipse.core.runtime.jobs.ISchedulingRule; - -import cern.silecs.activator.Activator; - -public abstract class BaseProjectJob extends WorkspaceJob { - - protected final IProject project; - protected final Map<IResource, Exception> failures; - - /** - * @param name - */ - public BaseProjectJob(String name, IProject project) { - super(name); - this.failures = new HashMap<IResource, Exception>(); - this.project = project; - - // set the job rule - setRule(createJobRule()); - } - - public Map<IResource, Exception> getFailures() { - return failures; - } - - protected IStatus computeReturnStatus() { - if (failures.isEmpty()) { - return Status.OK_STATUS; - } else { - // return INFO status so that eclipse does not open the default error pop up - // we handle manually the error reporting - return new Status(IStatus.INFO, Activator.PLUGIN_ID, ""); - } - } - - /** - * Create the job rule to avoid concurrency on the used resources - * - * @return rule used for the job - */ - protected ISchedulingRule createJobRule() { - return null; - } - - protected final ISchedulingRule workspaceRule() { - return ResourcesPlugin.getWorkspace().getRoot(); - } - -} diff --git a/silecs-eclipse-plugin/src/java/cern/silecs/view/job/GenerateClassJob.java b/silecs-eclipse-plugin/src/java/cern/silecs/view/job/GenerateClassJob.java deleted file mode 100644 index 263b22d..0000000 --- a/silecs-eclipse-plugin/src/java/cern/silecs/view/job/GenerateClassJob.java +++ /dev/null @@ -1,99 +0,0 @@ -// Copyright 2016 CERN and GSI -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -package cern.silecs.view.job; - -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.IResource; -import org.eclipse.core.resources.IWorkspaceRoot; -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.SubProgressMonitor; - -import cern.silecs.control.core.DesignProjectNature; -import cern.silecs.control.validation.Validator; -import cern.silecs.utils.OSExecute; -import cern.silecs.utils.SilecsUtils; -import cern.silecs.view.console.ConsoleHandler; -import cern.silecs.view.preferences.MainPreferencePage; - -public class GenerateClassJob extends BaseProjectJob { - - private static final String JOB_NAME = "Generate SILECS Class Job"; - - IFile fesaDesignXML; - - public GenerateClassJob(IProject project, IFile fesaDesignDoc) { - super(JOB_NAME, project); - fesaDesignXML = fesaDesignDoc; - } - - @Override - public IStatus runInWorkspace(IProgressMonitor monitor) throws CoreException { - - IWorkspaceRoot workspaceRoot = ResourcesPlugin.getWorkspace().getRoot(); - String workspacePath = workspaceRoot.getLocation().toFile().getPath(); - - monitor.beginTask("Generate Fesa Classes", 1); - - generateFesaClass(workspacePath, new SubProgressMonitor(monitor, 1)); - DesignProjectNature.addFESAClassNature(project,monitor); - DesignProjectNature.addBuildSpecs(project); - monitor.done(); - - return computeReturnStatus(); - } - - boolean generateFesaClass(String workspacePath, IProgressMonitor monitor) - { - String projectName = project.getName(); - String projectPath = workspacePath + "/" + projectName; - try { - String silecsDesignFilePath = SilecsUtils.getSilecsDesignFilePath(workspacePath, projectName); - String silecsVersion = SilecsUtils.getSilecsVersion(project); - String silecsLibraryBasePath = MainPreferencePage.getSilecsLibraryBasePath(silecsVersion); - - ConsoleHandler.printMessage("Generating FESA class: " + projectName, false); - - if (!Validator.isDocumentValid(SilecsUtils.getSilecsDesignFile(project))) - { - ConsoleHandler.printError( "Failed to generated FESA class: '" + projectName + "'. Please fix all design errors first!", true); - return false; - } - - monitor.beginTask("Generating " + projectName, 2); - OSExecute.executePython("generateFesaDesign","fillDesignFile",silecsVersion,new String[]{MainPreferencePage.getFESAVersion(),projectName,workspacePath,MainPreferencePage.getFESADesignSchemaPath()}); - OSExecute.executePython("generateSourceCode","genCppFiles",silecsVersion,new String[]{projectName, workspacePath,silecsDesignFilePath}); // attention - Cpp Codegen has to happen AFTER design file codegen - OSExecute.executePython("generateBuildEnvironment","genMakefileClass",silecsVersion,new String[]{projectPath,silecsLibraryBasePath}); - OSExecute.executePython("generateBuildEnvironment","genCProjectFile",silecsVersion,new String[]{projectPath.toString()}); - project.refreshLocal(IResource.DEPTH_INFINITE, null); - SilecsUtils.openInEditor(fesaDesignXML); - monitor.worked(1); - } catch (Exception e) { - e.printStackTrace(); - ConsoleHandler.printError("Failed to generate FESA class: " + projectName, true); - ConsoleHandler.printStackTrace(e); - return false; - } - - monitor.done(); - ConsoleHandler.printMessage( "Successfully generated FESA class: " + projectName, true); - return true; - - } -} diff --git a/silecs-eclipse-plugin/src/java/cern/silecs/view/job/GenerateDeployJob.java b/silecs-eclipse-plugin/src/java/cern/silecs/view/job/GenerateDeployJob.java deleted file mode 100644 index 2fb5f6c..0000000 --- a/silecs-eclipse-plugin/src/java/cern/silecs/view/job/GenerateDeployJob.java +++ /dev/null @@ -1,107 +0,0 @@ -// Copyright 2016 CERN and GSI -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -package cern.silecs.view.job; - -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.IResource; -import org.eclipse.core.resources.IWorkspaceRoot; -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.SubProgressMonitor; - -import cern.silecs.control.core.DeployProjectNature; -import cern.silecs.control.validation.Validator; -import cern.silecs.utils.OSExecute; -import cern.silecs.utils.SilecsUtils; -import cern.silecs.view.console.ConsoleHandler; -import cern.silecs.view.preferences.MainPreferencePage; - -public class GenerateDeployJob extends BaseProjectJob { - - private static final String JOB_NAME = "Generate SILECS Deploy Job"; - - IFile fesaDeployDoc_; - boolean createdNewDeployDoc_; - - public GenerateDeployJob(IProject project, IFile fesaDeployDoc, boolean createdNewDeployDoc) { - super(JOB_NAME, project); - fesaDeployDoc_ = fesaDeployDoc; - createdNewDeployDoc_ = createdNewDeployDoc; - } - - @Override - public IStatus runInWorkspace(IProgressMonitor monitor) throws CoreException { - - IWorkspaceRoot workspaceRoot = ResourcesPlugin.getWorkspace().getRoot(); - String workspacePath = workspaceRoot.getLocation().toFile().getPath(); - - monitor.beginTask("Generating Code", 1); - generateDeploy(workspacePath, new SubProgressMonitor(monitor, 1)); - monitor.done(); - - return computeReturnStatus(); - } - - private void generateDeploy(String workspacePath, IProgressMonitor monitor ) - { - String projectName = project.getName(); - - try { - String deployPath = SilecsUtils.getSilecsDeployFilePath(workspacePath,projectName); - String deployVersion = SilecsUtils.getDeployVersion(deployPath); - String silecsVersion = SilecsUtils.getSilecsVersion(project); - - monitor.beginTask("Generating: " + projectName, 2); - - ConsoleHandler.printMessage("Generating Code for: " + projectName, false); - if (!Validator.isDocumentValid(SilecsUtils.getSilecsDeployFile(project))) - { - ConsoleHandler.printError( "Failed to generated code for: '" + projectName + "'. Please fix all xml errors first!", true); - return; - } - - OSExecute.executePython("genparam","genParam",silecsVersion,new String[]{workspacePath, projectName, deployVersion,silecsVersion}); - OSExecute.executePython("genplcsrc","genPlcSrc",silecsVersion,new String[]{workspacePath, projectName,silecsVersion}); - OSExecute.executePython("genduwrapper","genDuWrapper",silecsVersion,new String[]{workspacePath, projectName, deployVersion}); - OSExecute.executePython("generateBuildEnvironment","genCProjectFile",silecsVersion,new String[]{project.getLocation().toString()}); - - String silecsLibraryBasePath = MainPreferencePage.getSilecsLibraryBasePath(SilecsUtils.getSilecsVersion(project)); - String snap7LibraryBasePath = MainPreferencePage.getSNAP7LibraryBasePath(SilecsUtils.getSilecsVersion(project)); - OSExecute.executePython("generateBuildEnvironment","genMakefileDU",silecsVersion,new String[]{ workspacePath + "/" + projectName, silecsLibraryBasePath,snap7LibraryBasePath}); - OSExecute.executePython("fillFESADeployUnit","fillDeployUnit",silecsVersion,new String[]{ workspacePath, projectName, MainPreferencePage.getFESADeployUnitSchemaPath(), MainPreferencePage.getFESAVersion() }); - - DeployProjectNature.addFESADeployUnitNature(project,monitor); - DeployProjectNature.addBuildSpecs(project); - - project.refreshLocal(IResource.DEPTH_INFINITE, null); - - ConsoleHandler.printMessage("Succeeded in generated code for " + projectName, true); - - if(createdNewDeployDoc_) - SilecsUtils.openInEditor(fesaDeployDoc_); - - monitor.worked(1); - - } catch (Exception e) { - e.printStackTrace(); - ConsoleHandler.printError("Failed to generate code for " + projectName, true); - ConsoleHandler.printStackTrace(e); - } - } -} \ No newline at end of file diff --git a/silecs-eclipse-plugin/src/java/cern/silecs/view/job/UpdateVersionJob.java b/silecs-eclipse-plugin/src/java/cern/silecs/view/job/UpdateVersionJob.java deleted file mode 100644 index d12e3f6..0000000 --- a/silecs-eclipse-plugin/src/java/cern/silecs/view/job/UpdateVersionJob.java +++ /dev/null @@ -1,115 +0,0 @@ -// Copyright 2016 CERN and GSI -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -package cern.silecs.view.job; - -import java.io.File; - -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.IResource; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.IStatus; - -import cern.silecs.control.core.DeployProjectNature; -import cern.silecs.control.core.DesignProjectNature; -import cern.silecs.model.exception.SilecsException; -import cern.silecs.utils.OSExecute; -import cern.silecs.utils.SilecsUtils; -import cern.silecs.utils.SilecsConstants; -import cern.silecs.view.console.ConsoleHandler; -import cern.silecs.view.preferences.MainPreferencePage; - -public class UpdateVersionJob extends BaseProjectJob { - - private static final String JOB_NAME = "Update SILECS Version Job"; - - String newVersion_; - String oldVersion_; - - public UpdateVersionJob(IProject project, String newVersion ) { - super(JOB_NAME, project); - newVersion_ = newVersion; - } - - @Override - public IStatus runInWorkspace(IProgressMonitor monitor) throws CoreException - { - monitor.beginTask("Updating Silecs Version", 1); - updateVersion(monitor); - monitor.done(); - return computeReturnStatus(); - } - - boolean updateVersion(IProgressMonitor monitor) - { - try { - oldVersion_ = SilecsUtils.getSilecsVersion(project); - - int result = oldVersion_.compareTo(newVersion_); - if( result >= 0) - { - throw new SilecsException("Migration from "+ oldVersion_ +" to "+ newVersion_ +" not possible. The target-version always needto newer than the current version"); - } - - String codeGenBasePath = MainPreferencePage.getCodeGenBasePath(newVersion_); - String silecsDocumentPath = SilecsUtils.getSilecsDocument(project).getRawLocation().makeAbsolute().toOSString(); - String oldVersionUnderscored = oldVersion_.replace(".", "_"); - String newVersionUnderscored = newVersion_.replace(".", "_"); - String migrationScript = codeGenBasePath + "/migration/" + oldVersionUnderscored + "to" + newVersionUnderscored + ".py"; - - if(! new File(migrationScript).exists()) - { - ConsoleHandler.printWarning("There is no Migration Script for an update from: '" + oldVersion_ + "' to '" + newVersion_ + "'. Using generic migration-script. Only basic xml-version strings will be changed.", true); - migrationScript = codeGenBasePath + "/migration/migrationBase.py"; - if(! new File(migrationScript).exists()) - { - throw new SilecsException("The Migration Script: '" + migrationScript + "' does not exist. Please check your Eclipse-Silecs preferences!"); - } - } - - String newXMLSchema = MainPreferencePage.getModelBasePath(newVersion_) + "/"; - if ( project.hasNature(DesignProjectNature.NATURE_ID) ) - { - newXMLSchema += SilecsConstants.DESIGN_SCHEMA_XSD; - } - else if( project.hasNature(DeployProjectNature.NATURE_ID) ) - { - newXMLSchema += SilecsConstants.DEPLOY_SCHEMA_XSD; - } - else - throw new Exception("The project: " + project.getName() + " is not a silecs-project"); - - OSExecute.executeCommand("python", migrationScript, silecsDocumentPath, newXMLSchema, oldVersion_, newVersion_); - ConsoleHandler.printMessage("Updating Silecs Version from '" + oldVersion_ + "'to '" + newVersion_ + "'", false); - - monitor.beginTask("Updating Silecs Version " + project.getName(), 2); - - project.refreshLocal(IResource.DEPTH_INFINITE, null); - - monitor.worked(1); - } catch (Exception e) { - e.printStackTrace(); - ConsoleHandler.printError("Failed to update SILECS version of: " + project.getName(), true); - ConsoleHandler.printStackTrace(e); - return false; - } - - monitor.done(); - ConsoleHandler.printMessage( "Successfully updated SILECS version of: " + project.getName(), true); - return true; - - } -} diff --git a/silecs-eclipse-plugin/src/java/cern/silecs/view/job/ValidationJob.java b/silecs-eclipse-plugin/src/java/cern/silecs/view/job/ValidationJob.java deleted file mode 100644 index 35af12f..0000000 --- a/silecs-eclipse-plugin/src/java/cern/silecs/view/job/ValidationJob.java +++ /dev/null @@ -1,223 +0,0 @@ -// Copyright 2016 CERN and GSI -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -package cern.silecs.view.job; - -import java.io.File; -import java.util.List; - -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.IMarker; -import org.eclipse.core.resources.IResource; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.NullProgressMonitor; -import org.eclipse.core.runtime.SubProgressMonitor; -import org.eclipse.swt.widgets.Display; -import org.eclipse.ui.IViewPart; -import org.eclipse.ui.IWorkbenchPage; -import org.eclipse.ui.PlatformUI; -import org.eclipse.wst.sse.core.StructuredModelManager; -import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel; -import org.eclipse.wst.xml.core.internal.document.AttrImpl; -import org.eclipse.wst.xml.core.internal.document.ElementImpl; -import org.eclipse.wst.xml.core.internal.document.NodeImpl; -import org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel; -import org.eclipse.xsd.XSDIdentityConstraintDefinition; -import org.eclipse.xsd.XSDXPathDefinition; -import org.w3c.dom.Element; -import org.w3c.dom.Node; - -import cern.silecs.control.validation.Validator; -import cern.silecs.model.document.SilecsDocumentError; -import cern.silecs.model.document.XmlBasedDocument; -import cern.silecs.model.exception.SilecsException; -import cern.silecs.view.console.ConsoleHandler; -import cern.silecs.view.editor.XMLMultiPageEditor; -import cern.silecs.view.editor.internal.SchemaHelper; -import cern.silecs.view.marker.SilecsMarker; - -@SuppressWarnings("restriction") -public class ValidationJob extends BaseFileJob -{ - private static final String JOB_NAME = "silecs validation job"; - - public ValidationJob(IFile file) { - this(JOB_NAME, file); - - } - - public ValidationJob(String name, IFile file) { - super(name, file); - } - - @Override - public IStatus runInWorkspace(IProgressMonitor monitor) throws CoreException { - boolean hasErros = false; - try - { - // monitor.beginTask(Messages.get(Message.VALIDATION_PROCESS) + " ...", silecsFiles.size() * 2); - monitor.beginTask("Validation Job", 1); - try - { - hasErros = !isValid(file, new SubProgressMonitor(monitor, 1)); - file.refreshLocal(IResource.DEPTH_ZERO, null); - } - catch (Exception e) - { - failures.put(file, e); - } - - return computeReturnStatus(); - } - finally - { - // Open problem view if there are some errors - if (hasErros) { - Display.getDefault().syncExec(new Runnable() { - - @Override - public void run() { - IWorkbenchPage activepage = PlatformUI.getWorkbench().getActiveWorkbenchWindow() - .getActivePage(); - IViewPart pbv = activepage.findView("org.eclipse.ui.views.ProblemView"); - if (pbv != null) { - activepage.bringToTop(pbv); - } - } - }); - } - - monitor.done(); - } - } - - protected boolean isValid(IFile silecsFile, IProgressMonitor monitor) { - IProgressMonitor mon = monitor; - if (mon == null) { - mon = new NullProgressMonitor(); - } - - try { - mon.beginTask("Validation", 1); - - List<SilecsDocumentError> errors = null; - - File file = new File(silecsFile.getLocationURI()); - - errors = Validator.validate(file); - - final XMLMultiPageEditor editor = XMLMultiPageEditor.getOpenedEditor(silecsFile); - - updateMarkers(silecsFile, errors, editor); - - // return true if document is valid - if (errors.isEmpty()) { - ConsoleHandler.printMessage("Document " + silecsFile.getName() + " is valid", true); - return true; - } - ConsoleHandler.printError("Document " + silecsFile.getName() + " is not valid", true); - return false; - } finally { - mon.done(); - } - } - - private void updateMarkers(IFile silecsFile, List<SilecsDocumentError> errors, XMLMultiPageEditor editor) { - // remove old markers - try - { - silecsFile.deleteMarkers(SilecsMarker.TYPE, false, IResource.DEPTH_ZERO); - } - catch (CoreException e) - { - ConsoleHandler.printStackTrace(e); - } - - for (SilecsDocumentError error : errors) - { - try - { - createMarker(silecsFile, error, editor); - } - catch (Exception e) - { - ConsoleHandler.printMessage("Could not create marker for " + error, true); - } - } - - } - - private IMarker createMarker(IFile file, SilecsDocumentError error, XMLMultiPageEditor editor) throws CoreException, SilecsException { - IStructuredModel model = StructuredModelManager.getModelManager().getExistingModelForRead(file); - if (model instanceof IDOMModel) - { - try { - NodeImpl hintNode = null; - XmlBasedDocument xmlDocument = new XmlBasedDocument(((IDOMModel) model).getDocument()); - - if (error.xPath != null) - { - hintNode = (NodeImpl) xmlDocument.getSingleNode(error.xPath); - } - - // first try to get accurate not thanks to the schema - if (error.isIdentityConstraintError() && hintNode instanceof Element) { - XSDIdentityConstraintDefinition def = SchemaHelper.findIdentityConstraint((Element) hintNode, - error.violatedKey); - - // def = null can happen when eclipse has not finished to build the schema - if (def != null) { - List<Node> candidates = xmlDocument.getNodes(hintNode, def.getSelector().getValue()); - for (Node candidate : candidates) { - for (XSDXPathDefinition field : def.getFields()) { - List<Node> values = xmlDocument.getNodes(candidate, field.getValue()); - for (Node v : values) { - if ((v instanceof AttrImpl && ((AttrImpl) v).getValue() - .equals(error.incorrectValue)) - || (v instanceof Element) - && ((ElementImpl) v).getTextContent().equals(error.incorrectValue)) { - return SilecsMarker.create(file, error, (NodeImpl) v); - } - } - } - } - } - } - - // try to get the node thanks to the document position - if (editor != null) { - NodeImpl node = editor.getNodeAtPosition(error.lineNumber, error.columnNumber); - if (node != null) { - hintNode = node; - } - } - - // if fail, use the hint node found with the xpath provided by the validator - if (hintNode != null) { - return SilecsMarker.create(file, error, hintNode); - } - } - catch (SilecsException e) - { - ConsoleHandler.printMessage("Could not get precise location for marker: " + e.getMessage(), true); - throw e; - } - } - return SilecsMarker.create(file, error); - } - -} diff --git a/silecs-eclipse-plugin/src/java/cern/silecs/view/marker/SilecsMarker.java b/silecs-eclipse-plugin/src/java/cern/silecs/view/marker/SilecsMarker.java deleted file mode 100644 index ea12b39..0000000 --- a/silecs-eclipse-plugin/src/java/cern/silecs/view/marker/SilecsMarker.java +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright 2016 CERN and GSI -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -package cern.silecs.view.marker; - -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.IMarker; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.wst.xml.core.internal.document.NodeImpl; - -import cern.silecs.model.document.SilecsDocumentError; - -@SuppressWarnings("restriction") -public abstract class SilecsMarker { - -// private static final Logger LOGGER = LoggerFactory.getLogger(SilecsMarker.class); - - public static final String TYPE = "cern.silecs.view.marker"; - - public static final String NODE_ATTR = "node"; - - public static IMarker create(IFile file, SilecsDocumentError error, NodeImpl node) throws CoreException { - IMarker marker = create(file, error); - if (node != null) { - marker.setAttribute(IMarker.CHAR_START, node.getStartOffset()); - marker.setAttribute(IMarker.CHAR_END, node.getEndOffset()); - marker.setAttribute(NODE_ATTR, node); - } - - return marker; - } - - public static IMarker create(IFile file, SilecsDocumentError error) throws CoreException { - IMarker marker = file.createMarker(SilecsMarker.TYPE); - - marker.setAttribute(IMarker.MESSAGE, error.message); - marker.setAttribute(IMarker.LINE_NUMBER, error.lineNumber); - switch (error.level) { - case INFO: - marker.setAttribute(IMarker.SEVERITY, IMarker.SEVERITY_INFO); - break; - case WARNING: - marker.setAttribute(IMarker.SEVERITY, IMarker.SEVERITY_WARNING); - break; - default: - marker.setAttribute(IMarker.SEVERITY, IMarker.SEVERITY_ERROR); - break; - } - - return marker; - } -} diff --git a/silecs-eclipse-plugin/src/java/cern/silecs/view/marker/SilecsMarkerUpdater.java b/silecs-eclipse-plugin/src/java/cern/silecs/view/marker/SilecsMarkerUpdater.java deleted file mode 100644 index ed8193f..0000000 --- a/silecs-eclipse-plugin/src/java/cern/silecs/view/marker/SilecsMarkerUpdater.java +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright 2016 CERN and GSI -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -package cern.silecs.view.marker; - -import org.eclipse.core.resources.IMarker; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.jface.text.IDocument; -import org.eclipse.jface.text.Position; -import org.eclipse.ui.texteditor.IMarkerUpdater; - -public class SilecsMarkerUpdater implements IMarkerUpdater { - - @Override - public String getMarkerType() { - return SilecsMarker.TYPE; - } - - @Override - public String[] getAttribute() { - return null; - } - - @Override - public boolean updateMarker(IMarker marker, IDocument document, Position position) { - try { - int start = position.getOffset(); - int end = position.getOffset() + position.getLength(); - marker.setAttribute(IMarker.CHAR_START, start); - marker.setAttribute(IMarker.CHAR_END, end); - return true; - } catch (CoreException e) { - return false; - } - } -} diff --git a/silecs-eclipse-plugin/src/java/cern/silecs/view/preferences/EditorPreferencePage.java b/silecs-eclipse-plugin/src/java/cern/silecs/view/preferences/EditorPreferencePage.java deleted file mode 100644 index 8ed40f1..0000000 --- a/silecs-eclipse-plugin/src/java/cern/silecs/view/preferences/EditorPreferencePage.java +++ /dev/null @@ -1,232 +0,0 @@ -// Copyright 2016 CERN and GSI -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -package cern.silecs.view.preferences; - -import org.eclipse.jface.preference.ColorSelector; -import org.eclipse.jface.preference.IPreferenceStore; -import org.eclipse.jface.preference.PreferencePage; -import org.eclipse.swt.SWT; -import org.eclipse.swt.graphics.RGB; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.layout.RowLayout; -import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.Event; -import org.eclipse.swt.widgets.Group; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.Listener; -import org.eclipse.ui.IWorkbench; -import org.eclipse.ui.IWorkbenchPreferencePage; - -import cern.silecs.activator.Activator; - -public class EditorPreferencePage extends PreferencePage implements IWorkbenchPreferencePage { - -// // validate on save -// public static final String VALIDATE_ON_SAVE = "VALIDATE_ON_SAVE"; -// -// // colors -// public static final String EDITABLE_COLOR_R = "XML_EDITOR_COLOR_EDITABLE_R"; -// public static final String EDITABLE_COLOR_G = "XML_EDITOR_COLOR_EDITABLE_G"; -// public static final String EDITABLE_COLOR_B = "XML_EDITOR_COLOR_EDITABLE_B"; -// -// public static final String CONTENT_COLOR_R = "XML_EDITOR_COLOR_CONTENT_R"; -// public static final String CONTENT_COLOR_G = "XML_EDITOR_COLOR_CONTENT_G"; -// public static final String CONTENT_COLOR_B = "XML_EDITOR_COLOR_CONTENT_B"; -// -// // link documentation to the editor -// public static final String LINK_DOCUMENTATION = "DISPLAY_DOCUMENTATION"; -// public static final String BRING_DOCUMENTATION_TO_FRONT = "DOCUMENTATION_TO_FRONT"; -// -// public static final String SHOW_GENERATED = "SHOW_GENERATED"; -// -// // default theme -// public static final RGB DEFAULT_EDITABLE = new RGB(0, 0, 0); -// public static final RGB DEFAULT_CONTENT = new RGB(130, 170, 150); -// -// // ocean theme -// public static final RGB OCEAN_EDITABLE = new RGB(0, 0, 128); -// public static final RGB OCEAN_CONTENT = new RGB(0, 206, 209); -// -// // fire theme -// public static final RGB FIRE_EDITABLE = new RGB(205, 79, 57); -// public static final RGB FIRE_CONTENT = new RGB(205, 205, 0); -// -// private Button validationOnSave; -// -// private ColorSelector editableColorSelector; -// private ColorSelector contentColorSelector; -// -// private Button linkDocumentation; -// private Button bringDocumentationToFront; -// private Button showGeneratedContent; - - @Override - public void init(IWorkbench workbench) { - setPreferenceStore(Activator.getDefault().getPreferenceStore()); - setDescription("Not yet available"); - } - - @Override - protected Control createContents(Composite parent) { - Composite container = new Composite(parent, SWT.NONE); -// -// IPreferenceStore prefs = getPreferenceStore(); -// - GridLayout layout = new GridLayout(1, false); - container.setLayout(layout); -// -// // validation options -// Group validationGroup = new Group(container, SWT.NONE); -// validationGroup.setText("Validation"); -// validationGroup.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false)); -// layout = new GridLayout(1, false); -// validationGroup.setLayout(layout); -// validationOnSave = new Button(validationGroup, SWT.CHECK); -// validationOnSave.setText("Validate after Safe"); -// validationOnSave.setSelection(prefs.getBoolean(VALIDATE_ON_SAVE)); -// -// // color options -// Group colorGroup = new Group(container, SWT.NONE); -// colorGroup.setText("Colors"); -// colorGroup.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false)); -// layout = new GridLayout(2, false); -// colorGroup.setLayout(layout); -// -// Label editableColorLabel = new Label(colorGroup, SWT.NONE); -// editableColorLabel.setText("Editable Text color"); -// -// contentColorSelector = new ColorSelector(colorGroup); -// RGB contentColor = new RGB(prefs.getInt(CONTENT_COLOR_R), prefs.getInt(CONTENT_COLOR_G), -// prefs.getInt(CONTENT_COLOR_B)); -// contentColorSelector.setColorValue(contentColor); -// -// Label contentColorLabel = new Label(colorGroup, SWT.NONE); -// contentColorLabel.setText("Content Text Color"); -// -// editableColorSelector = new ColorSelector(colorGroup); -// RGB editableColor = new RGB(prefs.getInt(EDITABLE_COLOR_R), prefs.getInt(EDITABLE_COLOR_G), -// prefs.getInt(EDITABLE_COLOR_B)); -// editableColorSelector.setColorValue(editableColor); -// -// Group buttonGroup = new Group(colorGroup, SWT.NONE); -// buttonGroup.setText("Color Scheme"); -// RowLayout buttonLayout = new RowLayout(SWT.HORIZONTAL); -// buttonLayout.marginLeft = 5; -// buttonLayout.marginRight = 5; -// buttonLayout.marginTop = 5; -// buttonLayout.marginBottom = 5; -// buttonLayout.spacing = 5; -// buttonLayout.pack = false; -// buttonLayout.justify = true; -// buttonGroup.setLayout(buttonLayout); -// GridData buttonGridData = new GridData(SWT.FILL, SWT.FILL, true, false); -// buttonGridData.horizontalSpan = 2; -// buttonGroup.setLayoutData(buttonGridData); -// -// -// Button defaultScheme = new Button(buttonGroup, SWT.PUSH); -// defaultScheme.setText("default"); -// -// Button oceanScheme = new Button(buttonGroup, SWT.PUSH); -// oceanScheme.setText("ocean"); -// -// Button fireScheme = new Button(buttonGroup, SWT.PUSH); -// fireScheme.setText("fire"); -// -// defaultScheme.addListener(SWT.Selection, new Listener() { -// -// @Override -// public void handleEvent(Event event) { -// contentColorSelector.setColorValue(DEFAULT_CONTENT); -// editableColorSelector.setColorValue(DEFAULT_EDITABLE); -// } -// }); -// -// oceanScheme.addListener(SWT.Selection, new Listener() { -// -// @Override -// public void handleEvent(Event event) { -// contentColorSelector.setColorValue(OCEAN_CONTENT); -// editableColorSelector.setColorValue(OCEAN_EDITABLE); -// } -// }); -// -// fireScheme.addListener(SWT.Selection, new Listener() { -// -// @Override -// public void handleEvent(Event event) { -// contentColorSelector.setColorValue(FIRE_CONTENT); -// editableColorSelector.setColorValue(FIRE_EDITABLE); -// } -// }); -// -// Group others = new Group(container, SWT.NONE); -// others.setText("Others"); -// others.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false)); -// layout = new GridLayout(1, false); -// others.setLayout(layout); -// linkDocumentation = new Button(others, SWT.CHECK); -// linkDocumentation.setText("Link Documentation"); -// linkDocumentation.setSelection(prefs.getBoolean(LINK_DOCUMENTATION)); -// bringDocumentationToFront = new Button(others, SWT.CHECK); -// bringDocumentationToFront.setText("Bring Documentation to Front"); -// bringDocumentationToFront.setSelection(prefs.getBoolean(BRING_DOCUMENTATION_TO_FRONT)); -// -// showGeneratedContent = new Button(others, SWT.CHECK); -// showGeneratedContent.setText("Show generated content"); -// showGeneratedContent.setSelection(prefs.getBoolean(SHOW_GENERATED)); -// - return container; - } -// - @Override - public boolean performOk() { -// IPreferenceStore prefs = getPreferenceStore(); -// -// RGB content = contentColorSelector.getColorValue(); -// RGB editable = editableColorSelector.getColorValue(); -// -// prefs.setValue(VALIDATE_ON_SAVE, validationOnSave.getSelection()); -// -// prefs.setValue(CONTENT_COLOR_R, content.red); -// prefs.setValue(CONTENT_COLOR_G, content.green); -// prefs.setValue(CONTENT_COLOR_B, content.blue); -// prefs.setValue(EDITABLE_COLOR_R, editable.red); -// prefs.setValue(EDITABLE_COLOR_G, editable.green); -// prefs.setValue(EDITABLE_COLOR_B, editable.blue); -// -// prefs.setValue(LINK_DOCUMENTATION, linkDocumentation.getSelection()); -// prefs.setValue(BRING_DOCUMENTATION_TO_FRONT, bringDocumentationToFront.getSelection()); -// prefs.setValue(SHOW_GENERATED, showGeneratedContent.getSelection()); -// - return true; - } - - @Override - protected void performDefaults() { -// validationOnSave.setSelection(true); -// -// contentColorSelector.setColorValue(DEFAULT_CONTENT); -// editableColorSelector.setColorValue(DEFAULT_EDITABLE); -// -// linkDocumentation.setSelection(true); -// bringDocumentationToFront.setSelection(false); -// showGeneratedContent.setSelection(false); - } -} diff --git a/silecs-eclipse-plugin/src/java/cern/silecs/view/preferences/LoggingPreferencePage.java b/silecs-eclipse-plugin/src/java/cern/silecs/view/preferences/LoggingPreferencePage.java deleted file mode 100644 index b10a026..0000000 --- a/silecs-eclipse-plugin/src/java/cern/silecs/view/preferences/LoggingPreferencePage.java +++ /dev/null @@ -1,121 +0,0 @@ -// Copyright 2016 CERN and GSI -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -package cern.silecs.view.preferences; - -import java.io.File; -import org.eclipse.jface.preference.IPreferenceStore; -import org.eclipse.jface.preference.PreferencePage; -import org.eclipse.swt.SWT; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.Combo; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.DirectoryDialog; -import org.eclipse.swt.widgets.Event; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.Listener; -import org.eclipse.swt.widgets.Text; -import org.eclipse.ui.IWorkbench; -import org.eclipse.ui.IWorkbenchPreferencePage; - -import cern.silecs.activator.Activator; - -public class LoggingPreferencePage extends PreferencePage implements IWorkbenchPreferencePage { - - - public static final String[] LOG_LEVELS = { "FATAL", "ERROR", "WARN", "INFO", "DEBUG", "TRACE", "OFF" }; - public static final int DEFAULT_LOG_LEVEL_INDEX = 3; - public static final String DEFAULT_LOG_DIRECTORY = System.getProperty("user.home") + "/.logs/fesa-plugin"; - - public static final String LOG_LEVEL = "fesaLog.level"; - public static final String LOG_DIRECTORY = "fesaLog.directory"; - public static final String BRING_CONSOLE_TO_FRONT = "CONSOLE_TO_FRONT"; - - private Combo logLevel; - private Text logDirectory; - - @Override - public void init(IWorkbench workbench) { - setPreferenceStore(Activator.getDefault().getPreferenceStore()); - setDescription("SILECS Logging"); - } - - @Override - protected Control createContents(Composite parent) { - IPreferenceStore prefs = getPreferenceStore(); - - Composite container = new Composite(parent, SWT.NONE); - GridLayout layout = new GridLayout(3, false); - container.setLayout(layout); - - Label level = new Label(container, SWT.NONE); - level.setText("Log Level"); - logLevel = new Combo(container, SWT.BORDER | SWT.V_SCROLL | SWT.READ_ONLY); - logLevel.setItems(LOG_LEVELS); - logLevel.select(prefs.getInt(LOG_LEVEL)); - GridData dataLayout = new GridData(); - dataLayout.horizontalSpan = 2; - logLevel.setLayoutData(dataLayout); - - Label directory = new Label(container, SWT.NONE); - directory.setText("Log Directory"); - logDirectory = new Text(container, SWT.BORDER); - logDirectory.setText(prefs.getString(LOG_DIRECTORY)); - dataLayout = new GridData(SWT.FILL, SWT.TOP, true, false); - logDirectory.setLayoutData(dataLayout); - - Button browse = new Button(container, SWT.PUSH); - browse.setText("browse"); - browse.addListener(SWT.Selection, new Listener() { - - @Override - public void handleEvent(Event event) { - DirectoryDialog dirDialog = new DirectoryDialog(getShell()); - logDirectory.setText(dirDialog.open()); - } - }); - - return container; - } - - @Override - public boolean performOk() { - IPreferenceStore prefs = getPreferenceStore(); - - int levelIndex = logLevel.getSelectionIndex(); - File logDir = new File(logDirectory.getText()); - - if (!logDir.isDirectory()) { - setErrorMessage("Invalid Path !" + logDir.getAbsolutePath()); - return false; - } - - prefs.setValue(LOG_LEVEL, levelIndex); - prefs.setValue(LOG_DIRECTORY, logDir.getAbsolutePath()); - - - return true; - } - - @Override - protected void performDefaults() { - logLevel.select(DEFAULT_LOG_LEVEL_INDEX); - logDirectory.setText(DEFAULT_LOG_DIRECTORY); - } - -} diff --git a/silecs-eclipse-plugin/src/java/cern/silecs/view/preferences/MainPreferencePage.java b/silecs-eclipse-plugin/src/java/cern/silecs/view/preferences/MainPreferencePage.java deleted file mode 100644 index 20a9e8c..0000000 --- a/silecs-eclipse-plugin/src/java/cern/silecs/view/preferences/MainPreferencePage.java +++ /dev/null @@ -1,344 +0,0 @@ -// Copyright 2016 CERN and GSI -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -package cern.silecs.view.preferences; - -import java.io.File; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -import org.eclipse.jface.preference.FieldEditorPreferencePage; -import org.eclipse.jface.preference.IPreferenceStore; -import org.eclipse.swt.SWT; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.Combo; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.DirectoryDialog; -import org.eclipse.swt.widgets.Event; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.Listener; -import org.eclipse.swt.widgets.Text; -import org.eclipse.ui.IWorkbench; -import org.eclipse.ui.IWorkbenchPreferencePage; - -import cern.silecs.activator.Activator; -import cern.silecs.model.exception.SilecsException; -import cern.silecs.view.console.ConsoleHandler; - -public class MainPreferencePage extends FieldEditorPreferencePage implements IWorkbenchPreferencePage { - - public static final String SILECS_DIRECTORY_TAG = "SILECS_DIRECTORY"; - public static final String FESA_DIRECTORY_TAG = "FESA_DIRECTORY"; - public static final String LOCAL_DIRECTORY_TAG = "LOCAL_DIRECTORY"; - public static final String USE_LOCAL_DIRECTORY_TAG = "USE_LOCAL_DIRECTORY"; - public static final String FESSA_VERSION_TAG = "FESA_VERSION"; - - public static final String SILECS_DIRECTORY_DEFAULT = "/common/usr/cscofe/silecs"; - public static final String FESA_DIRECTORY_DEFAULT = "/opt/fesa"; - public static final Boolean USE_LOCAL_DIRECTORY_DEFAULT = false; - - private static List<String> fesaVersions_ = readOutAvailableFesaVersions(); - - private static Text silecsDirectory; - private static Text fesaDirectory; - private static Button useLocalWorkspace; - private static Text localWorkspaceDirectory; - private static Combo fesaVersion; - - public static boolean isLocalDirectoryUsed() - { - IPreferenceStore prefs = Activator.getDefault().getPreferenceStore(); - return prefs.getBoolean(USE_LOCAL_DIRECTORY_TAG); - } - - public static String getGlobalSilecsDirectory() - { - IPreferenceStore prefs = Activator.getDefault().getPreferenceStore(); - return prefs.getString(SILECS_DIRECTORY_TAG); - } - - public static String getModelBasePath(String modelVersion) - { - IPreferenceStore prefs = Activator.getDefault().getPreferenceStore(); - if(prefs.getBoolean(USE_LOCAL_DIRECTORY_TAG)) - return prefs.getString(LOCAL_DIRECTORY_TAG) + "/silecs-model/src/xml"; - else - return prefs.getString(SILECS_DIRECTORY_TAG) + "/silecs-model/" + modelVersion + "/" + "xml"; - } - - public static String getCodeGenBasePath(String codegenVersion) - { - IPreferenceStore prefs = Activator.getDefault().getPreferenceStore(); - if(prefs.getBoolean(USE_LOCAL_DIRECTORY_TAG)) - return prefs.getString(LOCAL_DIRECTORY_TAG) + "/silecs-codegen/src/xml"; - else - return prefs.getString(SILECS_DIRECTORY_TAG) + "/silecs-codegen/" + codegenVersion + "/" + "xml"; - } - - public static String getDiagToolBasePath(String diagToolVersion) - { - IPreferenceStore prefs = Activator.getDefault().getPreferenceStore(); - if(prefs.getBoolean(USE_LOCAL_DIRECTORY_TAG)) - return prefs.getString(LOCAL_DIRECTORY_TAG) + "/silecs-diagnostic-cpp/build"; - else - return prefs.getString(SILECS_DIRECTORY_TAG) + "/silecs-diagnostic-cpp/" + diagToolVersion; - } - - public static String getSilecsLibraryBasePath(String silecsLibraryVersion) - { - IPreferenceStore prefs = Activator.getDefault().getPreferenceStore(); - if(prefs.getBoolean(USE_LOCAL_DIRECTORY_TAG)) - return prefs.getString(LOCAL_DIRECTORY_TAG) + "/silecs-communication-cpp/build"; - else - return prefs.getString(SILECS_DIRECTORY_TAG) + "/silecs-communication-cpp/" + silecsLibraryVersion; - } - - public static String getSNAP7LibraryBasePath(String silecsLibraryVersion) - { - IPreferenceStore prefs = Activator.getDefault().getPreferenceStore(); - if(prefs.getBoolean(USE_LOCAL_DIRECTORY_TAG)) - return prefs.getString(LOCAL_DIRECTORY_TAG) + "/snap7/snap7-full/build"; - else - return prefs.getString(SILECS_DIRECTORY_TAG) + "/snap7/" + silecsLibraryVersion; - } - - public static String getFESAVersion() throws SilecsException - { - int index = Activator.getDefault().getPreferenceStore().getInt(FESSA_VERSION_TAG); - return fesaVersions_.get(index); - } - - public static File[] getFESADesignTemplates() throws SilecsException - { - return getFESATemplates("design"); - } - - public static File[] getFESADeployUnitTemplates() throws SilecsException - { - return getFESATemplates("deployment"); - } - - public static String getFESADeployUnitSchemaPath() throws SilecsException - { - String fesaBaseDirectory = Activator.getDefault().getPreferenceStore().getString(FESA_DIRECTORY_TAG); - return new String(fesaBaseDirectory + "/fesa-model-gsi/" + getFESAVersion() + "/xml/deployment/deployment-gsi.xsd"); - } - - public static String getFESADesignSchemaPath() throws SilecsException - { - String fesaBaseDirectory = Activator.getDefault().getPreferenceStore().getString(FESA_DIRECTORY_TAG); - return new String(fesaBaseDirectory + "/fesa-model-gsi/" + getFESAVersion() + "/xml/design/design-gsi.xsd"); - } - - protected static File[] getFESATemplates(String type) throws SilecsException - { - String fesaBaseDirectory = Activator.getDefault().getPreferenceStore().getString(FESA_DIRECTORY_TAG); - File folderModel = new File(fesaBaseDirectory + "/fesa-model/" + getFESAVersion() + "/xml/" + type + "/templates"); - File folderModelGSI = new File(fesaBaseDirectory + "/fesa-model-gsi/" + getFESAVersion() + "/xml/" + type + "/templates"); - - File[] templatesModel = folderModel.listFiles(); - if( templatesModel == null) - templatesModel = new File[0]; - - File[] templatesModelGSI = folderModelGSI.listFiles(); - if( templatesModelGSI == null) - templatesModelGSI = new File[0]; - - if ( (templatesModel.length + templatesModelGSI.length) == 0 ) - { - ConsoleHandler.printMessage("Template search folder 1: " + folderModel.getPath(), true); - ConsoleHandler.printMessage("Template search folder 2: " + folderModelGSI.getPath(), true); - throw new SilecsException("No templates found there! Please fix the 'FESA Base Path' in the Preferences!"); - } - File[] templates= new File[templatesModel.length+templatesModelGSI.length]; - System.arraycopy(templatesModel, 0, templates, 0, templatesModel.length); - System.arraycopy(templatesModelGSI, 0, templates, templatesModel.length, templatesModelGSI.length); - return templates; - } - - public static String getLocalDirectoryDefault() - { - return System.getProperty("user.home") + "/workspace"; - } - - @Override - protected void createFieldEditors() - { - // TODO Auto-generated method stub - } - - @Override - public void init(IWorkbench workbench) - { - setDescription("SILECS Preferences"); - setPreferenceStore(Activator.getDefault().getPreferenceStore()); - } - - protected void switchEnableLocalWorkspace(Boolean localEnabled) - { - fesaDirectory.setEnabled(true);//to stay backward -compartible - silecsDirectory.setEnabled(!localEnabled); - localWorkspaceDirectory.setEnabled(localEnabled); - } - - public static List<String> getAllFesaVersions() - { - return fesaVersions_; - } - - protected static List<String> readOutAvailableFesaVersions() - { - String fesaModelDirectory = Activator.getDefault().getPreferenceStore().getString(FESA_DIRECTORY_TAG) + "/fesa-model-gsi"; - File fesaBaseFolder = new File(fesaModelDirectory); - - List<String> fesaVersions = new ArrayList<String>(); - for (final File fileEntry : fesaBaseFolder.listFiles()) - { - fesaVersions.add(fileEntry.getName()); - } - Collections.sort(fesaVersions); - Collections.reverse(fesaVersions); - return fesaVersions; - } - - @Override - protected Control createContents(Composite parent) - { - IPreferenceStore prefs = getPreferenceStore(); - - Composite container = new Composite(parent, SWT.NONE); - GridLayout layout = new GridLayout(3, false); - container.setLayout(layout); - - GridData dataLayout = new GridData(); - dataLayout.horizontalSpan = 2; - - { // fesa base - Label directory = new Label(container, SWT.NONE); - directory.setText("FESA Base Path"); - fesaDirectory = new Text(container, SWT.BORDER); - fesaDirectory.setText(prefs.getString(FESA_DIRECTORY_TAG)); - dataLayout = new GridData(SWT.FILL, SWT.TOP, true, false); - fesaDirectory.setLayoutData(dataLayout); - - Button browse = new Button(container, SWT.PUSH); - browse.setText("browse"); - browse.addListener(SWT.Selection, new Listener() { - - @Override - public void handleEvent(Event event) { - DirectoryDialog dirDialog = new DirectoryDialog(getShell()); - fesaDirectory.setText(dirDialog.open()); - } - }); - } - - { // FESA version - Label level = new Label(container, SWT.NONE); - level.setText("FESA Version to use"); - fesaVersion = new Combo(container, SWT.BORDER | SWT.V_SCROLL | SWT.READ_ONLY); - fesaVersion.setItems(fesaVersions_.toArray(new String[fesaVersions_.size()])); - fesaVersion.select(prefs.getInt(FESSA_VERSION_TAG)); - dataLayout = new GridData(); - dataLayout.horizontalSpan = 2; - fesaVersion.setLayoutData(dataLayout); - } - - { // silecs base - Label directory = new Label(container, SWT.NONE); - directory.setText("SILECS Base Path"); - silecsDirectory = new Text(container, SWT.BORDER); - silecsDirectory.setText(prefs.getString(SILECS_DIRECTORY_TAG)); - dataLayout = new GridData(SWT.FILL, SWT.TOP, true, false); - silecsDirectory.setLayoutData(dataLayout); - - Button browse = new Button(container, SWT.PUSH); - browse.setText("browse"); - browse.addListener(SWT.Selection, new Listener() { - - @Override - public void handleEvent(Event event) { - DirectoryDialog dirDialog = new DirectoryDialog(getShell()); - silecsDirectory.setText(dirDialog.open()); - } - }); - } - - useLocalWorkspace = new Button(container, SWT.CHECK); - useLocalWorkspace.setText("Use local workspace"); - dataLayout = new GridData(SWT.FILL, SWT.TOP, true, false); - dataLayout.horizontalSpan = 3; - useLocalWorkspace.setLayoutData(dataLayout); - useLocalWorkspace.setSelection(prefs.getBoolean(USE_LOCAL_DIRECTORY_TAG)); - useLocalWorkspace.addListener(SWT.Selection, new Listener() { - @Override - public void handleEvent(Event event) { - switchEnableLocalWorkspace(useLocalWorkspace.getSelection()); - } - }); - - { // Local SILECS Workspace - Label directory = new Label(container, SWT.NONE); - directory.setText("Local SILECS Workspace"); - localWorkspaceDirectory = new Text(container, SWT.BORDER); - localWorkspaceDirectory.setText(prefs.getString(LOCAL_DIRECTORY_TAG)); - dataLayout = new GridData(SWT.FILL, SWT.TOP, true, false); - localWorkspaceDirectory.setLayoutData(dataLayout); - - Button browse = new Button(container, SWT.PUSH); - browse.setText("browse"); - browse.addListener(SWT.Selection, new Listener() { - - @Override - public void handleEvent(Event event) { - DirectoryDialog dirDialog = new DirectoryDialog(getShell()); - localWorkspaceDirectory.setText(dirDialog.open()); - } - }); - } - - switchEnableLocalWorkspace(useLocalWorkspace.getSelection()); - return container; - } - - @Override - public boolean performOk() - { - IPreferenceStore prefs = getPreferenceStore(); - prefs.setValue(SILECS_DIRECTORY_TAG, silecsDirectory.getText()); - prefs.setValue(FESA_DIRECTORY_TAG, fesaDirectory.getText()); - prefs.setValue(USE_LOCAL_DIRECTORY_TAG, useLocalWorkspace.getSelection()); - prefs.setValue(LOCAL_DIRECTORY_TAG, localWorkspaceDirectory.getText()); - prefs.setValue(FESSA_VERSION_TAG, fesaVersion.getSelectionIndex()); - return true; - } - - @Override - protected void performDefaults() - { - silecsDirectory.setText(SILECS_DIRECTORY_DEFAULT); - fesaDirectory.setText(FESA_DIRECTORY_DEFAULT); - useLocalWorkspace.setSelection(USE_LOCAL_DIRECTORY_DEFAULT); - localWorkspaceDirectory.setText(MainPreferencePage.getLocalDirectoryDefault()); - localWorkspaceDirectory.setEnabled(false); - fesaVersion.select(0); - switchEnableLocalWorkspace(useLocalWorkspace.getSelection()); - } - -} diff --git a/silecs-eclipse-plugin/src/java/cern/silecs/view/preferences/PreferenceInitializer.java b/silecs-eclipse-plugin/src/java/cern/silecs/view/preferences/PreferenceInitializer.java deleted file mode 100644 index f82a6d2..0000000 --- a/silecs-eclipse-plugin/src/java/cern/silecs/view/preferences/PreferenceInitializer.java +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2016 CERN and GSI -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -package cern.silecs.view.preferences; - - -import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer; -import org.eclipse.jface.preference.IPreferenceStore; -import org.eclipse.swt.graphics.RGB; - -import cern.silecs.activator.Activator; - - -public class PreferenceInitializer extends AbstractPreferenceInitializer { - - @Override - public void initializeDefaultPreferences() { - IPreferenceStore prefs = Activator.getDefault().getPreferenceStore(); - - prefs.setDefault(MainPreferencePage.SILECS_DIRECTORY_TAG, MainPreferencePage.SILECS_DIRECTORY_DEFAULT); - prefs.setDefault(MainPreferencePage.FESA_DIRECTORY_TAG, MainPreferencePage.FESA_DIRECTORY_DEFAULT); - prefs.setDefault(MainPreferencePage.LOCAL_DIRECTORY_TAG, MainPreferencePage.getLocalDirectoryDefault()); - prefs.setDefault(MainPreferencePage.USE_LOCAL_DIRECTORY_TAG, MainPreferencePage.USE_LOCAL_DIRECTORY_DEFAULT); - - // init the xml editor preferences -// prefs.setDefault(EditorPreferencePage.VALIDATE_ON_SAVE, true); -// -// RGB dflt = EditorPreferencePage.DEFAULT_EDITABLE; -// prefs.setDefault(EditorPreferencePage.EDITABLE_COLOR_R, dflt.red); -// prefs.setDefault(EditorPreferencePage.EDITABLE_COLOR_G, dflt.green); -// prefs.setDefault(EditorPreferencePage.EDITABLE_COLOR_B, dflt.blue); -// -// dflt = EditorPreferencePage.DEFAULT_CONTENT; -// prefs.setDefault(EditorPreferencePage.CONTENT_COLOR_R, dflt.red); -// prefs.setDefault(EditorPreferencePage.CONTENT_COLOR_G, dflt.green); -// prefs.setDefault(EditorPreferencePage.CONTENT_COLOR_B, dflt.blue); -// -// prefs.setDefault(EditorPreferencePage.LINK_DOCUMENTATION, true); -// prefs.setDefault(EditorPreferencePage.BRING_DOCUMENTATION_TO_FRONT, false); -// prefs.setDefault(EditorPreferencePage.SHOW_GENERATED, false); - - // logging preferences - prefs.setDefault(LoggingPreferencePage.LOG_LEVEL, LoggingPreferencePage.DEFAULT_LOG_LEVEL_INDEX); - prefs.setDefault(LoggingPreferencePage.LOG_DIRECTORY, LoggingPreferencePage.DEFAULT_LOG_DIRECTORY); - prefs.setDefault(LoggingPreferencePage.BRING_CONSOLE_TO_FRONT, true); - } -} diff --git a/silecs-eclipse-plugin/src/java/cern/silecs/view/wizards/GenerateCodeWizard.java b/silecs-eclipse-plugin/src/java/cern/silecs/view/wizards/GenerateCodeWizard.java deleted file mode 100644 index 05ab3ed..0000000 --- a/silecs-eclipse-plugin/src/java/cern/silecs/view/wizards/GenerateCodeWizard.java +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright 2016 CERN and GSI -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -package cern.silecs.view.wizards; -import java.io.File; -import java.util.ArrayList; -import java.util.List; - -import org.eclipse.jface.wizard.Wizard; - -import cern.silecs.view.console.ConsoleHandler; -import cern.silecs.view.wizards.page.PickTemplatePage; - -public class GenerateCodeWizard extends Wizard -{ - private File[] templates; - File choice = null; - PickTemplatePage page; - - public GenerateCodeWizard(File[] templateFiles) { - super(); - setWindowTitle("Pick a template"); - templates = templateFiles; - } - - @Override - public void addPages() { - super.addPages(); - - List<String> templateNames = new ArrayList<String>(); - for( File file : templates) - { - templateNames.add(file.getName()); - } - String[] simpleArray = new String[ templateNames.size() ]; - page = new PickTemplatePage("Pick a template",templateNames.toArray(simpleArray)); - addPage(page); - } - - public File getChoice() - { - return choice; - } - - @Override - public boolean performFinish() { - String template = page.getTemplate(); - //ConsoleHandler.printMessage("template selected: " + template , true); - for( File file : templates) - { - //ConsoleHandler.printMessage("file available: " + file.getName() , true); - if( file.getName().equals(template)) - choice = file; - } - //ConsoleHandler.printMessage("choice full path: " + choice.getAbsolutePath() , true); - return true; - } -} diff --git a/silecs-eclipse-plugin/src/java/cern/silecs/view/wizards/ImportDeployFileWizard.java b/silecs-eclipse-plugin/src/java/cern/silecs/view/wizards/ImportDeployFileWizard.java deleted file mode 100644 index 496d5b7..0000000 --- a/silecs-eclipse-plugin/src/java/cern/silecs/view/wizards/ImportDeployFileWizard.java +++ /dev/null @@ -1,79 +0,0 @@ -// Copyright 2016 CERN and GSI -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -package cern.silecs.view.wizards; - -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.IWorkspaceRoot; -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.NullProgressMonitor; -import org.eclipse.jface.wizard.Wizard; - -import cern.silecs.control.core.DeployProjectNature; -import cern.silecs.utils.SilecsConstants; -import cern.silecs.utils.SilecsUtils; -import cern.silecs.utils.XmlUtils; -import cern.silecs.view.console.ConsoleHandler; -import cern.silecs.view.wizards.page.ChooseFilePage; -import cern.silecs.view.wizards.page.SilecsProjectPage; - -public class ImportDeployFileWizard extends Wizard { - - private ChooseFilePage firstPage; - private SilecsProjectPage secondPage; - - public ImportDeployFileWizard() { - setWindowTitle("Import Deploy-Unit File Wizard"); - } - - @Override - public void addPages() { - super.addPages(); - - firstPage = new ChooseFilePage("Import Deploy-Unit file to workspace", SilecsConstants.ProjectType.DEPLOY_PROJECT); - secondPage = new SilecsProjectPage("Import Deploy-Unit file to workspace", - SilecsConstants.ProjectType.DEPLOY_PROJECT, - "Enter new deploy-unit name", - "Enter new deploy-unit version"); - - addPage(firstPage); - addPage(secondPage); - } - - @Override - public boolean performFinish() { - try { - ConsoleHandler.clear(); - IWorkspaceRoot workspaceRoot = ResourcesPlugin.getWorkspace().getRoot(); - - String newDeployName = secondPage.getprojectNameText(); - IProject project = workspaceRoot.getProject(newDeployName); - - XmlUtils.reloadDependencies(); - - IProgressMonitor monitor = new NullProgressMonitor(); - DeployProjectNature.addDeployNature(project, monitor); - - SilecsUtils.openInEditor(SilecsUtils.getSilecsDeployFile(project)); - } catch (Exception e) { - e.printStackTrace(); - ConsoleHandler.printStackTrace(e); - } - - return true; - } - -} diff --git a/silecs-eclipse-plugin/src/java/cern/silecs/view/wizards/ImportDesignFileWizard.java b/silecs-eclipse-plugin/src/java/cern/silecs/view/wizards/ImportDesignFileWizard.java deleted file mode 100644 index 76afc40..0000000 --- a/silecs-eclipse-plugin/src/java/cern/silecs/view/wizards/ImportDesignFileWizard.java +++ /dev/null @@ -1,76 +0,0 @@ -// Copyright 2016 CERN and GSI -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -package cern.silecs.view.wizards; - -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.IWorkspaceRoot; -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.NullProgressMonitor; -import org.eclipse.jface.wizard.Wizard; - -import cern.silecs.control.core.DesignProjectNature; -import cern.silecs.utils.SilecsConstants; -import cern.silecs.utils.SilecsUtils; -import cern.silecs.view.console.ConsoleHandler; -import cern.silecs.view.wizards.page.ChooseFilePage; -import cern.silecs.view.wizards.page.SilecsProjectPage; - -public class ImportDesignFileWizard extends Wizard { - - private ChooseFilePage firstPage; - private SilecsProjectPage secondPage; - - public ImportDesignFileWizard() { - setWindowTitle("Import Design File Wizard"); - } - - @Override - public void addPages() { - super.addPages(); - - firstPage = new ChooseFilePage("Import Design file to workspace", SilecsConstants.ProjectType.DESIGN_PROJECT); - secondPage = new SilecsProjectPage("Set Design properties", - SilecsConstants.ProjectType.DESIGN_PROJECT, - "Enter new deploy-unit name", - "Enter new deploy-unit version"); - - addPage(firstPage); - addPage(secondPage); - } - - @Override - public boolean performFinish() { - try { - ConsoleHandler.clear(); - IWorkspaceRoot workspaceRoot = ResourcesPlugin.getWorkspace().getRoot(); - - String designName = secondPage.getprojectNameText(); - IProject project = workspaceRoot.getProject(designName); - - IProgressMonitor monitor = new NullProgressMonitor(); - DesignProjectNature.addClassNature(project, monitor); - - SilecsUtils.openInEditor(SilecsUtils.getSilecsDesignFile(project)); - - } catch (Exception e) { - e.printStackTrace(); - ConsoleHandler.printStackTrace(e); - } - return true; - } - -} diff --git a/silecs-eclipse-plugin/src/java/cern/silecs/view/wizards/NewSilecsDeployWizard.java b/silecs-eclipse-plugin/src/java/cern/silecs/view/wizards/NewSilecsDeployWizard.java deleted file mode 100644 index 4cde66a..0000000 --- a/silecs-eclipse-plugin/src/java/cern/silecs/view/wizards/NewSilecsDeployWizard.java +++ /dev/null @@ -1,113 +0,0 @@ -// Copyright 2016 CERN and GSI -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -package cern.silecs.view.wizards; - -import java.io.File; - -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.IProjectDescription; -import org.eclipse.core.resources.IResource; -import org.eclipse.core.resources.IWorkspaceRoot; -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.NullProgressMonitor; -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.jface.wizard.Wizard; -import org.eclipse.ui.INewWizard; -import org.eclipse.ui.IWorkbench; - -import cern.silecs.control.core.DeployProjectNature; -import cern.silecs.model.exception.SilecsException; -import cern.silecs.utils.SilecsConstants; -import cern.silecs.utils.OSExecute; -import cern.silecs.utils.SilecsUtils; -import cern.silecs.utils.XmlUtils; -import cern.silecs.view.console.ConsoleHandler; -import cern.silecs.view.preferences.MainPreferencePage; -import cern.silecs.view.wizards.page.SilecsProjectPage; - -public class NewSilecsDeployWizard extends Wizard implements INewWizard -{ - - SilecsProjectPage page; - - public NewSilecsDeployWizard() { - super(); - setWindowTitle(SilecsConstants.NEW_DEPLOY_WIZARD_TITLE); - } - - @Override - public void addPages() { - super.addPages(); - page = new SilecsProjectPage(SilecsConstants.NEW_DEPLOY_PAGE_TITLE, - SilecsConstants.ProjectType.DEPLOY_PROJECT, - "Enter deploy-unit name", - "Enter silecs version"); - addPage(page); - } - - @Override - public boolean performFinish() - { - try - { - ConsoleHandler.clear(); - String deployName = page.getprojectNameText(); - String silecsVersion = page.getsilecsVersionText(); - String deploySchema = MainPreferencePage.getModelBasePath(silecsVersion) + "/" + SilecsConstants.DEPLOY_SCHEMA_XSD; - if(! new File(deploySchema).exists()) - { - throw new SilecsException("The Deploy Schema: '" + deploySchema + "' does not exist. Please check your Eclipse-Silecs preferences!"); - } - IWorkspaceRoot workspaceRoot = ResourcesPlugin.getWorkspace().getRoot(); - String workspacePath = workspaceRoot.getLocation().toFile().getPath(); - - IProject project = workspaceRoot.getProject(deployName); - OSExecute.executePython("iefiles","newDeployProject",silecsVersion,new String[]{workspacePath, deployName,deploySchema,silecsVersion}); - XmlUtils.reloadDependencies(); - - IFile deployFile = SilecsUtils.getSilecsDeployFile(project); - - IProgressMonitor monitor = new NullProgressMonitor(); - //project.create(monitor); - //DeployProjectNature.addDeployNature(project, monitor); TODO: No idea why this does not work - - IProjectDescription description = project.getWorkspace().newProjectDescription(project.getName()); - String[] newNatures = new String[1]; - newNatures[0] = DeployProjectNature.NATURE_ID; - description.setNatureIds(newNatures); - - project.create(description, null); - - project.open(IResource.FORCE, monitor); - - SilecsUtils.openInEditor(deployFile); - } - catch (Exception e) - { - e.printStackTrace(); - ConsoleHandler.printStackTrace(e); - } - return true; - } - - @Override - public void init(IWorkbench arg0, IStructuredSelection arg1) { - // TODO Auto-generated method stub - - } -} diff --git a/silecs-eclipse-plugin/src/java/cern/silecs/view/wizards/NewSilecsDesignWizard.java b/silecs-eclipse-plugin/src/java/cern/silecs/view/wizards/NewSilecsDesignWizard.java deleted file mode 100644 index 7d915f5..0000000 --- a/silecs-eclipse-plugin/src/java/cern/silecs/view/wizards/NewSilecsDesignWizard.java +++ /dev/null @@ -1,115 +0,0 @@ -// Copyright 2016 CERN and GSI -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -package cern.silecs.view.wizards; - -import java.io.File; - -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.IProjectDescription; -import org.eclipse.core.resources.IResource; -import org.eclipse.core.resources.IWorkspaceRoot; -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.NullProgressMonitor; -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.jface.wizard.Wizard; -import org.eclipse.ui.INewWizard; -import org.eclipse.ui.IWorkbench; - -import cern.silecs.control.core.DesignProjectNature; -import cern.silecs.model.exception.SilecsException; -import cern.silecs.utils.OSExecute; -import cern.silecs.utils.SilecsUtils; -import cern.silecs.utils.SilecsConstants; -import cern.silecs.view.console.ConsoleHandler; -import cern.silecs.view.preferences.MainPreferencePage; -import cern.silecs.view.wizards.page.SilecsProjectPage; - -public class NewSilecsDesignWizard extends Wizard implements INewWizard{ - - SilecsProjectPage page; - - public NewSilecsDesignWizard() { - super(); - setWindowTitle(SilecsConstants.NEW_DESIGN_WIZARD_TITLE); - } - - @Override - public void addPages() { - super.addPages(); - - page = new SilecsProjectPage(SilecsConstants.NEW_DESIGN_PAGE_TITLE, - SilecsConstants.ProjectType.DESIGN_PROJECT, - "Enter design name", - "Enter silecs version"); - - addPage(page); - } - - @Override - public boolean performFinish() - { - try - { - ConsoleHandler.clear(); - String designName = page.getprojectNameText(); - String silecsVersion = page.getsilecsVersionText(); - String designSchema = MainPreferencePage.getModelBasePath(silecsVersion) + "/" +SilecsConstants.DESIGN_SCHEMA_XSD; - - if(! new File(designSchema).exists()) - { - throw new SilecsException("The Design Schema: '" + designSchema + "' does not exist. Please check your Eclipse-Silecs preferences!"); - } - - IWorkspaceRoot workspaceRoot = ResourcesPlugin.getWorkspace().getRoot(); - String workspacePath = workspaceRoot.getLocation().toFile().getPath(); - - IProject project = workspaceRoot.getProject(designName); - OSExecute.executePython("iefiles","newDesignProject",silecsVersion, new String[]{workspacePath, designName, designSchema, silecsVersion}); - - IFile designFile = SilecsUtils.getSilecsDesignFile(project); - - - IProgressMonitor monitor = new NullProgressMonitor(); - //project.create(monitor); - - IProjectDescription description = project.getWorkspace().newProjectDescription(project.getName()); - String[] newNatures = new String[1]; - newNatures[0] = DesignProjectNature.NATURE_ID; - description.setNatureIds(newNatures); - - project.create(description, null); - - project.open(IResource.FORCE, monitor); - //DesignProjectNature.addClassNature(project, monitor); TODO: No idea why this does not work - SilecsUtils.openInEditor(designFile); - } - catch (Exception e) - { - e.printStackTrace(); - ConsoleHandler.printStackTrace(e); - } - return true; - } - - @Override - public void init(IWorkbench arg0, IStructuredSelection arg1) { - // TODO Auto-generated method stub - - } - -} diff --git a/silecs-eclipse-plugin/src/java/cern/silecs/view/wizards/UpdateSilecsProjectWizard.java b/silecs-eclipse-plugin/src/java/cern/silecs/view/wizards/UpdateSilecsProjectWizard.java deleted file mode 100644 index 2de9a3e..0000000 --- a/silecs-eclipse-plugin/src/java/cern/silecs/view/wizards/UpdateSilecsProjectWizard.java +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright 2016 CERN and GSI -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -package cern.silecs.view.wizards; - -import org.eclipse.jface.wizard.Wizard; - -import cern.silecs.view.console.ConsoleHandler; -import cern.silecs.view.wizards.page.PickVersionPage; - -public class UpdateSilecsProjectWizard extends Wizard -{ - String selectedVersion; - PickVersionPage page; - - public UpdateSilecsProjectWizard() { - super(); - setWindowTitle("Pick a version"); - } - - @Override - public void addPages() { - super.addPages(); - page = new PickVersionPage("Select the new SILECS version"); - addPage(page); - } - - public String getSelectedVersion() - { - return selectedVersion; - } - - @Override - public boolean performFinish() { - ConsoleHandler.clear(); - selectedVersion = page.getsilecsVersionText(); - ConsoleHandler.printMessage("selected version: " + selectedVersion , true); - return true; - } -} diff --git a/silecs-eclipse-plugin/src/java/cern/silecs/view/wizards/page/ChooseFilePage.java b/silecs-eclipse-plugin/src/java/cern/silecs/view/wizards/page/ChooseFilePage.java deleted file mode 100644 index 0f26be8..0000000 --- a/silecs-eclipse-plugin/src/java/cern/silecs/view/wizards/page/ChooseFilePage.java +++ /dev/null @@ -1,136 +0,0 @@ -// Copyright 2016 CERN and GSI -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -package cern.silecs.view.wizards.page; - - -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.jface.dialogs.IMessageProvider; -import org.eclipse.jface.wizard.WizardPage; -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.ModifyEvent; -import org.eclipse.swt.events.ModifyListener; -import org.eclipse.swt.events.SelectionEvent; -import org.eclipse.swt.events.SelectionListener; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Button; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.FileDialog; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.Shell; -import org.eclipse.swt.widgets.Text; -import org.eclipse.ui.PlatformUI; - -import cern.silecs.utils.SilecsConstants; - -public class ChooseFilePage extends WizardPage{ - - private Composite container; - - private Text filePathText; - - private SilecsConstants.ProjectType projectType; - - /** - * @param pageName - */ - public ChooseFilePage(String pageName, SilecsConstants.ProjectType type) { - super(pageName); - setTitle(pageName); - - projectType = type; - } - - @Override - public void createControl(Composite parent) { - container = new Composite(parent, SWT.NONE); - GridLayout layout = new GridLayout(); - container.setLayout(layout); - layout.numColumns = 3; - - Label classNameLabel = new Label(container, SWT.NONE); - classNameLabel.setText("Enter file path"); - - filePathText = new Text(container, SWT.BORDER | SWT.SINGLE); - filePathText.setText(""); - filePathText.addModifyListener(new ModifyListener() { - - @Override - public void modifyText(ModifyEvent e) { - setErrorMessage(null); - setMessage(null, IMessageProvider.WARNING); - setPageComplete(true); - - saveProjectData(); - } - }); - - Button locateFileButton = new Button(container, SWT.NONE); - locateFileButton.setText("Select file"); - locateFileButton.addSelectionListener(new SelectionListener() { - - @Override - public void widgetSelected(SelectionEvent e) { - Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(); - - FileDialog dialog = new FileDialog(shell, SWT.OPEN); - dialog.setFilterPath(ResourcesPlugin.getWorkspace().getRoot().getLocationURI().getPath()); - filePathText.setText(dialog.open()); - } - - @Override - public void widgetDefaultSelected(SelectionEvent e) { - // do nothing - } - }); - - GridData gd = new GridData(GridData.FILL_HORIZONTAL); - filePathText.setLayoutData(gd); - - setControl(container); - setPageComplete(false); - } - - public String getFilePath() { - return filePathText.getText(); - } - - protected void saveProjectData() { - try { - String originalFilePath = filePathText.getText(); - - switch(projectType) { - case DESIGN_PROJECT: - int dotAfterDesignName = originalFilePath.lastIndexOf('.'); - String designName = originalFilePath.substring(0, dotAfterDesignName); - int dotBeforeDesignName = designName.lastIndexOf('.'); - designName = designName.substring(dotBeforeDesignName); - ((SilecsProjectPage) getNextPage()).setprojectNameText(designName); - break; - - case DEPLOY_PROJECT: - int dotAfterDUName = originalFilePath.lastIndexOf('.'); - String deployName = originalFilePath.substring(0, dotAfterDUName); - int dotBeforeDUName = deployName.lastIndexOf('.'); - deployName = deployName.substring(dotBeforeDUName); - ((SilecsProjectPage) getNextPage()).setprojectNameText(deployName); - break; - } - } catch (Exception e) { - e.printStackTrace(); - } - } -} diff --git a/silecs-eclipse-plugin/src/java/cern/silecs/view/wizards/page/PickTemplatePage.java b/silecs-eclipse-plugin/src/java/cern/silecs/view/wizards/page/PickTemplatePage.java deleted file mode 100644 index aa99505..0000000 --- a/silecs-eclipse-plugin/src/java/cern/silecs/view/wizards/page/PickTemplatePage.java +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright 2016 CERN and GSI -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -package cern.silecs.view.wizards.page; -import org.eclipse.jface.wizard.WizardPage; -import org.eclipse.swt.SWT; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Combo; -import org.eclipse.swt.widgets.Composite; - -public class PickTemplatePage extends WizardPage{ - - private String[] templates; - private Composite container; - private Combo templatePicker; - - /** - * @param pageName - */ - public PickTemplatePage(String pageName, String[] templateNames) { - super(pageName); - setTitle(pageName); - templates = templateNames; - } - - @Override - public void createControl(Composite parent) { - container = new Composite(parent, SWT.NONE); - GridLayout layout = new GridLayout(); - container.setLayout(layout); - layout.numColumns = 1; - - templatePicker = new Combo(container, SWT.BORDER | SWT.V_SCROLL | SWT.READ_ONLY); - templatePicker.setItems(templates); - templatePicker.select(0); - GridData dataLayout = new GridData(); - dataLayout.horizontalSpan = 1; - templatePicker.setLayoutData(dataLayout); - setControl(container); - } - - public String getTemplate() { - return templatePicker.getText(); - } -} diff --git a/silecs-eclipse-plugin/src/java/cern/silecs/view/wizards/page/PickVersionPage.java b/silecs-eclipse-plugin/src/java/cern/silecs/view/wizards/page/PickVersionPage.java deleted file mode 100644 index 0326bee..0000000 --- a/silecs-eclipse-plugin/src/java/cern/silecs/view/wizards/page/PickVersionPage.java +++ /dev/null @@ -1,72 +0,0 @@ -// Copyright 2016 CERN and GSI -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -package cern.silecs.view.wizards.page; - -import java.util.List; - -import org.eclipse.jface.wizard.WizardPage; -import org.eclipse.swt.SWT; - -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Combo; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Label; - -import cern.silecs.utils.SilecsConstants; -import cern.silecs.utils.SilecsUtils; - -public class PickVersionPage extends WizardPage { - - private Combo silecsVersionText; - private String silecsVersionDescription; - - public PickVersionPage(String pageName) - { - super(pageName); - setTitle(pageName); - silecsVersionDescription = "New silecs version"; - } - - @Override - public void createControl(Composite parent) - { - Composite container = new Composite(parent, SWT.NONE); - GridLayout layout = new GridLayout(); - container.setLayout(layout); - layout.numColumns = 2; - - Label classVersionLabel = new Label(container, SWT.NONE); - classVersionLabel.setText(silecsVersionDescription); - - silecsVersionText = new Combo(container, SWT.BORDER | SWT.V_SCROLL | SWT.READ_ONLY); - List<String> availableSilecsVersions = SilecsUtils.readOutAvailableSilecsVersions(); - availableSilecsVersions.addAll(SilecsConstants.ADDITIONAL_SILECS_TARGET_MIGRATION_VERSIONS); - silecsVersionText.setItems(availableSilecsVersions.toArray(new String[availableSilecsVersions.size()])); - silecsVersionText.select(SilecsConstants.DEFAULT_SILECS_VERSION_INDEX); - GridData dataLayout = new GridData(); - dataLayout.horizontalSpan = 2; - silecsVersionText.setLayoutData(dataLayout); - - // required to avoid an error in the system - setControl(container); - setPageComplete(true); - } - - public String getsilecsVersionText() { - return silecsVersionText.getText(); - } -} diff --git a/silecs-eclipse-plugin/src/java/cern/silecs/view/wizards/page/SilecsProjectPage.java b/silecs-eclipse-plugin/src/java/cern/silecs/view/wizards/page/SilecsProjectPage.java deleted file mode 100644 index 61a31e3..0000000 --- a/silecs-eclipse-plugin/src/java/cern/silecs/view/wizards/page/SilecsProjectPage.java +++ /dev/null @@ -1,152 +0,0 @@ -// Copyright 2016 CERN and GSI -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -package cern.silecs.view.wizards.page; - -import java.util.List; - -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.IWorkspaceRoot; -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.jface.dialogs.IMessageProvider; -import org.eclipse.jface.wizard.WizardPage; -import org.eclipse.swt.SWT; -import org.eclipse.swt.events.ModifyEvent; -import org.eclipse.swt.events.ModifyListener; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Combo; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Label; -import org.eclipse.swt.widgets.Text; - -import cern.silecs.utils.SilecsConstants; -import cern.silecs.utils.SilecsUtils; -import cern.silecs.view.preferences.MainPreferencePage; - -public class SilecsProjectPage extends WizardPage { - - private Text projectNameText; - private String projectNameDescription; - - private Combo silecsVersionText; - private String silecsVersionDescription; - - private String projectNamePattern; - private int maxNameLength; - - - private class PatternMatcherListener implements ModifyListener{ - - @Override - public void modifyText(ModifyEvent e) { - String name = projectNameText.getText(); - setErrorMessage(null); - setMessage(null, IMessageProvider.WARNING); - setPageComplete(true); - - if (!name.matches(projectNamePattern)) { - setErrorMessage(SilecsConstants.INVAILD_PROJECT_NAME + "\n" + projectNamePattern); - setPageComplete(false); - } else if(name.length() > maxNameLength) { - setErrorMessage("Name cannot be longer than " + maxNameLength + " characters"); - setPageComplete(false); - } else if (workspaceContainsProject(projectNameText.getText())) { - setErrorMessage("Project with this name already exists in the workspace"); - setPageComplete(false); - } - } - - } - - /** - * @param pageName - * @param projectNameLabelDescryption For example "Enter project name:" - * @param projectVersionLabelDescryption - * @param type - */ - public SilecsProjectPage(String pageName, SilecsConstants.ProjectType type, String projectNameLabelDescryption, - String silecsVersionLabelDescryption) { - super("New Silecs Project Page"); - setTitle(pageName); - - projectNameDescription = projectNameLabelDescryption; - silecsVersionDescription = silecsVersionLabelDescryption; - - if (type == SilecsConstants.ProjectType.DEPLOY_PROJECT) { - projectNamePattern = SilecsConstants.DEPLOY_PATTERN; - maxNameLength = SilecsConstants.MAX_DEPLOY_LENGTH; - } - else if (type == SilecsConstants.ProjectType.DESIGN_PROJECT) { - projectNamePattern = SilecsConstants.DESIGN_PATTERN; - maxNameLength = SilecsConstants.MAX_DESIGN_LENGTH; - } - } - - - @Override - public void createControl(Composite parent) { - Composite container = new Composite(parent, SWT.NONE); - GridLayout layout = new GridLayout(); - container.setLayout(layout); - layout.numColumns = 2; - - Label classNameLabel = new Label(container, SWT.NONE); - classNameLabel.setText(projectNameDescription); - - projectNameText = new Text(container, SWT.BORDER | SWT.SINGLE); - projectNameText.setText(""); - projectNameText.addModifyListener(new PatternMatcherListener()); - GridData gd = new GridData(GridData.FILL_HORIZONTAL); - projectNameText.setLayoutData(gd); - - Label classVersionLabel = new Label(container, SWT.NONE); - classVersionLabel.setText(silecsVersionDescription); - - silecsVersionText = new Combo(container, SWT.BORDER | SWT.V_SCROLL | SWT.READ_ONLY); - List<String> availableSilecsVersions = SilecsUtils.readOutAvailableSilecsVersions(); - silecsVersionText.setItems(availableSilecsVersions.toArray(new String[availableSilecsVersions.size()])); - silecsVersionText.select(SilecsConstants.DEFAULT_SILECS_VERSION_INDEX); - GridData dataLayout = new GridData(); - dataLayout.horizontalSpan = 2; - silecsVersionText.setLayoutData(dataLayout); - - // required to avoid an error in the system - setControl(container); - setPageComplete(false); - } - - public String getprojectNameText() { - return projectNameText.getText(); - } - - public String getsilecsVersionText() { - return silecsVersionText.getText(); - } - - public void setprojectNameText(String text) { - projectNameText.setText(text); - } - - public void setsilecsVersionText(String text) { - silecsVersionText.setText(text); - } - - private boolean workspaceContainsProject(String name) { - IWorkspaceRoot workspaceRoot = ResourcesPlugin.getWorkspace().getRoot(); - IProject project = workspaceRoot.getProject(name); - return project.exists(); - } -} diff --git a/snap7/.gitignore b/snap7/.gitignore index 77dde58..07cc7ee 100644 --- a/snap7/.gitignore +++ b/snap7/.gitignore @@ -1 +1,2 @@ -snap7-full/ \ No newline at end of file +snap7-full/ +/snap7-full-1.4.0.tar.gz -- GitLab