From 27b6ff41afb678bb586e8000b2478d9616c9dbfd Mon Sep 17 00:00:00 2001 From: Jirka Kosek Date: Tue, 4 Dec 2007 21:53:30 +0000 Subject: [PATCH] Moving to proper place --- contrib/tools/fo-editor/build.xml | 123 ++ .../fo-editor/configuration/attributes.xml | 71 + .../tools/fo-editor/configuration/config.xml | 574 +++++++ .../fo-editor/configuration/graphics.xml | 7 + .../fo-editor/configuration/parameters.xml | 1380 +++++++++++++++++ .../tools/fo-editor/configuration/types.xml | 37 + contrib/tools/fo-editor/lib/help.jar | Bin 0 -> 239287 bytes contrib/tools/fo-editor/lib/jh.jar | Bin 0 -> 508507 bytes contrib/tools/fo-editor/lib/log4j-1.2.14.jar | Bin 0 -> 367444 bytes contrib/tools/fo-editor/scripts/README | 68 + contrib/tools/fo-editor/scripts/run.bat | 5 + contrib/tools/fo-editor/scripts/run.sh | 1 + .../zcu/fav/kiv/editor/beans/ConfigData.java | 83 + .../cz/zcu/fav/kiv/editor/beans/OpenFile.java | 87 ++ .../editor/beans/common/GeneralElement.java | 57 + .../editor/beans/common/ParentParameter.java | 96 ++ .../editor/beans/common/ParentSection.java | 28 + .../fav/kiv/editor/beans/graphics/Figure.java | 49 + .../editor/beans/parameters/Parameter.java | 59 + .../editor/beans/parameters/TypeParam.java | 66 + .../editor/beans/parameters/UnitParam.java | 69 + .../editor/beans/properties/Attribute.java | 112 ++ .../beans/properties/AttributeGroup.java | 76 + .../kiv/editor/beans/properties/Property.java | 67 + .../kiv/editor/beans/properties/TypeAttr.java | 74 + .../kiv/editor/beans/properties/UnitAttr.java | 75 + .../fav/kiv/editor/beans/sections/Group.java | 62 + .../kiv/editor/beans/sections/Section.java | 46 + .../kiv/editor/beans/sections/Subsection.java | 57 + .../kiv/editor/beans/types/CommonTypes.java | 33 + .../kiv/editor/beans/types/DefaultType.java | 60 + .../zcu/fav/kiv/editor/beans/types/Type.java | 156 ++ .../zcu/fav/kiv/editor/beans/types/Unit.java | 100 ++ .../kiv/editor/config/ConfigController.java | 119 ++ .../fav/kiv/editor/config/ConfigParser.java | 190 +++ .../kiv/editor/config/ParamController.java | 124 ++ .../config/ParameterDependencyParser.java | 311 ++++ .../kiv/editor/config/ParameterParser.java | 199 +++ .../config/ParameterTransformation.java | 43 + .../fav/kiv/editor/config/PropertyParser.java | 120 ++ .../editor/config/constants/FileConst.java | 46 + .../config/constants/TagDefinition.java | 177 +++ .../kiv/editor/config/constants/TypeEnum.java | 56 + .../config/handlers/AttributeXmlHandler.java | 184 +++ .../config/handlers/ConfigXmlHandler.java | 215 +++ .../config/handlers/FigureXmlHandler.java | 137 ++ .../config/handlers/ParameterXmlHandler.java | 348 +++++ .../config/handlers/PropertyXmlHandler.java | 209 +++ .../config/handlers/TypeXmlHandler.java | 122 ++ .../kiv/editor/controller/MainController.java | 50 + .../kiv/editor/controller/MenuController.java | 195 +++ .../kiv/editor/controller/MessageWriter.java | 82 + .../editor/controller/ProgressControl.java | 168 ++ .../controller/errors/ConfigException.java | 35 + .../errors/FileNotFoundException.java | 42 + .../controller/errors/OpenFileException.java | 32 + .../controller/errors/ParserException.java | 32 + .../controller/errors/SaveFileException.java | 23 + .../controller/errors/XslParserException.java | 63 + .../fav/kiv/editor/controller/logger/Log.java | 121 ++ .../controller/options/EncodingEnum.java | 61 + .../controller/options/NewlineEnum.java | 74 + .../controller/options/OptionController.java | 179 +++ .../controller/options/OptionItems.java | 200 +++ .../resource/ErrorResourceController.java | 88 ++ .../controller/resource/LanguageEnum.java | 79 + .../controller/resource/ResourceConst.java | 18 + .../resource/ResourceController.java | 153 ++ .../kiv/editor/displays/GraphicsFigure.java | 23 + .../fav/kiv/editor/displays/PageFigure.java | 90 ++ .../fav/kiv/editor/graphics/MainFrame.java | 192 +++ .../zcu/fav/kiv/editor/graphics/TopMenu.java | 653 ++++++++ .../editor/graphics/components/CheckBox.java | 88 ++ .../graphics/components/ColorChooser.java | 251 +++ .../editor/graphics/components/ComboBox.java | 77 + .../graphics/components/ComboBoxEdit.java | 93 ++ .../graphics/components/ComboBoxUnit.java | 68 + .../graphics/components/FileChooser.java | 108 ++ .../graphics/components/RadioButton.java | 103 ++ .../graphics/components/SpinnerFloat.java | 113 ++ .../graphics/components/SpinnerInt.java | 100 ++ .../editor/graphics/components/TextArea.java | 76 + .../editor/graphics/components/TextField.java | 73 + .../attributes/AttributeButton.java | 63 + .../attributes/AttributeCheckBox.java | 68 + .../attributes/AttributeComponent.java | 60 + .../attributes/AttributeDialog.java | 118 ++ .../attributes/AttributeTypeForm.java | 93 ++ .../components/editor/EditorBody.java | 97 ++ .../components/editor/GroupItemsPanel.java | 76 + .../components/editor/GroupPanel.java | 72 + .../components/editor/SubsectionSheet.java | 88 ++ .../graphics/components/editor/TreeMenu.java | 114 ++ .../components/editor/TreeSelectAction.java | 42 + .../parameters/BrowserListener.java | 128 ++ .../parameters/DescriptionForm.java | 111 ++ .../components/parameters/HelpLabel.java | 101 ++ .../parameters/ParameterCheckBox.java | 68 + .../parameters/ParameterTypeForm.java | 87 ++ .../components/parameters/UrlLabel.java | 35 + .../graphics/console/MessageConsole.java | 227 +++ .../kiv/editor/graphics/frames/AboutForm.java | 75 + .../graphics/frames/ConfigInfoForm.java | 211 +++ .../kiv/editor/graphics/frames/HelpFrame.java | 72 + .../editor/graphics/frames/InfoDialog.java | 80 + .../editor/graphics/images/EditorIcon.java | 106 ++ .../graphics/images/resources/browser.png | Bin 0 -> 1147 bytes .../graphics/images/resources/colors.png | Bin 0 -> 898 bytes .../editor/graphics/images/resources/help.png | Bin 0 -> 932 bytes .../editor/graphics/images/resources/icon.png | Bin 0 -> 3494 bytes .../editor/graphics/images/resources/tab.png | Bin 0 -> 370 bytes .../editor/graphics/intro/IntroException.java | 21 + .../kiv/editor/graphics/intro/IntroFrame.java | 67 + .../editor/graphics/intro/ProgressBar.java | 139 ++ .../graphics/options/EditorOptionForm.java | 202 +++ .../editor/graphics/options/OptionDialog.java | 142 ++ .../graphics/options/OptionEditorDialog.java | 52 + .../options/OptionStylesheetDialog.java | 53 + .../options/StylesheetOptionForm.java | 375 +++++ .../editor/graphics/utils/FrameShower.java | 32 + .../graphics/utils/GridLayoutUtilities.java | 171 ++ .../editor/graphics/utils/OpenBrowser.java | 55 + .../graphics/utils/OverwriteFileDialog.java | 84 + .../editor/graphics/utils/SaveFileDialog.java | 88 ++ .../graphics/utils/SpringUtilities.java | 106 ++ .../kiv/editor/graphics/utils/XmlFilter.java | 51 + .../kiv/editor/graphics/utils/XslFilter.java | 51 + .../editor/stylesheet/FileStreamOutput.java | 102 ++ .../kiv/editor/stylesheet/OpenFileHadler.java | 146 ++ .../editor/stylesheet/SaveFileHandler.java | 334 ++++ .../fav/kiv/editor/stylesheet/XslParser.java | 214 +++ .../kiv/editor/stylesheet/XslTagConst.java | 25 + .../editor/stylesheet/XsltFileHandler.java | 237 +++ .../kiv/editor/template/TemplateConst.java | 55 + .../editor/template/TemplateController.java | 63 + .../kiv/editor/template/TemplateParser.java | 86 + .../editor/template/TemplateXmlHandler.java | 172 ++ .../zcu/fav/kiv/editor/utils/ErrorDialog.java | 27 + .../cz/zcu/fav/kiv/editor/utils/RunBatch.java | 143 ++ .../zcu/fav/kiv/editor/utils/TagControl.java | 156 ++ .../zcu/fav/kiv/editor/utils/TagParser.java | 123 ++ contrib/tools/fo-editor/src/log4j.xml | 30 + .../src/resources/ErrorResource.properties | 35 + .../src/resources/TextResource_cs.properties | 205 +++ .../src/resources/TextResource_en.properties | 205 +++ .../fo-editor/src/schemas/attributes.xsd | 33 + .../tools/fo-editor/src/schemas/config.xsd | 39 + .../tools/fo-editor/src/schemas/convert.xsl | 45 + .../tools/fo-editor/src/schemas/graphics.xsd | 24 + .../tools/fo-editor/src/schemas/template.xsd | 52 + contrib/tools/fo-editor/src/schemas/types.xsd | 44 + .../tools/fo-editor/templates/template.xml | 36 + 152 files changed, 16693 insertions(+) create mode 100644 contrib/tools/fo-editor/build.xml create mode 100644 contrib/tools/fo-editor/configuration/attributes.xml create mode 100644 contrib/tools/fo-editor/configuration/config.xml create mode 100644 contrib/tools/fo-editor/configuration/graphics.xml create mode 100644 contrib/tools/fo-editor/configuration/parameters.xml create mode 100644 contrib/tools/fo-editor/configuration/types.xml create mode 100644 contrib/tools/fo-editor/lib/help.jar create mode 100644 contrib/tools/fo-editor/lib/jh.jar create mode 100644 contrib/tools/fo-editor/lib/log4j-1.2.14.jar create mode 100644 contrib/tools/fo-editor/scripts/README create mode 100644 contrib/tools/fo-editor/scripts/run.bat create mode 100644 contrib/tools/fo-editor/scripts/run.sh create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/beans/ConfigData.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/beans/OpenFile.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/beans/common/GeneralElement.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/beans/common/ParentParameter.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/beans/common/ParentSection.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/beans/graphics/Figure.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/beans/parameters/Parameter.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/beans/parameters/TypeParam.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/beans/parameters/UnitParam.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/beans/properties/Attribute.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/beans/properties/AttributeGroup.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/beans/properties/Property.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/beans/properties/TypeAttr.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/beans/properties/UnitAttr.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/beans/sections/Group.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/beans/sections/Section.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/beans/sections/Subsection.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/beans/types/CommonTypes.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/beans/types/DefaultType.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/beans/types/Type.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/beans/types/Unit.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/config/ConfigController.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/config/ConfigParser.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/config/ParamController.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/config/ParameterDependencyParser.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/config/ParameterParser.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/config/ParameterTransformation.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/config/PropertyParser.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/config/constants/FileConst.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/config/constants/TagDefinition.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/config/constants/TypeEnum.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/config/handlers/AttributeXmlHandler.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/config/handlers/ConfigXmlHandler.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/config/handlers/FigureXmlHandler.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/config/handlers/ParameterXmlHandler.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/config/handlers/PropertyXmlHandler.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/config/handlers/TypeXmlHandler.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/controller/MainController.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/controller/MenuController.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/controller/MessageWriter.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/controller/ProgressControl.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/controller/errors/ConfigException.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/controller/errors/FileNotFoundException.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/controller/errors/OpenFileException.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/controller/errors/ParserException.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/controller/errors/SaveFileException.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/controller/errors/XslParserException.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/controller/logger/Log.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/controller/options/EncodingEnum.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/controller/options/NewlineEnum.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/controller/options/OptionController.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/controller/options/OptionItems.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/controller/resource/ErrorResourceController.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/controller/resource/LanguageEnum.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/controller/resource/ResourceConst.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/controller/resource/ResourceController.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/displays/GraphicsFigure.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/displays/PageFigure.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/MainFrame.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/TopMenu.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/CheckBox.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/ColorChooser.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/ComboBox.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/ComboBoxEdit.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/ComboBoxUnit.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/FileChooser.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/RadioButton.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/SpinnerFloat.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/SpinnerInt.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/TextArea.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/TextField.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/attributes/AttributeButton.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/attributes/AttributeCheckBox.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/attributes/AttributeComponent.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/attributes/AttributeDialog.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/attributes/AttributeTypeForm.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/editor/EditorBody.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/editor/GroupItemsPanel.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/editor/GroupPanel.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/editor/SubsectionSheet.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/editor/TreeMenu.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/editor/TreeSelectAction.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/parameters/BrowserListener.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/parameters/DescriptionForm.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/parameters/HelpLabel.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/parameters/ParameterCheckBox.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/parameters/ParameterTypeForm.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/parameters/UrlLabel.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/console/MessageConsole.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/frames/AboutForm.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/frames/ConfigInfoForm.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/frames/HelpFrame.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/frames/InfoDialog.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/images/EditorIcon.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/images/resources/browser.png create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/images/resources/colors.png create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/images/resources/help.png create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/images/resources/icon.png create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/images/resources/tab.png create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/intro/IntroException.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/intro/IntroFrame.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/intro/ProgressBar.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/options/EditorOptionForm.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/options/OptionDialog.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/options/OptionEditorDialog.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/options/OptionStylesheetDialog.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/options/StylesheetOptionForm.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/utils/FrameShower.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/utils/GridLayoutUtilities.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/utils/OpenBrowser.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/utils/OverwriteFileDialog.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/utils/SaveFileDialog.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/utils/SpringUtilities.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/utils/XmlFilter.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/utils/XslFilter.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/stylesheet/FileStreamOutput.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/stylesheet/OpenFileHadler.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/stylesheet/SaveFileHandler.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/stylesheet/XslParser.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/stylesheet/XslTagConst.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/stylesheet/XsltFileHandler.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/template/TemplateConst.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/template/TemplateController.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/template/TemplateParser.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/template/TemplateXmlHandler.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/utils/ErrorDialog.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/utils/RunBatch.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/utils/TagControl.java create mode 100644 contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/utils/TagParser.java create mode 100644 contrib/tools/fo-editor/src/log4j.xml create mode 100644 contrib/tools/fo-editor/src/resources/ErrorResource.properties create mode 100644 contrib/tools/fo-editor/src/resources/TextResource_cs.properties create mode 100644 contrib/tools/fo-editor/src/resources/TextResource_en.properties create mode 100644 contrib/tools/fo-editor/src/schemas/attributes.xsd create mode 100644 contrib/tools/fo-editor/src/schemas/config.xsd create mode 100644 contrib/tools/fo-editor/src/schemas/convert.xsl create mode 100644 contrib/tools/fo-editor/src/schemas/graphics.xsd create mode 100644 contrib/tools/fo-editor/src/schemas/template.xsd create mode 100644 contrib/tools/fo-editor/src/schemas/types.xsd create mode 100644 contrib/tools/fo-editor/templates/template.xml diff --git a/contrib/tools/fo-editor/build.xml b/contrib/tools/fo-editor/build.xml new file mode 100644 index 000000000..ead7be77b --- /dev/null +++ b/contrib/tools/fo-editor/build.xml @@ -0,0 +1,123 @@ + + + + + Create distribution for FO parameter editor. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/contrib/tools/fo-editor/configuration/attributes.xml b/contrib/tools/fo-editor/configuration/attributes.xml new file mode 100644 index 000000000..020953e88 --- /dev/null +++ b/contrib/tools/fo-editor/configuration/attributes.xml @@ -0,0 +1,71 @@ + + + + space-before + space-before.optimum + space-before.minimum + space-before.maximum + + + + space-after + space-after.optimum + space-after.minimum + space-after.maximum + + + + start-indent + end-indent + line-height + hyphenate + text-align + + + + font-family + font-weight + font-size + font-style + + + + + margin + margin-left + margin-right + margin-bottom + margin-top + + + + padding + padding-left + padding-right + padding-bottom + padding-top + + + + width + border-width + border-color + border-style + border-collapse + table-layout + + + + keep-with-next.within-column + keep-with-next.within-line + keep-with-next.within-page + wrap-option + + + + color + background-color + + + + diff --git a/contrib/tools/fo-editor/configuration/config.xml b/contrib/tools/fo-editor/configuration/config.xml new file mode 100644 index 000000000..f3741ea37 --- /dev/null +++ b/contrib/tools/fo-editor/configuration/config.xml @@ -0,0 +1,574 @@ + + +
+ + + paper.type + page.orientation + double.sided + toc.html + + + page.width + page.height + page.width.portrait + page.height.portrait + + + page.margin.inner + page.margin.outer + page.margin.top + page.margin.bottom + body.margin.top + body.margin.bottom + region.before.extent + region.after.extent + + + + + body.start.indent + body.end.indent + + + line-height + alignment + hyphenate + normal.para.spacing + + + superscript.properties + subscript.properties + + + + + marker.section.level + + + headers.on.blank.pages + header.rule + header.column.widths + header.table.height + header.content.properties + + + footers.on.blank.pages + footer.rule + footer.column.widths + footer.table.height + footer.content.properties + + + + + body.font.family + title.font.family + monospace.font.family + dingbat.font.family + sans.font.family + symbol.font.family + + + body.font.master + body.font.size + footnote.font.size + + + monospace.properties + verbatim.properties + + + + + list.block.properties + + + list.block.spacing + list.item.spacing + compact.list.item.spacing + + + variablelist.max.termlength + variablelist.as.blocks + variablelist.term.separator + variablelist.term.break.after + + + itemizedlist.label.width + itemizedlist.properties + itemizedlist.label.properties + + + orderedlist.label.width + orderedlist.properties + orderedlist.label.properties + + + segmentedlist.as.table + + + + + column.count.back + column.count.body + column.count.front + column.count.index + column.count.lot + column.count.titlepage + + + column.gap.back + column.gap.body + column.gap.front + column.gap.index + column.gap.lot + column.gap.titlepage + + + + + chapter.autolabel + appendix.autolabel + preface.autolabel + reference.autolabel + + + part.autolabel + label.from.part + component.label.includes.part.label + + + section.autolabel + section.label.includes.component.label + section.autolabel.max.depth + + + + + title.margin.left + + + formal.title.placement + + + component.title.properties + formal.title.properties + article.appendix.title.properties + + +
+ +
+ + + pgwide.properties + + + formal.object.properties + informal.object.properties + + + figure.properties + informalfigure.properties + + + example.properties + informalexample.properties + + + abstract.properties + abstract.title.properties + + + blockquote.properties + + + revhistory.table.properties + revhistory.table.cell.properties + revhistory.title.properties + + + + + admon.textlabel + admonition.title.properties + admonition.properties + nongraphical.admonition.properties + + + admon.graphics + admon.graphics.path + admon.graphics.extension + graphical.admonition.properties + + + + + callout.defaultcolumn + callouts.extension + + + callout.graphics + callout.graphics.path + callout.graphics.extension + callout.graphics.number.limit + + + callout.unicode + callout.unicode.font + callout.unicode.number.limit + callout.unicode.start.character + + + + + sidebar.properties + sidebar.title.properties + sidebar.float.type + sidebar.float.width + + + margin.note.properties + margin.note.title.properties + margin.note.float.type + margin.note.width + + + + + section.title.properties + section.title.level1.properties + section.title.level2.properties + section.title.level3.properties + section.title.level4.properties + section.title.level5.properties + section.title.level6.properties + + + section.properties + section.level1.properties + section.level2.properties + section.level3.properties + section.level4.properties + section.level5.properties + section.level6.properties + + + + + table.table.properties + table.properties + informaltable.properties + + + default.table.width + nominal.table.width + + + table.frame.border.thickness + table.frame.border.style + table.frame.border.color + + + table.cell.border.thickness + table.cell.border.style + table.cell.border.color + table.cell.padding + + + + + generate.toc + autotoc.label.separator + toc.line.properties + + + toc.max.depth + toc.section.depth + generate.section.toc.level + + + process.empty.source.toc + process.source.toc + + + bridgehead.in.toc + simplesect.in.toc + + + toc.indent.width + toc.margin.properties + + + + + qandadiv.autolabel + qanda.inherit.numeration + qanda.defaultlabel + + + qanda.title.properties + qanda.title.level1.properties + qanda.title.level2.properties + qanda.title.level3.properties + qanda.title.level4.properties + qanda.title.level5.properties + qanda.title.level6.properties + + + + + bibliography.numbered + bibliography.collection + + + biblioentry.item.separator + biblioentry.properties + + + + + glossentry.show.acronym + glossary.as.blocks + glosslist.as.blocks + glossterm.separation + glossterm.width + + + glossary.collection + glossterm.auto.link + firstterm.only.link + + + + + footnote.properties + footnote.mark.properties + footnote.sep.leader.properties + + + footnote.number.format + footnote.number.symbols + + + table.footnote.number.format + table.footnote.number.symbols + table.footnote.properties + + + + + refentry.generate.name + refentry.generate.title + refentry.title.properties + refentry.pagebreak + refentry.xref.manvolnum + refclass.suppress + + + function.parens + + + funcsynopsis.decoration + funcsynopsis.style + + + + + default.float.class + formal.procedures + procedure.properties + + + highlight.default.language + highlight.source + + + menuchoice.separator + menuchoice.menu.separator + + + shade.verbatim + hyphenate.verbatim + hyphenate.verbatim.characters + shade.verbatim.style + monospace.verbatim.properties + + + linenumbering.everyNth + linenumbering.extension + linenumbering.separator + linenumbering.width + + +
+ +
+ + + show.comments + + + rootid + root.properties + + + draft.watermark.image + draft.mode + + + ebnf.assignment + ebnf.statement.terminator + + + crop.marks + crop.mark.width + crop.mark.offset + crop.mark.bleed + + + runinhead.default.title.end.punct + runinhead.title.end.punct + email.delimiters.enabled + + + + + l10n.gentext.default.language + l10n.gentext.language + l10n.gentext.use.xref.language + l10n.lang.value.rfc.compliant + + + + + make.single.year.ranges + make.year.ranges + author.othername.in.middle + punct.honorific + + + + + insert.xref.page.number + insert.link.page.number + xref.with.number.and.title + use.role.as.xrefstyle + xref.properties + + + xref.label-title.separator + xref.label-page.separator + xref.title-page.separator + + + ulink.show + ulink.hyphenate + ulink.hyphenate.chars + ulink.footnotes + + + + + arbortext.extensions + axf.extensions + fop.extensions + fop1.extensions + xep.extensions + + + use.extensions + tablecolumns.extension + + + textinsert.extension + textdata.default.encoding + + + + + passivetex.extensions + tex.math.in.alt + tex.math.delims + + + equation.properties + informalequation.properties + + + + + generate.index + make.index.markup + index.on.type + index.on.role + index.method + + + index.number.separator + index.range.separator + index.term.separator + + + index.preferred.page.properties + index.entry.properties + index.div.title.properties + xep.index.item.properties + + + + + use.svg + graphic.default.extension + img.src.path + keep.relative.image.uris + + + default.image.width + ignore.image.scaling + + + preferred.mediaobject.role + use.role.for.mediaobject + + + + + current.docid + collect.xref.targets + insert.olink.page.number + insert.olink.pdf.frag + olink.base.uri + olink.debug + olink.doctitle + olink.lang.fallback.sequence + olink.properties + prefer.internal.olink + target.database.document + targets.filename + use.local.olink.style + + + + + profile.arch + profile.condition + profile.conformance + profile.lang + profile.os + profile.revision + profile.revisionflag + profile.role + profile.security + profile.userlevel + profile.vendor + profile.attribute + profile.value + profile.separator + + +
+ +
+ diff --git a/contrib/tools/fo-editor/configuration/graphics.xml b/contrib/tools/fo-editor/configuration/graphics.xml new file mode 100644 index 000000000..dc89fa163 --- /dev/null +++ b/contrib/tools/fo-editor/configuration/graphics.xml @@ -0,0 +1,7 @@ + + +
+ page.width + page.height +
+
diff --git a/contrib/tools/fo-editor/configuration/parameters.xml b/contrib/tools/fo-editor/configuration/parameters.xml new file mode 100644 index 000000000..2d1f177c7 --- /dev/null +++ b/contrib/tools/fo-editor/configuration/parameters.xml @@ -0,0 +1,1380 @@ + + + + USletter + USlandscape + 4A0 + 2A0 + A0 + A1 + A2 + A3 + A4 + A4landscape + A5 + A6 + A7 + A8 + A9 + A10 + B0 + B1 + B2 + B3 + B4 + B5 + B6 + B7 + B8 + B9 + B10 + C0 + C1 + C2 + C3 + C4 + C5 + C6 + C7 + C8 + C9 + C10 + USletter + combo-box + + + + in + 8.5 + spinner-float + + + + in + 11 + spinner-float + + + + in + 11 + spinner-float + + + + in + 8.5 + spinner-float + + + + portrait + landscape + portrait + combo-box + + + + in + 1 + spinner-float + + + + in + 1 + spinner-float + + + + in + 0.5 + spinner-float + + + + in + 0.5 + spinner-float + + + + 0 + check-box + + + + in + 0.4 + spinner-float + + + + in + 0.4 + spinner-float + + + + 1 + check-box + + + + 1 + check-box + + + + 1 + check-box + + + + 1 + check-box + + + + 1 1 1 + text-field + + + + 1 1 1 + text-field + + + + in + 0.5 + spinner-float + + + + in + 0.5 + spinner-float + + + + pc + 4 + spinner-float + + + + pt + 0 + spinner-float + + + + pt + 0 + spinner-float + + + + figure before +example before +equation before +table before +procedure before +task before + text-area + + + + 12.5 + spinner-float + + + + justify + center + left + right + justify + combo-box + + + + true + check-box + + + + font + serif + combo-box-edit + + + + font + sans-serif + combo-box-edit + + + + font + monospace + combo-box-edit + + + + font + serif + combo-box-edit + + + + font + sans-serif + combo-box-edit + + + + Symbol,ZapfDingbats + text-field + + + + 10 + spinner-float + + + + pt + 10 + spinner-float + + + + pt + 8 + spinner-float + + + + 0 + 1 + A + a + I + i + 1 + radio-button + + + + 0 + 1 + A + a + I + i + I + radio-button + + + + 0 + 1 + A + a + I + i + A + radio-button + + + + 0 + 1 + A + a + I + i + 0 + radio-button + + + + 0 + 1 + A + a + I + i + I + radio-button + + + + 0 + 1 + A + a + I + i + 0 + radio-button + + + + 0 + check-box + + + + 0 + check-box + + + + 0 + check-box + + + + + + text-field + + + + in + 6 + spinner-float + + + + pt + 0.5 + spinner-float + + + + pt + 0.5 + spinner-float + + + + none + solid + dotted + dashed + double + groove + ridge + inset + outset + solid + combo-box + + + + none + solid + dotted + dashed + double + groove + ridge + inset + outset + solid + combo-box + + + + color + black + color-chooser + + + + color + black + color-chooser + + + + 0 + check-box + + + + 0 + check-box + + + + 0 + check-box + + + + 0 + check-box + + + + 0 + check-box + + + + 1 + check-box + + + + 1 + check-box + + + + yes + no + maybe + no + radio-button + + + + yes + no + maybe + no + radio-button + + + + 1 + check-box + + + + 0 + check-box + + + + http://docbook.sourceforge.net/release/images/draft.png + text-field + + + + 1 + check-box + + + + 0 + check-box + + + + 0 + check-box + + + + /appendix toc,title +article/appendix nop +/article toc,title +book toc,title,figure,table,example,equation +/chapter toc,title +part toc,title +/preface toc,title +qandadiv toc +qandaset toc +reference toc,title +/sect1 toc +/sect2 toc +/sect3 toc +/sect4 toc +/sect5 toc +/section toc +set toc,title + text-area + + + + 2 + spinner-int + + + + 8 + spinner-int + + + + 0 + spinner-int + + + + 0 + check-box + + + + .png + text-field + + + + 1 + check-box + + + + 5 + spinner-int + + + + 1 + check-box + + + + + text-field + + + + 3 + spinner-int + + + + 1 + check-box + + + + + text-field + + + + 8 + spinner-int + + + + 1 + check-box + + + + ansi + kr + kr + combo-box + + + + 0 + check-box + + + + 1 + check-box + + + + 0 + check-box + + + + 1 + check-box + + + + 1 + check-box + + + + 1 + check-box + + + + 1 + check-box + + + + number + qanda + none + number + combo-box + + + + . + text-field + + + + http://docbook.sourceforge.net/release/bibliography/bibliography.xml + text-field + + + + 24 + spinner-int + + + + : + text-field + + + + + text-field + + + + + text-field + + + + 0 + check-box + + + + 0 + check-box + + + + + text-field + + + + in + 0.25 + spinner-float + + + + in + 2 + spinner-float + + + + 0 + check-box + + + + 0 + check-box + + + + no + yes + primary + no + combo-box + + + + 60 + spinner-int + + + + 1 + check-box + + + + .png + text-field + + + + 15 + spinner-int + + + + images/callouts/ + file-chooser + + + + 0 + check-box + + + + ZapfDingbats + text-field + + + + 10 + spinner-int + + + + 10102 + spinner-int + + + + 1 + check-box + + + + . + text-field + + + + 0 + check-box + + + + 0 + check-box + + + + 24 + spinner-float + + + + 0 + check-box + + + + 0 + check-box + + + + 1 + check-box + + + + 0 + check-box + + + + 0 + check-box + + + + 0 + check-box + + + + + plain + latex + + combo-box + + + + 1 + check-box + + + + yes + no + maybe + maybe + radio-button + + + + 2 + spinner-int + + + + 1 + A + a + I + i + 1 + radio-button + + + + 1 + A + a + I + i + a + radio-button + + + + + text-field + + + + + text-field + + + + 0 + check-box + + + + + text-field + + + + 1 + check-box + + + + + text-field + + + + 0 + check-box + + + + 0 + check-box + + + + 1 + check-box + + + + + text-field + + + + + + text-field + + + + before + text-field + + + + 1 + check-box + + + + . + text-field + + + + .!?: + text-field + + + + . + text-field + + + + 0 + check-box + + + + 0 + check-box + + + + 1 + check-box + + + + + text-field + + + + images/ + file-chooser + + + + 1 + check-box + + + + + text-field + + + + + + text-field + + + + + text-field + + + + 1 + check-box + + + + 0 + check-box + + + + + file-chooser + + + + 1 + spinner-int + + + + 1 + spinner-int + + + + 1 + spinner-int + + + + 2 + spinner-int + + + + 1 + spinner-int + + + + 1 + spinner-int + + + + pt + 12 + spinner-float + + + + pt + 12 + spinner-float + + + + pt + 12 + spinner-float + + + + pt + 12 + spinner-float + + + + pt + 12 + spinner-float + + + + pt + 12 + spinner-float + + + + none + before + left + start + right + end + inside + outside + none + combo-box + + + + in + 1 + spinner-float + + + + none + before + left + start + right + end + inside + outside + none + combo-box + + + + in + 1 + spinner-float + + + + + text-field + + + + + text-field + + + + + text-field + + + + + text-field + + + + + text-field + + + + + text-field + + + + + text-field + + + + + text-field + + + + + text-field + + + + + text-field + + + + + text-field + + + + + text-field + + + + + text-field + + + + ; + text-field + + + + + text-field + + + + en + text-field + + + + 0 + check-box + + + + 1 + check-box + + + + + text-field + + + + no + yes + only + no + combo-box + + + + no + yes + maybe + no + combo-box + + + + 0 + check-box + + + + + text-field + + + + 0 + check-box + + + + no + yes + maybe + no + combo-box + + + + + text-field + + + + 0 + check-box + + + + + text-field + + + + target.db + text-field + + + + 0 + check-box + + + + ::= + text-field + + + + + text-field + + + + , + text-field + + + + 0 + check-box + + + + em + 1.0 + spinner-float + + + + em + 1.2 + spinner-float + + + + 0 + check-box + + + + pt + 0.5 + spinner-float + + + + pt + 24 + spinner-float + + + + pt + 6 + spinner-float + + + + 1 + check-box + + + + pt + 14 + spinner-float + + + + 1 + check-box + + + + pt + 14 + spinner-float + + + + 0 + check-box + + + + + text-field + + + + basic + kosek + kimber + basic + combo-box + + + + + text-field + + + + + text-field + + + + + text-field + + + + '' + text-field + + + + 1 + check-box + + + + 0 + check-box + + + + / + text-field + + diff --git a/contrib/tools/fo-editor/configuration/types.xml b/contrib/tools/fo-editor/configuration/types.xml new file mode 100644 index 000000000..226e095a9 --- /dev/null +++ b/contrib/tools/fo-editor/configuration/types.xml @@ -0,0 +1,37 @@ + + + + #00FFFF + #000000 + #0000FF + #FF00FF + #808080 + #008000 + #00FF00 + #800000 + #000080 + #808000 + #800080 + #FF0000 + #C0C0C0 + #008080 + #FFFFFF + #FFFF00 + + + cm + mm + in + pt + pc + px + em + % + + + + serif + sans-serif + monospace + + diff --git a/contrib/tools/fo-editor/lib/help.jar b/contrib/tools/fo-editor/lib/help.jar new file mode 100644 index 0000000000000000000000000000000000000000..a58ddb62aad64e7f1d935635884bd3c1139367da GIT binary patch literal 239287 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%0Dk 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

(PTo~hmpIP5%?=&r8&Zo-j z96Sp>XRX#Do?jWAanDZyeZC=lVA&p(=7YS8q>6)S)s`%W`liQ-x0TlU_3bjYY+i7Z!hlTFt# zD!nN%kH^e_w*5!w!{*|m3eP6Vu=ub`uDiX*JY;K#clokBP>jJwPP)mK%TT9iFVQ$f z2Onh6E?_<~GIBCik8cv21?n0B4JE+x*S-wE-WA!a$~_tqlWEqpF0S*2Op`roC`;-1 zsK-ENHItJJG$7a?EadVvbktkJ$Fo zGB^FXT!h2s65PZ7*pRfwgX@}_>Y(P4_Bc1DnB%NAme%?}ubv@6g)gh{x3-m14J7n? z?yL3Dv7Tv#jK8$HG&3(r1k^d{=f+92X4WWj<@FEbwhUQ|hBXGyc`4x0infxwPViQA zK$8^8x@If-kp1laZrS+uDS-}_e49g7R}0nETYV@a?}?kHsJ|R=aHu0*DwrA5L#f*8 zdTaXMlS9pFf7UeEQHM1m%+D>Fj%;A~VPmvQf+N&6MGQSxx@#n~%G~yGoO|^cCT$W{ z&dL9xeW469&=sbvG6}uV&a+!SvPJk38zQu*N&U0OJW6PzC{nHJ+r%2d*XUgj+XHoB z)RvFGy^g8=K+mqkUlq1do#+e07?P7K{V;=0XaUmbtj$j#8zrul}~6mM#?`joPJIJjzP zFLGSM6xyh@UTk@wc!5ME%9DXStG}{wd{1q+r#g?xT@)i zhq8dadgtBIfkpegw&~-vTLKpcKB7*L*cqfibuF+*#mqslheCS8;fm(j9vcUzha+w* zC=G{ewlp4WLBL7;r1lB1v z@ZAZKo|#{F5s{kT^rqb|Y$4N>4t)*iZ0t-T<;B+W$9)67aq4EX9RbAM(oAYahD6gb zBL2(xx7QsRy_NR3rM{uQ^shp+s&3Z~9$r;KdO<=BWuJhLw@=vA)Nla5fk&oTf8Sm2 zs1n%8zD0kAuo^%F4X5%R`$Nagh_+LtmxOXC4 zFn_*M0niF4{+nw0nATP1^$E-cX&DV1$bjMocWY7a;E+HF_2j%FxcI459 z;0aw8!dx4@M-J!e3P(*NdPnI+U`Zt2UNi~;nOcus(X~%|+##1pO|aX0c>?%8Ne0Z- z^uJ>1r#bwlXTEIX?-<0d)$>oGuFm%{vlk84y5*Zn!ZxpZ&pfTt)jCOuDJg35;t24= zwlz;0IgZldTprWwdH#=eYJ>)ba=IDje=(4$KmsP#n%T1=FvdnlZ`G$WISM@JUJ44X z?(nMr`6(JXD|YU?X*x#X5CGAlqoYT7bC3lGvu0Q1Tzo2YX@tM1i4OJY{T{30yJ{25 zx!?_?@BH8t>|1&?bLGsuWK@L2LOzlDWC4g{it>t_TkU9O*;2k`eRDT%g^InRWlhiTFJ=h!L)+_o~F6P4_j9v)$VT!_5GiS&Z0ajX}=D#16@^3;yZDM~YVoWcr zQeZe=%#FgXWKP|iNRpy&D^$EM$U}shLphm!GV&F zf<0d7X^n1-X(;*`2YgATI51eXT=lw-w<7i4Q;ThMw73H_001CdZgh1*Wp}2c*tsv! z!+m9MA``3@GaWqfz?zV_mrM7BBrhd*{N{b_>`o~{MQCD+vaJ{qD##!cV2AD_A257X zyzo{le|S}P>GRJmd3VVho_JCzvo+UfU5fnepRQZ#k(H5P1pY^u)t!j&v(G`rFd-)) zLU2eLPNgpUa6ep6?SqZoPhXu>QA2>s%}5m{w=Dii?NjUrM6}a*T3N>>Br-Ml{>LyQ z1;hC>HXYP{MmFTLr>xwU9ozG7%TnEC0CJi8O~@cv34h=u)XjFAzH2l=4ys-1X#yhV zG~Sc5<$9g@z`VzXL19^6Jxxiy*@1#;Z z$`;A7y^1g}BXol1xu_c4_^prUNjl^hSMg9Ob%X+!mN>PWfu{Zfbv%G=c9@^%6>Z#u zv}&rI=Hly?u2tvtVV=XW@}=MU%u^j`xvN&GVER(R@GTW8^hWlaYCM}I<+j(jcQ%>` zhU-AhqDS4)z{`1Vnk7b+E;G8x?SuFH7c|>tObY^FLgBejZ@Kxy;L3K2g-YP>H?Jqo zLsCL}f;#N#s^Xp`NE7&3_~#dIL93&Ut+M(8D1cXz0GYVg3bbsNp4S76?=q zC1XjmY-{9yXbaDHwukS|G5v#={cVz9nN%Iv*G-+Sfj=W%9J(l9Gs3}O}9T^oVZd;)mL+-$ff$UmfRWa*cq?`K2~$7dBIfg9rjLszLy{tv|xsv^ggzN zw&|v_-^z5EFU}%tyP@}?@;ocHeJ9E=oOxFj3to6=h?D$HE}-ezGEc5BUFhF;IG5-8 z6O54{I8U^^!G0z5mjV44mt9m{e2^(+#n#coi=#Ta&5Smh{t#88<2yQbB<~+DBzbXKD$Q6AEfaL5i*uNj)SwynA5W74n|-=zt}8xHL-Fg524v zp4NcWe|2a5o#o|-h&g^;a!%PWc74>WNgNEaJo{wO9NLv; zLWoMc`WaFdR4F*?!n8 zk*z8xjSbGk6=-B!ZQNzzIAo{U-*`5_|D49ouu>`Q{ONV$Od?Q+?gnM0P1^tET~u|T zsrD1wz`}egW|44E_IbYOB$EqV?1#~J8U*P|RpZSrtXb%Q4tkn|Xvfnr`-00^{o5%D zv^um_6vAb|Wrz`8L@D9q4j59eG|tyrR-{~x=83M6fup5A1_~$;!1p+-`(90k^hi(T z{UvWht1xzU;}Cf4?f%ttoMlu9lXvw|$6YpQkq{hNUlwDWbS=*|xKnZ{13t02ur+aT zIyyRZZ|^#2T`0;ewN{t&v-UVxJ(=0$z`($Rz`?n^RmqE)h4<8PL^k0OoD-mE#lC-~ z^%z0Jh;rP!iR5BB?dl$KQlE|$us@lY*Y=U)A69Opq3NrP`AeTT-B%4=XWU7OQ$n=H zC^5%@>c8bozmO@Z_$f^aE28^`CN zWjdoW5uBPMoiD4m-O>)?=C{kB!j0PHWB-ay&gs87lbftYl8w)X?$kf3qMp1AVmF{_ zzpZA$96#4(OftmDjIwTU_Mz3XMgv~jV1XD7x`yxt$FrGLhhDCcT54W_^poo|i z)&?7=9b)sFUO-j6WF;ang^B+#r$u*WaX#Wi@Lz@?@G^$;31u4ZadA=8-6;Xb<0}9S zDj29}eMRK`edx0Q*TZY?3+B;;pnaOpx(G;h8pQTceT9+>Ef<3s>!_oluLsIF}GIIM$Nq1I{Z@{y80NI7jo)f>|WRhXT9cW*{X(t=NQH&T8Q?K84xwYTg4 zsCwvm%73Qc7q-7&&J*Hwg~>XhmKIT5wf~c{g%0xNLLtrV`nv(xi^f^aJWxpv2R3L~ z3rd^!$0DVlX;xW|x*zR#x`yZ<8bZWeMrf;T=bgy;qxNRzU@$xne5mn$qkK0d$)gg0tgy^PGExbev$7!{fWXna{>% zQO*IzrrMO1(ypxM%<)0NWKP8CKz?#q)jQuEf_c+(ixlcDz>r07K2V5kG+wAcoQNp|2mX%g>6yd@0u+(rD@H&D-{l z7f=xz=#dJdjJNx|2jJWuWVtEVBGB5^p{zV)1+>fUVKT5BSu;oofa`G9HZ!xA&JnF? zv3=9GTm5UV5&fa$UM#z|huvm}G~e)2hNCMkG|a2`ndLR@O_25tiuUAorFgzaikYeP zhIXj7t|;m!WN3+g{FN?dy8}pbH{)cX!ijvo;z83(0if`HA$}+6!O9(pZ>0o?V%pTu zlROQr8sp8`d9^56xJJuY6%%G~L&%4yFysj5PRaiYZaECAHd!g$|pbh#YmSslQY+PL}8 zoLqvt?^|9=e&fKb*ofM{9Bq~km}i)`V4u@S&!7{YGdPWrUshgL&0Xl5FL=x6FNV?S&5OZ z+|^&7E816PpI=nE*~rcfr7~c|h55O$iBS!l?gtJ!o>uh*4nC~Mw7v{ky}mjXk;_w% zkl!Je3}q3Nwpy8OJr7iN#fy6kp6?ePBO(qA4G$lKOcs|< zT3(DpSyY?9(iluxF&d{oUNlPmNCbP4e zq@m!T<$c_4E7S)f<@kJnGFdQ)BKlG^tlQetCU#a!TPZX^IJN2otN6p4P!T!)pA>g2 zEL1P9{2!j33f*vN_`fVeiGQxN&=4#=IbmEA)V51Ceu^gtXEf921l!|Dv$YIDMCpj{ zsq}RW%i0|aLf5@>j?6VY(^khM(9xbbyRVzM+5$Wwg`vnJ+YT$_q_je88V}c(A*%Xf z^HDb6Y&NT^?v6R&WRWGE0KOte5TQs61eBrJv8Ga$K?r?{CK_++#ToG!F5bBlgwn#s z9@F!~82AV~6a@V^y-EnY16}ZH?^*w)p%{v&~e2*xn);AqtKH@~` z@%q|5cjXU+VmSh$q+piEFQKH(811pCz^L2WgM+h7S58(MQ$vTRtQ!MjIZ}wtVP0jv zKbM|LtS_j1U543tmsbI;RNFHp22Rceh7ZIVWvefMknX3*UKs~F&(h2_33f34nZj!0 zCN`FDt{szt>IYLr7Q;DDnXIh1;TGD7p_DSxMeQ3G?WDhsTi0C5(D;(Qb&rrLKnlgZ z>Q7^Q)U1(x0`ruD;6KweKD?Df3neRnmYCs<9^KS^%CSe2I;KDQC0aI7b8~Z}nVPNS z)1yA(^2!chj5Q9f3^0f+NQjsFwWUMLI&zD`2I}E3Mme|Z1Kt1O3deER1Q!xA|9zjz zD10dcsjQrchMtV`B~aFt>-h9a&3_dk-q@@FoR8w%SXRZF59Xi9<4JUG&p&u#G25<8 z^~r2)^?L(~{5z`va{;6G~AEhT|CIydiXXe)*FW#jX4y z!!bqA(&NAyq$_8|N=i7me>v-4&*1%0iXHB8v8x_|pecbN88R$lQ)I#3RXh3oV%$l@ zpp(aoK^><#;Z(U9MT>gjfQ%J_^P=_-gi8>||1h16KE5BOoW~m^IV6$L$qhcj0mW(( z%HRsk9^A_;Rp#xmPVJ%$t(o>n%bNByx4vB>TEP45PT$$?riLzfk0IVSk04u@+~pvU zKR=o3DK)`7H7n3+m(HE^Tx%hO!7}o03{oFm$Y(EzR@r@W+z!%`<8{;0dhs$+BQ@&5N^j>$1~5s$4OOupKZH5i z+9046h6;kp^JrBhWG4T6<1TqAj=yNwiaXwz>`b5Fo3S{ikXZyX=R7%gc1YyAqYvVc zeZ{-EK1nBFHt&SDOOc_nCIDx2dFS$l`fR>$-kBXZ9uC9zK{|@6&jaL0Z{JjPd5iAf z*S6Co4eNbGImB=+Wq{XwwPm*iMxL+5TJUKbxC=f`jBLqR|4I0!@abE~irSj$XjqJw z;jjxo?H=ZEQoSpMY*ddwtd3U0$B#R-2#{6!yh+()rSo`-+o)T zgHQF_Pl7~|vl>jgKM^}0cuXOUP%UssKXSZVrHt0*Ut@=#Fi9ctW$RnCM}^2lwj zY7B`Z3(h=)hYdr!H&gHe;){kylN0AI98^?=(I6+;4b2!6LvUDxth2ek0GU$E(*)AR zBke}dol1j1p|U1Y8o$Jm_`R{$D*sQ(n3?c6GL zXL)!wfdZ7{O+iVCaMKtoTj?Y3@IS&?B$dqghH&Y`pm(T+ii(iZii(URFO|oQOagxn zdf7jd8duP4Y}R?}iqMjT?3TmAqKzJnQ|Y&g3rqQ_A)C0{)UG?)+$_`=4EyAwk<{8t`iGYaBxOL-n}%<2-N5FIS|Q?2$zAXp2&0`m0%`Pj3OZ3K5()SKg978go7q4fp73UUE~`J8t@7zSsjdO?Z_~ zid-Ces|xR<^925eA>dlo6Z4@-BkSwWITK>+mO!tr1{RvB!pW~hf!D$~;2|~oOjY`y zVb5G915j-Wfg)j!R6aNbqEzY1F-p4(Jy1J%G{sEVBb6Yagc4e$`3Rbp0G^hev5ly2 zg-?c9<n0_RCqm^B z%6t^tq}`HFKmiLYRj5e{FSNZW5ZROsbsWBA2hV4R-Kl=pW&A$=)|6wGN*7c8`mHZ2 z4%4=Wr42pXB0-ej|C@f0ss6-(u z_FhXXegpaN4^d-rs>bLcT1e5`yVFh`6pZX{#>4Mr4UYEPFFDtm=a4B_s%HT*^dX}y zx;G%$1@!JC$R{n47c z1`QO;&qoueo4r4a#|cFwGk9mK8?3?ry$$)2F1#<(Ju8k`DDMqDkpH!$yw0{2GNtEs zBj(!r4E+nr5eIj!9c7bkIG(&QnH4XgUj0VH7q7^8%kx>~2-o`Z^J>m~SVqYb#heV&fJmw%M*3<3R2Vq*~2vmmx zC8@Ik&Up960_}eZq+yIEi{-ZIYr;fd|w>??NXD*pWOii89qk)d0{-GR9p=OcV&2(O^1OAWaVR7gP1XRHc z&x8EngB@2J!ukV}i1*d8h#zK;Ketefd{xn=zAK;PJ$vvYW7 zO+0S?_#C`fxGrW|h&csPu+oF&q?bI@P4I(w?TfA8Xxjs+mmUnSjPGHH>S|*3GsiSH z=hN$Pp39VJ*GQdu4V2+$(>xgI!>ug+sXI2-yB4}V@x%J@7-8_F1Q1$`74h6lIO6EW zq1VB1CTR>F85$PjHg#NeRb|0-wK#}Co^>fKRQ_I|!Ydp2FQ;S~f1(8hTn_eo4jd#Y^ceVTH|OgE$=P$^Lw{A5W!?IT zI9R(TS6kbKHwMF}^6rY=YI|d0YqTFO^(V>P2z+qc{%T7R2By0fT6o(M^ai5Iag7|p zba6K73Zu&YMNKX`pT-giw3W`Q{|b>?r=Ko~(d4LE+m>)6s;bE(pQJ2G)^)MAjj3NmJGUK4LoIbh>!u$ zSyk5T3E0ff_;sFb$<3*qY#p1aA0(Mqres(40n{BlR2Amg>22&9@nZW>a+|^|DA$l> z>-{Juig&LP@4fBywbhj--lmmeN@)F`+7AXsb}|wYTH34n>~C$`{jbq~=`J~4bwHsn zCQ=)36T!j7!NC$6IhGkldBCY`a+l>~VrEb+@pQX~T`w;Hk*gtFHh$}~zA_K|phv5h zf7yuM_lfH+gMi^5e{iz=A4?)%)YZiiw3tsuy#m4{_2$P$aJk5ileJ#cv51%wN+FbM z@wT8X@JG}1dw$>8tu)lmAQ%l@(rKqtot-s=WVGw$A*FGW%xO4$k`tj-#34!ymv~f* zxOG+Zo%w6EAKuEVKfPCIeYp7h)zuQA(1L3iAzj^_s!&@8wd-6si zZ8>rlxtee`fu$f<*gJQ5$}k%&z2@y6lKaIMxa{2%L-+;>|E+BCV52V7dS!Sq@Y) zg}mu9Ptc&<6zsQLefouAIlkWpM!`k<>V;T(<47&-|5bFMW0_$-@&Z^{4tw@JGzmWw zTMQM)S`Z4>Qc_!&=z~Q59x&ynv*fdt46joEx84B;V=EG$n34=i)$+z#P)|!Yg5Kc^ zRgQmtbVX?*u2T2Prfeh^sT@rD{8J zo}c}M84Y|K3C)KBBMcW)`8q5HXqAH<Xe*6y49lQ(}#oVE;iW!E(hv{dUs}Y(^Gk<9TmOb+3J|*B`dnL2j5fwxhS6( z7@5DgzMm4Gg6V0`cen$hxH2I>CXMM0EGsQNIWdutl3=(j?(WUqzm5bh-%^E7KjqpTm$(u5Yz*=M>?yC@XyjOT zBbe7}96^pF((SVxvT?vvScn9Ag)5ejMFzSTw4<1e%CcMst^tqIeVJ>jSK9fYBG2z< zMEWPvA(vz1sEbMS`33N=ePd;W32Am702!}!WOLINKpS@$_$dpp4M6cDfP;&got4+C zFDDA|8n`!%b3<_BzNP{~l$n#9L;k4mZWHA$cl1B_98k1>5~FZc>TnahQ*q88U~94B z$5!K$a-0HTY&-v*<9Hnz?&=S^4${j>?^0bOs&4-SI$^e9&(USS`P`&WY7U@VOhd4I zI5sFz`i)3{LjIgh)XGmB2$Uznhrj=;YBP`a3l67x zetzY$wY@o+$v(0O%p!3(J2AumLai4%9!>WeK6*GY6`in3OiH@o6WddQ%;CW)q)Fp? zvi>beLMJpfV2jv!DA89)WGQhnFc66b9K<4AJHmYMk?Mb}!0U+iAr|jPweeu}CkB)T zR#`*xQ0R(pC9UpJKW_YED$@T#LXri{t$*ZM>bQW z6b$vu6IMq?^hQqxKf=@xa8SQ&y;vWyVD8C0-=pf8t*Y(ZoiBJY<7ir z?l`%c*Gm0!TP=?(kHbg}nNHG4>_YV8Sw=o-V_Iv&Oc{s~DLYvtslwTpTFW=o&=%#3 z5(W$o-}^hFXDrPJX!|18;pIZ0(6zshn)j7voh>^UIGtmmm zHoaI}H4b(p0wrxZ=MXxkbSlhNH+PHLT+qKvq;v7ErM$zC?RQNmPmd!?zp4Dc>WmVP zI%;2Z9!q_fbeKPnPJf;X!L2HWSV+k8xcM#r-Gf{eR32REvrD%>cZ#uyrnOJr(-7Te zk+jCHLX)WTjK3#`1%@zZZ&7WpH;wj!uvos%~qO>u;XLsd-gv*B71X)Fxz4aw?avz3B3^N<{Eg{Q619JbOrW zCM-I9Q-H4OTz#=93ewj)P-?1gZ;FnoTF3ygK0i~W1DJw&qUN+xWy=gWlSv$ec7jE7 z>;mYWt67|qyb!s8LxTddvbv(8vI0T#>bi!<1o|h2*>UMkt~hb{>WJ{Rtb%Bi!}E?H zyj}zt;}c9FA^hw0>N;>%_u{(IxEl%l{=Tr4tf3IhYJ1=&R92&hUW#JX?xhXbEgO?p zEV5Wx5tT^q#|Lh&J0hg#8)kqTl6OHFXtLiy(g~Y&8sAg%9J|edj))kh%l`MdzBtKZ zmzw?rZhFx~v(dafjJhSezhn>n&5`tJ5Ce_oxTzx!V<+T*0fuWF zffwQtb&k)?f6&~YnWzcSPP)6!i) zHa*F4&{C#me!j+JSdjZDCs5G`T36-s+)VEk!sGTBc&e(B@N!inmg?#3Gh^W&pA*`_ zunmUnap`J^XH}bK;NKK(?sq&Ww@EYJKBz-(!@{K8cn#fYdp76}_44AVGABn1 zfKr9T0+Br0ithGc`TIf>-{PBnPgV{12lf4oLRP*#VEHR{|Dv=0j$? zgYj(!=Zt&ZNWU7CtcWIap;d2~8s#{t09JfHBZoj%Qt}xiGdMIBbU37Ksnty77e>!ekh5W-04K|l7iTWkf;%;G4zPXCYEcFu#hTar~ ziy5-WesSMcMM(Q;*|MTesd#cY}J!>PXca_`xv zv>X5qN=38k4IMFf#!^*4)Odr$bx$>AkhMdkUlx0^OgK|Cbb1(@nYb1_)yf_L6y$kP z_&Hd4c=!ukxu2z7X?#NdUTg0*aL`iyqJm0WV@v3D61(00)_yJnCX3*^2wKANW0dm! z$~}wz?79G&n=$gXmID!X>65ckTpU=utX)#5|I8y?;hokZ>DPVeFy)>8n+b5_)w#>) zz5T^GUPEs>#y-Jo{tgcR#u*PieawaR0bnCllP#30(=t*+|67M5Ppbu;MW3(EK7W5_39HZ;O zRR`m8(8q%qGKpa6YW#M@qssZ7WT~lAN2WM*{rJRS;bhSU`N5g}bOlW}2}=NTPmT#d z(3uflq==>d$}jxa&^#q~aU#w_Xh6kgLfEaUg4)2fb37`tXAdNOPwEAD9=RA55h44s zS9&1RCOcuO$w+;2EzMpLCkko#-U&YfC|h0BVJ4Dwqj~d5Jj#yfE^|?tTi3LTTL1eg z>GD5uV`(k`o2w2af=WXA&e5fBp$~&2@=`uv+k&nDLt>(q2Z^_{9mu))zG7~ z2HSPl+pPdKQPs&$e&x+@M@B!F(B$gUVKs;4q@qrQZrjK0`>e&vN z>I_dhntM-D#N#<-^h$Q@kUrrq_@vwdsmicz>;0RHK-DG|HvE3PNvImfMOALf(gE1H zu8yMYm%+%&sG)T^SxXiYtuA8+1HweoXsB}^I?)F>RCQ`2I++viqf$2D?;e-feMW5M zQKOk@4Ni5fk1HDCBR;$#1_1(VLu;!S`v^gqgv?o}*KeQos9xMb5?m0avbr|Gz!eQ0 zReag{amwzjuAia31l8Adcpr7iE5*bVEa>AF+30BTKtf@5L4sSr{x{&NsZB z_;#qAt<=U;jl(bbz*^+_DW+u%j5>-%2OQH1rJ|wt|H3MW;mQC^IMv^+nq+SGOGs$E zsju{w$p0zc9u?`@wuDVEzkjwI(IGhi=iwwo)OSp()ZVc!9ZydWKOcLZP7hWPbG!=f zD=QBte^=qb)xd!9w2(VZBa<--AJVfr$o8MhThc0!(fJ=Mzs1IfVf(_mG$3QsLifE^ z**>C1wT`N|Lm+WDS0Z$qsCW(+sabb53t!SE5r$IYwmKW-H1Ye&a1Gj|Ea13r7ZAyD z?_BD&)_%*g8NO?b5M?#R+-bFwXcPy>(}eH5`TkM; z>HX0H{Tlw!`ayZ~CHU@m^DXv8`;mjgMdto&Nxb~~V~fiDzZG&Q(&Tr-kJ#-G(l^03 z(vRFL;9HmL`>r7e(ee?g77Vx3@irGj76?{b?KJtLBSexy?KY)XtzyN5t(ypVKe47(2uqf&qK0b6}1O@#D))a?qF1 zaX~RbB4p%Fm)gVJX~O+ifSBgw)h#lk>sGrXZSRCzH|y`y;6KrIH29Lgd>#B-%#SS! z3WYqYcoBeo$*xoPbqH?r#C`=a-VG*iMg93U+(IK>8ZW&1+(UR_zXALzpd36IYtvbi5*&SDz%FxUoxxhn>^|Q z<~ia_)afl$b`u)-2o*qEEILx2b)J8=tTwmws&v6JL+r{MNM}M6mfT8afiq;dS0k0c ziK$K16l`z?Pii@d{|D*_JKD&->}vj7@!(mwxK19XKNhDWfmPI^Z(Ykn{2vZkZIHkX z>1@%#FrwV=RGYYWUJ?T)h<=X0KEYsC027O1(cLArKucbgo+#8RtzB0s7{&-I%!l_> zv3Hi?9Sa}POr+}TBGG*zr9&rxObZ|J)0+l-yR9L|B;(gYqZ|<06whhT(83xlwh1B; zIsH~k|Bek4t)w;HqV2inJ@%wAU|ij9ms53w>;csqcLj0}>_v=CHnznBHS#?q~a**0!x&OR`%2R|&>Kvq`Jzh{|#puvXlbryTZgo^S6!lZxH&{_3fKsyn!?q~%P^3hXfJ!e!& zo0p?plhz$y*^yE&(u@Rn;J_Xu?XeFcFxz*>xDL&&ERCEsYU)kkdnh4leZ?0zZo{2g zi|o}(Va(6q;)mm))5B6P?LX`MiT>9$0E1Iq2?s{_yl!R3nkQ6Z;)5Dh$bQDvfw^e% zov#*`5kdOFsje{D`i&yC7ePZ~1Y{wGO&_tFgpQ|d$fyt z9*bB3S)G4Jey0)lSho31_H_^%iDDHqo+n(IV2*I63qA`=girGtB<@o*IQD0-XtC-M zOlVd&!EzkDDIey=FiGPAX4;@-pKZllznGqmt}Pfqu!ErBm649M_-vaQ0vlz~FzB%e zD`JS>z;z|N8c||b*R#ug?(fELj$K>icNR{xJV}G6#mfpU4ZW|gUj-C{R|he?n?>0| z*aIEi!7xyS_6Y_V3~mdyKzycMw?@9xvz$Ich-WT0&pr$vdv2*Rm0=_#MuvxyXl$Tb z-1J{r(=`v-_k%J#KdU~o{nMkOlA|->xn)Go1Nur?7xoSYfTenaD0u^--<`*NSY^JW zLVSA9GITza0O|v0?J~qd|Zs*Z$opDGaAAgIKO!mWI{(c(IJp z+dP<2G9;b)?cuLU`TBG8qVnT;>x=Mx)Athrepdp~2#Z76rYlrV@Y#dG66EX*tk~Z} zr}KyI*|nOciR4%#>?iY5f8my(fm4`pjTYY@v4%<)@wT9J{(o+EM`KfKV;iUc`PqZi+_{x)KX@C~e+yVmqKL3H1dRsO zyVveThFdVXicpj4rWugqtVyJr3rV!hgpx@N>DR^xwF>KuOpkfKwqJU7KHfTgGaoWf zys~E;uTMB%yth`+Obw042PlW3fPiA!(&}h|_-A(;u(?n>6BdO?di@XDv3L=ITH(Li zezhDi(kq2MCZ6G|**j?;QltWSeav;rmZ31etKuodBDT&TX8r#Jd2>Lf;kIehWd zz(Ao%_ep05lj1GWl+Cc!Aa}Wb!d|+s$A~)k5~xFXLK!xwPX}eNxId(z23xIyAmhO( ze(z?vH)2^M_@HXga(u0wiEx%FOrfXa9C(ifHD;y#LA3lzN(quhzt)~}Gs}b#-Q21V z-rE#*O``up**kw}8nsJfPusR_+qP}n*0eco+qP{@+cu_c+ufOSvQ|#sBww=f!~PFy z-}hBl?W!6d)V(eF!#uGTwQu~44M#>MuZ62oZuMY633!vt{_1CvyNZ*@E3d1&8E4te z3iMMOKE;79#Xyzq>E$M8U?A9xEgA*{Dn|eOB9W?83RRc+8?qsSl;HO^vuFlQF&EG5 zuCHH=A_^$%>S^Lc5Ua#=_3Zp9a1myOp;qx&%l2?^qf6Bl4LNL+_2!iS+xTP z2WL|mthmJt5K#9!zI*7)%cks^ zkCC0K1pUi=!Ufk1>7|eHO&W$v*3TJgvS^p+6*>6LqRfwz#k#l)7<#R?UW(UOVIA1d zheC6KFGL5ao)mp}eG(MUTmVDBkrQWIr<skI#h;!m1iJ>cUOq1 zxpBWn^|v*hJbI4%Yj7Zh0#!tJd0`>46#{~d^tTJF--~39D-h{h&SCv+j=${Dcajld zzT$7hOeO_ipQU!LTa706=FMvX6$Mv0J>5(fBcWGUZ!`MnZDJK*QE0dK zyL-_uZxAjnD#+B`{unF7>R#sYFaW7M=%{A#z)n%h9}zpz29ep1^Q zjiPohtEQ7?u`wEcbKd?ucYY^=fS|$YiO^3g6FBX_3<P9bsAJxRjAutTdl~$R_41F*C$1xA z$z;FSGT`{AnfBl9P?MCR?g=cB`5exs&qA2+{9ya-BsHqB1)e7~U-f?I(9gY9PxIgj z;OA{>>*N)Wj8}4tU1OCzHRjw=+-Z}MZ;^3(x_87u*zV5p5yhhGy+%o4*g|!F#R1Rw zoQY@mfIh?uqJGr(_y4(*Y2iqdFhD|U{x(gjH?<#RDowv-^kOx2I-!!-%6VB|!4NUu z%6m&y(>2KJG^S_#gO6HEp44@UlgY-gx7hRE#rGkdFwx_*xWS0tLd~}4>7^l)#m48O zpmZiV8de*(x%0N9bC2DD;&p~}CTtlUV>mc7aUWVC6ZG|rFmKQ)X;g$m)~_hdJFVl` zxlK5@napuU%)9s|Cl~YgDv#Jm7oEf58$6@)`|E?M)|V|FviDWnp3O1G(c53(Oo_x` zRqL`2!~y&=*U`q`b9SH6$6WPsZNs`B)XCf43u_ynE6lFsx9aIlCmKzN0~3`kthud4 z7&bTv)MW`rV>3%S4N#!#!p&C;^KhOX=?8@<;$If|1a_=Cawvr$DH63@Rx_SA5(&g< z!IY!->ydvQpro4UT;!H&UjM?J%l1m!X8}7_cQeAxOJm_hGmN=qec`kh4v5FsXJ_YE zwGtaNg{aYeq5nF%(*Nr7RC$ygubfeUtmsN&5^lzk4VW@zw8MyJI5{29kbkHwy}d;` zajaJKq=10b$spdKo8`7GjLe&7Y91P*Z<+|n?A>pDx)+fo1AF7-d0r2s6|ze$DEJQE zYzdoDM2{_P%??+pJJ-AAfSu8JuE5arhoLjT1qzzf{H0^{P+y{kD*Srt;p6Ms+UD!& zL2_wy<`pQ6rABG>7LSNfm6q4tI+uKosP?wkp*IRGJOho>Tj_R&(VH+Ubn@VMK<0`Q za$qIQsqkn!3UgQOsg5)=7>6?-#!5)Tq#wnDj{4k+X1b`~QrMrOw-x3AlOJp8`?(}6 zMQv{!>UuP*1h?ETEiRjDgleZr3C%LKG<9vhGw^pBASY${LFHY;m}&Rw6wVE`UUzNd zJo?q_`>yEkTdl@xMSLrcCaSd-iTIu1b9{+z5^jG!t6iZyS=>_`W^W7I`s(o}#mZh8 zb{48-PU<_jQ8#}^4=x++vOUs6YV8DMEKU_!4)vp>5XZgl{d#bV)krz|yS3e~>=m{& zenRTcIt}HC*M8c(l02S!JBf_G(mbW$F5}vRz56a_*(d??IZzl&DaB*Kb7{%w%LUo1 zvy@TaYA^bbj?D!u54X9gc_jQ4=Fb9*pL;W3@1xP*d-SJdnKdU=c#nUNgZ5~8bKrII z@QB~07fH-@+fw+OKmXczzg7M2yj{xj^ff1cmj)`{Ko+)}_Py3Mn?C-SBd4 z7D#OLxCBOHmh)FP$!C9(JrTK^E$l-y4L*miRACG!=#!rne&}=_XtIIey3(oc!85E0g!OW?j=^VUlI709uy<$srlg5fa|&ej ztH$N<)l6zaxTPX_vi&+a?D5#APE}(YWQxd4No!x{KveB|bs$k++Rj;t-nuetJm(}c zgp7}SjRm-5G}5fo%`yVLnN9SpuS6;dlda`R_u-1V;5?Ve=3Q`P>1r9@%&Me1vkNuy zNFa1%<(J9B(#Y=gR!_06*f0TD?}rX-h01By%kPt{Dg}cg3W4S}96_jG?Oyl+nJw4J z0&D&oFC5U=%5UrPaS3t~uP%jTNS_M}3#PFxN%Cr=IM=Viz>ozd<>4@$@)$IX00L6ph@y8K`Z;&HghzourRJ>gkJ|HvcnL)Y2%t!OM;$oS^*|fk;#R7cc`0EDFw^BWB zVrocd4J+wE7d8h0;o}c@6%Gk}ceifO780WV-^~T$R9k1;JiRKT!Y|cteIL2~k!bsYS=&K&=tiK7pND~u`yUJK`##+zz_#4{k1NNI8xid5K6dCd)CxErF(Cb*I(l*zx$yhH z>1oRu2cp!!ptbP-2wUrM`~OK#T^$^3U9BAdi=L{fd-5jR;P{PlyDKM{QUy0SC^1h{ zuD2B`;)$l>c9}>m+EN=OA0>+{`+gl`10pXHA*ocHY z66m^zFpM6I5CP{9r#%lDyIqNOPhb#$@Gu|%JrDp>m(dR_z>*K}dJG3BB?ZJoP2Lu2 z2EFlbXr_0K$i1_Q&)l_CP2Llr0A5MMK*%CMsr&*c=ECpe36G4QAR#mxItnaQqs`J-z9niK_boWfiXy9ljz*)bdAmkfZfnIP%IU%jrIW#$ zmxsA@Y79QRV(%25U53yye5!qi&k1}^E&uurpR;N-PSmhf-cy%nhT35XPC}6PcuKP> zQ%np`+2A5K_SiWZS2UqD2 zN~18+^j;OdjEYkFs7MVH+p}ol$Lt~|ySJ&f$IfSWKk0kpRd+2##`=nw0ghbqe2F}V zZM5FZzZ~xy8&HagB3e6q=pe`NEmN9wqF*&6G*a`qwdjGpYj5YM5i&M0*W_(-*>xN1 zk1@Fsf4^^ux-L=W*IXr44Kno}GpP55^WRq3gXuk*6_Z)B%X|Yl$_1f&ohs{-osL7*kHfp zu>4qavAp8PJMrjiNLKlRnS$lE7-! zT4B{;Qoa-&B2&wVcd1>&`jC>lIDD=MSHg`A)pWWt|Vok<(c;V z8Pzau9oj#hp2$2rl-<^|o^ zh|Z4K{9^8-UyS()Ds&yzAWr8mscbvT1{K0S@pFjl&BY)3EoFC{OX$Q-TvWbBP+g;8 zZR5KZHG3dfEpM>mLKHFWrNbCYxhGwrBxmWRqK;%jX^KUFYx21!{o*QT=Vq!_qg#P@ zxCLw8R#aA2(?=59WJ2+)l}J?a zd&XM}r*X<<>@>x28KlYgPp=pvu41^{qXjaatc-c{b6+SxMgd2D&v-Pf4qN@rlj zNHf@X>Y7tHcKaaHK2CWXF&9}N za5Rhx4J$}QWeQyx;O|e!e}Cr`_SrRI#I)Y_{qr|Fb$B*5-rwJ))s~6Vx)gGn?z;aDLEFzbm`;80tE|q=EzF%p z802MmS8h(-@eOZtkFA2RY!7W=HaTQJz1Gv3Xs2DR(>LsLU(6Y~26|vvQK0g4%zg@Wgei{e)g% zgD?fm7wY{4(v}S zbHwso%Lk~ex5R97c^Zn9#I?`xLCoAlJ%}_^OFm_;n}NDFzbD{X{(zF=#%aO-=n4(; z7I?=kojV@x6Fq=9er_B@Z3y2i`IDE=oiOvzw91RCvo)^4Y_hbtYBv#7xdbye9fYJDwQbRS=Wu$+s5oZ~o3&OptI>M+TpLdDI9aVgA{5Uvk+(7G|!O3HMj_UE15J z>*bbuq60pd(kzNn*`vw3f1n#2%O)qc37AN6I9t`VeBSTCmQ89IlVJ2X84X$bRh6JA zuO>I$yX#^#5hB`k0Wz;v7yPKJidw8Wjfl(t*7lkBI7{tU`tv!6BXzj0Mf2X>tXFfoa|*|V`8&i ziPaJ>e&}pt^W>#G;Jv%O;_fa*CB?R^%-zI6PT+gXOo}`u=I5ZX;Ih~55&uhdBdZ{I zvB8Dsr4$4e`%QVrX2TZj$u>*zTlaPjT`x;sUOLp?*2ewmo_|@$ShGt&Lk?C97Qse% zaIor^4#;uuwpA|JIPIWSYfXK-;S*`=k7XSOzvei<-lgca}zV_VB{3Lgfkd3@^E5C3tNG zM!*~YzdTm-g49?EsnNiOzB`EZYx-_BY3KzU(!lDX^AM$_$-KsF9(Sy=YC^LBWcgjX z29`}@vuLo3)|d4gomyEhoIMU6&1hLL1^VafM9tx^L>H9Q7zN|G#F`bKayIFX9Ybb3{Qw&Kk1I}tmeW+k@2v30%;uJR=3p4uo#!k!NU>PW={WgRzU}A9KH6ZTF5eBVbw=r)qrlRY`t5x)3(`( zY)4POae%suR;qspL;xmGT_Z%Fzk1pi8IJ%iN0dC8W=rcQFqdia>(5_VR7fSYt6uuU zT*yqp{^RT-v0*HS0snuM9}tiWhNe(5&;WqOzwofRDQWg@ z21c%~&Q`{5u4V=L(UXialROD5)$rtX}4w+i&$`0Q|<_|AU((^6i1k#VnT#6XWg zfdGgNEq}N{0C6C%c0~O!y#}XZu))*cJGNU907BA+ms@}qSEC`t((HXS86cTl;*y&W z_y>ufeZ~SnC<_M|Lj|lI2VEfm+GBtNJQ)Ct)1ZKieAiiY+*8qEbel8e_vtS3U$`5^ zR9$h$U|?ebZP}8|DAI@&0La5BUztyb`K*mH_D*w7TtE{-CMqf)Wj!xT zU_*?}m6GGCV>k#dD2{^fPl`~*W0)YMUwmfUMKHrq6d%i^;kUNKoz4~-N}z;|07y4!bFIX7uw2j-*NfGPrmBrK*lT)*mYbAyKG zBhL8R=$$n!9_oWr7QvvPR5l+AWPwE*ubY7gKZ+$e?kwqjsNXs@1)=F=^sx7BI-}X3 ztzr~9wE+ECjXSHQh^G7++m`#DD&2gmjAVlVkC>c|LZws*;T-m5WkyFFgr&C?d^Ixh zMNJC)z{iImQH`VY_2#|0EAjFwrYrB8Epz5^LM!!9lSokdGFE9u-8pLc%}F>W_J~!fD;0{@!7`t9$fp?b$1+DC?$I znm*{2A;y8E&W_T_vaI(l^?vA_WP!K3vfa9T^f>i;m`CGg8xaknQTOWAl>U+z`||6) zWd^*U3mT+rFFtzi(`Y7fEa{RBg{H{Sm3{`laN(DfYW^A?-s7ptp{xv^B~!C%%fxdx= zoAV{Hf?wgA(O$Jq$!ug}EYNe00`#c9=Jf4XDd9Mh7Ub z(yxe*ZjB?^Y0R_zS1_6!H_xD+NyaIQo>2OA*mX^dcfg$-pI2K~ueKmgc?Z5~u0{6< zz={pVJ52Y_i_vRqq!pOXYBg38&dQhDcYOr-D&;vj{UTevhpd;p2N6Tgm<|^z;#>zB zzK;t&=Nu;(kvA;NVbT6-d%2+f$=(nUF%Ubec6!PEHYcgOS#ag_pB8kPgo+Jr#%|4b z$IV!Y*$vws++d3irF0?UtxD!-Xf|4H$K<4!M&b(#y}iAhB1x<)Ve^A!E6Et8U+(KF z+su)|6gkU$w<=`u(UO+?u7AsQZE)R*#SzTZ8mEab$+Kahw|O|0~smw}yCZ$sa0JK+tD1B#Qz#kWc1TVO5%4Sy$%uDg}O&}}IclJ>dERNy)>YYkMQp3BItvhS1auYL)47_I;1PhLG__ljH zCKbIN}Z#H`T&T^37gZf2~=Q{xjos!9H&@0$(M;)#L0aNihjhFy~<8za| zGOc2wdP{dTaq{5;S0eMMenjv-(3mKUk|L3#RWm-n4-8-+%7ZRwkNMczmHR4T!xO9n(+H2%1EP$@!z=Z0b9*{X0@xPo0&VhBWHj zsq29?z=I*2LFUTww~Z(kO6`GXa~u(C2`j6>ckC&W3*R43PRUdC5@pn5;$XI&`?23d zB@WbPHDfR8Y2|Ok{g9IT#d8OY1 z_9i`9DDAXheIh8LgrS$75fUSHVjYu))E%*&YU@u@w4Dyk+^9CJinG5R=L}v+)Wu7LtZK=eOf)`F$Ao!dDt&`VCtTp#_}E#y z=k|bAb!mBf=k!GgA=jQXqD>ZeLPArIO*C9UO1fH4PRBwyO$LT>&xeki0Nt4}ThJ}U zT0fFF1ZvL+GBaNPHf#17jNs{G*PR|6znH8{qmJ)18TFTR8qScj0m1(3&6wEuu#XPy zwZU_&p_bIKz#KGo`|qXf00F)7fe@T|07Or=>mnpyRY6y5(2f+R;viuuw&q=jenY8& zTmEOxn}kY(2uu0ip*&vG`J_q{T>R{Jy`dgwTJ51SjrF3NU3^0@+TTUDbx-!d;=@BN zitP*8v}p5LINNZokh`%T@e|n+xTZ|xQg}o@I>MTxvic%Rk(_)tJJnuuKmTr~FNtt{TA zy^z51l>v}%BJ~&K7#~Em=j zVE${qH`ga>4gMGZRrBxs&wNk(f0^%T{y*pY|D)~izjn|$8XB4^o5+8O5F>>k>41tQ z73+~Ri9u1|^(rEhi-aNRQb~d&(?W>FZWW2c3W0+(0VUMHM6OiIbgWcDR`~t#grMP4 z_H!SOc{hW9ZC2jR>)uwY-z>~2xYo2Hqo~6FmDJnYnYn`l1bvX|(UErh7z#gM?jhzc z)a^L{hG~y8Ai&N9gs)LSe&ns>0L3>C(#?dayecoPoCdIfTVH@+Bv=3)zW*mUfI|sz z%K#66Z2|&Z=k3iK0RiS4d3!9d9b5J^>x7YYIZLI~N&ASgcs zMDr2~q<(oeEf!_rqL0td?o?a)6Hvqvbcv%eBLTlX%G%l2Phc~7`Ne=y-vij+j?T#U zo5D{oS-giV%(6)*kt#`r@hRg5eB~VE{4khfptcjQxG6dqedOsSDd^zXSG8v}O^mD` zitL#%LA2g@-)vWL=^fx_SI+S%dDm7~-HBIsl${-4+e5tr(l8dd@o6ck{GNSL;y4;9 z8qMunGY#WlnYeAL9rOfg_yzLWkgk1#o(TIm%lG$;tVkC+n3jXXJI1ABy&uTmHNOS0 zvc|QJR8bc>jeScG^d!fWCTLE;8kaCaYIv17rMjuHZUBtu4nV-c3(?BY#7gV3+;6GFZ*BQW= zFwN}H5}l+>tt@1@pRlq1rnl2udc|kO*)!&VcS_9CkfSs4!MBvAj6;T6fasBri!^mO z^d=>@IC3G4w}GQaQH;Jcd6K=ceZvK%sZ$#7>MA>+)82cQ2uw~!#g8jIYQ6$!Ya7!F>cj=vrZuy(-P=%+| zQF6umu!Qgew+DSSCW;JC`TUWdBFebr;91vfmGG8e(bbo-#Cdf7gVrGkkvCi{c000G zEbMZnQL-F5D(LnH-Gi74A(lqvLU{c+5R3x1xvI3bSQ&|IWif_VTL$D>*PmoI&sZrD3E=E_8gQ$p0ScxtQY@+H44;WB97FMTpmP-d^R-X>LOZzhihaKJP;LS{p#+Gt0f&0TZ*Y$HPGdJ^wi3+7& z#|_{tF@mwQe2dAUgv#1fJav@(S2?6U$%WSS+e3wrVp!1X7pI9ujRs6ID~3{P%B#OQ zO!kwU(?c1L=b~GpT6-lr!0a+1jLIVt5qO$*x$vA+0t5|IB}RAjLH`dpr)3A z);~2h-+Jw?`*AOlVZPIRH6S;b%{B5ebkWLR=D1wX*H@cdTwJlO?oD5Z@jO_`wYN15 zl(K8u5+?+)^76Iv@-Hi+IGeHFqE6hw9W<#EcSqKiS>(p1YtPS_sddjK=m<|)Cs=XQ zqbwh?Gy-d)l~e*35LGgqhjtPmpQz9J$$9mZ1u|UAT*l=RhMHodf*Rg)v-tPx2|o3Y zQbv0slu*0fQoo@7{{H)V2dmzz^MRY)HLjN>JLg;$5^MpswscQ5K?msp zCsre-T#=X0x5SbqOf19>$}y`#{*>+Y0Y3qmM(JjwadIX2cs6GFg7kj=PX@?YgNw^Q z1GOJH;eD*n@DPG5N{8+UwDP6j`hze2K8rg3U-5bd?ihrYnUs^An$O>(0c3 z^p-j6dQivTobGBr**J5E6*VpKj0_pINo<}Ea^Lu#YCilPx&In#8iqPw>k!A`IFcA9 zBj!ijzjhMgADjElpqmq)@MgymDU+->HOBe22mZ>fp*Avh}4@2rKvfWlu>n4MA|u9l>1(c5uJH{ zmk#N5*ojoUOejEPB86Cp#t13}W1XPT|P_^V&<2STC(C5(pWY@n^!9U)xwIH<# z3$q>-iMn0YBO4qOM@O5_Q@!O(7J5F5r{fbyE6i^bTq#21X5Y0wlJv*kt@O0{xyanuuznM^FC}q-JQ;$V75bD0TFmS{1;cQk3XNDLjZW z_wC?ketl@DESfz8&SB)c>zCmr$R_-b=1p`qzT)=kbpDW@Ha(YbLg9ezUT^0O5rFex z*ApYv`3q$x^nt@LEPdbieGb^pAxe{EXJ0~*0j;TRk`-`v2S^tU(>?+cf`}-oul6Y< zQ0+#$&6>eZO9u#qmdEvOGLhe~WEe0^ffB*U`$(b&zWR9pS!^(%sy#D>29|eA#ehG5 z{(zf0V6%x5iW%Z2U(B#+oZP%o4ml?)GB||U)J_Awl%+DxXz`#I(7efq!n!!2HZ`+} z1rdei4SOR9cEnH#rZ6$di>6$>iS9~v`!&T+vEppQjRVpsF7=_ zhDE^%2PA*Yk&FuaJen+DE&Hr3qXmxPy6Q7rv4@5}_T%g+xf9YGL}rUxch5eXh83th z!I3s*!RzBU#3w|U;qg9Xjo@iZQ?YkW=S-mTp`hHrs^kZQ+S=T@l6kYx0&Mq|q1KWH zwY?GWyFc&6{v_C~csZwju{vCWpIk6zq{NZume;4OyCPI`^91X_{+=mn0Qs4IfEG+X zvV1}NaP5TDq~M`=ug%PU*iB%>$yBQ1v4=*VTGIc-F}vqbfUZk5Uy@!n7jNWYU;X_S z<=uC)y=Z*Q@5ih03u(aO+Rqo6tFxzN_Gau|*C0mW5vYVxW_6eK3OX|{Z$|_BdJrqa zqmV-GLl1%aGp#4owL3KF^niVU$p= zAmTYs+6|nLAOXLdXhC2OWN=|M>{XOw0RXE1MhRO9Re0io#M6ng0n!5edwBLo1OP%C zI9&~P!Te?*AaLw%&hXPe{0Z@2jOh4C5C@DFMu2?J*0p zt>fGV8b9w(HtpZtsm9`^@aj7T5ZD-{Po8WF{M<4}VV7Yb zBy{-SRbPerrN@UR$caacpor<`w(veDW@{my%T)=d*^#$lt$@muXvT5Sc( zX4_9Mu+AF06gDa`vFq&off}9QLk5EWp$IZ-@Ix zst@52f%Avq8n1at!uzneFxUc>lr%I92l1Y_dP?^MFku7D!3f!0exE-M{tp#icp!7x z3_EBHm=>Qld+Dg{k^v}|+dZBVq9!o+2vPFs-yR?;Ai>Eq%2zyZ1jMRrFa&onz<88c z#%-i?sVe_u}%k|b!Lmygay~(th1|1P3=9WnKNJxmyJ_LhH#<|CVBL+;(8I=?|&(V=f0MTUN3K{}wZt_ra|BVyM()GKwe;9fF51gdL z|0hoV7ecCwtEa7*i=~;FtAT@~tCfSjfvJ^|t%JpXEnB9&!8Dh2+FoGUT%}hfr9Ik! zL4v|vJz#-@0vJP-gNmD3ok>N7l@sFarL0stL6hmlUQ2mLU2eXvKXP4mUi|WA2M?Mo z%x`|a>w5NIbZo99?dTwp`0@Uk<_MKFR91ih0i(Blpt`WH6r)eI$hSYYTg%aWKmcIq zAp*qs1Tl~w#7U*IP~?Am7S7#|8q!xx+p1C*5WuYo1RzKlC}0uh^(PM~z&i-gABqMb z%mD`|c9ChjR{{ef4VF_<9t~O8WAI@#uQV*{AFAnxLo|bVZ#!VvR)N|LsikBVI{->{ z%j$<|_4&2*YPzzH@k-s&9lxtlb10n$=>E_K5a%;{c=-&ZF{05wS*IVa9d_j#?86UDFXWAbVoOMJjgyO$wwXZ^X%kHm2c4p^?ZJ6^59^ z<3$CLTBJWM0&3|=tuUykRF`F%0Dc5hkAaej__)cX6Ds~Phy)EK^Z*~4%7Svf-Gf`P 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≪{zJr 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 F{{u@AH!c7G literal 0 HcmV?d00001 diff --git a/contrib/tools/fo-editor/lib/jh.jar b/contrib/tools/fo-editor/lib/jh.jar new file mode 100644 index 0000000000000000000000000000000000000000..2d143007aca7cc584a364325cabe3f8a59b120d7 GIT binary patch literal 508507 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 z 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 yGicdV>KyVQUi@ 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 z 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 bLt3vt41thJp{yFTYS8@v$mh%;P*DC45VS4X zX$iwF*%syNqtpfI*E=8L-Yc3;Bt$i=y+QRnHCfCkmZ?>P32$AVz~|{f-VGxc_CCU| zI}W+8v_@|3kob&5RZdE!h)D}>Ey%?r9aWcDWHC&7BC^e9aVHwRe#HyrA}{%p`NV<7_!1XK(H1Vr$k z;DQbgrgkQ#PV~k$hR)8u37qmn0%#%T&YaL493UYfMZjd>?FB`JP=ygcBSZw-)~iMm z@3UG^Bm2Y#5ckE2^46HtQCipKS7)>DvtQ%a*pD5fKw)`dKj6@BI@R+CU}qeb38?67 z@tw{T*L#!BP`P1vxqbVvwi9)tIFbooAisZMTg5T7%kh(h`S3STa`i@m32&&T8&ZO# zADD>VNl0FRJ8_^2+8okF^&Q9qdPEOU`HouWKrQ2qWx1qm#E9{&YMxjTb@+czsqXTt zj&@Of$Kls$-L2843Kfui6_zpy+e_-azpUt!U(+|`TU)MBYPam@Zv*bFEbe)pnpE8e8N%P;bm0g7mx2Fbh;4qtOk4;cAOr*; zAd3GtLnvFD+L*f7+x^2Jv1-~5sH#|Bt+Gv)ooG-Bflknb8cB;Df{D=<15OJ7N|Azz2*Qpy5LjlDkv(lDM&gPhP?h8k?pi5&z+0%Y9nDU&D!J6x_GN=ql?h`icm_pAYK-EjV{;tl&-nL z(ad#;we3eJ4X`=GXqo@w*vD!$ZZ}R@4mnz%#ow9C98|0~D|M)_FzKuefr`Qm$=fo` zs12b-3|FZwsjvERTI>L@-Xs&OOCj-DH`55~(iQaGdLM$bD9be#aPESazG8@ngE>p! zv+yF?)ZF2z<_`0DK_syopbX{O)})1@p~%@i8bqtLT?p^+T4fb;RewU$9cqoRUUn7) zn`rF{BlNXy9-bhC*kSo;utVE!$DMDE*C`fy;$=Z+4YO0RZ^_MOqS0xYlQwV~y2V-p zV!gGxrwor1ne$|EVw3R`Y9_B)8HNyL_qwT?6%PMSrsUW!-U^lqQ;01VB)s&kl}AP! z{RjiQWLBvT3q9_fR`ozF#DpcFhCVC8+s_(X4a}XMRn> zk`g_vCIyU)t|hhWlu&}-X>qq!*7QzcYi7k`xnfpYcNazA!%Q59A{!z_>?e! z61CpS9gY%=mX+|9B0f%1r0tHXAy<4-=dFy=Y>m!CdDx7H?hwxQTsMM?g$JlE_3rW= z#ybF4P;7|0dbJ+oQl-1*0Pjk5e&M3isQ6qd(E5Y=q-|0Iy1^0OmwI>Q4u5y89@3lD zCjhbJf(~Z!j~l1vytrtRoI0QpN0QevRhH!feiS}b>eJtbE5z2fFC*yHTc9w zgA_8THpe{0jXOwr^}?}JF2z;Zt!&yzW7jG>`D;9J*pA%B@?0dz{fRpZRa3Z^>c;jf zi8V2~(^ypPKC~<7_BB;PNK~W|c3%#{i#zi4+N85B`D{1u#XTwiLx{35u$^zb%>4JG z;6X2?E4tJ#h+pq@g zUh;ltDxo|hyr=-D0=;3e{q85isW|H8a>ZWI&PbOkiPs7A0$*_C(+SJ!4bq5;<|^p` zhu1-5rs;91L7Z~P*zg=^T2@*()lS;OH|I-{5P3;3_qN`DGTTh^V=YmNvUi!3*j6@i zBB+2Vpn@{g{wb!Qv|DmvHv}$1zav2Mh$9b>6*$_!wTm>PN6qk#6_hpbv!yM=n!+;T z7|O~k={u{GDFscIH|Vlg%1U#GS0U)oNPc)!-46r$B)#N7#jOGNM*+!;pY;ay$FTB* zbPEeWZP}j_rsI#TMY_w;x*JiL>Z<1k>;8%1!;3b3aT(l2MK@8e5oBMeiQzQ>hM^aL zgDqbCHHG8LUX{_#VQ^@~GxW=;wH~(ZEz7@HhWGUd{a1CK$!sCxX|s-035CNR7>2)8 z(!}TO5An)ebLrj$nZ6n;eWFaM}kS|f@}Leh1%aviCtvc%AJ;*i!2zxTaur z+1Sv@MA_BW*3ilGAHgP7Mb~~=42?J0^)QwRIz%9=xg-p1eFq8G!UDEHdP%^*@OJ`R zRP$kIB(Ec`=e5NZd}QHg_E&%!NK(*dxEe?#rrx`ER_y86)zw0pKj)#d=tFz0Z1uMdIUe*D zgHKow6qLmGvZ)P;d5BWO@@1wE%<&${?e@usD&kLVjey%+w%HU1@I)Qe#ZwJ`H6a98 zsVmGRyoxB5$bf`3*on%&mgf{@=7ulE7w01>+oPy1Cexx-5VZ)2BL5KasZ(VOGc5e_ z7mRQrZ6PyaY1o<%m0;sge6DGxP>0zV@=ZCRcC!u~qGqSgNqF@nDJlg0F+rZo#q{J3 zRo<-|;!>p!L!q_-o*z1=Jm-zP6MnVY^*(FXv}3NRle&QFs=QR?`!K{CVChxn0>t}N zG%Ihu{P{E!s7R6f(=kL1Q3;GuV-uW4mQPq-(mQP1zG4UyfFKCEP7i1e_j}=nSci>C z`Xe$0Z~TTMVNL-p&4Au}k17Q{WVJI z9qRbvr9T`g_qU0_mTe-lQ(A^nBR)TW0r%v2NBZOrp1LjQS6R~mi`gQES27r`YEC(L zAcET3Ca3(`ufwAYGcvY!%=*(LFWgac0O&3J<`}slVx2sL(@eqSg?$6oH@f2gckkOJ z0PCj)2Lh^t1_EOE-|{{OLzlno{-3-%Rc%N4hbr3lPPQyY5}g96fK>FKpQ#}s%SsJO zHrb1H%RpN77TPUSX3)~x1dlKIG~512g>rXW9rNjIJt9eu=10wWd%#L(e(m!ZyZM9k};2SNI< zgXSnYHo^E?0+EUe-p&J-+nG&Sf?9MXTWy(amxBj!uA{w%R;k8vP4^8h+1A41dd3ao z@(KAe6|3$897`^XPQ1%O_kmSq@~wI_T#NM+DWPji=hdjGhpTU~;|^^SeGdxlk!P{0 zxGXQXCP4IDZ-}|u7|!lPjU#{L1uhK}0l#mY@Oi^i_t;e9UBJ>w#XT%EuYk|oy3$k8 z6|O-aLu$8O&@)UP+fMPB5-C+?LM!d&DYNqOSMlXKadhiSQ;Kgtl_sDSmQpn=dx6I| z>abo~19u2O_K`SGYFV&mFWE%~k5l%4pP!`o<2$kcpARKX1*2=v+M=ve7s_XO`dS9jr>CS{X<6PxxFI zH>30*weD&Ih8L>!SYBp6B?t7%7)5X#1nTi3WeCrWCQ~bzQ3VA?1mV$;AZtcb8R~k2 zDMGQ*R{A!BTLnueC09GfWfd4SA2{(q*eGR`{W7rnOPEr@(VFaZkx^Ojw!6q6`GpB2 z|C`w*QSE0Q4z2=g7x_zdQB0{cRWlt~va^cp+C76p8MmTeHDEtFOS3!8Q9FdPEW5n& zcvd=U=*|#5R2&%+ZJKb+^$TJJ7@~@mD_4(aAb2Uk0s_y;q(&%N{ z*vm4yWcDj**VxAF%%u|vegom*L|T3T=T=?ZX67oy^Fa9Be%GHOM{D!u9yt$%FLp~( zaUOT-FR8B7(j(rs)kvB2W-)%ESXzVydfQq7W}WR{GHa{(7YIw!6SeRkmOKJoTg`}z z-6Z#P8imFPJc&8NgviOKgk(z2P`i(F-NZIXAnW`I>;C0t(dCBH7W)D*s7Dh1?N`u_ zq`>}U35@<^^$z}I^I)H;{UnKep|i|5yFyu3Q46HcvyDiX^4sDDgwM$t7)VCvX%-W= z!g+zTGeR&=vqpXMvqe^@Mdcz>X_+MyiWf8)iUo-D3NY>Opo4x1#~{SGB#IT>8fw&V zuF}QS6wIMa%MTA1EBc_IIyLJSp*X zl{aS1=h-WO*m=*ja0RVNfUKn^-o-94d%^unxd9W8FE=z^kd*LC1^y84>W$#vmtFnK zBZ-^8a?=q85D@AA=d$}xmZJe{pskAiC6|5NdU0*M6CAp@IAEZ=SZ$0F_1Xh!hQ@kc%;$EkAy&Qi+=-S&9g3Of zMIYfI1cry4p4`Rlp9f;_?4F7t**%oQbd7Ja*gKVm>6pq5ypU~@{#~@YL`B@D0K%EJ zk;0!IKZovb3Wkp%#gj8X6Ciq11MOChja!%^JaySHW@P1MIRr3a0mzg z-U#7k>R1t*H%%HD5o$#Oq4#zK@vfcGn;234FdQduatP#8f?R&;A-?2yB!EBl6x%Xy zDHf|C4u45${)aHpQY9kJLOHf7<-T6Hp=;~&^9znz z-{A2Gy!5X$b_VSxi{D9P@X~9|thIIu3b8Q1pAQrOW+6s2F$VdW@CM02Wj%FO(l>Ng zde+q}R_{iE2C~kCINYf|+__!aF%d$BlYE#aTb!F1>lV}|Kg0wMhEMBPbd5#ejB236 zy3T5AE|`Lmm!ejeMTyPImzsYWG2P%?3pO>dqa3q#i1|?ba*&bIx^jTSDY(fp(55_*u%iy(6pnV>PoN!?$ZIrC_juATaMeTH~}+pq=4YhHP|pMixNy zNimi^%&64#S=7kPd?*Zog_sMo=<(EU$%@r$#s#)zgtn0=6hpS%XvPr0$+F|_xw?Z4 zCq9A}m{I;K0xjPf>iIb<4LSS(Ci92U1<b8F~FHG;EbKSCGaaSr(>m)a4JS&ic3vS!)>1Ga=XtQI>&CbgA8%^D)R<~B<8#yuCv+qHb;qL=1=){&Mw%D1HWcX8e%(`7-%>GUrzHjN? zo9HbV;Exuxc25ECzuEwwe)$HwJAYRi*Ec!4cf7oJpBC39+GZM#V1;)(Uf{ov4*$J; z&+w^T@NNuVJHA_T#P6XV;P9l+H2EF!nrR+pd?HrPgL?Gv%=;Ae@GM3s_MGA#TJxY0 zugRwcGHHD9Ku`W;F^3C(d*MMqaIO*ljKjC=m_P;F3q2$`2A(2Cr8okCbclH;ikBWy zoGsdv-5_dsT5hH_V>b#xBH1mU!z0RH720|=Ppz22M3mP0IP()5HXO~&RA%Amk1|mf zm1=QnLBq3`jPKWas>a}-h~=w>W(Kq*U2lr?hTe69#sV}|>|_%&|MZ~#kp1OoD)gfX zi3C(wZeuEZXf5`9YK*14Q81ih!;HeG6Ic>DHb%^2`8>O)mFKTtXDjc=M!YvN%F-pqEK`uuV9~Di`GB0tMfC^YqV|B{} z1rCh!U*?0=3|q1Z8BaP(QVA$RY^_VP1tZ1sD# zKaAi7o7P@pTv+3J*}P&bq}Q2`TokAGF_TB8W#Pv|5o0Y5-)#6=o91JTs4Q_YrNNul zG=>SkHNvi*P4DwUhj-0=n?6+C_#@pL^cw%bnb#!;8-1&O<5Pa~nbd3sUkSEzxHz9< zhn(hz$Oez!J9Dnx;)JAodu}g5Cf>gC2Yd>mIaD~T@S)Wtfn$CHHr9hBy%l&OCURul z;0>dmJ{VKO%g_m!LN1sIg5ryaa5+Oz%>9<_e%zRE%!>1E0qLkn5X}xIqWM9r?t8ct zqF8qj3<`-zY>hFm$JeY!&^QqBjVX7MU{&zX=}EH2!0ya$>0ZU7CD5rt7FXd4S+0x& zIcZgiRleSmmxNJ$k|v;SQM5WdD-mxFqe zMEk^ZTVV-pAXGj8A8&^=y5Ne}$p8;}{+426Ddr4A>)=ipI%uE~UE%=**kHpOmktgp zbvR(gC8bUp;))-o-wb19A{@K{KXsi(yLNLcG+;Kl9cJ{DBLUpkTM1{bu71}7AFp(F zFojH3)Z%G~*r~Pz={|OZE9QoZGnK6#J@N!L`erm$Iw4wF@y@o+vBaP@HaG!=@*&RU zasbWs54a_cX;-Pnz5y!Peux)k5$ua?M|SO(jrsM<3$3IdV700nakVBtP^;`)<%C!} zGP^xo-okU>u@@k)FX7o0a9Y@HvqE%m!EszM+Q^;ECDHt_L_2=mI&$0r^Fxr>iq zOZxHpLkN4Mb!?W0X4PUYHN=j0d|t%U=FDo?uw^HB-c4C+z4ieT&tI7JQd2oJ?A>YUO9$&s^4(Jb(`5|EzmaDWXhFX;k#Gv34HT)myvDM-|gu+-y zS+zU41yzi>_X$=h9_b0DQ3E$cX`j*&P&X=XPAa)9hEAtr4EUWrtqI14Ay;O8=wtA1 z*h-`<>Om7$Dl#G&d2+Dci^JEt11k29q$dF$RiV2tEzFjaO@4Y34qB=4LrNLN5~_`# zq?zzils4nD5SWLB98Eah2ofSEyUE>h-Jn)#FiP$yR0Mh9VqTkrm5Gbq2(eFK#Jq_T z@>xI^Blq1cRFTcpaR3@`+G%Aa12Zy1y(C&1nvJPC;a)&+F5j=Ut})GNx%yvlLDj;6 zS|Jyee4&vH6DE%bi*JKNrH(5i^yWnhtV3m5a7Jm6WJbk9eZ8@K6344>! zZ)CV9N@l3xdqRs)sbl(si`-ghCuj2IcI~S2le&4wy7+0O&evVNF?GYYn_|vTFP>!V z#Qp@c8mc;NkkKz=))9TfEwDJKeN`gVJ;@=9BUw^?HIhPu9T{4WdZckLG(wUg9|5X%nskr2J2OS;)}Y(pcEu&dk!>)ydGs{-63psIs;_ ziXhroDJ`u{L5)R)#E9(_wF0m`gO;&U_P+3%bhYIo7D1TlHhlrNiDt|n&0Yy(RQ~|} zNe{Dv5tD{lQt#7g&NJ?G`?IxM0{%n+(0Djnqn&=+6xZzq!_o#rfuT~tQ#w#|4Tzh= zytv9Z9N}LbXWj>}VInPV<3Fz_Y7I16dG))ob6rI40^Q$TlG{p#KEiqKQuun72aWB= z6&g(UTi*h>#|l@{Z<6&c$q2k=^Pc#bYg$F zLxLW-PgGmUK30q>bPlFkAr32qG+FUnuwX$tp>Y&mSBSwhcxCf`g_b z+=&Qy=7f`dkC`5MYxkhk!Omf(eXw(9Ygz2xuIrei;%EEmXW0VS6oJA@lkk>FN|ae0 zGuS(?4={blAq}K+sxb(a+lWN1C6Z?jzDx)DkPvM>#Kw5JJd?o973Q9#7?X%C@E7-j z=oE>EeCh-M9Fxa8fL0xXUw)yrGlJVGr%(?P8hCf{L0(Xa@)c#|LRB!{kK!0s(I+F5 z^J0m9qb&`aSelPh0$$XcYzKWr+1mhJMxoC4mG4v_|#+aP%x}=wfPa|1a@5 zR}cNTwh_}$f zC?|eBOmruCQvsDos}401hN)xI4tX8oL~F7?Fwpwyq`$~qL1n4vpChMy3KjeD;$^Hr zQiVTAAc=JwBz(FrM_rh42=p2DBP}7DGy2JdBac1QO{kff3tUG~j;vqZ;V0Nh@8v|3 zw0P(g(&d*hC9RJlj}4PL+P3F0F(_rNDu!L0M7DVF2x1ejVS=w+xNt6U@?PVzK_qRd z6QfF@iRP2y^RuGd;K@eET8`^Q$8DuZQPA6Y^8JLOWi2OE)NhwlFbGzXdM*HaVlN}j z0~1sgGKwZHfUG$Dp9V&C{iY-h64WaqIpm;al4F*W=VS_oOoD$ zTt5o$ExeKiWUYIBx9m!F-%*N=)!5Kttq(3He6^g?Q^em%m{1~ja3#e~?41{K^CC*Y zqNvQoAOoefA6aL*S3J?iT7os5Ao(?y(ek(~CIB_m_0_I*P4nc60OYa;3T0Bdg6al1 zI5Hcz1gaytLO5K5@pA?I>i~S-s&oN)XM7p4C7k;a!taIN6_N%KDOl@@W;QG1y5?VA z*7p~Zbl6N_x^~gcfmg7FQBWsXD=)I~XK$8cy?-_%h|27hq)Uj8I3tZvpuq52H`Lr@ zNl_t7U|neieXVi#q`XO!p}i)m@S;i=RZ51a9B>yEZ;^cbw9ZMk}}43Zp~H?mRn!QCys*5(>a^U2myH z$1Y1@>I#4rQwg&}Pyc9X7ETnlPO+OSV zvgvT@Ag5lDkICcdYwEd+A8(SK4O48(V0Me`8N=CCTT~y(xSpjj#eBG`YTRMG47YQ=cA0-*7iXscI z1ZLgG-f9ORzZ~or;>ME_E1*^Ym~vjEMF;y#i7w-Cx`~jRa&cZ6dB}(^TGCN{EQwOJ zVQt++4<%}YG_qPr8h=&DSS3e-Zhk7MThVLD(M!(MCEl#|ph(KjOnvNw@Ve=Z%=aWU zqEyTp<}02*m1Z`UZ44fWJVdGZy|6Z8$novCf5;3LE)TnS0UQ(ToCsnh>^);6r443? zBQvmDb;3JOPMiW&JM4!dpVGiMHv17mKd2?pE>kN46ckqj;UM^ z&Gs>hrOpzKj^cKZK(8s39YMHK5mg9L>BfA06X~Mn5~29896%Xb*kp=($gC=iK8&{8 zu8Eo&L9c8_F+{%|`tUWXq23K)sAw0odZuWXMpq}gLcLVkj&!d)v|@Zyr{_9c;5)=Y zZzDQI<)ywsy;S|g{?Zw7V@CPm5FZtPNK&~@$;2KdTiLFrQ)Yz4Ug-gpe;=u*YBOq% z4Hu1RJlocR-0GPn41B$SCI>J>ppIQoA@R+^ikwWWyf*;wE{t#PwM(J<7Unm!RVt%{ zKGm%g$KFHnF_h#g-KW1*%iE}qurZY%))jB%C+T^^*prx_fvGs^ZN7RzH)Gl}<*ZuH zyZ&;?&E!zM|9h|;W&9SBY~2Kz^01vXtVu&rs!7L*k3-irS#Zasy3WvMe!9mhP0e-n zWxPQO_~i-F zrq{A6S-r`$gC}bX98xOu!{O}2nWUHyfUHvvez)3PZ z0Q~de12DH5U=l}jXS*8GGskWC^pfW1^M+GtvWiVgK@;4y^|SI1?WmAGbVMkd}j0R=kGZN{f_ z)IVgX;Dl?t)8!pLq!B5ogP2DBc91p$BhXhp^qwml_KM!P{dkjxuF=;-A^2sezvSPv zbgxHRh28Ka;NKQ^c@_HkC;YPol>Q5RGN^1HzEge>6E0U|0h+$Ufu=5%6q0ZJQWxz+ zm~tc>`CyXS_{Yn|-&jaR+7)vZNB-tV$))Oi2mN-YfWs5rpQlX82i>OwJtK6|LyE-} ztOTx^H?@E8oP2kneEbcB{s(TgzR>(Po3>AOfnm%i*eH|X!;U0Q=&QgE6B_uIxnkM~ z{mLGXpf4r3nd`Jz@a7;Kq0|ucA4~ogr~6FV1rh(iWxd_-)YySL$Lia2$F9qm|;%VO4 zNv_cqJbmN(PAy^|eLi?9H@xYG)+&C(T8y#J54rn#AZy>FfF5RdiV5ym52c9>Wr*aQ z({u3zQtj@*m2Ul3D|nGCmf6`I>S`7hcfe2;E^xLey>gLn>1Qe5*!@DM<%aS9z^29A ze;@-Hqwh{)y`dh(x#R7;{Q%q`Qhp*{)T_@25E!!hw;heK1-oY)dd>#{N}nwl27o)2 zaXtwVGKEGYiE{B%(kd;e_=B}D;|6^XnW}&0xHgsZPXhVD!RtUpYU*VDkg{jwVfdMY zZ;Qlp1v`QvB{(G^h&zhRn}Tq7O@1r9T}PYg?#*Yf7|5(BxvP4tE4$0e27CONCV$&c zaDmZ2)YxBa8OTN@dSc2(gyS4);ldmMRiM(WoPe+#E!XUnFpcwb2BmO@xgReL7$FNn z1I3!+4|~G1SmUn9>ROU(o$R;I>chnR9)r00ZV8fZr$S81zGZbz1D3~0;d%jRB}AYm z^|uBjx`#S2YHj011DAUIN*p#S6Rd>kux>fh?J8$AtD6Qc^}Sus z=v3MDo3ie+RBlxvzhtdluRr1qTZb9mn9-X>+|e%koFhbX>chH;9X=zwI`;LDI}RPo zgCj=G2G;y#2M0_(N0^agAAI9v&@uLC2rk>!PUBC#THgXrkKve&m`x`|&4v+SO62%; zou28&QRb#2XiqSfd;1k@S_J}JuDDpA?7oW8 z2VQ0dwr8yI*!`ojA9K^&JdFj2mLRsmGOYXM}MMCKA}ep1ZPeKe6qYrs;@Sh=+%t@<9O zMq0Yjt%9WveA3&w#8<}$zld%Ey@&cID878{BhFrknAHPCd{*nvcN^42>u&3?H2y%8 zwIgt=&!W?dLs&I=*vn6o;h7)M6C~WIr%u1wp5GDveCTQ;m=MeEN53US_H3o}$QiK& zu$v4Bga7mwa{iN27QSW!v#bfTd=aZf&8RE@JSE!+!VBL1nFaG12J^Y97>MdIJ?xiY zmm)mWi3`3>A*2Qd7$?~f^R&teZtEGN10`0uyve{sd{-2r66!b<4^@is5*@KBfvb_? z6p|vVRjRaQndFi_aP`np*WlwV&)+#tjzI|(PoVz8bG9n#H;DF|2id3lm5$IUo2apD zm1XQmK0ZBJu%_$?!1n9`f6>!&<9W#5L?U2W{6<6dWfiq2a-U7*2g{Yp7DX^@R-&tJ zm_4woR515nEq-i8lNbJdn#r0KF|h1S4I|{FQ>#%TZxma(hWoczT0$E5GW9~J{q6Xi z$ca=`Z(56VKpEW3xooWa@$dN*Nq6OoO7rG&1 z_)aO)S3^rn8iPi}0<>ogGr(_gdIVOMUmdIzylnPjKC_VW?ao zDduJH@Vf#q?Qc=p$!Arb%MkSGk#|4?K4kz|->zhJ-zxvPM71936agG>@C<^3zChxG z=#QMepvUZiyv&GM!&%Ax8=YYas{IWRkT3W%7{TL5IC26ZT&mF5+asbP zI1Df~1d+@3!6C~XXGNf({b-6@$cjd4l_frT-$D`f+C@>HlgYm*kG$o6utAK{ahLhl z%{_LXUA^Wr>>>42=8a1-;mQ2`U{DppMcj2++hGM%T*Pz&n^DpcT8tNv8_p@19`u}@45nM6g5 zx~jj{EY$)%7M<$ab1YY)r)X+E$|Og9^}s4ob~h3-<2U64*X>xE(-I=lg400Y5PY=9r%)9*hkG{6dn zRAHuSc_?dwRm{3Y74^8G_)3?C_ff;{voXJO=G9V({j``Vlj|B`xhYMt>50#UoO1Pg zA(5Ad{eCgn4C+$Xj}H8ufYmJ4j&IOTXe0QZ==S6nnWtA6+AF~08{xp!gh-XkDPTgd z5N~2TV0wefscvyCoT3t^Sf|(M;+=VXftq?$$e>I0mwEO|aToEX>qKM}**=z|21{wFSKC z2Kwx`qe3t~&js?1Imif{J?sG*yUi4fTT3DcMf@3&5KlstRGlXyZa@H|kE~IeHy|9+ z`*AJ|Vx6l!2OSwUA}~128o7K=iM0q~c*^ka{?OmfM9livA2j|7z-<4~AMEX%?QKl| zJ5N;E)7iz;R@BK!*~Q7!(Dt7x6v?)KeFSan+x=3lTy-A!7ZwMyD`NrFo0M@1crtl( zM$8p_U8iGPs>`+0*6+JO0MmkqOm!lr9}s`a{dTRjSTNJei09<@=PYmAb={shf8q#) z8>`I03qZ|5e2DtSsy+OJxl*F3w6O9JSokaQdUHTI%*M24;^%U=@hqcqo9>s>y1k>L zMGJ1FPL;Rql%>{Snx~FRP~LTN=lv|AhrfP=7-9R0`Mm7fN#UtR@0?`4?yJaJJ%n1< z82s4fO&%8O+%s=DKLK33_w8aK}KEtb6v#sFx5UFu${r+pwIoRg_6Z zous9SoGc&MI|mtw>*7=e1$L?PM= zZ|+cz1ZA#)-a4k42dO_ zp8}inoy{j;Li13h(#WDPlO+^mJEXO^TMv)~{ICduhyCEB#l!=^q;ISdniP)8RZs^* zvsYE_c^jHr;(dGm0U@qe_f7|#o30a_3Jx?&mzY7dufz*+pRW?OXVwgdKfE26V?gX)umMA^ zo(k^MjK?PHRvv=t?7mCC9Cz+Jxx>A7oQ3BO;(hYFAbB(<2yd8<>Be9yBzupB4dV}| z`s0RsJNszjCO6?a{^&wH-_t~YB+80_U&6s)!wGAU)-4eg31$xIa@n&cu9RXzV)z?H zW1lipY;XYdGjK`^sMqIz8Y>Ur!HYKREi#6CHlz$URvTm+KKh#%J01&Y3GM;S|w6770rk0GLHoH~k*;%&Rt_*cp_k+U7;4v+Y40Z4VTibn9e;L* zWR!7p9xRv)vB`R?2Q>>J9)+2Dq>}+kX6Yp(V@Txe!QY?O6o&O%%0aSz>iRg> z{OJo`I}B06^5YjMA&Xku2esk!KOBDTXPg=lrl}Oa>9F>4yS@;{Vn2vc8UR`bp`fL& z!lGCNJX6ug0#5{9wmOXyqn#2vy;fPGIw{N^^8|$?EoQP>Y3#VeC~)bsbsZWH!v=8N z*CaWobI{<7B0&GJFw1~Yazq1z%o$60NSUia7A* zU*prYwvp9m$%>7n_3E5^MTQxMWs-kS`uSCMk;Oj7>=ReU;xgCIOW_llY?!>q_UQ;YgZ{&==*4w!5firDFlc&%CfksGA_@hAu5GWLt2xPP;q`j z=5j87=!vrHr1N45M0Kff&|?*-KE8&1e27^wl08R&!S=ysmQWr|%QOjbnv5?1)5+Vn zXlyyOeCCBdEnQa55@a!32;;;ps53x+OtDHtpXxODAg-n< zwj@bBpK}$7f50s0?)gHFv(3dIh*S;ZKa!H)rP^c*}*lOL;H3)1Jbgz7bs? z@sjsmF%n*%P`lo7nh_WZ9J9iZEP&<%*8DKPxkpwwy6&7gSLYG z-FIc?-jpezF^D`Ht0cijDkxY9OrlOafSUqFna;71OA4C3)6NZS)DqrO##`N@ww!0B zSd5{9vaDvSYEvU#v-)9iZQ5eh(xO(g_|4w50XMO@`RBUZbL`vqwyTf*wa5SR`tGOH z3{)YuI>cQK2;g8#&aOM8>bDhPAZY>1Ay_wEDtYW1Y^rLQ^glT6i)cvbl)5%Eh~D z?h$u4HUZbz(O_!p-2?eag=R*s-dd|mqAW#J?_{Yww2CgxKF%Relo4oR#xsGsk?yN+Xe;&3mCyHV7~uI4sR#Ybs;6 z8+Q_BUMbQBJ1HrI8Dk|=)@Ajon_aRxoTvrgvRWlQa(t-QIcs3z6*Vzbnbol^o;Hao zs>QF`xng1?M?J0>c730xZF|GWhF+>9p*canMC+bPW(pc(%Y-f}sVf_jXt~656gH6; zdw%2MHJ#*OxoGK}X%;%M*i}0>>*gQ&d2VWH&yWcSnIJnUI*|49Z=BNtX!RADhe+#h zkJ6;zC!^*5WU-Dn_)}ZHV4dkg)v3K%uhu@pRlxH~^|ebhoKcIcEj3Bw^m|Z)*D8}6 z$_9^X+WPr5sxSm|(UC240%rl59qrYr>;!8%CQFUK;3U?`gEH&t;<_p3#4dVK3@)~z zq6oe&!TyQ7Xy=JFnRJPSM*`OZ{~}6W>Km+5jI#NLvAsotXZxg+Pg-74%S}nFlVLV) zb3B{|wQ-ug)$Cak8)nfLFU}L)?5y6lbFJD^%FQ+L=p9dNu+cT!UPArg4Kd*CUZrD9 zCMmN2(1PcvexTJvpV|tro|WrI8(xJ`$~wFtta+v~cX3u%+0pSgiPV9-_5EHQzHVO? zo{P)kXAy~tFj@-rXP=O~FlHxfhDB4+1n7hc6Zu z-~)4J{l-0OF66`=Jvf|*&{kd7w6wqR-Jgx~Ma4XPA4Xtr`G&c>dWSH(;(*agoug&1 zwIfDN>q05LelmGbd{kk`YZ`(oNi)3<<&IKh{)D-EJl2KtMd$L+s`7E47xpU14^KZs zoH5WEQe)CS1Ql(J-N0Cr{R{Cm1KP`>C5)uea1~01dBD-0VnR=V({&G%#!OGpaYFcs%+1WK9<~n5hH$y@U&_u|J?6IRY>el~3*E=v* z7Paf59ox2TJ007$vtrxbu{ySG+qP}46hQ~x+zfX3nlknlM6q4Q8lD36Kdb2QvLjU0 z*VnDvSaEfQlPgy&@Stk|mN-nvw|C?C&zH?KsQ{=bfG*k|rxTFOx$GHjF*+K#b!Gdr9#chR99XL@Kq|earT;Y7Ir?h zF}5n>sP;e7B(v&-(~&K&SK*f1A)9S=-~onHX+87f1)k7ax1*Jtms4FnuuSr$%E{?Q z;SmK8`gvWbJw-?OG_gPw{aXW;v+=jJ0Jl{#--LhA!w_e{&NH^cnX=!k^cZq7GH<)!xN_&x?$<_*)2WHdYbS>&x5H+JUB zguI+#HXg^8ddx&Z`MS*K8x7a;olASJ_~)eGbjh-|yrkmANR(bm?O4;c{&gR++Y@TV(W$etmCAGQt9ONEc+?=pNsfa=plN9rTIgBC< z=CLM}2t49`59Niac;*(?8oN?LEk{K+5y#T zu$n{RtuyrpJep#5*Y#6VaBuphNaon!mNZ(J7bcM&4B2Fcm7)0!3wB2`oLL-AH&aGy zYGTTu$rb!&Ol&7akFZTQns*$alav=GoINYKA=-PgDYV!EBXH~&V>kVFB^D&*<}m_0 zg;PmMGi(5Py$M6NA^t3jL8S3aNis*KxrcVomXlqmX&(Ouh0}?b_ob^Q?Dv3{j{Mln zFUVpyTuHmxWluhGS5@;Vv{(|*->7kWooc1WiIw3!*^;Dwt9Y6wP12`XRr|B!#(WD<)Y8e|unFNP9! z92cXweu48}T4TJ;k0aOUH%HUt^r){r*FN}sc$+zFUW$V{i1DvGb^D8Y*=$%dk7w5F zkAi#(uF>&r{Rmvb;0J;$7`@>SYvut191~q;kyL~PE)frAh!sSFg1AX|Z?t1?I3({( zIsY&^AXiz~`n}KI0n12s2eOkX$=+DNQx(h|v8wc4RT4sx)kdb~Vgg6=DK6v#Qv#cK z1~szti9yr`0o$!q4r?Sv_DBf)nec2}jN|W>>p{JA?KNNdUI`SFz{+&^4Bc#FzTIc} z{cyQB9A~@Q`W5|)WUe5aKc*=u?Hi4Bv-)IcuKF>dx?<&rJR>xmWZ>OhrVVh5= zvyD}tQdiz*6v{aZI%Ph3PYUWP4xw}5{jS1vu!ZNYwmH*WP9#4e)C9=)j3rW0+~dl< z;+1J)`Oa=dHjpWFunO(s5`ZhYFS32v)=cHB2Dra25t6irvA&7t#4V2s-# z(R#Ah2ocsb&WjaZ&zr7t;7kG{SUXV>_p~89jXU@$DlBNPnp9%8%wyH~Gun@;<=6+D z9_(q=dM#CwI_22r$^1x$ws7dSbW65)%$f|&<$7Tet9afTTp*&=XbRg_hedwreY}{t z@vqmW+ys4H>OM1?RAy{cSr%fwGrL!M<|0XwVa8{cvexkFpW1z7?7H48(n;2~nNI29 zbbvop+9K}gu=4MzoR_#xKUZ48IIn(cT_WWgT?mDyCQgZRMnePG_!*k<8xXR#AnUhc z$y=c?Rx&e6=fpafR4a>g3iw^3FI=%&w(K)2Ew_47Fnbm1_K%>*P&7SFdp6?cb~i6n z0n#igsCpi-Ry(0SFjo)k27!)dew{>0+MoY}Q4z#bM%Mk8C}jE%ykq)LaEXK^z|_Ou z{r@9Yq)g5K$%y}pT=}J@s5~TsnG+^fT0}Y(0UY#3ZhoEZC}_yw zC1OYm@uPnvxiR(&rwiCL{?Y*Rt4xXm+}aj)SS`KqA~XT54B5)0ez8%s8f|fkvf3oI z>MBQ~Lu#TS&cNPTsh|7^u$R~<uQ|#40OYv^!D2Nizy`J%EDC;#6+td zxzjB&ExmT_t*cS`HhK29VT^qMWhET^=2lY*B=6Fi^P6{tW#j;w(>%Xt|IeG-JinLK zOXDDETpJDG+2Aqm-Y^!nwyr_UAw_Hh_mIg0hlriK^ z$iq5prX`xj#G~tvFOA%;<6lNvZ=yu1VSs@h~Q zsrfVGaHG%h-_mpDG{>tMU`_CGPAmGoA?{&u76w+7<5T zC4Gw-@LZqqg<7gz4xc`&*jKD(dgm^_$5>qtkNlI^meGbB`pyUp1M;g?`=&`nn-B1i z*+$LvnWJ3S&6errD+#<%3%Rx5ibCe+o_xsyM~=@w$qe`1?f0^v%1`jv?bth>#Sw9M z)kaB^=;sQIN9mrb{ucrTg;l;-Zbsa$=^rNmz8hhQ?H@1l&+WYCt-OVdQKrdgqB@GB zqt-YBWY)s0sd_~>rt2sN+SUC=N&*j%9@e^Ng4IV04^D!Q;=;0wyA%r6_!&1`6N9CE zu_7KIeaph7qxsI!wc{N5SH>)rr}&pbyU_Bz!e251H~ZKN(MS>c#J@Cn=EI6*(BCEc z)zSh*_epQM(Ptfx7A^#ka{a46`e^nwLRE4El+-bF}t z4M4}c>xx+saAgBN!QMG*>Nl6G_OngF;O=r9e;+HB!3o??h{ki4k6qI#2jBDe^^P;mL06mrwxmHj21OZ*bF>0iiUO5Wmt zW$Fn@NZS$Bk-sJ_D$Oghgi&Quix?`>{6K0uc7jZe)Qjxtf*uSx)i2m?#=qBVeDjC5TKwLn`8i@I%b zToL+=dFcNThHbh~vc7l^c_04l>FR}0>o&Q&^5_t)PP;w;Hl!YzL`ZW9sqs$lZXVt- zg-cs5Xf5yCULGb??9tP$ zDDi}0@e4MtSOn#)%tvJYkD60q@)7&nE>%31`(o=#j31_E32z9w{3|L}tO?O_!3zYmUHKfO0z=obn2RQ&4W zXl|aq34Y!@n#sKNPk-so>wLRy-xC$$K2S!p4_W?!LOMTsOc z5~}sJKxO`7GMtdE%*7vArDW*g&AiLn|Ezb-OGce&qoDWG%UIA|KW=9|Wo-&2J7O({9nUQd!I zzl3FmsSyc4tBe8fx(v7W_2GhoJJTv+c$1{4y|p!`{#yJbOT7gW&$F@k>Tx!faQY8I zx`6K8TghOkl$^tcesG8TEyAB{J_bQj^RS$;1WIf{nC?>r>_!?5oO`+qVYBZQ=6Q=m z#rJK~8rADXt+6tB7YwqsZ+y3-$qU;)v*dz1uOmF+X)i!Jewlq_aAa>AVd`u@Vxg zxE{)ZG_REdO;gTYqUFIa(M)wfupZH{h0$z2coC~ud`=94<#W#6+M*w#P>=L=K*gV} zj2O)&Q95g`W+l|zfK9gDNAl-}==O#X;ImA7Fcg*(C~{zJw+*d$DgM|kluYZ!b7tm* zP+WPurg4L~O19d)MSgVtE-u)Pes9!qYKWL2Usk@kiPIeMji2J9GuoI`k}ywu35p^& z8ZD05?1L(<;uVWn( zy7X2HTK>~W5<4yWJ8Pb#hsPpGbVa#WJY zeGb^jpFE|Wu-?L*Or~Jc$n3?knzluU9>t57V)qwJGJ_!((NU}dc4_4Fa?!{wbi%3{oUBtFVz%EFssgulD zJH*!_8MDn1p&?FO^XkGDyzD8KmnL6wPO!K*x&eci>fLeC0e2n$30I^H9d*MO^_dXy z37*TU4Gf~FU*8j9I-{`@`7XJ@Vd1MLwr+qS{1l2JbSSRuz2Fq)vk~HxV11>fBkvA% zg2rqbDRXW^n~~UN#+>iOaJ3EZ*EYrU1d7zAlRginBEW#+BwXsEg{7iUd^m%PUQMQa z*2pZB+E<~d+z_1#e)3bnN5>stQw~VVLnN0Gt?9mEK$ZoDH9f$;AOA*$wu4>oHzNB~ zP&@<$B7A065EkKK_x+^6|BeUs1=Eu_0Pa6i<;i$x-i)v9vD2`_-IP2Cf*^mSUBS%AB^ zv^_K_y)(9j4}y&M9TMpM7TV%zyEoPM$}ss^I}?*&Tu0`g^8O3yvac>sS)1b$zQwr2 zvzV`;tE5Gf`(a=9{CmaWU)jQU?aT*&u}^c3aE(7?aqACghM#|6L?0TsRq~9V?g#eQ zZ+KDb(c_@`yNzaCVqJ3%fcoMHR6UZ|2V2PJVqljo;5XQn2jDk&ay2>Q?;6h7y_E~# zK=CLackF`FlnPgf>g|HUuiXShJPc`dW4<^?KnOoQgiFyNLYl@Hw3~aK67lR)?&aq^2$jqa*E;wsZ z$B{9f?op{S(OgeNz1TwJal(sH#bU#7i6T<&hdF0s=4KScIN2^n_JdH3So2X19h5i2 zH8O`y8*vO~Fej2I*dt0k44#uJ@v3)pk%1NU(*l|kM9Luk&dd9{luLFru%Qo5#3ZEP z)>!jkwH4`?X4xkA)Zh4BXiBOv`QzAK5Y)#uEFGGJ+aL;J(%t>QwQTS*GY$O`P>>@uttSS_ zqjZv}(35^arcn-o2eZ5Cg z1h;Mbo&IrQlQ;AyFVovEeU||*A16`ux4UpKwj+1!kj{>DX$OKvb1Z{Umd-#iVS|zB zQTD*m{`85C6t?txS3Z^ztO2Z^ZnZJZ&u*i!dU+SFI=bRxy>J5>kS`w3-J291PwF9H zha99O>_j{2WKO2#o=5WtH{pHaV*5%c6YnR{$x&|?s&R;Yq2wZ zK*Sz6-~TeXK?e%NL%BN_#Y0I=+(T)8h@bG*7-PokwiKiWx!@^Jc&m+(SbVCE!|^=2o{Q!`_` zZ8q@ZKdTq`s~GAa(|L6D__1LmaHZmE9!h5sWJe<>+LCh#wz2)i9Zc&>Yva|my{*Qo z;^Y_hJ#1RL#iTB54aM4Q7CVI30K6vw$S5jU9L14sU?Jprhg!izY!;hh!3M!E=~*c- z>CqO;5(&4W>;j6f#g4VT?d8&Qu-2IKsV_?MHigw@ z)sRQE&?7|5XJ9MKqFvG+1=8#j%F=*t<5CwBruuLw3d(3Qdr7f^KbZb(BUUG~Ih-r6 zID46yo^X2{DLi~~<>;)4agu|22*4ewvx;I8C+W{w$%A+=2( z7i9_AEt4cZ2oiY{1`M1E6J>iL_z7Z<)K^sQ#>>9XZ@g-<1p5|Q;%P)LPBwWk4=2MY zF``EW&`3eV#-xNJ2_-ja`pDI)zkD5FM{fEMsKH67e3q5i8Pju%G^Td0-bT4t4b!?t zJ1mVH8pOYUE{2PSlV+BQz#!88Yq}n8`P$`B`n3^Zx1pKYpk1U;Q?~>!9DfZFM~pX) zlcUw6jK=JF#K0Tpw)0NdE$|1(;1xBfbmbw-w-|xM^jGVxBjcbEj_}yN!K;9CU8>919g ze_amyUr9DkkyNMX1|=8^=UqtD^acDp9hlUEBJ1fsjZliuUy=G;6W7BAN(KoPzMF@4 zFWP1Jk`q%CN&5&@24v~W)SR(~O$+BNe8}`U!&*hrx<;AR6i!P-$xkS7Qp-Q4P-J$c zxLiTHrqY7MBX`F}3=doAg)ir8aRDUFkGot_Pn3$4+H1AdY`!ZxHG{L!1hQPh<3iK9 zeHDfr75^f$Ra4Q&S&KzStA;(wvS;XQoowo~X`O0NOEhq)CkUiZs}dfh^q>$7`UTOs zTA`1-f0KRxi}>B^P-iYX!OK-%+Ra3=T=|evlRtg#v7L+I20z})$Dw(A8Qr=O&12b$ zunf|j%Tb~eeKlhoWaq_j6KO+zDU{c0x2|NYFOXZ!)37l$%wM%1TBvx--Mu+r#sYDT zbgW7dvFoZpvHpvucX!_ouQX#N`=q0`1Q{P1!P%E)eFb*rTF(7NlYv@0$F<4QLFPJY z?EM1EajelcM5Bg{QwV>`75a_*I9eSNeZnGy*@|c5TwqETXb#4rXaJl$d9=W}Wc7kpI!(GND7l)SZSk%C=Sh|`+ z=XyLF#D!hVO4wX!J*#Sp5>g6WGmoE`CY%si>a7{UsT{F>WL5d@CNeK9+`mjtEIynt*<&5h{T-5(+AF$?fZl3RKy+5Xn!ZA@ z5?%kHo}j%H?75TOORXO8vgD|3pXBF-KZ^UIsuVW{w}i=qS6{}?H65nBLMx5zt}7Uw z^6e7(913z`DLL4ljC9&6BD;iVUiuj{%kwAEm656p=P|8Hxtc5Pq7STc2W z>2+Hs8PN0;*`VAoLib!}kBy4}%C|Aqqwo08{O%lIB%?qzc70lX9nry=@DNn(GOT7e9$?*jTUBMwfipEL+O#b}R9zBG41| z7zna6gJhP>m?n+#(yTUyEZzy>z9q1Q(~!Kw>nPE{jW75}uK7@@E-YJI+dLHRLo`Ou zslf*cY77K>qH)e*m842hB49LiL}0{?G3ph&N9*qsiFh1yM@}t*>yv55c`n5lyTar! zz&0UC>Z=-@Z$u|ex%x23@#rRLFZ07uwJ4F|C9@*J6ca{>{lrmUh@=nB7tu*)B4K;_ z(eDqGDY}+)ZMgE0dEwFic_uI#pm4mRtDLaHwc>LQ#1E zB(U@cN_C?#Eiu_lPH5G*CIs~pK~d671u_$^ts*RIN2(?6AXG_mA1vK$(>hr;fvM^6 zChBG#BD^(^Oc5Bd1V_GI)j~fQ_Rn7Hh}XTj|r|h z(Uk*c=aGuu)n<)qNv-y%{hV4(3Idtwql4wQ2%t8X^62;q_aWb2C z@y8|Q#&c<8Nq-WA@}{uw6OGOn!g@NcSl|*yjn)nG)gNq3@^!x{lSN_V%0KYdiZEXE984 zOl zvHS?H0X?Pxb(KqJ#xI62luJpRI&7;0d>6X9(&!!|`*9?o@D8mfi27d85!(rf-H6jJ zSK6Vth0-qXxI;!1B~S`-PRAVCRYT#H!!b#AhiQ``Xw=*a4z!_ZlkILa+zKJmQq)%4 zFYQunr`XDk&0o+42HYh}mWz=qu>{I-J8u^`WouM>=Untg2I6R4i|Mb=wO%(J&*{z~IWOC!LDk}463V%BsmFRK^&Doe!(`1V*m4bgm25#g@e0b!4~awi z;C_J6d`XE*%S~}Q{doW&HqJ#Ku)LPo%4W@}r?s#&;Lz5+8%<&h0Dg{LZSNO+j*>uN z*PINGvNS~Qq{?}h#?zPPIVUeUP0&&X3HHbgb7Y|zFp1@O%7Iqqm?<(-9d%g;)y+b5 zW+ynKEI7jliftB(jR}fPnEzUY;X1wuSx2~^)YMc#UsPcZlr+dl8>y><3Sx=WP3iAc znn7*BvACvyyDkK zL)>L$M6HLBI7OoFVd4OpTnP5CQ9wlZ_|K8^_jR23x3Zev#t(-Olkq5}sKQA~!$vkj z!o;|yC6{WJ)biRoqoeBMnVED)g7j=RxQ}k|m5+WSZJ%cbG2^QYbl(HTQ$2~ zTw%Xcg@HAfO_We*auAd)4T5RC>mKu-0S*pbzZ=^o-zWZ@?o`{6O(X9*!Or!*{JG>oxlQ)o=8pTKH4^+v8mh$=`~+ zza=_f%_M(|g#WC@*T3EU{)T_pB27gWb!w;)B~(z?r1t3TGCs*#@Ycru%N` z0@TFe-b=}TTx%!;WQ)o3uao(NGcS`9luzJnK_@EqjG6oR1T*E$(vb4LOPhyrI@H{} zW}cMG!|T_#6PD;iLg$C39CqrpSQ<1KojsZC&3vK_RzX)LHRg=@GM-o5SWs{V6h5Nn zlT&Rvj+7(>GFb-hR?9Zb5!CsXx#CG#HJQ=bx*XdC)3De|WeQdT?=&(U!xQlqvpX{U zc(+Q4o$l&#R&uQEL#8L99Fw_jvx^eKPGcWShMBP^oiu5RRBFRVP09;bj4#=pPdc6p zJG^PpG>Q=u-OPz{N9zb#dSxrtZ;n;HbVNK*9zszmn>^h7CIBzG5L$#X81u>9MtiY< z?c|$Jncy{ttQlARp_#F!5Q-@@u14=3YnZ_->}lYnj%|mzI(yo5ZLM|ZHN?kx1yGo2 zCstIlkHJ9^9-su2C@*WqqOf3>=1&ji3wGqQE_)F2oPgERXh@E3ntIX`3|iXUeYSJJ z_J&Rd#C}xiVHQgr&%)<9){!ok>Fg0|fz@+sA&uc`J(d@mQD#K=F!!!$T}0--F~;k3 z`)4_Om75ipCCim|6|M#@ME3kkXBQ2RbZCzV_@Fb6iTdJ zMUTfkFOFgEu;zMDvtW7IrR|lhB?XUMoks)QpBL~uN4BkzWMNNeecopmpG2D#D9vBl zuTNVwn(A{8S4*xNOFL?VGwVvu6i$$->+I-ny2VErmYGJC9mZouHM@k<(YGA_@>QDZi1^$Eb2x;rD1Tgfk_L z@xS^p?7S}J4P&+H5u`E&Z;lZn+AVr zCa)b9(_6Sp6N98141=UgKaJP}@d67-xB3`sEF{B1WC}R4SWhwVW)(_{jewcCOK=q& zx8JDJKg1TV!$zJiO*L)k*-eP_jkz(=pUgB}{lI9XWYFUMZWi9^dANfn$B92@v5d!& zEx0r%ENm#LVpO!CYGdxJeCQ&+RT}bVy97$H^bwP96muft)?%SgcT+N50N*t1=e*g( zkIHb<;|7!|Iq|wgJE%nCVjp~0qCKYxdgNEuxHpSdvUL#c7lj>S&Im2T?$f>90bUN* z5w!mdO>THisz>+^?In^wCW*QBrew&yHG{$QrI`21OneFGFi|HikWKxtLw#%uNif<) z+_A{9NfgRF-Ja7qxR5#9qS@ryGKXe8*2ZTVd(^6WD*NNkF@MLtpx~-qu?wkF(ou7- z=%SEL$W{jB#?nzi!pMu=26=oVRQ6B<^4*uwl6a1Fy~07S{kQWUnK49yC58a{tG4EL z)}bK^pDvFGvUa-3cT1X&-Ia!hj7chM(FXS{>~$x=QfFuYScQ!C%vr8^rUHL}z(OIJ92wq%9w9N=_6 z<}<1)@g?Qu81}OY5(&Mly7eeM+{|q>YMm>aD(VlUCgqS0U8dwonS=TATCXZ8y}>3q zbd4dOKL4$@ixY++X6~$Pd}PJA9imOhYWqKtQj-@a7J8l+OKBH%v|0i7=nD1|T4J^_ zd$@-8DT^Cm&GUj5ieBZeZ#uRMjNMBcR>p<9pKa*$p7dhWYlsSQ6=JApl!SHD7s5Mr%4S`*apP9+n$2AOMH2Lg>J8vpn(D zggv)dQYV^-;Weqr|a@OA{Pt-M$Jb2XF|=cqlGHl128Hh7U4 zys{o?)gk*bCQIld5A0zRp-qMknX58M6LXgb9{RB^J`Bp$)L6XF7bSA3UO_itEi||e4sh;G zEAgOFonO!NN6M2JPS#uE9QRyt-kEjtt&n7~t<;S4WhynQU9q8R?fS{@P^PtAsUE)4 z%#?YjWzl*h&=Mz+H$mnkzZXLPM}$nNKp36LWNjo9tT!m~6v-~oG-l}#X8;#DDc)Bg zbhreYaB$mx&I#DQwJ$NZnh1^`Ur5dSVKaj#{Y!|;3s^(SrQTLss7cTfB&?jXP&mog z4Cgeys|RDo{ZX>|PH>l8+x|nP6Z&N!Vt-`^F=pdZItLE*nMiNaxwra3;I>N-pX(-`&XG|jw`R+?BpPxW8#rXVDF&@DRgR;y%F4wbi zm9tvY05@M@HM66fnUYRiV6ax{^{BttE`4Ofc=^ky#0?i}j5jNWx?_udFxVufIH+?i zKNKgwsP(&IC9xy{F+*a>Zej`1?P`*@3)h}>0Fx|n6V-XU5NfP}1+s*a$(w9Tl}1#G z^yDdD-jAVF4wtHtKGD;Xf|L5Ik8SV%*}u&xW7S2HQ2UZK8u8#om(^N+V~rvKT)yzu z0`bpEUK2!7c~a6?alR#s%?F9={cL37972e!x%ZMQhm80x$T2R&s(tlCP)zf_mz2_Z ztFJ$v+kHQXKAHJeP4R>$cB+7T1#vb!`7!r?Igi%;fA)`!*naKc@EHNm=hbg;y!T>K zK76LW9{$Gc4C(l9q;(I^$)QNbDumW*D+iWR5(z2s2X4rQ{}vo5omLCoCV;z8zB&T`a=`XGe%a8Xi&;**(Lnp_=cI_qvP(=T_gXE>)C&5|4V`zgQp zi9VCq8L{hIaBaQzX01z>id1`))QS*Myo0WSdpJ$ugnvp;IFN}e z!s(B0Dy!*e>xN=C)G_vzREvcM%56*QoCvFvO9$VdbK5?-)T-3DMIP&d;CZkbMCs_E+!cS2I4K|T)j4S}o49l8E)JGl z*ijsYbC=Ch|6bFKO{|w@j-^;Qk28S%7e`r*)9@ynhdZY9Ct9uE3Rh%rZutgK*8@T3 zLo?*ck~X2rnErv9>c!!IV>Q4&u+yN`A?A zHiBBlz`ANL4gM0A_z?1!eD-^oD$Mi`Zaqk(E7(*==KSbEnpNV>^HJn66*D}}B&Ocg zI*!__co^yGbKz{k>MgLvP2aW$1*Ny}D2uu`i({@5KS;2I3ZCYzOo0BKvB>F&=S(#| zr|i{Ag~eE+STLm16+7mbu=xY8CIvx<%9y;L1tirO>EH_2>%Y%5Z!TiAKyO?gVz;2R zDSl;FxGm*wBVCDnycp+dp8bfe@t44oC%pWX=wL4$mb>lu(!j2L)s1z)2e?>Ov zyNL;Z1$~u+!!Na$uP{7pZBv5>LDm8x*M2cS>|k89CX5Fhpq^m7^a?I9Jw3D-#@f~U zq~e)Oiccx(`%4!C2)U{hp(g^#C2q{VLj03G|6ng4Y-f<|5Bt9fs~^CeC6Fw&eIHYN zz;K^dc8U0my#{I`PT9#!%_pWAH&}k6-zKf!XT-=d)gN%a0rid{P+Y=o$(grabTK)NGDQ8|qrGT&PS`1#dKyAsZ*7)*bP;YBnZ_cN_LMYg zpNq4PZ#nx0o*!{-=24wAmxJaL;<3icCym2gv`2=-YksUt;P2uiGHHH&LB5}D(*DJ2 z_}~pz6_R8K6I6|p-d#GQmhtr&vhF(W$U1Q0DjxH|0(7SpjJ9Gj7*0D2opN`ir9aIu zOW!jyRh;pxl4u_5%bQeSzL@{gTA$r9mNDTk__^d0aMJwuf0)yj+DbV&|7ltOwUd4$ z`cG^9|HE>3|+w$oByf%bxBS8F=cxnO?V-JdRVs*SE_L6w1c1Yr-a4Ja3Bw7i8szw6LG$ zd?}5@o&t-U0#Z_=q)g340y^ z+Wn?7Y3s^(YJN>jxY!QsIKKkh=~m#Je94cJnQn4jkHcRUSxW^R<4s4?rW(Bm^odM; zmNtdk?S)eU6qU>NZ+GQRxyaA0}hNgQn`mrQ?3`l6tMD11sVtra9%pMiYTwtD*T z8S-+ciLS|`Um{^fV2_8?5_9{e`5?Jkz(*y1>d~dEfw$WEtKI}>g;J$}g9zys1f2`$ z`9ZY6)Dcy%-bw^D+SpH zojZLg+vb1FF)|iB=L}`~o%Y=Z+y>kPr2gj2B)tnh&jfM34y>8%ZPKFFoQVDM$zOQxyzrhJKC-+!D$EX$0Yibj9YJ{&N@l zS@J&MQ)C3CIs+(8o`?3R>my)w&`Fy&jzDgNd9Q}a0>X;=s`|MOITkPZDKV~0p={Xg zsfhR;+}|e>IO|7l1$OqD8JBNYflqKwf-9IM^UG!d{U1Hp(b?m4`uQ*8=3t@!IVXJL zZXqFDQFcB1qRs01sbx9Wqx>f0T#4UJsZCpaROPQuP?E2+g@w0-_?yIEnP~b%eEgHM zpM!qmx5ZkWxOLxU_jUH}**%{dK*t=8j)E>fz7bcPO&9wAt86>xfbhwc)%nYvpn7oYZq$`p0!P z1;XAAcpQ9@sB*P2T<|>~-8JIT%tCX9xo|jov8GJSV*67&Ut#n%QDi%@&+CMgFVEE| zw;g$Wii!WGV*v?_9_VXBlQ6$d7dv%kLJY&LpwZj{PCIrlx3}c8P#Mow@A)&aP}PUq zE^mOgdTF^gXfEC1`r31420;@{N7OhB#odePbKyI`THtQZD)jG`=2WDtaW!|ZlX&^} zSnuVX8{UG#EN{~d)aqRM4+v3m1m}Ode@=~Ldryy`?qR#+M+xuP08yzWVzW0`0QHf* zT$p8xep^wx_8Jtv`ON@JSrR%J$6&*5gP^d!Uwiw3b=3H%gW_*p}0|6ZwmCr9O-I$kKrQ1d*p* zCREh}#xf5!&fCF-m(5_QbL_YV?p2N5xVh*}@NC?W#WG(fw&G;0Oz1@;frkJ16(-kz zFHcXhW%R>*`1gb)`-oOtQb(VFu)w7^glFD8eQq+8K(;X&8Kv_Fh5ZcDJg(E~9XT!? zUu#!ROsIiLi8*=8`1otgf-~rGM4t_jOVw8f$-_dk;ep!&4u*o>z@Exru1Vcg-ELbe zpJ`_(zm3?sgJ`v4TuAEaf?L+-b(G zCkb~>dL}($iFW0qYPl`vlB&+xigdcM?}?rIUd07>tS!YSS*HvF>l=mmE?D6@p|4h$ z#*+ts>@XpFh$DqX_eUkel*TGW`xE?$f%OE3L!-(?S(0a1h9VZSHPHR|9lEv8_V}G9 zy_UrMkI9#J#~(Y}!8E&9jl(}}ueqA_HDUR1RdV+6swfbZfD6@v1#uy=e4>^3DIVD0 zs&Dj#O2#7YdCspIk8E!>hs|lqNckK78m@2381E?tl8j@4SCJ^{?j21GW>mY#aTu?i^=Yw(zKq)HNgUuetB!3 z^%>{Cz-L>056R(@#zyO!!p2JLno?C`PFrhE%wLwJ*B0BGWauC!$1#DD2S3XFkBx8? z-WM{PSF~y2c#0l@co4>skCj~1EZD1a^Dz@`BR+@yFO|wzJL19=v(uDWDNja|=18XW z1>6hjMSYe+zCUg1gsNzm)wJ9pmxD5O~1$ytUPmnY;=FcD%K~9 zz9)8jx`w68w7Tus(OZ^LPY|L-$1GU<-x6O4!7nJFbPaN~uq$3Jj%x7?(OTJnLG=u? zop~wydSqwag8AzC6nAQ_Z5#Ipc!VuigAkxL9*VdNze320D-?nat8u$YOn`p7v{FpZ zXCZWxtH(dvyYXhAH|3={1rv`oPS+L0c*^CGm_qhp{NHa$KVw9p*nj4g{D1lJ|Ixsr z;AEv}>S${9{}(7~Z~GBwqx~h)f1bKj1Xfg<^F(#S$zHyefitzl$+}qZX;N(0`WMQ< z-stfstr=d^SMQFnVbXe8Pxq#Oqf1azyBPs9wxxBNe7PUPP!=3S_(b!c(XF-6P5KJ+ zpX2Lx1Dwnp^Kex6|9Rl=yQJ#r1PDuok!HOq5T(g?C7XOepYqZ2X zjHJ!GCxouAr>pO<~@iB;;s9Ko^hM>B>8PP6v~*F)d8 zlJ*gg@L2T3Y6p934)ItLjv}D#Kq5zS)EX*CxaTBo1+#pH&%{5y%~uuVMlRVr}Z`#X6(JU8a+7t zqD_@Y*kj@V{BBu?uFyWQIQDr?pN4$D_L2q69fNHdAh^h2gA{Q@e+)X<|8H6PLwfu;$9YiI0C4sYsW5c(TLNYFJNH z{@8n?p(&m@JO)ZAr^1{Hs+OXwQlK0!%TIZZ4U$|d%U};@T~YY_1gAr&mt zT&daP{ssd=Nr{D>u(F@U(UOK!ecIJ!{7dp?#dyxS>m?7V_Qg<#fKkhRas^Rvc+{ zaC|2t*W-~~=2-M_ry%6o6>R59>{cf)=UbQ6*H%E;2_>u=i_PI;|N}}blmP5aJQ<`TTF?-ibfuEyBuihB~|jJv+;BYF?E_$OBOiXl*rNG zzNdorh~Y29!<(Labk)h}PMT3PHf*bE($pF9=ti~($ zOcOKX$MQh5k|K&YMOX>Z7+32Zs8EWl-UikgE#~GN^V5@cPQ*w~^^6~RB#^nBddQgs z_*D9|pH(0ja51?pxFdylOW(1wLI#*JrSDyA!Ct``J z4c8Pf1rri#O#4a|DCv>17)##!S8woNCD#QZRpyH43{g$#J8$6>OD^Lv5?sIfo!^ex z8SNr`o901Vv74EC6`O>(h1VUb)<5lCZ1!a2&64mXRcgm70=$;9K4VZpiIIkEd{t*$ zDowF^l~qXBEQ;I(iHrD9RWO%jj#c$yWSQOfLqGfHe-l}yqPpfP=l2Ws6$iOhzk(g}Hk6k+U#C|~C67IJY#|Q6 zw8Cmp98ALU5!8)yg$}QdMVrc?Xiy(fxZ&;{+DxxU4WA=wR`j9Teo>x`il+p)L{M&@ zUdhRw0-Q5u`Z$5&4`}sDQGb408wp^#K~<8@T8lmLVzhq*X1bbx?RcLSa7vmS2-je@dsgTAyI3CyX zF`J~3&~Eo`*k30?rx5UfKf+?hpdX=*{;(uc7{sOR)D_-{Kw}(XF^v;-zsSpCO@oMl zI!8exNg=gDVO7cNhsvf5xjiL{AD&??%MC@pK~LCaxr=*C?a-dn7=)#*s}#?mSQZh) zNR!xSZV5Ie12ON+KpDZut4W+l$THI4v&ZSo*6O0M1x7k|fJh3V)E~*TIkaNq;`+xX) z$KXigcI$VdiEZ1qlZkEHR>w{zNynPlwlSI5wrx#}jwVh{-m`a|s=ezuZ&mk~uKsp+ zuj~G=dtJZPqcQY*pha3>$~bj;WAJ2WXh`rO?7gcX`u?Wg)$MUv>XDctsd~4e&d`#0 zpe8EjBI8pjc(Odn!G@WJJis_l~`0^Wkx60KhE^w3}OWOMN2kVr##N7CPe2VSCZ7|**c{7m3BR}EF?tZIbrAv^Jea66)1n)}D8lhPxZ8F@ z2Q)%f5KtOXBYMx9%=^GHrIvTr%`@Lv&<$hXSj|&5`ezm{MP@xwoPM+ML(IE*^u|U6AwQj;i8f$>b5v%we;su*8 zz{#p<8skj4^Zcm~*UD{J`0y$Bw;YVQ#I4Dre(teHr!Xmyw3-q`XQ&2H z=sSl!WXa9{>jzG_&l+@Y`ijWfPDY7H|7)D9{I0~VnKdQUHioRWAe7Zf(CPfl=8W*!mS7Aeuwx;e>GNX*%!^WJ_ zpk9vhilu2O!3A74`{{ykg3)z_1E4!F^>8F`%4J zEt-B4VBwyuVOVoU8Bovf_bmkLN0nX%J^#P5LI4|2*Y0KuHkd@W0j{kce zi^OkE-!e`HaN5?IeS^;4+1Eg4T%UiW5_-YI&yCP71RE-#+^EN!peV;|HBdnm$BVij zg(lkxwwgj{oCH)@6eR#^f=-sEilw1&*9;T0y7FYu1{2F3(`t5TRtA&!ADs{bz0k$8 z)=ej9>zUX=tfj()x~!v<;+4jmMsLonSuI(sS};G=4d@0>_1J!7UMhT2<-#>OQS5j+ zA1{h35DFYvxu`t-b3at1>r?u@800?!uIlxh&r$O|4&KT!BK6$5X_(t9w03-R@{fM* zo?GubI?UIC*}?N)i*~4^?~gVHLBwErvtGB{gbN<>X_J34m(G#OM0wN{Ka$*YOdrhg z#4b@KL!Wt;hIi$XX$NY|{Ecky&5Xi&{so%@;JDEfv56Fpq&jXYJ0 zRvWpk;;;)_sF(PdEFQUpKz1U<9LpzwAtB6MB<>t!swTVd^3>3HZ+RbQ-JwjhBr5UO zR3}VD@F#^>V&2V|mY<9Kh6uyY9>bCNJu*s)CpTjMfR;_L{*DNErmBMgsuT|5=i7ks z4rzkr=lvh;xk{{fz4>lDKoj9O32&I>QvZ;n=6^Fiq3b|j7$=7VNXog!kV8R=KMqav z{ogi3Ha>1VP_SF$DTwkhjZ}HN3+20O7nW_MYUcV3Z~rjAu4fG*6YBZ0{CI_)|43*G zB)v3}dF8IyI+t*m#VVrrN+n~7+2!4lP?JY8Venf7W|Q{Sq@KJAnv`XBKqdPZ_VL)hS>~q$+g;x&o9w*d_I%GW!cAeZ^n5?ToCU=QW!ckaMR%^*FBc@69xP;`iqugCH zhYpn8yt7JQ`_G=vG;Ew{%^FeNy3^;v1SSpm->;{C@ag5i$Iphl^pCC-z!Fel>eT7o z_3Bo$d@4+yz-Yh)Utj$F!;m~9Ez`!qLv-3wm`+nfU#73R6Ivn{JM1;(U-A6+(X+sV zQqFQo0Zew9F%Od7EA?FWTZyF1T6aD+YAy0@9^4QfbJcgYH74*eBVW}6%@&$)a#pyM zk)L7*eKNeY{7ahN`YbTqM_}B0xIq@lRgV=^`|crbbYI-vjVECJTr2#1{gkSYMjf^T zF1#~%jHzy~R^AMT_W~KF<UrTHK@U}`w|a;dq}khSXB zfFxb2%E7RJx`2swdXOuDILNM8wrD}0O=GV`%;*cc-?=6zM)lbNk0Gp%3sdF5V&0U1A9@Mq+sfl zK0*@AfS%tY7JII86^QmW&Dq?6K{avR6N})<6?OeOv1>08q0Qxg6de#H|1}ix&lS4L zky^2V?@gKu`FG-)5g9qdv2RRYK-3;SdUsMbNfBf#x2O8V0B%`DD-Ka}c~No(jf^*Y z%P{`oF5L6l^pH%YVSrM|X_kW>;PE`6Bv^MxK{vuHOv*zksCIw$huFyoz(VxOUT^Jg z0|y>Kj7Ghlho9Zi{L4piZJVg6udt7P9rd_zY$__(7;d6hp2mSBf8!CJ%W4B6+to!Z zU&q8c_T8{%J!43_EAM*5cmZ{eNGOVnQHa}^ zSUEbmy8XX3if$HO|Goe9MLzjIq+$T1iYXkl;21&k?Q3g>ltg@MchuBuLs9zPNN4zd{pw) z8p?g`LFZIvYk$My9Bp0YvciJ+zh9wYg(b20Q6-5#CDzXqM{4!MhTi79b08)6h_S?d z7Rw=nV;0B5OmqZ+G?I&hjwR_*>ePZC)M;@$zM|O~C`9Xb`tLOV2wAbV6WsbouVb^j z3|e?c{w(m3U~HcJ(qnpnpnRknfxzuS31L~l@g@^Man8T)=@a$A0I0nd5_+XJM3k6r z9R+Yi3O-ZJ3Rp1hEVnZ<6xtNPMc2Pvlf+XG6vQwx^fuN9DL6DUtXkt*qjND+1uMVG zz4@^u5{Y^1Ase9`G^mFIuXyWLGeazWyvp4--j$lOCE0<>Eyw4rg#o!P98aI=-(38> z%uh6?1a5Q&*4kNN9mG__h= zFuZ-J57p8Dd58T!?{Qrte$pm?O%4{M|DWmc^~3nD=@F}Su7Y90bUlklwihbAt{$@-{fNi>y~I4#>1)FG<0S#z7XW?)e0lni(q8%DeZv75!scPp_Xh0?y{`+wl9oa=0PczAa#93 zSJ5C?w6u^GN39*lMhYWfNo!Z7@J3y=#bi^Gt<(x(*v$3yyWwegNao*?8pc}6W3MdM zL{}hM)0$Wqn4rTj!wfDHWvxLsM=7-`_DOmxiJ&1w+=&W%N`bX|KMh5ZrqU6bk0g7n zx~j1p?Dg(?=%NKy0s}dfDXu}*UMRbrerhHH-Y>-x8R_#E-Zs{RN!M4&i4wCbVD6Ny z>x<7~p`8Z1O3=Tk=hZ(2U;k8|GNVE*8-=5Y@EF3M>(!2N*4URYyc^*qj!K2nHv|#G zm;EZkYHjlB!uF$4AZ3;KFPwl?gVK=UX4yXUQ$ZAI=VUO=L`sy@Y}vk4M5PxLJYDUs z24>x!J0^8KN&V{;fy&KyA}wbE6U@g0Ft9-HGxg3$;*Oits20lF9syFi?F8AKAtm)U z^<1nQb}SEXAo5>JD~rHCVLA*BO(j!s=~zx#3Kr|~@RgUzQF#a0bOErbDF<$P9dF&^ zn{M}Cw1Tj$r$14T0M*d2G!1##p0C&@*l0duMS9{P>V;W{y0u5Ddr5h<>)FY@PWx19 zJXU+%uDQ1uhMlvgO#`O+qo+MZ!;3c7f#z0wwFiR~0~_BwZ)IRB_|=vzTVqIMllPeI zOcKNBn!bQgqwcF>Dq~i?%@&8wju#>(Gfc91AHwhhPy?jCfX!__M87^MpRlP+OLFne zNPZ%&n5}(E8r}B3zhNd3ul7XlPpaa%Oju8qs+toCW|aK!Pj*{%x!G2S^Mr{f0n5rC zsI69FHiP$Gx-;ftdy530?9S{jZgIX&P(3U>j&B!*C<2ZEQF?a>*Mk6tCcyXa^`S5B!OOw(SeCB*iBjT$c3hic<_6 z;Nl;84ldXp%-5;QF)mXaK=$+1c&?muqv&U-S62L)sudBDjT-KmuYOuYyL?$~O1@8Y zdH9Vt{sW5tukwKP6Gk4{#mq5IIe5d5gxkPiCqPVP`K?Qn)E51 z^vM&}yvCuC?AQ=Ywe!cA?Y!gM`v!o?6&_mHk67q9qrwj4y)EJnT5b%HlDdX_Q(I99 z1PXXVN@6!uy|%1U0MN4@d9$*;IT-RSyJZ;)m*+NUVPnl#$;?yrHm|pz9tC3{_QA<;aWYndaO@Mcg7>azr^sZ!Ax#}abJ{Md2_g5FI~9w7R7rLA7Yd5W3Z zG4F6|2k-OgaW;d>kiNVnfItwV{wD?z_po+$X*SeFr`0|Ku;aw^6R}umZ-v9CoP12ZjIZg>G5bZjn`pp zN)wK6AS1A^k^I_phaF`Fjnr(Er7yuKAx-{Hf^XsUE77F4*_?JeAC`S-(vay$1Ak0S zNjwQwa~q)cnPvEweArc?T}gcr3^0E&Qx9CXIR>+@iZ^c{k|KvnaS&KA$(36&bMiHW2JNM<(>@LIbEQ3Xov zULDdI>@)vd4O?I+rn9$75*icdP2ac8;u;2X9_Cw8_HciDSVdp#;N$mH*!}_Vem}v$ zE{G^oq0TM1;3#ai2R5p<&%xmzJF$2D>qb}*GR$51v&W>?0?Sk z%NwDVw;tS-3dU{4Ggm(l*_$6-&u+;+YcQc8*TCWb&L>U%{DBb}FVJNDm8K~tg z?C`q%BoL@>m_^@$ZR>(4l)j55~07 zV>NgkQ5ILN?Zg8M9r|Hx1+k?lbYN|9t%iaQd)i+Y1=9QDyD@WkS7t2O?bDKsKSTGn zQ9n*SesW8@MrPTKi8Ce0A8TnJo90xt8*Y$f+mmJ2I@r^EU+|%8w4ni^@%HYjj<|RT);CN=)EI4^w@6*2BVCktOtL(D^_ems-j;TKfHYFl zU_DRJ&@h+~{Awq+UVgyP6ZIt?3gz!#boUmdzm=pA9hW)s(5IkZhc7hJzX=y0^ zys*b}%zJFxzv_V&u-GipIDEP?6rJ%|XqvwsjWzmt9A%!qg`hbekeTd$LPuO{p!Ytb zaf!C{A6+W9qQPN{?)etX{gO^}jV&IEa90=q2Ams>-tat0#DG-gyw-C~q&XOxCzQrEqNhXSE*ZHApg z2%i}yAP{dS-ezL|OmFIa1zmJ~R};Hp{_^f|_Rm{HLx99Xn!=mIu>k2>!q@qAyQR<( zjSNdB5hjrJ`Z4QFLVMV84e1eA1%h}a7rmH>tzPF5LSeq4oW7uoUi{e0UhLT6e|w1Y zT>1?LPo8sa5T`#qe$xIx-YZm^lgT5M&LbD!A(7wNhr84+xL-QGP#!$()FACoM^{e` zG=ijiifMvcVU56kh2=Z(g**xWz9TZ?iQ>HRSk-F%8mGs`(qR&y2e8Y?#9@9cI@?5)is=2_R)sf`m1qYY2zY)>0U{2sT>9BOoQz!a)Wx?;%^E#cO z^qOEG{}}vIpYkuaocKSgkBg0yi;dfV?-=I%x9}Kn5odAy zK%-$a2CI>UAuebNAZg-agbX1q0IDurQ*M<`RIhQZv8Y)QydHMM^9h|i?aC4BCes#~ zNsVxS(%fWszyndtM#49J10Qqm_1^Of-ftX0*Ju?+);0 z@<7Tk`4B7K?jhk>BEc=eP3@N>gx@{AXEAnXEHKRwmSO#TRU|}*C|)r%vTqJ@f37TY zyQ}>uhEi{v-oOm9wiMe~L@U)~qO=~MNwb9PUmDR^pqmn|#LddANOJ%SWJ+mIny&qV z<1~+J=+ST3W$G-XFnf4u5EoRQo z9e8>c+`&pv$}<*ItdjeUWGPWAU)W4T7WT40(=VS|dc7@n&}FEeF6=%1{`>KLIA&M* z8Xq;?0K69uhXO%@hXo1PPPGcx1w6Q{y?Lx6v)-dy&~%K-^6x)ND-Yw9&5mdK*j42j zcDh5x7mhv`(2^Rv;tc*xwl<}Ar}4I#GE^gG?pSRPh+Wn*G5Td^df{?cL~~$U5?V4X zcT#jpqNn5ilI{hCYGEn*7P%oX2!py9p&>aG-NiOcdP|ieFI((lb&c1fv8j|A4ihr+ z`TSh-)iRyUDVF{s8|!!I(t~lCaZLz^6;$+;SjmnKW%e%93+gXeGA-sOon<>Kwx$00 z9u1M}p9*!;SPCsI!QNGxv}d#-S*89nmceGB0IXxt6R|*;x;=Fmh!gCScddPtVHP6M z;Bc7}((Jt@4CF@@xIJ!gshSZ$wlQxY!AMY>RnkiWLOSr;}Yn5fr6HlEk8G5BfIYyYPU7 zhJp_BJf0P9|IKbPKEG!8$BZd)?io@|(8K&HMLL`d)fgl6d^2z~d>E?)MO_yu)ILdK ztiOL_cQg-CJo)?3GPy4R1*-zfG)rXk5Z-zcrZ79X--$8q`{ODp3*UX|wjBsAqwkV)JeGME zSwF4v;@?yDJLrU6X7K>$n%?z(miVhnByKw0MbZ)~TQe}EF5kW{kJ+m^{|J7Y5%Lyl z2g~0E?t_tFLO975DcJASLmuc>l39H0y_|nmMRh7sZjiZDTEkl6l*t2KJ~Qt~20hIW z!zuZ(_v^0EuQbl9^l7yu-6hN5vdGPIc6;=;DNaH{Qs@>Ul``#br>{(qkZnaAp&Qq{ z{fdENZ^@oU^A#qWNo@kl6-pRBtPv5JTcaI?`swq9;MvSySMb`ms5ns$v{*Xk*$4DD zG!LoxR|<7pN!z43qMku&ifJSXr7*&f{7oDrsg!y%=Zoin@cRUg*~jvvZVrehc9GcO zc;k$JkX@#V#()2p04_Tgr&?ot`xg3Tu+jf#0dxXbxVU+XIXPO|Sh>5He9?vf%Udbo zh4oTjS~~8WJnWJuqCkMeSq4KD)kIN`$PZ&c8MVY>A=#gplw)Jb!2SX(VbCwPFB?<^ z`#LDtRe{^W%(pkUGS{fvUxw8*|B2T9{@caKuH5DL$hjhA3&6Dk)t&Wacp=1F-W+Rl zM|^JcMi;EHP2cp|^Fg>e*FxX181;b*)hqXrK}Bb53LsC99C$VT=nF+4$P1$0jTF#L zj*M;)?@RhRK)E(1qbgbMmw}GeKa%NMV?r6#>Ni6$wJUaAptNYThrsL90hneQ?0tB+ zc9_+7#)7$}#v#G6a9pf6mQdTq)k~9GneqaJdgl67yL`wT`?zqm$2;uLzk}vNy)uJq z*uD$ki061V(XQ4ShX<2FanrR%HVnXd(BYUYBO-h3t-(oR#*E=;)o(y#0oVhZK~`14 zf^fM59n%_stl;CDFsFL9X)QoUFgDAZ!iWB-^o}Zs42s!Ok!f#C&f6^`IF0_v0jf?J zB#ZS)2UTY|R+n(23spA(l)Lf4b=uvz2ED|>ZBrafAzUj1%7R;HysCm*XubFsIzq6o z%rCcx@~+3dT4Hv@lnZ@)X|UqI@{#IJi(Ga?TQ|zBUZGg$5q32u?-W24lcFwzcum`& z);_P_m9f^o4a+4^eD|ihdaVsS%b0Yvio=BtIu<1gm=ouCx?GFg>gt*~al4$zFm?(5 z_J_SVFl?;OEF>wgR>*FabX)bPTiYFjwWO-(bgdgJn=1+n znwxw=cq*EkO2J9FQI<^`bc)M#N^>n?1*gaarz(lcr&wiVX%7sFlVXN*r8~vq!@*$| z!bvsOmrA69eK1VUSa6nfa#`fcwaMF0bsDiWKav zv1VYb_m*@y2J1ObqdbA8Fs@<%t z$<6*zm~D_bD%meC1bwP27d5$Fd_e;w`D8*5S@J$kU4dDV`7&cW%4;|1hk8l4p%nA$ z+WfgVz$EA&)*?*gDz7_^M|W80R@PL#)&Zf4;IauYWDvK%P$csi4`YPC5IL&pg3Fbn zaMG=e0J^1*W#2+q-wC^1$44)VC?cHeJVm98u_@&qjS|u$o-`)C>=&0ydy}<1H5u!? zcL?cIcbhCXzI8K8y`&yD^!#cZ&QmC;yF*+md8#HV zs;B|EkUkV=!l*}eyg6Gtr)L$tF*M3QkEKu?sz0S%<4D4F{*vZrp zQ2nd49aLk|v$EZqB3I1q=gA9Pf&R($-8#tdkE$HhzKTTS={dSK@wVid|5!p5inpWo zfP~}M5hKN(I*z4b67#h!z4!Gg18UDX+WRqfX&|5B>{R}KnQBgG|2D;wp$eC!h|c!O z%@jvXLZF$NDvs`Aan0QmJF&^p?vgIKp^ckV@EGjUg0-6z1Ru2=ny^L#ttlPbc9AKw zU+Atdn##Nac*!z~^k1K>NQ_uK72Lr5edHTMOd=q}n>UP!eN=8lDoBcM6Rt%C6|azv ztinA!$K14p7}GJFzg$k{FHj^y#vO2yN+E3%?$W>shIZTbTuOk#09J6jFkL1Wtid-NA?NJGkV zVhtmbg8{mKdxqOhdBSxSAhJ#%%Rz*N1?(P#$za8$$6N3?PIv9VU{2hI_^66^QEdk4U`fU z4su6-hrx!SbEYCaZz97Dtl4)0Ayyt7fn%F@40@xhManjjkOt_{pxxh9?j*-eZd!`- zhmu9TX|M`=wtci~l$Af}z2(4N_wH!C34VwS3s-vK>=cVZk7OJmH5-l!1@;SPtx!tE zay(;o*X$dC>gYZYcU1Nmy*ActF(0f^4JuVD2d~KRIy%~8to0>L&xxOuFh4`D`3&>Q zN5!q?;TX{nes`%d$jXgPwi1D<`yua?)%I~Yf=?+$-OLmZ+f(7E=iKkG1?2CC6Mz++ zReZ1tk)zhkoxkge-XQf@@29sqt%A!#V*~czq=!CtJLo>JuPJLZU1dr`U?Re#WAhn^E2KBcX zvujr`=^^Iy@W^I)kBUdvAoxb4;tUBozi-5qPn3R@{Z=5}CCUyAHqmMMPb|ixm3{&v z!GJkJ$Y_GsbqpIxCN{Y?xDH-pKQZuOs;Yf0v~-vXIhG2ty;ah?D*`f+a8R8r40ITL zGoOku@b_#+qBvEM;N%*RG<)rF6n3DAq%xVRjpks@hXd*%Yf5MGA2kJKOjSM$$2u_A zp1F{+#PB3GJU8Q?(EJ;9vD=u!gSKp%xrSB6@f`&ySrn>xK2QJ5@J`;eynvwV(tFys}+HH{?rt^ZT zn?B$sqIJ!#sJKcLvinuC5`!($1K2MK$~O z4%IJxVzK7Ly9wpSar~Y|)3dS)T?vk4g_@k|*N(78nLa3JLmk?@1>OHfZP@<%mg>IT zlod=OoBK<~e(fD1bWG(md8%0=T9rP9pFz&D{+E;k)i^_-bQncj zi`+S_MC?2u$|zjfg6C=kC$<3@uFLh+#R4uZsNi8Ij+C~)ZJIN*ZcF@AfHtLU4FMs7 zl3gYSL+&bnjagOx3~x1a{-sC~1W;=<%#eF5yj>>ntP(IvF%E{oh+s-HBffnusXoV+C;m*KxumgUru?MQ~} zG+o2}??+|YeiRVQwG7ku`;-wyB2Tx(2?>y0nc0;?;T|nHFzysQNb~=nFt1O+4w%R9w=uedS_t??EF&W3+KlS%(}hx06SY){p?|{u}^yjepuO8V9PMCt7Fb z?looK4)s$mg%?C$mkfZjPgpuw3-xV);z>04S|NA^^{t4)OXz8LLb2 zOL@l-slVy(=Uis}*2!ZCkZry!77*^w~>kUCqxQSFPSM~#FKD*@F2sMSM5^+;(y!{kCSsKxkP zZDsn3@?a?MPRc+uDjNAvL?I(GRLti6=pYIkQ!0kAvfZ!#&7XM#U~*R_zybc>{{}cr z{d^3CpI(h6MN^1gpcumEv@?qP8N4#%AVtnHP-UhFIgAZ4d)Zs<^Spy^dJ)8u(!a%wWCK82L0m(>z^1ZA{+eJTGXpau4h1iFoD+oZ5vYW8+e`_GQ&xD z=sMwi zP`)$jupMvsfRhEcF8tIBVzMtQAIGy-bQ5+0q-j0GpAT^jRP2N|_2RZ4^4;~jz--sH z9zXKB@-Sh+AYX8`ScQX@QL|A-cmUDkwE+VRf6L#bmgFf!@^F?23?Z~il-h@K2&5Ex z{OC>9r6Gs9C|m^NN37HYHtgkVX5F~v)GI%R?a4Ry`KDi8; zlZ*H^#U|mrGZ|33!gf)%J@W1f`aO24chrU%WCKmnENjz1%@aD&9qtnbu%5}Z60x$|s zx{1Wx{J|XXr4>w~h@FZag~t2XTG6N6k(r`Bh}#-}wl$jLg%FFnmZ)}XYAtvc^uz=n zMZvtS8AT&Ej+ta0ON2Ahu3fQx&Uwz4U+44ALMPEO0{m~y?Bmc2qCV`W-y!;JcE25rgWxp>exwb5=yITY{~`<;N? zmZ}5<7~4GYaJTp%J+`Xoos^o^lEy(D0;B}w9L){*8H}rt?-VYv3@t4c$eEt~Gz5~E_wX^UCiopyR{vN*E zly2PGB4NE#I}-s!On@A2zBCaIy+uEPOsIej21Bx>SVl4wrz%&IwBc-VgR%61@$X~^ zY}tc7I2-UyDwS)}=UovSw2L&Vfuwm1uLSEZswtFV8}_ABoa0|+*j_NP$Z8N8HdVChNhN-DxMOxPL0af%Y;6b9ieOkaY@N-5HLD~^!%Dk#396D zx+oGbYX`7f)c5r7h+FzVe>lo2HM>T3Y8tcSxtMQ^l0Wte{3ho5^R&4QGCV1cChLA4>ZQI8no>W8X{vB^PT#UU8YC*iK>;W-FT!%Y?CK+>LjWq3Oj0BL_@KfREb!G- z(#O4J+!L+3`x-pHvB9Nx-6^bf`;eH_Xr6_N&;_l{qiK_*^t)6LoE5{Br=&0#U~*!_rvEz2H(K=z+IjdXjP3~|0e(XBof|^zpJ>}w_K%<3iBCLPQqd)#0@49U9PbbcybhlQNjv!4=`3cg`7g|6T z_8bmK2mnio7X(l)bd4ALmgM`E$UNHCvO*gh6fpY}>nB;K)DpV%n;Q9aPqo4PJikau z`B!=#?npODOmaCZ$i3>@odjSXhvmk)av?aAPyaE%QY@FVn?MGrHdhXg?MI{ij;P8l zUQ&~+>^oX89eQ4JXI$nc#Jl9ts@482H;svGq#egFjfvE%9YIPa&8*f9GgVgW0C)aR zxy%Zzm99zVl5^?L19`B$@5x9NW0ot@A(TAOLTJ;AKh1W9`!jOOmY;eKm9v3DK}t0o z?ZNfDH|DO)89m63qWP6xcbOtJEpF)MGTiV&!&y&?coSGwE_km9LM`RFvOF;*aFzb` zA)Dj{HEzSHjxvR%e2eN&qMPv;A0w)|X10H@;tkt%cbU%0=5-@V?U-AM(U03tm1IjD zwn!A#4KrKis>>s2c+)h+uM#NS-jV<3^J1=*HQ17`P~goMLxTGMW>{*OxS3g-J6ZjA z5KPrT4*!cJ@jFsyt2R$XPuTVxn<8opdk2FS(r;aJ4(-M{G3GbS`cw!}qX07z()y$Ma?`Bt*#{l1f0{biCgNJI`Q} z1!GyGa2_$NLDg$C-W%mk{Ch`*N~Au$7Va(P779X0f$ZSSKNW>^qfRU}bBaZGBCR$R zEYIL)4pqjmXJvd`5LKNNS;QZGL4@X5N4TWii<>4Q&L(}c6G7z$=_eJc<&^9`yOWw? zG?f^fw#1s@jU@*)?5uIBEU)?Mlfxfl&3hGGJJrA9g}e}=KWp}P&{OsAS%D_lMt*)n z)$zQO?33Nzkt?d=WK@du^_)U?rR`n?sls0UB`gRMw5t70+o%d#s_ILyVr}YI{~DIm z`{d}n9|{WcuEeLSdv4ROlj*d^z|t~@kivyr(2A9+5c|1QwRO9{zvf)Na%_YJyG9Wm zBfJAgh;?v!jZ0PQw-dh$vPTitTrU>Je2{wr{?#SuwTpjz7u2HZTofFscTG5biKpgk zM<~K|z4%|u{}uc;X2P#4-SqYT&&dE6Cl4D}8z)CaCv%Jcy3GE{Q;PjRP(HrHEky;> z&N6PaF2L%r|RRYj5pN&^% ziabL&O8TytFkSmZ`EdN-j#ycGC1t^<-mMU~-5+(TtorSUclT3~lXn{>5YZ%E{9o;q zFkuQNOH)R?a+97Qq;_D^CnGH51V}4%K7i(+zuwc`xaTC2qHW2A>38rfE+nO5G{eJn zAuhQ$^2r?$;i_0R=i;-+GpA%I1SpI-e{YSQPH9u4zRx|Jx0m$JXLS&jdiGt^)jq|R z2yfMr(X{C=r||y@UQF(&_8xyFYcId(7*zl1kM!RK;bJEC7LMj7|84q*s_WTfXyAN& zba}KaSgc_sW0^xSZ_r+vN{IN1TtI2jQ#37G7mn5YW+M?=E?-uAAW~7`kZ;F&MJ~}u zS7W6_w>~7&C{aC~WjS@<3@1e@4Sr_pc$*ndT3#Ia+_EYOs!JRJc>IzVfX`oY0<)g|Ak2i zm}uw}5oKB69ZMx`=}qM{OC|r8f=rB20(+1@mAROn#eE@DWIpDqfO}h7joY8f+G1`Q zTbPiCrnAB6Nia?XaM*B}Bptv~?4xOznVwuFJ-{W``^Uh~Z$gL_-w}7BSEz<0o)<&5 zD=1~Hhd2Ya0Y^=)>zsy?gSrirWlA2CsZ6Hr^fz6`&qRAZ4QGstf^amzo2cJwSb=T> zk9%bxeRe{xN_CMYEbB}(`P(&{tjC19fABUQts*DcWwTm;AzLG$`ln3$5G_(QzO%Lf z(*bXpjIzW7v1PxR=7kf%m?dfp?`nVu@zG3rpng-5rP73%h{RrV+hKt9H}3{ksY$#q z!O*C^A%@_DI}ARNb1APFwE+g@1f#b1L{;%$l6z?*-qVoiUmrc1Xnc5)SB$U=e-i+B z%Y(OU0J&D5#z5P_Rk2Di>rGXEwR{bq0SAP}9F*xpb+r)5g5C~V_r@845xZv=+Z4-A zlcL7Y3aQX^&5zZ_TFG)-_Nx>gY>ABVYHQs2Hw8*C6lO>8YZJpw^yO-^3Suye=<{e2 zK@cJM@e@X`&o=s7O0WR%#AdKO24B1E*?Kbq@u#V69V?-+n=;vbtwS_S?Ko#Nj4P*_ zgma0%Uyhs@G#6a}Vio{>2a=0@{FwOg_oDcHoW-PbMF}~~!d;YmSA6AfN%ieFr{1Ym z)dRe8=b`&rI#CT^Pwj$)`M3Liv`Xz9y0Ds736&d+SM?w+VTZF6b<}roaCkJ?OAxWn z)rR-w(E~*tuOYU#!CVq!A6=mj+g=YxT#*e?n$9ie#MD&x^Zdi4#^84@sy|86AkvBk z7b4<@@=1k{zbmylT7S!fGzHo|xRPdkRd5*Kg4?iREmft)D{)DW;e0 zy1(Vn|08PwQQDWKH6+EE{4(r==^76VUTMhN?xpC8q&{K9IB`h7MhW9y10zbA^D zf8~)R-sSO+;LRL>eZeU^LC-E#a?VxUh31QlzQ+wHQEL^?JMhdLA-;$DC}wufzygFS z9x%Va1uk&6%39ILTgeo;F3KKPiRQc8 zX0|FGs7K=S4-P_}=o(H$S=4mst|`)VCCR}%(4JCuEvU|m!a?HkE=;lrJbC!F3 z(6iAvGq`Rc-|T(&NVjFa>^!31*+oa%VaZ{@91ivod1}UEvbkf$QdhVQ^yZ|fEOtwm z`6#Q4#oDABQvM_vE4BUJ?F`)Lf7wK#Ud8%sCb^Awj!OH*ymrIvmRy*`9)y+uVxokD zVl3(Hb=1^IIYiiXTy;Bi!o*P2I(mOfVfMe@$=D4mZ0PuGzkl*jd@PnRJkC~fu(`^c zf4Lb-$7N~ridg8xF6ps-Iuix-wWrFz()RYsE?cD+Wbz;hMakL+aQVCUM21JMUx{^8L8?W{V|17g z<9P2ScRz(mfG+Y`oiUbVBo|6f{^}s54zrCzJH)qNY@iv{{mk2?wc3I%N14~f*)=Nq92$M2Z-__ z@qkF@3U=QD0{bRP^zKamV!^Ywo)Ecd%hIBW`qFQ?Yogb%vl4~=4lqAHsjbMgO>L^q zm#Cyyn}!TgxA&8#+i@4M6L(PWdq6O{{eH@OZQqV2ODcA55a}jkjOXAb`uBh+PsFd? z{6?X6?-sFnt^Hzk^$r-r{h^i)uE*;=e+c2Ur|^cEUX{qt00I+pOxZLEo$5^(dWvNs z6HAxnIFIRMghz^aPy8n+Cj6%#h0m0dAx|kmMhCJeJ**%-KN=)MPL{CZAg~L~)(6Sb zI8nWfRoRbaw(hhQ%E(ISV>+a^Avqln-0E!Yl3QkSZw-=x=z||Sm7?(YwuB-p|7hS8 z5?tDHWfK^DM)!||eT_HqCdvlqd-+mz$^6d&5X*ji$4B>o0|CSsJ=}>unnQv-9`my8 z=fjsL3I2;m7*W*(Vc>d6ldEl}ug{Dl4c^Fea2W=YynLstuD7PQN6<#Fw4U=-9j3wL zc2w5N*fx1N7R+ZA=pL6Pk<0phAd!p6y zJ%uSf<9~uG^MjF9>`5-D=(bfL3(2m;k@LXY!|}lRWOU|iqCAGyu~4*;TZl#W9Vr~i z|JiMpm+1|rY#E#^HD`i2Hx(S#E{BBLx62^R*#5lxM*ZuNP~^;uZR+{C>vME1_4B)( zO*fcS)3b-tAM@^pua|W|+gt$Or3Kq`ne=lJaerW&IaPk-j&>?*Ag$Ts{tub9%HoSx z;}n<1!rR_`Ld`7^Ix`ik3W67$joPB4C-8nmd^i^1z3(DceZ$Xoa4rL}ce0K?vsZZQ zdmI-pu_Xhkg_}YI+AP{X6&*j1DCeLy-Dos>r?64?%_brMeg|D?EJn5KAYLYiss}W? zRqH!JWi$nbmo-tQC0%?NGdJf0Z~TLQsR`6o!ghCE?`zMT46muXg;4gGv?kHi+>peW zr?yO&Z|)fNmuP&*%(mNSl*;%WvGAClh6DfTm2IUdmmuK>JBFPOsA|i!PsrkecuL!t7JM_ld%rJ#;^VwgOoe$+!mz({WFO|2C^@hFys@EIBVp?5K30(x^qtw91 z^{?u$EbOQVdpQ#o6?G;w1%(KDG&zbO`^g(8#rCMuT8wP?o<|HLc9mg|8 zj-hgMF<> zr@olH8DHwPf8+0~#(Xhj%V3r7W)hrda;8y&dl>D+gMHG9R|VN*r5!VIri8b864+VHgbI0uFi~BaP@yuXNZ=Wc5`W7=2{9 zTMUiTJ}e&KVRW+{B4`0c@d!_Jb;^m9A}Iul9Xa>0W1&|qbQahw(_L}cwM#)ReQ{g^ zhs=dsfmY*}JSf3bh&d5n+3T)oFg7-w*Bx3b%8gjJAy!`S?_aQe7kza&5>6^C2`JT| znVGZrz$Sb}_YaV_a)@6b*CbUWnMG{AceDP8iJ3;7>w^^W$_!DCg1j8@W<28CU2*tU zFBJb>+*Du>f|760!A(A{pA|T`4ie9nE!{(l$x5T=s#hrv95||hW^(MH37L*Pi4FqU8Z_1P6SxI zMvGx5T6T;|BW9i7%s7@hHD8yxYFl^TkClDXPetS!;^gx^>e!Cbsmbon-8_Yg)LY!nQs^D@xU> zX=bjejUj9U0K7}Bl0;SJ2m4C&vp#t{t63Tzb*>B%yFG;iV~bliv3DQ zzI0p)x$BX-u4PFxi$!>W-@=^7p*#SS>q38KN2Z!O-%wlq&yt!pN7G_}yu^h_wHEqv zP|!8c=In*^tz48!nbI0P^j8&EQBxZmx`FX>I!Q7o61dy~wYfZ~)e67k(0iJJVvlVqN3<%H^ zDcE_scNt}frwT~=GTwNLh0hhh^Ubx6w!=brtZY|`ENRck8jbrTV{6=>=F7oGicv31 z3zRFAyCAYJN<0!IO!=~Z;1^KUX_tL!=U!I=v>R`Ybu98-TDMENi=s?C^@fRKMzM`q zqsUOb-dlfXGfi+upuo&MM>z{}HKxViaMmzOk7^m;vDS>Yg?Ny*F#`3==&Pil_3+~3 zB}u-L6pmU)OT*Bv4v&?HM*mPBMj)qv|ClLIlH^}bpw(BlVVgfpWi2ryROaD4BA8 z>x9d2vp%#y*?;O_y26GXm=kox8~rR$^G+to!RV`>M1fB!q(~SO{RYL4=><_zyp9)S zl!>q?k&x9=hbtW-J*`lTS8I{OOG2-lhOtyp5#Kz6H%(xzmOf@)!(@7BiS_L`6DA0G z=beJFkM2ARFue+>l(B$Et>u{ml5ghWp=KA3dB-K>GeD$4qz5HD&AAur4hRIbB1;b! zst{bX5{y!XA(Dx>hJQhCT99l9*Tx^D_-ZKeRr7{i`v8hNX8?wm$8i8b&rJnVfuH|+ zjMuo@h$FX-0=AIP$Qy6gUh7aIzNimX!FW>sM}p4^T^4@PPA7;((q@iH+6_sgEgZxB zWkL(cePCRSk7FsjCB9QhskWlLwYCu6Vos&<5e}h?_Wb+Or%jPm)SguFl@irfe&1wU zEayg%d@*CR)b*&*7Zt}H?dLLAypj#6A&Bx8UxABJR`q^_M5@EC10QDjMk@hF2R!|? zGaN|o&hW=+r@`j9tZ-o$sLzLQ)p-_n6{b&CXWyT&JuwYic84~iZ z7M>Uu4}7p0`j1t%NFf(YCf<43e=U3^L?WgRJ{Oaq(LT4(|J_Tg`MDcl<}B>!_}L=+ zZ*RP44J$`H3miW|-4@fICVy_@xkDT65pAVoGP%D+uQy3M;s(a*$?t90{A8GjZ;okd z$aGE;X}`)$!qlk|!n4%F<+CE*Ktu-(&ElAY;J^Va-~c2)M}ezLofNb7si>yy`l~0w ztJkiP*4nqH16^uyJo|5R{%dt8YCs`L`Ioub_A8iMPT> z4n{jok2d}IQN%bJz`7)dpT-Ygzk2r43o3;p?TLcwq)NQ0A$na>1uL%~lrVPW=oK>X>br{Va>vHIE( zrk8@X9XG=D?l~QMgi(QNVsfZ7P&ef}W@|1coUH_%R-VR@BsGK~B2YLSG?&A!a`Omq z&+yKMrNE-Z;C$3N@$6)=AC#DUEW+64T@y5>9GP-0dH=y_v^Fvivo5FF@zx_oYjmYT zZD%D=v9oT2kPf@_ANP4u3Gmn#B%}I^Xp}T2r3g9ZVYIz71-;4Rl`Re64^OuR1V1P8 z@Us{gB7?o6A~lvTU9+XMF5b1h`E5QOCa}-YZN?L0f<%A`p(nNCXt)t{%3)hzHIgBL z+$WP5m$W{gl_$%^Wx#Kcj>2et0}NR@1qsK^5Gi?zawVs+yKzA0JJ5YVW^UgZU=&(U zYiw-JKeuHv1cbNx6O`US034S~r>*J){~65N6PCHH{?9nGxJ*DMO{svxa&w+ zHcmH4AH%9}(55G=Qjb*QwJUzYE6*?TtV7>@R+*kdbupE0!Gfk!Gd+xu$!{svvQ{^3 z2<+^Rqk}4VG-b(^Ni>hR>U>tL11p+>TNPWIy!Q-N8g3t}pC4QBO*xQo@U*w+wSwp2 zW9Ro=880z8>VoJ6= zXm=c>6EmxvW5l)1aG#5F73h zkZS3=wt-|g#eLE2$w*TO*$+?a$Ry~@Ap^Qh{CU-)J|_*VHyq*4nqBs3=$~9GRM}Z` z#k-VIrhCdAJV%-9?wl-@eYr>Bwe%>G{BVmv(1B83SISneqE<@R-K7kBF^liq@2#Fp5!cFkVG@#p zh+!EY)2>~5g!z>m(sOAo<+UK~Td=&)OC$Yi&EeaRllYMKmb$)>kA7t~^WGGMT~f-U z3w#`D-9%>uJ_zv?;#yDHjh-^$O(Rjgo|K0khT$S=Y|f6gzZ{E>>P3pk5=wuA=yh_#HNnxUa}+x=%H zsf=5UHA7ps*AQy zPmrjMjIf_Ndj0A3EBLYdx0k`h)9uIkK0(X31?*vX z2}iQneC3&3^LA_jrWnum?Hw=SkTgx<`R0JX!#_(j5}bA{#NK$)y@KW5zjA;mlz%0M z&hC(a_IqxS8NFC6(ag=~NCE5`1`?_>Su>UTx$WH{ml8FFRuQ4^u9Z-gm_-k@?XP&3 zz2jWH;^@5-aGIIl2n*^ZohD)aIKg|G%Q;ct@~SZj=&t|aj9gMFjBmj??oL(iUcj<8 zhY`%QI{zj{kPv48ae`+Hd zx^=>C#04$JoogZAc&;?~oP^x=(mK8~CC40fabGr2;4XexCgW-OQq}9q1=A~djfzIoOMD%5dZuY3q~?rUpaSOWzRfBi z)*E!D_eP2Jt8ph3^U$en$6UP-LQrvs+UM*s8qw{~78mPS_gE=C^zBJpmD4>W)O>|`W=7KMzTzu@3(!Sqiz9{=ZipX*1i z&JMOpM)qd58oykHZ_nxTB-$f6=9o&l>Evu)&rdjx~$}y<{(t!AOML>>t}2B zF5N?&#l^o;V1Dcc-mHEf=k7$Oh$wok<7(t$+veIn{{THd;LVpAvBlzF9yy{RO+L=r z9`F+y4fO;0Y0G%8@vC^XOh%u6Y8~=bP>6)chz{B165ZyJy(u+wb^6WjvdVz^wsCrn zrj%AjkKo(ijf(h0CVm?YEPjqcL=>lx8l~B}{>&wM9TSqU`_){#NXc@rhpC5!M$N6|u^U*z@uZ06 zee~&gwBmS!K4Vz`}_3kHIZ*Wb@WBZFQkX!3NEeHDC)cIZ)|>;s0?qV0xYm5uwC<1MF%aUBE3vDfb}D4aayW_A$z()0&$ZA|B>7PAu)B%1gN6ea>aj+Qxd=f=$4R2`#FhzL&< zF5>pCy(+igik1V9eWJJUq(}DDyPd&Z@U+ihT>1I82AZNHR#S`+TZw=_T>QI#a7rc^ zwhp`%y3QaGjt*K@5_v^}tyb^%-cFxQi<#q;k9!aODP_MuepM7S^5k-ztIN)!Xwov1 zN~R88qx1G(Ic>5boezdbJD5H2OP0*(c*>?(!Uo5#!V)GfNSFa?#f=cExcEiuG>{7oR`lEFv#m{cX`fB-&<2!i2xQ`1remU`VBD zx44M6^P>l|_YE?P_X)DJ_cL<2!@eT1q(w%9|4drZ!sUSp>>qZ6n%ElpVv>A@pqfzq%DvkUNn??R{0sWEYa6fABa0Sv!cG1cySv;unjJxqU=jUMV_$*=FOP{(pa zu8#$IhS2wC?J{U-3mkW8%j!)OyfNSZ8CU&ff+~YgT!sI4xU&5>uImbD!q^`r)%sdk zvNj~1Vs(4&JoK<0xDFNAQw5a7np<+MiSB3aspp802ExD-1Q>1`Y%GDVl(uRJ+)(BSlPqcagc>004P=tQ ziy`TSgUk&F7_O+y3A;ZIH^ef}Eu9^m(`Wg!$+6fWf85DdQCY8X=!17%+EK&m`k8l| zf2Llwowy@&Y^I(Wm!{^|blE~$ncdiy=-`i$BW_=DZGJ7euw%W7L zxoXUXQl?$Va`Ylb(PfQH#m7{cj-D-w<-KWhd@Jdwk~rEyrIyMqnAHrqve5f9ob&QH z?D9B{`7#`;PV!ha)u`3Kq8eO|p*<}mUa)|BhLj|QQ*EJl8JRl4*dYE#=X)lVs9jp^ ztGK!NhCA@d^i9d(^mWPQ^liyYz9Ba1h4fPE9k}6RSFZ=`5sqk0K{3sg43ff6R*R3_ zHn>f_6mXL1xV?jVLpQ(}35b7*7@yvMvwkZJAND>N5rftW*Y~F&1R5tIncCi~3-F$DJy6!(b@I$WI2z>e z(}oYPix5`zImoE4gG^nvtk1%cJ;WAN=?{$ukCrUI1zb01z!)ugvKF1HZ)IK)@Zi2l+)Cr}sH5*D3LWlZ;OzA#IZA)g~W8IYh zPmXfN!LWH+PhA$Z@m!48UYK#%;An{@{2Qx0!o3n%DI}w{?Kd(l$2dS8IG!c} z{BB0D_&357dVbey=-3nISAujStwJvnt80TlT)~Q}lUV{{6jDif7pz5*UbkZl#St}E zJE#-NooLdHsFgHHh%Eb&#p5vA>O+g7uW1)o<+FRJ`OBK)O*qAnQ5b(E>6VzqiPpY! z2ME8wOFl&0NB;hZKGn~@wG16G2>BpGH)&H?<|~pTzxw#%a`YJIeDoCOj`bM#tZ;*V z>uO$(3kqQ2-3;`K0*3TY5Eam?}O*70sj`WnTH8@4qe8`hULv z=pb2KCi36mNFQH*CEaB1YMA_lpB6mSak?h66nK z=jEPDh0#YX;EBH3Pw z=TRmvzZjx9;!@rCA+D*nXOl+OCL{6j_hkB4J;b6Y2&q!&d9 zQxPmn60Q1EP!$QsIGuw_wKPO_tK1VnI z7bO$tKREr5gL(_h=mPc~MF=>nw46Ph%hAj-*g@Y0;h_C#qZ6tY z{4i0$!@q6e{DpD4P!IgZPN8z{lI;>R)9mv2`ijKu8T2ZsSJhnq+l_7Grry6MR31r} z@RAk8mLuttha@&VE9=Ih0HVr~7fU$1S+GiwZ&RcAt^h^l?UMvI;WIr;m{Vp=N}JBo zwj`D^mpJj@TU{Y?)TyW4{VGDM-EE4!jJbsH^dmQam1-2ZL?!%5GL%eN>#Hc$63)!i zPZD_nL)#1}>^|f!RT=d6tkmMX`3{3(XaCOmP_C@x7 zAryGTN7h+B*z)2M`OAMZX_Cz-j+3yna!!mox4N0>P1|=MJMM`(T$c%PKiwvSeA7xz zc-zWw?-}=Kmq_x#mJp|m-Vo^hJR>B!TwsqHDH!K0>HTxHO6t88C;%8X7}L=RtazNz zwRw95V9lm;%Ql_1DJ+gSZpQfV!RLx=rJk_=6*1dCGcC8WnW zoxtsEYwGZFN6imrL9RlM$p6Jch#$e&9Zd#N9YdCIW^#J+X=?K2HMe#`SjZ0a@m_AbEHKuy}7t0H*KEadspEsYW_WaYmH~kyHXSfZrsB7uN!QJA_?HAHvgXrh4Rnr?&YxXCZDM$H$gl}cao3umHo zMcxpi!+(jYzUqX}? zK7(S6E~0|{ND-->is{afiF=MQlT(+se<`xNl_9j( zKgEA+jQ@wD^S|x)`~%Zw&7VH#4;X(xC_DKY8xtW0@(Tlmz{yEMNkhp!_w60g;-Y6E z85G<@r*_P#rWK@)iwo4f%j}wEY%YQ|o11avF~b5RA#Exjs;XCXnwy{e?d&e{eS6cj zSIF^3iQMkSUiGhDx30Rky|11!skS#8u^`Kg8=_+OOh^S8_t01w`-@rS4Jiu=)+zKD zfv`R*!^v$jgG;QYwpcebIIt}fAa+5tqAd%a_K-vyp7xl;nQ%~75YuSdwD?$Cj>|Uj zZX~LGl4D{JLDrcpX%GIO?Z)JoCU<*qVy*Knhe8kI9vxNpflC7rOf*tn^(@v-=eStsZLTTW zvLAjh)qm!NG9+`ui2z8*TpgdC%rk`g=abtGH|_IIv4U1I?^ib^GIlL-ojv4r;Volo z3QZ&~B826%B)Vi}nenf1s~^@ms@ebKQ4FkcHqKB|N^s8Lw#uz7w1^wqT@w9LIos;O2R-g+C0Gn6P2@?wEvf`JI`` z{`$}~vIX|v754Rk^N*Lrkc;0C271?iMYi$pq?&3u1m$wsIhkb}I z%L_OsqbDcpRDna=BQue=V09g1Yq5mgrq-{ z#qACj4(5cVqQ60WSHEUOr1cC=%yqhTQ7{-1zTE}I6@`&wt#ojVz$EKH_V(Gp8jRq< zi*L!4qVY9LQf_#OppiHf6qd(J3~iO^E0#6~DKz+n8^&`y7pnAUN>PJ2sCswzTeIF` z61M|y9VNCrk1k&W1HSJml73X}FmV^{FuWx@`#K-wCw+xNPp~UbvgeU3E^VLer2+A6 zX+mZm>1hz@?o=nDKLZ?J02__9s2ce(KsnQ4dRrxnQ*tn-Nn1aav_QJ0 zS~kcM4+Bg0Ly*=inm>|?=@*Xn#9NSV;Y0Dm7%;^}PpBU^YohMA&=O}uw5iF;EM<7fZDGv&$P zs~g#z-CZ{4T!_vo-x*+$vsS;;i=lYz<)xWmvB|ATsp&a018=(UDW%uN&ew#Er^D7{ z8m9Vktzg8~f@sK8QA}}ODYkXhYbGskbeCV|%aNewaSv(y7M*dXu4^_M{lnP2rz+a@KB`u^7k!S^)-YxA@Sdwj`ov3|i*>^z-8| z2h11+**^j%tN5!_`?pITH~e7)e#JL|4vHrN<`Li5e9fZqm3iyM-#8tS{I}%o2;!$- z5D9nSV)lZ_kezMz|6XeJ>|Q=S*L981X}WDd7%HjVQuj2xk2g3uEZxHNb~A_eEUtk; zbNg>=EGB}2B^~0McY43R#O5UqAAx-!f2A&w)`%C*D-hd&w8HL38J&X{xgb+2V>mA> z!Gc?=w|!NC34a zI9XYk2E7V64n3}fS@JJv_4dx{n3P3RN15uP1fU{8zwtD^nd6#0J&IDfOpTOPRkF68 z5&~~qF+SGhkMvNuj?jjO1}ix$ zw8m!X>KM#e!;DlD4vbhVpy|ffWDhX!IV*tI!8eVMq~9BT%}Uaiba+I_+EWA7VFz;~ zu+>2{)}h}y@?si8($*(v%=9^DiFY^7MR>_HLCKU-+KRBXmQ|uea0H~-@a;f$witaeXPGrr@iA!?na!K$m33>j+7xm=J0Sv=a|z&ghm7sL3cNKc}BH$ zIIlsGH+9UvB|q)c${aBW(Q1Z(1BmBX?t8x-v2u{zcWI1>axfo(IJ-FfbohfV181HF zo^VWXS3AT@*_w4Z{G9*>ZV>V+TxqL+Rmn(1A4BhN1*4Q}sMX$Z8THCKJS>sG*eSEx z0yq|sHib8s(=l|N*}1f>#8=YJDE$C??6?*CWf`g;#G{Dy#(H7`=~dn^(x<_rA!oCJ z=;&(?kj&+pQm=cUpAhruyFiB~5J}|v6RBH7vo9Vh*`fV~d5C2C@{D%@FgFI}w z_n9P$f7%lMTT8Pu;UYoIA z1a~NynjI!(aMrSR?2=r&qZ7@-0%lGpcCA35>7h)sSjEQ5#!lHZP$f2}=~1xx$@kB4 z&ST5pCv%Tg1Q?R%sZ6fz*UK~C*ZaSO-d~rrNDj~1FdgO{vqQMfJmDUXAq;DQUpJWH zvOOz9T2G+&pa>jB_yXFLN8~*}uPg7GBYYlyyqUFMa>Cmp7`#Ar4h`XRn*`_!Z!nB) z6#@y*v!fSo3<#c#b7P)%1re@N<6Z+nzl&Cxz6+KCML~5T-`IV`Mgl=)F>E(1?R>Di3OQ(1gn8?pn@PDX+UZqC?W>C=Fhb{g5koooBwHz9TqgZ z>*}=QB0dL@OoQDFsdf|Rq9HVt!6LA)YT9nSlk4%pZj158J)?87%;v(qa8rZR22nS= zC6QBq4|0CoW{_5)P@pH750ud~q2+Q`^SXib?n8S6SNYjs)%2KQh`*Tviqlj9l*N2z$C(G{wwdEM*_cbV|(Jht&+evQCE+epidM^>z*+Oj%?boh# zt1wnVq$mhp)Nd;ArApgw5wuE}?VBpMjHm{~mLpEIoprlUhwElbr$;oK(X3InTY*CS z9rm2fx8)`wF^NP^>M`aiZAL{u@50SpGk|Xovq8OFSLxNT&PEgZdx=}bw9nnyQ5o^* zAGT$?aQKY$eGWP;dyr(ErCNe|{E2o#as5npMnK_x0amz?{&sCr0L9M*sP9y8OG^?P zuH$`7*XO1kTWuz#Dunt(eq+poY2qm+JDQ;8kZo)bgP+CDlcxfJ2>uOa#s-w={~gE# zSy@^u1O991?wm;}r2#N5Q`C9QUQYw*7C{M!Q*`5_+)3hTc4R?RE!Q7Q`&L9Mm3I`kAc9Ys0V_ACn=t9a+0|;mA?)`oJPLXvG-gNNTRGbXa$|76 z+#-S#Y|flmG|6F@4yB{2OiE#`mDVPdeCmO1`wdt6$s9t0WetglXMZ1EU#2O}MB^0Q z45xaI-O#Nqoh&mruuTumEhLTV6v4KCSwyR(Eg(p1NpNK@RZjP8y)ckKb`5xMH-bS& z#wZ-$lq_{Puh}Ar(L}?RMzFb4P2Mpoy{0fvP)n@Gfxzk=ZAM9}q^TIV)<~n_-&zv( zNAURi)4@rXQM* z-2>RDJz@z<$kdynQ9VvS)fuQ=WWu$i%Q(?SB!Z=nMhwS_q1C48@F%h7$EQc|Xg2uo zCL7{zOQowuqwZu;G*6a1Sp(rz6EYqrc&udIO^huV&rtO@LsHReNtf&~-0Kl$5|+y& zot=A9B$C%mAJdBN%O-s0u_197=0}4R&1IlRc`_{__?;`--ujOo#fKW{I=aQF7I#%Es*sq$rE!M*C8MfcU@`JbXWzj58eP0v z2DNMfRs2^{(_TX{TJuGZE5S-_Fv!@nwzR{w#(oM*GS+4sX^0OkjnWPpH*-$!4P)$z zJWx=RbINpy)WtjSpT3U#@EtAR%G)L*^S*3e*t!awu&kCFQ|(|#X{Q@`1U2(bU2!on zM83kxcb_;$%%b}}8^QeIF!wgPdkG0Ttn2fTiZMH#!il)b>skt5hkM4_SqP1M z-kjM~27!>yEz^baD4d~nCQu;0Q8LpZbyKjvGDq<%kW_`#@q{X^-$Gkg-lfrP=PMDq z@n>=o_fjemW#o8naUHB4N=9yMeTeNqi z^iZwljraGp{E;qvbFVxEOs_y~+h6vEmX^_@meL->iK7duR-7ZhHt+<8Vi}EgYEm^> z^(yF!q({*kw$wwCaER2Ok44g|mphj25s3LU71|ZKh+!N^apv3HKT_|S_X0hQZ+U$% z$L(*{4KCPjcS>;GIy!X=6XgBvtMzu(W5!x*nXl4??o!XPXoM#b>KU`fXzYVu`5?g3 z=K2Vwm=qU0G~{s~#Z2@_^INOq(>&tWZcl4K z-JiSlcx{7^V@-Nf)5tz&jg*GRR%N*hq8#x5&?moFv6}V^`ZOl(+T4?}>~77(g0Z`H z_bSS9vU{4G2AaJZbT!XkD@-1EkwI<^rfo#wZitxJo273JH*{yWdw-j_Wt2FzH-8X_ znm54pV4B*Jbh!dx-_#EI9b`4r)7U`Air8?S;7iNfpK2%|0&x{b#=D@{e3GTYcL_RUG}J z<@x7=?i!R1La~srwXBnzkS}Xr$rMl>cZ+Z5Kc3!gf_D6>;@I9ct!oQ)4)1z`^ zY=WTED2ETxm?K-`1WGzq!Shy&r<|+v=jqke*Ac_sj}T}~WqBi5E`}_jc%yKm^j%DV zT?ijM9egFGpahM$W2#Z~E+N1-L=k%#hm$_(#wr3k6UHZ{@8~N{?YWmVS<+U{Z!L_v zu2=uFZ}uRyA0_+Wn!7de9kSc^zbbUh`RJJK0p9DyfR+=_h)la;{X6hB%98;Qr`Cw;Z5*#=z`?DE>w}lKM>3j*03oU%_B@opC@U_d&>)lt9+jZ@8F0S>o76-7N0b%2V zUP|Eg3_LgscVlFY8vwAheDikf2Z?XD{?48x$=9_u2@&1%UEOwro~yWu%jc{7(`-Hf&Cr@)Ag17{1W*H`!O zZo4c17H7##M6_mny%Q=Mrvl3)YnC~8U?b-tb7EgACt=;0D1XBZM$KB=u+k4u#x9g# z-3@~2S6xn8Il<7o#ro7vnZ=8oAaC8y3e;0hCAy=JMt|440fV~)Js!8b)2~$W0t?%) z7q>3x7_M9JI<=J&>W~#{b^upHJPq7+za1;pod6nFzWN-G-R;IJ9_8Wn*9YEAZrQ6{ z^xx$38#oQ~8~6gMzwUi1*k;@h7qZj6ijR1@73T7wgmyR@K8ixKJhq&3M7b?=u$?e< z!?@Ee;gqS+Y)B4G_ZSAV5~W+>Tv;{Xme~rTcfRHqif)LZi)(2Ou+ZNr{zmPT zm)!2>*KkCsY?GUL<^L&2&cusaO9p32Cz%k`f{%(ZxBRsjZ)sV)!FWxFoUW!?)|8?t zxs)wo%`5Pcp5baLrfVc=H7upoF>G;w3A@;60lUyCYM4731~;*njKpt|F)>u?`^ZgB zmwOm%@n5OZ@0*CLsUK#zSsxf(n>^f#f?a4Xh%C3NTxxm_G6ci+e6E1cv!R`)a}<(( zgv1VbV^_Ns{`dss-#HU%amMO}Z*$`Hm=l13`@Uq)9r0P%zw03=<;tw9o}=w)NuY0ee(o#tb^u;=yUx-1Go<=~a?WxM0KmN*PiyG+*``Nt~;5 zOqnmmNOw+08*E3@0_)qqdftWLTdxgDNoxBSnQKhGwz|P?&&3a#enV};8xbIQx)B-? z=Pq%}AUaFyM?+9tq8yyI_8dm0o9X>=%p^O*`3%)sF;FG#?L0*!J~#}<-9Hy9lYr3r!5DPTs_4`U(`MNl9!Br(M`gIOso{t-)|KD z%FXcU=kY3-UuT>y$~S11nr&n0+NtVJO#_TTo-*Q4F3t=3H1@j2g*SsYR+Y=1SiZvc zUMXoVYW?Ad3x^odAp!nJqs&Fq#%676L29PZUW^)KaYxdMqH}%t2H4nrvK)Gxj)Yj) z9dD=R$VxEf7}_2jN$_0*HV9_m4oWPup|bGfh|i;l&$Ecn;C%a;83;x3bIcAq3|rzn z7P!-W;`glZ)HmxThExQH=M6-ji}&D(6fqcz7Zg-#AYOsh=fhRwrNoC(o(_fpu7Rg^ z`AoRg4XcX|PaVJ*?>m(#mM5|8$weF)frmPwY__2Rn#O)d4p|VNAMrAcs8Tt*nJnz= zQ>6T4mX|MI8F2na#HLYL8a>;0D0$zk}Zzq<}|1k^AieRf8>sDqv&=#V^n)vzOKg2V;XFr^LhsH zg`;dhE5e(`^HuT1%mFHnM97(MA+vkqq;Ox4b=Jg>B%4%Ci8ecDd&ugWLUZ)9Uhz{l ztEk2K0Y#kRbD2iXpHksJ|IZ*aKNng)x8W|4zkFf%|DD#Bb1*X1l9&7c{?(#2!+)WT z;P}!_7?5zLg)QJ4DHD+4tp^05o`PFP!9Z!dn_w|Zuhkqh)6-sMY+`W6by_8CJwbLe zWpLVoL*VRjHs#x`-S=F*UJ}I{ZcoZcv;+s2^Q_`GTRT3?H$M)@kek)j+hwn z$50Kf=wbq^Ju{EH1%f<+ZWOv?p?mp)p28lxX}7S3b+TZ0-wWP_u!#mk#jXHG<38j; z3wsB0&_oEkCPqH^xk@)<$buB?zPv#*LD#Fuf>;AbqTF}`SR$URK};2(gox6CHhpeK zydHX6Pz3W`E!IJ_c2h6(kNVF3fhxKryyVv@h=YT?~ ze5txW@3IAV$pMX44!1Qv7bWmgY*=RG>B=pNCGq#H)=`;VXG!6YDSR;~4^vb?J81-^++s#%cmi#fDiE+v`ad;=e$~2W7K1d_$lj+ky)ec3=n6mKpvC z)~*R_!yST9$8pw%tjFU}5^l3$HH(2$uZf_+NVTjWQGZIG4!ej-2f%WIl*91Q3^w?u zoA*9W^$VD~)uJz(%=qqqY>FtYrQuQ#r3Fw3GMbEt)AFbq9SoyWZ@wu{MI^varBP!i z6u*iD#A(5lY`di8Eqg_1;(qv;ez0rej7L*z2{>4L*qe%}&=Bt#vPI@^E_+U&wYn&b z+p0ThbCaBu>?}J|ChcncaE|n}RY%U|%WUfY?4{u59GL3T>JtADmkZ)LuQj-@Oahw{ z$&Ik!kP9sTW2n#_pj#uH&;oJ6BIy$cT#1ROwF2?xEI5AA90Xzm-MW3NjktI@e89IC zulZ}NJvn$sd+|0qMBZE3&xf*Ud#ZQ&Jca*bn+$`=8YJkKXN1(D_ND}gy*5GMtC#Ip z5&q&E#OrFGTg6kgM}_Mbk!uCw@yq|AJVgr*vsLQF&0ar^t=`q5M;R`3%$xodJcZ|8%n#S;yQulY`!3segJ+> zGE@q5H2;)U^ALdgGrE?tN+@8|F{jT5Fm+uY7U<3f5A@aVn3RfSZ`-~vGXree;dLf} zZ-NKD)a~MU{r&M*NHdlYW1?vg=wx4hJnbEv($T^*pttF)yZ^&GNpGB6LhZ{EZ+>}l zx0J3=OH`VHTlU2esVYCl8~k&!@a(<=?nlfoOAysZu@O<*441NW<4l8jyO>M7*;J!@ zSO^zs<=!^#N8sNVV=m{WhOFd<9+S}r{G6zvv87_hdk=iZG22EaD#{VFF&CiU$yrl% zyd3Wl_N`bKWnI;=tB1pw~+bQe^J-s**N5m9-$g8H2;h)@L<5T)-@=tG38NnSLO;TAl&F$mZrK~FXH)gO~S;iH~r#FB0 z1REN8X3p8Vlyg#YE+U!X_U9frsx#F6y$&!>*yvRuQhPA93|(8Rt2*yYIJR-d4t9ce z9l<%1!tDzthZ9K*F*9Lw{E>{CR8S*Y3s&45(7#f04^QNGk+(M-dtf1sv8Fm3sKYQl zT9^&?IwZ9VVAkBtJ|pE32w^OTIgcBNCE2bvBuu1mXtq?1+lubh1qZw%=gNE_68nGg zTJc5|{?Ol(0-#smmgFNUkhr2m;^y=hMDPy;yE_36BWJmPE&KqYr|5~f0VwFFfQS5~ zSoKlVHW$zeWS+s78Rw|WLY}>Y- zij5Vl*tU&|Z95g)W>vCc+qP9PZ_eFk-*@(T=k43x&)M3Xf5seb^zrqtf4yt_!lv3$ zS_*nTL98d3{z9yYHzoL^<18KDnx<9@Fp~o%^iy#pX^bI z!tu9czwVih0JDHSc$#nF_R0sx>iD32=$X&fV$29Ulh4^7*-m+>RXGe30FXz0ijb^| zja*hU6Vnd@+DEP*;YOVM=%Km&nNpiuQPn-nj%p zBCI_WVN>P|X_`8#k4e7aIULC*v5l7%HJ`O_Q*PYl72F%q3^ z*PV9dp?jIRU-kUdC=0WX-aQA#%EqkY{Bvj)x0w{nXagB<6c?OYucj5|#SW`mY_^1C z+PS^W)SdO@RBVgi7>&HX1R#5?)pgZhpG1t5XqMyDEU4(@brE3>uoI}k- z{Xw47N5kH!1{_h5PV$NoGe}`mUSQR0dhjquM+or{W(n`3OZ7sr z7#MyN{MYM@(+HQ4(x+lh`I9{0{J&gh%*-ro&6G@xOe|bY9LbceT^v6{vHnp*Bm=#a zSH+P&vTaBTVDO-zC)p74=F&oc6nyyTOHq$L+ zDbkN`FMZ>DqYAxP5HUqj&gyLK2!F4ycIlkvE;4=yW9^ofx5ju?Vg0G}_Rcdz_zR#b zeMHftmMm+HZG?fqeo|Mt`e8{&{irF1+YN{plkagv^RT#9>?xoEqM_xhCr7bEoC3UQ z0o{>?B0Ucd5y7ZCAqqUP5R__WjLwXa&y>$&4-zZU-#%OaVcgRy81k*$xOZ^0r z6t`Fp(x_&$dbN!mj9ao@O89KL3!JX*VKwLuaC6fq>e+_uCMOb2^r4m7sLQhfC@E>@qHW#ebUhypDCT_s`3NB96~BX95_uK26|R)YkShdHW*!G`;lh0^4Zna%rfnmLOHDXsPPp zIDtXmXa>UhF*rx$RS5>|k2bKBL;^`;XPk8Ju@k6uS!HxzlZc?AwxxgM9r@Dn=yryq z;z>gMX6f5h1%yC{W6;4ty5`M7&sLwd`U@%Ov|3>?3N)QTTNRnEMyKF=*jcxi ztucuvhs=^im%R54EmtQ{_)gyEAQ!b#$_}m9)?kz-u#Lw{Cq$`N1P2w+1Rdst{>W;VE!ozikP=bHa1&hr( z7<0sF1<0QfP#PmSWtjq)30Yi^ekkpd!6Wm7b!`V!5eHx-yj_2dpGe_h=nANhe?{Hq z$^ULXenHBo8T!mAFoeu``*nr3(IyK2S69r^d*;uEnd*X=2_G`Ygo~SFe-kM^+?oO} z!n*XZwYz(9^VL5Ws}h-ZD+)*JlT<-e0tJ^QKjpR~ejhl@>k$@wC&#g6ILG}y`71Do zl`LC~v+L8yJqMxfM_Jn6bIc=El3=zjH)ALhWL)l0RR7rlI zAQ$Bb3TClm?7|iAfYrTg28Uwm{wT%Juy&EoP_$XLCz#pINa;BpY2#!VVvnf3+!wKo z9;zxD2S}=VGU5O3K>`nz40QfvHY8!cd|~|mb4>m7czSX}QA2yz#R!Q~HX6=nZWilL ziGz}|T5MG*m{zG*$w%%$00qhhVdI7LInUa`e%x2BLFF8F^-o{#ZZQ@Eo z8Cq^%ZDc-N+^k=2xTOnzyx(y)8Z!D`{2}0D3{j>*NmI4g?7>EN;;P8UmqPd9q71=A z>ns)Sml3`<5!3}-(>Mz%8FKVVX@aRC|KS#7F`Ot*3oSDQJM1@-7t-}FGUT;3s3i)4 zg~1by=nbKTOMO*WvCvg=KputBHBv-rOHkfI2;?x(Si>GY?k8bnX&fktWxegUp~Rhq zZD*b|;^ytJBgSZH(71?VdAvz<%{avBb%VkF+irn=SG2TuQ<*d3KrO}d?rk_NwKU)n zQgsdC1BlgFizaVv7~1D>lcF+(LLz3txrquXoK_q+m;Aw0bw+J#?*!2Qz1fgFTV*XP z{sYK^GMd6WsWVGd`XV>#jK~7F&bkop&kAQ_)M$DXm5Gr{v#-1sj{@i4YID@a+HMqa zcw(B#Ylq?#h}&xZgF$_+g0A_LwRxAN78>$yNh}akd$w7WA}c}6Nd3zVHg}@dg=Jqt z7mnQ+`k#fgv~0K59E|VZst0+Q&X@Xb%kKadfVlBmO6`&id;9=yo~fY4lt|F&x{68v zFchd-JehhGzeNVvzEM_=3rSf60vT5b^3@6@&x=X~9UVu{EDqVAR=ClRzV%h85nJ{$ za6=MuiivmNT8oQWD-1bUOY~&oZ1j@D zleW@@fa7co@FukuFN#WbRv18eVRLweBVg#PJ8-i{Jg{}f(!#ACIM0$l_C%e3yZdD@ z3(xrt2cB>%A_VaoS;WqWA~uNy+o8-ecJ+d%N`Ij4uMj-pE-FN>CeESq~cDnk7-tzNsO2?HTi*NaAAe0M+ zbZ<06GxjgYlG}37RWS+7UAsIpbQDjZ@x?9(<~?*j=@bFV7od7`O*b!7>@maS$^=Vz z8gRgti6>i==)Q3Jo=qXSKA&I85!wxYu03UU78b&`$i!&9)@v?x!8|&TU0J2C@6R_I zJoyrQ2C7xyW$i^!V@KvWt2GHKA>lzU>9m+9rq163KCj7?XJRt@}Sml28N&nurVD@Uq+o@iB?qM!uUCfJO( z9U4CatexG0O(=q**+FxY1YO$kw|JP>_+}O!lE9WfB(#c&yfjPBuq!SWmW0t=w+P@z zg$csn;jG0ovK;y3JA@|Ta{eUF$O-0)Yl(a{9C|NSBOYMNbOfgR89|z=jf7j1xs`M63lY~?NUw@9B@jn zCuW!!c~B7>QTwfgBnccbUiym1<94=U36J<{C)_Zx@K5aD#*sW&4`D0hm9O$UUro34 zQzi}+^Gj2WvydbFr+~X?b@+Y6_1+0s9vGp+HyWDwJ!!Y%^hMIQXkyF4PDGBlRf{{c z<_aiOdJrR*2}Q2Y&8iMhdlT}@QSX96OFeVffD9G3pd{RE0FmU=D*%Esr7@VYd$A-C_X9b|Iuju|IpKNpC$?a zG&cxV(y{svYPuynbKS+N_HNbEC^JQUTJ=hfIs_>XDKJhcw;i9s`@!h`u;x-w@l#Gb2xZUPOTHFvk7>nh_h8wo2jU^FHB#ls zMZw`$j#6?UsjriDV)gV*GBwI`rZzps70^SoGFiTVN3?Prq(WNl6kxTD0LlE zL^_mkj7d+!*PCnyvp z9)Qz}LqN9l$25SV*}XWjd_U@t!WywZJQ*Ty#_^8*GY9xfOE!bS zOMputxbJ;QKJ|0Tr2w>60Y6; zt^__kGnA7W2mJa7`VPSlxK29R>stlN3cWPd<6XMrUA>c~Q)()cS%$F+>a1^r^slEF zJ3K~xM{+f7!4 zWkZPL#7Mz{AOeE4VPV3+rn8V_zb1ScfDIid!(Kb(!$4)Z7JOu+e>g?qRK z4X&_LW~d#aaP(N{udqGKBT%s00Qq@L;0ToLYT!>EKYBBF`+bsE3I6Dh^(fcq_PW{1omGpU42Pwd1`G2B7y8qo{TMQ=K zYwsWN*O5Op*SL3&RsNgX50LZEfiZ$O?#Mq`uFPJ=Kzi)2<3C7aP98g+-$G-4mT&%~ zUjL}t736uZxYC=s5(Gd0Dk5rXq4Y~8j7q6g2KicSR&23w>5pwaib(3RH@b2vcYD$i zi(0BjNRo6K&ycsAyiz+}QSP3x&IsBSnh1tu8wD(csgsNq=;Hpuhu7`w1Vb`YUp_HY z(gWDLYSbTk{`J=_icmPuW{cBeO!f;8E|2E7?R)SAAzGXkl(%UH#$&Q)PH31FH*55y zmX6`~Qg-8h$TRb`b3Herm5cj_RVhQ2z8xTqs!&kGm%Lty(lB^+c@mRo73V88#SBoF z6dx0auhf@m)vRyZkyy(c`u$;b*w*Uj8c?&HnYMdS zn&*TU9L@t=UK%OA+7uXBIuk$w`+b;`p)?Enu6D9n#2`Tww-FT-4OCJ*Shc6hz{zvU zU*-ME1rUZ2WBU2r=4kL5N3PBv_{Vker0Z8f7x4jiwbD!!>aWsOJ}*W45$EO;zc54E zf>`e6**l$8>xZUxQ20iQ@r>$8c2?kwBb6zl$^KF(-ep>rMqOSyK8Wom!PdJZ`3hh8 z2x3FfqTaXrue)`jq3C^`Dx_TRaR!$X!bKDRXn0An!w3uwS6sd+Y;i4C1g~xgC@bk4 z9`U^1sM%@C^jEn8S0~M4L}d&SwXlfo%&yyr%tbwQ9nrMJeCj^Wl0rX_liS>*Ehh_I zP00+-;iusIM7cX1RSd4pYW!%q`aIb5qD@I?Xu^deO{V*_!DP6E8;UU{|DgO+_#vj6 z#=h8Wq*^-AoSp1tSl>6t2?r;sTHnNk;D!%^_jC&9PMua=;I47@E+A`^S!@$8(yV;t z$T2jLxnmvxty~#VC(k@(98VqTz&QK3{|KEjmUWboWjTVPVM#)b+>>8y18Ly4l{&)BnsS2TWI@u8@Nh_9y{K6-lC92U?bp_}H=tU&IsBrq>^5(qlWos#C@0(6EB^$8nMb<1PG#-CLZHI+}uM#e^FHNQ1=P`36Z zH1A*A{E1QT&P!CM4LsUmIm9%CbAb-CeNC|+1P?B=XI?ou^Qu#7A6J@ z{u=h&UxLSDnZ?b3nM^OXPHI?+i=7=sljrZ6+pz)?P8%muXYO0eHK#eoWMvxQHHmkc zH-OUPNBX*YlEf_x@jpY{O@B+6vZtD2_`JK8%5#rLW|Rhw+zySg)&=y#6{~5H7*J*g z%mL^$*_SOxI4oFAc$G4;%%nS<(^}zM8a7Qe=E`Eqq)MoHjY}vFGwWsAzscwo8<{3e zo^wWne0-$WXJbtQ2w#WD0P%UhUhre0xW*O&Epx-uX6QS(;WRM3)ZgpX81w@(Mg}Pr z9#=%46E5_P(W`V-QQHicuK8$woDiU|%~P)RC1*0s?U5)m0ObsQb9^WA;u4n`eDMCx zS&c;N*m@x!a6EnEiK|n}hQLV&!eKiv#MlM1q~Wfe;q9~XTb_g=js3MLm1(cWthBcN zJx(9p(Xt?lvykCfc4h<%YhRg1%sXvGd5W_DX`zhSn#aHelqtk*!DUg$8=4(D*;z1f zOCxojW;?mKC@yyWP)Qt>tuy`|-jTfex!H0lwBaDs6S3v@#Qg3A)+(gNl60F;<*GLq z3fW6thpACRBEM@Hm;6kb?Qj2{a3NW{g!RU;SfDa;qNXLkf8x!0yXReynCQl#mT*?M z^{kx!(?ul>0%*thP|b&xj?L$i$7cppZns&iR)1YNOgg4V{TFJiG6U8L5$E1X%#hO# z@18GtuZWE}&G1})qyd$NH^mIEAR~LTydaU;TWq9+dcDv4(k(G`c_CXgm$r1oTL(VqV%PT7;^&c|I;1`kNNhCwh&Q#TPa)XW^%l?SBpbe&QxAY&^X1F z>Kxpduh{}TPmg_h3ra}m{dp0XxmJV z^={wNeRwg@(EiSYJXu|N+4WUX&g~=un~~!rqN4UdUh&cerRzdc@mJ4_ECdfW$P7Kd zaFo()Ip`;RyJc*mV*suDesK4Tqp&;IzFl?0OR_{@-8hPSdc}aK5j{Vol@ak{qRfMY zMoA1a*lD%xbN*)oPI zovcSnyFG&;J-%MUa+&sr&6v@`ScoaxWQ&gJa=ptf_Zvtma(}oz+(h6!yode#WqDd3&(oIHEU3({6K zlrsl9yLPG0%gPDFS_Rl*p7^&D#T^`d3~W3Ma7?^LVMj$QvK+rzoruKh3$<$dFjT@Y z!Z0#mfyyLme|0PNq|!L|l7g+7HOex>%+tWIkUTj$;tWO*z*LknR!SS0co;l3vH_zD zl)%&$F_SUT3jypgCpnHdipn*~R@*Dgb4AGXCEQk?(y-OE$r*r3x!qfbEFm_O>WanD zyW^5mFPM=gM;|oYlSm(n{%uz3=rhiHmFS&HwiDNn!>?uLMjC6c{x=}p?iLwD^;ctA(TM&@%Vtqwls*`qLG{&mxP(q6!)kZY6 z>2dAhpQy8?RZ5uyL|$nCT&)S=iWJD&!4+js(ldI2YSS6;vL#m6mc<(2Wx9cjEP(d1 zr&D`;1BbE0)w`hes26*11(CT6gtf3mR1R?j&g;T39E2T=PB5H1tDdU4A0pBvh-QsU- z2et@0@h|sRyL_FSr)3%iQSt9wLkY8y>Na|*CP@xguYfZc`e5wtxZA{zbYz>nPboj> zjT|vI;au#XUPtJtw{R7?W7gU1COuTQyS8Cxj+V91yP3QJSB?&kC?6(psRC!5h$geb z1Bk7;=euA@J3_vKV_5pwl{aLh|k4m^h z5<;bOCpy^DE8l0C?6k)(0$kJIT=3Gbrg#WZ)nB3R1q0i*m#{p&Vhlf!(U5yJc_SdC zy@uoKa@YuO=%1NU?Xl)|*8LRgH znC&Tze!2vp@$X8khlFw1P$yl{2$TC{1l9hchNAYHqoI!kt}CnoSmKQ&nw9&0*6yKp z8i1p~_En=026N?zLjj;&oDRDu_{|O`CiOPEK?4{BDO)?up_b4X7w)a6+c}{xUzIy} zW|n2ZI+|TcwiICB?o?CLHKG_=EVYBvIylN$AaV1db9MdqNM!7#2#JZojdsX+|_zNH|h@ z`1=$=C9a9VY~lW!_V6#=p>~xVG~7<5(j}#r*c47Pni1U!*%Kxk>@NmI1@2kjPO2EH z)t|I3T!nxkp%(u06>{{uU_h#!@=Ic-hs)@17;=_b$5VEhEeRS~SJPfJybB^ONyFPi z*7mv92%O_xU)R`Rs-jGfp7`2mTTk_f1u`AOT}Q}#vgKssD7Mz3AaHOG z)0X){tqyOsX&JpKHy^=H?GsH0m!H3SE$2NwmX)eM5fkf|3C(wgR<0lDs)dG5 zUn15X(ea+pgK~71>%&LMl_i__S=agXew%te#Qy&I4&mDw9ZGz=wT|S;yddB3@YVk3 z`)^^a!Jw#Nq~bW_y?P?GUUx#mAm(Un?1lg*_9#SV%mKdY@O=s46m(5k!!{}-se#YY ze(V5wu^RYdY(tGvhLXARa#i<{+K~b)>Z<$`Q@J<3rYmIT*%i#M95>FkEKyHqmoTCQMUp$TfP z@Y1NP0Q5?hEN;FUmK&H)pOF9sMa3&>+u_!#Erg4a){-A$@dl+$W7JcM2|eg*5*p%S z{xSIh?B2zH{(wUi+fN856Z_1eg6uo72bCP6tyE?t6J5G&Gd4V;n=)p7;%L!V`8EAB zdbqi%`m4h=@ll?1naX3zp(Vc0TF_h=pDr@LT$WN~sDr+qLaB93t?`gF#}Iz{zML4} zW!Ud5`67s9ZnP@Hb=5ugxY6Ixq$*k5xH#||g+h7(+`XR!J+d0Cd8WA;ws`Jqxi#)8 z$jdDi&QxbfbacM^O<}jztdi{DFNz0SwS5%eo}IGxg0wZ284+H+#wc4PC6PPA5_sIZaYd)F7k>`L?B?SUMBs8DwL(Jox z{kS{j8y9Cu);M*N6u}b>kPi9iiW6gG>&-H++(cG{?NOCDu2EmL%ttAHKA4{4n#*)A zc|Vn~?N7Q_PI2@)D;CMoi51yU!TruN;@g6b6$4*Ay4@E4fRq<^OIzidxS}^+A$=;5 z7ZfT%5(U@ds+-<2{RRx$9v;1P8+VQ`!G(%+`M_uoCgdCp9LAj9s@dx#JXfR&5_tXb zkchy(8f6r^ z%`UhmysXDt?Qt&q#1D@2n=hIhcmyHt-L?IR}P!j_(odi3S+l@GQr(W+q5 zwuJ6$rsU&g{UajdyYj(@($%KGTFA#WaTwvt6>2B-Xp1{h5;7nhuBhI5cq>IGMNl}0 zyfDrUIyqh;kG%e>PQ38hoSGihz6}mt#+>`fq!cZQ2Erk|BAv79YDSu{D&H@w0#LdT z+Eqz2e=S>KqP|qWJ+-=1c8xEwB3yRuu)ZXv=t&yN`{MN-idI;nF|?_fnia$DRF<5AU4&IRKxtu_ zkY{aidKH~Qg`lx+N7J#B-WsQFkIU$>-Sc}0NvH__HnH$*PsOqrWurPv6~4`>r@BIh zm$PzY|E#zDa!yQMHE8`UunS*AL?=*#SoSS#xmkks?jk9EN_N1RQn>6W@Y_#>kN0>| zPZbWI@EG?sl5rlj!y{yQ>|z0&1&A`fY5d5{_PkhArc`ps+dZm^I53qxJox?@M`8Bavsye#q(T%BrJGd0a>6Q}K1}X*Tdfi=WBTq0E{XQk} zu`yxGnr3~-;Nuq2{x0~a8T|q_bt-slQqEg>L<>@fE>8CHLFiE@DegaX79eN)9?Q^{g;%)`6&e9frec9^VJmjAp?CDiXQt2=dgGE;FU0jzaqN z#u6heufa2r6Pv)D(@~k5U3S^?$<)A7QpUVxRt2`A$#>hi(|A_WGo&+8nE0)ILR^Y> zl*0?bbu%DtEuatd)|X~g#%vg(>(Vp?;OoBR(R|1bLS6+zWMYS#V!O!p5k{zkM>DWpqImil=;&mX$^(-C5^+uv4e^bduaq^ zm~^L8Bg3Sa4f?!Fr{AWM0|8^1J5&e^sxl41005m@mc}_!x@CtX@7+@fglz#<#Arf% zK0Rnn29m^vSudX9E!F9t+)8BOn^>%3(pK+-2t>qgpEv+A$3P4G;8o=dYmH#z5>#W@ za={AWp!cQt(a$Vf!NmX~W$DD7g*jI`cI}ktFK|~NQ0ApXX{MWKg1z`S;Z<#y zfpdq6tq9u=i+I>B!K2p?r=sR}b2C;Xy17M9J)z;L0$<2Q)j zu2$p*z02yZR0IW2`w5LNM{&{*yA3q>#otwC%teD^n1RKV8o3ACj05@XxKhOc5# zYiT;tvy^lh8?{U{fzq(P$F(kV?a`{`>8j=NYQ}U6`(iFk-3W!81GBF27wd6YLM_5- z2odIEs!mvlMSf#*0GNq1nVBy`&Wzcrs%lZ_@ewfibVOWhFf5JV z@*qDMQ(M`TD~07Oq=bd>LRsRRL)H^hg5uaNqFK~`U}y7Ng5_7c)!j~mNa3-+g}L0fF3x<}FdyE6}7M)Cz@_)f~#kRw0YlY$lMTVO=k zSFNc~HQOhJ6~~fPu^t^c3Fz_x$XJB+D~<1UEp@^Qb?$ntJJkgl@!pvQc-He8f!Cow zcxKJ(dG{lGP68+?tL|&}dE|6#2~6^=xKnDHwDx!@J5Je^)9DTf<|T^VtHX*O95svs zA8>ULFY{*GFey2~yhnNt z7_?Om$?TAobs^JMlld24ff5Y*a%7T!)p=u|6&tJ&IN2u+)-7ai9{#$2AMto)(yr9w zK5fisve36!RS(3cGvPH_4@UfjD;SF83uf>NBYushb*HwRK-h!o?HODJX5ncOH)(Erb8pW#(vblz*TC!ycs!HycK}$_`4JL~#Hs{stB>>LIVpu5guV;4$9*tuL zP90u<_x)Z}vQM#-U|ZS2k-{OSTp>&vmJFqu*c*-=YFkXcM1U_{eA)8}{kw6oJ#55# z3oQe$Rp;tTeT5>zUGIRL+!}<@8CCU&XFGUUhg+kM^*a*u_*HLS?a5Jh+y0eA`7uF^ z+&p+Pypmbo{>o>FWdVAWj$GCShw_?j7g-=8mRmP{3!htq67s~xgM4X>lT@7t(Xx#X z+)fWxV$(uq1^v~yP^ZTfLf7c%6p!1^9?BQJ=}|LA>!dzmZhP0;qK`iJ4<&vzB9Hc> zY1_oMX+vabwFaKijc^`IQX-;iV-R-5 zqQNWnYX(T&4Xb8?$rri$;BRZuw+D=RoneKLDm?@MdP7x6F7Q_j@Ss*Z+oTQW_e2jJ zomu_-4%e=v?pl4En9SrZP`LJ%#5NJ8hb3!}7mF$M-ZVbH<;gLUR4gtx3eAelYRWRj z5T3@I9thyK&Cjg$U&xDII4m5aUru_$)!-(u-&0SG4>Wt2Rn%s+molK)(;igle$PyE zA_Xd;I>8^6m*Y&0Zpd{%58>;b+gIeGu=0ceZv%_ zzCdDh4neDUyOpocJ92N;V?RC(n@vr?xz>Mo+jnP-yVLz6r9gf&7?oI|w{>>0+qF1p zU>2%8va0iGIEifQuv*iCy28(@j(L?eh~Ia7-Rw$^rFZ~vM3Din_A?wzv)+_)f3D)J z)ErqT!A=_XI_BWs+R54GyPz@nijRlgL|I4rt22Tlv-bjJZKvwKJtz1lM)o_u(@{cP z`Zh&jQcr=?QI0+q0!C9e@^L2YJ0+BRwnln=DjE{Q&!nRa9p~AF*cNQC; zM1i~i0J99LdvuI?F+oFg8vEU;c0sHr@eO)buSJSJb$678?XI?Z|4OcbL~C76#^4@atTnE;&DwReWXO>D_`3D6tsA0Qm-fXojY<5m2?v}Q-}9y ztQ~P~p6g{&hOkjm+fZ9Gf;wuOIxxZ+?NJ@rp%<_E$tTOC^i(!8#VpS zEj{1LehPhLG+#cMsxQ>m@%h|8F&t)H@@{fpwvE02-OSaIpugWH6j}=nAnYfyRD|04 zVx2C{G7jkg%Mhk7KiG++@NL*vskp?Mk3PX{Z%Yh+a^yKH=J4&YIR-OeDFV~Pb2#=g z?5IQ7TVZh2@%V*Dw+w`MB@+KCIT#!G2<=PLSHa^;aXRVpN)o2GqbA&0yt~MwyXYV_ zXy@FSx7)(QaN3%`D;NKJe{fZ3Ez&K(9TV2K^KkG5=PM|CaMCr_84=D3s=s7hgEfQM zsm#2Wq0p%egmYr_q&>~ybRU*Zt$}m0C;ZcmWZI)sD^Rc0zZz?D*!Hn+YRmkvj*DDQ zc<{SXHmEBQ+|28{CnWo0{o4~XZ2>XfB&HI;X+Tz9V_H_gMV}`li)FSg--CEXP|!NY zjLs$D@_Pe#k@Z7mazi9eqpks5NdvH#qk+};6~zvI_21!=m7JWGq}oR9OhZIcYPB14UQ$q@JFo|gT;7QgP0(O zl(KS<>%^9H<~%UZlqG1kKchf3*whFq@}%8-y7ys` z+Uv!T8ICdDW?mw9;6B_OF``=|CGJ44T!EL5PCZ&Zu!DLnM1}dXPO;6* zx@fnGq$Y~U!69Zrn;sl1lOF(nwZbglpX(Xk8&v|1FRTF4Hxv=hJB%D7WF$!>rPE^T z;W5x3PaJ+vOy>`BeE^(yP%QlIufRI{R*jM%xGW^o0#M^(gcK+yGsNE?2C{EQ5a;om z#==6hDejS2uD^-*SlIOu3=rE?E4h|X4c5tW}E*~?E-BRo2l<1KoYdV(S`0H)PfzFFYP>5uVCsXCh zDztUHmZi;x^(xNXuFK=N%)Fgm#QVL1@F!~2$HYPFa=^U3nF)@ZMmjdouyHhlO$NKe zyR_&=G5@b~TbM>d!_3_GA}#KDt*ZW~v2<*V%8-rhwC~njdst$UgT>nfJb}cY{tU# zr*ZabIs0;N@QT4*8KvJh9ruC){>iGsO|97$i&-~`6 z8PHnx&hKHI>hXA0^LVRL?uLjJ6L*sH(JSA=>Rgpn{;U_S!70h$)l%!Qtn&#IGA6jv zb!wdPkU-=pB?<++t#XGuvC^fMYSz*Vgr3pW{84-Pwsv_Z_aSc3HPnE%)8G)Q3=V1T zpV@AwMb$^OU$Gmd&S>x|MAD=a*Y*C*elmHUp^Iq9tiY+-r~!yhtd)BI^+rE!s=eAOt0m8Ya%2)8y|3 z2d;rA@Hd#L5>L-2_}!&ovK8hYKlLO9mMCh&_yaqfLk9!};=sfBev@j#1ky)*2Suvg z7EykDnBU}Bug>bO!iO-J4OQ^mFF_l4XR=+49K|<{H538ME_`MtLDz?ve*D zgAI~=yf0Bah_QBbOjDa z5N=pz4|Ipyc)2vW@9ibe&koEJDz{tB(Dk%>7D>$>Qx2~glgtC_uT(vsd0u9UB0>>U z2q#hr8Om|Ku8@F1XAWEqHA)nVr@M~Mkts*Y;%;@x{;aMI+BBBx?oaZ;<-J14^TqV4 z^<&zoVEQ%A{sR;>>**|{FzKk_Sv2L-;W{&*4BmwMpplz&Ux?b76l+pA$1^iT_F)%A#KGWHyU4O zI+OhJUjydy6Qsodk)49u{;Ch*~)|6$Wl_GC{@GN1wV_}c|jhwkdg+)nZRl0M!nU$-*P5k?JhGq5+ zz+U>Nbt0UbTPl2bISTG;nlN9Ehew&%1b29Ue_8(z^rH(yV@1*l9u9FxaYzbCBzMdA&$a!R zRr<%GWUIZn;r64yFL+jV>Y@(HXN7U8OQFRX8wt4=)`<+w4u~NWbL3H23~S;HpHg)g zHp%a#G!_L5_$yJ-7b5}hE`m0jHM2Rw{Z_Ez+dw-S(M8OS_cAs%vG%h5vfk!o zcANY0zRMb9&sc5o2$`empc$NJfCCXdD+Z4ZwVcG3#5@az+HgMQAkKk~ZpMC}Vr`AC ziau#^6cE-E?<2=iZGFI&1@eH$WUATDd`wYs*9D1rYwdVTO!%~bgS!j$KNvoCC;0-Z zJJCRhg=dIGPJ)($vDb;NuPPjjqvC_K%$?;sW;D9WQ!Zn56}=9Jh}g*^jR3BKAA~J* z+j!+zO&O)sVf(ow`#Jpf-m*fI!)uie6GK3_iYy;PPaxVFG6b=gCs4?3N~uuV*^mq; zVz#%|a@iy?RIF+%O?Aa2tQ7wh7Vw2 zTuXz3XN~gP8i`qeiqfh!S}Z3MJs3w)Wc%6S-=z}(6Ic^93#usMJ+bbotbV6@wv&pfq$jml9X9m##MI9WwrGw$i*gZ0Q#VI0NaPAUSdL~r- z62Y)HT(SDm}4_n%0WDlKobNW;f(2MeEa_d3o*`+}- zZdcXT8?)D5onG21d^L7|{1QN7E;D(>w>TnkVLv4cs`@c@grx>(D8G(h|$$l z=UmQGZX6&Th7fn+F#Gb7^B0@iZK;;t$S2WhcgxWLzf!CzFSC;{HWFE5d^Q*paFz+s zn=%0R6XHCjRMv1ju=ON>7K36+bZ0IO2-ARZn~Ps3jy5LY2waJrWxf1hv$7@0j%$uu z(>3R1w^cQbrGTnWIhg(xMrb#?ssu2cQBRo@Gq&yiMrZlAX{gyJ&pcnx-7)raV@Q}l z9U}cpsv{WhvCYr|qw&e6=3p@3Hj)Z)6~3dnxX-qGd4(l`_fXwe_1vnCj|Pq*3<#p> zf1``aSm1tv`|kBM0Q1UP>N~$0k4$|bJ*&!<`_%c1n1L4W?DGhh9aklkj_LW2D$^8t z>KN{#HzKQPw$sD3AhS#Wgs-hok$LBs(HG9#Zl|n z9Y<8{d6C>yeq+h3A>+ACUVm4X+#{F!w--KMpBx2m-A@s2zb^^i6`!$-5HIa3aZKTN zMgZfOfDisNTGtUCR^@ICg!QnV#Nr%#<>f_n0j2U_2oJ|bN6^No$~T@TL)}IDidFC> zP@BO-43QXRp$s-*D>5E8PZVj6D^3Ac!M&$-uMt)WY(%HCcWP30VVTm2q50<5oKf$u zHmB7*9PpvL+mpyTe}-lGv1iUVPGRkChFol;ms0AK?$e_fTh1EK+evcO> zlEr&T8enE`#^N307fqnf@r2Nr`-kM>UgB76Z8!EAGd>~1LXUOdqIhp*RS^UW6)IqPU@-Uh)go4-#;#@f4DD&u zI(E3DF@E2pK0#?cot%pBu$q)jZ0m|$^nIUL>~YZ*{5}Tb%vKZUFVNXL`c-XWo|S8P zEBC6A3-g(hMXgpW=QDJxCRehA@8kExX1w3PGT08h`05AZzoKJHT<$3Sr@H47<^RjT z=U>rL(b2;8^Ahn-c=YgAQA2;%H67m*BBCRY6V{BEHLd@V*Bqn>C8K7kgEL2>iBr`m988Q>rD8SRzN_?5bfM{1^&Glz+4*2vFBg~l z`_*x??IFi&!fnCpu>XVaFCAa$z;EGJ$d-_)u&&@jTi7idV)yLfRg+eo5FeH`;!3xW zS~xd|s~9AeGx#0br;F5W0_+R;JiLct`=3y(SAKXNOhMr8rBIiBAh1rE?n{Jie)k%< z*l*K>y+Uiae_li{U%(%KAe-(2xZNc~5Jzsdi3G?J5l1(Sgz%tuu8AN69>btK*ur9A zDk+U`>WE?>uM5?0RiFq{$Bl^b24{sDVX76vvQX>gDkyJz~YUUw!}JmgEhWc;z?!-nrxRXz{O0-=t{RhasvX~ZOB z-GoFH-Y_dIPjXp&vnTSCt0W&{cwX-c@%Y$Eu}0%gyaArx5WuPA6w_qjNdqSP!)Rh8 z^xXjd`5#keG$)_4JUA>qx)^^U8w$csWpgGmkJU$A-d|T?8nz=phT#7G8b)%)_mLqV zAa$zOO7i^Cpu*AXwGGmC4ao-%l^8}>7g(oiDLR6+#JDlszB#i7#mJXyC)DcL-59Uv z+75D%V87)QuNj^g!n-tiWL@%_4a)fF^`s6a0tAHqUiM}&ntF-07YsaQv}iFSK^2G8 z%v{6QBu6q@D&1Klub47tSufPE7OEFVQw3vj<{I)gkKS~KtF$Kj-z9d3FR2&gO9rzW zR)w2ZDmehNmA>F)led1Hq@BW2>GpDB^407?uNLo#dMga2+?b&1^{J^`{6XtoQTE0? z27U<+x7*XI40d2r8EUyz1o*3PtCOjA%j>NN2=oG&;I+A^bo&z)-&Z(?pz@)<(}_t- z)eQBB{E_H0!l#`edxHhoDm^suf;phF-^dRNs&bfkQcEVg;5f^8o>|n&Tb1`Jt@44> zBY!L1S*Tx6-O;sG8>u^RMjZ0nA_PrtuCJ%R2KWUwW)b8@3$6s`^b&O7$GAXlm*g zc9Xkz$#Qc<|1e#dY*=8nb);2UqEApDX^;=@t#f(8wEbpv?pZz+g&I*qzbyJHtfpzR z-0Qw4k*UkNXGS5Zi{%)YML){y=*^I`)k3ZPG}LjMx+AZXYIl{3rclGouj0yKXQnc8 zZ3oIWPpT1{`-MB(n{n9_uSyk%F0GUe!-K3uEAOE!P0OsbMIFA8x~kXme1(RG)HGvp z8nWJCckfkcf>G3tA?nn$6~~s(n56MSrZmOGv%E+JT!szydqDWutu}F9UPW~^y;fO0 z3FW+8w{zy-I~TGFmVZlc2RTxnRml;t98J#Lho?2r=0hP?Bar?mNIUlpsYDe_=r9+O zxE?t5eQWsdYv=iX7PE9rQ@l4!+f2DakKiPSE}Ih5GAT|S*{aqg$Cs$JDyT=$I6*6! zuM$C*F^K+dYdVBxXAPg9ubIo&eKjut7k+9J*|$DT(+9@r||44-(3w+Zx5y15md zf`;BnX-W9BaqQ_VxS+40^c6lZbJ}l>YcTm3lJB)6Kzhvdcg!>f+%|3)a|Hc>FhVXn zg~Mjs=jtsMsWgP%*n{#4?dSQRi_8=f9CSj;9>sLm`qk%#^hFro{)-5Mk~^$lf+Yaq zJ0cimMwoDf;&z%)CAzH95w4serN^2|Ap&c11XW!>fXZ$0P=MB15R!BmO&-dQ8GRee zQ}W3)$4`m`S&Gb59>;q+1m2fsNO}~PmxRPj0~OJnpv;v1Ize#_cJF~i;~5K` zf;}2@t3a{s#l(TBqUDk%F-X0yWkT3--RMChvWr!=ZO@Eiw6kb4#7if6+ z#;MWXd28sf8dvj%N+G&|q?l<)AHj!FX~Y`gg)fkiL8gZC6&oTdPY#_i%nWIhUNa~?#6xvFmWn>tWGUNzB%am+iVX{K1gyM!(vgR&(N z(7~(8KD4%G?`V(Pn>=t%UYSvB3pA-c4tQmbsjkN8KN3{y%5k0K$73AUO8=stMy4;R zwjCk47%<)p!)%Rkabb_}>WOlVD_{n+x_X%r%DJ2$C(A#ruM-q&tT z7AXXU&9BCXRwp6d7EZ;uHBGsA8iDI7%}WP`f$k*RuLd&bjGLC9sr2%w8g%d;)_c+W?{(M8))XYwj~saYXWaAuGnG*K-?N*4mR(8z z8EJ9Bm@pOFD+Cll04=ggLb8hj8A9eKzyiWTAvVY*NjA1;YPLoU)YR0}ye{pvlDniC zqwWQ|h#=Be5w%plw5^G1N8Oa7W(EKDo4F%HwjS^Ubi4Dp>$-cpCFb*bJHS3yo5lTx zcQb!S6|}{p7O2Gw;_5LM&Fvr`;%`a^H}4CeZ)yns?g-KoGN=#KlRE>PTj?rwkK5Rx zE$Z{AT@Uy>L#}?0zZdTyKS9bnPipWxFGr}bhdTf~mAixxUh)Jn-UkYQLWdw~%=q;T zDi2v1UP^0EYzKKEoZR@95|wY+o<-R+GnFrC(5Ghq?}D8cD&La5XR5E*2q_-wn(X^r zgx|`yo#E&_AoGpr4(dbF@dqZLHKpzCei5+huiEunxB{)EFOefd??FQJov}#~ZccaH)X*VL5UmO9|NG!z+fxc*; zY$EbPjFPY+S@LhQDx%b_STMpe6!OuUf*;f?)$>uM$%bTa%^5Zc83+R$ss;%iZ5O8P zI~PL1wLnc*15FzX)MHMnvcw!lFVs7$+>Kbw#R6`#fUZ#c>>0YHav2yj$KvlnGMh{@ z2<2xHV6daYs?mtsCG8+F=P4Rg;Im4^1MV_Gxc0LI*HO%KN2Roki%9G1mtb1Jx#yo) zF>hN5ZSFw^Zc8yEs9Cko2QJBOog#688kp(N7hwEN-KU~eiHX=n zaM79fBs~NJG^-{J^I;_i1Mgr(q+HvUJj!E8WI0q?psV zM`R~J$uSNmQx`#_2cATdTt;ZNfs~l9PG1oUG~2dA-O_ECI*2@#uh$!yiG+`~;)}F# zJQIUR_D&-kY}sAJrld`z=<(rZScVe#Vp~Fz-4+rp$81jPbZjH&#+FfVVDc)7sAP)T zDLaiQl7)4V)DuNT#vF*r)YZ$Ug-)0EQFfX)0(vQpoUo57GjZ<^>jm_eM>oWnb5{I+i) zZz+1nx{L~R2`5EVc+f%Rp+vGWXl+0XF_^f1oaCyq^X<98Abizfl>H^4W$7G}GD?Ha zvY9ld5Rv$0jbtB&#bl;oYvB~jgOrBRWJlou`}p&2>0zy8QX*x4>=HlDBnBZ`B;(X} znA0hc?^!O2twh^OXK!q@N75}>KI=rRO8D2X-QHSi5p9ap%zcaG)0|M#Q|SX7L95Y9 zKSF7R^~Yl?H0}lt%(X}t&pf|0XnwSODD40%Qhv~^brLjW9tEP}*t3*IfpSCgu*8LJ&Bdf;s>!}7{CqZ5N^&l@1GTElF7wVm{@H-&%+?B z5UmP^8j#l&>}3Pp@W{%CM`e)!Lk?EY+CHX{5l}hL z6JI=x2*>4D_x4uWXJUxPz%8@<^{dMiR4SSuqur%K2=oZI#LvvN=8$++X<&Qx#Bx(c zHj`OwsCofHp$#Aoyaqz71nH+P#Ez(cw>8qRqu_WO6wGrgFAVnZ0qEBUFPf z1Bro=xVP-+2~+=VTv@EI25(&}UepL1c#)LG{f~c&TI{9mNU*CWVrfl^CHQdT%CuSs zpn5>)@~^Wqdo87WQZZiDNKTN*%+LB_TU(j>x-4Cc(wXpmwq|nmC?lBb#*$p6m@4)H zv3X8LYK%ZD8?g#J$l*tMd-MvkX-E@zP^wAQj&;TMU>`C#Cyg)`51%D2rhA z7h^;4wr=7{f#tLLg=yL2OzDd-*n-)jD3>Kz*-l!lq&8TwmcG;ZCQsR^HmkDlliRKS zScm8g$%Caee=abcu~nE76X$v^;TZCKv7-~E*mTLu{BQ%Z-#RNm_IEK(nN9nP!!=ZT z91xAb%Vos-2fNV&h$}WcON1f61Cy@;IvOwVD7@Uq`$)C#cXvF&+Ej_rSs`wfjg1PR zcS+bO)3%f0)#8t*B(trguY>2|T>#o(i%i~k5nI7Mx;`YG0ru0M3IA%%#@w>agVdzF z*ZXq3o{kIx%22s%#t0!@5NhQjDCLr(WoXFKtO!hvobR5S?-!IH>pdOl3L%i!qrT!Vnh@X+0*_p>sCxgv_GR&a00lJTi9-&v$Gqi1{1e0PZN1x{5xylZo3?*eD#TX_jT zosM{SxQnuXHq4t*Vf%xrVw+>-$^W53cP*1sf#2Y1UBVl>#*0K-vv_>h_O3wVkxf+l zeqvMfnaXS|fQkyN;x>o-8o8j%WyCg>Bj)P%__m8XKjq0HR0+#KBw zQC%0b4N}g%Ee%$$VVZhHnpjk+jHe|WGH`3O=cVat&4~MEpyUf(oh|9M&0uF1+FuI~ zle#LOb?T0jI-O)SSB>SPSS|^8-)P;nP$aT#l}2^X9n0;p#Z}>$(m{S9+7x9@pJ~BK zzCYtfiGU@=54x7;UGOEicXfQpV~Lz6osjz^%`H;>(i1*(;FnsuLy;6UicGJSByB$2 zeH~I)CS64@ZQzV%GzSYI2gTJh5~s?vx0^^-7E}nVd?he(_r8m4+}>BkzLndX5kOj) zIrZ=^Ay2apn(epNmAwV-aP<1J^N*~~=)GitfMj#NiMs%3dwev&YrBN=JTm3t>S_Tp z72*!ic*k!b9z2qCa=WxVHbI9%)Pdsj2AqaL0_q*qRkfp8FtGvkx^Z_(KgmpX9mkxkb&nRvkoA2E_ zKSEbdqo?JBtU>DYrV>||U3a~}A@cAK=VQ~rh|r~WQC9?WgoU+-ynwT0jIey|Uwe4@UA3+f!%^vLmf1x~-in|fg=kfWEZXd%(a-N#tLW263Y6%O-hjd;R|JJ%`xUymsZ! zuK4vQ7o7F~V_*EwohBxBtW1;u|uK# z7n;ja2J_e(T-e17a6Phs{+1_c#&Xz$guw@4gs6lr+LzKqjTCs;`8MO@+1c(Iz)ItA zPPWO@>ciaQuy#%u5ym{jfEF}up?8TeDf=tkD!t$$ihn6=oH#km$8p27>7Y_~h{HbS zMJKaTMZ2oTVAj9Cai5X{qfXFwH6U9=XC~&MoX9&z2Ps@-qBS&EAq7tfWQ?NgAT}5M zott|q!#{fo3IC`Ob1SM#p|z-D0Y}ff&@3_{x}A<6ZTk}Lldp;?baUs4e`=6HLY#X@ zdpo1}`O~u@5Az%Yp=%H-xeX9O?a}#A;zlxf&>|>|g8RN_-Wd}01cJ+Tw**tfH^J~v zza0Ti5Vx$ydB(#+_BgVhV)H-`u%@hP|0bHq7mmI!i7L|X(wa2P=%n_N%+3@u$l^^` zBzoc&>vlRs$rQYzZ%6zEnF8fQ9ActW4d!|6O?ZaPBJcWj_8R57qCz}lJ=-Z>b_>3Z zJG|w3DAfbTEOh`^iQFLPj9qGIW&Vpci#d4wPuKj)G~a&->i_`$Akh8ej{nyO^XHqL zqZz${y@8Rr3B9$Q8H**oxry};F~I3xSO)D^1RLEy8esgNEy4eIYX0+Qf`(3Z)-KK_ z$`&>zA_mSTVs?%;2G0M{vZ~J5VXGi~ExTSkdM>1r{lZqvJuJycZ_gv7l~vs1faD;N zU2lbCp*kR)A7nu)y|!jg6IPb1I`rC<{+FyOY=uSVjm2`mXMIZkss9ad)Z!> zy%-k!NvfUhOnWumo_yB5yXXJ=2|%AMDk;d01Vt8$GG7>5j3TpN1lP*H-4n1HkrKdC z9Oxj{N1ci~pBXzHYNFdp194iZJ`GxnA)qNFXK3ianw6fRnI%(LqFQo1Gez3k<>soh zF}qi6dbl6)YpwQ<7>O(4$3l)}LSufioNm7}kdK|p!PF5vIFb}{t8C~sVPFJI3w8o& zQBmVB!-XZO4T=loJWO7COEPSUzFHRN083Oj$c&Vt|L?_GnBztey9b6kA4%?s*=mh} z`5EO1D^Jdhit$alAx%Sl$VT^v{1 zKUpmoRy@jejA)dkc>$3W_kZ}ND<`o zEB65K6!HvYMZwkpoKZOsR8aIw)kje4QmOEUjHtqE11+UPzvYtS_%}u@x05}1kIiOE zN>&veLP$Wc)WUiG+A1kByHHouedl#v6>e&!?~ZvDOiguO52*%GwKw1{_TSLb_ucqC zZQ8-Nm$=wgCJimpbJWn(v}UeJtu5dY$+zLpb?x_udU|dwq-K(cY*V(TjY`ooH<-*N z%718<4T6vevAp7^l;-@zshbdyK^x-?nNu~z%Y=EtiKw}T3=(#?ZF%Q%&xYWM^uCpO z)W*Dhk#)uNz_Xuz%7a`}Q2T4p`ICf>KRQ^JoD$zwzk{7`ZFDFMr;mWFM*N^DgvCF^&(|l|;B4;Cb8h4nrpEzXU=rYr&iUfusx{2qf0A zFNCB1oQ@Z6w81OO+YhW+SpoiDatrzF>JI%*_65Ha&)I44t3fQ(30p$If`g#NDHp^| zCU#VR&3xZAVs)k)A##NEN;cY65^~y7-bIT9(c1EdZ+C%WC(Uncr*vsi*MSbbaGO1> zBGj(AqC22R2zRIn4oN2dvUlZ9*Mv^~JM?B*p@)67inc3`rK7%wp|;u}eKARuJz^3q zA{;L_22;;5QF1_Zw+Q9Uw(NkaW}j6v%3XVdXYDgy_w2v&I0^##XAe;OuP}xTyGu_$<0u(a9nvSAa=5bF>`8{_mZLnCTa} z(7zpS4X{N-d9%oNWg{c zkCH0H7_@N^^@t&13@N-mW^Q`v!WlWb6Go%&kB;2N|FKP!Dpq2c@Tk~>WI3L}JdV1k zG+SGfbXs?s_yn?o(}+HVg%VLZl?1#D)nWj}x=%KWo|%?OJ4_f(v>BhcYBZ3;GLfzh zke%YTQUQ57+Hz#HN{l>hFkN7A2JDNm0xC zSQ~L>(Q_chbrfWB-z=^U-B@aNtkdE=S$2ioV3kCW6rVKJF_eFZB0iH5y^@269GZ5g zq`zUbsuURR5~c~ETgfaWVxTaTe|l)$0cM~?rIQe-VCFhZgPncIrHE*OyFF8!m}kQ= zbP=d#+WYlDoKwX)9EoY#_LMEqUtS868uX3y4zmW^PMN`c<#8|gQEI~l1ly-Dx?Yb( zosgVrZ#J=Tq#(U4wQ*KdtF^s&3&M70E?Cjqo+L^IKjMNj;DAehQy)$DlfN6LMseKJ zEj&W<>(m_;6Su^HEPBPcla9BO5V(snq~+kwCQ|AATccY=;=604cp6bj|G2#At`?Y# zij{1sEW;IdrZ#gN3NT5S9}$vmtkh=uWvR7%uJCUwO_!(A+M)ME-NQh0q`E!o%>I*q zAwhQ=g4^ zF-c2^*lQruYQ8_d|8AZM;mIo9UmaNj5XBNf4yIT%uojQz5hlU9O?#>^Csd-Rb&VzM zPoTRv=*+4w8O1ER!If~5+xKAaqSzz$JCT*DPi-vWXQA!Qf zLHWhmi7UZS2@+~%nF+?^%ts(xYzEohOSG&jT6wIh63suzB#6H6Kb371)YB%BXa;d z*!ap2H}{HqfH!6)>FbArF6j|=`#H^i5pmeZ+hab$N!o zGFPtccTl{q*e*Z$9y*_A3lw%P`x|dVg1l^?%=-!Mg;5Zld&7ED0#BUIQhHlNV7b6j zr}d0WNwP+|&$k-oK5O!JO5#C9dbTwzsTC|q0;6XD20NzGHl7CNz|7GOjv{8;dVZls z^-!>Wiv`@+ghE|V+NV#Ngv&`wVVj`I5ymN*^a(fFz1JDTNcUTwSXx}HJqg7KERKqz zmIj0(aoHr`-|xQP|3cOD28lpj{V6pCe@e~&F}3YKOHCm=mmgp?7Lyc{`zM@6DeEX< zo1plzb;KeN70JgU4UasT-v)btZ!X%Rx@72Te@Gdic%V} zWCHqLb6{N(%QikdA1;A@*?-gITx4DBK_OqO~-ytdQ7RK_Oocg_SH@ zvPU&bQzwN=hgs2Z)FC9e-)fO|1!AYT_QhG=;F>+s;aE&crz{=O-)2pN<}sh#kP^9< zxtr>Uk7IciK86m*7iB4mGSOdFNPbzKg#IeS#w@IFDR}b;T=s=ql*a+}=4xD)ToLKT z&;)FhR%l2aiZuQphPtTCAF*hz%CuxSw?SvGg`(Q0v)gQ}Nn=2jk)#^l_f1rTt8kk+ zklczG=pb!^7UV1L!&*q-I8Z8+G=3$E<#@`EkkwT2(@v$v|;7VW|>k(V~g=QDi$nsjTgnEs-j?%4QI7vqzcggh@#~Z2&%Ke_NB%$4q#Tu*EVbr;Amq<^hhU&+R+-2HM>^(9JmF9T= zYFT7-&Sef}i4MF~g|Rcr2HA#GP>-KtF-5BhBV9R%p~qzzv-1>Xc%Yg@i(H=ZcLbu$1|Yn4Dr z^>^g(t2ji9C|*A07s6b#DIFfs6U5AC(FlI7Xw0{t4*YEUv;<+Nga?9bB3HrnemOer z3Gw`Z$d63L^_e7EA4)u~P^Bd1PjVODbYw{4y-?04;PlLEUZQHr<2%HbSb$?pgzDE) z-sZ4W+R|}ZV+Ax*z`J={L}(6djId_*7;d+k@M;9aAw@sOuRtRa_UUpNgbhlVeHgU_ zmy=)MC+n|me7zSW?ZOhECwvgIxCti*6K)I`x$|&dr7ZACsv%PM3Oc0aQ}r(Q6L6X0 z%sqR!sYl4@>a`IVeMMXhBbG&6!CwH8(|d3F^V`{pu`!>T&|4?C(_RLK-GT_gPJNZ$ z$Bdd29b4FGo1*IPnCb1Tu?pzsZnU#I%@jgfS%25Sf}A;#ILs`n6xm0-mJy=wKeMX{ z$8|#s?Np)XWTad?o~JPOs0K4q*hi~j?io2Legq+=>+J`Zjhhl*2jmYRr(GFR{!gla zO<;?IcIHarEZ3&6AxO8Z592OG{Q0N2nmlnOpP|1RBq#5MM1)4SA@J61G1*fjfE$&cL2 zhiv69+1va(MjxYnuVF22otCigYb)h05#;rnw2`0TBUN;7QS#-Hzk{xw9sZ!gje+rs z0eg;m1~r;F?5DIpH7~Y0bfO&^BNS~#I6n56H|wI8ccGmH{*b-@r4?VmBQ^H;8QzTk zU?kJO>)?fd@X`4vo<_mN!o*q4(c-@tdr3M)+ zRTe1+5E2!n*>aXBW^z4P?G4BM+aE4k1mq8j-z!d7O>QfJ53#!HcC|m*c5LqZ@$rNU zS!u`|pr9?i&!x)55GPF>;0*?f!dh8erYhBkHH2kruD)WQK)7}%#ICQu0b{AsO0;TB zkrCzd-edzg<9QYF=RGO-xP`XEs)cLQvGZxTd+8j?YT}vqJMZ#}b1~kEiGtNGhB=Zw zZ~{N1#!N#3-!(zQVblO1?k}H2io(pz+_gBh0Zv|Q$vhBMCg*$>0VYZ#| zAcI3Z*#N{f1I;I}j;2mO!{p!wSMx@*D^Si=!bB-Aruc!}l4Py9qy6vCvE>c4Yp{N& zvSiEq+~pNkgCmJGWxH7U$x8^HhW#Ml2!4b(ga)$EPzWnfHS=6K&32Kg52{6La+fOh;0MWve zQ)~(alc>~6cn3ysZ5i!BQlZoWQ2PDw1132gAG%~7V99ocR}OXgq_KLC#dlanf;GR2 z+Z)r$nDiX-ZSupiSs4`~jJrxWiZVqTPbu|y=82wvdC@Ndn)>>lXDuSVxxqug5pc3ApyZy2(el(+WbHZnW$Wtm>iCRrD>fzvhFB<8$Sd z!2gqB;`U+>`5a&_QiHGdc>=9i$o|KwUk|;Q{||P550VHfnB^^x?xT_XOGZBoBs0xq z6+k>-CsUZdfx|3wUF%-;K<{Lv*&jhBW?Md+!jJ%>V3!9|vYI=daj}-gsi=l1u2K=H% z01+%DbpckwkCmJUB?YHO*0>H21m#2&PYZO|Zc=2PSuoo1ahq(d|5ylSwwv=rp$VUh zZS=0t0|qwIYQBwGS=o|CJn5$ zuD#WZZ1;sq0#5dXQg3agcX-AkwGHh$CSN`@mfVF&nU$c9qA&-nQ zt+|xe{0z7i2nh%y40MUBAcB38fwb=;qChg1kQ<<1!S+(AXm!;VnYkTBDjTY5D1FgP zQwY8jRyG*ROgZO7?J-5f!4f7D&!*_^!wxeMEQ$q3_nRatE@DdW7N;?|5J@hS&{;UI zY&+_@fq9Ic3^7dUa8~SL%+6uhfXWNPg96^6*ef|yugUQ#I@jR1P@1P9yQ1kn@L^)T z65il4$;%E;nB~RUee6xZWqF?1taof5uz*h$1i@kDS|HXSS*^0M*E@7#4mpK7fP4yIe1aR@5)7F6jRx>n&XBel zA0RIEe;R`=n-zfYlg&T^y`RO}JW|mB5+HVAvE(i-7FBH*gIgyMguwytu}C*LDFsnJ zinObTVY@GrAw3|An1Bw8=J!TO69Z^S3BCgPV(QvxQ-shh-7MV(=f&k$>*`{Jqf9lB z{`_LnA(-nD{=gVCf&;F7vbL!W4Ew5*Aj1m@6K+9U>uE|7ZgEZf={PjvSx9Wf6~10UfTei6rihYSvjJL}>vn7jo#zfzvwFvpJ> zP3}0Yz5q?2c){!K0eg#T=q+s6nLp8X7hGdy@0fj@C@$^KDWECERhJ?tvEz6SdcY6| zq);9aZ_TtSBCphrh`JvB3x_LE{QJk(0|3AS765?q-=Ww)rr|OM9(FGOF%6GWJy%0k zL-?izVbe(dL!BF{sW2BST2Q4~wVYf6D`qI!3#P2C57`$RH5MFh(y)j&fCf1dK5%6FCp37 zML-zTh+K?}iRgr+iQuqjgNROQJ=}?$BGO5mmqhy)^)@^3G8NrHqaRKi@wPh@9%K<7 z1{BDMH*0shu6t)EY`PYJl%ZhCqPsOY^i9Z=DmfGnO@70MWWG3=A*9J&41Jbo75fC{ zJ;ZCI{|mXR0+1>}ES<%Xq1bos;c@8URclvu;f%OWWRgef%40j{$BsFt;TaA@!(UcpY;FmJbK(+n zvxUYeE0vSBL|$m8w-tGwdMSQ%SClK_lorTfXPS(7E46*if@Vl#^IR8~2Hj3tzNEf- zK(RuRPJLbqHc@0v@v71EKOKXXH-e-vRmaw;TG_FnKU9J33#xiX*kQRek!AVL{guIB z0 zODA_KGd2-(cy9j|tOyRYKG7}180bZ+FmNv!9*@GrR0i2aKg?8S`_ol117L>Sg#U3d z2@k{lO<~0D4bsU~V$vBIkZ2VYT_-i+WpG^Y#KhM>!o=sNH_TVcr0Y+$R~{*Mn-<9j zQ@5KM`N=^*{AWhgo3H?XMMOKr0hrx{W=9%RZ`TU3#n?MwLm9oY3t_~u1!0F;i!i`b zyTE!bjlTlt;sOd3Sa{bA%PqPj%6*uI!E~-oOt;pRSir~B0c}3~Oa5lZkJk&-ePUgM z>eUom6^{xfLv|RtlT$406^GX!uT#S6b#V8#fu($f-nh|y9bXoMvP(<)+$7vHFnpdR zIDRm8K{5P3UeSN4i?7IJuhNSS-Nzu^OA0Yj)rLYv)tOeVt=|0euVazvD3?|{NT7RFivH?#a1LQNlonm-34gt!w^rIu_U$n?wtpI4sNC4tIX%0 zBdq?CY@vOFb=Y|AT#o`bNdISaWf7_r`8EjfstO|MQr$rJm;&591wtEr@+fe5xuL&8 z=W3Ef#|-u;HFGpOF3$0w1N_FjD=NJH%!*~LLWm(mLB92b6|cAYcrsa_2_4aY=$y6m z(aoz1Ju=E$>q}qZZ0*F+?uaa}4Wr5>w2vNKY5KeNoRB{m01Hr>7R-Awt@|~shd6(= zl7gEd)~mqB@M}HZtmiB#;xzR^PA>jp2!us0}W^2jT%C*HPucS~%<6lJ}qrH4aG(Iv~E_J~&A zh*sWjJ(S2TB)$?7uTFM82+YzfD4d#JclWMW9}vJZ;*}jY>Q+iU09-bmlgDVadNA_N z^6nJ;T?OqSV#7A)3!^S_Z``-7FhzKsD|yixGfb0CgA|9$S+DLURrNQ1=uIi;)B&2v zrw(PaIHX5d^wmb!v(zNfTbByUIUOfBYws7I;!OVHpQdH*G1eBVyHA6cs8w>`4leSf`vhza0; zst(<%0q2m$-?#rusr8Tb?f&3qq3MrLH{p-L3*-OmZSz0wV3p4uH$+grmQy$s5*KAJ z3Q4sUDHdBqY$y)*$Yl4}h8As*Gm8a&Gt|>goKeJ!$79}c@c>T#8R&(9@13{-gZVo? z>}r^S>3edKy>;(%Tz`Br)ARcsSiyQnq)%m2QeRpS#I5kf9!_#og`(6q&Fy}3*-rD6+QJ?s~VlhB`fz3nx?0`bGc`MRm)AL3d=p&2o2Qq zN-G-m0z!m&4cSk9%mxEUjVjrQ=R9*6=32dGjYp%r)n$usj#v8Zb3lEzeza4;fmdl^ z!?Vl8yxD5or>Y62!^XY)Ngh7Z=zKBu-0wW=4A7_A)HBW*Xkz)`lD*mprRaSvw+6D1 zY>i>tbd>1EGErn6ePn*)nk6H6g&#ih8u+r8>0&tVT+8o}Yv_UngxM-qfxu%8-0nlO zgwo!I%QcVlOmydM5kUPh*q4l8{D7C)S&m?PnKvi9g?Yb*wcm-NijJHKtN7+HL)QJq zeB+UR*f~yGpsXFY#ui8YE=+Ai&t6GLr7#vv9eW-Iw%n|Qb>&GV@kV|KDH++la1S5` z`9)h4Q?JzBKRmp|y?Bok4w*yomb6?ENBUN1Xv1Bc;G6$VN+83sOYL5#gE?BAB`TMT zi}+N=buW!B%Qqd;>GW3QKNM8hb^ABIzW>;8?1iA6wCyQ?) z!{CavcTA^OI+V6)SH|D;$CvIqYu~oC=1`1bR%A!q zpzdX_7GOQZ0|kg{Vwy)X(qqm=+i&3iPPr-AwJy~CX>|YmJhcC|(fx-TlbV6Ek-4#* z*?*3-_0+IMQNCd{?qY&~fSL$uMJ)z|uqz0X3|R$c4RfnLsO8t`#z-{UFOIC)lJWE& zfM1TJ-*>2IGKu|+W^RFBWFLe}pMMF3<@1`#nI3JoIbC0WU1hyK#^n4Kgjm@bG9Xxj zd3^trgb7I9HAoKO#GB`t6uL-9d5j*fIyR1GGJgxT-!Yc&EHzJ0op`Pq zOMApKO{SULr_Gx;2m~H^+}Uwu9j71LBk!+*dqDQia(EP4-lX^Cnx*Fe8VNSRZD!1ZHImX5o|AMRz85Vvx$;{1D~q*k zA1c^6@5;x{nWJH$F%0N8#8a5X6hff`wCdEhZ<9F*) zVcn{$uO7Y6o4`qY15;g_=gyRhDa^#0oRMTCmAyV62a4Khkx?sgKumE$!Nh>w!Nu24 zqR=QhW{b@!x4cP>Z+x3Lg>!Lg&q&B{WBLXX{H^u~x;}$bg~ADVrh5f0eN~4|TQ{}@ zKjE2FhFSW1K(&lShY9z+C7QRS++jEi&7Cz$Ky9xRR|DpY{323qltDl08ae6t5w+nJ z4zU{4h2D+IctOhLp$I$E^x;{bl~!-Rp4ddPLuMveQ0^xU-X2pJ!9Asr?2W~iRMTqH z^z1bsPVrtsr?^<@J~cgKEFLS0heYx%yO1oMe9{P_0a{jkc5)RleQFl5pGRbJj#y+$ zEz~9wkJvX5O{qeNy~3PV8DU$EaPLB-&6ZG>+cp;)KQ{%-6d?iSh0KC~n4{Pn{G<$& zGy)#A5i$wH1x-U{F>k9lgj2+66^BILtZwhjIvgp@;s(|ClDaY!A$@qNJTxyt`JU2{ z#G>$h`U8?yrBN22pza0g5_{z2>@ue{0jLY70bbX^%-cOi5Xo9j5huE z3nFfDpNPtBGtoJ~iaGHIlG=|@%F=$->#Q~gHy9og0fDrhZgHVqmYP7gU38ufvFI7% z&SzbVP*IgJinXvV8k8q@3pO6lFr(Y<2IB8Lvx9JwAgNjjQMgaOcOucP6LXLjiUk(> zDZdD{pWH8tyz})!2^Cw&^*iDF<(9OHke*22@6?=Zz*v>PH(S~Ow(bk z5&8E+mMj@d_5<*X!oilXQFEhpEi;Xq*~@f#`t$XC13s`WsNSDNH9mF7@@2uCC4M_S z@R5TJWw18Bx401$(i2Dw$gM~#v9?Gb+Z5+{Z`A<8%_hZ9rEr9wi3E2JN|&RVv_KrD z&aBxAe1=kI)(R$0O;?Gbu)LXi8>Zc5x989$gh+GA%D!aSM=P7WPhz(D9maF%o;Kmx zy?|C`q`{TjREvXm_j$@^=K7AHR;OaGxsyqF5#0xIwq#1MWh58J6S#-)$wrd>+3Y7$ z=JyWOPd)+^tP>Rz(ovkr=y>9({R$I2aL$qLc_0I@gmAHaT{M+rid4BLT32IqaVh-h^taUoR`Th55ny{#EcG96CS>UdjwyyV z!hS7hE`d;`C$m{`9C^+91c~i9uN8A-0Tv-z1m|G&_vZa zi}be!LPCm@;v_Io8c6j!K$4SWCf-B`Dj_LDE=6DkjVh?3n z!a>o%$4r)+Evc_9HZa1O&yQLKbaoi4vicnzJ5c<@W=HfYS0TIdo1bg2=0vZNZ)#+x z&4n+yC~@2Un6}YoaQ)06l-TbA&XenN1Bylq1nhV59tv4>vJutm8g2B8UD5rLq`?Fv zXRwb?6<7d3Fy1T1o<` z3DPE?Kxhp_z*+%ujaCL>mhsjQ=tcW0l=F*sVd`uq8#il;cPoUGmBF5C6VOIn{pRJ4 zyX9KGTiordj9eHUHy^QtcVxO_;Gr1h2*?K~#UvYNn%>Kdyx$pcb#-ymtnCYqVtZJv z9ShdQezQJlF=znY(qUWGZMUI+58+z-7R{y`bBDDu)*ePx{fip<@qLFDN-K$%PKUWx zU*^EMqRFyMuG5>aT<#++E19*ylk=j<9fqYiQPL`9*+HtSQ)H!pRulg`&wM?B_K3i4 zFmX?vF`md%*oH<)MWqZbD%l22uI^9~1oVn-PU>^I9m-dNr6*tqJEC`^oDZ;vSuTP! z5H_gH)3@6aRFcfrZ|SL0o$qE3?5*uU^7_&Yse_=M#L^?UE+*7h5hsrDOdG&X>j*rh zz;SwsM<&@UsU8AB$bC}EwJIia)c)gwFk3q-%)Vw_%hR}8Sq`3@e~`hh7n6E9F(-H- z=J>574jRp87SVt?&CKq(MLQk)4txo?+0u=YLiD#^c&5l4bXynRY8uMBOOb^{WhZ9` z6rFanfS0e~J7lM%E@_w!%gX|%*dcP563YV11Iq*}#iCPgznBQ#{n}6llHo!L3o|&0 zEcj9?Hc!tZEKf@TgJ_&7m{p2dI0MNLf|3>{YTOYlrrxj@Tj#V&zX-KpQ1D%-JNKIU zCBLs4N;f++*xNhMyf%x~6!cT(KIG$(rAHP!wO~vpLD-R3R#yU=fffO3aRG>p*3t^^ z*9CAR7nOMf@;Aa&$Bno}mA@L9(3QUBc6uY1p6$d6yOYTcwh9J=$VwNotTUjEg#7JA z5z%T0-WvnPAfa{<^pBMA1;ywEN8BEJzcm1Ib3kFUB*HUNlBW;Fci7=09Qg&8{1#ki zJ12Gcuf!gH;SD_tkEmwrNdQ5pMjcMcP{n9i(`W<*R6e}fAREe%ZK@%N31hg^9?Acr z>>V6)@1G>m*tTukwr$%^PHdjowr$%!v29x?PHx_rySu-gyEAw8UwFRN^>p{As(Kna zdb?Ru2Z>Y%5#3RBvyasgdS%#l6T$5^zAY?s5e+|b^hJaxAEG^}mbg#!ttv_Kyg&#& zr72)~!$6XERRmw$?vB^9{5#7634S)rcS1y@s6L$p-g5{NCXQq-25@2+&HYS7U%CG8 zp!i9f*wqp|zbJqB70EctgV-ejrNBF^qTChPrr_yrR^;oS&gzuUfuGH~FV~7U?C%A= zfdp4W_9>*$lWoYWWn=*;w(nif-^=f6lQZv|A`jXrR~z5|Q!@_nZ<=v@O8O~@pV_7G zCp?YxzoKgyd&3{4KT<+1rVnd5 zTj}l2_$N7D=AS#?KKJr0#_(T;22h-^9_Bo*ifWR>^ zwPU5Vg(SHFF%8~&Ob(chV0dsdf6m&7VtrK4dn*pCxq52$OmTPOoOTxPXer+!P(E8? z)PH%4L-myG{Q}+@eunYJ=bya|-Tcl^@>U*=h55j+$8^WO8Qasv<&USnv3w~HwFZj+ zqj4N1z`|>*+mH}*bev!upzq)u2Fg~%(~6>D=dkQF(IOC;v_?)a4c&z5RCBVCuA;S@ zUuB#uB^J#wOJds(%je8bo9h+iKX2WkR%h3`wFsU`IIY~d} zVakYf2u&KGYx$N6^C?aBoq+nCkniVG!fOt0ewm>Dw~@y^&z_Z{lIRp(U58tO&y7qL zw?kifcEG(x2a!Q;Rdi=sD_}~)m3_8DO0rX^AY!9bO{{OTju$`d`iIo*z9-KA7Tch(DhD|b|$>+b>=~71LKO@qeXx0F>MEiZXARMZ)86NwZ3rhkWWp+ zNd}N4%a9~hq(~4)?2K?uWH*!S&Qz%n^(_d|G9(~utOR%ikSQy(Cc*2mSn4M|h_I>K z>Y&L6ZBv7?%B)K2^O^LW82sRf zsaNVkO}Hhc!Y$1{QzVpj&XWGZ%twF&pVttoP4*SoYn8@+M~GHdV+fe;u449(br@Oh z-6kTF9JoRD6&lMzlhGDLij04N%+`YNj)f_^IlMD?S+&wf1sHlPFE7)`mU`#B>Uf!T zgfnS&rBoi18&oOnx!OG>N7c%lBLDlmh+8dqEQaamwQw1R*+#)7c%mAIJTvtvalLqc ztE^*fQM=k`&NV$DA3Vv=2N6e)5KpW-rwz}2Z{p4U_+=7|&r&|=b(2CHd zoH7mu{p>OyOd_@x-q$qzse^2}6tz|(s485*hjh^)K{hSY87Q_I{xO3_Ge(m24y&`6 z*UK});}ZKCKZRX#`#u(Qk7u|EWZQAZ*(Q?n+S1_7``hDkUwl~)fOa*|XBFO;-eEcT z>Z8i|;kc7S20!ImQ-gD z_3vdR)NBAk5mcV+<(~dfUBd@r&In~q*Az$*kt*O`&;QUO%mGhyu!-RAzZ5H7RVxH#k?TSo?=MLsYhY6M*` zFV(R)b)HCa{G%>QF0nb0+w6Uj&4ajtW$TwuSVY_-9iM7r?cUL!mR1>d_fU+>}s$%}4 z82z#GPzDUtom{@>IB%c$JQ>0qILQwML0Zaq-u8ei^LhJQ!WTH@C^A+W$pyIaFnPK;`EWH<^xYFfld{2*+#KbXzRa@5D@{RCUBB#W&bfIe-RALv0#Q zkB?YPAT+jTx7DGUI;7X8&n`%JBqzA`pS83qX@cr1E=YwwMdhp_?KP!$_26zJoki6( z?3JY-@|QQ8h47lL4lq4Fw*BFfoQOiuNUW=%a4P#nLCJy7K^M1qwm$B}s$$wa(AZ|0 z4sRlG^4o}6XGwJca*~ObYW(p!DcPBSmR2~xoFtxZ!dafDC=S|eTIzRrl8JsUIXeNd z^{G&6XzE=49uk+zAM3WDw7`~=2b?KeJ1C-x7zK7NRvH7vL0y{ipKSd=U(`yh<=gzw zSQ8N1-gwfi$X^p7c0wmU4GGzz)_sa{!=qSy{T+eFUF?QfndL>q?VCbiM zK%>u&;?k%B=jrik>l8Kkw5-}(i96Ng*R)!mfjOx_s>*I1QMUO64h0I%nB1mVUDeMa zrju4|z+1o|rQi2hB8#t^}O|z1v)lzBAyI9yY$+=Vl!=g=lKoY;z zU^6WAi*%LiJ}tsNoI4U5<=H4sT)UJUrHXyp2ki2;G!5DBvxqXY4p2P@vQVd+^MNVk zvuJCbs+_abZ!>^TZ3N&wIlT}C>Kxqb+}l3c7n9)MIfB^xqL+vPh2(nl9`kz<3_^CS z+Ls%{GDc6ggD$*WF8e=Gnk&J}9xC5&gI_KOJK^;)_i$za9mV7j1Xc1LZ#Vq%{h1U5 z#vNP#oMr?$EeW3SA{O6Z;@4ak_Q0%;JOTz0ko7aE7@*e@UjVco1)=*NX{TA!@a;s1 zq(X~yLVRIdlY7lZoWhbjJSy|=GN}rvLN4Qb7cpBU&`V9RA2X$`9cxP$&HMT_hndk2)T7QT*OA$jj8Mhh7VVpV}+Q zDe~ZQivRNQ^>M+x7`7Q^!Rb`qfeH2zus=fEBYRIIpC8gIwaz#Q-$#S(*EZA@57~7_ zlD|t!KCtnx4;}xoQ_~b~VeOB%7~(&>B>X?5`*Oc*Y((vT*_t{T{)?$tQPzGz0Kw;? zt^NQ+NeYTIX&zoxsxYv49vd~4DmhMw14T7(W29<7n(bmtukeckE(wpS8ENxX5!KiY zwIJ)XpSjci#3$=pSL z#i26ZFp&NMmEkr>$NXKt@&$k`~5zl4&a^5NmLWYme?go?D& z(V&=GBwWWk?qzLwA^2g&h?qq0;_(fyK?@}E#EwLf2GyXsE1<0bTv)J+2n;qUM(y!b zI3%SWDB7jl9wa58LHQ58(hM~8V#XSu<_zo+v~T8k6dXQRL{I|1l}U&X0k^gl%t6vO_ z|2eU%;Xc{ZfM17{r+M(7-Jj|eJbFOg+=2dZh`G`3i7jm;b(^sDe}hf=t=}E&T#xW8 z=v<5P{qkQ_$^U$M-%!*lw4cwu`6Gp5{;y_4c{>{qc{^iMQ70#Rr~mErNV4jN60#ry zudt9^u(X;WA_9WoDu5y&J&59vf)Xkun8n`|&BR9R`av+MZEmvet-l)D^}mql|oy?G`G!)=gHsYp76nvfP=Y z&#Y7N!Sc4s5jfoXU!k*6hM3nh!Upap(S#iK_Vbd~%XLHZ*VCa6YOkS`B&oW)$5?JK zua}%bcH?CXMGY;=GIvb$Ng@+Xk%`*n2@L<(GMrLgIn7Z;MjUNUI9u6d_Y~siA{-iB z>nU(TulEwqmKvL?C`>#Zvr9u2ySsL=yf#tW8>|(+VWNeYm`K9pBV2|OUsVvONV_S< z2e=EA_C(8JeKsz@l%AkED^RpeG&&eY$I+-vg_{LA(|HZsD^A1+TVa6Ff0r^{%t|Mb zA$ip3pe>gq-FV`re`i@HYQ#WZ(CYw%4OW-ddlDDQoRQNs0)pkr$~*cyOwm|I?nN14Erb+(pRYM_N;m%`3KKvdi@aUGT-f-tr~hFl3v z_B(VIorPQ+9&rwMG+*1im&w8*$S_8bBky%D8gsR*spv< z#<;p+G%;+^n)kj{q(|=g5Lfo<6LAlj&trhNbVEEam$`FF*^FK4JD6nXB#Ll@A&S&-Stf>b?3+zUkYRBjgXZPu_YhU=jX*IC z;qy+b{B^qxU0d7E*y};pjphxz&dSb>uxq#JZsv57AdO_NZ|7;h?}ywQznuP7e&0P* zC&e^zZP1#!JMeEd)P&)nFqM{xSjIdQ(XM2rtjg`fQx zxq-nwQ)It5)XClyUC0*Sw0Uf7jcM&b1P02k@Za!sp%7KZw31sF{27B@cN7oKyjz)& z$b690-%m;*@(**IJkl@|L&hxwM^Ne%Jfow|9yzH&pmFT_ds2jM0T?QjT?+Z=4itP_ zlS_Oxd!l-9lsc6T*|Wr#N1h?rAReKq=+xdNsi_p+DFfzS9_0fk?jGp_Csa6y+;r;h zA?~$*$X{bKQS?j~e1Uv&iqsEcW7Qw9?krT=Bqj7O4t{m%QMmS`(krxS?!gLGM?6hKAF*eKYMGlp7g}|XhTXp8qDYi*7=${wLy(!4( zll@&Iq?j7z=B#jNHCRNwR%}!M^Gu2Ja8DQF=EZqk`1zDg8)ieqXG~W^1-jR)VRyqqE#l1KT(yvoN}LIX-Wp zBTZHrJVZrUKanz~lGH4nxZ6(#dL;~5Dc@?OSOWDfJa}0>57uOntB1<&IkT?1Q~-bO zSaP07Lk@1FDl1k%zMRR#I?0gELv0kE)*Lae+Gs(Y*g1Z>obM}5liynW=5}rt*1}v9 zX^gE%+oQ^CY;-BpQQf1FK)DzgjddA~btnewR+SdtmlD)rc}6Cuh{B4b zI5m%yQC!O?YYPFCvSO1PVHHy@%6aTh1INSs3En)$A3F}GyU8!gEgd-acO}#c8n3HQN49NEFopPcZ~%ggmtKiW>hWL(RsxV z7f5G|%hilPKVf)r&K%1tSg`LTmNcPnIRbENBtLq;a576*S&e3UmjZbqk<&G2-&qqm z)Af43a2ez%i?ZYcPy&>zxSd_dokST!B3*_GF28txS&cSlo_s`E%qZY-hpieP1~g^P z0>e=^2vgdb!2PZuGJhbCc50(r4hmc2&7eN&I5=5b?14z+~`}B$QTW*)-j_`dbB-cSWAiHHYJxD6FJYCBX1fy_OVwB&R$cYqSyccUoUTlnX3Xk zCB%D&qc(}5{rZM1L?EyRhXf&w(9jE1+T1BV>6qm=fy+eWd?3(HC~!E)~(y zz>Uq5LV4OdJj$J_4TflIIhj^d0tQp9%o;uZJtt#hPGCgo$UiFRXjdX*$>LKifMCIp zV=nX=OIgZQ#JR-IR**nH{9@=_hdTA#RfM!ejMXhnN6RSyDjsCBzrozE$52ueIgnfX z+l)=gTmdZ(I*~YG+l^3g58%^>!lN2Rl+{42!c@KFWka^WB9lySu3Sv-hy>pOJ8agl zuGgX>cb7Neg@LG$(J2IlC`@&8K&{e~@LcJQI&{DENa7?DQ!&zHk(mNR218vod@zF7 z&251xsJzk0cW+tWn3f6;ow^=xx*pUif=8fzpc$7Ijcbr|ILIBoMD18An zVl!n7DK4#$vfA3KccgvFmfSnmYSh~Tt*xcv8K9@~D(#)=z8ORJXM6$ijFOr#u5*_? z9+0`ksWbIP;Z@FX4KtCZavuHEY?SNCsAF49zu2!7UgfPogC?YLd1G3OKD$}(y69fl z`x#_#UGV0}OQk3Erjh@TV$H6XDi{gWvB4nBxSSRe3 zSdBdPVvrU>e@gJr_bS}Y>CtGSx3KK&HzIj7P{O09fKG;MMc?4*Q+Y>6K}Hd@iFb|9 z_GF-rEf7-k*2)%CkK?rCFm|NhG8CE^h2<5L zNN5+~SHjsJ99G!1g34(|1Q*(CsC8UNB`iv3-O42XTfv6U2FlR=%>u z*k}Gy^0SFlTO#0HAHR~}!;L#Hp8pa@!AJg4WgWh#Q|onAz8Iq3-JF7e-(qphxJ)pk z#)GVIsT{+2D1{LAsLZ9X{Gya5NaBK&TH_wPhA#arwNuzIT>b&W4^3X)5m!8|6drt`2MC93|r^sjR)S^e)e*Ul=ek6}Z)_RaGKp0u=-ubZ7VA4 z$76?bh43Y8d%5gZGNg?T8(5Xe*tfevFQ0G0_Dlw&EMBuH4@6XBA*z{9Xn58=&%^Y_ zzE`2`0~L}jKa{Sho{fD3vp5>OWM?_Ig-hf~pwMzCln2njxz)0ckZeGex+ZO%;Y{z1 zMKcCj(v}tAP}2!IKX@6re2z1k?kT99bbyxB9y7(YhSfzJdftLP%F7;ha@5v!ba}Pq z#lp-u?oq0TKH}$uV5en)i4ON0`fHq)*7pM|*On3FR<)F&W><@@U*?gkMAT)sLpAGS zoy7NDqGlW==&59mp2(A`!-0$5#%T20MZt;Bwxc0~vbwdq$y@2=5WrFC1%>R9cZz9P zw3H@={semz+}ECQkHR^U679p-o`_SLMzL12XfuVJHYNjaZZTMQ=Iz&f<3kTP z5xlK{QgOM^GdUjB%z*2H&O5q1uT#B~gYL9n2e>fZO79af$*A;+t+at!-t8L8yrO*UQ}_2h1k{Lr z-Doq);2!xZ&n^h)D_pmN=mKEz@CK?0<|l* zlE6ANuLO%*zHtCyQ}~~F%(}D6mWojokmdcPwp0~TX~{pi@QI!RDNHqi zZl=zQt&7sKNK`unuwghdAF==z(;_uDUN$Zi&hsA6t3G1jfK0={VK<*KJPUf_P@wKz z&>K&~e$3WzsIl}P40KYdaEmdEX@LfgmQf&J6sP;UnB`%>XBkFGS&0|XyWiICaL%~A z+OnH@mL+%=%L!`Z@sj>RT2vPxRI`ACU08T&@b8h*cmCTuSg$W^YY`NhMG1 zi1oKd_J*IDN9h=^xS`_~V=CuTg=~m?uL^BZ!f>)%^Oj|H{jE+q{Ed_N~XA!p1Y5Z5_Dv;S8_&ge)8OQaYhc^sFRaSYY7A&rrV zwx;h&EsU*HNA{+?~KQjTY zVh5;x6L{Na8s}I=-J!&9rVwsj@v<+FDF~LRIm~SFa^EzbG|L+o{QO~~FBvc2`YioT zyt@<+AnA#&LKiiW0RKjAUDMay8rxWuBuX7M1}SOc9;O{@7r70FZv4BVC9M?2i_Ipy zctcO({p<;XCp|;wWRFpcBL-d+MY#dDoWW9w9+M)1saCSVmD4&DiIgeC9hH=3xJdbi zVB!#E&1G|co*hFv5N4+qaKb0#H!lpWu5X#i;Y{>-s#iPFFQgm5L!!GL=+{ZtD(t;2 zklJ5^_Ph>JLY|N{_e|MhwSBL8qBdP{=v;8%?`&D;v}2!iJ)hQx-S`6Yoh%~!VjN$% zJs+5A-{IT&e*ItHP_o;l{IfIpuEI zd{UuSMfC7T%6(RQ!4{wWl>vS5F;-Qti0)F`6g)(N=eh=oqQuSu*>*Uu9r8Sq*j(tI z4td3xBQ1%|bV%`rU~!m{;F`?nTTJPvA;HN9XkLdn|+eFq_*k@54NfA zCEbnq#`O|vJonn9?X%r5-bUkst7Qu6skiYRbNB(1V-*?s@`)HaXdLCdS0*5b{L>QldPTDEP=fZr#BQK<@8J28mUd~3qEQPZ?D~Oko>gLE+YTY;i zk<-2qAyjd!1NdcjqO2!?R}-j+o-o1c(1^h5V5`Qbn?)HBX)23!C0orSg*PSgidTX^ z?)`=r*ykGj6cb@jbmoVQ+E7!C2G)Kk*uh+FpuUcfx;}i*BzTi%L{Dq|%UsUdi1p`} z0Q8x#ioF86-_XlU$=YDf`bC^}fh|s(qGrWpWk+zULZ-PmconXmkU1l)P!(!im2bK! zqU}Ko(;I_#^l(PNzM$L{uXoZ?mGMirMTX`sJky#T#@!bu)ZJPF^e;&K_ul6XZx!leNZKQ zBfU@Dk?~YNLq8$5c7R^Vyp(u3HZPq_P-2&`4aSeRgx~-Jwo5Be%jGqu*zU22^tIsH zV}gfAjLa$?owVXF2kLSPAx~>~_yG#V1Jq~~#gA!jwVmV}g4C@F>&ryAN1Ae8A>o4ao5sqoxT-f{0I$E+E~45m zAgZOko%64Blg+ta@qdl4Dq0-MuCZO3BS&r|r7f`*y|V9LVEw;nsZI{YtnC#^dtuqX z;5J{pTp0awl|F#64&6?vz7V&@ZcN+n099I^N#npxo(v^FvwQ<^?;Y0O+22UvYV&Hp zldEJSUNV6`EpzbdD*Y4xQrd*^7AxKr2l=W2@~c_mD~ z10q;`bw6Z}J==7AMg0#l3Y#W-zbS?vV&{*p3zJX?9Mrybqs?J$dLhC&K=zh2KC3~_ z`TzCp)aPe+=9)fO{_?Y;F8Yx&(f?PwGX=wcPGs8shviwcs;)AYI)*P?RoyJB64LML z45Wwrz+keaqH3^05oF{7Hfz?RZcT%LUk-)6xE8iuOL_}d zy3gq;e5MD|z#K;g|Geis=7}0$;?A%J}EFyvC+Z@!D zOh}-4q0~+?8IL6_B5A)FWl}4;2d2lX&``aT7&b<=M3q;m@~FQa4)r(61cwdK=uo02 zi>ipHP7ik~=4ec$NI$C3tR!cP5*w^qE05^5UvA4pcDT`M@z+S^J`m_rXM>I&Zct5{ zKLNt?F=lM8g3kIT>o&f`4sS3-NA@f@s_N)_JUqj!Rk7-n$>>+R5;Bz=aX_UBC}+-uaCgr3 z1igL?SETh?^wf+8W8*P*{cg}OY_)R{zEYV-mP*jw1FyRw-| zW_B+$({*i;@3?M|{8;3=nt~;!XYjOIuVkWxe~OGo;%#U>_paF#U8+_8YsKk2oZt}R zIeHT6QohGD!s;D`2wRvCwU>adZ~2?3#1O5Ob+ca?mW!?XMQaePh1EOow?G~{acJo( zDxo3~;`pM3ne%X>R!a;4MjY-H)Wn4+b3&1^_u!zCaz3!M#FVIT;DnH8&@C6iBS6+S?{L zbT-lDTB%?FC}nw(dh2SEQTe@%Z|u!Yh}Sfe+adICC>3I_J+*7 z#InTLm-7#(LA;7}T6~UShj_Py3tXCKDcg_B^tyerV*T#2`aY0lW8|rb!tHVo7xds? zZg*=P^|ko^tjW6=f|8kw<^eNo=)ysyV$2$5;1($u+U=B^pOfo5C^C;t%sFy14#o>x z`#sa{?2OjKk+Tju3YP}q?mMV3f(vtsN&1qXg9!ol6h-c?H{%|J{uqS?bJn}N8P5!& zp1qekotx-;M#A&_F9M8zNaP;(-YoyeBticpUl;mskcfhzlk?BHT_HnfOXL4DuN14y z$Ri7)e3j7BY|)7#svw|(*7N&|f+9jus4xx-DL_2um!aJnEk>yjV21ER@4#Am8;Po zWrZm_?Qnv`l`K+8QnOPStOH9V+`mx)1)gMNkzb3snqhz;y{~DK(K`zHd7Y|Z?XXM{ zX{RbOpYCiJ@Y!*#%4*y*a~fxzANz5!SWIrjXslOMLAOt=Oa?cdYyr{NI$Bmf5n|j) zw~Wqmj`DWa$!H02X|AlHB@lrTpKu77O>RDb%$a>|>8InMtsH zIKgP;mkcrJm6GW#u|3q7B7XO`IDE)3^^Ui;YaYj#*1RM*%v&H?#pc%n0)qJrZzX^- z+JirF|BV=w+7!SRgJ~kF*$WNGY%?`LF~+jP#u&u~Mowdi>rV=`44E|&Ywt{3bci)P z_nVL$=01DD-|Qb5m5`lFMxGo*c)E(vxbrBMBJLCzG=j`cnb#-HBFvIN!uZ|_?z+%` zq3zMW0F%`<%C}3@lC)?h0i~yNEMAN+leQ+*%6Zc?JC$3+EHa37*Y&%ik={sd=@rh! zw4~XZQF5bnC(0^_D`=zOiPd(w6EOZ1r1!Z50}vA%6yOtC4pk1$Dmi7W9(;@{p3m)9 z;>|^P!-!iSA6-K8iXi(7!{rsj9Q?F=dfLZH@O!$DIxZFzJ(%KpBt-c2`8NnUUCCdB zHw2tMVS#tKzd`%H4Tuel4VDeT$Mb}Rb{orqCG`XmEJUL6@t(U7J}## z^y?WVbq|1eMQi>Ad$^>)pA?^B&r&IJOb3v~aX#@))M)+e zdDMl(DVJ~!v+A9|P=oXnxzhLx>R{L+$fV%jqP!nTPfh`+Ryb;;O1R1>9{Q+J}EpVF%V_Ay?eG?--YZl%i zZ)ru&-}h|x87JR_ZoBW6tD=;{#W8e(d8dTHxX*T|>MWo{j;^)5U5x7-%fBQFvOxo< zgS+F1gc`i~PKw_nAq|Qzd^Y!Rl>B(1KXID#p#D@Q31wX;Mn?2(Vb4qs8Ne^egy?jk z#sw&9olCxiO&cv>599g#@ixR?*UK(f^RB&usd2vnT{s6iops7-YLJ>#=~iiZX%uSM zhL&zt2hU_TV%Pd_K=ww;qR7&=IGAsrk!mJ7$MhH-EvQCDQ8vRNomXS-My&U-duCGKR&6w;jasX!ht4pWtP}44>4bDtcyLNJXGc|VfYaQ zJ zS_TfciRFQTB=>AQdI>gbb{R-42Gtm7*h}hX#ek&>`Ru0RiLz-4hIyguNOtFdA-}m{ zv|Ql94=VE^EX+Uk;X{k!1#Lb0*buR0Z`uYIa$J#06$nanwq6;;&b?Q42Wi@OV>MWmC6^?fpk=d_zvrONPLi` zNxhZL92SM_tp>T?&~~t{7koYD!^RjwkBT#6H>+mS70F#xFBnU|mkb2vj7F;DeH)LA-^lwvNmV$)u zBJ@8MN8DPlfwhE?6Q?e@Z|=HAd6@bAvVDT^7c>+RM{q$MQTb#-^9Tu3%MlXNQaUhE zxvr_&R$|_%@C?-Yi9wxVdb|Vj`8&-ou{#FgaedYtULt6zLKBT34lPF!ELSgLG+nPu zEHl|@7c@;YBFt?S7o&g12*++4bo1v&BzpDsvNKqm(WZz>wSGC)8K!n&k9pUedl%E6 zd$NnvojNwyou>0H=2uyY+l;}K&pAxHNq?|}YeCjXyy>c%Y_FUJk%C&RGg#D`PCRO;lPhJI3x%7qUM?UjK|i zz;3zAFtD?U=@eUx+>zhfrZ{~pO*ut^Q}A)wFQ zI2Exb_ov_$H1yBG&piyGMwHy-|IN&sCnxDCYM++-^%-8STsLI?qL(w^7bQUC5w**` z(mN9k0dUD1cnM5&3E^{z@mUnhR^W&m0~iGTJ_17o8}$wn_Y%hNFDUROb?B;FR6V{O zV>sALuF(ji5U5lVHpZ~65GGkL<4_q4zNV=&auT4zxb&d#y|Ukbh&sr71OdJKQ2^5Z zbO$2;{aTUvC!EsI=07Qygn!cohVDr2w=tH42r2haHYKrudJ76cs1OoS5o(qxDRSD+ zM;}b+YFl%EgSGVqU`u#Q;Jg5SPz+V!Cg+h5A%Wja$Lx5RnY;Ray?p_zZi-F@giymS zIxO|G>a;ozj>rb$hNLeN5z)Mh8&Pygl=W@QxReEo2frOCgsj0C7PG#3UHB_p4231s z9fnEujKy{;^`dM^VCifk&jrlpbH-*h+aQz#tMndHmpj(0H)<$uUaFa(&?28=!$XNfMLM$PF5kpQWyqcAw2Sfm+xeUyF6#O6)Y8 zd+YUdo*C1nG1wBtZHb0OZ>_UDV0+&GUYA~dLpPAowoSigEp>~=mmmpO2@B?45VLh{ zWIw3{wB~t70}vX145+5^gSMy}HMCCsMBUE*%dX({4o#K&qS8;PhaR1xS14vbo7d{F zwnDSS5zQ=Mm~BdR*AeARTrz`|IJ{=(Cw4?#QTxS!i!6VW_S~~uojk#~?NP-rsv%p| zkYNsoE`As$itBIMhcBP^3t0evgw7%xpc=?{fDZL-QiE!jXD-Vdar!@W0te7CfGI!p zJMu%n{}&CXjJ@%{X-oeTOsQPRAuA&MGj!>uM4}?nQ;ZF_sGuPL(ryzZuuukr9DOUn zZIDjdHR?*ZBj@((rvZ?C-2!@p(etx}Vt9idWNpEsFGwLbaylRXdE#bv{(ErqjE^wN z`=>&IF-`<2C;_G%V`PhDeymKUAt6d4L7AaKfSlxGD}q2FVD>V#`g|9IP}hZ5nVm|k zoW^B?m7M*lp^kc>@_aJ%26{%5t*hepKKO8=<{&l1K6%w|*@@;Ga!+*-@O*=|Z5u69 zD@N0SZPS~uaYEx{>(|J-ViQh%Q+G32SL#T{RD#MJE#}{fJ0N^lPMC*fjYnr~2N|DGcZ@klEs&JNF)RoG)cay;kOHeOT&#xV&LcXnl7|9OlfHB; z#Yl-@voRKCLtSC3XHlZ8)B1cs6S43Nqy|~cSa^~S5zSB>#!A06J!&3A5vNy=zZi4< zSVd!WzeAEqTrvmvwaGApH3t+rMnD!Rth!0eHx?S|Z8r!rE0*5b!0IVJ8ajJSY#i-7 z=2^u>GP3yyg{X5)nT1RDMzjL>zPif*jJnz;Wt1C^cAp_d?&Wm$og>dy_|+nk0`pF-}tifNL#!LAhYAPHs_vpX

y7?_zm*DO`f>w8ZueoiI)a;{2`7@A#JkEi=mHI4 z^fiv!i7&**C?%Gelh4^T<|)(%-0oqxfZXPMY{2K2;Tf@A9(lQdC)(~;-Bw*D<@91V z`j0{AYeS>dU_Zcj_~BB4|2~(>iU|LoF`uohE&mVZ%{CfbG$~R%djkxvV4sJFhLH3s zNJvB(G4N#NE(|+=t=Ue~$$qG(QIPSySPg-be&8QuwGgVT%)Zol9sfDXOt(MA`F{HV zrK~bq8bGl#jqkUGc5_%6AWD&;$Ict2Wpi|(|Q1+*CVe= z&B%Ac{W*Cb?3GBwe4(i0hb37BSTi5Tpx~Hc4saYk^XogeiVWj?T7@%^jp5H{{a@OB9HYlC6 zDkMu%Kp3qYt?X)i`8ew@~6F@uI6`3h1vs*X$%FOH@!-GCs%3sVXG z`e-z>#eWe;-UAY+zBz3R?8jyqY2IQqmuca))?6VmBs^#s(o$T2 zf{uXbVt4gpccGUiz%j%nY?peNHVv;J&ITKKJc>AH;7!iR&CWnLxp-469a1X&soN&T zG)HjlTX2l; zux|n0@Ebd9qLL9ZyyNWjlTY8{>=}N3Um>7M_dFvIXi5qV6-k=%wvZ!<%@`3mLBW0~ z;fkxsP~6p=$v!KX@n0LwgH(f7HP^2xc1_V@(x)-z$?#7p4(kK(kFqoTOars7)fpR) z%T}*GV3vc-po1D)uEVY;rvfiCQNUqw;TpCnCc||cA{3qk z>;=vOeZj;M$p|%)Vr)SjC%-;ISDOyN+xiqKomS$+6osKGLMe3=>nid=bO&)ammJ`q zQIjy2zr%j*zvy50uAznHwpgr=d>{IQrBc)lpw-7sF5r|}x(;MmN1)4Ria6J(Mb4_s zazebpDI>D|{&Tdqo^pJq9Sva6^jk6kQp?gJIBMP!y(=JwgBJ&0uW7L#@PnHNfOnwxyE%>x~KS|y4ruY>IQgXc&idvT>2W2}TSAZ@D ztuwB|IYBd?sEnw$U&gU3DVd}Zx}C_B^oxthi!|5tD6z3tbe`uY%GbkF&p7-(Fq?2Z zKvB*wlbm5(oMB2?W0y*bCz@$RA>S+6d>^l(TWi{Db%4dJY@P&f56g`5o@64e&*u8eC4XWe^j7&ZZvk zxDRrdyykrN%liH}@yq_En(=wOA~z6hX5qRe$!XZ@WaGK&d%ledIyJ{#4N+#xa_tMf zLC*u`uiN7U$KfdU$FJBEhvSLGuWUtMye+`eQyNSM>WWfd+>l3^th9P5$NK6Q+_Z+v z8s?{JFTH#rXYI8comu<{1-9SMwS7V7-flS1M}2e-`4$EIf<0N>h_!X!2uPOdhWk)5 zoTkp+rrf=~v3h|QeM$CwZ^rFagt=M2%XR%oh5fFUxZ$kBy4kqphpXy;clFL&eACC~ zb1~?iKWSytaWF{q{2UA2;oL1o4c_;5UnVm`pQ1y{k*RVWFBBMe`z?FPMp+j=7+{ue zid+g@y(w(Q?a=+Feq0AUP{|^dsI%?TDO`(nhU~$%L7;97UFw{-{w4n^-$W@^+^7Cj zkawCrU;#h++)mU>Q>?)Oc>ZNIC=CC$atk zt9;JnaX=u=nSv>ush2Pb!cA^u#tQ1KYa{dTTZ@Mq#1MI!tQ8Sv1lfjgJm40P0cbp+ zpY{Try@7q*)W))iSTB(P!^+C~{B~2&5Q=1eh*9PzEq9P+5*dYsjqM~6jYu4MWF1xT z^9T)5?C4qtGr}si#goUzM>Vb2Xe-g0Q_P5+oz=$jItT3F#)LhfJp%{qXX=E`S4xTH z*vZo0uRfPUH;L^z6oTSzOZ&{;cFHgtFGYpb7F+SeRz~!1Bw92JD|@KJf|=O?+UOpg z!^yyc;}U~euPKndT8R78{35!v1x|$6i#e0^8>$4jV7O2#;(QBvTLw&caW5>ej?SkS z&+FOTdtZUrza(B~gLQrDm0=wq$pIQ&rEH7%=a);?#PvB#;8tEw61{lxi*hiSPz_|l zhIXu_+-Nt%$zCsoTa1Fkk4i1abxNVM)lq${lEw*<+^TrA>PbhEJ`C+T!(LJl)ka!| zhuG*SAn>Az-JVRFlw&&xF`7>`GZrs_=(06iM1H9Uwh=d{2+?@#X97Jee?9Srcq zSNZN5{gy?nYuIL1srrjz8^U+NhIxSs>gw7w2yzN*8IiS<>uQvxPY)1{9>?xw%xmkl z6+jQ&T}D*QnvWFSyz}P`*qbHNC8#+u&>t8H$D^1(K!=R5d zDoxrYB#+tUgHw_^kj=h~@GM963!Q;bn`R)-ZUgt*8|r=uluh9W(C!c!fYvrno?8g392W~}) zDMyTGj_u9(E0`;#nBi;Y%WhAk2C=>cTc}s_li`(-BBBcHmjZ)acJg*jC&2w)AF_Fn!k(eTy5{ov zN)`0;GJBdVs|N{_b;Og5wa$=B(=(Zh%&`;%9gNXcr&!A{j0tqchGh+A@C(y&L&)59 zaXmIoW~NMu3R0YeUe5J)tNTTULyR$h1&ob~Yv)Q-OSgz{EA0%Bhk=u)rC=UCS4Ye@ zeg3phZ9va^VoYQLZ0TlKoXJhRF^$ZvJ8xI0OPvR2^GVbH3K1;iV>Nf5xr}{SP-M7j z-uOinr1yqlY~Le`#*-`_N_e=(lixBmQe$7vfoZxGA1A(jl%11_L0`xgxM<`66#vo* z7g(xuY9cjE?WfIrobXkH`?~$zR<=H|Mg9mb zrSFyROR3+?`0)uvYK;kw69!X4VdfbLoZdv)e>y6ao`tpyfq*vK9=|2l5Nxx>4;~JGp5X|{@ zyd}lQ$?^WYUDQh>KN)}yHnh7 zj7Q*E4$&2PgO{?i4&l=Wyv_d%Cw+s5@M(zjF5c&3;P;hqQ!I6(-{+FH)6P~Wsmx1I zlC_+|n;yh#Iw1#BLBDN1p|W^^$@r!{Zutb-UHKsrDs1&6)MR(**)lcTRAa_~KM&lc42sOx*3%;C(T4^QVYy;_cUL~GRD@onnc z?~V);N&xUZlr3i%2MF3$Rv*=hT%HcDfOyb&TeT4|R5~~Dl2?CE*nH3jC*K|GlQ%pYGgHrm}G!mdY#hU!ZLgx-UbN`DX5{*2 z^u@YLYNGW)q?7!=0{WtN?g&$+J=IrZfs!NgJdsf#Ya)8$6U}f~3|86w#_-MQN?rdx zdx&c^uQk{#nr~V>S14JM=Ua%~alIrk2S5=AmPh3_6aY3=Yx!a!TwwCo3>imw@8!%U z;dLg*RNsw3eMY5zBV_F{VSELap+#&z^gdQJN zPl{_+lbWKp+$J6lhQ5lvk*?iEP>8HIxYbwE04S`{leFLBv_i;A zz-7e&cTr~d&fCLvkv{FJzd*{2`#<|~MI0L;^ClGE61u_Cj@aJBbp$6L{(2XhzbRt@ z<6TtQW3GfWZREgSV%dSQrrcVvDNxxbmRpaP8AYu88IAr_rtH;TJU8u*M%~L{tWGjX zOffhWH$QAT^PIc>XOVE)blU-UiPrj(si8EhHuZk*c;jg<`Z(4hBRK`o`>>Im1t+WK zU^N|?eK z^cVUG=I;_dQMoo2A3xN8i!=;VWzwl zYit!$?9^c#YO2_=gIEh)(0OELm{oOzL2&3@lKJdoAfV1oidX- zO8G?+*C`?vF(;Wv(gscap(KN~UvBWj^R*80*C3F7LzXzK-?7tkZ^cq_CnYo^r~fC01*@0N+> za}+&K@BL4h4LfGeh0TGA-HzaU>5M0hMV|%d8tH`( zrrBGc|8IdSG`(8{_dVwL{;ik)ul&US!Uc;|`W6WPnM6Wvq8hJEAlM>9%WWvsM3$$? z`vX!YEchGUz*B84mrC6^{j%!yB6~MgNHRePPx@Vch;bbRk~lVbmCIL2{5l>!E9_bd%Y>ek;8@U=L?1uk zn4#@Ppf4|g7&LIb$++6wWOj$8AFx#?S*EfC`KHBOF}L8WL4I!0L}M0}YplcSWa_KW zk;Oa1V^L;PdTq6t+mE$@w`~GWqbWQ!le#SZImEqj_?XmW8AF=U44GD2x!Sh!HkDIf zt%@#!)%(;cf8;E@32?f4Mil!7a2lMnQAFpiavGleEyPMwS761_WR=XSOA0fEB8EAJ zmfGL~o9vwQrn#xh*DT`OV%!+x5meOLaa3uE?^If!eTE4~+6f@A)u__mp==}LQ`Po1 z@2$##8;AVnAm1SVLac){KsP#R6-oEg5yHq*y;rw?dTgQ28A5MUWy+%%!lpb@CVSNB zg;Wur3~umaJ|OB)xWRM-$tUQ#CfFKpcOI9aht|G1fc8&jGMuGp4c>5^LYd8>=78m; z;$#LcQ=V{yAym-~Z;%rqkK8CYhmNhEC^b4@b9iEkC?T_pKjeVMNtP{n(P*8RBoI7n zJ2e9=LW)(wu`d5fYSnB4__5P1FS zG9n2PAF*ywN4$~r;^}C{`KTUvzoTZZ6EGYXH&bjEZloO0!zG$~*$JC~i_Qpy3rYHU z2(iQy!!7iS$tb62qUKFVKJ)MF7MM$1oR41v_4lVuVi_S}L_YZ+$l9E{S4aUq#Btj* z_VP!V{S1}g=n)DhD%D|lc3Elx>JWEm@oSs2e;NGyXY>BgRc;#ow^GXet&}qVZ%V0x zvDJ6u$=Ue7r7!#=!T)o^nj6P~Kv4KQ{-AB3j)mQ+5Q)IR6<`t+(DF#Hn{yhqx2I+j zzg9EJGx0qC`nT%^x-Nj{naaL=?ddR;y6xlrDS)cX)vT|-IrNK*D({ad3$9`R5K;^3 z7%BzypqfLWtdTBVjbKn;7IeXu=}6llsNj{;3dyvmHt3%AoGqkNUpkLE>bZXS8%$Nf zZ17OV)o6--F>YDaFyYo2#57!cd$Eq}bF5tLlg_i&IHNvf*RBS3K-siYkMEWdm9mwzQZ*hG?+h=glEbkix?)4Fr;4@ z*3Z+}<4YT@(Aj*pj=$;|iU^bj(=6d=3Cat!2E#2w&Ei<;WdyzEB^?9o*DQ z8&JPOLsbfqBNRwJtGsrp$-^Dh1@zQd`w`;}@t;*HPkug-Bi0%i4El-C@T<`kJdWSC2W{0ay) zSPkZYJg%;ZWjeOpQ&=T~@aqMrGREYph%Ax+0De$xITT;AFkLMVnsBqve#{o6Iha{z z&YI15h3HBrtexdXXUC)_jI)&2zr972wEsg%^X*@>%74xrY$=+I#P^x&{XTR5t533` zn}e0@e+4~8Dr){S?(_+oBzcNT*5sP2v3WI* zMh8}~aLP|4InLIG6m!Ihor)0(x7g(+f7CNxNo+7;uH;5(Ux>@+YAO%&WSzT)h(Zrt zcp0gsLw>@kq`E>e@&p2O{tlo0b!`?F>?-v|Dw8i=XvK~+YGc0QjLf-~d=cOHi92sw z`{TDzI0w{A;bN69Xe9KgrsJE~SG-8O4f41ko#7#5ZuOY0xLc5T6=4|6gdx(nBcq6` zk)3AkS&M)B0EsMvf>`DizGxRTWec8AS)A}%p2!vCZZ|!mgr*QM@nAMiZq-XZg>4!W z?#2WP=J6UyRVKOC=%4T`$sS{QZbW4|Z@xD=AtEH4-zJ`dAu7+~KW-7gXz&i0OVYgK5ME z!)kb!u@=ez>hEq`&^L;iENJOJXxf1$?A zCK~mm3+94IOqCrLQe{mvTWF~MHtM8%MG?lyaTdap$&EyCO~$%)6&NU!&T;D31?^Uw zi&nk$7n$l+YeOx=Es<#f#^DLJ>#4b!13R;Wg9wXc8jlewJ6AAZcN&9>)bS?VFy2Sr z^J&b&GFa48nhiJcGcBt;l&-NdRu*iTsKd7DRj8>$rTS$mu@>pMsZ_%lw4y_dQu+JF z5eP+aZE1vDK`mpz@VVw7LyLis4QP>NiY7ZLJ(km0NrIre70QkGYp~izPQr$Bufk*? z%LK(ch+1WOP*pKC`n9h4%Kohj(ra1zlXx6c>eq!J>oIE{uyOo5=e?cfQ=@jsR74sg(9itd&=w41&Ji<;uKCs)g#YaIMU5yN%%7LTVbx~6lA}bKJSdT1y63PQ?KYY)8)>YA z%50!;Zo;8Hh&y_9V3=@RtE!iD8K+*^lp(NMjyrEgQ+GZXFXKLWtyrCx%s6xGbW$B& zxvTvBvAZzO(27w$!24KjvW{AhVcS=%Z=7ePS#MzE&giUMk1u0CfWyI7Hf1)s|F;SA zlQR9s?UCxqp^3ImDum{w1M$I6*Lw=|a}=auMu@cp2Zy7&_c?7=Wt1LuVl}tEW&a+0Cfp9zI2==&r^^NIHhi_!9>y zvQ!1*9eLjtN*=$;*YSqDG>D{Y_(ATN-7};6_t?Q@pIi$7lHieB8U^IAebF{ z#%V(yfX?^R!I%Fnf`{l-c$C}<)~%nS@u#HQfHQnUWTUd>C+GK0-pGMH5;IA-M%o(f zirA%z1!Al5$tdL?az_A&+Ejq`*x$l47#%HPx?1+ButFi(i5XCxVp33M+{27zr11DGGOjZi*iY+3ES z6>m6^w(JUodthyMYrt}z)1iJKjz4EdMYA|%+*MpX|EB~=f0JLlhQ-NvN3 zR8UZwU9N-76+#N82BGps7Qu^&bI70yVr@I-wsY|ALC!D+xAFQ`3kTgZ*R%+bC~SrWs_E-g&mL>h zl(BQ1Cuz|V-OX^&J`iT+=QZ@gPprdSLMj3n$B}F} z6u0Xf)mn%}6HwK`i;;Q%lcW4k6br_iZ;j&NJBc9s--;_#w|zAFGorOMwfS zaq7mUHCn)EzV1+fr#xZ21T3V|gHn#s=q%8Kp|OE1rx59-tw*KG_|P~N9%qBvprD;R zfoWXXRhr5i>Jcr`u3-r=ag1p~T*lmJuN=LEm1r3}Tc%@sWyR#LUBBh2^eO*W>%+Zu|% zvgE1QkL_95X`4H*g_DgjmHallHpYWoiFpe1+J4Z7k_F+zY;T9aYr35X#_^nJg}=U% z7+$%EA_fcxn`2U|X{HvgT=)hQB_QQLB%53cp9n}0q1SAgs|ta)j4My%Wv!K~5jh zg}IYNrA}O_91ADi*zNl)aNJ0{b1R+g79%QO{4{En z!to8AoW>j4L#+{5yI!1d;8QGCor*!m*%$>u%OKHBgt}H!MnZar!4@)5^!5{C7joL* z01Z0$SAX1JJEEO)gYPZExXutY+NlAAyxkF|!HBV7fSwd?@Ab~MXv9NAPVLC z9?!(Wb_T{rX4RSvw(tJ|sQPB-eV4=Ef#N?tsNYYv_NKJ@0DVIGPlzD zQd=|n8`E6Yt;4&1oSAw7n=XAA{c&~eR(+-dOevZ&L(^5k_w7qU{3Sg&uBN)rua z4I6+V$ndiv-H`{o!iyoIMG=lVLV@T50wQtn1TRtBPU5u-_Y zG!Wxim^~j;ijc>LsO4FbR8KMkSQ7MR`hUf74o#@rpTwa!i+ngBRXL zx)_Fdutq%fJs*pHYO1p#U1lTBl-6*IiB!8}Ms9$toh?IWRg0n93bD`cb4UAi@szoW zK}&s^`&IahX&6#F!~E!D-?qvqB!wgXuR2t`el%(99l!=0xz4?A4$MRfWS(su;xBu8 zYzNRv@vYIq7{fsjyK@QC%92)g{7||{*}o*MIr~m40?Fb871EOPtS#pGQK%J)WT%Wy zTKM^L+dC>sa8VeeZ<1{YCEe|0_jncbDl`sbGO#mOSAse99{kn zm{aG^G;NL>f3TQ6Wry=!rTU+o-hc2GXbVG>_Q#yt4x}@^iw*C)3iL-iy#seb)-$du z#jng0Ju+Dv)@SlATXWb5G>5n=49m`z@0&ieudbV@o0qGc4BsptS*8aSJH7*TFWgeT zYYf}!Sw2@rZSOu|W-Z-GAYw5H`eznolvZS&YG}1>4 z-RpJ|q1FSesx7-ynXD1$9Qqg!su03alu9nS-%fT>N5}bw@LdBFglY9n>B)z8Thj|1 zCxJC5zQ?)Br)!2Y0Q$bMb;hX`E?r}qm({|b25RiyiR`D!>sQ`9AxMi_Cgx68b&_qc zgvJAd2)WN{uMCE!QKQZZMbwFx@oh&Y*2=Rm8Z(wg9CJylNsdYc5~2t=G$zJ*nAlQA z8ikOIdTr$DwS!`Vae42+)tc$oa^pg)GtNI1Qh!y*eSJAie;Y{#B#Cl&B8xMwN*UKB zty07xKJKJUZ=TJ^*HRN&Nd83h?|AA%yX$nFunF<3Ei~MfPpTeUQp+Wt|0_Nh+bNOE<)C~2smJR;EqKC z&mJhym+As=7>Do?uMDyH!LO%7Y)#HOrHmo!M(Rum1PwtOAlUR$Y)CBH^e@H)kIMsH zp6FH2gkEO(EhE(id{~90YVrD&wj0y=nG-zfSg`qxb!(oC3_qVtM?+oN;st#fX%DKJIpr^$1g<)Om9r3VOt+_2v|MomO2#Qtdj-c88Wd~rY0^nh#< zY0%WS>F9izfiPiA=YK4Zqpv%ri{Z0Iu0?UMFT(@B7{wn=7(q%GxsAqnLv(hV5G^Rl z4Ra?#_QG}>(UNJIcZ``E$(P*^eJUbPxps2pnze`5ZGM?CQLQDX%Mlj%6a0hLflx6V zq;+H>aOlyzibt@Id%W|w<&CTJ6{zzgZ<^VXYY^4l+hjK(nnt!ZIpp^OGr42f@C^c$ zy=eG)v_5;PVlecu%8=Hzb{t|^jW!8`K?S2k9Y)Q%i4atfmh#D$5%3mH@ zv)RPaQR6!`>2Qi2`uwx1stSF|DP=5l*jS`wuj=2c6XrQ)WMhzmwXJ4ku&A9{8m=#A zdC71nofRlLTk;QgzhTi@v1tyxTxQ2v4+#=;x+PYZ7qa`xJP+08cU0Q&uMJ{ACa!m| zPIj;mlt6XsQV8>w0!P_fKy94`)OU?uH8Z4q%JVnYKf(TAv--ymzyFldq5QWgowe(~ zWOV<$!j2hgO!nQ|*8Ucs|63a$i|<$X4ICWp^$i_`+-&r%%?+gmjP-5)y@XWJboqxJ z3EL`#UZl_`{0kL`pg{b$-=8(0H7rc(N(CVaVQ%rFdGh#FHb(MF7i5&{SF&-mY}dg? zChfIGxooX*-kolQr&OYOaZ-@^MRteBmq(uMu1rRsueWs^AprRHDBGXBfMep0n4T7? zzIsFwqXBs-J%tEbn}K{+@s7;++MkMuQ{yN6@+7z8h%_T7gOmdH@_h{vk}2Xli@-GF zt}xZ(uD?8yB*>s#h4qx_Gf@<&ec3TMj*wd7{@^#2km!YdP(d(5*hwUxp!4B#y4$XN$%Zk-wAj!9RQDla-hnFcG{$he&Yxhb$Z zJuwLq&HMP`a~LR(m_--03DT%jE@~$_b7iGM*v{iMU7kmrM@cSuWXN##r@o!O!{uXz zZnPAd_jPNhe%g&ML3Rv{J6QDAG#K6o9ueThET^XCKsvaV|OGJ~b%|oyo$M)gOMB066Vt3W2a$A@3@v! zwy0Ko1AQ%{mS$}~NeDS?hF0LQR!B2T6U@rxUAVko9PE=DwX@c77EJ~(PwxEGJJHru zg7(V&?NWAezGW#LHR+xYbOsBVu<{95EUO2l&sqFIrM2PxN<#G%q0CD8(-A*_CJkz1 zhO%o8#Aadf&(NbyrO2>m#V;W+Rbt+vHyr>_jX66|Z=Ec;J z9vb5AJ>PG_4u#W`KlctzPKn9T94ai!VzZg{ZZBhQ6d;X}zu+;x0pF z%r2wfPN0qJ9ibM=@<=H&+ID?vTimnuOa3UD_V%n8Npm$(Z^~0KMs1)ar!id5lKWkiw@H2FQuL*q52#0e%_=qc zS}zk;(7GHCw|^bj&L7F{6PVO2<~txqH=n%o84+RHI?k-(=F}T{almjrcm5Wlg_GXs z8x`y(7`y><2g_6M)hl+rzzi`~q~~Y8l9wJ-xK%EquWg7##xrSgdy5wo3eEJPx@r*8nq!3I^ts}O8NhcXZ#oCUNtWUh5=1xQca21heB)AYwTvI~ znL6S$MI*o_4Rc!#*W51GtLNQcFCTCZ`iPd8VPxbfN^(njJ4GVv%}iQ@2|=;|&E8^6 zB`KIaNFK%8)*y4wTs@J&iXi+Aj!5>2@|OIasvxE!CC^el{=rUowb`1Gx7_o%uxcg^ zJTupjY7{O7IpY&c57d6M#rULN)|ORd(8~=Q4CU#%fDGf26zi)ubs!@{J{BM&%_$Y< zUPPN7ItA-n)eSR;Wd;iTv<*fISP%;;r}K4^=LTtUq9 z=joOQ_U(c{g)p+9_w%g9#mEazp5fQ%VPE4GP@{#b8#)^#r0ZH;q%G@{6LMlq>F(wa zj)pDh_$FyhArbd5wNtF?3r!B2_gwa4fuwVqmQbYkZRX9wB8b(nm1J2yBmK1J&$zr~ z&+@}CQYX*gc#K*k7KbSs>=OU{ikWcOk5E2~4^QvVGpGxR#+bHm?DZR=^Ay2@8gItm z;^UDYsw=uzvn%)Hs1vB6cF9`nvt^Hy4vqqHla0jpmJy{R$D);M2BgnUST?Z~A#p

sectionList; + + /** The list of parameters - keys are parameter names */ + private Map parameterList; + + /** The list of properties - keys are property names */ + private Map propertyList; + + /** + * Clear values (sets default values) of all sections. + */ + public void clearValues() { + for (Section section : sectionList) + section.clearValues(); + } + + /** + * Search for an parameter with specified name. + * + * @param name + * a name of serched parameter. + * @return the found parameter with specified name. + */ + public Parameter searchParameter(String name) { + return parameterList.get(name); + } + + /** + * Search for a property with specified name. + * + * @param name + * a name of serched property. + * @return the found property with specified name. + */ + public Property searchProperty(String name) { + return propertyList.get(name); + } + + @SuppressWarnings("unchecked") + public List
getSectionList() { + return sectionList != null? sectionList : Collections.EMPTY_LIST; + } + + public void setSectionList(List
sectionList) { + this.sectionList = sectionList; + } + + public Map getParameterList() { + return parameterList; + } + + public void setParameterList(Map parameterList) { + this.parameterList = parameterList; + } + + public Map getPropertyList() { + return propertyList; + } + + public void setPropertyList(Map propertyList) { + this.propertyList = propertyList; + } + +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/beans/OpenFile.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/beans/OpenFile.java new file mode 100644 index 000000000..c42ae48c7 --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/beans/OpenFile.java @@ -0,0 +1,87 @@ +package cz.zcu.fav.kiv.editor.beans; + +import org.w3c.dom.Document; + +import cz.zcu.fav.kiv.editor.graphics.MainFrame; +import cz.zcu.fav.kiv.editor.stylesheet.XslParser; + +/** + * The OpenFile class represents an open XSL stylesheet file. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class OpenFile { + /** The supported file extension */ + private static final String extension = ".xsl"; + + /** The DOM structure of open stylesheet file */ + private Document wholeFile; + + /** The path to the open file */ + private String openFilePath; + + /** The flag indicating changes in the open file */ + private boolean fileChanged; + + /** + * Initializes a newly created empty OpenFile. Assignes the + * wholeFile to the new empty DOM XSL stylesheet structure. Sets the newly + * created file as not changed (fileChanged). + */ + public OpenFile() { + this.wholeFile = XslParser.createXsltFile(); + this.fileChanged = false; + } + + public Document getWholeFile() { + return wholeFile; + } + + /** + * Sets the new DOM structure wholeFile of newly opened file. Sets the opened + * file as not changed. + * + * @param wholeFile + * DOM structure of the opened file. + */ + public void setWholeFile(Document wholeFile) { + this.wholeFile = wholeFile; + setFileChanged(false); + } + + public String getOpenFilePath() { + return openFilePath; + } + + /** + * Sets the new openFilePath of the opened file. If the file hasn't the extension + * XSL, then the extension is added. + * + * @param openFilePath + * a new path to the opened file. + */ + public void setOpenFilePath(String openFilePath) { + if (openFilePath != null) { + if (!openFilePath.trim().endsWith(extension)) + openFilePath = openFilePath + extension; + } + this.openFilePath = openFilePath; + } + + public boolean isFileChanged() { + return fileChanged; + } + + /** + * Sets if the opened file is changed or not. According to changes sets the status information + * about the file. + * + * @param fileChanged + * true, if the file has changed. + */ + public void setFileChanged(boolean fileChanged) { + this.fileChanged = fileChanged; + MainFrame.getInstance().changeTitle(); + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/beans/common/GeneralElement.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/beans/common/GeneralElement.java new file mode 100644 index 000000000..064cacaae --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/beans/common/GeneralElement.java @@ -0,0 +1,57 @@ +package cz.zcu.fav.kiv.editor.beans.common; + +import java.util.Observable; + +import org.w3c.dom.Node; + +/** + * The GeneralElement class represents a parent common for all elements like + * Parameter, Property or Attribute. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class GeneralElement extends Observable { + /** The name of the element */ + protected String name; + + /** The node associated with the element */ + protected Node node; + + /** + * Initializes a newly created emptyGeneralElement. + */ + public GeneralElement() { + } + + /** + * Initializes a newly created emptyGeneralElement with the specified name. The + * name argument is the name of the element. + * + * @param name + * a name of the element. + */ + public GeneralElement(String name) { + this.name = name; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Node getNode() { + return node; + } + + public void setNode(Node node) { + this.node = node; + } + + public boolean equals(Object obj) { + return ((GeneralElement) obj).getName().equals(this.getName()); + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/beans/common/ParentParameter.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/beans/common/ParentParameter.java new file mode 100644 index 000000000..1fbf1e1c6 --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/beans/common/ParentParameter.java @@ -0,0 +1,96 @@ +package cz.zcu.fav.kiv.editor.beans.common; + +/** + * The ParentParameter class represents a parent common for all elements like + * Parameter or Property. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class ParentParameter extends GeneralElement implements Comparable { + /** The description of the element */ + protected String description; + + /** The purpose of the element */ + protected String purpose; + + /** The flag specifying whether the element is chosen or not */ + protected boolean chosen; + + protected int lineNumber; + + /** + * Initializes a newly created emptyParentParameter. + */ + public ParentParameter() { + } + + /** + * Initializes a newly created emptyParentParameter with the specified name. The + * name argument is the name of the element. + * + * @param name + * a name of the element. + */ + public ParentParameter(String name) { + this.name = name; + } + + public ParentParameter(String name, int lineNumber) { + this.name = name; + this.lineNumber = lineNumber; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getPurpose() { + return purpose; + } + + public void setPurpose(String purpose) { + this.purpose = purpose; + } + + /** + * Clear values (sets default values) of the element + * and notifies its observers. + */ + public void clearValues() { + setNode(null); + this.chosen = false; + setChanged(); + notifyObservers(false); + } + + public Boolean isChosen() { + return chosen; + } + + public void setChosen(Boolean isChosen) { + this.chosen = isChosen; + } + + /** + * Choses the element - sets the flag chosen to true. + * At the same time notifies its observers. + */ + public void setChosen() { + this.chosen = true; + setChanged(); + notifyObservers(true); + } + + public int compareTo(Object obj) { + return ((GeneralElement) obj).getName().compareTo(this.getName()); + } + + public int getLineNumber() { + return lineNumber; + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/beans/common/ParentSection.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/beans/common/ParentSection.java new file mode 100644 index 000000000..a6fd44591 --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/beans/common/ParentSection.java @@ -0,0 +1,28 @@ +package cz.zcu.fav.kiv.editor.beans.common; + +/** + * The ParentSection class represents a parent for all + * classes representing a group of items. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class ParentSection { + /** The title of the group */ + protected String title; + + /** + * Initializes a newly created ParentSection with + * the specified name. The title argument is the + * title of the group. + * + * @param title a title of the group. + */ + public ParentSection(String title) { + this.title = title; + } + + public String getTitle() { + return title; + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/beans/graphics/Figure.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/beans/graphics/Figure.java new file mode 100644 index 000000000..0a5642bf5 --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/beans/graphics/Figure.java @@ -0,0 +1,49 @@ +package cz.zcu.fav.kiv.editor.beans.graphics; + +import cz.zcu.fav.kiv.editor.beans.parameters.Parameter; + +/** + * The Figure class represents a graphics figure used for illustrating values of some + * parameters. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class Figure { + /** The name of the figure */ + private String name; + + /** The class name asociated with the figure */ + private String className; + + /** The list of parameters associated with the figure */ + private Parameter[] parameterList; + + public Figure(String name) { + this.name = name; + } + + public String getClassName() { + return className; + } + + public String getName() { + return name; + } + + public Parameter[] getParameterList() { + return parameterList; + } + + public void setParameterList(Parameter[] parameters) { + this.parameterList = parameters; + } + + public boolean equals(Object obj) { + return ((Figure) obj).getName().equals(this.getName()); + } + + public void setClassName(String className) { + this.className = className; + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/beans/parameters/Parameter.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/beans/parameters/Parameter.java new file mode 100644 index 000000000..52e397c42 --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/beans/parameters/Parameter.java @@ -0,0 +1,59 @@ +package cz.zcu.fav.kiv.editor.beans.parameters; + +import cz.zcu.fav.kiv.editor.beans.common.ParentParameter; + +/** + * The Parameter class represents an element parameter. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class Parameter extends ParentParameter { + /** The type of the parameter */ + private TypeParam type; + + /** + * Initializes a newly created Parameter with the specified name. Parameter is + * marked as not chosen. The name argument is the name of the parameter. + * + * @param name + * a name of the parameter. + */ + + public Parameter(String name, int lineNumber) { + super(name, lineNumber); + this.chosen = false; + this.type = new TypeParam(this); + } + + public Parameter(String name) { + super(name); + this.chosen = false; + this.type = new TypeParam(this); + } + + public TypeParam getType() { + return type; + } + + public void setType(TypeParam type) { + this.type = type; + } + + /** + * Clear values (sets default values) of the parameter type and notify its observers. + */ + public void clearValues() { + this.getType().setDefault(); + super.clearValues(); + } + + /** + * Update the value of the Figures associated with the parameter. + */ + public void updateFigure() { + setChanged(); + notifyObservers(); + } + +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/beans/parameters/TypeParam.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/beans/parameters/TypeParam.java new file mode 100644 index 000000000..68998d514 --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/beans/parameters/TypeParam.java @@ -0,0 +1,66 @@ +package cz.zcu.fav.kiv.editor.beans.parameters; + +import cz.zcu.fav.kiv.editor.beans.types.Type; + +/** + * The TypeParam class represents a type of parameter. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class TypeParam extends Type { + + /** The reference to the parametet of the type */ + private Parameter parameter; + + /** + * Initializes a newly created TypeParam with reference to the appropriate + * parameter. + * + * @param param + * a reference to the type parameter. + */ + public TypeParam(Parameter param) { + super(); + this.parameter = param; + } + + /** + * Sets the new value of the type, marks the parameter as chosen and update + * parameter graphics figures. + * + * @param value + * a new value of the type. + */ + @Override + public void changeValue(String value) { + this.value = value; + parameter.setChosen(); + parameter.updateFigure(); + } + + /** + * Sets the new value of the type and notifies its observers. + */ + @Override + public void updateValue() { + setChanged(); + notifyObservers(this.value); + if (unit != null) + unit.updateValue(); + } + + /** + * Sets the default value of the type and its unit. Notifies its observers. + */ + public void setDefault() { + super.setDefault(); + setChanged(); + notifyObservers(value); + } + + @Override + public String getOwnerName() { + return parameter.getName(); + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/beans/parameters/UnitParam.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/beans/parameters/UnitParam.java new file mode 100644 index 000000000..6d58ca3d0 --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/beans/parameters/UnitParam.java @@ -0,0 +1,69 @@ +package cz.zcu.fav.kiv.editor.beans.parameters; + +import java.util.List; + +import cz.zcu.fav.kiv.editor.beans.types.Unit; + +/** + * The UnitParam class represents a unit of parameter type. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class UnitParam extends Unit { + /** The reference to the parametet of the unit */ + private Parameter parameter; + + /** + * Initializes a newly created UnitParam with the specified value, predefined + * units and reference to the appropriate parameter. The value argument is the + * value of the unit. The unitList is a list of predefined units. The + * parameter argument is an appropriate parameter. + * + * @param value + * a value of the unit. + * @param unitList + * a list of predefined units. + * @param parameter + * a reference to the unit parameter. + */ + public UnitParam(String value, List unitList, Parameter parameter) { + super(value, unitList); + this.parameter = parameter; + } + + public UnitParam(List unitList, Parameter parameter) { + super(unitList); + this.parameter = parameter; + } + + /** + * Sets the new value of unit and notifies its observers. + */ + @Override + public void updateValue() { + setChanged(); + notifyObservers(value); + } + + /** + * Sets the new value of unit and marks its parameter as chosen. + * + * @param value + * a new value of the unit. + */ + @Override + public void changeValue(String value) { + this.value = value; + parameter.setChosen(); + } + + /** + * Sets the default value of the unit - assignes the default value to the main value and notifies its observers. + */ + public void setDefault() { + super.setDefault(); + setChanged(); + notifyObservers(value); + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/beans/properties/Attribute.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/beans/properties/Attribute.java new file mode 100644 index 000000000..ddb43ef8d --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/beans/properties/Attribute.java @@ -0,0 +1,112 @@ +package cz.zcu.fav.kiv.editor.beans.properties; + +import cz.zcu.fav.kiv.editor.beans.common.GeneralElement; +import cz.zcu.fav.kiv.editor.controller.logger.Log; + +/** + * The Attribute class represents an atribute of property. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class Attribute extends GeneralElement implements Cloneable { + /** The list of attribute types */ + private TypeAttr type; + + /** The flag specifying whether the attribute is chosen or not */ + private boolean chosen; + + /** The temporary value of the attribute */ + private boolean temporaryChosen; + + public Attribute(String name) { + this.name = name; + } + + /** + * Initializes a newly created Attribute with the specified name and the + * type. Marks the attribute as not chosen. The name argument is the name of the + * attribute. The type argument is the type of attribute. + * + * @param name + * a name of attribute. + * @param type + * a type of attribute. + */ + public Attribute(String name, TypeAttr type) { + super(name); + this.type = type; + this.chosen = false; + } + + public Boolean isChosen() { + return chosen; + } + + /** + * Sets the attribute chosen parameter according the input argument and assignes + * the value to the temporaryChosen. + * + * @param isChosen + * a value specifying whether the attribute is chosen or not. + */ + public void setChosen(Boolean isChosen) { + this.chosen = isChosen; + this.temporaryChosen = isChosen; + } + + public void setChosen() { + this.temporaryChosen = true; + setChanged(); + notifyObservers(true); + } + + /** + * Sets the temporaryChosen parameter according the input argument. + * + * @param isChosen + * a value specifying whether the attribute is chosen or not. + */ + public void changeChosen(Boolean isChosen) { + this.temporaryChosen = isChosen; + } + + public Object clone() { + Attribute attribute = null; + try { + attribute = (Attribute) super.clone(); + attribute.setName(this.name); + + attribute.setType((TypeAttr)this.type.clone()); + } catch (CloneNotSupportedException ex) { + Log.error(ex); + } + return attribute; + } + + /** + * Clear values (sets default values) of the attribute types. + */ + public void clearValues() { + type.setDefault(); + this.chosen = false; + this.node = null; + } + + /** + * Sets values of all types after their temporary values. Sets chosen after + * temporaryChosen. + */ + public void setValuesFromTemporary() { + type.setValuesFromTemporary(); + this.chosen = temporaryChosen; + } + + public void setType(TypeAttr type) { + this.type = type; + } + + public TypeAttr getType() { + return type; + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/beans/properties/AttributeGroup.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/beans/properties/AttributeGroup.java new file mode 100644 index 000000000..89762134b --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/beans/properties/AttributeGroup.java @@ -0,0 +1,76 @@ +package cz.zcu.fav.kiv.editor.beans.properties; + +import java.util.ArrayList; +import java.util.List; + +import cz.zcu.fav.kiv.editor.beans.common.ParentSection; +import cz.zcu.fav.kiv.editor.controller.logger.Log; + +/** + * The AttributeGroup class represents a group of atributes. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class AttributeGroup extends ParentSection implements Cloneable { + + /** The list of attributes in the group */ + private List attributeList; + + /** + * Initializes a newly created Attribute with the specified name and description. + * The title argument is the name of the attribute group. + * + * @param title + * a name of the attribute group. + */ + public AttributeGroup(String title) { + super(title); + } + + public void setTitle(String title){ + this.title = title; + } + + public Object clone() { + AttributeGroup group = null; + try { + group = (AttributeGroup) super.clone(); + group.setTitle(this.title); + + List newAttributes = new ArrayList(); + for (int i = 0; i < attributeList.size(); i++) { + newAttributes.add((Attribute) attributeList.get(i).clone()); + } + group.setAttributeList(newAttributes); + } catch (CloneNotSupportedException ex) { + Log.error(ex); + } + return group; + } + + public List getAttributeList() { + return attributeList; + } + + public void setAttributeList(List attributes) { + this.attributeList = attributes; + } + + /** + * Clear values (sets default values) of all attribute types in the group. + */ + public void clearValues() { + for (Attribute attr : this.attributeList) { + attr.clearValues(); + } + } + + /** + * Sets values of all attribute types in the group after their temporary values. + */ + public void setValuesFromTemporary() { + for (Attribute at : this.getAttributeList()) + at.setValuesFromTemporary(); + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/beans/properties/Property.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/beans/properties/Property.java new file mode 100644 index 000000000..f4a4b61bf --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/beans/properties/Property.java @@ -0,0 +1,67 @@ +package cz.zcu.fav.kiv.editor.beans.properties; + +import cz.zcu.fav.kiv.editor.beans.common.ParentParameter; + +/** + * The Property class represents an element property. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class Property extends ParentParameter { + /** The list of attribute groups */ + private AttributeGroup[] attributeGroupList; + + /** + * Initializes a newly created Attribute with the specified name and the list of + * attribute groups. The name argument is the name of the property. The + * attributeGroups argument is the list of AttributeGroups. + * + * @param name + * a name of the property. + * @param attributeGroups + * a list of attribute groups. + */ + public Property(String name, AttributeGroup[] attributeGroups, int lineNumber) { + super(name, lineNumber); + this.attributeGroupList = attributeGroups; + } + + public AttributeGroup[] getAttributeGroupList() { + return attributeGroupList; + } + + /** + * Search for an attribute with specified name. + * + * @param name + * a name of serched attribute. + * @return the found attribute with specified name. + */ + public Attribute searchAttribute(String name) { + for (AttributeGroup group : attributeGroupList) { + int ind = group.getAttributeList().indexOf(new Attribute(name)); + if (ind >= 0) + return group.getAttributeList().get(ind); + } + return null; + } + + /** + * Sets values of all groups of types after their temporary values. + */ + public void setValuesFromTemporary() { + for (AttributeGroup pan : attributeGroupList) + pan.setValuesFromTemporary(); + } + + /** + * Clear values (sets default values) of all groups of types. + */ + public void clearValues() { + super.clearValues(); + for (AttributeGroup group : this.attributeGroupList) { + group.clearValues(); + } + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/beans/properties/TypeAttr.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/beans/properties/TypeAttr.java new file mode 100644 index 000000000..b7e71e8ee --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/beans/properties/TypeAttr.java @@ -0,0 +1,74 @@ +package cz.zcu.fav.kiv.editor.beans.properties; + +import cz.zcu.fav.kiv.editor.beans.types.Type; + +/** + * The TypeAttr class represents a type of attribute. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class TypeAttr extends Type { + /** The temporary value of the attribute type */ + private String temporaryValue; + + /** The reference to the attribute of the type */ + private Attribute attribute; + + /** + * Initializes a newly created empty TypeAttr. + */ + public TypeAttr() { + super(); + } + + /** + * Sets values of the type and its unit after their temporary values. + */ + public void setValuesFromTemporary() { + if (this.temporaryValue != null) + this.value = this.temporaryValue; + if (this.unit != null) + ((UnitAttr) this.unit).setValuesFromTemporary(); + } + + /** + * Sets the new value of the type (standard and temporary value) and marks the + * attribute as chosen. + * + * @param value + * a new value of the type. + */ + @Override + public void changeValue(String value) { + this.temporaryValue = value; + this.attribute.setChosen(); + } + + /** + * Sets the new temporary value of the type. + */ + @Override + public void updateValue() { + this.temporaryValue = this.value; + if (unit != null) + unit.updateValue(); + } + + public void setAttr(Attribute attr) { + this.attribute = attr; + } + + /** + * Sets the default and temporary value of the type and its unit. + */ + public void setDefault() { + super.setDefault(); + this.temporaryValue = this.getDefaultValue().getDefaultValue(); + } + + @Override + public String getOwnerName() { + return attribute.getName(); + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/beans/properties/UnitAttr.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/beans/properties/UnitAttr.java new file mode 100644 index 000000000..234567663 --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/beans/properties/UnitAttr.java @@ -0,0 +1,75 @@ +package cz.zcu.fav.kiv.editor.beans.properties; + +import java.util.List; + +import cz.zcu.fav.kiv.editor.beans.types.Unit; + +/** + * The UnitAttr class represents a unit of attribute type. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class UnitAttr extends Unit { + /** The temporary value of the attribute unit */ + protected String temporaryValue; + + /** The reference to the attribute of the unit */ + protected Attribute attribute; + + /** + * Initializes a newly created UnitAttr with the specified value and predefined + * units. The value argument is the value of the unit. The unitList + * is a list of predefined units. + * + * @param value + * a value of the unit. + * @param unitList + * a list of predefined units. + */ + public UnitAttr(String value, List unitList) { + super(value, unitList); + } + + public UnitAttr(List unitList) { + super(unitList); + } + + /** + * Sets the new value of unit and marks its attribute as chosen. + * + * @param value + * a new value of the unit. + */ + public void changeValue(String value) { + this.temporaryValue = value; + this.attribute.setChosen(); + } + + /** + * Sets the new temporary value of unit. + */ + public void updateValue() { + this.temporaryValue = this.value; + } + + /** + * Sets values of the unit after its temporary value. + */ + public void setValuesFromTemporary() { + if (temporaryValue != null) + this.value = temporaryValue; + } + + public void setAttribute(Attribute attribute) { + this.attribute = attribute; + } + + /** + * Sets the default and temporary value of the unit. + */ + public void setDefault() { + super.setDefault(); + this.temporaryValue = this.defaultValue; + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/beans/sections/Group.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/beans/sections/Group.java new file mode 100644 index 000000000..9eb907bee --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/beans/sections/Group.java @@ -0,0 +1,62 @@ +package cz.zcu.fav.kiv.editor.beans.sections; + +import java.util.List; + +import cz.zcu.fav.kiv.editor.beans.common.ParentParameter; +import cz.zcu.fav.kiv.editor.beans.common.ParentSection; +import cz.zcu.fav.kiv.editor.beans.graphics.Figure; +import cz.zcu.fav.kiv.editor.beans.parameters.Parameter; +import cz.zcu.fav.kiv.editor.beans.properties.Property; + +/** + * The Group class represents a group of parameters and properties. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class Group extends ParentSection { + /** The graphics figure defined for parameters in the group */ + private Figure figure; + + /** The list of parameters and properties in the group */ + private List elementList; + + /** + * Initializes a newly created Group with the specified name. The + * title argument is the title of the group. + * + * @param title + * a title of the group. + */ + public Group(String title) { + super(title); + } + + /** + * Clear values (sets default values) of all parameters and properties. + */ + public void clearValues() { + for (ParentParameter elem : this.elementList) { + if (elem instanceof Property) + ((Property) elem).clearValues(); + if (elem instanceof Parameter) + ((Parameter) elem).clearValues(); + } + } + + public List getElementList() { + return elementList; + } + + public void setElementList(List parameterList) { + this.elementList = parameterList; + } + + public Figure getFigure() { + return figure; + } + + public void setFigure(Figure figure) { + this.figure = figure; + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/beans/sections/Section.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/beans/sections/Section.java new file mode 100644 index 000000000..c389198f8 --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/beans/sections/Section.java @@ -0,0 +1,46 @@ +package cz.zcu.fav.kiv.editor.beans.sections; + +import java.util.List; + +import cz.zcu.fav.kiv.editor.beans.common.ParentSection; + +/** + * The Section class represents a section of editor. It contains a list of + * Subsections. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class Section extends ParentSection { + /** The list of subsections in the section */ + private List subsectionList; + + /** + * Initializes a newly created Section with the specified name. The + * title argument is the title of the section. + * + * @param title + * a title of the section. + */ + public Section(String title) { + super(title); + } + + public List getSubsectionList() { + return subsectionList; + } + + public void setSubsectionList(List subsectionList) { + this.subsectionList = subsectionList; + } + + /** + * Clear values (sets default values) of all subsections. + */ + public void clearValues() { + for (Subsection subsection : subsectionList) { + subsection.clearValues(); + subsection.setComment(null); + } + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/beans/sections/Subsection.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/beans/sections/Subsection.java new file mode 100644 index 000000000..8860ac892 --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/beans/sections/Subsection.java @@ -0,0 +1,57 @@ +package cz.zcu.fav.kiv.editor.beans.sections; + +import java.util.List; + +import org.w3c.dom.Comment; + +import cz.zcu.fav.kiv.editor.beans.common.ParentSection; + +/** + * The Subsection class represents a subsection of a Section. It + * contains a list of Groups. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class Subsection extends ParentSection { + /** The list of group in the subsection */ + private List groupList; + + /** The comment associated with the subsection */ + private Comment comment; + + /** + * Initializes a newly created Subsection with the specified name. The + * title argument is the title of the subsection. + * + * @param title + * a title of the subsection. + */ + public Subsection(String title) { + super(title); + } + + public List getGroupList() { + return groupList; + } + + public void setGroupList(List groupList) { + this.groupList = groupList; + } + + /** + * Clear values (sets default values) of all groups. + */ + public void clearValues() { + for (Group group : groupList) + group.clearValues(); + } + + public Comment getComment() { + return comment; + } + + public void setComment(Comment comment) { + this.comment = comment; + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/beans/types/CommonTypes.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/beans/types/CommonTypes.java new file mode 100644 index 000000000..bea09c291 --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/beans/types/CommonTypes.java @@ -0,0 +1,33 @@ +package cz.zcu.fav.kiv.editor.beans.types; + +import java.util.List; +import java.util.Map; + +public class CommonTypes { + /** The list of unit values */ + private List units; + + /** The list of font values */ + private Map fonts; + + /** The list of color values */ + private Map colors; + + public CommonTypes(List units, Map colors, Map fonts){ + this.units = units; + this.colors = colors; + this.fonts = fonts; + } + + public Map getColors() { + return colors; + } + + public Map getFonts() { + return fonts; + } + + public List getUnits() { + return units; + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/beans/types/DefaultType.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/beans/types/DefaultType.java new file mode 100644 index 000000000..d9eabfbea --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/beans/types/DefaultType.java @@ -0,0 +1,60 @@ +package cz.zcu.fav.kiv.editor.beans.types; + +import java.util.Iterator; +import java.util.Map; + +import cz.zcu.fav.kiv.editor.controller.logger.Log; + +public class DefaultType implements Cloneable { + + /** The default value of the type */ + protected String defaultValue; + + /** The list of predefined values of the type */ + protected Map valueList; + + public Object clone() { + DefaultType type = null; + try { + type = (DefaultType) super.clone(); + type.setDefaultValue(defaultValue); + type.setValueList(this.valueList); + } catch (CloneNotSupportedException ex) { + Log.error(ex); + } + return type; + } + + public void setDefaultValue(String defaultValue) { + this.defaultValue = defaultValue; + } + + public void setValueList(Map valueList) { + this.valueList = valueList; + } + + public String getDefaultValue() { + return defaultValue; + } + + public Map getValueList() { + return valueList; + } + + /** + * Returns the key for input value it it is contained in the list of predefined values. + * + * @param value + * a value of the searched value contained in the list of predefined values. + * @return a key belonging to the input value contained in the list of predefined values. + */ + public String getKeyFromValue(String value) { + if (valueList != null) + for (Iterator it = valueList.entrySet().iterator(); it.hasNext();) { + Map.Entry e = (Map.Entry) it.next(); + if (e.getValue().equals(value)) + return e.getKey().toString(); + } + return null; + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/beans/types/Type.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/beans/types/Type.java new file mode 100644 index 000000000..7ffbabd18 --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/beans/types/Type.java @@ -0,0 +1,156 @@ +package cz.zcu.fav.kiv.editor.beans.types; + +import java.util.Map; +import java.util.Observable; + +import cz.zcu.fav.kiv.editor.config.constants.TypeEnum; +import cz.zcu.fav.kiv.editor.controller.errors.ParserException; +import cz.zcu.fav.kiv.editor.controller.logger.Log; +import cz.zcu.fav.kiv.editor.utils.TagControl; + +/** + * The Type class represents a parent for types of all elements. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public abstract class Type extends Observable implements Cloneable { + /** The name of the type */ + protected TypeEnum name; + + /** The default value of the type */ + protected DefaultType defaultValue; + + /** The value of the type */ + protected String value; + + /** The unit of the type */ + protected Unit unit; + + public void setUnit(Unit unit) { + this.unit = unit; + } + + /** + * Initializes a newly created emptyType. + */ + public Type() { + defaultValue = new DefaultType(); + } + + public Type(TypeEnum name) { + this.name = name; + defaultValue = new DefaultType(); + } + + public void setDefaultValue(DefaultType defaultValue) { + this.defaultValue = defaultValue; + } + + public void setName(TypeEnum name) { + this.name = name; + } + + public String getValue() { + return value; + } + + /** + * Sets the new value of the type with notifying of graphics items. + */ + public abstract void updateValue(); + + + /** + * Sets the new value of the type without notifying of graphics items. + * @param value a new value of the type. + */ + public abstract void changeValue(String value); + + public Map getValueList() { + return defaultValue.getValueList(); + } + + public void setValueList(Map values) { + this.defaultValue.setValueList(values); + } + + /** + * Returns the key for input value it it is contained in the list of predefined values. + * + * @param value + * a value of the searched value contained in the list of predefined values. + * @return a key belonging to the input value contained in the list of predefined values. + */ + public String getKeyFromValue(String value) { + return defaultValue.getKeyFromValue(value); + } + + public Object clone() { + Type type = null; + try { + type = (Type) super.clone(); + type.setName(this.name); + type.setDefaultValue((DefaultType)this.defaultValue.clone()); + type.setValue(this.value); + if (this.unit != null) + type.setUnit((Unit) this.unit.clone()); + } catch (CloneNotSupportedException ex) { + Log.error(ex); + } + return type; + } + + /** + * Sets the default value of the type and its unit. + */ + public void setDefault() { + this.value = this.defaultValue.getDefaultValue(); + if (this.unit != null) + this.unit.setDefault(); + } + + public Unit getUnit() { + return unit; + } + + public DefaultType getDefaultValue() { + return defaultValue; + } + + public TypeEnum getName() { + return name; + } + + /** + * Assigns the new loaded value (from file, template). + * @param value the new type value. + * @throws ParserException if the value is invalid. + */ + public void setLoadedValue(String value) throws ParserException { + TagControl.controlSetTypeValue(this, value); + updateValue(); + } + + public void setValue(String value) { + this.value = value; + } + + /** + * Assigns the default value same as value. + * + */ + public void assignDefaultFromValue() { + this.defaultValue.defaultValue = value; + if (this.unit != null) + this.unit.assignDefaultFromValue(); + } + + /** + * Return the name of the owner element - parameter or attribute. + * + */ + public abstract String getOwnerName(); +} + + diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/beans/types/Unit.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/beans/types/Unit.java new file mode 100644 index 000000000..0c4b54099 --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/beans/types/Unit.java @@ -0,0 +1,100 @@ +package cz.zcu.fav.kiv.editor.beans.types; + +import java.util.List; +import java.util.Observable; + +import cz.zcu.fav.kiv.editor.controller.logger.Log; + +/** + * The Unit class represents a parent for unit of elements. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public abstract class Unit extends Observable implements Cloneable { + /** The value of the unit */ + protected String value; + + /** The default value of the unit */ + protected String defaultValue; + + /** The list of predefined values of the unit */ + protected List valueList; + + /** + * Initializes a newly created Unit with the specified value and predefined + * units. The value argument is the value of the unit. The unitList + * is a list of predefined units. + * + * @param value + * a value of the unit. + * @param unitList + * a list of predefined units. + */ + public Unit(String value, List unitList) { + this.value = value; + this.defaultValue = value; + this.valueList = unitList; + } + + public Unit(List unitList) { + this.valueList = unitList; + this.value = ""; + this.defaultValue = ""; + } + + public String getDefaultValue() { + return defaultValue; + } + + public void setDefaultValue(String defaultValue) { + this.defaultValue = defaultValue; + } + + /** + * Sets the default value of the unit - assignes the default value to the main value. + */ + public void setDefault() { + this.value = defaultValue; + } + + public String getValue() { + return value; + } + + public abstract void updateValue(); + + public abstract void changeValue(String value); + + public Object clone() { + Unit unit = null; + try { + unit = (Unit) super.clone(); + unit.setValue(this.value); + unit.setDefaultValue(this.defaultValue); + } catch (CloneNotSupportedException ex) { + Log.error(ex); + } + return unit; + } + + /** + * Assigns the default value from value. + */ + public void assignDefaultFromValue() { + this.defaultValue = this.value; + } + + public List getValueList() { + return valueList; + } + + public void setValueList(List values) { + this.valueList = values; + } + + public void setValue(String value) { + this.value = value; + } + +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/config/ConfigController.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/config/ConfigController.java new file mode 100644 index 000000000..8d84b4845 --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/config/ConfigController.java @@ -0,0 +1,119 @@ +package cz.zcu.fav.kiv.editor.config; + +import java.io.File; +import java.util.Map; + +import cz.zcu.fav.kiv.editor.beans.ConfigData; +import cz.zcu.fav.kiv.editor.beans.graphics.Figure; +import cz.zcu.fav.kiv.editor.beans.parameters.Parameter; +import cz.zcu.fav.kiv.editor.beans.properties.AttributeGroup; +import cz.zcu.fav.kiv.editor.beans.types.CommonTypes; +import cz.zcu.fav.kiv.editor.config.constants.FileConst; +import cz.zcu.fav.kiv.editor.controller.MessageWriter; +import cz.zcu.fav.kiv.editor.controller.errors.ConfigException; +import cz.zcu.fav.kiv.editor.controller.errors.FileNotFoundException; +import cz.zcu.fav.kiv.editor.controller.logger.Log; +import cz.zcu.fav.kiv.editor.controller.options.OptionItems; +import cz.zcu.fav.kiv.editor.controller.resource.ResourceController; + +/** + * The ConfigController class contains methods for reading configuration files. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class ConfigController { + /** The data loaded from configuration files */ + private static ConfigData data; + + private static CommonTypes commonTypes; + + /** The parser of configuration files */ + private ConfigParser parser; + + /** The list of attribute groups */ + private AttributeGroup[] attributeGroupList; + + /** The list of graphics figures - keys are figure names */ + private Map figureList; + + /** + * Initializes a newly created ConfigController. Simultaneously initializes new + * ConfigParser and ConfigData. + */ + public ConfigController() { + data = new ConfigData(); + MessageWriter.writeTitle(ResourceController.getMessage("parser.config_file.title")); + File directory = new File(OptionItems.XML_DEFINITION_PATH); + if (!directory.exists()) + MessageWriter.writeError(ResourceController + .getMessage("parser.xml_definition_file.invalid_directory")); + + parser = new ConfigParser(); + } + + /** + * Reads the configuration file with graphics figures - graphics.xml. + * + * @throws FileNotFoundException + * if the configuration file or its XML schema doesn't exist. + * @throws ConfigException + * if the configuration file or its XML schema isn't well-formed. + */ + public void readFigures(Map parsedParameterList) throws FileNotFoundException, ConfigException { + if (!figureList.isEmpty()) + parser.readFigures(parsedParameterList, figureList); + Log.info("info.progress_control.load_file", FileConst.CONF_FILE_FIGURES); + } + + /** + * Reads the configuration file with attributes - attributes.xml. + * + * @throws ConfigException + * if the configuration file or its XML schema isn't well-formed. + * @throws FileNotFoundException + * if the configuration file or its XML schema doesn't exist. + */ + public void readAttributes() throws ConfigException, FileNotFoundException { + this.attributeGroupList = parser.readAttributes(commonTypes); + Log.info("info.progress_control.load_file", FileConst.CONF_FILE_ATTRIBUTES); + } + + /** + * Reads the configuration file with layout of parameters and attribute-sets - config.xml. + * + * @throws ConfigException + * if the configuration file or its XML schema isn't well-formed. + * @throws FileNotFoundException + * if the configuration file or its XML schema doesn't exist. + */ + public void readConfig() throws ConfigException, FileNotFoundException { + figureList = parser.readConfig(data, attributeGroupList); + Log.info("info.progress_control.load_file", FileConst.CONF_FILE_CONFIG); + } + + /** + * Reads the configuration file with types - types.xml. + * + * @throws ConfigException + * if the configuration file or its XML schema isn't well-formed. + * @throws FileNotFoundException + * if the configuration file or its XML schema doesn't exist. + */ + public void readTypes() throws ConfigException, FileNotFoundException { + commonTypes = parser.readTypes(); + Log.info("info.progress_control.load_file", FileConst.CONF_FILE_TYPE); + } + + public ConfigData getData() { + return data; + } + + public CommonTypes getCommonTypes() { + return commonTypes; + } + + public Map getFigureList() { + return figureList; + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/config/ConfigParser.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/config/ConfigParser.java new file mode 100644 index 000000000..f49aad256 --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/config/ConfigParser.java @@ -0,0 +1,190 @@ +package cz.zcu.fav.kiv.editor.config; + +import java.io.IOException; +import java.io.InputStream; +import java.util.Map; + +import javax.xml.parsers.SAXParser; +import javax.xml.parsers.SAXParserFactory; + +import org.xml.sax.SAXException; +import org.xml.sax.XMLReader; + +import cz.zcu.fav.kiv.editor.beans.ConfigData; +import cz.zcu.fav.kiv.editor.beans.graphics.Figure; +import cz.zcu.fav.kiv.editor.beans.parameters.Parameter; +import cz.zcu.fav.kiv.editor.beans.properties.AttributeGroup; +import cz.zcu.fav.kiv.editor.beans.types.CommonTypes; +import cz.zcu.fav.kiv.editor.config.constants.FileConst; +import cz.zcu.fav.kiv.editor.config.handlers.AttributeXmlHandler; +import cz.zcu.fav.kiv.editor.config.handlers.ConfigXmlHandler; +import cz.zcu.fav.kiv.editor.config.handlers.FigureXmlHandler; +import cz.zcu.fav.kiv.editor.config.handlers.TypeXmlHandler; +import cz.zcu.fav.kiv.editor.controller.errors.ConfigException; +import cz.zcu.fav.kiv.editor.controller.errors.FileNotFoundException; +import cz.zcu.fav.kiv.editor.controller.errors.XslParserException; +import cz.zcu.fav.kiv.editor.controller.logger.Log; + +/** + * The ConfigParser class contains methods for parsing configuration files. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class ConfigParser { + + /** The parser key defining XML schema language */ + private static final String JAXP_SCHEMA_LANGUAGE = "http://java.sun.com/xml/jaxp/properties/schemaLanguage"; + + /** The constants defining XML schema language */ + private static final String W3C_XML_SCHEMA = "http://www.w3.org/2001/XMLSchema"; + + /** The key defining XML schema */ + private static final String JAXP_SCHEMA_SOURCE = "http://java.sun.com/xml/jaxp/properties/schemaSource"; + + /** The XML parser used for reading configuration files */ + private XMLReader parser; + + /** + * Initializes a newly created ConfigParser. Sets up the SAX parser used for + * parsing. + */ + public ConfigParser() { + SAXParserFactory spf = SAXParserFactory.newInstance(); + spf.setValidating(true); + spf.setNamespaceAware(true); + + try { + SAXParser sp = spf.newSAXParser(); + sp.setProperty(JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA); + parser = sp.getXMLReader(); + parser.setErrorHandler(new XslParserException()); + } catch (Exception ex) { + Log.error(ex); + } + } + + /** + * Parses the configuration file with graphics figures - graphics.xml. + * + * @param parameterList + * the list of loaded parameters. + * @param figureList + * the list of loaded figures. + * @throws ConfigException + * if the configuration file or its XML schema isn't well-formed. + * @throws FileNotFoundException + * if the configuration file or its XML schema doesn't exist. + */ + public void readFigures(Map parameterList, Map figureList) + throws ConfigException, FileNotFoundException { + InputStream xsdFile = ConfigParser.class + .getResourceAsStream(FileConst.CONF_FILE_FIGURES_XSD); + if (xsdFile == null) + throw new FileNotFoundException(FileConst.CONF_FILE_FIGURES_XSD); + + FigureXmlHandler handler = new FigureXmlHandler(parameterList, figureList); + parser.setContentHandler(handler); + try { + parser.setProperty(JAXP_SCHEMA_SOURCE, xsdFile); + parser.parse(FileConst.CONF_FILE_FIGURES); + } catch (IOException ex) { + throw new FileNotFoundException(FileConst.CONF_FILE_FIGURES); + } catch (SAXException ex) { + throw new ConfigException(FileConst.CONF_FILE_FIGURES, ex.getMessage()); + } + } + + /** + * Parses the configuration file with attributes - attributes.xml. + * + * @param commonTypes + * common types of parameters. + * @return a list of loaded attributes - key is attribute name. + * @throws ConfigException + * if the configuration file or its XML schema isn't well-formed. + * @throws FileNotFoundException + * if the configuration file or its XML schema doesn't exist. + */ + public AttributeGroup[] readAttributes(CommonTypes commonTypes) throws ConfigException, + FileNotFoundException { + InputStream xsdFile = ConfigParser.class + .getResourceAsStream(FileConst.CONF_FILE_ATTRIBUTES_XSD); + if (xsdFile == null) + throw new FileNotFoundException(FileConst.CONF_FILE_ATTRIBUTES_XSD); + + AttributeXmlHandler handler = new AttributeXmlHandler(commonTypes); + parser.setContentHandler(handler); + try { + parser.setProperty(JAXP_SCHEMA_SOURCE, xsdFile); + parser.parse(FileConst.CONF_FILE_ATTRIBUTES); + return handler.getAttrGroupList(); + } catch (IOException ex) { + throw new FileNotFoundException(FileConst.CONF_FILE_ATTRIBUTES); + } catch (SAXException ex) { + throw new ConfigException(FileConst.CONF_FILE_ATTRIBUTES, ex.getMessage()); + } + } + + /** + * Parses the configuration file with layout of parameters and attribute-sets - config.xml. + * + * @param configData + * so far loaded data from configuration files. + * @param attributeGroupList + * the list of attribute groups. + * @throws ConfigException + * if the configuration file or its XML schema isn't well-formed. + * @throws FileNotFoundException + * if the configuration file or its XML schema doesn't exist. + */ + public Map readConfig(ConfigData configData, AttributeGroup[] attributeGroupList) + throws ConfigException, FileNotFoundException { + InputStream xsdFile = ConfigParser.class + .getResourceAsStream(FileConst.CONF_FILE_CONFIG_XSD); + if (xsdFile == null) + throw new FileNotFoundException(FileConst.CONF_FILE_CONFIG_XSD); + + ConfigXmlHandler handler = new ConfigXmlHandler(attributeGroupList); + parser.setContentHandler(handler); + try { + parser.setProperty(JAXP_SCHEMA_SOURCE, xsdFile); + parser.parse(FileConst.CONF_FILE_CONFIG); + configData.setSectionList(handler.getSections()); + configData.setPropertyList(handler.getPropertyList()); + configData.setParameterList(handler.getParameterList()); + return handler.getFigureList(); + } catch (IOException ex) { + throw new FileNotFoundException(FileConst.CONF_FILE_CONFIG); + } catch (SAXException ex) { + throw new ConfigException(FileConst.CONF_FILE_CONFIG, ex.getMessage()); + } + } + + /** + * Parses the configuration file with types - types.xml. + * + * @throws ConfigException + * if the configuration file or its XML schema isn't well-formed. + * @throws FileNotFoundException + * if the configuration file or its XML schema doesn't exist. + */ + public CommonTypes readTypes() throws ConfigException, FileNotFoundException { + InputStream xsdFile = ConfigParser.class.getResourceAsStream(FileConst.CONF_FILE_TYPE_XSD); + if (xsdFile == null) + throw new FileNotFoundException(FileConst.CONF_FILE_TYPE_XSD); + + TypeXmlHandler handler = new TypeXmlHandler(); + parser.setContentHandler(handler); + try { + parser.setProperty(JAXP_SCHEMA_SOURCE, xsdFile); + + parser.parse(FileConst.CONF_FILE_TYPE); + return new CommonTypes(handler.getUnitList(), handler.getColorList(), handler.getFontList()); + } catch (IOException ex) { + throw new FileNotFoundException(FileConst.CONF_FILE_TYPE); + } catch (SAXException ex) { + throw new ConfigException(FileConst.CONF_FILE_TYPE, ex.getMessage()); + } + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/config/ParamController.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/config/ParamController.java new file mode 100644 index 000000000..1fe5314cc --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/config/ParamController.java @@ -0,0 +1,124 @@ +package cz.zcu.fav.kiv.editor.config; + +import java.io.File; +import java.util.Iterator; +import java.util.Map; +import java.util.regex.Pattern; + +import cz.zcu.fav.kiv.editor.beans.ConfigData; +import cz.zcu.fav.kiv.editor.beans.common.ParentParameter; +import cz.zcu.fav.kiv.editor.beans.graphics.Figure; +import cz.zcu.fav.kiv.editor.beans.parameters.Parameter; +import cz.zcu.fav.kiv.editor.beans.properties.Property; +import cz.zcu.fav.kiv.editor.beans.sections.Group; +import cz.zcu.fav.kiv.editor.beans.sections.Section; +import cz.zcu.fav.kiv.editor.beans.sections.Subsection; +import cz.zcu.fav.kiv.editor.beans.types.CommonTypes; +import cz.zcu.fav.kiv.editor.controller.logger.Log; +import cz.zcu.fav.kiv.editor.controller.options.OptionItems; + +/** + * The ParamController class contains method for reading XML definitions of + * parameters and properties. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class ParamController { + /** The model pattern used for parsing $param */ + public static final String REGEX_PARAM = "\\$[\\w\\.]+"; + + /** The model pattern used for parsing $param */ + public static Pattern patternParam = Pattern.compile(REGEX_PARAM); + + /** The parser of XML parameter definitions */ + private ParameterParser parameterParserXML = null; + + /** The parser of XML property definitions */ + private PropertyParser propertyParserXML = null; + + /** The data loaded from configuration files */ + private ConfigData configData; + + /** + * Initializes a newly created ParamController. Simultaneously initializes new + * ParameterParser and PropertyParser. + */ + public ParamController(ConfigData configData, CommonTypes types) { + parameterParserXML = new ParameterParser(types); + propertyParserXML = new PropertyParser(); + this.configData = configData; + } + + /** + * Reads XML files for all parameters. Processes the complex paramater values that depends on + * other parameter values. + */ + public void readParameters() { + File directory = new File(OptionItems.XML_DEFINITION_PATH); + if (directory.exists()) { + parameterParserXML.readParameterDefinition(configData.getParameterList()); + parameterParserXML.processParameterDependency(); + } + + Log.info("info.progress_control.load_parameter_description"); + } + + /** + * Reads XML files for all properties. Processes the complex attribute values that depends on + * other parameter values. + */ + public void readProperties() { + File directory = new File(OptionItems.XML_DEFINITION_PATH); + if (directory.exists()) { + propertyParserXML.readPropertyDefinition(configData.getPropertyList()); + propertyParserXML.processPropertyDependency(); + } + Log.info("info.progress_control.load_property_description"); + } + + /** + * Removes all parameters and properties that couldn't be parsed. + * + * @param figureList + * the list with graphics figures. + */ + public void removeInvalidParam(Map figureList) { + for (Section section : configData.getSectionList()) { + Iterator subsectionIter = section.getSubsectionList().iterator(); + while (subsectionIter.hasNext()) { + Subsection subsection = subsectionIter.next(); + Iterator groupIter = subsection.getGroupList().iterator(); + while (groupIter.hasNext()) { + Group group = groupIter.next(); + // parameters and properties + Iterator elementIter = group.getElementList().iterator(); + while (elementIter.hasNext()) { + ParentParameter element = elementIter.next(); + if (element instanceof Parameter) { + if (!parameterParserXML.getParsedParameterList().containsKey( + element.getName())) + elementIter.remove(); + } + if (element instanceof Property) { + if (!propertyParserXML.getParsedPropertyList().containsKey( + element.getName())) + elementIter.remove(); + } + } + // figures - remove invalid figures + if (group.getFigure() != null) { + if (!figureList.containsKey(group.getFigure().getName())) + group.setFigure(null); + } + if (group.getElementList().size() == 0) + groupIter.remove(); + } + } + } + } + + public Map getParsedParameterList() { + return parameterParserXML.getParsedParameterList(); + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/config/ParameterDependencyParser.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/config/ParameterDependencyParser.java new file mode 100644 index 000000000..0069a0f77 --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/config/ParameterDependencyParser.java @@ -0,0 +1,311 @@ +package cz.zcu.fav.kiv.editor.config; + +import java.text.DecimalFormat; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import cz.zcu.fav.kiv.editor.beans.parameters.Parameter; +import cz.zcu.fav.kiv.editor.config.constants.FileConst; +import cz.zcu.fav.kiv.editor.config.constants.TagDefinition; +import cz.zcu.fav.kiv.editor.controller.MessageWriter; +import cz.zcu.fav.kiv.editor.controller.errors.ParserException; +import cz.zcu.fav.kiv.editor.controller.resource.ResourceController; +import cz.zcu.fav.kiv.editor.utils.TagControl; + +/** + * The ParameterDependencyParser class contains methods for parsing parameter complex + * values that contains references to other parameter values. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class ParameterDependencyParser { + /** The sign asterisk */ + private static final String SIGN_ASTERISK = "*"; + + /** The sign plus left */ + private static final String SIGN_PLUS_LEFT = "+L"; + + /** The sign plus right */ + private static final String SIGN_PLUS_RIGHT = "+R"; + + /** The sign equal */ + private static final String SIGN_EQUAL = "="; + + /** The sign not equal */ + private static final String SIGN_NOT_EQUAL = "!="; + + /** The name contains */ + private static final String CONTAINS = "contains"; + + /** The format for formating double numbers */ + private static final DecimalFormat formatDouble = new DecimalFormat("0.##"); + + /** The parser of XML parameter definitions */ + private ParameterParser paramParser; + + /** The actually parsed parameter */ + private Parameter parameter; + + /** The flag indicating if the parameter value is valid */ + private boolean valid; + + /** + * Initializes a newly created ParameterDependencyParser. + * + * @param parser + * the parser of XML parameter definitions. + */ + public ParameterDependencyParser(ParameterParser parser) { + this.paramParser = parser; + } + + /** + * Parses the complex value of the parameter. + * + * @param parameter + * the parsed parameter. + * @return true if the parameter value is successfully parsed. + */ + public boolean parseParameterDependency(Parameter parameter) { + this.parameter = parameter; + valid = false; + + processXslChoose(parameter.getType().getValue()); + + if (!valid) + MessageWriter.writeWarning(ResourceController.getMessage( + "parser.parameters.invalid_value", FileConst.CONF_FILE_CONFIG, parameter + .getName(), parameter.getLineNumber())); + return valid; + } + + /** + * Parses simple complex value. + * + * @param simpleValue + * the complex parameter value. + */ + private void parseSimpleValue(String simpleValue) { + parseSimpleValue(simpleValue, ""); + } + + /** + * Parses simple complex value. + * + * @param complexValue + * the complex parameter value. + * @param secondAddValue + * the string creating the end of parameter value. + */ + private void parseSimpleValue(String complexValue, String secondAddValue) { + // $param * number + if (complexValue.matches("\\$[\\w\\.]+\\s*\\*\\s*[\\d\\.]+")) { + String[] valueParts = complexValue.split("\\*"); + evaluateSimpleValue(valueParts[0], valueParts[1], SIGN_ASTERISK, secondAddValue); + return; + } + // number * $param + if (complexValue.matches("\\d+\\s*\\*\\s*\\$[\\w\\.]+")) { + String[] valueParts = complexValue.split("\\*"); + evaluateSimpleValue(valueParts[1], valueParts[0], SIGN_ASTERISK, secondAddValue); + return; + } + // $param + if (complexValue.matches("\\$[\\w\\.]+")) { + evaluateSimpleValue(complexValue, null, null, secondAddValue); + return; + } + + // concat('..', $param) + if (complexValue.matches("concat\\('\\w+',\\s*\\$[\\w\\.]+\\)")) { + String[] valueParts = complexValue.split("[(,)]"); + evaluateSimpleValue(valueParts[2].trim(), valueParts[1].replaceAll("'", ""), + SIGN_PLUS_LEFT, secondAddValue); + return; + } + // concat($param, '..') + if (complexValue.matches("concat\\(\\$[\\w\\.]+,\\s*'\\w+'\\)")) { + String[] valueParts = complexValue.split("[(,)]"); + evaluateSimpleValue(valueParts[1].trim(), valueParts[2].replaceAll("'", ""), + SIGN_PLUS_RIGHT, secondAddValue); + return; + } + setParameterValue(complexValue); + } + + /** + * Parsed the structure .... + * + * @param complexValue + * the complex parameter value. + */ + private void processXslValueOf(String complexValue) { + String lineValue = complexValue.replaceAll("\n", "").trim(); + if (lineValue + .matches("(.+?)?")) { + Pattern patternXslValueOf = Pattern + .compile("((.+?))?"); + Matcher matcherXslValueOf = patternXslValueOf.matcher(complexValue); + if (matcherXslValueOf.find()) { + parseSimpleValue(matcherXslValueOf.group(1), + ((matcherXslValueOf.group(3) != null) ? matcherXslValueOf.group(3) : "")); + } + return; + } + parseSimpleValue(complexValue); + } + + /** + * Parsed the structure .... + * + * @param complexValue + * the complex parameter value. + */ + private void processXslChoose(String complexValue) { + String lineValue = complexValue.replaceAll("\n", ""); + if (lineValue.matches(".*")) { + Pattern patternWhen = Pattern.compile("(.+?)"); + Matcher matcherWhen = patternWhen.matcher(lineValue); + boolean testResult = false; + while (matcherWhen.find()) { + testResult = parseXslWhenTest(matcherWhen.group(1)); + if (testResult) { + processXslValueOf(matcherWhen.group(2)); + break; + } + } + if (!testResult) { + Pattern patternOtherwise = Pattern.compile("(.*)"); + Matcher matcherOtherwise = patternOtherwise.matcher(lineValue); + while (matcherOtherwise.find()) { + processXslValueOf(matcherOtherwise.group(1)); + } + } + return; + } + processXslValueOf(complexValue); + } + + /** + * Parses the condition test of the structure . + * + * @param testAttribute + * the content of attribute test. + * @return true if the condition in the test attribute is true. + */ + private boolean parseXslWhenTest(String testAttribute) { + // $param = 'value' or $param != 'value' + if (testAttribute.startsWith("$")) { + // control pattern: $param = 'value' or $param = value + Pattern pattern = Pattern.compile("\\$(.+?) ?(!?=) ?('?.++'?)"); + Matcher matcher = pattern.matcher(testAttribute); + if (matcher.find()) { + return evaluateXslWhenTest(matcher.group(1), matcher.group(2), matcher.group(3) + .replaceAll("'", "")); + } + } + + // contains($param, 'value') + if (testAttribute.startsWith(TagDefinition.ParameterTags.CONTAINS)) { + Pattern pattern = Pattern.compile("contains\\(\\$(\\$.+?), *('?.+?'?)\\)"); + Matcher matcher = pattern.matcher(testAttribute); + if (matcher.find()) { + return evaluateXslWhenTest(matcher.group(1), CONTAINS, matcher.group(2).replaceAll( + "'", "")); + } + } + return false; + } + + /** + * Evaluate the condition in the test attribute. + * + * @param param + * the name of parameter. + * @param sign + * the sign of the condition. + * @param value + * the value of the parameter. + * @return true if the condition is true. + */ + private boolean evaluateXslWhenTest(String param, String sign, String value) { + Parameter testParam = paramParser.getParsedParameterList().get(param); + if (sign.equals(SIGN_NOT_EQUAL)) { + return !testParam.getType().getValue().equals(value); + } + if (sign.equals(SIGN_EQUAL)) { + return testParam.getType().getValue().equals(value); + } + if (sign.equals(CONTAINS)) { + return testParam.getType().getValue().contains(value); + } + return false; + } + + /** + * Evaluates the content of the simple complex value and assigns the new value to the parameter. + * + * @param param + * the parameter on which the parameter is dependent. + * @param addValue + * the value added to the parameter value. + * @param sign + * the sign used for adding the value to the parameter value. + * @param secondAddValue + * the second value added to the parameter value. + */ + private void evaluateSimpleValue(String param, String addValue, String sign, + String secondAddValue) { + // parameter name without $ + String paramName = param.trim().substring(1); + // control parameter + Parameter par = paramParser.getParsedParameterList().get(paramName); + if (par == null) { + return; + } + String endValue = secondAddValue + + ((par.getType().getUnit() != null) ? par.getType().getUnit().getValue() : ""); + // only param value + if ((addValue == null) && (sign == null)) { + setParameterValue(par.getType().getValue() + endValue); + return; + } + + // * -> addValue must be number + if (sign.equals(SIGN_ASTERISK)) { + try { + Double result = Double.valueOf(addValue.trim()) + * Double.valueOf(par.getType().getValue()); + setParameterValue(formatDouble.format(result) + endValue); + } catch (NumberFormatException ex) { + } + return; + } + + // + -> addValue is string + if (sign.equals(SIGN_PLUS_LEFT)) { + setParameterValue(addValue + par.getType().getValue() + endValue); + } + if (sign.equals(SIGN_PLUS_RIGHT)) { + setParameterValue(par.getType().getValue() + addValue + endValue); + } + } + + /** + * Sets the new value to the parameter. + * + * @param newValue + * the new parameter value. + */ + private void setParameterValue(String newValue) { + try { + TagControl.controlSetTypeValue(parameter.getType(), newValue); + parameter.getType().assignDefaultFromValue(); + valid = true; + } catch (ParserException ex) { + valid = false; + } + + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/config/ParameterParser.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/config/ParameterParser.java new file mode 100644 index 000000000..98a27b54d --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/config/ParameterParser.java @@ -0,0 +1,199 @@ +package cz.zcu.fav.kiv.editor.config; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.regex.Matcher; + +import javax.xml.parsers.SAXParser; +import javax.xml.parsers.SAXParserFactory; + +import org.xml.sax.SAXException; +import org.xml.sax.XMLReader; + +import cz.zcu.fav.kiv.editor.beans.parameters.Parameter; +import cz.zcu.fav.kiv.editor.beans.types.CommonTypes; +import cz.zcu.fav.kiv.editor.config.constants.FileConst; +import cz.zcu.fav.kiv.editor.config.handlers.ParameterXmlHandler; +import cz.zcu.fav.kiv.editor.controller.MessageWriter; +import cz.zcu.fav.kiv.editor.controller.ProgressControl; +import cz.zcu.fav.kiv.editor.controller.errors.XslParserException; +import cz.zcu.fav.kiv.editor.controller.logger.Log; +import cz.zcu.fav.kiv.editor.controller.options.OptionItems; +import cz.zcu.fav.kiv.editor.controller.resource.ResourceController; + +/** + * The ParameterParser class contains methods for parsing files with XML definitions + * of parameters. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class ParameterParser { + + /** The max number of dependency nesting - to avoid cycle dependency **/ + private static final int LIMIT_LOOP = 5; + + /** The XML parser used for reading XML files */ + private XMLReader parser; + + /** The list of parsed parameters */ + private Map parsedParameterList; + + /** The list of unparsed parameters */ + private Map unparsedParameterList; + + /** The list of invalid parameters */ + private List invalidParameterList; + + /** The list of common types */ + private static CommonTypes commonTypes; + + /** The parser used for parsing parameter value dependencies */ + private ParameterDependencyParser paramDependencyParser; + + /** + * Initializes a newly created ParameterParser. Sets up the SAX parser used for + * parsing. + */ + public ParameterParser(CommonTypes types) { + try { + SAXParserFactory spf = SAXParserFactory.newInstance(); + spf.setValidating(false); + + SAXParser saxParser = spf.newSAXParser(); + parser = saxParser.getXMLReader(); + parser.setErrorHandler(new XslParserException()); + + commonTypes = types; + + unparsedParameterList = new HashMap(); + parsedParameterList = new HashMap(); + invalidParameterList = new ArrayList(); + } catch (Exception ex) { + Log.error(ex); + } + } + + /** + * In sequence parses for every parameter its XML definition file. + * + * @param parameterList + * the list of parameter names loaded from the main configuration file. + */ + public void readParameterDefinition(Map parameterList) { + Iterator> iter = parameterList.entrySet().iterator(); + while (iter.hasNext()) { + Map.Entry param = iter.next(); + //inform about file loading + ProgressControl.addStatMessage(ResourceController.getMessage("frame.intro.progress.read_file", OptionItems.XML_DEFINITION_PATH + File.separator + param.getValue().getName()+".xml")); + parseParameter(param.getValue()); + } + } + + /** + * For input parameter parses its XML definition file. + * + * @param element + * the parameter which XML file is parsed. + */ + private void parseParameter(Parameter element) { + try { + ParameterXmlHandler handler = new ParameterXmlHandler(element, commonTypes); + parser.setContentHandler(handler); + parser.parse(OptionItems.XML_DEFINITION_PATH + File.separator + element.getName() + + ".xml"); + if (!handler.isValid()) { + invalidParameterList.add(element.getName()); + } else { + if (handler.isParsed()) + parsedParameterList.put(element.getName(), element); + else + unparsedParameterList.put(element.getName(), element); + } + } catch (IOException ex) { + MessageWriter.writeWarning(ResourceController.getMessage( + "parser.xml_definition_file.missing_file", element.getName(), + OptionItems.XML_DEFINITION_PATH)); + invalidParameterList.add(element.getName()); + } catch (SAXException ex) { + Log.warn("error.param_parser.parser_error", ex); + invalidParameterList.add(element.getName()); + } + } + + /** + * Process values of parameters from unparsedParameterList. + */ + public void processParameterDependency() { + paramDependencyParser = new ParameterDependencyParser(this); + Map innerUnparsedParameterList = null; + StringBuilder message = new StringBuilder(); + int limitLoop = 0; + while(!unparsedParameterList.isEmpty()) { + innerUnparsedParameterList = unparsedParameterList; + unparsedParameterList = new HashMap(); + Iterator it = innerUnparsedParameterList.entrySet().iterator(); + while (it.hasNext()) { + Map.Entry param = (Map.Entry)it.next(); + if (limitLoop == LIMIT_LOOP) { + message.append(param.getKey() + ","); + } else { + //parse + parseParameterValue((Parameter)param.getValue(), innerUnparsedParameterList); + } + } + //to avoid cycle dependency + if (limitLoop == LIMIT_LOOP) { + MessageWriter.writeWarning(ResourceController.getMessage( + "parser.parameters.dependency_cycle", FileConst.CONF_FILE_CONFIG, message)); + break; + } + limitLoop++; + } + } + + public Map getParsedParameterList() { + return parsedParameterList; + } + + /** + * Parses parameter value that contains references to others parameters. + * @param param the parsed parameter. + * @param innerUnparsedParameterList the list of unparsed parameters. + */ + private void parseParameterValue(Parameter param, Map innerUnparsedParameterList) { + Matcher matcher = ParamController.patternParam.matcher(param.getType().getValue()); + boolean canBeParsed = true; + while(matcher.find()) { + String paramName = matcher.group().substring(1); + if (invalidParameterList.contains(paramName)) { + //parameter is invalid -> the depending parameter is invalid + invalidParameterList.add(param.getName()); + MessageWriter.writeWarning(ResourceController.getMessage( + "parser.parameters.invalid_value", FileConst.CONF_FILE_CONFIG, param + .getName(), param.getLineNumber())); + return; + } + if (!parsedParameterList.containsKey(paramName)) { + //param is not yet parsed + if (!innerUnparsedParameterList.containsKey(paramName)) + parseParameter(new Parameter(paramName)); + canBeParsed = false; + } + } + if (!canBeParsed) { + unparsedParameterList.put(param.getName(), param); + } else { + //parse parameter value + if (paramDependencyParser.parseParameterDependency(param)) + parsedParameterList.put(param.getName(), param); + else + invalidParameterList.add(param.getName()); + } + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/config/ParameterTransformation.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/config/ParameterTransformation.java new file mode 100644 index 000000000..8aa5df415 --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/config/ParameterTransformation.java @@ -0,0 +1,43 @@ +package cz.zcu.fav.kiv.editor.config; + +import java.io.ByteArrayOutputStream; +import java.io.InputStream; +import java.io.StringReader; + +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.stream.StreamResult; +import javax.xml.transform.stream.StreamSource; + +import cz.zcu.fav.kiv.editor.config.constants.FileConst; +import cz.zcu.fav.kiv.editor.controller.logger.Log; + +public class ParameterTransformation { + /** + * Transform text description in DocBook to HTML format. + * + * @param input + * the text in DocBook. + * @return the input text transformed to HTML. + */ + public static String htmlTransform(String input) { + try { + InputStream convertFile = ConfigParser.class + .getResourceAsStream(FileConst.CONF_FILE_CONVERT); + + TransformerFactory trf = TransformerFactory.newInstance(); + Transformer transformer = trf.newTransformer(new StreamSource(convertFile)); + + ByteArrayOutputStream out = new ByteArrayOutputStream(); + + String tempStr = new String(input.getBytes(), "windows-1250"); + transformer.transform(new StreamSource(new StringReader(tempStr)), + new StreamResult(out)); + + return out.toString(); + } catch (Throwable ex) { + Log.warn("error.param_parser.transformation_error", ex); + } + return null; + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/config/PropertyParser.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/config/PropertyParser.java new file mode 100644 index 000000000..a84f97665 --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/config/PropertyParser.java @@ -0,0 +1,120 @@ +package cz.zcu.fav.kiv.editor.config; + +import java.io.File; +import java.io.IOException; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + +import javax.xml.parsers.SAXParser; +import javax.xml.parsers.SAXParserFactory; + +import org.xml.sax.SAXException; +import org.xml.sax.XMLReader; + +import cz.zcu.fav.kiv.editor.beans.properties.Attribute; +import cz.zcu.fav.kiv.editor.beans.properties.Property; +import cz.zcu.fav.kiv.editor.config.handlers.PropertyXmlHandler; +import cz.zcu.fav.kiv.editor.controller.MessageWriter; +import cz.zcu.fav.kiv.editor.controller.ProgressControl; +import cz.zcu.fav.kiv.editor.controller.errors.XslParserException; +import cz.zcu.fav.kiv.editor.controller.logger.Log; +import cz.zcu.fav.kiv.editor.controller.options.OptionItems; +import cz.zcu.fav.kiv.editor.controller.resource.ResourceController; + +/** + * The PropertyParser class contains methods for parsing files with XML definitions + * of properties. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class PropertyParser { + /** The XML parser used for reading XML files */ + private XMLReader parser; + + /** The list of parsed properties */ + private Map parsedPropertyList; + + /** The list of unparsed attributes */ + private Map unparsedAttributeList; + + /** + * Initializes a newly created PropertyParser. Sets up the SAX parser used for + * parsing. + */ + public PropertyParser() { + try { + SAXParserFactory spf = SAXParserFactory.newInstance(); + spf.setValidating(false); + + SAXParser saxParser = spf.newSAXParser(); + parser = saxParser.getXMLReader(); + parser.setErrorHandler(new XslParserException()); + + unparsedAttributeList = new HashMap(); + parsedPropertyList = new HashMap(); + } catch (Exception ex) { + Log.error(ex); + } + } + + /** + * In sequence parses for every property its XML definition file. + * + * @param propertyList + * the list of property names loaded from the main configuration file. + */ + public void readPropertyDefinition(Map propertyList) { + Iterator> iter = propertyList.entrySet().iterator(); + while (iter.hasNext()) { + Map.Entry prop = iter.next(); + ProgressControl.addStatMessage(ResourceController.getMessage("frame.intro.progress.read_file", OptionItems.XML_DEFINITION_PATH + File.separator + prop.getValue().getName()+".xml")); + parseProperty(prop.getValue()); + } + } + + /** + * For input property parses its XML definition file. + * + * @param element + * the property which XML file is parsed. + */ + private void parseProperty(Property element) { + try { + PropertyXmlHandler handler = new PropertyXmlHandler(element); + parser.setContentHandler(handler); + parser.parse(OptionItems.XML_DEFINITION_PATH + File.separator + element.getName() + + ".xml"); + if (handler.isValid()) { + parsedPropertyList.put(element.getName(), element); + } + //unparsed attributes + if (handler.getUnparsedAttributeList().size() > 0) + unparsedAttributeList.putAll(handler.getUnparsedAttributeList()); + } catch (IOException ex) { + MessageWriter.writeWarning(ResourceController.getMessage( + "parser.xml_definition_file.missing_file", element.getName(), + OptionItems.XML_DEFINITION_PATH)); + } catch (SAXException ex) { + Log.warn("error.param_parser.parser_error", ex); + } + } + + /** + * Process values of parameters from unparsedAttributeList. + */ + public void processPropertyDependency() { +//TODO parse complicated dependent attribute values +// Iterator it = unparsedAttributeList.entrySet().iterator(); +// while (it.hasNext()) { +// Map.Entry pairs = (Map.Entry)it.next(); +// pairs.getKey() (Attribute)pairs.getValue() +// } + } + + public Map getParsedPropertyList() { + return parsedPropertyList; + } + +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/config/constants/FileConst.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/config/constants/FileConst.java new file mode 100644 index 000000000..213153ebd --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/config/constants/FileConst.java @@ -0,0 +1,46 @@ +package cz.zcu.fav.kiv.editor.config.constants; + +import java.io.File; + +/** + * The FileConst class contains paths and names of configuration files and their XSL + * schemas. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class FileConst { + + /** The directory where configuration files are stored */ + public static final String CONF_FILE_XML_DIR = "configuration" + File.separator; + + /** The directory where XML schemas of configuration files are stored */ + public static final String CONF_FILE_XSD_DIR = '\u002f' + "schemas" + '\u002f'; + + /** The configuration file describing layout of parameters and attribute-sets */ + public static final String CONF_FILE_CONFIG = CONF_FILE_XML_DIR + "config.xml"; + + /** The XML schema of the configuration file describing layout of parameters and attribute-sets */ + public static final String CONF_FILE_CONFIG_XSD = CONF_FILE_XSD_DIR + "config.xsd"; + + /** The configuration file describing attributes */ + public static final String CONF_FILE_ATTRIBUTES = CONF_FILE_XML_DIR + "attributes.xml"; + + /** The XML schema of the configuration file describing attributes */ + public static final String CONF_FILE_ATTRIBUTES_XSD = CONF_FILE_XSD_DIR + "attributes.xsd"; + + /** The configuration file describing types */ + public static final String CONF_FILE_TYPE = CONF_FILE_XML_DIR + "types.xml"; + + /** The XML schema of the configuration file describing types */ + public static final String CONF_FILE_TYPE_XSD = CONF_FILE_XSD_DIR + "types.xsd"; + + /** The configuration file describing graphics figures */ + public static final String CONF_FILE_FIGURES = CONF_FILE_XML_DIR + "graphics.xml"; + + /** The XML schema of the configuration file describing graphics figures */ + public static final String CONF_FILE_FIGURES_XSD = CONF_FILE_XSD_DIR + "graphics.xsd"; + + /** The XSL file used for converting text in DocBook to HTML format */ + public static final String CONF_FILE_CONVERT = CONF_FILE_XSD_DIR + "convert.xsl"; +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/config/constants/TagDefinition.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/config/constants/TagDefinition.java new file mode 100644 index 000000000..745b286fc --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/config/constants/TagDefinition.java @@ -0,0 +1,177 @@ +package cz.zcu.fav.kiv.editor.config.constants; + +/** + * The TagDefinition class contains enumarated lists of elements used in + * configuration files and XML parameter definition files. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class TagDefinition { + /** The size of buffer used for reading element contents */ + public static int BUFFER_SIZE = 300; + + /** The size of buffer used for reading contents of elements with descriptions */ + public static int BUFFER_SIZE_DESCRIPTION = 500; + + /** + * The enumerated list of elements used in the configuration file with layout of parameters and + * attribute-sets - config.xml. + */ + public static enum ConfigTags { + SECTION("section"), SUBSECTION("subsection"), GROUP("group"), PARAMETER("parameter"), ATTRIBUTE_SET("attribute-set"), NULL(""); + + private String value; + + ConfigTags(String value) { + this.value = value; + } + + /** + * Returns predefined constant of element according to the element name. + * + * @param key + * the name of element. + * @return a constant of element with defined name. + */ + public static ConfigTags getValue(String key) { + for (ConfigTags conf : values()) { + if (conf.value.equals(key)) + return conf; + } + return NULL; + } + } + + /** + * The enumerated list of elements used in the configuration file with attributes - + * attributes.xml. + */ + public static enum AttributeTags { + GROUP("group"), ATTRIBUTE("attribute"), NAME("name"), TYPE("type"), VALUES("values"), + COMPONENT("component"), DEFAULT("default"), UNIT("unit"), NULL(""); + private String value; + + AttributeTags(String value) { + this.value = value; + } + + /** + * Returns predefined constant of element according to the element name. + * + * @param key + * the name of element. + * @return a constant of element with defined name. + */ + public static AttributeTags getValue(String key) { + for (AttributeTags attr : values()) { + if (attr.value.equals(key)) + return attr; + } + return NULL; + } + + public String toString() { + return this.name().toLowerCase(); + } + } + + /** + * The enumerated list of elements used in files with XML parameter definitions. + */ + public static enum ParameterTags { + REFSECTION("refsection"), REFPURPOSE("refpurpose"), REFMISCINFO("refmiscinfo"), REFMETA("refmeta"), + DATATYPE("datatype"), VALUE("value"), ALT("alt"), LIST_TYPE("list-type"), NULL(""), XSL_PARAM("xsl:param"), + XSL_ATTRIBUTE("xsl:attribute"); + + //type + public static final String OPEN = "open"; + public static final String OTHERCLASS = "otherclass"; + public static final String FO = "fo"; + + //value + public static final String CONDITION = "condition"; + public static final String SELECT = "select"; + public static final String TEST = "test"; + public static final String CONTAINS = "contains"; + public static final String NAME = "name"; + + private String value; + ParameterTags(String value) { + this.value = value; + } + /** + * Returns predefined constant of element according to the element name. + * + * @param key + * the name of element. + * @return a constant of element with defined name. + */ + public static ParameterTags getEnumValue(String key) { + for (ParameterTags param : values()) { + if (param.value.equals(key)) + return param; + } + return NULL; + } + + public String toString() { + return this.value; + } + public String getValue() { + return value; + } + } + + /** + * The enumerated list of elements used in the configuration file with graphics figures - + * graphics.xml. + */ + public static enum FigureTags { + FIGURE, PARAMETER, NULL; + + /** + * Returns predefined constant of element according to the element name. + * + * @param key + * the name of element. + * @return a constant of element with defined name. + */ + public static FigureTags getValue(String key) { + try { + return FigureTags.valueOf(key.toUpperCase()); + } catch (IllegalArgumentException ex) { + return NULL; + } + } + } + + /** + * The enumerated list of elements used in the configuration file with types - types.xml. + */ + public static enum TypeTags { + COLOR("color"), UNIT("unit"), FONT("font"), NULL(""); + + private String value; + + + TypeTags(String value) { + this.value = value; + } + /** + * Returns predefined constant of element according to the element name. + * + * @param key + * the name of element. + * @return a constant of element with defined name. + */ + public static TypeTags getValue(String key) { + for (TypeTags type : values()) { + if (type.value.equals(key)) + return type; + } + return NULL; + } + } + +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/config/constants/TypeEnum.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/config/constants/TypeEnum.java new file mode 100644 index 000000000..2814b17af --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/config/constants/TypeEnum.java @@ -0,0 +1,56 @@ +package cz.zcu.fav.kiv.editor.config.constants; + + +/** + * The ComponentEnum class is the enumerated list of GUI components supported by the + * application. Components are used for displaying parameter Types. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public enum TypeEnum { + BOOLEAN("boolean"), STRING("string"), INTEGER("integer"), TABLE("table"), FLOAT("float"), LIST("list"), + LIST_OPEN("list-open"), LENGTH("length"), URI("uri"), NUMBER("number"), COLOR("color"), + FILENAME("filename"), RTF("rtf"), FONT("font"), ATTRIBUTE_SET("attribute set"); + + String value; + + TypeEnum(String value) { + this.value = value; + } + + /** + * Returns ComponentEnum object for the corresponding name. If the input + * component is not supported then the DUMMY component is returned. + * + * @param name + * the name of the component. + * @return the component for the input name. + */ + public static TypeEnum getValue(String name){ + for (TypeEnum type : values()) { + if (type.value.equals(name)) + return type; + } + return null; + } + + /** + * Specifies if the input component is among predefined components ComponentEnum. + * + * @param name + * the name of the component. + * @return true if the component is among predefined components. + */ + public static boolean contains(String name) { + for (TypeEnum type : values()) { + if (type.value.equals(name)) + return true; + } + return false; + } + + public String toString() { + return this.value; + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/config/handlers/AttributeXmlHandler.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/config/handlers/AttributeXmlHandler.java new file mode 100644 index 000000000..31c7c46c7 --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/config/handlers/AttributeXmlHandler.java @@ -0,0 +1,184 @@ +package cz.zcu.fav.kiv.editor.config.handlers; + +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +import org.xml.sax.Attributes; +import org.xml.sax.Locator; +import org.xml.sax.helpers.DefaultHandler; + +import cz.zcu.fav.kiv.editor.beans.properties.Attribute; +import cz.zcu.fav.kiv.editor.beans.properties.AttributeGroup; +import cz.zcu.fav.kiv.editor.beans.properties.TypeAttr; +import cz.zcu.fav.kiv.editor.beans.properties.UnitAttr; +import cz.zcu.fav.kiv.editor.beans.types.CommonTypes; +import cz.zcu.fav.kiv.editor.config.constants.FileConst; +import cz.zcu.fav.kiv.editor.config.constants.TagDefinition; +import cz.zcu.fav.kiv.editor.config.constants.TypeEnum; +import cz.zcu.fav.kiv.editor.config.constants.TagDefinition.AttributeTags; +import cz.zcu.fav.kiv.editor.controller.MessageWriter; +import cz.zcu.fav.kiv.editor.controller.errors.ParserException; +import cz.zcu.fav.kiv.editor.controller.resource.ResourceController; +import cz.zcu.fav.kiv.editor.utils.TagControl; + +/** + * The AttributeXmlHandler class is used for parsing the configuration file with + * attributes - attributes.xml. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class AttributeXmlHandler extends DefaultHandler { + /** The locator specifying actual line number */ + private Locator locator; + + /** The data containing editor data structure */ + private CommonTypes commonTypes; + + /** The list of attributes of one group */ + private List atrributeList; + + /** The list of groups containing attributes */ + private List attributeGroupList; + + /** The group containing attributes */ + private AttributeGroup attrGroup; + + /** The attribute type */ + private TypeAttr type; + + /** The flag specifying whether the parser is inside value element */ + private boolean insideAttributeElement = false; + + /** The string buffer for content of value element */ + private StringBuffer attributeBuffer = new StringBuffer(TagDefinition.BUFFER_SIZE); + + /** + * Initializes a newly created AttributeXmlHandler with ConfigData. + * + * @param commonTypes + * the common types of parameters. + */ + public AttributeXmlHandler(CommonTypes commonTypes) { + attributeGroupList = new ArrayList(); + this.commonTypes = commonTypes; + } + + @Override + public void startElement(String namespaceURI, String localName, String qName, Attributes atts) { + AttributeTags enumTag = TagDefinition.AttributeTags.getValue(qName); + switch (enumTag) { + case GROUP: + attrGroup = new AttributeGroup(atts.getValue(0)); + atrributeList = new ArrayList(); + break; + case ATTRIBUTE: + type = controlAttribute(atts.getValue(AttributeTags.TYPE.toString()), atts + .getValue(AttributeTags.DEFAULT.toString()), atts.getValue(AttributeTags.VALUES + .toString())); + insideAttributeElement = true; + attributeBuffer.setLength(0); + break; + } + } + + @Override + public void endElement(String namespaceURI, String localName, String qName) { + AttributeTags enumTag = TagDefinition.AttributeTags.getValue(qName); + switch (enumTag) { + case GROUP: + attrGroup.setAttributeList(atrributeList); + attributeGroupList.add(attrGroup); + break; + case ATTRIBUTE: + if (type != null) + atrributeList.add(new Attribute(attributeBuffer.toString(), type)); + insideAttributeElement = false; + break; + } + } + + @Override + public void characters(char[] ch, int start, int length) { + if (insideAttributeElement) { + attributeBuffer.append(ch, start, length); + } + } + + /** + * Assignes predefined type values to the attribute type that has defined a name of predefined + * values. + */ + private void addTypeValues(TypeAttr type) { + switch (type.getName()) { + case FONT: + type.setValueList(commonTypes.getFonts()); + break; + case COLOR: + type.setValueList(commonTypes.getColors()); + break; + } + } + + /** + * Controls if the type, values and default value of the attribute are valid. + * + * @return TypeAttr if the attribute is valid. + */ + private TypeAttr controlAttribute(String typeName, String defaultValue, String values) { + type = new TypeAttr(); + TypeEnum typeEnum = TypeEnum.getValue(typeName); + if (typeEnum == null) { + MessageWriter.writeWarning(ResourceController.getMessage( + "parser.attributes.invalid_attribute_type", + FileConst.CONF_FILE_ATTRIBUTES, this.locator.getLineNumber())); + return null; + } + type.setName(typeEnum); + // values + if (values != null) { + try { + String[] valueList = values.split(","); + Map valueMap = new LinkedHashMap(); + for (String val : valueList) { + valueMap.put(val.trim(), val.trim()); + } + type.setValueList(valueMap); + } catch (Exception ex) { + MessageWriter.writeWarning(ResourceController.getMessage( + "parser.attributes.invalid_attribute_value", + FileConst.CONF_FILE_ATTRIBUTES, this.locator.getLineNumber())); + return null; + } + } + // add unit + if (type.getName().equals(TypeEnum.LENGTH)) { + type.setUnit(new UnitAttr(commonTypes.getUnits())); + } + + // add common types values + addTypeValues(type); + + // default value + try { + TagControl.controlSetTypeValue(type, defaultValue); + type.assignDefaultFromValue(); + } catch (ParserException ex){ + MessageWriter.writeWarning(ResourceController.getMessage( + "parser.attributes.invalid_attribute_default_value", FileConst.CONF_FILE_ATTRIBUTES, + this.locator.getLineNumber())); + return null; + } + return type; + } + + public void setDocumentLocator(Locator locator) { + this.locator = locator; + } + + public AttributeGroup[] getAttrGroupList() { + return attributeGroupList.toArray(new AttributeGroup[0]); + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/config/handlers/ConfigXmlHandler.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/config/handlers/ConfigXmlHandler.java new file mode 100644 index 000000000..cb2ae4ef2 --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/config/handlers/ConfigXmlHandler.java @@ -0,0 +1,215 @@ +package cz.zcu.fav.kiv.editor.config.handlers; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.TreeMap; + +import org.xml.sax.Attributes; +import org.xml.sax.Locator; +import org.xml.sax.helpers.DefaultHandler; + +import cz.zcu.fav.kiv.editor.beans.common.ParentParameter; +import cz.zcu.fav.kiv.editor.beans.graphics.Figure; +import cz.zcu.fav.kiv.editor.beans.parameters.Parameter; +import cz.zcu.fav.kiv.editor.beans.properties.AttributeGroup; +import cz.zcu.fav.kiv.editor.beans.properties.Property; +import cz.zcu.fav.kiv.editor.beans.sections.Group; +import cz.zcu.fav.kiv.editor.beans.sections.Section; +import cz.zcu.fav.kiv.editor.beans.sections.Subsection; +import cz.zcu.fav.kiv.editor.config.constants.FileConst; +import cz.zcu.fav.kiv.editor.config.constants.TagDefinition; +import cz.zcu.fav.kiv.editor.config.constants.TagDefinition.ConfigTags; +import cz.zcu.fav.kiv.editor.controller.MessageWriter; +import cz.zcu.fav.kiv.editor.controller.resource.ResourceController; + +/** + * The ConfigXmlHandler class is used for parsing the configuration file with layout + * of parameters and attribute-sets - config.xml. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class ConfigXmlHandler extends DefaultHandler { + /** The locator specifying actual line number */ + private Locator locator; + + /** The list of parameters - key is parameter name */ + private Map parameterList; + + /** The list of groups containing attributes */ + private AttributeGroup[] attributeGroupList; + + /** The list of properties - key is property name */ + private Map propertyList; + + /** The list of graphics figures */ + private Map figureList = null; + + /** The group */ + private Group group; + + /** The list of sections */ + private List
sectionList; + + /** The section */ + private Section section; + + /** The list of subsections */ + private List subsectionList; + + /** The subsection */ + private Subsection subsection; + + /** The list of groups */ + private List groupList; + + /** The list of elements - Parameter and Property */ + private List elementList; + + /** The flag specifying whether the parser is inside parameter element */ + private boolean insideParameterElement = false; + + /** The flag specifying whether the parser is inside property element */ + private boolean insidePropertyElement = false; + + /** The string buffer for content of parameter element */ + private StringBuffer parameterBuffer = new StringBuffer(TagDefinition.BUFFER_SIZE); + + /** The string buffer for content of property element */ + private StringBuffer propertyBuffer = new StringBuffer(TagDefinition.BUFFER_SIZE); + + /** + * Initializes a newly created ConfigXmlHandler with list of + * AttributeGroups. + * + * @param attributeGroupList + * the list of attribute groups. + */ + public ConfigXmlHandler(AttributeGroup[] attributeGroupList) { + sectionList = new ArrayList
(); + this.parameterList = new TreeMap(); + this.attributeGroupList = attributeGroupList; + this.propertyList = new TreeMap(); + this.figureList = new TreeMap(); + } + + @Override + public void startElement(String namespaceURI, String localName, String qName, Attributes atts) { + ConfigTags enumTag = TagDefinition.ConfigTags.getValue(qName); + switch (enumTag) { + case SECTION: + section = new Section(atts.getValue(0)); + subsectionList = new ArrayList(); + break; + case SUBSECTION: + subsection = new Subsection(atts.getValue(0)); + groupList = new ArrayList(); + break; + case GROUP: + group = new Group(atts.getValue(0)); + if (atts.getValue(1) != null) { + Figure fig = new Figure(atts.getValue(1)); + group.setFigure(fig); + figureList.put(atts.getValue(1), fig); + } + elementList = new ArrayList(); + break; + case PARAMETER: + insideParameterElement = true; + parameterBuffer.setLength(0); + break; + case ATTRIBUTE_SET: + insidePropertyElement = true; + propertyBuffer.setLength(0); + break; + } + } + + @Override + public void endElement(String namespaceURI, String localName, String qName) { + ConfigTags enumTag = TagDefinition.ConfigTags.getValue(qName); + switch (enumTag) { + case SECTION: + if (subsectionList.size() != 0) { + section.setSubsectionList(subsectionList); + sectionList.add(section); + } + break; + case SUBSECTION: + if (groupList.size() != 0) { + subsection.setGroupList(groupList); + subsectionList.add(subsection); + } + break; + case GROUP: + if (elementList.size() != 0) { + group.setElementList(elementList); + groupList.add(group); + } + break; + case PARAMETER: + insideParameterElement = false; + Parameter newParameter = new Parameter(parameterBuffer.toString(), locator.getLineNumber()); + if (!parameterList.containsKey(parameterBuffer.toString())) { + parameterList.put(parameterBuffer.toString(), newParameter); + elementList.add(newParameter); + } else { + MessageWriter.writeWarning(ResourceController.getMessage( + "parser.config.duplicate_parameter", + FileConst.CONF_FILE_CONFIG, parameterBuffer.toString(), this.locator.getLineNumber())); + } + break; + case ATTRIBUTE_SET: + insidePropertyElement = false; + Property newProperty = new Property(propertyBuffer.toString(), cloneGroups(attributeGroupList), locator.getLineNumber()); + propertyList.put(propertyBuffer.toString(), newProperty); + elementList.add(newProperty); + break; + } + } + + @Override + public void characters(char[] ch, int start, int length) { + if (insideParameterElement) { + parameterBuffer.append(ch, start, length); + } else if (insidePropertyElement) { + propertyBuffer.append(ch, start, length); + } + } + + /** + * Makes copies of all attribute groups. + * + * @param groupList + * the list of atribute groups. + * @return a copy of the input list of attribute groups. + */ + private AttributeGroup[] cloneGroups(AttributeGroup[] groupList) { + AttributeGroup[] newGroups = new AttributeGroup[groupList.length]; + for (int i = 0; i < groupList.length; i++) { + newGroups[i] = (AttributeGroup) groupList[i].clone(); + } + return newGroups; + } + + public void setDocumentLocator(Locator locator) { + this.locator = locator; + } + + public List
getSections() { + return sectionList; + } + + public Map getPropertyList() { + return propertyList; + } + + public Map getParameterList() { + return parameterList; + } + + public Map getFigureList() { + return figureList; + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/config/handlers/FigureXmlHandler.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/config/handlers/FigureXmlHandler.java new file mode 100644 index 000000000..8e75da00a --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/config/handlers/FigureXmlHandler.java @@ -0,0 +1,137 @@ +package cz.zcu.fav.kiv.editor.config.handlers; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import org.xml.sax.Attributes; +import org.xml.sax.Locator; +import org.xml.sax.helpers.DefaultHandler; + +import cz.zcu.fav.kiv.editor.beans.graphics.Figure; +import cz.zcu.fav.kiv.editor.beans.parameters.Parameter; +import cz.zcu.fav.kiv.editor.config.constants.FileConst; +import cz.zcu.fav.kiv.editor.config.constants.TagDefinition; +import cz.zcu.fav.kiv.editor.config.constants.TagDefinition.FigureTags; +import cz.zcu.fav.kiv.editor.controller.MessageWriter; +import cz.zcu.fav.kiv.editor.controller.resource.ResourceController; +import cz.zcu.fav.kiv.editor.displays.GraphicsFigure; + +/** + * The FigureXmlHandler class is used for parsing the configuration file with + * graphics figures - graphics.xml. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class FigureXmlHandler extends DefaultHandler { + /** The locator specifying actual line number */ + private Locator locator; + + /** The number of the line with figure element */ + private int figureLine; + + /** The list of all figures - key is the figure name */ + private Map figureList; + + /** The graphics figure */ + private Figure figure; + + private Boolean valid; + + /** The list of parameters that belongs to a graphics figure */ + private List classParameterList; + + /** The list of all parameters - key is the parameter name */ + private Map allParameterList; + + /** The flag specifying whether the parser is inside parameter element */ + private boolean insideParameterElement = false; + + /** The string buffer for content of parameter element */ + private StringBuffer parameterBuffer = new StringBuffer(TagDefinition.BUFFER_SIZE); + + /** + * Initializes a newly created FigureXmlHandler with list of + * Parameters. + * + * @param parameterList + * the list of all parameters. + */ + public FigureXmlHandler(Map parameterList, Map figList) { + figureList = figList; + this.allParameterList = parameterList; + } + + @Override + public void startElement(String namespaceURI, String localName, String qName, Attributes atts) { + FigureTags enumTag = TagDefinition.FigureTags.getValue(qName); + switch (enumTag) { + case FIGURE: + figure = figureList.get(atts.getValue(0)); + if (figure != null) + figure.setClassName(atts.getValue(1)); + classParameterList = new ArrayList(); + this.figureLine = this.locator.getLineNumber(); + valid = true; + break; + case PARAMETER: + insideParameterElement = true; + parameterBuffer.setLength(0); + break; + } + } + + @Override + public void endElement(String namespaceURI, String localName, String qName) { + FigureTags enumTag = TagDefinition.FigureTags.getValue(qName); + switch (enumTag) { + case FIGURE: + if (figure != null) { + if (!valid) { + // invalid figure + figureList.remove(figure.getName()); + return; + } + try { + GraphicsFigure graphicsFigure = (GraphicsFigure) Class.forName( + figure.getClassName()).newInstance(); + graphicsFigure.setInputs(classParameterList.toArray(new Parameter[0])); + + figure.setParameterList(classParameterList.toArray(new Parameter[0])); + } catch (Exception ex) { + MessageWriter.writeWarning(ResourceController.getMessage( + "parser.figures.invalid_class", FileConst.CONF_FILE_FIGURES, figure + .getName(), figureLine, figure.getClassName())); + figureList.remove(figure.getName()); + } + } + break; + case PARAMETER: + insideParameterElement = false; + if (figure != null) { + if (allParameterList.containsKey(parameterBuffer.toString())) + classParameterList.add(allParameterList.get(parameterBuffer.toString())); + else { + MessageWriter.writeWarning(ResourceController.getMessage( + "parser.figures.invalid_parameter_value", FileConst.CONF_FILE_FIGURES, + figure.getName(), figureLine, parameterBuffer.toString())); + valid = false; + } + } + break; + } + } + + @Override + public void characters(char[] ch, int start, int length) { + if (insideParameterElement) { + parameterBuffer.append(ch, start, length); + } + } + + public void setDocumentLocator(Locator locator) { + this.locator = locator; + } + +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/config/handlers/ParameterXmlHandler.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/config/handlers/ParameterXmlHandler.java new file mode 100644 index 000000000..046b41904 --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/config/handlers/ParameterXmlHandler.java @@ -0,0 +1,348 @@ +package cz.zcu.fav.kiv.editor.config.handlers; + +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.regex.Matcher; + +import org.xml.sax.Attributes; +import org.xml.sax.helpers.DefaultHandler; + +import cz.zcu.fav.kiv.editor.beans.parameters.Parameter; +import cz.zcu.fav.kiv.editor.beans.parameters.TypeParam; +import cz.zcu.fav.kiv.editor.beans.parameters.UnitParam; +import cz.zcu.fav.kiv.editor.beans.types.CommonTypes; +import cz.zcu.fav.kiv.editor.config.ParamController; +import cz.zcu.fav.kiv.editor.config.ParameterTransformation; +import cz.zcu.fav.kiv.editor.config.constants.FileConst; +import cz.zcu.fav.kiv.editor.config.constants.TagDefinition; +import cz.zcu.fav.kiv.editor.config.constants.TypeEnum; +import cz.zcu.fav.kiv.editor.config.constants.TagDefinition.ParameterTags; +import cz.zcu.fav.kiv.editor.controller.MessageWriter; +import cz.zcu.fav.kiv.editor.controller.errors.ParserException; +import cz.zcu.fav.kiv.editor.controller.resource.ResourceController; +import cz.zcu.fav.kiv.editor.utils.TagControl; + +/** + * The ParameterXmlHandler class is used for parsing files with XML definitions of + * parameters. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class ParameterXmlHandler extends DefaultHandler { + + /** The parameter which XML file is parsed */ + private Parameter parameter; + + /** The list of common types */ + private static CommonTypes commonTypes; + + /** The flag indicating if the actually parsed parameter XML is valid */ + private boolean valid = true; + + /** + * The flag indicating if the actually parsed parameter value can be parsed without dependencies + * on other parameters + */ + private boolean parsed = false; + + /** The list of default values of the parameter */ + private Map valueList; + + /** The flag specifying whether the parser is inside element */ + private boolean insideRefsection = false; + + /** The flag specifying whether the parser is inside element */ + private boolean insideRefpurpose = false; + + /** The flag specifying whether the parser is inside element */ + private boolean insideRefmiscinfoDatatype = false; + + /** The flag specifying whether the parser is inside element */ + private boolean insideRefmiscinfoValue = false; + + /** + * The flag specifying whether the parser is inside + * element + */ + private boolean insideRefmiscinfoValueAlt = false; + + /** The flag specifying whether the parser is inside element */ + private boolean insideRefmiscinfoListType = false; + + /** The flag specifying whether the parser is inside element */ + private boolean insideXslParam = false; + + /** The string buffer for content of description element */ + private StringBuffer descriptionBuffer = new StringBuffer(TagDefinition.BUFFER_SIZE_DESCRIPTION); + + /** The string buffer for content of element */ + private StringBuffer purposeBuffer = new StringBuffer(TagDefinition.BUFFER_SIZE_DESCRIPTION); + + /** The string buffer for content of element */ + private StringBuffer insideXslParamBuffer = new StringBuffer( + TagDefinition.BUFFER_SIZE_DESCRIPTION); + + /** The string buffer for content of element */ + private StringBuffer refmiscinfoDatatypeBuffer = new StringBuffer(TagDefinition.BUFFER_SIZE); + + /** The string buffer for content of element */ + private StringBuffer refmiscinfoValueBuffer = new StringBuffer(TagDefinition.BUFFER_SIZE); + + /** The string buffer for content of element */ + private StringBuffer refmiscinfoValueAltBuffer = new StringBuffer(TagDefinition.BUFFER_SIZE); + + /** The string buffer for content of element */ + private StringBuffer refmiscinfoListTypeBuffer = new StringBuffer(TagDefinition.BUFFER_SIZE); + + /** + * Initializes a newly created empty ParameterXmlHandler. + */ + public ParameterXmlHandler(Parameter parameter, CommonTypes types) { + this.parameter = parameter; + commonTypes = types; + } + + @Override + public void startElement(String namespaceURI, String localName, String qName, Attributes atts) { + if (insideXslParam) { + insideXslParamBuffer.append("<" + qName); + for (int i = 0; i < atts.getLength(); i++) { + insideXslParamBuffer.append(" " + atts.getQName(i) + "=\"" + atts.getValue(i) + + "\""); + } + insideXslParamBuffer.append(">"); + } + ParameterTags enumTag = ParameterTags.getEnumValue(qName); + switch (enumTag) { + case REFMETA: + valueList = new LinkedHashMap(); + break; + case REFSECTION: + insideRefsection = true; + descriptionBuffer.setLength(0); + break; + case REFPURPOSE: + insideRefpurpose = true; + purposeBuffer.setLength(0); + break; + case REFMISCINFO: + ParameterTags attrOtherClass = ParameterTags.getEnumValue(atts + .getValue(ParameterTags.OTHERCLASS)); + switch (attrOtherClass) { + case DATATYPE: + insideRefmiscinfoDatatype = true; + break; + case VALUE: + insideRefmiscinfoValue = true; + refmiscinfoValueBuffer.setLength(0); + break; + case LIST_TYPE: + insideRefmiscinfoListType = true; + break; + } + break; + case ALT: + insideRefmiscinfoValueAlt = true; + refmiscinfoValueAltBuffer.setLength(0); + break; + case XSL_PARAM: + insideXslParamBuffer.setLength(0); + // parse select + if (valid) + insideXslParam = parseXslParamSelect(atts); + break; + } + + if (insideRefsection) { + descriptionBuffer.append("<" + qName + ">"); + } + } + + @Override + public void endElement(String namespaceURI, String localName, String qName) { + if (insideRefsection) { + descriptionBuffer.append(""); + } + ParameterTags enumTag = ParameterTags.getEnumValue(qName); + switch (enumTag) { + case REFMETA: + controlType(); + break; + case REFSECTION: + insideRefsection = false; + if (descriptionBuffer.length() != 0) + parameter.setDescription(ParameterTransformation.htmlTransform(descriptionBuffer + .toString().trim())); + break; + case REFPURPOSE: + insideRefpurpose = false; + parameter.setPurpose(purposeBuffer.toString()); + break; + case REFMISCINFO: + if (insideRefmiscinfoDatatype) { + insideRefmiscinfoDatatype = false; + } + if (insideRefmiscinfoListType) { + insideRefmiscinfoListType = false; + } + if (insideRefmiscinfoValue) { + insideRefmiscinfoValue = false; + if (refmiscinfoValueAltBuffer.length() != 0) + valueList.put(refmiscinfoValueBuffer.toString(), refmiscinfoValueAltBuffer + .toString() + + " (" + refmiscinfoValueBuffer.toString() + ")"); + else + valueList.put(refmiscinfoValueBuffer.toString(), refmiscinfoValueBuffer + .toString()); + } + break; + case ALT: + insideRefmiscinfoValueAlt = false; + break; + case XSL_PARAM: + if ((valid) && (insideXslParam)) + controlXslParamValue(); + insideXslParam = false; + break; + } + if (insideXslParam) + insideXslParamBuffer.append(""); + } + + @Override + public void characters(char[] ch, int start, int length) { + if (insideRefsection) { + String nextPart = new String(ch, start, length); + nextPart = nextPart.replaceAll("<", "<").replaceAll(">", ">").replaceAll("&", + "&"); + descriptionBuffer.append(nextPart); + } else if (insideRefpurpose) { + purposeBuffer.append(ch, start, length); + } else if (insideRefmiscinfoDatatype) { + refmiscinfoDatatypeBuffer.append(ch, start, length); + } else if (insideRefmiscinfoValue) { + if (insideRefmiscinfoValueAlt) + refmiscinfoValueAltBuffer.append(ch, start, length); + else + refmiscinfoValueBuffer.append(ch, start, length); + } else if (insideRefmiscinfoListType) { + refmiscinfoListTypeBuffer.append(ch, start, length); + } else if (insideXslParam) { + String nextPart = new String(ch, start, length); + nextPart = nextPart.replaceAll("<", "<").replaceAll(">", ">").replaceAll("&", + "&"); + insideXslParamBuffer.append(nextPart); + } + } + + /** + * Controls if the parameter type definition is valid. Assigns to paramter type the list of + * predefined values. + */ + private void controlType() { + TypeEnum typeName = TypeEnum.getValue(refmiscinfoDatatypeBuffer.toString()); + if (typeName == null) { + MessageWriter.writeWarning(ResourceController.getMessage( + "parser.parameters.invalid_type", FileConst.CONF_FILE_CONFIG, parameter + .getName(), parameter.getLineNumber())); + valid = false; + return; + } + parameter.getType().setName(typeName); + // open list + if ((parameter.getType().getName().equals(TypeEnum.LIST)) + && (refmiscinfoListTypeBuffer.toString().equals(ParameterTags.OPEN))) + parameter.getType().setName(TypeEnum.LIST_OPEN); + + // length - assigne units + if (parameter.getType().getName().equals(TypeEnum.LENGTH)) + parameter.getType().setUnit(new UnitParam(commonTypes.getUnits(), parameter)); + + // list values + if ((parameter.getType().getName().equals(TypeEnum.LIST) || (parameter.getType().getName() + .equals(TypeEnum.LIST_OPEN))) + && (valueList.size() != 0)) + parameter.getType().getDefaultValue().setValueList(valueList); + addTypeValues(parameter.getType()); + } + + /** + * Assigns to the parameter a list of default values. + * + * @param type + * the parameter type. + */ + private void addTypeValues(TypeParam type) { + switch (type.getName()) { + case FONT: + type.setValueList(commonTypes.getFonts()); + break; + case COLOR: + type.setValueList(commonTypes.getColors()); + break; + } + } + + public boolean isValid() { + return valid; + } + + /** + * Assignes the content of the attribute select of the element to the + * insideXslParamBuffer. Controls whether the parameter has no other condition + * than 'FO'. + * + * @param atts + * the attributes of the element . + * @return true if the has no other condition than 'FO'. + */ + private boolean parseXslParamSelect(Attributes atts) { + // condition="fo" + if ((atts.getValue(ParameterTags.CONDITION) != null) + && (!atts.getValue(ParameterTags.CONDITION).equals(ParameterTags.FO))) + return false; + // select + if ((atts.getValue(ParameterTags.SELECT)) != null) { + insideXslParamBuffer.append(atts.getValue(ParameterTags.SELECT)); + } + return true; + } + + /** + * Controls the content of the element . If the content is not simple (cannot be + * parsed without others parameters) then parsed is set to false. If the content + * is not valid then valid is set to false. + */ + private void controlXslParamValue() { + String paramValue = insideXslParamBuffer.toString(); + // rtf + if (parameter.getType().getName().equals(TypeEnum.RTF)) { + parameter.getType().setValue(paramValue.trim()); + parameter.getType().assignDefaultFromValue(); + parsed = true; + return; + } + Matcher matcher = ParamController.patternParam.matcher(paramValue); + if (!matcher.find()) { + // raw value + try { + TagControl.controlSetTypeValue(parameter.getType(), paramValue.replaceAll("'", "") + .replaceAll("<[//]?xsl:text>", "")); + parameter.getType().assignDefaultFromValue(); + parsed = true; + } catch (ParserException ex) { + MessageWriter.writeWarning(ResourceController.getMessage( + "parser.parameters.invalid_value", FileConst.CONF_FILE_CONFIG, parameter + .getName(), parameter.getLineNumber())); + valid = false; + } + } else { + parameter.getType().setValue(paramValue.trim()); + } + } + + public boolean isParsed() { + return parsed; + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/config/handlers/PropertyXmlHandler.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/config/handlers/PropertyXmlHandler.java new file mode 100644 index 000000000..39e76e0ee --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/config/handlers/PropertyXmlHandler.java @@ -0,0 +1,209 @@ +package cz.zcu.fav.kiv.editor.config.handlers; + +import java.util.HashMap; +import java.util.Map; +import java.util.regex.Matcher; + +import org.xml.sax.Attributes; +import org.xml.sax.helpers.DefaultHandler; + +import cz.zcu.fav.kiv.editor.beans.properties.Attribute; +import cz.zcu.fav.kiv.editor.beans.properties.Property; +import cz.zcu.fav.kiv.editor.config.ParamController; +import cz.zcu.fav.kiv.editor.config.ParameterTransformation; +import cz.zcu.fav.kiv.editor.config.constants.FileConst; +import cz.zcu.fav.kiv.editor.config.constants.TagDefinition; +import cz.zcu.fav.kiv.editor.config.constants.TypeEnum; +import cz.zcu.fav.kiv.editor.config.constants.TagDefinition.ParameterTags; +import cz.zcu.fav.kiv.editor.controller.MessageWriter; +import cz.zcu.fav.kiv.editor.controller.errors.ParserException; +import cz.zcu.fav.kiv.editor.controller.resource.ResourceController; +import cz.zcu.fav.kiv.editor.utils.TagControl; + +/** + * The PropertyXmlHandler class is used for parsing files with XML definitions of + * properties. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class PropertyXmlHandler extends DefaultHandler { + + /** The property which XML file is parsed */ + private Property property; + + /** The flag indicating if the actually parsed proeperty XML is valid */ + private boolean valid = true; + + /** The name of actually parsed attribute */ + private String attributeName; + + /** The list of attributes that cannot be parsed */ + private Map unparsedAttributeList; + + /** The flag specifying whether the parser is inside element */ + private boolean insideRefsection = false; + + /** The flag specifying whether the parser is inside element */ + private boolean insideRefpurpose = false; + + /** The flag specifying whether the parser is inside element */ + private boolean insideRefmiscinfoDatatype = false; + + /** The flag specifying whether the parser is inside element */ + private boolean insideXslAttribute = false; + + /** The string buffer for content of description element */ + private StringBuffer descriptionBuffer = new StringBuffer(TagDefinition.BUFFER_SIZE_DESCRIPTION); + + /** The string buffer for content of purpose element */ + private StringBuffer purposeBuffer = new StringBuffer(TagDefinition.BUFFER_SIZE_DESCRIPTION); + + /** The string buffer for content of element */ + private StringBuffer refmiscinfoDatatypeBuffer = new StringBuffer(TagDefinition.BUFFER_SIZE); + + /** The string buffer for content of purpose element */ + private StringBuffer xslAttributeBuffer = new StringBuffer(TagDefinition.BUFFER_SIZE); + + /** + * Initializes a newly created empty PropertyXmlHandler. + */ + public PropertyXmlHandler(Property property) { + this.property = property; + unparsedAttributeList = new HashMap(); + } + + @Override + public void startElement(String namespaceURI, String localName, String qName, Attributes atts) { + if (insideXslAttribute) { + xslAttributeBuffer.append("<" + qName); + for (int i = 0; i < atts.getLength(); i++) { + xslAttributeBuffer.append(" " + atts.getQName(i) + "=\"" + atts.getValue(i) + "\""); + } + xslAttributeBuffer.append(">"); + } + ParameterTags enumTag = TagDefinition.ParameterTags.getEnumValue(qName); + switch (enumTag) { + case REFSECTION: + insideRefsection = true; + descriptionBuffer.setLength(0); + break; + case REFPURPOSE: + insideRefpurpose = true; + purposeBuffer.setLength(0); + break; + case REFMISCINFO: + if (atts.getType(ParameterTags.OTHERCLASS).equals(ParameterTags.DATATYPE.toString())) { + insideRefmiscinfoDatatype = true; + refmiscinfoDatatypeBuffer.setLength(0); + } + break; + case XSL_ATTRIBUTE: + insideXslAttribute = true; + attributeName = atts.getValue(ParameterTags.NAME); + xslAttributeBuffer.setLength(0); + break; + } + + if (insideRefsection) { + descriptionBuffer.append("<" + qName + ">"); + } + } + + @Override + public void endElement(String namespaceURI, String localName, String qName) { + if (insideRefsection) { + descriptionBuffer.append(""); + } + ParameterTags enumTag = TagDefinition.ParameterTags.getEnumValue(qName); + switch (enumTag) { + case REFSECTION: + insideRefsection = false; + if (descriptionBuffer.length() != 0) + property.setDescription(ParameterTransformation.htmlTransform(descriptionBuffer + .toString())); + break; + case REFPURPOSE: + insideRefpurpose = false; + property.setPurpose(purposeBuffer.toString()); + break; + case REFMISCINFO: + if (insideRefmiscinfoDatatype) { + insideRefmiscinfoDatatype = false; + if (!TypeEnum.ATTRIBUTE_SET.toString().equals(refmiscinfoDatatypeBuffer.toString())) { + MessageWriter.writeWarning(ResourceController.getMessage( + "parser.property.invalid_type", FileConst.CONF_FILE_CONFIG, property + .getName(), property.getLineNumber())); + valid = false; + } + } + break; + case XSL_ATTRIBUTE: + insideXslAttribute = true; + // save attribute value + // TODO parsing attribute values for each property according to its .xml + // if (attributeName != null) + // controlXslAttributeValue(); + break; + } + if (insideXslAttribute) + xslAttributeBuffer.append(""); + } + + @Override + public void characters(char[] ch, int start, int length) { + if (insideRefsection) { + String nextPart = new String(ch, start, length); + nextPart = nextPart.replaceAll("<", "<").replaceAll(">", ">").replaceAll("&", + "&"); + descriptionBuffer.append(nextPart); + } else if (insideRefpurpose) { + purposeBuffer.append(ch, start, length); + } else if (insideRefmiscinfoDatatype) { + refmiscinfoDatatypeBuffer.append(ch, start, length); + } else if (insideXslAttribute) { + xslAttributeBuffer.append(ch, start, length); + } + } + + public boolean isValid() { + return valid; + } + + /** + * Controls if the actually parsed attribute value can be parsed - is supported and if it is + * valid and can be parsed without other parameters. If the attribute cannot be parsed, it is + * assignes to the unparsedAttributeList. + */ + private void controlXslAttributeValue() { + Attribute attr = property.searchAttribute(attributeName); + if (attr == null) { + // unsupported attribute + MessageWriter.writeWarning(ResourceController.getMessage( + "parser.property.unsupported_attribute", FileConst.CONF_FILE_CONFIG, property + .getName(), property.getLineNumber(), attributeName)); + return; + } + String paramValue = xslAttributeBuffer.toString().trim(); + Matcher matcher = ParamController.patternParam.matcher(paramValue); + if (!matcher.find()) { + // raw value + try { + TagControl.controlSetTypeValue(attr.getType(), paramValue.replaceAll("'", "") + .replaceAll("<[//]?xsl:text>", "")); + attr.getType().assignDefaultFromValue(); + } catch (ParserException ex) { + MessageWriter.writeWarning(ResourceController.getMessage( + "parser.property.invalid_value", FileConst.CONF_FILE_CONFIG, property + .getName(), property.getLineNumber(), attributeName)); + } + } else { + attr.getType().setValue(paramValue); + unparsedAttributeList.put(attributeName, attr); + } + } + + public Map getUnparsedAttributeList() { + return unparsedAttributeList; + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/config/handlers/TypeXmlHandler.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/config/handlers/TypeXmlHandler.java new file mode 100644 index 000000000..113faff1b --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/config/handlers/TypeXmlHandler.java @@ -0,0 +1,122 @@ +package cz.zcu.fav.kiv.editor.config.handlers; + +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +import org.xml.sax.Attributes; +import org.xml.sax.helpers.DefaultHandler; + +import cz.zcu.fav.kiv.editor.config.constants.TagDefinition; +import cz.zcu.fav.kiv.editor.config.constants.TagDefinition.TypeTags; + +/** + * The TypeXmlHandler class is used for parsing the configuration file with types - + * types.xml. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class TypeXmlHandler extends DefaultHandler { + /** The list of units */ + private List unitList; + + /** The list of font - key is font name or font itself */ + private Map fontList; + + /** The list of font - key is color name or color itself */ + private Map colorList; + + /** The key of actually parsed element */ + private String key; + + /** The flag specifying whether the parser is inside unit element */ + private boolean insideUnitElement = false; + + /** The flag specifying whether the parser is inside color element */ + private boolean insideColorElement = false; + + /** The flag specifying whether the parser is inside font element */ + private boolean insideFontElement = false; + + /** The string buffer for content of unit element */ + private StringBuffer unitBuffer = new StringBuffer(TagDefinition.BUFFER_SIZE); + + /** The string buffer for content of color element */ + private StringBuffer colorBuffer = new StringBuffer(TagDefinition.BUFFER_SIZE); + + /** The string buffer for content of font element */ + private StringBuffer fontBuffer = new StringBuffer(TagDefinition.BUFFER_SIZE); + + /** + * Initializes a newly created empty TypeXmlHandler. + */ + public TypeXmlHandler() { + unitList = new ArrayList(); + fontList = new LinkedHashMap(); + colorList = new LinkedHashMap(); + } + + @Override + public void startElement(String namespaceURI, String localName, String qName, Attributes atts) { + TypeTags enumTag = TagDefinition.TypeTags.getValue(qName); + switch (enumTag) { + case COLOR: + insideColorElement = true; + colorBuffer.setLength(0); + key = atts.getValue(0); + break; + case UNIT: + insideUnitElement = true; + unitBuffer.setLength(0); + break; + case FONT: + insideFontElement = true; + fontBuffer.setLength(0); + break; + } + } + + @Override + public void endElement(String namespaceURI, String localName, String qName) { + TypeTags enumTag = TagDefinition.TypeTags.getValue(qName); + switch (enumTag) { + case COLOR: + insideColorElement = false; + colorList.put(key, colorBuffer.toString()); + break; + case UNIT: + insideUnitElement = false; + unitList.add(unitBuffer.toString()); + break; + case FONT: + insideFontElement = false; + fontList.put(fontBuffer.toString(), fontBuffer.toString()); + break; + } + } + + @Override + public void characters(char[] ch, int start, int length) { + if (insideColorElement) { + colorBuffer.append(ch, start, length); + } else if (insideUnitElement) { + unitBuffer.append(ch, start, length); + } else if (insideFontElement) { + fontBuffer.append(ch, start, length); + } + } + + public Map getColorList() { + return colorList; + } + + public Map getFontList() { + return fontList; + } + + public List getUnitList() { + return unitList; + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/controller/MainController.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/controller/MainController.java new file mode 100644 index 000000000..790a76059 --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/controller/MainController.java @@ -0,0 +1,50 @@ +package cz.zcu.fav.kiv.editor.controller; + +import javax.swing.UIManager; +import cz.zcu.fav.kiv.editor.beans.ConfigData; +import cz.zcu.fav.kiv.editor.controller.logger.Log; +import cz.zcu.fav.kiv.editor.controller.options.OptionController; +import cz.zcu.fav.kiv.editor.graphics.MainFrame; +import cz.zcu.fav.kiv.editor.graphics.intro.IntroException; +import cz.zcu.fav.kiv.editor.graphics.intro.IntroFrame; +import cz.zcu.fav.kiv.editor.graphics.intro.ProgressBar; +import cz.zcu.fav.kiv.editor.utils.ErrorDialog; + +/** + * The MainController class is the main control class of the application. Controls + * loading of configurations files and creating of the application GUI. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class MainController { + + /** + * Main class that controls loading of configurations files and creating of the application GUI. + * + * @param args + * main application arguments. + * @throws Exception + * if an fatal error occurs in the application. + */ + public static void main(String args[]) throws Exception { + + try { + UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); + + OptionController.readOptions(); + + IntroFrame introFrame = new IntroFrame(); + ConfigData data = ProgressBar.getData(); + introFrame.hideFrame(); + + MainFrame.createFrame(data).go(); + } catch (IntroException introEx) { + } catch (Exception ex) { + Log.fatal(ex); + ErrorDialog.showDialog(ex); + System.exit(1); + } + + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/controller/MenuController.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/controller/MenuController.java new file mode 100644 index 000000000..47a339978 --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/controller/MenuController.java @@ -0,0 +1,195 @@ +package cz.zcu.fav.kiv.editor.controller; + +import java.io.File; + +import cz.zcu.fav.kiv.editor.beans.ConfigData; +import cz.zcu.fav.kiv.editor.beans.OpenFile; +import cz.zcu.fav.kiv.editor.controller.errors.OpenFileException; +import cz.zcu.fav.kiv.editor.controller.errors.SaveFileException; +import cz.zcu.fav.kiv.editor.controller.logger.Log; +import cz.zcu.fav.kiv.editor.controller.options.OptionController; +import cz.zcu.fav.kiv.editor.controller.options.OptionItems; +import cz.zcu.fav.kiv.editor.controller.resource.ResourceController; +import cz.zcu.fav.kiv.editor.stylesheet.XslParser; +import cz.zcu.fav.kiv.editor.template.TemplateConst; +import cz.zcu.fav.kiv.editor.template.TemplateController; +import cz.zcu.fav.kiv.editor.utils.RunBatch; + +/** + * The MenuController class contains method that are called for every item from the + * application GUI. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class MenuController { + + /** + * Creates a new empty stylesheet file, sets default values to the GUI editor element. + * + * @param configData + * the data containing editor data structure. + * @param openFile + * the structure containing information about actually opened file. + */ + public static void newFileEmptyItem(ConfigData configData, OpenFile openFile) { + MessageWriter.writeTitle(ResourceController.getMessage("new_file.title")); + configData.clearValues(); + openFile.setOpenFilePath(null); + openFile.setWholeFile(XslParser.createXsltFile()); + MessageWriter.writeInfo(ResourceController.getMessage("new_file.empty.info")); + } + + /** + * Creates a new stylesheet file and sets values to the GUI editor element according to the + * default template. + * + * @param configData + * the data containing editor data structure. + * @param openFile + * the structure containing information about actually opened file. + */ + public static void newFileDefaultItem(ConfigData configData, OpenFile openFile) { + MessageWriter.writeTitle(ResourceController.getMessage("new_file.title")); + configData.clearValues(); + // load default template + try { + TemplateController.getInstance().readTemplate(configData, + TemplateConst.CONF_FILE_TEMPLATE); + MessageWriter.writeInfo(ResourceController.getMessage("new_file.default.info")); + } catch (Throwable ex) { + MessageWriter.writeError(ex.getMessage()); + } + openFile.setOpenFilePath(null); + openFile.setWholeFile(XslParser.createXsltFile()); + } + + /** + * Creates a new stylesheet file and sets values to the GUI editor element according to the user + * template. + * + * @param configData + * the data containing editor data structure. + * @param openFile + * the structure containing information about actually opened file. + * @param templateFile + * the file containing user template. + */ + public static void newFileStylesheetItem(ConfigData configData, OpenFile openFile, + String templateFile) { + MessageWriter.writeTitle(ResourceController.getMessage("new_file.title")); + configData.clearValues(); + // load user template + try { + TemplateController.getInstance().readTemplate(configData, templateFile); + MessageWriter.writeInfo(ResourceController.getMessage("new_file.stylesheet.info", + templateFile)); + } catch (Throwable ex) { + MessageWriter.writeError(ex.getMessage()); + } + openFile.setOpenFilePath(null); + openFile.setWholeFile(XslParser.createXsltFile()); + } + + /** + * Opens specified XSL stylesheet file. + * + * @param configData + * the data containing editor data structure. + * @param file + * the XSL stylesheet file for opening. + * @param openFile + * the structure containing information about actually opened file. + */ + public static void openFileItem(ConfigData configData, String file, OpenFile openFile) { + try { + MessageWriter.writeTitle(ResourceController.getMessage("open_file.title")); + + configData.clearValues(); + openFile.setOpenFilePath(file); + openFile.setWholeFile(XslParser.readXsltFile(file, configData)); + + MessageWriter.writeInfo(ResourceController.getMessage("open_file.success_info", file)); + } catch (OpenFileException ex) { + MessageWriter.writeError(ex.getMessage()); + } + } + + /** + * Saves actually opened XSL stylesheet in the file with specified name. + * + * @param configData + * the data containing editor data structure. + * @param saveFile + * the name of the file where the XSL stylesheet will be saved. + * @param openFile + * the structure containing information about actually opened file. + */ + public static void saveAsFileItem(ConfigData configData, String saveFile, OpenFile openFile) { + openFile.setOpenFilePath(saveFile); + saveFileItem(configData, openFile); + } + + /** + * Saves changes of the actually opened XSL stylesheet file. + * + * @param configData + * the data containing editor data structure. + * @param openFile + * the structure containing information about actually opened file. + */ + public static void saveFileItem(ConfigData configData, OpenFile openFile) { + try { + MessageWriter.writeTitle(ResourceController.getMessage("save_file.title")); + // remove comments + if (OptionItems.REARRANGE_SAVE) + XslParser.removeComments(openFile.getWholeFile()); + + XslParser.saveXsltFile(openFile.getOpenFilePath(), openFile.getWholeFile(), configData); + openFile.setFileChanged(false); + MessageWriter.writeInfo(ResourceController.getMessage("save_file.success_info", + openFile.getOpenFilePath())); + } catch (SaveFileException ex) { + MessageWriter.writeError(ResourceController.getMessage("error.save_file", openFile + .getWholeFile()) + + ex.getMessage()); + } + } + + /** + * Stores editor options in the application cofiguration file. + */ + public static void exitItem() { + OptionController.storeOptionItems(); + } + + /** + * Launches a selected batch file. + * + * @param openFile + * the structure containing information about actually opened file. + */ + public static void runBatchFile(OpenFile openFile) { + MessageWriter.writeTitle(ResourceController.getMessage("run_batch_file.title")); + if (openFile.getOpenFilePath() == null) { + MessageWriter.writeError(ResourceController.getMessage("run_batch_file.not_saved")); + return; + } + // exists batch file? + if (!(new File(OptionItems.BATCH_FILE)).exists()) { + MessageWriter.writeError(ResourceController + .getMessage("run_batch_file.file_not_exists")); + return; + } + try { + MessageWriter.writeInfo(ResourceController.getMessage("run_batch_file.running", + OptionItems.BATCH_FILE)); + RunBatch.replaceXslName(OptionItems.BATCH_FILE, openFile.getOpenFilePath()); + RunBatch.execBatch(); + } catch (Throwable ex) { + Log.error(ex); + MessageWriter.writeError(ResourceController.getMessage("run_batch_file.error_running", + OptionItems.BATCH_FILE)); + } + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/controller/MessageWriter.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/controller/MessageWriter.java new file mode 100644 index 000000000..e7582a63c --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/controller/MessageWriter.java @@ -0,0 +1,82 @@ +package cz.zcu.fav.kiv.editor.controller; + +import cz.zcu.fav.kiv.editor.controller.options.OptionItems; +import cz.zcu.fav.kiv.editor.graphics.console.MessageConsole; + +/** + * The MessageWriter class provides methods for writting down information and errors + * to the editor console. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class MessageWriter { + /** + * Writes a normal information to the editor console. + * + * @param message + * the normal text message. + */ + public static void write(String message) { + MessageConsole.logMessage(message); + } + + /** + * Writes an emphasis information to the editor console. + * + * @param message + * the normal text message. + */ + public static void writeEmphasis(String message) { + MessageConsole.logMessageEmphasis(message); + } + + /** + * Writes a title to the editor console. + * + * @param message + * the message containing title. + */ + public static void writeTitle(String message) { + if (OptionItems.ERASE_CONSOLE) + MessageWriter.eraseConsole(); + MessageConsole.logTitle(message); + } + + /** + * Writes a warning message to the editor console. + * + * @param message + * the message containing warning. + */ + public static void writeWarning(String message) { + MessageConsole.logWarning(message); + } + + /** + * Writes an error message to the editor console. + * + * @param message + * the message containing error. + */ + public static void writeError(String message) { + MessageConsole.logError(message); + } + + /** + * Writes an information message to the editor console. + * + * @param message + * the message containing information. + */ + public static void writeInfo(String message) { + MessageConsole.logInfo(message); + } + + /** + * Erases the editor console. + */ + public static void eraseConsole() { + MessageConsole.eraseConsole(); + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/controller/ProgressControl.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/controller/ProgressControl.java new file mode 100644 index 000000000..2d4961469 --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/controller/ProgressControl.java @@ -0,0 +1,168 @@ +package cz.zcu.fav.kiv.editor.controller; + +import cz.zcu.fav.kiv.editor.beans.ConfigData; +import cz.zcu.fav.kiv.editor.config.ConfigController; +import cz.zcu.fav.kiv.editor.config.ParamController; +import cz.zcu.fav.kiv.editor.config.constants.FileConst; +import cz.zcu.fav.kiv.editor.controller.logger.Log; +import cz.zcu.fav.kiv.editor.controller.resource.ResourceController; + +/** + * The ProgressControl class controls the progress of configuration files loading. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class ProgressControl { + /** The numerical representation of the loading progress */ + private int current = 0; + + /** The flag indicating if the loading progress has already finished */ + private boolean done = false; + + /** The flag indicating if the loading progress is canceled */ + private boolean canceled = false; + + /** The message containing information about the loading progress */ + private static String statMessage; + + /** The message containing error rised during the loading progress */ + private String errorMessage; + + /** The char representing a new line */ + private final static String NEWLINE = "\n"; + + /** The controll class containing methods for loading configuration files */ + private ConfigController config; + + /** + * Returns editor data structure loaded from configuration files. + * + * @return the editor data structure loaded from configuration files. + */ + public ConfigData getData() { + return config.getData(); + } + + /** + * Initializes a newly created empty ProgressControl. + */ + public ProgressControl() { + } + + /** + * Launches the thread which loads configuration files. + */ + public void go() { + ConfigThread con = new ConfigThread(); + con.setPriority(1); + con.start(); + try { + con.join(); + } catch (InterruptedException ex) { + Log.warn(ex); + } + } + + /** + * Called from ProgressBar to find out how much has been done. + * + * @return the number indicating the loading progress. + */ + public int getCurrent() { + return current; + } + + /** + * Called from ProgressBar to find out if the task has completed. + * + * @return true if the task is done. + */ + public boolean isDone() { + return done; + } + + /** + * Called from ProgressBar to find out if the task is canceled. + * + * @return true if the task is camceled. + */ + public boolean isCanceled() { + return canceled; + } + + /** + * Returns the most recent status message. + * + * @return the most recent status message. + */ + public String getMessage() { + return statMessage; + } + + /** + * The ConfigThread class is a thread used for controling the progress of + * configuration files loading. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ + class ConfigThread extends Thread { + public void run() { + try { + statMessage = ""; + config = new ConfigController(); + + config.readTypes(); + current = 10; + statMessage += ResourceController.getMessage("frame.intro.progress.read_file", FileConst.CONF_FILE_TYPE) + NEWLINE; + Thread.yield(); + + config.readAttributes(); + current = 20; + statMessage += ResourceController.getMessage("frame.intro.progress.read_file", FileConst.CONF_FILE_ATTRIBUTES) + NEWLINE; + Thread.yield(); + + config.readConfig(); + current = 30; + statMessage += ResourceController.getMessage("frame.intro.progress.read_file", FileConst.CONF_FILE_CONFIG) + NEWLINE; + Thread.yield(); + + ParamController configXml = new ParamController(config.getData(), config.getCommonTypes()); + configXml.readParameters(); + current = 75; + + config.readFigures(configXml.getParsedParameterList()); + current = 80; + statMessage += ResourceController.getMessage("frame.intro.progress.read_file", FileConst.CONF_FILE_FIGURES) + NEWLINE; + Thread.yield(); + + configXml.readProperties(); + current = 100; + configXml.removeInvalidParam(config.getFigureList()); + + statMessage += ResourceController.getMessage("frame.intro.progress.read_ok") + NEWLINE; + done = true; + } catch (Throwable ex) { + canceled = true; + errorMessage = ex.getMessage() + NEWLINE + NEWLINE; + errorMessage += ResourceController.getMessage("frame.intro.progress.correct_error"); + Log.errorText(ex.getMessage(), ex); + return; + } + } + } + + /** + * Returns the error message. + * + * @return the error message. + */ + public String getErrorMessage() { + return errorMessage; + } + + public static void addStatMessage(String statMessage) { + ProgressControl.statMessage += statMessage + NEWLINE; + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/controller/errors/ConfigException.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/controller/errors/ConfigException.java new file mode 100644 index 000000000..2b0f8997b --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/controller/errors/ConfigException.java @@ -0,0 +1,35 @@ +package cz.zcu.fav.kiv.editor.controller.errors; + +import cz.zcu.fav.kiv.editor.controller.resource.ResourceController; + +/** + * The ConfigException class is used for reporting errors generated during loading configuration + * files and templates. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class ConfigException extends Throwable implements java.io.Serializable { + + private static final long serialVersionUID = 7020184336946762911L; + + /** + * Initializes a newly created empty ConfigException. + */ + public ConfigException() { + super(); + } + + /** + * Initializes a newly created ConfigException with specified error messages and + * error source file. + * + * @param fileName + * the name of file where the error was generated. + * @param message + * the error message. + */ + public ConfigException(String fileName, String message) { + super(ResourceController.getMessage("error.config_error", fileName) + "\n" + message); + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/controller/errors/FileNotFoundException.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/controller/errors/FileNotFoundException.java new file mode 100644 index 000000000..33e32a7c1 --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/controller/errors/FileNotFoundException.java @@ -0,0 +1,42 @@ +package cz.zcu.fav.kiv.editor.controller.errors; + +import cz.zcu.fav.kiv.editor.controller.resource.ResourceController; + +/** + * The FileNotFoundException class is used when a configuration file, templates or + * their XML schema is missing. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class FileNotFoundException extends Throwable implements java.io.Serializable { + + private static final long serialVersionUID = -4128798341326945960L; + + /** + * Initializes a newly created FileNotFoundException with missing file. + * + * @param fileName + * the name of the missing file. + */ + public FileNotFoundException(String fileName) { + super(ResourceController.getMessage("error.file_not_found.file", fileName)); + } + + /** + * Initializes a newly created empty FileNotFoundException. + */ + public FileNotFoundException() { + super(ResourceController.getMessage("error.file_not_found.dir")); + } + + /** + * Initializes a newly created empty FileNotFoundException with the rised error. + * + * @param t + * the rised error. + */ + public FileNotFoundException(Throwable t) { + super(t.getMessage(), t); + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/controller/errors/OpenFileException.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/controller/errors/OpenFileException.java new file mode 100644 index 000000000..e68708303 --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/controller/errors/OpenFileException.java @@ -0,0 +1,32 @@ +package cz.zcu.fav.kiv.editor.controller.errors; + +import cz.zcu.fav.kiv.editor.controller.resource.ResourceController; + +/** + * The OpenFileException class is used for reporting errors rised during opening XSL + * stylesheet files. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class OpenFileException extends Throwable implements java.io.Serializable { + + private static final long serialVersionUID = 7020184336946762911L; + + /** + * Initializes a newly created empty OpenFileException. + */ + public OpenFileException() { + super(ResourceController.getMessage("error.open_file.wrong_form")); + } + + /** + * Initializes a newly created empty OpenFileException with specified message. + * + * @param message + * the message decribing the rised error. + */ + public OpenFileException(String message) { + super(ResourceController.getMessage("error.open_file.wrong_form") + message); + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/controller/errors/ParserException.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/controller/errors/ParserException.java new file mode 100644 index 000000000..12203a8a4 --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/controller/errors/ParserException.java @@ -0,0 +1,32 @@ +package cz.zcu.fav.kiv.editor.controller.errors; + +import cz.zcu.fav.kiv.editor.controller.resource.ResourceController; + +/** + * The ParserException class is used for reporting errors rised during parsing values + * from input files. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class ParserException extends Throwable { + + private static final long serialVersionUID = 7020184336946762911L; + + /** + * Initializes a newly created empty ParserException. + */ + public ParserException() { + super(); + } + + /** + * Initializes a newly created empty ParserException with specified message. + * + * @param message + * the message decribing the rised error. + */ + public ParserException(String message) { + super(ResourceController.getMessage("error.parser_error", message)); + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/controller/errors/SaveFileException.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/controller/errors/SaveFileException.java new file mode 100644 index 000000000..bcb1833d0 --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/controller/errors/SaveFileException.java @@ -0,0 +1,23 @@ +package cz.zcu.fav.kiv.editor.controller.errors; + +/** + * The SaveFileException class is used for reporting errors rised during saving XSL + * stylesheet files. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class SaveFileException extends Throwable implements java.io.Serializable { + + private static final long serialVersionUID = 7020184336946762911L; + + /** + * Initializes a newly created empty SaveFileException with the rised error. + * + * @param t + * the rised error. + */ + public SaveFileException(Throwable t) { + super(t); + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/controller/errors/XslParserException.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/controller/errors/XslParserException.java new file mode 100644 index 000000000..ced570369 --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/controller/errors/XslParserException.java @@ -0,0 +1,63 @@ +package cz.zcu.fav.kiv.editor.controller.errors; + +import org.xml.sax.ErrorHandler; +import org.xml.sax.SAXException; +import org.xml.sax.SAXParseException; + +import cz.zcu.fav.kiv.editor.controller.resource.ResourceController; + +/** + * The XslParserException class is used for reporting errors rised during parsing + * input XML and XSL files. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class XslParserException implements ErrorHandler { + /** + * Creates text containing a message with the error. + * + * @param exception + * the rised error. + * @return a message with the error. + */ + private String errorText(SAXParseException exception) { + return ResourceController.getMessage("error.xslt_parser", exception.getLineNumber(), exception.getColumnNumber(), exception.getMessage()); + } + + /** + * Handles the warning messages rised during file parsing. + * + * @param exception + * the rised warning. + * @throws SAXException + * with the content of the rised warning. + */ + public void warning(SAXParseException exception) throws SAXException { + throw new SAXException(ResourceController.getMessage("error.xslt_parser.warning") + errorText(exception)); + } + + /** + * Handles the error messages rised during file parsing. + * + * @param exception + * the rised error. + * @throws SAXException + * with the content of the rised error. + */ + public void error(SAXParseException exception) throws SAXException { + throw new SAXException(errorText(exception)); + } + + /** + * Handles the fatal error messages rised during file parsing. + * + * @param exception + * the rised fatal error. + * @throws SAXException + * with the content of the rised fatal error. + */ + public void fatalError(SAXParseException exception) throws SAXException { + throw new SAXException(ResourceController.getMessage("error.xslt_parser.fatal") + errorText(exception)); + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/controller/logger/Log.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/controller/logger/Log.java new file mode 100644 index 000000000..8730a5101 --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/controller/logger/Log.java @@ -0,0 +1,121 @@ +package cz.zcu.fav.kiv.editor.controller.logger; + +import java.io.PrintWriter; +import java.io.StringWriter; + +import org.apache.log4j.Level; +import org.apache.log4j.Logger; + +import cz.zcu.fav.kiv.editor.controller.resource.ErrorResourceController; + +/** + * The Log class is used for logging all errors and debug messages in the editor. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class Log { + /** + * Logs the error with its error tracing and description obtained by + * ErrorResourceController. + * + * @param resource + * the resource key of the error description. + * @param ex + * the rised error. + */ + public static void error(String resource, Throwable ex) { + Logger.getRootLogger().log(Level.ERROR, ErrorResourceController.getMessage(resource) + "\n" + getStackTrace(ex)); + } + + /** + * Logs the error with its error tracing and description. + * + * @param text + * the error description. + * @param ex + * the rised error. + */ + public static void errorText(String text, Throwable ex) { + Logger.getRootLogger().log(Level.ERROR, text +"\n"+ getStackTrace(ex)); + } + + /** + * Logs the error with its error tracing. + * + * @param ex + * the rised error. + */ + public static void error(Throwable ex) { + Logger.getRootLogger().log(Level.ERROR, getStackTrace(ex)); + } + + /** + * Logs the information with its description obtained by ErrorResourceController + * with arguments. + * + * @param resource + * the resource key of the error description. + * @param args + * the arguments of the description. + */ + public static void info(String resource, Object... args) { + Logger.getRootLogger().info(ErrorResourceController.getMessage(resource, args)); + } + + /** + * Logs the warning with its error tracing and description obtained by + * ErrorResourceController. + * + * @param resource + * the resource key of the error description. + * @param ex + * the rised error. + */ + public static void warn(String resource, Throwable ex) { + Logger.getRootLogger().log(Level.WARN, ErrorResourceController.getMessage(resource) +"\n"+ getStackTrace(ex)); + } + + /** + * Logs the warning with its error tracing and description obtained by + * ErrorResourceController with arguments. + * + * @param resource + * the resource key of the warning description. + * @param ex + * the rised warning. + * @param args + * the arguments of the description. + */ + public static void warn(String resource, Throwable ex, Object... args) { + Logger.getRootLogger().log(Level.WARN, ErrorResourceController.getMessage(resource, args) +"\n"+ getStackTrace(ex)); + } + + /** + * Logs the warning with its error tracing. + * + * @param ex + * the rised warning. + */ + public static void warn(Throwable ex) { + Logger.getRootLogger().log(Level.WARN, getStackTrace(ex)); + } + + /** + * Logs the fatal error with its error tracing. + * + * @param ex + * the rised fatal error. + */ + public static void fatal(Throwable ex) { + Logger.getRootLogger().log(Level.FATAL, getStackTrace(ex)); + } + + public static String getStackTrace(Throwable t) { + StringWriter sw = new StringWriter(); + PrintWriter pw = new PrintWriter(sw); + t.printStackTrace(pw); + pw.flush(); + return sw.toString(); + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/controller/options/EncodingEnum.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/controller/options/EncodingEnum.java new file mode 100644 index 000000000..ee70d84d9 --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/controller/options/EncodingEnum.java @@ -0,0 +1,61 @@ +package cz.zcu.fav.kiv.editor.controller.options; + +/** + * The EncodingEnum class is the enumerated list of document encodings. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public enum EncodingEnum { + UTF8("UTF-8"), UTF16BE("UTF-16BE"), UTF16LE("UTF-16LE"), ASCII("US-ASCII"), WIN1250( + "WINDOWS-1250"), ISO88591("ISO-8859-1"), ISO88592("ISO-8859-2"); + /** The key specifying every type of encoding */ + private String key; + + /** + * Initializes a newly created EncodingEnum with defined key. + * + * @param key + * the key of the encoding. + */ + private EncodingEnum(String key) { + this.key = key; + } + + public String getKey() { + return key; + } + + public String toString() { + return key; + } + + /** + * Returns EncodingEnum object for corresponding key. + * + * @param encodKey + * the key of the encoding. + * @return the encoding for the input key. + */ + public static EncodingEnum getEncoding(String encodKey) { + for (int i = 0; i < EncodingEnum.values().length; i++) + if (EncodingEnum.values()[i].key.equals(encodKey)) + return EncodingEnum.values()[i]; + return null; + } + + /** + * Specifies if the input encoding is among predefined encodings EncodingEnum. + * + * @param encodKey + * the key of the encoding. + * @return true if the input encoding is present in the predefined encodings + * EncodingEnum. + */ + public static boolean containsEncoding(String encodKey) { + for (int i = 0; i < EncodingEnum.values().length; i++) + if (EncodingEnum.values()[i].key.equals(encodKey)) + return true; + return false; + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/controller/options/NewlineEnum.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/controller/options/NewlineEnum.java new file mode 100644 index 000000000..94adb50dd --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/controller/options/NewlineEnum.java @@ -0,0 +1,74 @@ +package cz.zcu.fav.kiv.editor.controller.options; + +import cz.zcu.fav.kiv.editor.controller.resource.ResourceController; + +/** + * The NewlineEnum class is the enumerated list of chars defining ends of line in the + * output XSL stylesheet. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public enum NewlineEnum { + CRLF("cr+lf", "encoding.crlf"), LF("lf", "encoding.lf"), CR("cr", "encoding.cr"); + /** The resource message specifying every end of line */ + private String message; + + /** The key specifying every end of line */ + private String key; + + /** + * Initializes a newly created NewlineEnum with defined key and resource message. + * + * @param key + * the key of the encoding. + * @param mes + * the resource message of encoding. + */ + private NewlineEnum(String key, String mes) { + this.message = mes; + this.key = key; + } + + public String getMessage() { + return message; + } + + public String toString() { + return ResourceController.getMessage(message); + } + + /** + * Returns NewlineEnum object for the corresponding key. + * + * @param newLineKey + * the key of the end of line. + * @return the end of line for the input key. + */ + public static NewlineEnum getNewline(String newLineKey) { + for (int i = 0; i < NewlineEnum.values().length; i++) + if (NewlineEnum.values()[i].key.equals(newLineKey)) + return NewlineEnum.values()[i]; + return null; + } + + /** + * Specifies if the input end of line is among predefined ends of line NewlineEnum. + * + * @param encodKey + * the key of the end of line. + * @return true if the input end of line is present in the predefined ends of line + * NewlineEnum. + */ + public static boolean containsNewline(String encodKey) { + for (int i = 0; i < NewlineEnum.values().length; i++) + if (NewlineEnum.values()[i].key.equals(encodKey)) + return true; + return false; + } + + public String getKey() { + return key; + } + +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/controller/options/OptionController.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/controller/options/OptionController.java new file mode 100644 index 000000000..ec91e9912 --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/controller/options/OptionController.java @@ -0,0 +1,179 @@ +package cz.zcu.fav.kiv.editor.controller.options; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.util.Locale; +import java.util.Properties; + +import cz.zcu.fav.kiv.editor.controller.logger.Log; +import cz.zcu.fav.kiv.editor.controller.resource.LanguageEnum; + +/** + * The OptionController class is used for loading and saving editor options. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class OptionController { + /** The properties storing options of the application */ + private static Properties property; + + /** + * Fills application properties property firstly by default option values and + * then by the option values loaded from the editor configuration file. The option values loaded + * from the configuration file rewrites the corresponding default option values. + * + * Then maps values from application properties property to the corresponding + * variables defined in OptionItems. + */ + public static void readOptions() { + property = new Properties(); + + loadDefaultOptions(); + readOptionFile(); + + mapEditorOptionItems(); + mapStylesheetOptionItems(); + mapBatchOptionItems(); + Log.info("info.progress_control.load_file", OptionItems.OPTION_PATH); + } + + /** + * Rewrites application properties property by default option values specifying + * stylesheet options. Then maps values from system properties property (only + * those specifying stylesheet options) to the corresponding variables defined in + * OptionItems. + */ + public static void setDefaultStylesheetOptions() { + OptionItems.getDefaultStylesheetSettings(property); + mapStylesheetOptionItems(); + } + + /** + * Rewrites application properties property by default option values specifying + * editor options. Then maps values from system properties property (only those + * specifying editor options) to the corresponding variables defined in OptionItems. + */ + public static void setDefaultEditorOptions() { + OptionItems.getDefaultEditorSettings(property); + mapEditorOptionItems(); + } + + /** + * Loads editor configuration files and saves its content to the system properties + * property. + */ + private static void readOptionFile() { + try { + property.loadFromXML(new FileInputStream(System.getProperty("user.dir") + + File.separator + OptionItems.OPTION_PATH)); + Log.info("info.option_controller.load_file"); + } catch (Exception ex) { + Log.warn("error.option_controller.file_not_found", ex, OptionItems.OPTION_PATH); + } + } + + /** + * Sets all default option values to the system properties property. + */ + private static void loadDefaultOptions() { + OptionItems.getDefaultEditorSettings(property); + OptionItems.getDefaultStylesheetSettings(property); + OptionItems.getDefaultBatchSettings(property); + Log.info("info.option_controller.load_default_option"); + } + + /** + * Maps values from system properties property to the corresponding variables + * defined in OptionItems. Maps only variables specifying editor options (LANGUAGE, + * XML_DEFINITION_PATH, ERASE_CONSOLE). + */ + private static void mapEditorOptionItems() { + OptionItems.LANGUAGE = LanguageEnum.parseLocale(property + .getProperty(OptionItems.KEY_LANGUAGE)); + Locale.setDefault(OptionItems.LANGUAGE); + + OptionItems.XML_DEFINITION_PATH = property.getProperty(OptionItems.KEY_XML_DEFINITION_PATH); + OptionItems.ERASE_CONSOLE = Boolean.parseBoolean(property + .getProperty(OptionItems.KEY_ERASE_CONSOLE)); + } + + /** + * Maps values from system properties property to the corresponding variables + * defined in OptionItems. Maps only variables specifying stylesheet options (ADD_FO_NAMESPACE, + * REARRANGE_SAVE, GENERATE_COMMENTS, + * USE_PARAM_SELECT, ENCODING, NEWLINE, + * STYLESHEET_VERSION, IMPORT_FILE). + */ + private static void mapStylesheetOptionItems() { + OptionItems.ADD_FO_NAMESPACE = Boolean.parseBoolean(property + .getProperty(OptionItems.KEY_ADD_FO_NAMESPACE)); + OptionItems.REARRANGE_SAVE = Boolean.parseBoolean(property + .getProperty(OptionItems.KEY_REARRANGE_SAVE)); + OptionItems.GENERATE_COMMENTS = Boolean.parseBoolean(property + .getProperty(OptionItems.KEY_GENERATE_COMMENTS)); + OptionItems.USE_PARAM_SELECT = Boolean.parseBoolean(property + .getProperty(OptionItems.KEY_USE_PARAM_SELECT)); + if (EncodingEnum.containsEncoding(property.getProperty(OptionItems.KEY_ENCODING))) + OptionItems.ENCODING = property.getProperty(OptionItems.KEY_ENCODING); + if (NewlineEnum.containsNewline(property.getProperty(OptionItems.KEY_NEWLINE))) + OptionItems.NEWLINE = NewlineEnum.getNewline(property + .getProperty(OptionItems.KEY_NEWLINE)); + OptionItems.STYLESHEET_VERSION = property.getProperty(OptionItems.KEY_STYLESHEET_VERSION); + OptionItems.IMPORT_FILE = property.getProperty(OptionItems.KEY_IMPORT_FILE); + + } + + /** + * Maps values from system properties property to the corresponding variables + * defined in OptionItems. Maps only variables specifying batch options (BATCH_FILE, + * SAVE_BEFORE_RUN). + */ + private static void mapBatchOptionItems() { + OptionItems.BATCH_FILE = property.getProperty(OptionItems.KEY_BATCH_FILE); + OptionItems.SAVE_BEFORE_RUN = Boolean.parseBoolean(property + .getProperty(OptionItems.KEY_SAVE_BEFORE_RUN)); + } + + /** + * Maps all variables defined in OptionItems to the corresponding values in the + * system properties property. + */ + private static void saveOptionItems() { + // editor options + property.put(OptionItems.KEY_LANGUAGE, OptionItems.LANGUAGE.toString()); + property.put(OptionItems.KEY_XML_DEFINITION_PATH, OptionItems.XML_DEFINITION_PATH); + property.put(OptionItems.KEY_ERASE_CONSOLE, OptionItems.ERASE_CONSOLE.toString()); + + // stylesheet options + property.put(OptionItems.KEY_ADD_FO_NAMESPACE, OptionItems.ADD_FO_NAMESPACE.toString()); + property.put(OptionItems.KEY_REARRANGE_SAVE, OptionItems.REARRANGE_SAVE.toString()); + property.put(OptionItems.KEY_GENERATE_COMMENTS, OptionItems.GENERATE_COMMENTS.toString()); + property.put(OptionItems.KEY_USE_PARAM_SELECT, OptionItems.USE_PARAM_SELECT.toString()); + property.put(OptionItems.KEY_ENCODING, OptionItems.ENCODING); + property.put(OptionItems.KEY_NEWLINE, OptionItems.NEWLINE.getKey()); + property.put(OptionItems.KEY_IMPORT_FILE, OptionItems.IMPORT_FILE); + property.put(OptionItems.KEY_STYLESHEET_VERSION, OptionItems.STYLESHEET_VERSION); + + // batch options + property.put(OptionItems.KEY_BATCH_FILE, OptionItems.BATCH_FILE); + property.put(OptionItems.KEY_SAVE_BEFORE_RUN, OptionItems.SAVE_BEFORE_RUN.toString()); + } + + /** + * Saves values in the system properties property to the editor configuration + * file. + */ + public static void storeOptionItems() { + saveOptionItems(); + try { + property.storeToXML(new FileOutputStream(OptionItems.OPTION_PATH), + OptionItems.OPTION_PATH); + Log.info("info.option_controller.save_file", OptionItems.OPTION_PATH); + } catch (Exception ex) { + Log.error("error.option_controller.store", ex); + } + } + +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/controller/options/OptionItems.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/controller/options/OptionItems.java new file mode 100644 index 000000000..fc2ca2b70 --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/controller/options/OptionItems.java @@ -0,0 +1,200 @@ +package cz.zcu.fav.kiv.editor.controller.options; + +import java.util.Locale; +import java.util.Properties; + +import cz.zcu.fav.kiv.editor.controller.resource.LanguageEnum; +import cz.zcu.fav.kiv.editor.controller.resource.ResourceController; +import cz.zcu.fav.kiv.editor.graphics.TopMenu; + +/** + * The OptionItems class contains variables defining all options used in the + * application. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class OptionItems { + /** The configuration file where options of the application are stored */ + public static final String OPTION_PATH = "options.xml"; + + /** The version of the application */ + public static final String APPLICATION_VERSION = "1.0"; + + /** The stylesheet XSL namespace */ + public static final String XSL_NAMESPACE = "http://www.w3.org/1999/XSL/Transform"; + + /** The stylesheet FO namespace */ + public static final String FO_NAMESPACE = "http://www.w3.org/1999/XSL/Format"; + + // ------------- editor options ------------------------ + + /** The property key of the language used in the editor */ + public static final String KEY_LANGUAGE = "fo_parameter_editor.language"; + + /** The language used in the editor */ + public static Locale LANGUAGE = LanguageEnum.getDefaultLocale(); + + /** + * Changes language used in the editor by the input language locale, if the language locale is + * supported by the editor. Updates all text expression in the application according to the new + * language. + * + * @param language + * the locale of the language that will be set as current editor language. + */ + public static void changeLanguage(Locale language) { + OptionItems.LANGUAGE = language; + ResourceController.changeInstance(); + TopMenu.changeLanguage(); + Locale.setDefault(language); + } + + /** The property key of the path where files with XML descriptions of FO parameters are stored */ + public static final String KEY_XML_DEFINITION_PATH = "fo_parameter_editor.xml_definition_path"; + + /** The path where files with XML descriptions of FO parameters are stored */ + public static String XML_DEFINITION_PATH; + + /** The property key of the flag specifying if the editor console is erased before every action */ + public static final String KEY_ERASE_CONSOLE = "fo_parameter_editor.erase_console"; + + /** The flag specifying if the editor console is erased before every action */ + public static Boolean ERASE_CONSOLE; + + // ------------------- stylesheet options --------------------- + + /** + * The property key of the flag specifying if the FO namespace definition is added to every new + * stylesheet file + */ + public static final String KEY_ADD_FO_NAMESPACE = "fo_parameter_editor.add_fo_namespace"; + + /** The flag specifying if the FO namespace definition is added to every new stylesheet file */ + public static Boolean ADD_FO_NAMESPACE; + + /** The property key of the flag specifying if the rearrange stylesheet saving is used */ + public static final String KEY_REARRANGE_SAVE = "fo_parameter_editor.rearrange_save"; + + /** The flag specifying if the rearrange stylesheet saving is used */ + public static Boolean REARRANGE_SAVE; + + /** The property key of the flag specifying if the comments in stylesheets are generated */ + public static final String KEY_GENERATE_COMMENTS = "fo_parameter_editor.generate_comments"; + + /** The flag specifying if the comments in stylesheets are generated */ + public static Boolean GENERATE_COMMENTS; + + /** + * The property key of the flag specifying if attribute select is used in the stylesheet + * parameter element + */ + public static final String KEY_USE_PARAM_SELECT = "fo_parameter_editor.use_param_select"; + + /** The flag specifying if attribute select is used in the stylesheet parameter element */ + public static Boolean USE_PARAM_SELECT; + + /** The property key of the actual editor encoding */ + public static final String KEY_ENCODING = "fo_parameter_editor.encoding"; + + /** The actual editor encoding */ + public static String ENCODING; + + /** The property key of the actual stylesheet end of line */ + public static final String KEY_NEWLINE = "fo_parameter_editor.newline"; + + /** The actual stylesheet end of line */ + public static NewlineEnum NEWLINE; + + // ----------------- xsl options ------------------------ + + /** + * The property key of the list specifying XSL stylesheet files imported to a new stylesheet + * file + */ + public static final String KEY_IMPORT_FILE = "fo_parameter_editor.xsl_import_file"; + + /** The list specifying XSL stylesheet files imported to a new stylesheet file */ + public static String IMPORT_FILE; + + /** The property key of stylesheet version */ + public static final String KEY_STYLESHEET_VERSION = "fo_parameter_editor.stylesheet_version"; + + /** The stylesheet version */ + public static String STYLESHEET_VERSION; + + // ----------------- batch options ------------------------ + + /** The property key of batch file path */ + public static final String KEY_BATCH_FILE = "fo_parameter_editor.batch_file"; + + /** The batch file path */ + public static String BATCH_FILE; + + /** + * The property key of flag specifying if the opened stylesheet is automatically saved before + * launching batch file + */ + public static final String KEY_SAVE_BEFORE_RUN = "fo_parameter_editor.save_before_run"; + + /** + * The flag specifying if the opened stylesheet is automatically saved before launching batch + * file + */ + public static Boolean SAVE_BEFORE_RUN; + + /** + * Fills application properties property by default option values. Maps only + * variables specifying editor options (LANGUAGE, + * XML_DEFINITION_PATH, ERASE_CONSOLE). + * + * @param defaultSettings + * the properties storing options of the application. + * @return the properties storing options of the application containing default editor options. + */ + public static Properties getDefaultEditorSettings(Properties defaultSettings) { + defaultSettings.put(KEY_LANGUAGE, LanguageEnum.getDefaultLocale()); + defaultSettings.put(KEY_XML_DEFINITION_PATH, "docbook-params"); + defaultSettings.put(KEY_ERASE_CONSOLE, "false"); + return defaultSettings; + } + + /** + * Fills application properties property by default option values. Maps only + * variables specifying stylesheet options (ADD_FO_NAMESPACE, + * REARRANGE_SAVE, GENERATE_COMMENTS, + * USE_PARAM_SELECT, ENCODING, NEWLINE, + * STYLESHEET_VERSION, IMPORT_FILE). + * + * @param defaultSettings + * the properties storing options of the application. + * @return the properties storing options of the application containing default stylesheet + * options. + */ + public static Properties getDefaultStylesheetSettings(Properties defaultSettings) { + defaultSettings.put(KEY_ADD_FO_NAMESPACE, "false"); + defaultSettings.put(KEY_REARRANGE_SAVE, "false"); + defaultSettings.put(KEY_GENERATE_COMMENTS, "true"); + defaultSettings.put(KEY_USE_PARAM_SELECT, "false"); + defaultSettings.put(KEY_ENCODING, EncodingEnum.UTF8.getKey()); + defaultSettings.put(KEY_NEWLINE, NewlineEnum.CRLF.getKey()); + defaultSettings.put(KEY_STYLESHEET_VERSION, "1.0"); + defaultSettings.put(KEY_IMPORT_FILE, + "http://docbook.sourceforge.net/release/xsl/current/fo/docbook.xsl;"); + return defaultSettings; + } + + /** + * Fills application properties property by default other values. Maps only + * variables specifying batch options (BATCH_FILE, SAVE_BEFORE_RUN). + * + * @param defaultSettings + * the properties storing options of the application. + * @return the properties storing options of the application containing default batch options. + */ + public static Properties getDefaultBatchSettings(Properties defaultSettings) { + defaultSettings.put(KEY_BATCH_FILE, ""); + defaultSettings.put(KEY_SAVE_BEFORE_RUN, "true"); + return defaultSettings; + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/controller/resource/ErrorResourceController.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/controller/resource/ErrorResourceController.java new file mode 100644 index 000000000..28fc22af9 --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/controller/resource/ErrorResourceController.java @@ -0,0 +1,88 @@ +package cz.zcu.fav.kiv.editor.controller.resource; + +import java.text.MessageFormat; +import java.util.ResourceBundle; + +import cz.zcu.fav.kiv.editor.controller.logger.Log; + +/** + * The ErrorResourceController class contains methods for loading error text + * resources. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class ErrorResourceController { + + /** The bundle of text resources */ + private ResourceBundle resource; + + /** The instance of the ErrorResourceController class */ + private static ErrorResourceController instance; + + /** + * Singleton constructor - gets the single instance of the ErrorResourceController class. + * + * @return the instance of the ErrorResourceController class. + */ + private static ErrorResourceController getInstance() { + if (instance == null) + instance = new ErrorResourceController(); + return instance; + } + + /** + * Initializes a newly created ErrorResourceController with error resource + * bundle. + */ + public ErrorResourceController() { + this.resource = ResourceBundle.getBundle(ResourceConst.ERROR_RESOURCE_PATH); + } + + /** + * Gets the error text resource for the input key. + * + * @param key + * the key of the error text resource. + * @return the error text resource for the input key. + */ + private String getString(String key) { + return resource.getString(key); + } + + /** + * Gets the error text resource for the input key. + * + * @param key + * the key of the error text resource. + * @return the error text resource for the input key. + */ + public static String getMessage(String key) { + try { + return ErrorResourceController.getInstance().getString(key); + } catch (Exception ex) { + Log.warn(ex); + return key; + } + } + + /** + * Gets the error text resource for the input key and arguments. + * + * @param key + * the key of the error text resource. + * @param args + * the arguments of the error text resource. + * @return the error text resource for the input key and arguments. + */ + public static String getMessage(String key, Object... args) { + try { + MessageFormat format = new MessageFormat(ErrorResourceController.getInstance() + .getString(key).replaceAll("'", "''")); + return format.format(args); + } catch (Exception ex) { + Log.warn(ex); + return key; + } + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/controller/resource/LanguageEnum.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/controller/resource/LanguageEnum.java new file mode 100644 index 000000000..0206584da --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/controller/resource/LanguageEnum.java @@ -0,0 +1,79 @@ +package cz.zcu.fav.kiv.editor.controller.resource; + +import java.util.Locale; + +/** + * The EncodingEnum class is the enumerated list of languages used in the + * application. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public enum LanguageEnum { + EN(Locale.ENGLISH), CS(new Locale("cs")); + + /** The locale specifying the language */ + private Locale locale; + + /** + * Initializes a newly created LanguageEnum with defined locale language. + * + * @param locale + * the locale of the language. + */ + private LanguageEnum(Locale locale) { + this.locale = locale; + } + + /** + * Returns title of the language loaded from resources ResourceController. + * + * @return the language title loaded from ResourceController. + */ + public String toString() { + return ResourceController.getMessage("language." + locale.toString()); + } + + /** + * Returns LanguageEnum language for corresponding locale. + * + * @param loc + * the locale of the language. + * @return the language for the input locale. + */ + public static LanguageEnum getLanguage(Locale loc) { + if (CS.locale.equals(loc)) + return CS; + return EN; + } + + /** + * Parses input string containing language and returns corresponding locale + * language. + * + * @param language + * the input text constant containing language. + * @return the locale corresponding to the input text constant. + */ + public static Locale parseLocale(String language) { + if ((language != null) && (language.equals(CS.getLocale().getLanguage()))) + return CS.getLocale(); + return EN.getLocale(); + } + + public Locale getLocale() { + return locale; + } + + /** + * Gets the current value of the default locale for this instance of the Java Virtual Machine. + * Returns only supported value - CS or EN. + * + * @return the locale of this instance of JVM. + */ + public static Locale getDefaultLocale() { + if (Locale.getDefault().getLanguage().equals(LanguageEnum.CS.getLocale().getLanguage())) + return LanguageEnum.CS.getLocale(); + return LanguageEnum.EN.getLocale(); + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/controller/resource/ResourceConst.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/controller/resource/ResourceConst.java new file mode 100644 index 000000000..92bf1e7f3 --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/controller/resource/ResourceConst.java @@ -0,0 +1,18 @@ +package cz.zcu.fav.kiv.editor.controller.resource; + +/** + * The ResourceConst class contains paths of the editor text resources. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class ResourceConst { + /** The editor containing text resources */ + private final static String RESOURCE_DIR = "resources/"; + + /** The file containing the error text resources */ + public final static String ERROR_RESOURCE_PATH = RESOURCE_DIR + "ErrorResource"; + + /** The file containing the application text resources */ + public final static String TEXT_RESOURCE_PATH = RESOURCE_DIR + "TextResource"; +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/controller/resource/ResourceController.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/controller/resource/ResourceController.java new file mode 100644 index 000000000..1638c3579 --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/controller/resource/ResourceController.java @@ -0,0 +1,153 @@ +package cz.zcu.fav.kiv.editor.controller.resource; + +import java.io.UnsupportedEncodingException; +import java.text.MessageFormat; +import java.util.Enumeration; +import java.util.PropertyResourceBundle; +import java.util.ResourceBundle; + +import cz.zcu.fav.kiv.editor.controller.logger.Log; +import cz.zcu.fav.kiv.editor.controller.options.OptionItems; + +/** + * The ResourceController class contains methods for loading text resources. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class ResourceController { + + /** The bundle of text resources */ + private static ResourceBundle resource; + + /** The instance of the ResourceController class */ + private static ResourceController instance; + + /** + * Singleton constructor - gets the instance of the ResourceController class. + * + * @return the instance of the ResourceController class. + */ + private static ResourceController getInstance() { + if (instance == null) + instance = new ResourceController(); + return instance; + } + + /** + * Changes the loaded resource bundle to the new bundle for actully chosen editor language. + */ + public static void changeInstance() { + instance = new ResourceController(); + } + + /** + * Initializes a newly created ResourceController with resource bundle for actual + * editor language. + */ + private ResourceController() { + ResourceController.resource = ResourceBundle.getBundle(ResourceConst.TEXT_RESOURCE_PATH, + OptionItems.LANGUAGE); + ResourceController.resource = createUtf8PropertyResourceBundle(ResourceController.resource); + } + + /** + * Gets the text resource of the actual language for the input key. + * + * @param key + * the key of the text resource. + * @return the text resource for the input key. + */ + private String getString(String key) { + return resource.getString(key); + } + + /** + * Gets the text resource of the actual language for the input key. + * + * @param key + * the key of the text resource. + * @return the text resource for the input key. + */ + public static String getMessage(String key) { + try { + return ResourceController.getInstance().getString(key); + } catch (Exception ex) { + Log.warn("error.resource_controller.missing_key", ex, key); + return key; + } + } + + /** + * Gets the text resource of the actual language for the input key and arguments. + * + * @param key + * the key of the text resource. + * @param args + * the arguments of the text resource. + * @return the text resource for the input key and arguments. + */ + public static String getMessage(String key, Object... args) { + try { + MessageFormat format = new MessageFormat(ResourceController.getInstance() + .getString(key).replaceAll("'", "''"), OptionItems.LANGUAGE); + return format.format(args); + } catch (Exception ex) { + Log.warn("error.resource_controller.missing_key", ex, key); + return key; + } + } + + /** + * Convert the input resource bundle to the UTF-8 resource bundle. + * + * @param bundle + * the resource bundle. + * @return the UTF-8 resource bundle converted from the input resource bundle. + */ + private static ResourceBundle createUtf8PropertyResourceBundle(ResourceBundle bundle) { + if (!(bundle instanceof PropertyResourceBundle)) + return bundle; + + return new Utf8PropertyResourceBundle((PropertyResourceBundle) bundle); + } + + /** + * The Utf8PropertyResourceBundle class define resource bundle that converts text + * resources from ISO-8859-1 to UTF-8 encoding. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ + private static class Utf8PropertyResourceBundle extends ResourceBundle { + /** The property resource bundle */ + PropertyResourceBundle bundle; + + /** + * Initializes a newly created Utf8PropertyResourceBundle with define + * property resource bundle. + * + * @param bundle + * the property resource bundle. + */ + private Utf8PropertyResourceBundle(PropertyResourceBundle bundle) { + this.bundle = bundle; + } + + @Override + public Enumeration getKeys() { + return bundle.getKeys(); + } + + @Override + protected Object handleGetObject(String key) { + String value = (String) bundle.handleGetObject(key); + try { + return new String(value.getBytes("ISO-8859-1"), "UTF-8"); + } catch (UnsupportedEncodingException ex) { + Log.warn(ex); + return null; + } + } + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/displays/GraphicsFigure.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/displays/GraphicsFigure.java new file mode 100644 index 000000000..7085112fb --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/displays/GraphicsFigure.java @@ -0,0 +1,23 @@ +package cz.zcu.fav.kiv.editor.displays; + +import javax.swing.JPanel; + +import cz.zcu.fav.kiv.editor.beans.parameters.Parameter; + +/** + * The GraphicsFigure class represents a parent for all graphics figures. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public abstract class GraphicsFigure extends JPanel { + + private static final long serialVersionUID = -6123711841424326935L; + + /** + * Sets the list of parameter that are an input data source for the graphics figure. + * + * @param parameterList + */ + public abstract void setInputs(Parameter[] parameterList); +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/displays/PageFigure.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/displays/PageFigure.java new file mode 100644 index 000000000..4848bfc16 --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/displays/PageFigure.java @@ -0,0 +1,90 @@ +package cz.zcu.fav.kiv.editor.displays; + +import java.awt.Color; +import java.awt.Dimension; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.geom.Rectangle2D; +import java.util.Observable; +import java.util.Observer; + +import cz.zcu.fav.kiv.editor.beans.parameters.Parameter; + +/** + * The PageFigure class represents a graphics figure illustrating dimesions of the + * paper. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class PageFigure extends GraphicsFigure implements Observer { + + private static final long serialVersionUID = 7211322657832007934L; + + /** The reference to the parameter representing paper width */ + private Parameter pageWidthParameter; + + /** The reference to the parameter representing paper height */ + private Parameter pageHeightParameter; + + /** The total size of graphics figure */ + private static final int SIZE = 140; + + /** The maximum size of the paper */ + private static final int PAPER_SIZE = 100; + + /** The actual width of the graphics figure illustrating paper */ + private int widthSize; + + /** The actual height of the graphics figure illustrating paper */ + private int heightSize; + + /** The color of the graphics figure illustrating paper */ + private static final Color PAPER_COLOR = new Color(0, 64, 128); + + public PageFigure() { + this.setPreferredSize(new Dimension(SIZE, SIZE)); + } + + /** + * Repaints the graphics figure according to actual parameter values. + */ + public void paintComponent(Graphics graphics) { + Graphics2D graphics2 = (Graphics2D) graphics; + super.paintComponent(graphics); + countSizes(); + + graphics2.setColor(PAPER_COLOR); + graphics2.fill(new Rectangle2D.Double((SIZE - PAPER_SIZE) / 2, (SIZE - PAPER_SIZE) / 2, + widthSize, heightSize)); + } + + @Override + public void setInputs(Parameter[] parameterList) { + this.pageWidthParameter = parameterList[0]; + this.pageWidthParameter.addObserver(this); + this.pageHeightParameter = parameterList[1]; + this.pageHeightParameter.addObserver(this); + } + + /** + * Method is called when some dependent parameter changes his value. Then the graphics figure + * values are updated according to parameter values. + */ + public void update(Observable arg0, Object arg1) { + this.repaint(); + } + + /** + * Counts new sizes of the graphics figure illustrating paper. New sizes are counted on the + * basis of parameter actual values. + */ + private void countSizes() { + Double pageWidth = Double.valueOf(pageWidthParameter.getType().getValue().replace(",", ".")); + double pageHeight = Double.valueOf(pageHeightParameter.getType().getValue().replace(",", ".")); + Double max = Math.max(pageWidth, pageHeight); + max /= PAPER_SIZE; + widthSize = (int) (pageWidth / max); + heightSize = (int) (pageHeight / max); + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/MainFrame.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/MainFrame.java new file mode 100644 index 000000000..77a0129bc --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/MainFrame.java @@ -0,0 +1,192 @@ +package cz.zcu.fav.kiv.editor.graphics; + +import java.awt.BorderLayout; +import java.awt.Dimension; +import java.awt.EventQueue; +import java.awt.Image; + +import javax.swing.JComponent; +import javax.swing.JFrame; +import javax.swing.ToolTipManager; + +import cz.zcu.fav.kiv.editor.beans.ConfigData; +import cz.zcu.fav.kiv.editor.beans.OpenFile; +import cz.zcu.fav.kiv.editor.controller.MenuController; +import cz.zcu.fav.kiv.editor.controller.resource.ResourceController; +import cz.zcu.fav.kiv.editor.graphics.components.editor.EditorBody; +import cz.zcu.fav.kiv.editor.graphics.images.EditorIcon; +import cz.zcu.fav.kiv.editor.graphics.utils.FrameShower; + +/** + * The MainFrame class represents the main frame of the application. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public final class MainFrame extends JFrame { + + private static final long serialVersionUID = 2955560489556252043L; + + /** The instance of the MainFrame class */ + private static MainFrame instance; + + /** The main menu of the application */ + private static TopMenu menuBar; + + /** The data containing editor data structure */ + private ConfigData configData; + + /** The structure containing information about actually opened file */ + private OpenFile openFile; + + /** + * Initializes a newly created MainFrame. + */ + private MainFrame() { + } + + /** + * Initializes a newly created MainFrame with specified data. + * + * @param data + * the data containing editor data structure. + */ + private MainFrame(ConfigData data) { + this.configData = data; + this.openFile = new OpenFile(); + } + + /** + * Singleton constructor - gets the single instance of the MainFrame class. + * + * @return the single instance of MainFrame. + */ + public static MainFrame getInstance() { + if (instance == null) { + instance = new MainFrame(); + return instance; + } + return instance; + + } + + /** + * Creates the main application frame MainFrame with specified data. + * + * @param data + * the data containing editor data structure. + * @return newly created main application frame. + */ + public static MainFrame createFrame(ConfigData data) { + instance = new MainFrame(data); + return instance; + } + + /** + * This method is called from within the constructor to initialize the form. + */ + private void initComponents() { + + setTitle(ResourceController.getMessage("editor.title")); + + addWindowListener(new java.awt.event.WindowAdapter() { + public void windowClosing(java.awt.event.WindowEvent evt) { + exitForm(evt); + } + + public void windowOpened(java.awt.event.WindowEvent evt) { + formWindowOpened(evt); + } + }); + + menuBar = new TopMenu(this); + setJMenuBar(menuBar); + + JComponent newContentPane = new EditorBody(configData.getSectionList()); + newContentPane.setOpaque(true); + this.getContentPane().add(newContentPane, BorderLayout.CENTER); + + ToolTipManager.sharedInstance().setInitialDelay(0); + + Dimension dim = getToolkit().getScreenSize(); + Dimension abounds = getPreferredSize(); + setLocation((dim.width - abounds.width) / 2, (dim.height - abounds.height) / 2); + + // Threadsafe startup of main frame + Runnable runner = new FrameShower(this); + EventQueue.invokeLater(runner); + } + + /** + * Reaction on frame window opening. + * + * @param evt + * the opened window. + */ + private void formWindowOpened(java.awt.event.WindowEvent evt) { + Image frameImage = EditorIcon.createEditorIcon(); + if (frameImage != null) { + setIconImage(frameImage); + } + } + + /** + * Reaction on frame window closing. + * + * @param evt + * the actually closing window. + */ + private void exitForm(java.awt.event.WindowEvent evt) { + MenuController.exitItem(); + shutDown(); + } + + /** + * Shuts down the main application frame - terminates the whole application. + * + */ + public void shutDown() { + System.exit(0); + } + + /** + * Initializes the form and launched it. + * + * @throws Exception + * if an error during initialization occurs. + */ + public void go() throws Exception { + initComponents(); + } + + public ConfigData getConfigData() { + return configData; + } + + public OpenFile getOpenFile() { + return openFile; + } + + /** + * Changes the title of the main frame. Sets the name of the actually opened file to the title. + * If the actually opened file has been modified then the title is changed. + * + */ + public void changeTitle() { + String title = ResourceController.getMessage("editor.title") + " - "; + if (openFile.isFileChanged()) + title += "*"; + if (openFile.getOpenFilePath() != null) + title += openFile.getOpenFilePath(); + setTitle(title); + } + + /** + * Specifies that the actually opened file OpenFile has been modified. + */ + public void setFileChanged() { + if (!openFile.isFileChanged()) + this.getOpenFile().setFileChanged(true); + } + +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/TopMenu.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/TopMenu.java new file mode 100644 index 000000000..9c58eb127 --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/TopMenu.java @@ -0,0 +1,653 @@ +package cz.zcu.fav.kiv.editor.graphics; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.KeyEvent; +import java.io.File; + +import javax.swing.JCheckBoxMenuItem; +import javax.swing.JFileChooser; +import javax.swing.JMenu; +import javax.swing.JMenuBar; +import javax.swing.JMenuItem; +import javax.swing.KeyStroke; + +import cz.zcu.fav.kiv.editor.controller.MenuController; +import cz.zcu.fav.kiv.editor.controller.options.OptionItems; +import cz.zcu.fav.kiv.editor.controller.resource.ResourceController; +import cz.zcu.fav.kiv.editor.graphics.frames.AboutForm; +import cz.zcu.fav.kiv.editor.graphics.frames.ConfigInfoForm; +import cz.zcu.fav.kiv.editor.graphics.frames.HelpFrame; +import cz.zcu.fav.kiv.editor.graphics.options.OptionEditorDialog; +import cz.zcu.fav.kiv.editor.graphics.options.OptionStylesheetDialog; +import cz.zcu.fav.kiv.editor.graphics.utils.OverwriteFileDialog; +import cz.zcu.fav.kiv.editor.graphics.utils.SaveFileDialog; +import cz.zcu.fav.kiv.editor.graphics.utils.XmlFilter; +import cz.zcu.fav.kiv.editor.graphics.utils.XslFilter; +import cz.zcu.fav.kiv.editor.template.TemplateConst; + +/** + * The TopMenu class represents the main menu of the application. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class TopMenu extends JMenuBar { + + private static final long serialVersionUID = 6053686624644714331L; + + /** The reference to the main frame MainFrame */ + private MainFrame frame; + + /* ---------------------- file menu ---------------------------- */ + + /** The file menu */ + private static JMenu fileMenu = new JMenu(); + + /** The item 'exit' from the file menu */ + private static JMenuItem exitFileMenuItem = new JMenuItem(); + + /** The submenu item of the item 'new' from the file menu */ + private static JMenu submenuNewFile = new JMenu(); + + /** The item 'new empty stylesheet' of the file submenu 'new' */ + private static JMenuItem newFileMenuEmptyItem = new JMenuItem(); + + /** The item 'new default stylesheet' of the file submenu 'new' */ + private static JMenuItem newFileMenuDefaultItem = new JMenuItem(); + + /** The item 'new user stylesheet' of the file submenu 'new' */ + private static JMenuItem newFileMenuStylesheetItem = new JMenuItem(); + + /** The item 'open' of the file menu */ + private static JMenuItem openFileMenuItem = new JMenuItem(); + + /** The item 'close' of the file menu */ + private static JMenuItem closeFileMenuItem = new JMenuItem(); + + /** The item 'save' of the file menu */ + private static JMenuItem saveFileMenuItem = new JMenuItem(); + + /** The item 'save as' of the file menu */ + private static JMenuItem saveAsFileMenuItem = new JMenuItem(); + + /* ---------------------- run menu ---------------------------- */ + /** The run menu */ + private static JMenu runMenu = new JMenu(); + + /** The item 'run batch' from the run menu */ + private static JMenuItem runBatchMenuItem = new JMenuItem(); + + /** The item 'select batch' from the run menu */ + private static JMenuItem selectBatchMenuItem = new JMenuItem(); + + /** The item 'save batch before' from the run menu */ + private static JCheckBoxMenuItem batchSaveBeforeMenuItem = new JCheckBoxMenuItem(); + + /* ---------------------- option menu ---------------------------- */ + /** The option menu */ + private static JMenu optionMenu = new JMenu(); + + /** The item 'stylesheet option' from the option menu */ + private static JMenuItem optionStylesheetMenuItem = new JMenuItem(); + + /** The item 'editor option' from the option menu */ + private static JMenuItem optionEditorMenuItem = new JMenuItem(); + + /* ---------------------- help menu ---------------------------- */ + /** The help menu */ + private static JMenu helpMenu = new JMenu(); + + /** The item 'help contents' from the help menu */ + private static JMenuItem helpWindowMenuItem = new JMenuItem(); + + /** The item 'about' from the help menu */ + private static JMenuItem aboutHelpMenuItem = new JMenuItem(); + + /** The item 'config info' from the help menu */ + private static JMenuItem configInfoMenuItem = new JMenuItem(); + + /** The file chooser */ + private JFileChooser fileChooser = new JFileChooser(); + + /** The batch file chooser */ + private JFileChooser batchFileChooser = new JFileChooser(); + + /** + * Initializes a newly created TopMenu of the main frame MainFrame. + * Creates all items of the menu. + * + * @param frame + * the main application frame. + */ + public TopMenu(MainFrame frame) { + this.frame = frame; + + /* ---------------------- file ---------------------------- */ + setMenuItem(fileMenu, "menu.file"); + + // new + submenuNewFile.setToolTipText(ResourceController.getMessage("menu_item.new.tooltip")); + setMenuItem(submenuNewFile, "menu_item.new"); + fileMenu.add(submenuNewFile); + + // new file - empty stylesheet + setMenuItem(newFileMenuEmptyItem, "menu_item.new_empty"); + newFileMenuEmptyItem.setToolTipText(ResourceController + .getMessage("menu_item.new_empty.tooltip")); + newFileMenuEmptyItem.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent evt) { + newFileEmptyMenuItemActionPerformed(); + } + }); + submenuNewFile.add(newFileMenuEmptyItem); + + // new file - default stylesheet + setMenuItem(newFileMenuDefaultItem, "menu_item.new_default"); + newFileMenuDefaultItem.setToolTipText(ResourceController + .getMessage("menu_item.new_default.tooltip")); + newFileMenuDefaultItem.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent evt) { + newFileDefaultMenuItemActionPerformed(); + } + }); + submenuNewFile.add(newFileMenuDefaultItem); + + // new file - user stylesheet + setMenuItem(newFileMenuStylesheetItem, "menu_item.new_stylesheet"); + newFileMenuStylesheetItem.setToolTipText(ResourceController + .getMessage("menu_item.new_stylesheet.tooltip")); + newFileMenuStylesheetItem.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent evt) { + newFileStylesheetMenuItemActionPerformed(); + } + }); + submenuNewFile.add(newFileMenuStylesheetItem); + + // open + setMenuItem(openFileMenuItem, "menu_item.open"); + openFileMenuItem.setToolTipText(ResourceController.getMessage("menu_item.open.tooltip")); + openFileMenuItem.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent evt) { + openFileMenuItemActionPerformed(); + } + }); + fileMenu.add(openFileMenuItem); + + fileMenu.addSeparator(); + + // close + setMenuItem(closeFileMenuItem, "menu_item.close"); + closeFileMenuItem.setToolTipText(ResourceController.getMessage("menu_item.close.tooltip")); + closeFileMenuItem.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent evt) { + newFileEmptyMenuItemActionPerformed(); + } + }); + fileMenu.add(closeFileMenuItem); + + fileMenu.addSeparator(); + + // save + setMenuItem(saveFileMenuItem, "menu_item.save"); + saveFileMenuItem.setToolTipText(ResourceController.getMessage("menu_item.save.tooltip")); + saveFileMenuItem.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent evt) { + saveFileMenuItemActionPerformed(); + } + }); + saveFileMenuItem.setAccelerator(KeyStroke + .getKeyStroke(KeyEvent.VK_S, ActionEvent.CTRL_MASK)); + fileMenu.add(saveFileMenuItem); + + // save as + setMenuItem(saveAsFileMenuItem, "menu_item.save_as"); + saveAsFileMenuItem.setToolTipText(ResourceController + .getMessage("menu_item.save_as.tooltip")); + saveAsFileMenuItem.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent evt) { + saveAsFileMenuItemActionPerformed(); + } + }); + fileMenu.add(saveAsFileMenuItem); + + fileMenu.addSeparator(); + + // exit + setMenuItem(exitFileMenuItem, "menu_item.exit"); + exitFileMenuItem.setToolTipText(ResourceController.getMessage("menu_item.exit.tooltip")); + exitFileMenuItem.addActionListener(new ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + exitFileMenuItemActionPerformed(); + } + }); + fileMenu.add(exitFileMenuItem); + + this.add(fileMenu); + + /* ---------------------- run ---------------------------- */ + setMenuItem(runMenu, "menu_item.run"); + + setMenuItem(runBatchMenuItem, "menu_item.run_batch"); + runBatchMenuItem.setToolTipText(ResourceController + .getMessage("menu_item.run_batch.tooltip")); + runBatchMenuItem.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent evt) { + runBatchMenuItemActionPerformed(); + } + }); + runBatchMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F9, 0)); + runMenu.add(runBatchMenuItem); + + setMenuItem(selectBatchMenuItem, "menu_item.run_edit_batch"); + selectBatchMenuItem.setToolTipText(ResourceController + .getMessage("menu_item.run_edit_batch.tooltip")); + selectBatchMenuItem.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent evt) { + selectBatchMenuItemActionPerformed(); + } + }); + runMenu.add(selectBatchMenuItem); + + setMenuItem(batchSaveBeforeMenuItem, "menu_item.run_batch_save"); + batchSaveBeforeMenuItem.setToolTipText(ResourceController + .getMessage("menu_item.run_batch_save.tooltip")); + batchSaveBeforeMenuItem.setSelected(OptionItems.SAVE_BEFORE_RUN); + batchSaveBeforeMenuItem.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent evt) { + batchSaveBeforeMenuItemActionPerformed(); + } + }); + runMenu.add(batchSaveBeforeMenuItem); + + this.add(runMenu); + + /* ---------------------- options ---------------------------- */ + setMenuItem(optionMenu, "menu_item.option"); + + setMenuItem(optionStylesheetMenuItem, "menu_item.option_save"); + optionStylesheetMenuItem.setToolTipText(ResourceController + .getMessage("menu_item.option_save.tooltip")); + optionStylesheetMenuItem.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent evt) { + optionStylesheetMenuItemActionPerformed(); + } + }); + optionMenu.add(optionStylesheetMenuItem); + + setMenuItem(optionEditorMenuItem, "menu_item.option_editor"); + optionEditorMenuItem.setToolTipText(ResourceController + .getMessage("menu_item.option_editor.tooltip")); + optionEditorMenuItem.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent evt) { + optionEditorMenuItemActionPerformed(); + } + }); + optionMenu.add(optionEditorMenuItem); + + this.add(optionMenu); + + /* ---------------------- help ---------------------------- */ + setMenuItem(helpMenu, "menu_item.help"); + + setMenuItem(helpWindowMenuItem, "menu_item.help_window"); + helpWindowMenuItem.setToolTipText(ResourceController + .getMessage("menu_item.help_window.tooltip")); + helpWindowMenuItem.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + helpWindowMenuItemActionPerformed(); + } + }); + helpMenu.add(helpWindowMenuItem); + + setMenuItem(configInfoMenuItem, "menu_item.config"); + configInfoMenuItem + .setToolTipText(ResourceController.getMessage("menu_item.config.tooltip")); + configInfoMenuItem.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + configInfoMenuItemActionPerformed(); + } + }); + helpMenu.add(configInfoMenuItem); + + setMenuItem(aboutHelpMenuItem, "menu_item.about"); + aboutHelpMenuItem.setToolTipText(ResourceController.getMessage("menu_item.about.tooltip")); + aboutHelpMenuItem.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + aboutHelpMenuItemActionPerformed(); + } + }); + helpMenu.add(aboutHelpMenuItem); + + this.add(helpMenu); + } + + /** + * Stores application options and terminates the application. + */ + private void exitFileMenuItemActionPerformed() { + MenuController.exitItem(); + frame.shutDown(); + } + + /** + * Shows the dialog with information about the application. + */ + private void aboutHelpMenuItemActionPerformed() { + AboutForm.showDialog(); + } + + /** + * Shows the dialog asking if the actually opened stylesheet should be saved. If the user choses + * to save the stylesheet then the method saveFileMenuItemActionPerformed() is + * called and the stylesheet is saved. + * + * @return if the actual stylesheet was saved. + */ + private boolean saveOpenedStylesheet() { + if (frame.getOpenFile().getOpenFilePath() == null && frame.getOpenFile().isFileChanged()) { + SaveFileDialog questionDial = SaveFileDialog.showDialog(frame); + if (questionDial.getAnswer() == null) + return false; + if (questionDial.getAnswer()) + return saveFileMenuItemActionPerformed(); + } + return true; + } + + /** + * Saves the actully opened stylesheet (if it is required). Then creates a new empty stylesheet. + */ + private void newFileEmptyMenuItemActionPerformed() { + javax.swing.SwingUtilities.invokeLater(new Runnable() { + public void run() { + if (saveOpenedStylesheet()) + MenuController.newFileEmptyItem(frame.getConfigData(), frame.getOpenFile()); + } + }); + } + + /** + * Saves the actully opened stylesheet (if it is required). Then creates a new stylesheet + * according to the default stylesheet template. + */ + private void newFileDefaultMenuItemActionPerformed() { + javax.swing.SwingUtilities.invokeLater(new Runnable() { + public void run() { + if (saveOpenedStylesheet()) + MenuController.newFileDefaultItem(frame.getConfigData(), frame.getOpenFile()); + } + }); + } + + /** + * Saves the actully opened stylesheet (if it is required). Then shows the open file dialog and + * user is asked to choose a user stylesheet template. Afterwards creates a new stylesheet + * according to the chosen user template. + */ + private void newFileStylesheetMenuItemActionPerformed() { + if (saveOpenedStylesheet()) { + fileChooser.setFileFilter(new XmlFilter()); + fileChooser.setSelectedFile(null); + fileChooser.setCurrentDirectory(new File(System.getProperty("user.dir") + + File.separator + TemplateConst.CONF_FILE_TEMPLATE_DIR)); + int returnVal = fileChooser.showOpenDialog(frame); + if (returnVal == JFileChooser.APPROVE_OPTION) { + javax.swing.SwingUtilities.invokeLater(new Runnable() { + public void run() { + MenuController.newFileStylesheetItem(frame.getConfigData(), frame + .getOpenFile(), fileChooser.getSelectedFile().getPath().toString()); + } + }); + } + } + } + + /** + * Saves the actully opened stylesheet (if it is required). Afterwards shows the open file + * dialog and user is asked to choose the stylesheet file to open. Then opens the choosen + * stylesheet file. + */ + private void openFileMenuItemActionPerformed() { + if (saveOpenedStylesheet()) { + fileChooser.setFileFilter(new XslFilter()); + fileChooser.setSelectedFile(null); + int returnVal = fileChooser.showOpenDialog(frame); + if (returnVal == JFileChooser.APPROVE_OPTION) { + javax.swing.SwingUtilities.invokeLater(new Runnable() { + public void run() { + MenuController.openFileItem(frame.getConfigData(), fileChooser + .getSelectedFile().getPath().toString(), frame.getOpenFile()); + } + }); + } + } + } + + /** + * Saves the actually opened stylesheet file. If the stylesheet has not defined its name then + * the method saveAsFileMenuItemActionPerformed() is called. + * + * @return true if the stylesheet was saved. + */ + private boolean saveFileMenuItemActionPerformed() { + if (this.frame.getOpenFile().getOpenFilePath() == null) + return saveAsFileMenuItemActionPerformed(); + else + MenuController.saveFileItem(frame.getConfigData(), frame.getOpenFile()); + return true; + } + + /** + * Saves the actually opened stylesheet file under the chosen name. Firstly shows the save file + * dialog and user is asked to choose a new file name or an existing file. If user chooses the + * existing file, then he must approve that he really wants to rewrite the existing file. + * Finally the stylesheet is saved under the chosen name. + * + * @return true if the stylesheet was saved. + */ + private boolean saveAsFileMenuItemActionPerformed() { + fileChooser.setFileFilter(new XslFilter()); + fileChooser.setSelectedFile(null); + int returnVal = fileChooser.showSaveDialog(frame); + if (returnVal == JFileChooser.APPROVE_OPTION) { + if (fileChooser.getSelectedFile().exists()) { + OverwriteFileDialog questionDial = OverwriteFileDialog.showDialog(frame); + if (!questionDial.getAnswer()) + return false; + } + MenuController.saveAsFileItem(frame.getConfigData(), fileChooser.getSelectedFile() + .getPath().toString(), frame.getOpenFile()); + return true; + + } + return false; + } + + /** + * Shows the dialog with stylesheet options. + */ + private void optionStylesheetMenuItemActionPerformed() { + javax.swing.SwingUtilities.invokeLater(new Runnable() { + public void run() { + OptionStylesheetDialog.showDialog(); + } + }); + } + + /** + * Shows the dialog with editor options. + */ + private void optionEditorMenuItemActionPerformed() { + javax.swing.SwingUtilities.invokeLater(new Runnable() { + public void run() { + OptionEditorDialog.showDialog(); + } + }); + } + + /** + * Shows the dialog with information about configuration files. + */ + private void configInfoMenuItemActionPerformed() { + javax.swing.SwingUtilities.invokeLater(new Runnable() { + public void run() { + ConfigInfoForm.showDialog(); + } + }); + } + + /** + * Launches the batch file for the actually opened XSL stylesheet. + */ + private void runBatchMenuItemActionPerformed() { + if (OptionItems.SAVE_BEFORE_RUN) { + if (!saveFileMenuItemActionPerformed()) + return; + } else { + if (!saveOpenedStylesheet()) + return; + } + MenuController.runBatchFile(frame.getOpenFile()); + } + + /** + * Shows the open file dialog and user is asked to choose a batch file. Then the chosen path to + * the batch file is stored. + */ + private void selectBatchMenuItemActionPerformed() { + batchFileChooser.setFileFilter(null); + batchFileChooser.setSelectedFile(null); + if (OptionItems.BATCH_FILE.compareTo("") != 0) + batchFileChooser.setSelectedFile(new File(OptionItems.BATCH_FILE)); + int returnVal = batchFileChooser.showOpenDialog(frame); + if (returnVal == JFileChooser.APPROVE_OPTION) { + OptionItems.BATCH_FILE = batchFileChooser.getSelectedFile().getAbsolutePath(); + } + } + + /** + * Changes if the actually opened XSL stylesheet should be automatically saved before launching + * of the batch file. If the item is selected, then the XSL stylesheet is automatically saved. + */ + private void batchSaveBeforeMenuItemActionPerformed() { + OptionItems.SAVE_BEFORE_RUN = batchSaveBeforeMenuItem.isSelected(); + } + + /** + * Shows the dialog with help content. + * + */ + private void helpWindowMenuItemActionPerformed() { + HelpFrame.getInstance().createHelp(); + } + + /** + * Changes the text titles of all menu items according to the actual application language. + */ + public static void changeLanguage() { + javax.swing.SwingUtilities.invokeLater(new Runnable() { + public void run() { + setMenuItem(fileMenu, "menu.file"); + + //new + setMenuItem(submenuNewFile, "menu_item.new"); + submenuNewFile.setToolTipText(ResourceController.getMessage("menu_item.new.tooltip")); + + setMenuItem(newFileMenuEmptyItem, "menu_item.new_empty"); + newFileMenuEmptyItem.setToolTipText(ResourceController + .getMessage("menu_item.new_empty.tooltip")); + + setMenuItem(newFileMenuDefaultItem, "menu_item.new_default"); + newFileMenuDefaultItem.setToolTipText(ResourceController + .getMessage("menu_item.new_default.tooltip")); + + setMenuItem(newFileMenuStylesheetItem, "menu_item.new_stylesheet"); + newFileMenuStylesheetItem.setToolTipText(ResourceController + .getMessage("menu_item.new_stylesheet.tooltip")); + + //open + setMenuItem(openFileMenuItem, "menu_item.open"); + openFileMenuItem.setToolTipText(ResourceController + .getMessage("menu_item.open.tooltip")); + //close + setMenuItem(closeFileMenuItem, "menu_item.close"); + closeFileMenuItem.setToolTipText(ResourceController + .getMessage("menu_item.close.tooltip")); + + //save + setMenuItem(saveAsFileMenuItem, "menu_item.save_as"); + saveAsFileMenuItem.setToolTipText(ResourceController + .getMessage("menu_item.save_as.tooltip")); + + setMenuItem(saveFileMenuItem, "menu_item.save"); + saveFileMenuItem.setToolTipText(ResourceController + .getMessage("menu_item.save.tooltip")); + + //exit + setMenuItem(exitFileMenuItem, "menu_item.exit"); + exitFileMenuItem.setToolTipText(ResourceController + .getMessage("menu_item.exit.tooltip")); + + //run + setMenuItem(runMenu, "menu_item.run"); + + setMenuItem(runBatchMenuItem, "menu_item.run_batch"); + runBatchMenuItem.setToolTipText(ResourceController + .getMessage("menu_item.run_batch.tooltip")); + + setMenuItem(selectBatchMenuItem, "menu_item.run_edit_batch"); + selectBatchMenuItem.setToolTipText(ResourceController + .getMessage("menu_item.run_edit_batch.tooltip")); + + setMenuItem(batchSaveBeforeMenuItem, "menu_item.run_batch_save"); + batchSaveBeforeMenuItem.setToolTipText(ResourceController + .getMessage("menu_item.run_batch_save.tooltip")); + + //options + setMenuItem(optionMenu, "menu_item.option"); + + setMenuItem(optionStylesheetMenuItem, "menu_item.option_save"); + optionStylesheetMenuItem.setToolTipText(ResourceController + .getMessage("menu_item.option_save.tooltip")); + + setMenuItem(optionEditorMenuItem, "menu_item.option_editor"); + optionEditorMenuItem.setToolTipText(ResourceController + .getMessage("menu_item.option_editor.tooltip")); + + //help + setMenuItem(helpMenu, "menu_item.help"); + + setMenuItem(helpWindowMenuItem, "menu_item.help_window"); + helpWindowMenuItem.setToolTipText(ResourceController + .getMessage("menu_item.help_window.tooltip")); + + setMenuItem(configInfoMenuItem, "menu_item.config"); + configInfoMenuItem.setToolTipText(ResourceController + .getMessage("menu_item.config.tooltip")); + setMenuItem(aboutHelpMenuItem, "menu_item.about"); + aboutHelpMenuItem.setToolTipText(ResourceController + .getMessage("menu_item.about.tooltip")); + } + }); + } + + /** + * Sets the name of the menu item. Assignes the item title from the resource bundle + * ResourceController according to the resource key. + * + * @param item + * the item of the menu. + * @param key + * the resource key specifying the item title. + */ + private static void setMenuItem(JMenuItem item, String key) { + String message = ResourceController.getMessage(key); + int pos = message.indexOf("&"); + if ((pos >= 0) && ((pos + 1) < message.length())) { + item.setMnemonic(message.charAt(pos + 1)); + message = message.replaceAll("&", ""); + } + item.setText(message); + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/CheckBox.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/CheckBox.java new file mode 100644 index 000000000..465899b50 --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/CheckBox.java @@ -0,0 +1,88 @@ +package cz.zcu.fav.kiv.editor.graphics.components; + +import java.awt.event.ItemEvent; +import java.awt.event.ItemListener; +import java.util.Observable; +import java.util.Observer; + +import javax.swing.JCheckBox; + +import cz.zcu.fav.kiv.editor.beans.types.Type; +import cz.zcu.fav.kiv.editor.controller.MessageWriter; +import cz.zcu.fav.kiv.editor.controller.resource.ResourceController; +import cz.zcu.fav.kiv.editor.graphics.MainFrame; +import cz.zcu.fav.kiv.editor.utils.TagParser; + +/** + * The CheckBox class is the component check-box used for displaying + * parameter with boolean values - false (no) and true (yes). + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class CheckBox extends JCheckBox implements Observer, ItemListener { + + private static final long serialVersionUID = -6605204557074361719L; + + /** The parameter type which values the component displays */ + private Type type; + + /** + * Initializes a newly created CheckBox with the parameter type. + * + * @param type + * the parameter type. + */ + public CheckBox(Type type) { + setSelected(type.getValue()); + + this.type = type; + type.addObserver(this); + this.addItemListener(this); + } + + /** + * Selects or deselects the check-box according to the input value. If the input value is not + * valid boolean value, the check-box keeps its previous value. + * + * @param observable + * the observable object. + * @param value + * the new parameter value. + */ + public void update(Observable observable, Object value) { + if (!setSelected(value.toString())) { + type.changeValue(TagParser.convertBoolean(this.isSelected())); + MessageWriter.writeWarning(ResourceController.getMessage( + "error.component.update_value", type.getOwnerName(), value)); + } + } + + /** + * Action performed when the check-box is selected or deselected. Assignes a new estate to the + * parameter type. + * + * @param event + * the item event. + */ + public void itemStateChanged(ItemEvent event) { + type.changeValue(TagParser.convertBoolean(this.isSelected())); + MainFrame.getInstance().setFileChanged(); + } + + /** + * Selects or deselects the check-box according to the input value. + * + * @param newValue + * the new boolean input value. + * @return true if the input value is valid boolean value. + */ + private boolean setSelected(String newValue) { + Boolean value = TagParser.parseBoolean(newValue); + if (value != null) { + this.setSelected(value); + return true; + } else + return false; + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/ColorChooser.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/ColorChooser.java new file mode 100644 index 000000000..f5a7fccbd --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/ColorChooser.java @@ -0,0 +1,251 @@ +package cz.zcu.fav.kiv.editor.graphics.components; + +import java.awt.Color; +import java.awt.Dimension; +import java.awt.Graphics; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.ItemEvent; +import java.awt.event.ItemListener; +import java.util.Observable; +import java.util.Observer; + +import javax.swing.Box; +import javax.swing.BoxLayout; +import javax.swing.JButton; +import javax.swing.JColorChooser; +import javax.swing.JComboBox; +import javax.swing.JDialog; +import javax.swing.JPanel; + +import cz.zcu.fav.kiv.editor.beans.types.Type; +import cz.zcu.fav.kiv.editor.controller.MessageWriter; +import cz.zcu.fav.kiv.editor.controller.resource.ResourceController; +import cz.zcu.fav.kiv.editor.graphics.MainFrame; +import cz.zcu.fav.kiv.editor.graphics.images.EditorIcon; +import cz.zcu.fav.kiv.editor.utils.TagParser; + +/** + * The ColorChooser class is the component used for choosing colors from the list of + * colors or from the color palette. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class ColorChooser extends JPanel implements ActionListener, ItemListener, Observer { + + private static final long serialVersionUID = -2515399651281284846L; + + /** The width of the rectangle displaying the actually chosen color */ + public static final int COLOR_RECT_WIDTH = 25; + + /** The height of the rectangle displaying the actually chosen color */ + public static final int COLOR_RECT_HEIGHT = 23; + + /** The size of the button displaying the dialog with color palette */ + public static final int BUTTON_SIZE = 20; + + /** The width of the empty gap components */ + private static final int EMPTY_GAP_WIDTH = 10; + + /** The height of the empty gap components */ + private static final int EMPTY_GAP_HEIGHT = 0; + + /** The list of predefined colors */ + private JComboBox colorBox; + + /** The button displaying the dialog with color palette */ + private JButton colorButton; + + /** The color palette enabling choosing of colors */ + private JColorChooser colorChooser; + + /** The rectangle displaying the actually chosen color */ + private ColorRect colorRect; + + /** The dialog displaying the color palette */ + private JDialog dialog; + + /** The parameter type which values the component displays */ + private Type type; + + /** The actually choosen color */ + private Color color; + + /** + * Initializes a newly created ColorChooser with the parameter type. + * + * @param type + * the parameter type. + */ + public ColorChooser(Type type) { + this.setLayout(new BoxLayout(this, BoxLayout.X_AXIS)); + this.type = type; + type.addObserver(this); + + // color combo-box + colorBox = new JComboBox(type.getValueList().keySet().toArray()); + this.color = getColor(type.getValue()); + setSelectedColor(type.getValue()); + colorBox.setEditable(true); + colorBox.addItemListener(this); + this.add(colorBox); + + this.add(Box.createRigidArea(new Dimension(EMPTY_GAP_WIDTH, EMPTY_GAP_HEIGHT))); + + // button displaying the color palette + colorButton = new JButton(EditorIcon.createColorIcon()); + colorButton.setPreferredSize(new Dimension(BUTTON_SIZE, BUTTON_SIZE)); + colorButton.addActionListener(this); + this.add(colorButton); + + this.add(Box.createRigidArea(new Dimension(EMPTY_GAP_WIDTH, EMPTY_GAP_HEIGHT))); + + // color rectangle + colorRect = new ColorRect(); + this.add(colorRect); + } + + /** + * Sets a new color according to the input value. If the input value is not valid color value, + * then the previous color is kept. + * + * @param observable + * the observable object. + * @param value + * the new parameter value. + */ + public void update(Observable observable, Object value) { + Color newColor = getColor(value.toString()); + if (newColor != null) { + setSelectedColor(value); + this.color = newColor; + } else { + type.changeValue(TagParser.createColor(color)); + MessageWriter.writeWarning(ResourceController.getMessage( + "error.component.update_value", type.getOwnerName(), value)); + } + } + + /** + * Action performed when the button is pressed, it displays the dialog with color palette. + * + * @param event + * the item event. + */ + public void actionPerformed(ActionEvent event) { + colorChooser = new JColorChooser(color); + colorChooser.setPreviewPanel(new JPanel()); + + dialog = JColorChooser.createDialog(this, ResourceController + .getMessage("component.color_editor.title"), true, colorChooser, new ActionColor(), + null); + dialog.setVisible(true); + } + + /** + * Action performed when a color from the combo-box list has been selected or a new one is + * inserted. Assignes a new value to the parameter type. If the inserted color is + * invalid, then the previous color is kept. + * + * @param event + * the item event. + */ + public void itemStateChanged(ItemEvent event) { + if ((event.getStateChange() & ItemEvent.ITEM_STATE_CHANGED) != 0) { + Color col = getColor(colorBox.getSelectedItem().toString()); + if (col != null) { + type.changeValue((String) colorBox.getSelectedItem()); + this.color = col; + colorRect.repaint(); + MainFrame.getInstance().setFileChanged(); + } else { + setSelectedColor(type.getValue()); + } + } + } + + /** + * Selects the input color in the list if the list contains it or adds the new color to the + * list. + * + * @param newColor + * the actually selected color. + */ + private void setSelectedColor(Object newColor) { + for (int i = 0; i < colorBox.getItemCount(); i++) { + if (colorBox.getItemAt(i).equals(type.getKeyFromValue(newColor.toString())) + || colorBox.getItemAt(i).equals(newColor.toString())) { + colorBox.setSelectedIndex(i); + return; + } + } + if (colorBox.getItemCount() > type.getValueList().size()) + colorBox.removeItemAt(0); + colorBox.insertItemAt(newColor, 0); + colorBox.setSelectedIndex(0); + } + + /** + * The ActionColor inner class represents the action performed when a color is + * choosen in the color palette. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ + class ActionColor implements ActionListener { + public void actionPerformed(ActionEvent event) { + color = colorChooser.getColor(); + + String colStr = TagParser.createColor(color); + dialog.dispose(); + type.changeValue(colStr); + setSelectedColor(colStr); + MainFrame.getInstance().setFileChanged(); + } + } + + /** + * Creates Color from the string containing a color in the hexadecimal format #rrggbb + * or containing a color name. + * + * @param color + * the string containing a color in the hexadecimal format #rrggbb or containing a + * color name. + * @return the color parsed from the string. + */ + private Color getColor(String color) { + if (type.getValueList().get(color) != null) + return TagParser.parseColor(type.getValueList().get(color)); + else + return TagParser.parseColor(color); + } + + /** + * The ColorRect inner class represents the rectangle displaying actually choosen + * color. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ + class ColorRect extends JPanel { + + private static final long serialVersionUID = 5631478801104148565L; + + /** + * Initializes a newly created ColorRectclass. + */ + public ColorRect() { + this.setPreferredSize(new Dimension(COLOR_RECT_WIDTH, COLOR_RECT_HEIGHT)); + } + + /** + * Changes the color of the rectangle according to the actually chosen color. + */ + public void paintComponent(Graphics graphics) { + super.paintComponent(graphics); + graphics.setColor(color); + graphics.fillRect(0, 0, COLOR_RECT_WIDTH, COLOR_RECT_HEIGHT); + } + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/ComboBox.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/ComboBox.java new file mode 100644 index 000000000..07dd0c535 --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/ComboBox.java @@ -0,0 +1,77 @@ +package cz.zcu.fav.kiv.editor.graphics.components; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.Observable; +import java.util.Observer; + +import javax.swing.JComboBox; + +import cz.zcu.fav.kiv.editor.beans.types.Type; +import cz.zcu.fav.kiv.editor.controller.MessageWriter; +import cz.zcu.fav.kiv.editor.controller.resource.ResourceController; +import cz.zcu.fav.kiv.editor.graphics.MainFrame; + +/** + * The ComboBox class is the component combo-box used for displaying a + * list of predefined values of a parameter. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class ComboBox extends JComboBox implements Observer, ActionListener { + + private static final long serialVersionUID = -151909741397111994L; + + /** The parameter type which values the component displays */ + private Type type; + + /** + * Initializes a newly created ComboBox with the parameter type. + * + * @param type + * the parameter type. + */ + public ComboBox(Type type) { + super(type.getValueList().values().toArray()); + + this.setSelectedItem(type.getValueList().get(type.getValue())); + + this.type = type; + type.addObserver(this); + this.addActionListener(this); + } + + /** + * Selects the input value in the list if the list contains it. If the input value is not in the + * list then the previously selected item is left as selected. + * + * @param observable + * the observable object. + * @param value + * the new parameter value. + */ + public void update(Observable observable, Object value) { + String newValue = type.getValueList().get(value.toString()); + if (newValue != null) + this.setSelectedItem(newValue); + else { + type.changeValue((String) type.getValueList().get(this.getSelectedItem())); + MessageWriter.writeWarning(ResourceController.getMessage( + "error.component.update_value", type.getOwnerName(), value)); + } + } + + /** + * Action performed when an item of the combo-box list has been selected. Assignes a new value + * to the parameter type. + * + * @param event + * the action event. + */ + public void actionPerformed(ActionEvent event) { + type.changeValue((String) type.getKeyFromValue(this.getSelectedItem().toString())); + MainFrame.getInstance().setFileChanged(); + } + +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/ComboBoxEdit.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/ComboBoxEdit.java new file mode 100644 index 000000000..e3f6fb1f0 --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/ComboBoxEdit.java @@ -0,0 +1,93 @@ +package cz.zcu.fav.kiv.editor.graphics.components; + +import java.awt.event.ItemEvent; +import java.awt.event.ItemListener; +import java.util.Observable; +import java.util.Observer; + +import javax.swing.JComboBox; + +import cz.zcu.fav.kiv.editor.beans.types.Type; +import cz.zcu.fav.kiv.editor.graphics.MainFrame; + +/** + * The ComboBoxEdit class is the component combo-box used for displaying a + * list of predefined values of a parameter. It enables to insert a new value to the list. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class ComboBoxEdit extends JComboBox implements Observer, ItemListener { + + private static final long serialVersionUID = -5008301149696067333L; + + /** The parameter type which values the component displays */ + private Type type; + + /** + * Initializes a newly created ComboBoxEdit with the parameter type. + * + * @param type + * the parameter type. + */ + public ComboBoxEdit(Type type) { + super(type.getValueList().values().toArray()); + + this.type = type; + // selected value + setSelectedIndex(type.getValue()); + + type.addObserver(this); + this.setEditable(true); + this.addItemListener(this); + } + + /** + * Selects the input parameter value in the list if the list contains it. If the input value is + * not in the list then inserts it to the list. + * + * @param observable + * the observable object. + * @param value + * the new parameter value. + */ + public void update(Observable observable, Object value) { + setSelectedIndex(value); + } + + /** + * Action performed when an item in the combo-box list has been selected or a new one has been + * inserted. Assignes a new value to the parameter type. + * + * @param event + * the item event. + */ + public void itemStateChanged(ItemEvent event) { + if ((event.getStateChange() & ItemEvent.ITEM_STATE_CHANGED) != 0) { + String newValue = type.getDefaultValue().getKeyFromValue(this.getSelectedItem().toString()); + if (newValue != null) + type.changeValue(newValue); + else + type.changeValue(this.getSelectedItem().toString()); + MainFrame.getInstance().setFileChanged(); + } + } + + /** + * Selects the input value in the list if the list contains it. If the input value is not in the + * list then inserts it to the list. + * + * @param obj + * the input parameter value. + */ + private void setSelectedIndex(Object obj) { + for (int i = 0; i < this.getItemCount(); i++) { + if (this.getItemAt(i).equals(type.getValueList().get(obj))) { + this.setSelectedIndex(i); + return; + } + } + this.addItem(obj); + this.setSelectedIndex(this.getItemCount() - 1); + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/ComboBoxUnit.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/ComboBoxUnit.java new file mode 100644 index 000000000..7cb450438 --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/ComboBoxUnit.java @@ -0,0 +1,68 @@ +package cz.zcu.fav.kiv.editor.graphics.components; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.Observable; +import java.util.Observer; + +import javax.swing.JComboBox; + +import cz.zcu.fav.kiv.editor.beans.types.Unit; +import cz.zcu.fav.kiv.editor.graphics.MainFrame; + +/** + * The ComboBoxUnit class is the component combo-box used for displaying a + * list of predefined units of a parameter. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class ComboBoxUnit extends JComboBox implements Observer, ActionListener { + + private static final long serialVersionUID = -5900614666148972102L; + + /** The parameter unit which values the component displays */ + private Unit unit; + + /** + * Initializes a newly created ComboBoxUnit with the parameter unit. + * + * @param unit + * the parameter unit. + */ + public ComboBoxUnit(Unit unit) { + super(unit.getValueList().toArray()); + int selected = unit.getValueList().indexOf(unit.getValue()); + if (selected >= 0) + this.setSelectedIndex(selected); + this.unit = unit; + unit.addObserver(this); + this.addActionListener(this); + } + + /** + * Selects the input value in the list. + * + * @param observable + * the observable object. + * @param value + * the new parameter value. + */ + public void update(Observable observable, Object value) { + int selected = unit.getValueList().indexOf(value.toString()); + if (selected >= 0) + this.setSelectedIndex(selected); + } + + /** + * Action performed when an item in the combo-box list has been selected. Assignes a new value + * to the parameter unit. + * + * @param event + * the item event. + */ + public void actionPerformed(ActionEvent event) { + unit.changeValue((String) this.getSelectedItem()); + MainFrame.getInstance().setFileChanged(); + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/FileChooser.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/FileChooser.java new file mode 100644 index 000000000..a9ef78e95 --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/FileChooser.java @@ -0,0 +1,108 @@ +package cz.zcu.fav.kiv.editor.graphics.components; + +import java.awt.Dimension; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.io.File; +import java.util.Observable; +import java.util.Observer; + +import javax.swing.Box; +import javax.swing.BoxLayout; +import javax.swing.JButton; +import javax.swing.JFileChooser; +import javax.swing.JPanel; +import javax.swing.JTextField; + +import cz.zcu.fav.kiv.editor.beans.types.Type; +import cz.zcu.fav.kiv.editor.controller.resource.ResourceController; +import cz.zcu.fav.kiv.editor.graphics.MainFrame; + +/** + * The FileChooser class is the component text-field and button + * used for choosing a directory path with the file-chooser. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class FileChooser extends JPanel implements Observer, ActionListener { + + private static final long serialVersionUID = -151909741397111994L; + + /** The width of the text-field */ + private static final int WIDTH = 180; + + /** The width of the empty gap between the text-field and the button */ + private static final int EMPTY_GAP_WIDTH = 10; + + /** The height of the empty gap between the text-field and the button */ + private static final int EMPTY_GAP_HEIGHT = 0; + + /** The parameter type which values the component displays */ + private Type type; + + /** The text-field displaying directory path */ + private JTextField textField; + + /** The file-chooser used for choosing a directory path */ + JFileChooser fileChooser = new JFileChooser(); + + /** + * Initializes a newly created FileChooser with the parameter type. + * + * @param type + * the parameter type. + */ + public FileChooser(Type type) { + this.setLayout(new BoxLayout(this, BoxLayout.X_AXIS)); + + // text-field + textField = new JTextField(type.getValue()); + textField.setPreferredSize(new Dimension(WIDTH, textField.getPreferredSize().height)); + this.add(textField); + + this.add(Box.createRigidArea(new Dimension(EMPTY_GAP_WIDTH, EMPTY_GAP_HEIGHT))); + + // chooser button + JButton chooseButton = new JButton(ResourceController + .getMessage("option_editor.xml_definition_path.button")); + chooseButton.addActionListener(this); + this.add(chooseButton); + + this.type = type; + type.addObserver(this); + } + + /** + * Sets a new parameter value to the text-field. + * + * @param observable + * the observable object. + * @param value + * the new parameter value. + */ + public void update(Observable observable, Object value) { + textField.setText(value.toString()); + } + + /** + * Action performed when the button is pressed, it displays the file-chooser enabling to choose + * a direcotory path. Assignes a new value to the parameter type. + * + * @param event + * the item event. + */ + public void actionPerformed(ActionEvent event) { + File directory = new File(textField.getText()); + if (directory.exists()) + fileChooser.setCurrentDirectory(directory); + + int returnVal = fileChooser.showOpenDialog(MainFrame.getInstance()); + if (returnVal == JFileChooser.APPROVE_OPTION) { + textField.setText(fileChooser.getSelectedFile().getPath()); + type.changeValue(fileChooser.getSelectedFile().getPath()); + MainFrame.getInstance().setFileChanged(); + } + } + +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/RadioButton.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/RadioButton.java new file mode 100644 index 000000000..09ae35fcf --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/RadioButton.java @@ -0,0 +1,103 @@ +package cz.zcu.fav.kiv.editor.graphics.components; + +import java.awt.GridLayout; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.Iterator; +import java.util.Map; +import java.util.Observable; +import java.util.Observer; + +import javax.swing.ButtonGroup; +import javax.swing.JPanel; +import javax.swing.JRadioButton; + +import cz.zcu.fav.kiv.editor.beans.types.Type; +import cz.zcu.fav.kiv.editor.controller.MessageWriter; +import cz.zcu.fav.kiv.editor.controller.resource.ResourceController; +import cz.zcu.fav.kiv.editor.graphics.MainFrame; + +/** + * The RadioButton class is the component containing a group of radio-buttons + * used for choosing one of predefined values. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class RadioButton extends JPanel implements Observer, ActionListener { + + private static final long serialVersionUID = 7530690462466562523L; + + /** The parameter type which values the component displays */ + private Type type; + + /** The list of radio-buttons */ + private JRadioButton[] radioList; + + /** + * Initializes a newly created RadioButton with the parameter type. + * + * @param type + * the parameter type. + */ + public RadioButton(Type type) { + this.setLayout(new GridLayout(0, 3)); + this.type = type; + ButtonGroup group = new ButtonGroup(); + radioList = new JRadioButton[type.getValueList().size()]; + + int i = 0; + for (Iterator it = type.getValueList().entrySet().iterator(); it.hasNext();) { + Map.Entry e = (Map.Entry) it.next(); + radioList[i] = new JRadioButton(e.getKey().toString()); + radioList[i].setName(e.getValue().toString()); + radioList[i].addActionListener(this); + if (e.getValue().equals(type.getValue())) + radioList[i].setSelected(true); + group.add(radioList[i]); + this.add(radioList[i]); + i++; + } + type.addObserver(this); + } + + /** + * Selects one radio-button representing the input value. If the input value is not among the + * values of radio-buttons, then the previous selection of a radio-button is kept. + * + * @param observable + * the observable object. + * @param value + * the new parameter value. + */ + public void update(Observable observable, Object value) { + boolean selected = false; + for (int i = 0; i < radioList.length; i++) { + if (radioList[i].getName().equals(value.toString())) { + radioList[i].setSelected(true); + selected = true; + break; + } + } + if (!selected) { + for (int i = 0; i < radioList.length; i++) { + if (radioList[i].isSelected()) + type.changeValue(radioList[i].getName()); + } + MessageWriter.writeWarning(ResourceController.getMessage( + "error.component.update_value", type.getOwnerName(), value)); + } + } + + /** + * Action performed when one of radio-buttons is selected. Assignes a new value to the parameter + * type. + * + * @param event + * the item event. + */ + public void actionPerformed(ActionEvent event) { + type.changeValue(((JRadioButton) event.getSource()).getName()); + MainFrame.getInstance().setFileChanged(); + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/SpinnerFloat.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/SpinnerFloat.java new file mode 100644 index 000000000..9fc6f5cc8 --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/SpinnerFloat.java @@ -0,0 +1,113 @@ +package cz.zcu.fav.kiv.editor.graphics.components; + +import java.text.DecimalFormat; +import java.util.Observable; +import java.util.Observer; + +import javax.swing.JSpinner; +import javax.swing.SpinnerNumberModel; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; + +import cz.zcu.fav.kiv.editor.beans.types.Type; +import cz.zcu.fav.kiv.editor.controller.MessageWriter; +import cz.zcu.fav.kiv.editor.controller.resource.ResourceController; +import cz.zcu.fav.kiv.editor.graphics.MainFrame; + +/** + * The SpinnerFloat class is the component spinner used for displaying and + * changing decimal numbers. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class SpinnerFloat extends JSpinner implements Observer, ChangeListener { + + private static final long serialVersionUID = 3179056596219532766L; + + /** The step of the spinner */ + private static final double STEP = 0.1; + + /** The number of columns in the spinner */ + private static final int SPINNER_SIZE = 4; + + /** The number format used for converting a decimal value to the string */ + private static final DecimalFormat formatDouble = new DecimalFormat("0.##"); + + /** The parameter type which values the component displays */ + private Type type; + + /** + * Creates the spinner used for displaying and changing decimal numbers. + * + * @param type + * the parameter type. + * @return the newly created spinner used form decimal numbers. + */ + public static SpinnerFloat createSpinnerFloat(Type type) { + SpinnerNumberModel spinnerModel = new SpinnerNumberModel(); + spinnerModel.setValue(convertDouble(type.getValue())); + spinnerModel.setStepSize(STEP); + return new SpinnerFloat(spinnerModel, type); + } + + /** + * Initializes a newly created SpinnerFloat with the parameter type and spinner + * model. + * + * @param spinnerModel + * the spinner model. + * @param type + * the parameter type. + */ + private SpinnerFloat(SpinnerNumberModel spinnerModel, Type type) { + super(spinnerModel); + this.type = type; + type.addObserver(this); + this.addChangeListener(this); + ((JSpinner.DefaultEditor) this.getEditor()).getTextField().setColumns(SPINNER_SIZE); + } + + /** + * Updates the spinner number value according to the input value. If the input value is not a + * valid decimal number, then the previous spinner value is kept. + * + * @param observable + * the observable object. + * @param value + * the new parameter value. + */ + public void update(Observable observable, Object value) { + try { + ((SpinnerNumberModel) this.getModel()).setValue(convertDouble(value.toString())); + } catch (NumberFormatException ex) { + type.changeValue(formatDouble.format(convertDouble(this.getModel().getValue() + .toString()))); + MessageWriter.writeWarning(ResourceController.getMessage( + "error.component.update_value", type.getOwnerName(), value)); + } + } + + /** + * Action performed when the spinner value is changed. Assignes a new value to the parameter + * type. + * + * @param event + * the item event. + */ + public void stateChanged(ChangeEvent event) { + type.changeValue(formatDouble.format(convertDouble(this.getModel().getValue().toString()))); + MainFrame.getInstance().setFileChanged(); + } + + /** + * Converts the input text containing a decimal number to a double number. + * + * @param number + * the input text containing a decimal number. + * @return converted double number. + */ + private static Double convertDouble(String number) { + return Double.parseDouble(number.replace(",", ".")); + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/SpinnerInt.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/SpinnerInt.java new file mode 100644 index 000000000..a3873f6bb --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/SpinnerInt.java @@ -0,0 +1,100 @@ +package cz.zcu.fav.kiv.editor.graphics.components; + +import static java.lang.Integer.parseInt; + +import java.util.Observable; +import java.util.Observer; + +import javax.swing.JSpinner; +import javax.swing.SpinnerModel; +import javax.swing.SpinnerNumberModel; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; + +import cz.zcu.fav.kiv.editor.beans.types.Type; +import cz.zcu.fav.kiv.editor.controller.MessageWriter; +import cz.zcu.fav.kiv.editor.controller.resource.ResourceController; +import cz.zcu.fav.kiv.editor.graphics.MainFrame; + +/** + * The SpinnerInt class is the component spinner used for displaying and + * changing integer numbers. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class SpinnerInt extends JSpinner implements Observer, ChangeListener { + + private static final long serialVersionUID = 6920036545501669043L; + + /** The number of columns in the spinner */ + private static final int SPINNER_SIZE = 4; + + /** The step of the spinner */ + private final static int STEP = 1; + + /** The parameter type which values the component displays */ + private Type type; + + /** + * Creates the spinner used for displaying and changing integer numbers. + * + * @param type + * the parameter type. + * @return the newly created spinner used form integer numbers. + */ + public static SpinnerInt createSpinnerInt(Type type) { + SpinnerNumberModel spinnerModel = new SpinnerNumberModel(); + spinnerModel.setValue(parseInt(type.getValue())); + spinnerModel.setStepSize(STEP); + return new SpinnerInt(spinnerModel, type); + } + + /** + * Initializes a newly created SpinnerInt with the parameter type and spinner + * model. + * + * @param spinnerModel + * the spinner model. + * @param type + * the parameter type. + */ + private SpinnerInt(SpinnerModel spinnerModel, Type type) { + super(spinnerModel); + this.type = type; + type.addObserver(this); + this.addChangeListener(this); + ((JSpinner.DefaultEditor) this.getEditor()).getTextField().setColumns(SPINNER_SIZE); + } + + /** + * Updates the spinner number value according to the input value. If the input value is not a + * valid integer number, then the previous spinner value is kept. + * + * @param observable + * the observable object. + * @param value + * the new parameter value. + */ + public void update(Observable observable, Object value) { + try { + ((SpinnerNumberModel) this.getModel()).setValue(Integer.valueOf(value.toString())); + } catch (NumberFormatException ex) { + type.changeValue(this.getModel().getValue().toString()); + MessageWriter.writeWarning(ResourceController.getMessage( + "error.component.update_value", type.getOwnerName(), value)); + } + } + + /** + * Action performed when the spinner value is changed. Assignes a new value to the parameter + * type. + * + * @param event + * the item event. + */ + public void stateChanged(ChangeEvent event) { + type.changeValue(this.getModel().getValue().toString()); + MainFrame.getInstance().setFileChanged(); + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/TextArea.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/TextArea.java new file mode 100644 index 000000000..b237d3b80 --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/TextArea.java @@ -0,0 +1,76 @@ +package cz.zcu.fav.kiv.editor.graphics.components; + +import java.awt.event.FocusEvent; +import java.awt.event.FocusListener; +import java.util.Observable; +import java.util.Observer; + +import javax.swing.JTextArea; + +import cz.zcu.fav.kiv.editor.beans.types.Type; +import cz.zcu.fav.kiv.editor.graphics.MainFrame; + +/** + * The TextArea class is the component text-area used for displaying + * longer texts. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class TextArea extends JTextArea implements Observer, FocusListener { + + private static final long serialVersionUID = -2338840101614677876L; + + /** The width of the text-area */ + private static final int TEXTAREA_WIDTH = 25; + + /** The height of the text-area */ + private static final int TEXTAREA_HEIGHT = 15; + + /** The parameter type which values the component displays */ + private Type type; + + /** + * Initializes a newly created TextArea with the parameter type. + * + * @param type + * the parameter type. + */ + public TextArea(Type type) { + super(TEXTAREA_HEIGHT, TEXTAREA_WIDTH); + this.setText(type.getValue()); + this.addFocusListener(this); + this.type = type; + type.addObserver(this); + } + + /** + * Action performed when the text-area losts focus. Assignes a new value to the + * parameter type. + * + * @param event + * the focus event. + */ + public void focusLost(FocusEvent event) { + type.changeValue(this.getText()); + MainFrame.getInstance().setFileChanged(); + } + + /** + * Action performed when the text-area gains focus - does nothing. + */ + public void focusGained(FocusEvent event) { + } + + /** + * Sets the content of the text-area according to the input text. + * + * @param observable + * the observable object. + * @param value + * the new parameter value. + */ + public void update(Observable observable, Object value) { + this.setText(value.toString()); + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/TextField.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/TextField.java new file mode 100644 index 000000000..5c948d3d1 --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/TextField.java @@ -0,0 +1,73 @@ +package cz.zcu.fav.kiv.editor.graphics.components; + +import java.awt.event.FocusEvent; +import java.awt.event.FocusListener; +import java.util.Observable; +import java.util.Observer; + +import javax.swing.JTextField; + +import cz.zcu.fav.kiv.editor.beans.types.Type; +import cz.zcu.fav.kiv.editor.graphics.MainFrame; + +/** + * The TextField class is the component text-field used for displaying + * shorter single-line texts. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class TextField extends JTextField implements Observer, FocusListener { + + private static final long serialVersionUID = 4818192876380891610L; + + /** The size of the text-field */ + private static final int TEXTFIELD_SIZE = 25; + + /** The parameter type which values the component displays */ + private Type type; + + /** + * Initializes a newly created TextField with the parameter type. + * + * @param type + * the parameter type. + */ + public TextField(Type type) { + super(TEXTFIELD_SIZE); + this.setText(type.getValue()); + this.addFocusListener(this); + this.type = type; + type.addObserver(this); + } + + /** + * Action performed when the text-field losts focus. Assignes a new value to the + * parameter type. + * + * @param event + * the focus event. + */ + public void focusLost(FocusEvent event) { + type.changeValue(this.getText()); + MainFrame.getInstance().setFileChanged(); + } + + /** + * Action performed when the text-field gains focus - does nothing. + */ + public void focusGained(FocusEvent event) { + } + + /** + * Sets the content of the text-field according to the input text. + * + * @param observable + * the observable object. + * @param value + * the new parameter value. + */ + public void update(Observable observable, Object value) { + this.setText(value.toString()); + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/attributes/AttributeButton.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/attributes/AttributeButton.java new file mode 100644 index 000000000..25af5142d --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/attributes/AttributeButton.java @@ -0,0 +1,63 @@ +package cz.zcu.fav.kiv.editor.graphics.components.attributes; + +import java.awt.Dimension; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +import javax.swing.Box; +import javax.swing.BoxLayout; +import javax.swing.JButton; +import javax.swing.JPanel; + +import cz.zcu.fav.kiv.editor.beans.properties.Property; + +/** + * The AttributeButton class represents the button displaying the dialog + * with attributes AttributeDialog. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class AttributeButton extends JPanel implements ActionListener { + + private static final long serialVersionUID = 6410143984336194601L; + + /** The size of horizontal empty gap */ + private static final int EMPTY_GAP_HORIZONTAL = 10; + + /** The size of vertical empty gap */ + private static final int EMPTY_GAP_VERTICAL = 0; + + /** The property which dialog dialog displays */ + private Property property; + + /** + * Initializes a newly created AttributeButton with the property. + * + * @param property + * the property with Attributes. + */ + public AttributeButton(Property property) { + this.setLayout(new BoxLayout(this, BoxLayout.X_AXIS)); + + this.add(Box.createRigidArea(new Dimension(EMPTY_GAP_HORIZONTAL, EMPTY_GAP_VERTICAL))); + + JButton button = new JButton(property.getName()); + button.addActionListener(this); + this.add(button); + + this.property = property; + } + + /** + * Action performed when the button is pressed. It displays the dialog with attributes + * AttributeDialog. + */ + public void actionPerformed(ActionEvent event) { + javax.swing.SwingUtilities.invokeLater(new Runnable() { + public void run() { + AttributeDialog.showDialog(property); + } + }); + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/attributes/AttributeCheckBox.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/attributes/AttributeCheckBox.java new file mode 100644 index 000000000..0c5560bbe --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/attributes/AttributeCheckBox.java @@ -0,0 +1,68 @@ +package cz.zcu.fav.kiv.editor.graphics.components.attributes; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.Observable; +import java.util.Observer; + +import javax.swing.JCheckBox; + +import cz.zcu.fav.kiv.editor.beans.properties.Attribute; +import cz.zcu.fav.kiv.editor.graphics.MainFrame; + +/** + * The AttributeCheckBox class is the component check-box, that displays + * whether the corresponding Attribute of the Property is selected or + * not. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class AttributeCheckBox extends JCheckBox implements Observer, ActionListener { + + private static final long serialVersionUID = -6845824213536903733L; + + /** The attribute which estate the component displays */ + private Attribute attribute; + + /** + * Initializes a newly created AttributeCheckBox with the Attribute. + * + * @param attribute + * the attribute of the Property. + */ + public AttributeCheckBox(Attribute attribute) { + super(); + + this.attribute = attribute; + setSelected(attribute.isChosen()); + + attribute.addObserver(this); + this.addActionListener(this); + } + + /** + * Selects or deselects the check-box according to the input value. + * + * @param observable + * the observable object. + * @param value + * the new check-box value. + */ + public void update(Observable observable, Object value) { + this.setSelected((Boolean) value); + } + + /** + * Action performed when the check-box is selected or deselected. Assignes a new estate to the + * Attribute. + * + * @param event + * the action event. + */ + public void actionPerformed(ActionEvent event) { + attribute.changeChosen(this.isSelected()); + MainFrame.getInstance().setFileChanged(); + } + +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/attributes/AttributeComponent.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/attributes/AttributeComponent.java new file mode 100644 index 000000000..474481c94 --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/attributes/AttributeComponent.java @@ -0,0 +1,60 @@ +package cz.zcu.fav.kiv.editor.graphics.components.attributes; + +import java.awt.BorderLayout; +import java.util.List; + +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.SpringLayout; + +import cz.zcu.fav.kiv.editor.beans.properties.Attribute; +import cz.zcu.fav.kiv.editor.graphics.utils.SpringUtilities; + +/** + * The AttributeComponent class is the panel containing the Attributes + * belonging to one AttributeGroup. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class AttributeComponent extends JPanel { + + private static final long serialVersionUID = -1735079147977227649L; + + /** The number of one component items in the panel */ + private static final int ITEMS = 3; + + /** The size of component margin */ + private static final int MARGIN = 3; + + /** + * Initializes a newly created AttributeComponent with the list of attributes. + * + * @param attributeList + * the list of attributes. + */ + public AttributeComponent(List attributeList) { + this.setLayout(new BorderLayout()); + + // parameters panel + JPanel paramPane = new JPanel(); + paramPane.setLayout(new SpringLayout()); + + for (Attribute attr : attributeList) { + // checkbox + paramPane.add(new AttributeCheckBox(attr)); + + // attribute name + paramPane.add(new JLabel(attr.getName())); + + // attribute types + paramPane.add(new AttributeTypeForm(attr)); + } + + SpringUtilities.makeCompactGrid(paramPane, attributeList.size(), ITEMS, MARGIN, MARGIN, + MARGIN, MARGIN); + + this.add(paramPane, BorderLayout.LINE_START); + } + +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/attributes/AttributeDialog.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/attributes/AttributeDialog.java new file mode 100644 index 000000000..5c42db099 --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/attributes/AttributeDialog.java @@ -0,0 +1,118 @@ +package cz.zcu.fav.kiv.editor.graphics.components.attributes; + +import java.awt.BorderLayout; +import java.awt.Container; +import java.awt.Dimension; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +import javax.swing.BorderFactory; +import javax.swing.Box; +import javax.swing.BoxLayout; + +import javax.swing.ImageIcon; +import javax.swing.JButton; +import javax.swing.JDialog; +import javax.swing.JPanel; +import javax.swing.JTabbedPane; + +import cz.zcu.fav.kiv.editor.beans.properties.AttributeGroup; +import cz.zcu.fav.kiv.editor.beans.properties.Property; +import cz.zcu.fav.kiv.editor.controller.resource.ResourceController; +import cz.zcu.fav.kiv.editor.graphics.MainFrame; +import cz.zcu.fav.kiv.editor.graphics.images.EditorIcon; + +/** + * The AttributeDialog class is the dialog with Attributes of one + * Property. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class AttributeDialog extends JDialog implements ActionListener { + + private static final long serialVersionUID = -6526357047305363516L; + + /** The dialog representing the Property */ + private static AttributeDialog dialog; + + /** The property which Attributes the dialog displays */ + private static Property property; + + /** The save command */ + private static final String SAVE_COMMAND = "save"; + + /** The size of margin */ + private static final int MARGIN = 10; + + /** + * Displays the dialog with property attributes. + * + * @param prop + * the property with attributes. + */ + public static void showDialog(Property prop) { + property = prop; + dialog = new AttributeDialog(); + dialog.setVisible(true); + } + + /** + * Initializes a newly created AttributeDialog. + */ + private AttributeDialog() { + super(MainFrame.getInstance(), ResourceController.getMessage("frame.attribute.title") + + property.getName(), true); + + Container pan = new JPanel(new BorderLayout()); + + ImageIcon icon = EditorIcon.createTabIcon(); + + JTabbedPane tabPanel = new JTabbedPane(JTabbedPane.TOP); + for (AttributeGroup panel : property.getAttributeGroupList()) { + tabPanel.addTab(panel.getTitle(), icon, + new AttributeComponent(panel.getAttributeList())); + } + pan.add(tabPanel, BorderLayout.CENTER); + + // Create and initialize the buttons. + JButton cancelButton = new JButton(ResourceController.getMessage("button.cancel")); + cancelButton.addActionListener(this); + + JButton setButton = new JButton(ResourceController.getMessage("button.save")); + setButton.setActionCommand(SAVE_COMMAND); + setButton.addActionListener(this); + getRootPane().setDefaultButton(setButton); + + // Lay out the buttons from left to right. + JPanel buttonPane = new JPanel(); + buttonPane.setLayout(new BoxLayout(buttonPane, BoxLayout.LINE_AXIS)); + buttonPane.setBorder(BorderFactory.createEmptyBorder(MARGIN, MARGIN, MARGIN, MARGIN)); + buttonPane.add(Box.createHorizontalGlue()); + buttonPane.add(setButton); + buttonPane.add(Box.createRigidArea(new Dimension(MARGIN, MARGIN))); + buttonPane.add(cancelButton); + + pan.add(buttonPane, BorderLayout.PAGE_END); + + this.getContentPane().add(pan, BorderLayout.CENTER); + + this.pack(); + this.setLocationRelativeTo(MainFrame.getInstance()); + } + + /** + * Action performed when a button of the dialog is pressed. If the Save button is + * pressed, then the changed attribute values are saved. + */ + public void actionPerformed(ActionEvent event) { + if (SAVE_COMMAND.equals(event.getActionCommand())) { + property.setValuesFromTemporary(); + property.setChosen(); + MainFrame.getInstance().setFileChanged(); + } + AttributeDialog.dialog.setVisible(false); + AttributeDialog.dialog.dispose(); + } + +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/attributes/AttributeTypeForm.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/attributes/AttributeTypeForm.java new file mode 100644 index 000000000..7358c5e4b --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/attributes/AttributeTypeForm.java @@ -0,0 +1,93 @@ +package cz.zcu.fav.kiv.editor.graphics.components.attributes; + +import java.awt.Dimension; +import java.awt.FlowLayout; + +import javax.swing.JPanel; +import javax.swing.JScrollPane; + +import cz.zcu.fav.kiv.editor.beans.properties.Attribute; +import cz.zcu.fav.kiv.editor.beans.properties.UnitAttr; +import cz.zcu.fav.kiv.editor.graphics.components.CheckBox; +import cz.zcu.fav.kiv.editor.graphics.components.ColorChooser; +import cz.zcu.fav.kiv.editor.graphics.components.ComboBox; +import cz.zcu.fav.kiv.editor.graphics.components.ComboBoxEdit; +import cz.zcu.fav.kiv.editor.graphics.components.ComboBoxUnit; +import cz.zcu.fav.kiv.editor.graphics.components.FileChooser; +import cz.zcu.fav.kiv.editor.graphics.components.SpinnerFloat; +import cz.zcu.fav.kiv.editor.graphics.components.SpinnerInt; +import cz.zcu.fav.kiv.editor.graphics.components.TextArea; +import cz.zcu.fav.kiv.editor.graphics.components.TextField; + +/** + * The AttributeTypeForm class is the panel containing the components used for + * editing Attribute value. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class AttributeTypeForm extends JPanel { + + private static final long serialVersionUID = -2218273286123231184L; + + private static final int WIDTH = 200; + + /** + * Initializes a newly created AttributeTypeForm with the attribute. + * + * @param attribute + * the attribute. + */ + public AttributeTypeForm(Attribute attribute) { + this.setLayout(new FlowLayout(FlowLayout.LEFT)); + + attribute.getType().setAttr(attribute); + switch (attribute.getType().getName()) { + case BOOLEAN: + this.add(new CheckBox(attribute.getType())); + break; + case STRING: + case URI: + this.add(new TextField(attribute.getType())); + break; + case LIST: + this.add(new ComboBox(attribute.getType())); + break; + case LIST_OPEN: + case FONT: + this.add(new ComboBoxEdit(attribute.getType())); + break; + case FILENAME: + this.add(new FileChooser(attribute.getType())); + break; + case COLOR: + this.add(new ColorChooser(attribute.getType())); + break; + case LENGTH: + this.add(SpinnerFloat.createSpinnerFloat(attribute.getType())); + ((UnitAttr) attribute.getType().getUnit()).setAttribute(attribute); + this.add(new ComboBoxUnit(attribute.getType().getUnit())); + break; + case NUMBER: + case INTEGER: + this.add(SpinnerInt.createSpinnerInt(attribute.getType())); + break; + case RTF: + case TABLE: + TextArea area = new TextArea(attribute.getType()); + this.add(area); + JScrollPane scrollPane = new JScrollPane(area, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, + JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); + this.add(scrollPane); + break; + case FLOAT: + this.add(SpinnerFloat.createSpinnerFloat(attribute.getType())); + break; + } + + this.setMaximumSize(new Dimension(this.getPreferredSize().width + WIDTH, + this.getPreferredSize().height)); + this.setPreferredSize(new Dimension(this.getPreferredSize().width + WIDTH, + this.getPreferredSize().height)); + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/editor/EditorBody.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/editor/EditorBody.java new file mode 100644 index 000000000..5d2e09059 --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/editor/EditorBody.java @@ -0,0 +1,97 @@ +package cz.zcu.fav.kiv.editor.graphics.components.editor; + +import java.awt.BorderLayout; +import java.awt.Dimension; +import java.util.List; + +import javax.swing.BorderFactory; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JSplitPane; +import javax.swing.plaf.basic.BasicSplitPaneUI; + +import cz.zcu.fav.kiv.editor.beans.sections.Section; +import cz.zcu.fav.kiv.editor.graphics.console.MessageConsole; + +/** + * The EditorBody class represents the body of the editor. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class EditorBody extends JPanel { + + private static final long serialVersionUID = 6221409996382853643L; + + /** The size of vertical panel margin */ + private static final int MARGIN_VERTICAL = 3; + + /** The size of horizontal panel margin */ + private static final int MARGIN_HORIZONTAL = 5; + + /** The height of the top part of the panel */ + private static final int PANEL_TOP_HEIGHT = 500; + + /** The width of the tree menu of the panel */ + private static final int PANEL_TREE_WIDTH = 200; + + /** The height of the panel */ + private static final int PANEL_HEIGHT = 600; + + /** The width of the panel */ + public static final int PANEL_WIDTH = 820; + + /** The split pane of the editor */ + private JSplitPane splitPaneTop; + + /** + * Initializes a newly created EditorBody with the list of Sections + * with parameters. + * + * @param sectionList + * the list of sections with parameters. + */ + public EditorBody(List
sectionList) { + this.setLayout(new BorderLayout(MARGIN_VERTICAL, MARGIN_HORIZONTAL)); + + // split tree menu x right panel + splitPaneTop = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT); + splitPaneTop.setDividerLocation(PANEL_TREE_WIDTH); + splitPaneTop.setBorder(null); + ((BasicSplitPaneUI) splitPaneTop.getUI()).getDivider().setBorder( + BorderFactory.createEmptyBorder()); + + // tree menu + TreeMenu treeMenu = TreeMenu.getInstance(this, sectionList); + JScrollPane treeView = new JScrollPane(treeMenu); + treeView.setPreferredSize(new Dimension(PANEL_TREE_WIDTH, PANEL_TOP_HEIGHT)); + treeView.setBorder(null); + splitPaneTop.setLeftComponent(treeView); + + // right panel + splitPaneTop.setRightComponent(treeMenu.getFirstSheet()); + + // split console x top panel + JSplitPane splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT); + splitPane.setBorder(null); + ((BasicSplitPaneUI) splitPane.getUI()).getDivider().setBorder( + BorderFactory.createEmptyBorder()); + splitPane.setTopComponent(splitPaneTop); + splitPane.setBottomComponent(MessageConsole.getInstance()); + splitPane.setDividerLocation(PANEL_TOP_HEIGHT); + + add(splitPane, BorderLayout.CENTER); + + this.setPreferredSize(new Dimension(PANEL_WIDTH, PANEL_HEIGHT)); + } + + /** + * Changes the right panel of the editor body to the actually selected panel. + * + * @param panel + * the new selected panel. + */ + public void setEditorSheet(JPanel panel) { + splitPaneTop.setRightComponent(panel); + } +} \ No newline at end of file diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/editor/GroupItemsPanel.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/editor/GroupItemsPanel.java new file mode 100644 index 000000000..bbfea8ad9 --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/editor/GroupItemsPanel.java @@ -0,0 +1,76 @@ +package cz.zcu.fav.kiv.editor.graphics.components.editor; + +import java.util.List; + +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.SpringLayout; + +import cz.zcu.fav.kiv.editor.beans.common.ParentParameter; +import cz.zcu.fav.kiv.editor.beans.parameters.Parameter; +import cz.zcu.fav.kiv.editor.beans.properties.Property; +import cz.zcu.fav.kiv.editor.graphics.components.attributes.AttributeButton; +import cz.zcu.fav.kiv.editor.graphics.components.parameters.HelpLabel; +import cz.zcu.fav.kiv.editor.graphics.components.parameters.ParameterCheckBox; +import cz.zcu.fav.kiv.editor.graphics.components.parameters.ParameterTypeForm; +import cz.zcu.fav.kiv.editor.graphics.components.parameters.UrlLabel; +import cz.zcu.fav.kiv.editor.graphics.utils.SpringUtilities; + +/** + * The GroupItemsPanel class is the panel containing the ParentParameters + * belonging to one Group. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class GroupItemsPanel extends JPanel { + + private static final long serialVersionUID = 6783434567893822418L; + + /** The number of one component items in the panel */ + private static final int ITEMS = 5; + + /** The size of component margin */ + private static final int MARGIN = 4; + + /** + * Initializes a newly created GroupItemsPanel with the list of parameters. + * + * @param elementList + * the list of parameters. + */ + public GroupItemsPanel(List elementList) { + int componentCount = 0; + + // parameters panel + this.setLayout(new SpringLayout()); + + for (ParentParameter element : elementList) { + // checkbox + this.add(new ParameterCheckBox(element)); + + // interrogation mark + this.add(new HelpLabel(element)); + + // url link + this.add(new UrlLabel(element.getName())); + + // parameter name + this.add( new JLabel(element.getName())); + + // parameter type + if (element instanceof Parameter) + this.add(new ParameterTypeForm(((Parameter) element).getType())); + + // property button + if (element instanceof Property) + this.add(new AttributeButton((Property) element)); + + componentCount++; + } + + SpringUtilities.makeCompactGrid(this, componentCount, ITEMS, MARGIN, MARGIN, MARGIN, + MARGIN); + } + +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/editor/GroupPanel.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/editor/GroupPanel.java new file mode 100644 index 000000000..d100879b7 --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/editor/GroupPanel.java @@ -0,0 +1,72 @@ +package cz.zcu.fav.kiv.editor.graphics.components.editor; + +import javax.swing.BorderFactory; +import javax.swing.JPanel; +import javax.swing.SpringLayout; + +import cz.zcu.fav.kiv.editor.beans.sections.Group; +import cz.zcu.fav.kiv.editor.controller.logger.Log; +import cz.zcu.fav.kiv.editor.displays.GraphicsFigure; +import cz.zcu.fav.kiv.editor.graphics.utils.SpringUtilities; + +/** + * The GroupPanel class is the panel containing the Group of parameters. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class GroupPanel extends JPanel { + + private static final long serialVersionUID = 6783432227893822418L; + + /** The size of vertical title margin */ + private static final int VERTICAL_MARGIN_TITLE = 0; + + /** The size of horizontal title margin */ + private static final int HORIZONTAL_MARGIN_TITLE = 10; + + /** The size of vertical margin of empty title */ + private static final int VERTICAL_MARGIN_EMPTY_TITLE = 5; + + /** The size of margin of components in the group panel */ + private static final int COMPONENT_MARGIN = 3; + + /** The number of rows in the group panel */ + private static final int ROW = 1; + + /** + * Initializes a newly created SubsectionSheet with the group. + * + * @param group + * the group with parameters. + */ + public GroupPanel(Group group) { + if (group.getTitle() != null) + this.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createEmptyBorder( + VERTICAL_MARGIN_TITLE, HORIZONTAL_MARGIN_TITLE, VERTICAL_MARGIN_TITLE, + HORIZONTAL_MARGIN_TITLE), BorderFactory.createTitledBorder(group.getTitle()))); + else + this.setBorder(BorderFactory.createEmptyBorder(VERTICAL_MARGIN_EMPTY_TITLE, + HORIZONTAL_MARGIN_TITLE, VERTICAL_MARGIN_EMPTY_TITLE, HORIZONTAL_MARGIN_TITLE)); + + int componentCount = 1; + + this.setLayout(new SpringLayout()); + + this.add(new GroupItemsPanel(group.getElementList())); + + if (group.getFigure() != null) + try { + GraphicsFigure graphicsFigure = (GraphicsFigure) Class.forName( + group.getFigure().getClassName()).newInstance(); + graphicsFigure.setInputs(group.getFigure().getParameterList()); + this.add(graphicsFigure); + componentCount++; + } catch (Exception ex) { + Log.error(ex); + } + + SpringUtilities.makeCompactGrid(this, ROW, componentCount, COMPONENT_MARGIN, + COMPONENT_MARGIN, COMPONENT_MARGIN, COMPONENT_MARGIN); + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/editor/SubsectionSheet.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/editor/SubsectionSheet.java new file mode 100644 index 000000000..ae5b01c84 --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/editor/SubsectionSheet.java @@ -0,0 +1,88 @@ +package cz.zcu.fav.kiv.editor.graphics.components.editor; + +import java.awt.BorderLayout; +import java.awt.Dimension; +import java.awt.Font; + +import javax.swing.Box; +import javax.swing.BoxLayout; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JSeparator; + +import cz.zcu.fav.kiv.editor.beans.sections.Group; +import cz.zcu.fav.kiv.editor.beans.sections.Subsection; +import cz.zcu.fav.kiv.editor.graphics.utils.GridLayoutUtilities; + +/** + * The SubsectionSheet class is the panel containing groups of parameters, that + * belongs to the Subsection. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class SubsectionSheet extends JPanel { + + private static final long serialVersionUID = -1940480099930144654L; + + /** The name of the sheet section */ + private String name; + + /** The number of sheet columns */ + private static int COLUMN = 1; + + /** The size of the sheet horizontal margin */ + private static final int MARGIN_HORIZONTAL = 0; + + /** The size of the sheet vertical margin */ + private static final int MARGIN_VERTICAL = 5; + + /** The size of the font used for sheet title */ + private static final int TITLE_FONT = 13; + + /** + * Initializes a newly created SubsectionSheet with the subsection. + * + * @param subsection + * the subsection with groups of parameters. + */ + public SubsectionSheet(Subsection subsection) { + this.name = subsection.getTitle(); + this.setLayout(new BorderLayout()); + + // top with title + JPanel topPanel = new JPanel(); + topPanel.setLayout(new BoxLayout(topPanel, BoxLayout.Y_AXIS)); + topPanel.add(Box.createRigidArea(new Dimension(MARGIN_HORIZONTAL, MARGIN_VERTICAL))); + + JLabel titleLabel = new JLabel(name, JLabel.LEFT); + titleLabel.setFont(new Font("Sans-Serif", Font.BOLD, TITLE_FONT)); + topPanel.add(titleLabel); + + topPanel.add(Box.createRigidArea(new Dimension(MARGIN_HORIZONTAL, MARGIN_VERTICAL))); + topPanel.add(new JSeparator(JSeparator.HORIZONTAL)); + topPanel.add(Box.createRigidArea(new Dimension(MARGIN_HORIZONTAL, 2 * MARGIN_VERTICAL))); + this.add(topPanel, BorderLayout.PAGE_START); + + // panel with parameters + JPanel groupPanel = new JPanel(); + groupPanel.setLayout(new GridLayoutUtilities(subsection.getGroupList().size(), COLUMN)); + + for (Group group : subsection.getGroupList()) { + groupPanel.add(new GroupPanel(group)); + } + JScrollPane sheetPanel = new JScrollPane(groupPanel, + JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); + sheetPanel.setBorder(null); + this.add(sheetPanel, BorderLayout.CENTER); + } + + /** + * Returns the name of the sheet section. + */ + public String toString() { + return name; + } + +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/editor/TreeMenu.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/editor/TreeMenu.java new file mode 100644 index 000000000..4ce71839e --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/editor/TreeMenu.java @@ -0,0 +1,114 @@ +package cz.zcu.fav.kiv.editor.graphics.components.editor; + +import java.awt.Color; +import java.util.List; + +import javax.swing.ImageIcon; +import javax.swing.JPanel; +import javax.swing.JTree; +import javax.swing.tree.DefaultMutableTreeNode; +import javax.swing.tree.DefaultTreeCellRenderer; +import javax.swing.tree.TreePath; +import javax.swing.tree.TreeSelectionModel; + +import cz.zcu.fav.kiv.editor.beans.sections.Section; +import cz.zcu.fav.kiv.editor.beans.sections.Subsection; +import cz.zcu.fav.kiv.editor.graphics.images.EditorIcon; + +/** + * The TreeMenu class is the panel containing the tree menu of the editor. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class TreeMenu extends JPanel { + + private static final long serialVersionUID = 8347821460376344167L; + + /** The single instance of the panel with the tree menu */ + private static TreeMenu instance; + + /** The tree menu */ + private JTree tree; + + /** The list of tree nodes */ + private DefaultMutableTreeNode nodeList; + + /** + * Singleton constructor - gets the single instance of the TreeMenu class. + * + * @param editorBody + * the body of the editor. + * @param sectionList + * the list of sections. + * @return the single instance of the TreeMenu. + */ + public static TreeMenu getInstance(EditorBody editorBody, List
sectionList) { + if (instance == null) { + instance = new TreeMenu(editorBody, sectionList); + } + return instance; + } + + /** + * Initializes a newly created TreeMenu with the list of Sections with + * parameters and the editor body which part the TreeMenu creates. + * + * @param editorBody + * the body of the editor. + * @param sectionList + * the list of sections. + */ + public TreeMenu(EditorBody editorBody, List
sectionList) { + nodeList = createNodes(sectionList); + tree = new JTree(nodeList); + tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION); + + // Listen for when the selection changes. + tree.addTreeSelectionListener(new TreeSelectAction(editorBody)); + + // leaf icon + DefaultTreeCellRenderer renderer = (DefaultTreeCellRenderer) tree.getCellRenderer(); + ImageIcon leafIcon = EditorIcon.createTabIcon(); + renderer.setLeafIcon(leafIcon); + + // select leaf + TreePath treePath = new TreePath(nodeList.getFirstLeaf().getPath()); + tree.setSelectionPath(treePath); + + tree.setRootVisible(false); + this.add(tree); + this.setBackground(Color.white); + } + + /** + * Creates the structure of tree nodes containing parameter sections. + * + * @param sectionList + * the list of sections. + * @return the root node of the tree menu. + */ + private DefaultMutableTreeNode createNodes(List
sectionList) { + DefaultMutableTreeNode top = new DefaultMutableTreeNode(); + DefaultMutableTreeNode sectionNode = null; + + for (Section section : sectionList) { + sectionNode = new DefaultMutableTreeNode(section.getTitle()); + top.add(sectionNode); + // subsections + for (Subsection subsection : section.getSubsectionList()) { + sectionNode.add(new DefaultMutableTreeNode(new SubsectionSheet(subsection))); + } + } + return top; + } + + /** + * Gets the section sheet belonging to the first tree node. + * + * @return the section sheet belonging to the first tree node. + */ + public SubsectionSheet getFirstSheet() { + return (SubsectionSheet) nodeList.getFirstLeaf().getUserObject(); + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/editor/TreeSelectAction.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/editor/TreeSelectAction.java new file mode 100644 index 000000000..ca8add94f --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/editor/TreeSelectAction.java @@ -0,0 +1,42 @@ +package cz.zcu.fav.kiv.editor.graphics.components.editor; + +import javax.swing.JTree; +import javax.swing.event.TreeSelectionEvent; +import javax.swing.event.TreeSelectionListener; +import javax.swing.tree.DefaultMutableTreeNode; + +/** + * The TreeSelectAction class represents the action performed when a leaf of tree + * menu is selected. Displays the SubsectionSheet belonging to the selected leaf. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class TreeSelectAction implements TreeSelectionListener { + + /** The panel representing the editor body */ + private EditorBody editorBody; + + /** + * Initializes a newly created TreeSelectAction. + * + * @param editorBody + * the panel representing the editor body. + */ + public TreeSelectAction(EditorBody editorBody) { + this.editorBody = editorBody; + } + + /** + * Action performed when a tree node is selected. Displays the subsection sheet belonging to the + * selected node. + */ + public void valueChanged(TreeSelectionEvent selectEvent) { + DefaultMutableTreeNode node = (DefaultMutableTreeNode) ((JTree) selectEvent.getSource()) + .getLastSelectedPathComponent(); + if (node.isLeaf()) { + this.editorBody.setEditorSheet((SubsectionSheet) node.getUserObject()); + } + } + +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/parameters/BrowserListener.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/parameters/BrowserListener.java new file mode 100644 index 000000000..ac2433d21 --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/parameters/BrowserListener.java @@ -0,0 +1,128 @@ +package cz.zcu.fav.kiv.editor.graphics.components.parameters; + +import java.awt.datatransfer.Clipboard; +import java.awt.datatransfer.ClipboardOwner; +import java.awt.datatransfer.StringSelection; +import java.awt.datatransfer.Transferable; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import javax.swing.JMenuItem; +import javax.swing.JPopupMenu; + +import cz.zcu.fav.kiv.editor.controller.resource.ResourceController; +import cz.zcu.fav.kiv.editor.graphics.MainFrame; +import cz.zcu.fav.kiv.editor.graphics.utils.OpenBrowser; + +/** + * The BrowserListener class represents the action performed when the mouse is + * pressed above the UrlLabel. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class BrowserListener extends MouseAdapter implements ClipboardOwner { + + /** The popup menu displaying when the right mouse button is pressed */ + private JPopupMenu popup; + + /** + * The name of the parameter - is the same as the URL path of the web page with parameter + * description + */ + private String name; + + /** + * Creates the popup menu displaying when the right mouse button is pressed above + * UrlLabel. + * + * @return the popup menu of the UrlLabel. + */ + private JPopupMenu createPopupMenu() { + JPopupMenu popup = new JPopupMenu(); + // item opening the web browser + JMenuItem menuItem = new JMenuItem(ResourceController + .getMessage("editor.browser.menu.open_browser")); + menuItem.addActionListener(new OpenBrowserListener()); + popup.add(menuItem); + // item copying the URL path to the clippboard + menuItem = new JMenuItem(ResourceController.getMessage("editor.browser.menu.copy_location")); + menuItem.addActionListener(new CopyToClipboardListener()); + popup.add(menuItem); + return popup; + } + + /** + * Initializes a newly created BrowserListener with the parameter name. + * + * @param name + * the name of the parameter. + */ + public BrowserListener(String name) { + this.name = name; + popup = createPopupMenu(); + } + + /** + * Action performed when the mouse button is pressed. Shows the popup menu if the right mouse + * button has been pressed. + */ + public void mouseReleased(MouseEvent event) { + maybeShowPopup(event); + } + + /** + * Shows the popup menu if the right mouse button has been pressed. + * + * @param event + * the mouse event. + */ + private void maybeShowPopup(MouseEvent event) { + if (event.isPopupTrigger()) + popup.show(event.getComponent(), event.getX(), event.getY()); + else + OpenBrowser.openURL(ResourceController.getMessage("url.parameter_description", name)); + } + + /** + * The inner class BrowserListener represents the action performed when the left + * mouse button above the UrlLabel is pressed. It opens the web browser with the + * web page containg the parameter description. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ + class OpenBrowserListener implements ActionListener { + /** + * The action performed when the left mouse button above the UrlLabel is + * pressed. It opens the web browser with the web page containg the parameter description. + */ + public void actionPerformed(ActionEvent event) { + OpenBrowser.openURL(ResourceController.getMessage("url.parameter_description", name)); + } + } + + /** + * The inner class CopyToClipboardListener represents the action performed when + * the popup menu item Copy to clipboard is chosen. It copies the URL of the page + * with the parameter description to the clipboard. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ + class CopyToClipboardListener implements ActionListener { + + /** + * The action performed when the popup menu item Copy to clipboard is chosen. It + * copies the URL of the page with the parameter description to the clipboard. + */ + public void actionPerformed(ActionEvent event) { + Clipboard clipboard = MainFrame.getInstance().getToolkit().getSystemClipboard(); + clipboard.setContents(new StringSelection(name), BrowserListener.this); + } + } + + public void lostOwnership(Clipboard arg0, Transferable arg1) { + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/parameters/DescriptionForm.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/parameters/DescriptionForm.java new file mode 100644 index 000000000..9d8911203 --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/parameters/DescriptionForm.java @@ -0,0 +1,111 @@ +package cz.zcu.fav.kiv.editor.graphics.components.parameters; + +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Dimension; +import java.awt.event.FocusEvent; +import java.awt.event.FocusListener; +import javax.swing.JDialog; +import javax.swing.JEditorPane; +import javax.swing.JLabel; +import javax.swing.JScrollPane; + +import cz.zcu.fav.kiv.editor.graphics.MainFrame; + +/** + * The DescriptionForm class is the dialog displaying parameter description. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class DescriptionForm extends JDialog implements FocusListener { + + private static final long serialVersionUID = -4632340976081227454L; + + /** The width of the dialog */ + private static final int WIDTH = 300; + + /** The height width of the dialog */ + private static final int HEIGHT = 150; + + /** The color of the background dialog */ + private static final Color BACKGROUND_COLOR = new Color(255, 255, 225); + + /** The single instance of the dialog */ + private static DescriptionForm instance; + + /** The inner width of the dialog */ + private JEditorPane contentArea; + + /** + * Creates and shows the dialog with parameter description. + * + * @param content + * the description of parameter. + * @param label + * the label with parameter name. + */ + public static void showDialog(String content, JLabel label) { + instance = getInstance(); + instance.setContentArea(content); + instance.setLocationRelativeTo(label); + instance.setVisible(true); + } + + /** + * Gets the single instance of the dialog with parameter description. + * + * @return the single instance of the dialog with parameter description. + */ + private static DescriptionForm getInstance() { + if (instance == null) + instance = new DescriptionForm(); + return instance; + } + + /** + * Initializes a newly created DescriptionForm. + */ + private DescriptionForm() { + super(MainFrame.getInstance()); + + this.setLayout(new BorderLayout()); + + contentArea = new JEditorPane(); + contentArea.setEditable(false); + contentArea.setContentType("text/html"); + + contentArea.setBackground(BACKGROUND_COLOR); + + JScrollPane scrollBar = new JScrollPane(contentArea); + scrollBar.setPreferredSize(new Dimension(WIDTH, HEIGHT)); + this.add(scrollBar, BorderLayout.PAGE_START); + + contentArea.addFocusListener(this); + this.setUndecorated(true); + pack(); + } + + /** + * Action performed when the dialog gains focus - does nothing. + */ + public void focusGained(FocusEvent event) { + } + + /** + * Action performed when the dialog losts focus - hides the dialog. + */ + public void focusLost(FocusEvent event) { + this.setVisible(false); + } + + /** + * Sets a new parameter description to the content of the dialog. + * + * @param content + * the description of a parameter. + */ + public void setContentArea(String content) { + this.contentArea.setText(content); + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/parameters/HelpLabel.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/parameters/HelpLabel.java new file mode 100644 index 000000000..b3032e20e --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/parameters/HelpLabel.java @@ -0,0 +1,101 @@ +package cz.zcu.fav.kiv.editor.graphics.components.parameters; + +import java.awt.Cursor; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import javax.swing.JLabel; + +import cz.zcu.fav.kiv.editor.beans.common.ParentParameter; +import cz.zcu.fav.kiv.editor.graphics.images.EditorIcon; + +/** + * The HelpLabel class is the icon button displaying the tooltip with parameter purpose and + * the dialog with parameter description. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class HelpLabel extends JLabel { + + private static final long serialVersionUID = -2256167369619643267L; + + /** The parameter description */ + private String description = null; + + /** + * Initializes a newly created HelpLabel with the parameter. + * + * @param element + * the parameter. + */ + public HelpLabel(ParentParameter element) { + if (element.getDescription() != null) + description = insertStylesheet(element.getDescription(), element.getName()); + + this.setToolTipText(element.getPurpose()); + this.setIcon(EditorIcon.createHelpIcon()); + this.addMouseListener(new ShowHelpListener()); + this.setCursor(new Cursor(Cursor.HAND_CURSOR)); + } + + /** + * Inserts the parameter title to the HTML description of the parameter. + * + * @param text + * the description of the parameter. + * @param title + * the title of the parameter. + * @return the description of the parameter with the title. + */ + private String insertTitle(String text, String title) { + Pattern pattern = Pattern.compile(""); + Matcher matcher = pattern.matcher(text); + if (matcher.find()) { + return text.substring(0, matcher.end()) + "

" + title + "

" + + text.substring(matcher.end()); + } + return text; + } + + /** + * Inserts the CSS stylesheet to the HTML description of the parameter. + * + * @param text + * the description of the parameter. + * @param title + * the title of the parameter. + * @return the description of the parameter with the CSS stylesheet. + */ + private String insertStylesheet(String text, String title) { + text = text.replaceAll(".*", ""); + Pattern pattern = Pattern.compile(""); + Matcher matcher = pattern.matcher(text); + if (matcher.find()) { + text = matcher.group() + + "" + + text.substring(matcher.end()); + } + return insertTitle(text, title); + } + + /** + * The inner class ShowHelpListener represents action performed when the mouse is + * pressed above the help icon. Then the dialog with parameter description is displayed. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ + class ShowHelpListener extends MouseAdapter { + /** + * Action performed when the mouse is pressed above the help icon, it displays the dialog + * with parameter description. + */ + public void mousePressed(MouseEvent event) { + if (description != null) + DescriptionForm.showDialog(description, (JLabel) event.getSource()); + } + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/parameters/ParameterCheckBox.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/parameters/ParameterCheckBox.java new file mode 100644 index 000000000..c434eff48 --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/parameters/ParameterCheckBox.java @@ -0,0 +1,68 @@ +package cz.zcu.fav.kiv.editor.graphics.components.parameters; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.Observable; +import java.util.Observer; + +import javax.swing.JCheckBox; + +import cz.zcu.fav.kiv.editor.beans.common.ParentParameter; +import cz.zcu.fav.kiv.editor.graphics.MainFrame; + +/** + * The ParameterCheckBox class is the component check-box, that displays + * whether the corresponding Parameter is selected or not. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class ParameterCheckBox extends JCheckBox implements Observer, ActionListener { + + private static final long serialVersionUID = -6845824213536903733L; + + /** The parameter which estate the component displays */ + private ParentParameter parameter; + + /** + * Initializes a newly created ParameterCheckBox with the Parameter. + * + * @param parameter + * the parameter. + */ + public ParameterCheckBox(ParentParameter parameter) { + super(); + + this.parameter = parameter; + setSelected(parameter.isChosen()); + + parameter.addObserver(this); + this.addActionListener(this); + } + + /** + * Selects or deselects the check-box according to the input value. + * + * @param observable + * the observable object. + * @param value + * the new check-box value. + */ + public void update(Observable observable, Object value) { + if (value != null) + this.setSelected((Boolean) value); + } + + /** + * Action performed when the check-box is selected or deselected. Assignes a new estate to the + * Parameter. + * + * @param event + * the action event. + */ + public void actionPerformed(ActionEvent event) { + parameter.setChosen(this.isSelected()); + MainFrame.getInstance().setFileChanged(); + } + +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/parameters/ParameterTypeForm.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/parameters/ParameterTypeForm.java new file mode 100644 index 000000000..28f1a5778 --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/parameters/ParameterTypeForm.java @@ -0,0 +1,87 @@ +package cz.zcu.fav.kiv.editor.graphics.components.parameters; + +import java.awt.Dimension; +import java.awt.FlowLayout; + +import javax.swing.JPanel; +import javax.swing.JScrollPane; + +import cz.zcu.fav.kiv.editor.beans.parameters.TypeParam; +import cz.zcu.fav.kiv.editor.graphics.components.CheckBox; +import cz.zcu.fav.kiv.editor.graphics.components.ColorChooser; +import cz.zcu.fav.kiv.editor.graphics.components.ComboBox; +import cz.zcu.fav.kiv.editor.graphics.components.ComboBoxEdit; +import cz.zcu.fav.kiv.editor.graphics.components.ComboBoxUnit; +import cz.zcu.fav.kiv.editor.graphics.components.FileChooser; +import cz.zcu.fav.kiv.editor.graphics.components.SpinnerFloat; +import cz.zcu.fav.kiv.editor.graphics.components.SpinnerInt; +import cz.zcu.fav.kiv.editor.graphics.components.TextArea; +import cz.zcu.fav.kiv.editor.graphics.components.TextField; + +/** + * The ParameterTypeForm class is the panel containing the component used for editing + * Parameter value. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class ParameterTypeForm extends JPanel { + + private static final long serialVersionUID = 6613158285413029141L; + + /** + * Initializes a newly created ParameterTypeForm with the parameter type. + * + * @param type + * the parameter type. + */ + public ParameterTypeForm(TypeParam type) { + this.setLayout(new FlowLayout(FlowLayout.LEADING)); + switch (type.getName()) { + case BOOLEAN: + this.add(new CheckBox(type)); + break; + case STRING: + case URI: + this.add(new TextField(type)); + break; + case LIST: + this.add(new ComboBox(type)); + break; + case LIST_OPEN: + case FONT: + this.add(new ComboBoxEdit(type)); + break; + case FILENAME: + this.add(new FileChooser(type)); + break; + case COLOR: + this.add(new ColorChooser(type)); + break; + case LENGTH: + this.add(SpinnerFloat.createSpinnerFloat(type)); + this.add(new ComboBoxUnit(type.getUnit())); + break; + case NUMBER: + case INTEGER: + this.add(SpinnerInt.createSpinnerInt(type)); + break; + case RTF: + case TABLE: + TextArea area = new TextArea(type); + this.add(area); + JScrollPane scrollPane = new JScrollPane(area, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, + JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); + this.add(scrollPane); + break; + case FLOAT: + this.add(SpinnerFloat.createSpinnerFloat(type)); + break; + } + + this.setMaximumSize(new Dimension(this.getPreferredSize().width, + this.getPreferredSize().height)); + this.setPreferredSize(new Dimension(this.getPreferredSize().width, + this.getPreferredSize().height)); + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/parameters/UrlLabel.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/parameters/UrlLabel.java new file mode 100644 index 000000000..12bd43d26 --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/components/parameters/UrlLabel.java @@ -0,0 +1,35 @@ +package cz.zcu.fav.kiv.editor.graphics.components.parameters; + +import java.awt.Cursor; + +import javax.swing.JLabel; + +import cz.zcu.fav.kiv.editor.controller.resource.ResourceController; +import cz.zcu.fav.kiv.editor.graphics.images.EditorIcon; + +/** + * The UrlLabel class is the icon button opening the web browser with the parameter + * description. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class UrlLabel extends JLabel { + + private static final long serialVersionUID = 2760298589328490225L; + + /** + * Initializes a newly created UrlLabel with the parameter name. + * + * @param elementName + * the name of the parameter. + */ + public UrlLabel(String elementName) { + this.setToolTipText(ResourceController.getMessage("editor.browser.description", + ResourceController.getMessage("url.parameter_description", elementName))); + this.setIcon(EditorIcon.createBrowserIcon()); + this.addMouseListener(new BrowserListener(elementName)); + this.setCursor(new Cursor(Cursor.HAND_CURSOR)); + } + +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/console/MessageConsole.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/console/MessageConsole.java new file mode 100644 index 000000000..649f5f908 --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/console/MessageConsole.java @@ -0,0 +1,227 @@ +package cz.zcu.fav.kiv.editor.graphics.console; + +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Dimension; +import java.awt.Font; +import java.awt.GridLayout; + +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JTextPane; +import javax.swing.text.BadLocationException; +import javax.swing.text.MutableAttributeSet; +import javax.swing.text.SimpleAttributeSet; +import javax.swing.text.StyleConstants; +import javax.swing.text.StyledDocument; + +import cz.zcu.fav.kiv.editor.controller.logger.Log; +import cz.zcu.fav.kiv.editor.controller.resource.ResourceController; +import cz.zcu.fav.kiv.editor.graphics.components.editor.EditorBody; + +/** + * The MessageConsoleclass represents the output console that displays messages, + * errors and warnings to user. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class MessageConsole extends JPanel { + + private static final long serialVersionUID = 5544740912147120927L; + + /** The size of the console height */ + private static final int FRAME_CONSOLE_HEIGHT = 70; + + /** The char specifying the end of line used in the console */ + private static final String NEWLINE = "\n"; + + /** The size of font used in the console */ + private static final int FONT_SIZE = 12; + + /** The single instance of the console */ + private static MessageConsole instance; + + /** The mutable attribute set of the JTextPane */ + private MutableAttributeSet mutAttr; + + /** The styled document of the JTextPane */ + private StyledDocument styledDoc; + + /** The text pane creating the content of the console */ + private JTextPane editor; + + /** + * Singleton constructor - gets the single instance of the MessageConsole class. + * + * @return the single instance of MessageConsole. + */ + public static MessageConsole getInstance() { + if (instance == null) + instance = new MessageConsole(); + return instance; + } + + /** + * Initializes a newly created MessageConsole. + */ + private MessageConsole() { + this.setLayout(new GridLayout(1, 1)); + + editor = new JTextPane(); + editor.setEditable(false); + editor.setFont(new Font("DialogInput", Font.PLAIN, FONT_SIZE)); + mutAttr = new SimpleAttributeSet(); + styledDoc = editor.getStyledDocument(); + StyleConstants.setForeground(mutAttr, Color.black); + + JScrollPane scrollBar = new JScrollPane(editor); + scrollBar.setPreferredSize(new Dimension(EditorBody.PANEL_WIDTH, FRAME_CONSOLE_HEIGHT)); + + add(scrollBar, BorderLayout.CENTER); + } + + /** + * Appends the input text to the console. + * + * @param message + * the text that will be appended to the console. + */ + private void appendText(String message) { + try { + styledDoc.insertString(styledDoc.getLength(), message, mutAttr); + editor.setCaretPosition(styledDoc.getLength()); + } catch (BadLocationException ex) { + Log.error(ex); + } + } + + /** + * Erases the content of the whole console. + */ + private void erase() { + try { + styledDoc.remove(0, styledDoc.getLength()); + } catch (BadLocationException ex) { + Log.error(ex); + } + } + + /** + * Appends to the console a new line. + * + * @param message + * the text that will be appended to the console as a new line. + */ + private void appendLine(String message) { + appendText(message + NEWLINE); + } + + /** + * Appends to the console a new word. + * + * @param message + * the text that will be appended to the console as a new word. + */ + private void appendWord(String message) { + appendText(message); + } + + /** + * Writes a normal information to the console. + * + * @param message + * the normal text message. + */ + public static void logMessage(String message) { + StyleConstants.setForeground(MessageConsole.getInstance().getMutAttr(), Color.black); + MessageConsole.getInstance().appendLine(message); + } + + /** + * Writes a emphasis information to the console. + * + * @param message + * the normal text message. + */ + public static void logMessageEmphasis(String message) { + StyleConstants.setForeground(MessageConsole.getInstance().getMutAttr(), Color.black); + StyleConstants.setBold(MessageConsole.getInstance().getMutAttr(), true); + MessageConsole.getInstance().appendLine(message); + } + + /** + * Writes a warning message to the console. + * + * @param message + * the message containing warning. + */ + public static void logWarning(String message) { + StyleConstants.setForeground(MessageConsole.getInstance().getMutAttr(), new Color(0, 64, + 128)); + StyleConstants.setBold(MessageConsole.getInstance().getMutAttr(), true); + MessageConsole.getInstance().appendWord( + ResourceController.getMessage("message_writer.warning")); + StyleConstants.setBold(MessageConsole.getInstance().getMutAttr(), false); + StyleConstants.setForeground(MessageConsole.getInstance().getMutAttr(), Color.black); + MessageConsole.getInstance().appendLine(message); + } + + /** + * Writes an error message to the console. + * + * @param message + * the message containing error. + */ + public static void logError(String message) { + StyleConstants.setForeground(MessageConsole.getInstance().getMutAttr(), new Color(208, 9, + 32)); + StyleConstants.setBold(MessageConsole.getInstance().getMutAttr(), true); + MessageConsole.getInstance().appendWord( + ResourceController.getMessage("message_writer.error")); + MessageConsole.getInstance().appendLine(message); + StyleConstants.setBold(MessageConsole.getInstance().getMutAttr(), false); + } + + /** + * Writes an information message to the console. + * + * @param message + * the message containing information. + */ + public static void logInfo(String message) { + StyleConstants.setForeground(MessageConsole.getInstance().getMutAttr(), new Color(217, 121, + 36)); + StyleConstants.setBold(MessageConsole.getInstance().getMutAttr(), true); + MessageConsole.getInstance().appendWord( + ResourceController.getMessage("message_writer.info")); + StyleConstants.setBold(MessageConsole.getInstance().getMutAttr(), false); + StyleConstants.setForeground(MessageConsole.getInstance().getMutAttr(), Color.black); + MessageConsole.getInstance().appendLine(message); + } + + /** + * Writes a title to the console. + * + * @param message + * the message containing title. + */ + public static void logTitle(String message) { + StyleConstants.setBold(MessageConsole.getInstance().getMutAttr(), true); + StyleConstants.setForeground(MessageConsole.getInstance().getMutAttr(), + new Color(128, 0, 0)); + MessageConsole.getInstance().appendLine(" * * * " + message.toUpperCase() + " * * *"); + StyleConstants.setBold(MessageConsole.getInstance().getMutAttr(), false); + } + + /** + * Erases the content of the console. + */ + public static void eraseConsole() { + MessageConsole.getInstance().erase(); + } + + public MutableAttributeSet getMutAttr() { + return mutAttr; + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/frames/AboutForm.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/frames/AboutForm.java new file mode 100644 index 000000000..63b65bd22 --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/frames/AboutForm.java @@ -0,0 +1,75 @@ +package cz.zcu.fav.kiv.editor.graphics.frames; + +import java.awt.BorderLayout; +import java.awt.Font; + +import javax.swing.BorderFactory; +import javax.swing.Box; +import javax.swing.BoxLayout; +import javax.swing.JLabel; +import javax.swing.JPanel; + +import cz.zcu.fav.kiv.editor.controller.options.OptionItems; +import cz.zcu.fav.kiv.editor.controller.resource.ResourceController; +import cz.zcu.fav.kiv.editor.graphics.images.EditorIcon; + +/** + * The AboutForm class is the dialog displaying information about application. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class AboutForm extends InfoDialog { + + private static final long serialVersionUID = -4631230976081227814L; + + /** The size of the title font */ + private static final int TITLE_FONT = 12; + + /** The single instance of the dialog */ + private static AboutForm instance; + + /** + * Initializes a newly created AboutForm with its title. + */ + public AboutForm() { + super("frame.about.title"); + } + + /** + * Creates and shows the dialog with information about application. + */ + public static void showDialog() { + instance = new AboutForm(); + instance.setVisible(true); + } + + @Override + protected JPanel createContent() { + JPanel content = new JPanel(); + JPanel panelImage = new JPanel(); + JLabel logoLabel = new JLabel(); + + logoLabel.setIcon(EditorIcon.createLargeEditorIcon()); + panelImage.add(logoLabel); + + JPanel panelText = new JPanel(); + panelText.setLayout(new BoxLayout(panelText, BoxLayout.Y_AXIS)); + panelText.setBorder(BorderFactory.createEmptyBorder(HORIZONTAL_MARGIN, VERTICAL_MARGIN, + HORIZONTAL_MARGIN, VERTICAL_MARGIN)); + + JLabel titleLabel = new JLabel(ResourceController.getMessage("editor.title")); + titleLabel.setFont(new Font("SansSerif", Font.BOLD, TITLE_FONT)); + titleLabel.setBorder(BorderFactory.createEmptyBorder(0, 0, 10, 30)); + + panelText.add(titleLabel); + panelText.add(Box.createHorizontalGlue()); + panelText.add(new JLabel(ResourceController.getMessage("frame.about.version", + OptionItems.APPLICATION_VERSION))); + panelText.add(new JLabel(ResourceController.getMessage("frame.about.author"))); + + content.add(panelImage, BorderLayout.WEST); + content.add(panelText, BorderLayout.EAST); + return content; + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/frames/ConfigInfoForm.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/frames/ConfigInfoForm.java new file mode 100644 index 000000000..36fe64427 --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/frames/ConfigInfoForm.java @@ -0,0 +1,211 @@ +package cz.zcu.fav.kiv.editor.graphics.frames; + +import java.awt.Dimension; +import java.awt.Font; +import java.io.File; + +import javax.swing.BorderFactory; +import javax.swing.ImageIcon; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JTextField; +import javax.swing.SpringLayout; + +import cz.zcu.fav.kiv.editor.config.constants.FileConst; +import cz.zcu.fav.kiv.editor.controller.options.OptionItems; +import cz.zcu.fav.kiv.editor.controller.resource.ResourceController; +import cz.zcu.fav.kiv.editor.graphics.images.EditorIcon; +import cz.zcu.fav.kiv.editor.graphics.utils.SpringUtilities; +import cz.zcu.fav.kiv.editor.template.TemplateConst; + +/** + * The ConfigInfoForm class is the dialog displaying information about configuratio + * files. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class ConfigInfoForm extends InfoDialog { + + private static final long serialVersionUID = -4631230976081227814L; + + /** The width of the line */ + private static final int LINE_WIDTH = 80; + + /** The number of rows in the dialog */ + private static final int ROW_COUNT = 4; + + /** The number of columns in the dialog */ + private static final int COLUMN_COUNT = 3; + + /** The size of the font */ + private static final int FONT_SIZE = 11; + + /** The size of the margin */ + private static final int MARGIN = 3; + + /** The size of the right margin */ + private static final int MARGIN_RIGHT = 10; + + /** The inner width of the dialog */ + private static final int DIALOG_INNER_WIDTH = 490; + + /** The outer width of the dialog */ + private static final int DIALOG_OUTER_WIDTH = 500; + + /** The single instance of the dialog */ + private static ConfigInfoForm instance; + + /** + * Initializes a newly created ConfigInfoForm with its title. + */ + public ConfigInfoForm() { + super("frame.config_info.title"); + } + + /** + * Creates and shows the dialog with information about application. + */ + public static void showDialog() { + instance = new ConfigInfoForm(); + instance.setVisible(true); + } + + @Override + protected JPanel createContent() { + JPanel content = new JPanel(); + + JPanel dirPanel = new JPanel(); + dirPanel.setBorder(BorderFactory.createTitledBorder(ResourceController + .getMessage("frame.config_info.directory"))); + String labelText = System.getProperty("user.dir") + File.separator + + OptionItems.XML_DEFINITION_PATH; + labelText = wrapLabel(labelText); + JLabel dirLabel = new JLabel("" + labelText + ""); + dirLabel.setFont(new Font("Sans-Serif", Font.BOLD, FONT_SIZE)); + dirPanel.add(dirLabel); + dirPanel.setPreferredSize(new Dimension(DIALOG_INNER_WIDTH, + dirPanel.getPreferredSize().height)); + + content.add(dirPanel); + JPanel filePanel = filePanel(); + content.add(filePanel()); + JPanel templatePanel = templatePanel(); + content.add(templatePanel); + + content.setPreferredSize(new Dimension(DIALOG_OUTER_WIDTH, + dirPanel.getPreferredSize().height + filePanel.getPreferredSize().height + + templatePanel.getPreferredSize().height + 20)); + + return content; + } + + /** + * Creates the panel contenting the information about stylesheet template. + * + * @return the panel contenting the information about stylesheet template. + */ + private JPanel templatePanel() { + JPanel templatePanel = new JPanel(); + templatePanel.setBorder(BorderFactory.createTitledBorder(ResourceController + .getMessage("frame.config_info.template.title"))); + + String labelText = System.getProperty("user.dir") + File.separator + + TemplateConst.CONF_FILE_TEMPLATE; + labelText = wrapLabel(labelText); + JLabel dirLabel = new JLabel("" + labelText + ""); + dirLabel.setFont(new Font("Sans-Serif", Font.BOLD, FONT_SIZE)); + templatePanel.add(dirLabel); + + templatePanel.setPreferredSize(new Dimension(DIALOG_INNER_WIDTH, templatePanel + .getPreferredSize().height)); + return templatePanel; + } + + /** + * Creates the panel contenting the information about configuration files. + * + * @return the panel contenting the information about configuration files. + */ + private JPanel filePanel() { + ImageIcon img = EditorIcon.createHelpIcon(); + + JPanel configPanel = new JPanel(); + configPanel.setBorder(BorderFactory.createTitledBorder(ResourceController + .getMessage("frame.config_info.files.title"))); + configPanel.setLayout(new SpringLayout()); + + // config.xml + JLabel iconLabel = new JLabel(); + iconLabel.setIcon(img); + iconLabel.setToolTipText(ResourceController + .getMessage("frame.config_info.files.config.description")); + configPanel.add(iconLabel); + configPanel.add(new JLabel(FileConst.CONF_FILE_CONFIG.substring(FileConst.CONF_FILE_CONFIG + .indexOf(File.separator) + 1))); + JTextField valueField = new JTextField(System.getProperty("user.dir") + File.separator + + FileConst.CONF_FILE_CONFIG); + valueField.setEditable(false); + configPanel.add(valueField); + + // attributes.xml + iconLabel = new JLabel(); + iconLabel.setIcon(img); + iconLabel.setToolTipText(ResourceController + .getMessage("frame.config_info.files.attributes.description")); + configPanel.add(iconLabel); + configPanel.add(new JLabel(FileConst.CONF_FILE_ATTRIBUTES + .substring(FileConst.CONF_FILE_ATTRIBUTES.indexOf(File.separator) + 1))); + valueField = new JTextField(System.getProperty("user.dir") + File.separator + + FileConst.CONF_FILE_ATTRIBUTES); + valueField.setEditable(false); + configPanel.add(valueField); + + // types.xml + iconLabel = new JLabel(); + iconLabel.setIcon(img); + iconLabel.setToolTipText(ResourceController + .getMessage("frame.config_info.files.types.description")); + configPanel.add(iconLabel); + configPanel.add(new JLabel(FileConst.CONF_FILE_TYPE.substring(FileConst.CONF_FILE_TYPE + .indexOf(File.separator) + 1))); + valueField = new JTextField(System.getProperty("user.dir") + File.separator + + FileConst.CONF_FILE_TYPE); + valueField.setEditable(false); + configPanel.add(valueField); + + // graphics + iconLabel = new JLabel(); + iconLabel.setIcon(img); + iconLabel.setToolTipText(ResourceController + .getMessage("frame.config_info.files.graphics.description")); + configPanel.add(iconLabel); + configPanel.add(new JLabel(FileConst.CONF_FILE_FIGURES + .substring(FileConst.CONF_FILE_FIGURES.indexOf(File.separator) + 1))); + valueField = new JTextField(System.getProperty("user.dir") + File.separator + + FileConst.CONF_FILE_FIGURES); + valueField.setEditable(false); + configPanel.add(valueField); + + SpringUtilities.makeCompactGrid(configPanel, ROW_COUNT, COLUMN_COUNT, MARGIN, MARGIN, + MARGIN_RIGHT, MARGIN); + configPanel.setPreferredSize(new Dimension(DIALOG_INNER_WIDTH, configPanel + .getPreferredSize().height)); + return configPanel; + } + + /** + * Wraps string line - adds
+ * if the line is longer than LINE_WIDTH. + * + * @param text + * not wrapped text. + * @return the wrapped text. + */ + private String wrapLabel(String text) { + if (text.length() > LINE_WIDTH) + text = text.substring(0, LINE_WIDTH) + "
" + + text.substring(LINE_WIDTH, text.length()); + return text; + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/frames/HelpFrame.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/frames/HelpFrame.java new file mode 100644 index 000000000..ce4250519 --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/frames/HelpFrame.java @@ -0,0 +1,72 @@ +package cz.zcu.fav.kiv.editor.graphics.frames; + +import java.net.URL; + +import javax.help.HelpBroker; +import javax.help.HelpSet; + +import cz.zcu.fav.kiv.editor.controller.logger.Log; +import cz.zcu.fav.kiv.editor.controller.options.OptionItems; + +/** + * The HelpFrame class is the frame displaying application help. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class HelpFrame { + private static final String HELPSET = "jhelpset.hs"; + + /** The help set */ + private HelpSet helpSet; + + /** The help broker */ + private HelpBroker helpBroker; + + /** The single instance of the frame */ + private static HelpFrame instance; + + /** + * Returns the single instance of the help frame. + * + * @return single instance of the help frame. + */ + public static HelpFrame getInstance() { + if (instance == null) + instance = new HelpFrame(); + return instance; + } + + /** + * Initializes a newly created HelpFrame. + */ + public HelpFrame() { + } + + /** + * Creates the new help content according to the actual application language locale. + */ + public void createHelp() { + if ((helpSet != null) && (!helpSet.getLocale().equals(OptionItems.LANGUAGE))) + helpSet = null; + if (helpSet == null) { + createHelpSet(); + helpBroker = helpSet.createHelpBroker(); + } + helpBroker.setDisplayed(true); + } + + /** + * Initializes the help set according to the file jhelpset.hs. + */ + private void createHelpSet() { + ClassLoader loader = this.getClass().getClassLoader(); + try { + URL url = HelpSet.findHelpSet(loader, HELPSET); + helpSet = new HelpSet(null, url); + } catch (Exception ex) { + Log.error(ex); + } + } + +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/frames/InfoDialog.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/frames/InfoDialog.java new file mode 100644 index 000000000..0243c0973 --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/frames/InfoDialog.java @@ -0,0 +1,80 @@ +package cz.zcu.fav.kiv.editor.graphics.frames; + +import java.awt.BorderLayout; +import java.awt.Container; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +import javax.swing.BorderFactory; +import javax.swing.Box; +import javax.swing.BoxLayout; +import javax.swing.JButton; +import javax.swing.JDialog; +import javax.swing.JPanel; + +import cz.zcu.fav.kiv.editor.controller.resource.ResourceController; +import cz.zcu.fav.kiv.editor.graphics.MainFrame; + +/** + * The abstract class InfoDialog is the dialog used for displaying various information. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public abstract class InfoDialog extends JDialog implements ActionListener { + + private static final long serialVersionUID = -4632123976081227814L; + + /** The size of horizontal margin */ + protected static final int HORIZONTAL_MARGIN = 8; + + /** The size of vertical margin */ + protected static final int VERTICAL_MARGIN = 25; + + /** + * Initializes a newly created InfoDialog with specified title. + * + * @param title + * the title of the dialog. + */ + protected InfoDialog(String title) { + super(MainFrame.getInstance(), ResourceController.getMessage(title), true); + this.setLocationRelativeTo(MainFrame.getInstance()); + } + + /** + * Initializes the content of the dialog. + */ + public void dialogInit() { + JPanel buttonPane = new JPanel(); + buttonPane.setBorder(BorderFactory.createEmptyBorder(HORIZONTAL_MARGIN, VERTICAL_MARGIN, + HORIZONTAL_MARGIN, VERTICAL_MARGIN)); + buttonPane.add(Box.createHorizontalGlue()); + buttonPane.setLayout(new BoxLayout(buttonPane, BoxLayout.LINE_AXIS)); + + JButton button = new JButton(ResourceController.getMessage("button.ok")); + button.addActionListener(this); + buttonPane.add(button); + + super.dialogInit(); + Container content = this.getContentPane(); + content.add(createContent(), BorderLayout.PAGE_START); + content.add(buttonPane, BorderLayout.PAGE_END); + + pack(); + } + + /** + * Creates the panel forming the content of the dialog. + * + * @return the panel forming the content of the dialog. + */ + abstract protected JPanel createContent(); + + /** + * Action performed when a button of dialog is pressed - then the dialog closes. + */ + public void actionPerformed(ActionEvent e) { + this.setVisible(false); + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/images/EditorIcon.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/images/EditorIcon.java new file mode 100644 index 000000000..f2100b995 --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/images/EditorIcon.java @@ -0,0 +1,106 @@ +package cz.zcu.fav.kiv.editor.graphics.images; + +import java.awt.Image; + +import javax.swing.ImageIcon; + +import cz.zcu.fav.kiv.editor.controller.logger.Log; + +/** + * The EditorIconclass is used for loading images used in the editor. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class EditorIcon { + /** The path to the directory where images are stored */ + private static final String ICON_PATH = '\u002f' + + EditorIcon.class.getPackage().getName().replace('.', '\u002f') + '\u002f' + + "resources" + '\u002f'; + + /** The name of the image file representing main editor icon */ + private static final String EDITOR_ICON_PATH = ICON_PATH + "icon.png"; + + /** The name of the image file representing tab */ + private static final String TAB_ICON_PATH = ICON_PATH + "tab.png"; + + /** The name of the image file representing help */ + private static final String HELP_ICON_PATH = ICON_PATH + "help.png"; + + /** The name of the image file representing browser */ + private static final String BROWSER_ICON_PATH = ICON_PATH + "browser.png"; + + /** The name of the image file representing colors chooser */ + private static final String COLOR_ICON_PATH = ICON_PATH + "colors.png"; + + /** + * Loads the main editor icon. + * + * @return the main editor icon. + */ + public static Image createEditorIcon() { + final ImageIcon imageIcon = createIcon(EDITOR_ICON_PATH); + return imageIcon != null ? imageIcon.getImage() : null; + } + + /** + * Loads the icon from the input file. + * + * @param image + * the name of the file where the icon is stored. + * @return the icon loaded from the input file. + */ + private static ImageIcon createIcon(String image) { + try { + return new ImageIcon(EditorIcon.class.getResource(image)); + } catch (Exception ex) { + Log.error("error.editor_icon", ex); + } + return null; + } + + /** + * Loads the large editor icon. + * + * @return the large editor icon. + */ + public static ImageIcon createLargeEditorIcon() { + return createIcon(EDITOR_ICON_PATH); + } + + /** + * Loads the tab icon. + * + * @return the tab icon. + */ + public static ImageIcon createTabIcon() { + return createIcon(TAB_ICON_PATH); + } + + /** + * Loads the help icon. + * + * @return the help icon. + */ + public static ImageIcon createHelpIcon() { + return createIcon(HELP_ICON_PATH); + } + + /** + * Loads the browser icon. + * + * @return the browser icon. + */ + public static ImageIcon createBrowserIcon() { + return createIcon(BROWSER_ICON_PATH); + } + + /** + * Loads the colors chooser icon. + * + * @return the colors chooser icon. + */ + public static ImageIcon createColorIcon() { + return createIcon(COLOR_ICON_PATH); + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/images/resources/browser.png b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/images/resources/browser.png new file mode 100644 index 0000000000000000000000000000000000000000..a97130f13eafb620268b0d30dfc6081995396af5 GIT binary patch literal 1147 zcmV->1cdvEP)z@;j(q!3lK=n!AY({UO#lFTB>(_`g8%^e{{R4h=>PzA zFaQARU;qF*m;eA5Z<1fdMgRZ<@kvBMRCwBAjH+6~00RI2{bTs^_n#yK1EaU75U(Ex zJBuDW8!P|s-+w-Q`~K_ln-5<$F)}i4VPax@0i?ltmbOMS00a;Vn8m=z@axZC3vm&? zK7DmrOGQaO1}!CVh8HhiF??a<6L|LOgTjlK?|g6Ee}44+hpz>!EX-#Zpa39%fCl_$ z`1$jfwStuJW_N3KL2+RohOeJKF}!^FlHuELCWdeS{xC=haWLpeNiwKN3s~2F)$uoTY!N35tnBgBVY<_?L!l0|6478bvL0(3j;o+0#4Ck-h zVqjt6V_;)rH3S&|5I`*d7?~LU|M?2E?gzt{_pcbfer9J7;OArb2MoMFAKo!ADF}f> zn~jx)K}3L;;mrF_3>*SnKsPdSfy4m-#;I{{lmh`#>8ME$Ifu?)mMgF55F-m zvvB}jz`*e7@HGZuK6VBJRY`__e}6Ij00!)}Td#mY!0-fQ06+k-e0cZq@RK)RJbWw^ z8AL^efmoD*_1Zm#!#7_teErA9aQ^K_24KW8i108m{QmKU;pywo48NGg7=HZxvK3?i zKmalQ{K?Ss@%?9pyANM5ym<8n>|9X5y?XPO;WbeF+b>3jm!EzD6V)4rSFhhNaB}l9 zFf+6K|HHtx2&5Ju002P%zW)RD@#^C5?(ZHEA1^Qj|M&m}|MdX3$lU7on_WS_w z^Y#Gk@$~>D68!-A0S5r(^$Y;Mw5XHU$h4krXkY*Wh~?4E6Mx^oeAv#zFRK2>+1c{V z*S`!`p9ACmKLv>53m;Kd=HF@CzV-7{QUw z0F-55P}Q{wEmSvlu+h-e6cZ5z@;j(q!3lK=n!AY({UO#lFTB>(_`g8%^e{{R4h=>PzA zFaQARU;qF*m;eA5Z<1fdMgRZ;_(?=TRCwBA{Qv(y0|+#f`7$5_kT@GFYqFfIT+5%o z{~kYk`l#{upTAof85zOy^suD;uk|yquI6GYcof-`^h@a(cUS(qZ2R8s9 zfZzsz!UhyTAQyi9_LqT`mGSl4*UvxkvN8%WFnwZp|L*Ij-@pI9XJue!U}izM03d)^ zP(z+Ul9Qb|flri6i-nnqkA?X^>tCQ{e}4U8;NxTCW?^HU`s2s%_g}yLSPxXbAEXB$ zfZzszg699f|KX0dMr}%pG7NwJ{slUTfq@Au_n$#tjZqrt#28?VFznfP!Wk&64ble? zKrG1d&cVhcBqgKBAS$EJ@ay+qu#;e6&It7m10yp79K>qjlC)4xiZ{X<%Ab{Wo+AsIiDBS zLf8NS1UF#Wx>F3=TIvFl65?Dxzkg-;{{0uwMkaUwLqh?`W@KRe3G@dP00a=+Dc`>T zVR-rKgT^<0GnVf>It+{~Tnr4r1jN9?!NA1A4)QlJp#cMti5V0t*J1hq0toH`IT=ZR z8Exm7H$1ise>nd!uy7kOFn@o{!1(_UFyOv1FnxaxWCO+je*W|9;e!(}eEt9A@w(pOg-rxA*+0%0{eE
    a*a?5_y7O^07*qoM6N<$f=k_-L;wH) literal 0 HcmV?d00001 diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/images/resources/help.png b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/images/resources/help.png new file mode 100644 index 0000000000000000000000000000000000000000..f25fc3fbf106af60de59581bf2e6fba58d489bf8 GIT binary patch literal 932 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 literal 0 HcmV?d00001 diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/images/resources/tab.png b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/images/resources/tab.png new file mode 100644 index 0000000000000000000000000000000000000000..7f1299e9db1728ff199cee9850a25b925607c723 GIT binary patch literal 370 zcmV-&0ge8NP)*vgy#c=faVH7cd00KMd|Nnnjox#Jy!;qAa%JA>sUxwFj zUNbCRwwM7RfS7=C|Ni{>gP|B1ynYQ)3IntroException class is used for reporting errors generated in the intro frame during loading configuration + * files. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class IntroException extends Exception { + + private static final long serialVersionUID = -5259345670724739417L; + + /** + * Initializes a newly created empty IntroException. + */ + public IntroException() { + super(); + } +} \ No newline at end of file diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/intro/IntroFrame.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/intro/IntroFrame.java new file mode 100644 index 000000000..d2f8f59fd --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/intro/IntroFrame.java @@ -0,0 +1,67 @@ +package cz.zcu.fav.kiv.editor.graphics.intro; + +import java.awt.Dimension; +import java.awt.EventQueue; + +import javax.swing.JComponent; +import javax.swing.JFrame; + +import cz.zcu.fav.kiv.editor.controller.logger.Log; +import cz.zcu.fav.kiv.editor.controller.resource.ResourceController; +import cz.zcu.fav.kiv.editor.graphics.images.EditorIcon; +import cz.zcu.fav.kiv.editor.graphics.utils.FrameShower; + +/** + * The IntroFrame class represents the intro frame displaying the loading of configuration files. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class IntroFrame extends JFrame { + + private static final long serialVersionUID = 1293269978761922832L; + + /** + * Initializes a newly created IntroFrame and launches loading of configuration files. + * @throws IntroException if an error occurs during loading of configuration files. + */ + public IntroFrame() throws IntroException { + super(ResourceController.getMessage("frame.intro.title")); + this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + + setIconImage(EditorIcon.createEditorIcon()); + + // Create and set up the content pane. + JComponent newContentPane = new ProgressBar(); + newContentPane.setOpaque(true); + this.setContentPane(newContentPane); + + Dimension dim = getToolkit().getScreenSize(); + Dimension abounds = getPreferredSize(); + this.setLocation((dim.width - abounds.width) / 2, (dim.height - abounds.height) / 2); + this.setResizable(false); + + // Display the window. + Runnable runner = new FrameShower(this); + try { + EventQueue.invokeAndWait(runner); + } catch (Exception ex) { + Log.warn(ex); + } + + ProgressBar.getTimer().start(); + ProgressBar.getTask().go(); + + if (ProgressBar.getTask().isCanceled()) + throw new IntroException(); + } + + /** + * Hides and dispose the intro frame. + */ + public void hideFrame() { + this.setVisible(false); + this.dispose(); + } + +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/intro/ProgressBar.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/intro/ProgressBar.java new file mode 100644 index 000000000..d70a995dd --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/intro/ProgressBar.java @@ -0,0 +1,139 @@ +package cz.zcu.fav.kiv.editor.graphics.intro; + +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Dimension; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +import javax.swing.BorderFactory; +import javax.swing.JPanel; +import javax.swing.JProgressBar; +import javax.swing.JScrollPane; +import javax.swing.JTextPane; +import javax.swing.Timer; +import javax.swing.text.MutableAttributeSet; +import javax.swing.text.SimpleAttributeSet; +import javax.swing.text.StyleConstants; +import javax.swing.text.StyledDocument; + +import cz.zcu.fav.kiv.editor.beans.ConfigData; +import cz.zcu.fav.kiv.editor.controller.ProgressControl; +import cz.zcu.fav.kiv.editor.controller.logger.Log; +import cz.zcu.fav.kiv.editor.controller.resource.ResourceController; + +/** + * The ProgressBar class is the progress bar used for displaying the progress of + * configuration files loading. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class ProgressBar extends JPanel { + + private static final long serialVersionUID = 1982246205327449245L; + + /** The width of the progress bar */ + private static final int WIDTH = 400; + + /** The height of the progress bar */ + private static final int HEIGHT = 150; + + /** The size of margin of the progress bar */ + private static final int MARGIN = 10; + + /** The interval of timer launching */ + private final static int TIME_INTERVAL = 50; + + /** The progress bar */ + private static JProgressBar progressBar; + + /** The timer controlling the displaying of progress */ + private static Timer timer; + + /** The text pane displaying information about progress */ + private JTextPane editor; + + /** The mutable attribute set of the JTextPane */ + private MutableAttributeSet mutAttr; + + /** The styled document of the JTextPane */ + private StyledDocument styledDoc; + + /** The class controlling the loading the configuration files */ + private static ProgressControl task; + + /** + * Initializes a newly created ProgressBar. Starts the task that loads the + * configuration files and simultaneously starts the timer. + */ + public ProgressBar() { + super(new BorderLayout(MARGIN, MARGIN)); + + task = new ProgressControl(); + progressBar = new JProgressBar(); + progressBar.setValue(0); + progressBar.setStringPainted(true); + + JProgressBar progressBarIndetermin = new JProgressBar(); + progressBarIndetermin.setIndeterminate(true); + progressBarIndetermin.setStringPainted(true); + progressBarIndetermin.setString(ResourceController.getMessage("frame.intro.progress.loading_file")); + + editor = new JTextPane(); + mutAttr = new SimpleAttributeSet(); + styledDoc = editor.getStyledDocument(); + StyleConstants.setForeground(mutAttr, Color.black); + + add(progressBar, BorderLayout.PAGE_START); + add(progressBarIndetermin, BorderLayout.PAGE_END); + + JScrollPane scrollBar = new JScrollPane(editor); + scrollBar.setPreferredSize(new Dimension(WIDTH, HEIGHT)); + add(scrollBar, BorderLayout.CENTER); + this.setBorder(BorderFactory.createEmptyBorder(MARGIN, MARGIN, MARGIN, MARGIN)); + + // Create a timer. + timer = new Timer(TIME_INTERVAL, new ActionListener() { + public void actionPerformed(ActionEvent evt) { + progressBar.setValue(task.getCurrent()); + try { + if ((task.getMessage() != null) && (!task.isCanceled())) { + if (styledDoc.getLength() < task.getMessage().length()) { + styledDoc.remove(0, styledDoc.getLength()); + styledDoc.insertString(0, task.getMessage(), mutAttr); + } + } + if (task.isDone()) { + timer.stop(); + progressBar.setValue(progressBar.getMaximum()); + styledDoc.insertString(0, task.getMessage(), mutAttr); + } + if (task.isCanceled()) { + timer.stop(); + styledDoc.remove(0, styledDoc.getLength()); + styledDoc.insertString(0, task.getMessage(), mutAttr); + StyleConstants.setForeground(mutAttr, Color.red); + styledDoc.insertString(styledDoc.getLength(), task.getErrorMessage(), + mutAttr); + progressBar.setIndeterminate(false); + } + } catch (Exception ex) { + Log.error(ex); + } + } + }); + } + + public static ConfigData getData() { + return task.getData(); + } + + public static Timer getTimer() { + return timer; + } + + public static ProgressControl getTask() { + return task; + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/options/EditorOptionForm.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/options/EditorOptionForm.java new file mode 100644 index 000000000..77c8eb19b --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/options/EditorOptionForm.java @@ -0,0 +1,202 @@ +package cz.zcu.fav.kiv.editor.graphics.options; + +import java.awt.Dimension; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.io.File; + +import javax.swing.BorderFactory; +import javax.swing.ImageIcon; +import javax.swing.JButton; +import javax.swing.JCheckBox; +import javax.swing.JComboBox; +import javax.swing.JFileChooser; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JTextField; +import javax.swing.SpringLayout; + +import cz.zcu.fav.kiv.editor.controller.logger.Log; +import cz.zcu.fav.kiv.editor.controller.options.OptionItems; +import cz.zcu.fav.kiv.editor.controller.resource.LanguageEnum; +import cz.zcu.fav.kiv.editor.controller.resource.ResourceController; +import cz.zcu.fav.kiv.editor.graphics.MainFrame; +import cz.zcu.fav.kiv.editor.graphics.images.EditorIcon; +import cz.zcu.fav.kiv.editor.graphics.utils.SpringUtilities; + +/** + * The EditorOptionFormclass is the form with stylesheet options. It makes the content + * of the OptionEditorDialog dialog. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class EditorOptionForm extends JPanel { + + private static final long serialVersionUID = -1040245299541084094L; + + /** The number of rows in the form */ + private static final int ROW_COUNT = 3; + + /** The number of columns in the form */ + private static final int COLUMN_COUNT = 3; + + /** The width of the field with file path */ + private static final int FILE_FIELD_WIDTH = 200; + + /** The size of component margin */ + private static final int COMPONENT_MARGIN = 3; + + /** The label containing option name */ + private JLabel iconLabel; + + /** The icon image representing option item help */ + private ImageIcon image; + + /** + * The text-field specifying path of the directory with files containing XML definitions of + * parameters + */ + private JTextField xmlDefPathField; + + /** The combo-box specifying language of the editor */ + private JComboBox languageBox; + + /** The check-box specifying whether the editor console is erased before every action */ + private JCheckBox eraseConsoleCheck; + + /** + * Initializes a newly created EditorOptionForm. + */ + public EditorOptionForm() { + this.setLayout(new SpringLayout()); + + this.setBorder(BorderFactory.createEtchedBorder()); + + image = EditorIcon.createHelpIcon(); + + optionLanguage(); + optionXmlDefPath(); + optionEraseConsole(); + + SpringUtilities.makeCompactGrid(this, ROW_COUNT, COLUMN_COUNT, COMPONENT_MARGIN, + COMPONENT_MARGIN, COMPONENT_MARGIN, COMPONENT_MARGIN); + } + + /** + * Adds to the form the option item specifying language of the editor. + */ + private void optionLanguage() { + // interrogation mark + iconLabel = new JLabel(); + iconLabel.setToolTipText(ResourceController + .getMessage("option_editor.language.description")); + iconLabel.setIcon(image); + this.add(iconLabel); + // name + this.add(new JLabel(ResourceController.getMessage("option_editor.language"))); + // value + languageBox = new JComboBox(LanguageEnum.values()); + languageBox.setSelectedItem(LanguageEnum.getLanguage(OptionItems.LANGUAGE)); + this.add(languageBox); + } + + /** + * Adds to the form the option item specifying the path directory with files containing XML + * definitions of parameters. + */ + private void optionXmlDefPath() { + // interrogation mark + iconLabel = new JLabel(); + iconLabel.setToolTipText(ResourceController + .getMessage("option_editor.xml_definition_path.description")); + iconLabel.setIcon(image); + this.add(iconLabel); + // name + this.add(new JLabel(ResourceController.getMessage("option_editor.xml_definition_path"))); + // value + this.add(createFileChooser()); + } + + /** + * Creates the panel with a text-field and button that shows a file chooser dialog. The chosen + * file path is saved to the text-field. + * + * @return the panel used for choosing file paths. + */ + private JPanel createFileChooser() { + JPanel valuePanel = new JPanel(); + xmlDefPathField = new JTextField(OptionItems.XML_DEFINITION_PATH); + xmlDefPathField.setPreferredSize(new Dimension(FILE_FIELD_WIDTH, xmlDefPathField + .getPreferredSize().height)); + valuePanel.add(xmlDefPathField); + JButton chooseButton = new JButton(ResourceController + .getMessage("option_editor.xml_definition_path.button")); + chooseButton.addActionListener(new ChoosePath()); + valuePanel.add(chooseButton); + return valuePanel; + } + + /** + * Adds to the form the option item specifying whether the editor console is erased before every + * action. + */ + private void optionEraseConsole() { + // interrogation mark + iconLabel = new JLabel(); + iconLabel.setToolTipText(ResourceController + .getMessage("option_editor.erase_console.description")); + iconLabel.setIcon(image); + this.add(iconLabel); + // name + this.add(new JLabel(ResourceController.getMessage("option_editor.erase_console"))); + // value + eraseConsoleCheck = new JCheckBox(); + if (OptionItems.ERASE_CONSOLE) + eraseConsoleCheck.setSelected(true); + this.add(eraseConsoleCheck); + } + + /** + * Saves the changes of editor options made in the dialog by user. + */ + public void saveChanges() { + OptionItems.XML_DEFINITION_PATH = xmlDefPathField.getText(); + if (!((LanguageEnum) languageBox.getSelectedItem()).getLocale() + .equals(OptionItems.LANGUAGE)) + OptionItems.changeLanguage(((LanguageEnum) languageBox.getSelectedItem()).getLocale()); + OptionItems.ERASE_CONSOLE = eraseConsoleCheck.isSelected(); + Log.info("info.option_form.editor.save_values"); + } + + /** + * Sets default values to all editor options in the dialog. + */ + public void updateValues() { + languageBox.setSelectedItem(LanguageEnum.getLanguage(OptionItems.LANGUAGE)); + xmlDefPathField.setText(OptionItems.XML_DEFINITION_PATH); + eraseConsoleCheck.setSelected(OptionItems.ERASE_CONSOLE); + Log.info("info.option_form.editor.update_values"); + } + + /** + * The ChoosePath class shows the open file dialog that enables to choose a + * directory. Then the chosen directory path is saved to the xmlDefPathField. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ + class ChoosePath implements ActionListener { + public void actionPerformed(ActionEvent e) { + JFileChooser fc = new JFileChooser(); + File directory = new File(OptionItems.XML_DEFINITION_PATH); + if (directory.exists()) + fc.setCurrentDirectory(directory); + fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); + int returnVal = fc.showOpenDialog(MainFrame.getInstance()); + if (returnVal == JFileChooser.APPROVE_OPTION) { + xmlDefPathField.setText(fc.getSelectedFile().getPath()); + } + } + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/options/OptionDialog.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/options/OptionDialog.java new file mode 100644 index 000000000..898c2e8f2 --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/options/OptionDialog.java @@ -0,0 +1,142 @@ +package cz.zcu.fav.kiv.editor.graphics.options; + +import java.awt.BorderLayout; +import java.awt.Container; +import java.awt.Dimension; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +import javax.swing.BorderFactory; +import javax.swing.Box; +import javax.swing.BoxLayout; +import javax.swing.JButton; +import javax.swing.JDialog; +import javax.swing.JPanel; + +import cz.zcu.fav.kiv.editor.controller.resource.ResourceController; +import cz.zcu.fav.kiv.editor.graphics.MainFrame; + +/** + * The abstract class OptionDialog is the dialog used for editing application + * options. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public abstract class OptionDialog extends JDialog implements ActionListener { + + private static final long serialVersionUID = -6526357047305363516L; + + /** The width of the dialog */ + private static final int DIALOG_WIDTH = 500; + + /** The size of margin */ + private static final int MARGIN = 10; + + /** The command SAVE */ + private static final String SAVE_COMMAND = "save"; + + /** The option dialog */ + protected static OptionDialog dialog; + + /** + * Initializes a newly created OptionDialog with specified title. + * + * @param title + * the title of the dialog. + */ + protected OptionDialog(String title) { + super(MainFrame.getInstance(), ResourceController.getMessage(title), true); + + Container pan = new JPanel(new BorderLayout()); + + JPanel contentPanel = new JPanel(); + contentPanel.setLayout(new BoxLayout(contentPanel, BoxLayout.PAGE_AXIS)); + + contentPanel.add(createForm()); + + pan.add(contentPanel, BorderLayout.PAGE_START); + pan.add(createButtonPane(), BorderLayout.PAGE_END); + + this.getContentPane().add(pan, BorderLayout.CENTER); + this.setResizable(false); + + this.pack(); + this.setSize(new Dimension(DIALOG_WIDTH, this.getHeight())); + this.setLocationRelativeTo(MainFrame.getInstance()); + } + + /** + * Creates the form that makes the content of the dialog. + * + * @return the form creating the dialog content. + */ + protected abstract JPanel createForm(); + + /** + * Saves the changes of options made in the dialog by user. + */ + protected abstract void saveChanges(); + + /** + * Sets default values to all options in the dialog. + */ + protected abstract void updateValues(); + + /** + * Action performed when a button of dialog is pressed. If the button is Save, then the changes + * of options are saved. + */ + public void actionPerformed(ActionEvent e) { + if (SAVE_COMMAND.equals(e.getActionCommand())) { + saveChanges(); + } + + OptionDialog.dialog.setVisible(false); + OptionDialog.dialog.dispose(); + } + + /** + * Creates the dialog panel with buttons. + * + * @return the panel with buttons. + */ + private JPanel createButtonPane() { + JButton defaultButton = new JButton(ResourceController.getMessage("button.default")); + defaultButton.addActionListener(new ChangeDefault()); + + JButton cancelButton = new JButton(ResourceController.getMessage("button.cancel")); + cancelButton.addActionListener(this); + + JButton setButton = new JButton(ResourceController.getMessage("button.save")); + setButton.setActionCommand(SAVE_COMMAND); + setButton.addActionListener(this); + getRootPane().setDefaultButton(setButton); + + // Lay out the buttons from left to right. + JPanel buttonPane = new JPanel(); + buttonPane.setLayout(new BoxLayout(buttonPane, BoxLayout.LINE_AXIS)); + buttonPane.setBorder(BorderFactory.createEmptyBorder(MARGIN, MARGIN, MARGIN, MARGIN)); + buttonPane.add(Box.createHorizontalGlue()); + buttonPane.add(defaultButton); + buttonPane.add(Box.createRigidArea(new Dimension(3 * MARGIN, 0))); + buttonPane.add(setButton); + buttonPane.add(Box.createRigidArea(new Dimension(MARGIN, 0))); + buttonPane.add(cancelButton); + + return buttonPane; + } + + /** + * The inner class ChangeDefault class sets default values to options in the + * dialog when the button Restore Defaults is set. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ + class ChangeDefault implements ActionListener { + public void actionPerformed(ActionEvent e) { + updateValues(); + } + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/options/OptionEditorDialog.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/options/OptionEditorDialog.java new file mode 100644 index 000000000..3c02b32b8 --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/options/OptionEditorDialog.java @@ -0,0 +1,52 @@ +package cz.zcu.fav.kiv.editor.graphics.options; + +import javax.swing.JPanel; + +import cz.zcu.fav.kiv.editor.controller.options.OptionController; + +/** + * The OptionEditorDialogclass is the dialog used for editing editor options. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class OptionEditorDialog extends OptionDialog { + + private static final long serialVersionUID = 7118079845557600112L; + + /** The editor option dialog */ + private EditorOptionForm editorOptionForm; + + /** + * Creates and shows the dialog with editor options. + */ + public static void showDialog() { + dialog = new OptionEditorDialog(); + dialog.setVisible(true); + } + + /** + * Initializes a newly created OptionEditorDialog with its title. + */ + public OptionEditorDialog() { + super("frame.option.editor.title"); + } + + @Override + protected JPanel createForm() { + editorOptionForm = new EditorOptionForm(); + return editorOptionForm; + } + + @Override + protected void saveChanges() { + editorOptionForm.saveChanges(); + } + + @Override + protected void updateValues() { + OptionController.setDefaultEditorOptions(); + editorOptionForm.updateValues(); + } + +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/options/OptionStylesheetDialog.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/options/OptionStylesheetDialog.java new file mode 100644 index 000000000..2477f9f33 --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/options/OptionStylesheetDialog.java @@ -0,0 +1,53 @@ +package cz.zcu.fav.kiv.editor.graphics.options; + +import javax.swing.JPanel; + +import cz.zcu.fav.kiv.editor.controller.options.OptionController; + +/** + * The OptionStylesheetDialogclass is the dialog used for editing stylesheet + * options. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class OptionStylesheetDialog extends OptionDialog { + + private static final long serialVersionUID = 7118079159557600112L; + + /** The stylesheet option dialog */ + private StylesheetOptionForm stylesheetOptionForm; + + /** + * Shows the dialog with stylesheet options. + */ + public static void showDialog() { + dialog = new OptionStylesheetDialog(); + dialog.setVisible(true); + } + + /** + * Initializes a newly created OptionStylesheetDialog with its title. + */ + public OptionStylesheetDialog() { + super("frame.option.save.title"); + } + + @Override + protected JPanel createForm() { + stylesheetOptionForm = new StylesheetOptionForm(); + return stylesheetOptionForm; + } + + @Override + protected void saveChanges() { + stylesheetOptionForm.saveChanges(); + } + + @Override + protected void updateValues() { + OptionController.setDefaultStylesheetOptions(); + stylesheetOptionForm.updateValues(); + } + +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/options/StylesheetOptionForm.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/options/StylesheetOptionForm.java new file mode 100644 index 000000000..a1eb7ba56 --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/options/StylesheetOptionForm.java @@ -0,0 +1,375 @@ +package cz.zcu.fav.kiv.editor.graphics.options; + +import java.awt.Dimension; +import java.awt.Font; + +import javax.swing.BorderFactory; +import javax.swing.Box; +import javax.swing.BoxLayout; +import javax.swing.ImageIcon; +import javax.swing.JCheckBox; +import javax.swing.JComboBox; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JTextArea; +import javax.swing.JTextField; +import javax.swing.SpringLayout; + +import cz.zcu.fav.kiv.editor.controller.logger.Log; +import cz.zcu.fav.kiv.editor.controller.options.EncodingEnum; +import cz.zcu.fav.kiv.editor.controller.options.NewlineEnum; +import cz.zcu.fav.kiv.editor.controller.options.OptionItems; +import cz.zcu.fav.kiv.editor.controller.resource.ErrorResourceController; +import cz.zcu.fav.kiv.editor.controller.resource.ResourceController; +import cz.zcu.fav.kiv.editor.graphics.images.EditorIcon; +import cz.zcu.fav.kiv.editor.graphics.utils.SpringUtilities; + +/** + * The StylesheetOptionFormclass is the form with editor options. It makes the + * content of the OptionStylesheetDialog dialog. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class StylesheetOptionForm extends JPanel { + + private static final long serialVersionUID = -1040245299541084094L; + + /** The number of columns in the form */ + private static final int COLUMN_COUNT = 3; + + /** The number of rows in the first panel of the form */ + private static final int ROW_1_COUNT = 3; + + /** The number of rows in the second panel of the form */ + private static final int ROW_2_COUNT = 3; + + /** The number of rows in the third panel of the form */ + private static final int ROW_3_COUNT = 2; + + /** The inner width of the form panel */ + private static final int PANEL_INNER_WIDTH = 490; + + /** The outer width of the form panel */ + private static final int PANEL_OUTER_WIDTH = 500; + + /** The size of component margin */ + private static final int COMPONENT_MARGIN = 3; + + /** The label containing option name */ + private JLabel iconLabel; + + /** The icon image representing option item help */ + private ImageIcon image; + + /** The check-box specifying whether FO namespace is appended to the stylesheet definiton */ + private JCheckBox addFoNamespaceCheck; + + /** The check-box specifying whether the rearrange saving is used */ + private JCheckBox changeSaveCheck; + + /** The check-box specifying whether comments are generated in the stylesheet */ + private JCheckBox generateCommentsCheck; + + /** The check-box specifying whether attribute select is used in parameter elements */ + private JCheckBox useParamSelectCheck; + + /** The combo-box specifying encoding of output files */ + private JComboBox encodingBox; + + /** The combo-box specifying char of ends of lines in output files */ + private JComboBox newlineBox; + + /** The text-field specifying stylesheet version */ + private JTextField stylesheetVersionField; + + /** The text-area specifying imported stylesheet files */ + private JTextArea importFileArea; + + /** + * Initializes a newly created StylesheetOptionForm. + */ + public StylesheetOptionForm() { + image = EditorIcon.createHelpIcon(); + + JPanel panelOne = createPanelOne(); + this.add(panelOne); + + JPanel panelTwo = createPanelTwo(); + this.add(panelTwo); + + JPanel panelThree = createPanelThree(); + this.add(panelThree); + this.setPreferredSize(new Dimension(PANEL_OUTER_WIDTH, panelOne.getPreferredSize().height + + panelTwo.getPreferredSize().height + panelThree.getPreferredSize().height + 20)); + } + + /** + * Creates the first form panel with options of new stylesheets. + * + * @return the panel with options of new stylesheets. + */ + private JPanel createPanelOne() { + JPanel panel = new JPanel(); + panel.setLayout(new SpringLayout()); + panel.setBorder(BorderFactory.createTitledBorder(ResourceController + .getMessage("option_save.new_file_template.title"))); + optionImportedFiles(panel); + optionStylesheetVersion(panel); + optionAddFoNamespace(panel); + SpringUtilities.makeCompactGrid(panel, ROW_1_COUNT, COLUMN_COUNT, COMPONENT_MARGIN, + COMPONENT_MARGIN, COMPONENT_MARGIN, COMPONENT_MARGIN); + panel.setPreferredSize(new Dimension(PANEL_INNER_WIDTH, panel.getPreferredSize().height)); + return panel; + } + + /** + * Creates the second form panel with options of all stylesheets. + * + * @return the panel with options of stylesheets. + */ + private JPanel createPanelTwo() { + JPanel panel = new JPanel(); + panel.setLayout(new SpringLayout()); + panel.setBorder(BorderFactory.createTitledBorder(ResourceController + .getMessage("option_save.stylesheet_format.title"))); + optionChangeSave(panel); + optionGenerateComments(panel); + optionUseParamSelect(panel); + SpringUtilities.makeCompactGrid(panel, ROW_2_COUNT, COLUMN_COUNT, COMPONENT_MARGIN, + COMPONENT_MARGIN, COMPONENT_MARGIN, COMPONENT_MARGIN); + panel.setPreferredSize(new Dimension(PANEL_INNER_WIDTH, panel.getPreferredSize().height)); + return panel; + } + + /** + * Creates the third form panel with options of output files. + * + * @return the panel with options of output files. + */ + private JPanel createPanelThree() { + JPanel panel = new JPanel(); + panel.setLayout(new SpringLayout()); + panel.setBorder(BorderFactory.createTitledBorder(ResourceController + .getMessage("option_save.output_file.title"))); + optionEncoding(panel); + optionNewline(panel); + SpringUtilities.makeCompactGrid(panel, ROW_3_COUNT, COLUMN_COUNT, COMPONENT_MARGIN, + COMPONENT_MARGIN, COMPONENT_MARGIN, COMPONENT_MARGIN); + panel.setPreferredSize(new Dimension(PANEL_INNER_WIDTH, panel.getPreferredSize().height)); + return panel; + } + + /** + * Adds to the panel the option item specifying whether FO namespace is appended to the + * stylesheet definiton. + * + * @param panel + * the parent panel. + */ + private void optionAddFoNamespace(JPanel panel) { + // interrogation mark + iconLabel = new JLabel(); + iconLabel.setToolTipText(ResourceController + .getMessage("option_save.add_fo_namespace.description")); + iconLabel.setIcon(image); + panel.add(iconLabel); + // name + panel.add(new JLabel(ResourceController.getMessage("option_save.add_fo_namespace"))); + // value + addFoNamespaceCheck = new JCheckBox(); + if (OptionItems.ADD_FO_NAMESPACE) + addFoNamespaceCheck.setSelected(true); + panel.add(addFoNamespaceCheck); + } + + /** + * Adds to the panel the option item specifying whether the rearrange saving is used. + * + * @param panel + * the parent panel. + */ + private void optionChangeSave(JPanel panel) { + // interrogation mark + iconLabel = new JLabel(); + iconLabel.setToolTipText(ResourceController + .getMessage("option_save.change_save.description")); + iconLabel.setIcon(image); + panel.add(iconLabel); + // name + panel.add(new JLabel(ResourceController.getMessage("option_save.change_save"))); + // value + JPanel valuePanel = new JPanel(); + valuePanel.setLayout(new BoxLayout(valuePanel, BoxLayout.LINE_AXIS)); + changeSaveCheck = new JCheckBox(); + if (OptionItems.REARRANGE_SAVE) + changeSaveCheck.setSelected(true); + valuePanel.add(changeSaveCheck); + valuePanel.add(Box.createRigidArea(new Dimension(10, 0))); + valuePanel + .add(new JLabel(ResourceController.getMessage("option_save.change_save.warning"))); + panel.add(valuePanel); + } + + /** + * Adds to the panel the option item specifying whether comments are generated in the + * stylesheet. + * + * @param panel + * the parent panel. + */ + private void optionGenerateComments(JPanel panel) { + // interrogation mark + iconLabel = new JLabel(); + iconLabel.setToolTipText(ResourceController + .getMessage("option_save.generate_com.description")); + iconLabel.setIcon(image); + panel.add(iconLabel); + // name + panel.add(new JLabel(ResourceController.getMessage("option_save.generate_com"))); + // value + generateCommentsCheck = new JCheckBox(); + if (OptionItems.GENERATE_COMMENTS) + generateCommentsCheck.setSelected(true); + panel.add(generateCommentsCheck); + } + + /** + * Adds to the panel the option item specifying whether attribute select is used in + * parameter elements + * + * @param panel + * the parent panel. + */ + private void optionUseParamSelect(JPanel panel) { + // interrogation mark + iconLabel = new JLabel(); + iconLabel.setToolTipText(ResourceController + .getMessage("option_save.use_param_select.description")); + iconLabel.setIcon(image); + panel.add(iconLabel); + // name + panel.add(new JLabel(ResourceController.getMessage("option_save.use_param_select"))); + // value + useParamSelectCheck = new JCheckBox(); + if (OptionItems.USE_PARAM_SELECT) + useParamSelectCheck.setSelected(true); + panel.add(useParamSelectCheck); + } + + /** + * Adds to the panel the option item specifying encoding of output files. + * + * @param panel + * the parent panel. + */ + private void optionEncoding(JPanel panel) { + // interrogation mark + iconLabel = new JLabel(); + iconLabel.setToolTipText(ResourceController.getMessage("option_save.encoding.description")); + iconLabel.setIcon(image); + panel.add(iconLabel); + // name + panel.add(new JLabel(ResourceController.getMessage("option_save.encoding"))); + // value + encodingBox = new JComboBox(EncodingEnum.values()); + encodingBox.setSelectedItem(EncodingEnum.getEncoding(OptionItems.ENCODING)); + panel.add(encodingBox); + } + + /** + * Adds to the panel the option item specifying char of ends of lines in output files. + * + * @param panel + * the parent panel. + */ + private void optionNewline(JPanel panel) { + // interrogation mark + iconLabel = new JLabel(); + iconLabel.setToolTipText(ResourceController.getMessage("option_save.newline.description")); + iconLabel.setIcon(image); + panel.add(iconLabel); + // name + panel.add(new JLabel(ResourceController.getMessage("option_save.newline"))); + // value + newlineBox = new JComboBox(NewlineEnum.values()); + newlineBox.setSelectedItem(OptionItems.NEWLINE); + panel.add(newlineBox); + } + + /** + * Adds to the panel the option item specifying stylesheet version. + * + * @param panel + * the parent panel. + */ + private void optionStylesheetVersion(JPanel panel) { + // interrogation mark + iconLabel = new JLabel(); + iconLabel.setToolTipText(ResourceController + .getMessage("option_save.stylesheet_version.description")); + iconLabel.setIcon(image); + panel.add(iconLabel); + // name + panel.add(new JLabel(ResourceController.getMessage("option_save.stylesheet_version"))); + // value + stylesheetVersionField = new JTextField(OptionItems.STYLESHEET_VERSION); + panel.add(stylesheetVersionField); + } + + /** + * Adds to the panel the option item specifying imported stylesheet files. + * + * @param panel + * the parent panel. + */ + private void optionImportedFiles(JPanel panel) { + // interrogation mark + iconLabel = new JLabel(); + iconLabel.setToolTipText(ResourceController + .getMessage("option_save.import_file.description")); + iconLabel.setIcon(image); + panel.add(iconLabel); + // name + panel.add(new JLabel(ResourceController.getMessage("option_save.import_file"))); + // textarea + importFileArea = new JTextArea(3, 5); + importFileArea.setText(OptionItems.IMPORT_FILE); + importFileArea.setLineWrap(true); + importFileArea.setFont(new Font("SansSerif", Font.PLAIN, 12)); + JScrollPane scrollBar = new JScrollPane(importFileArea, + JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); + panel.add(scrollBar); + } + + /** + * Saves the changes of stylesheet options made in the dialog by user. + */ + public void saveChanges() { + OptionItems.IMPORT_FILE = importFileArea.getText(); + OptionItems.ADD_FO_NAMESPACE = addFoNamespaceCheck.isSelected(); + OptionItems.REARRANGE_SAVE = changeSaveCheck.isSelected(); + OptionItems.GENERATE_COMMENTS = generateCommentsCheck.isSelected(); + OptionItems.USE_PARAM_SELECT = useParamSelectCheck.isSelected(); + OptionItems.ENCODING = ((EncodingEnum) encodingBox.getSelectedItem()).getKey(); + OptionItems.NEWLINE = (NewlineEnum) newlineBox.getSelectedItem(); + OptionItems.STYLESHEET_VERSION = stylesheetVersionField.getText(); + Log.info("info.option_form.save.save_values"); + } + + /** + * Sets default values to all stylesheet options in the dialog. + */ + public void updateValues() { + importFileArea.setText(OptionItems.IMPORT_FILE); + addFoNamespaceCheck.setSelected(OptionItems.ADD_FO_NAMESPACE); + changeSaveCheck.setSelected(OptionItems.REARRANGE_SAVE); + generateCommentsCheck.setSelected(OptionItems.GENERATE_COMMENTS); + useParamSelectCheck.setSelected(OptionItems.USE_PARAM_SELECT); + encodingBox.setSelectedItem(EncodingEnum.getEncoding(OptionItems.ENCODING)); + newlineBox.setSelectedItem(OptionItems.NEWLINE); + stylesheetVersionField.setText(OptionItems.STYLESHEET_VERSION); + Log.info(ErrorResourceController.getMessage("info.option_form.save.update_values")); + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/utils/FrameShower.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/utils/FrameShower.java new file mode 100644 index 000000000..d6775bbbb --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/utils/FrameShower.java @@ -0,0 +1,32 @@ +package cz.zcu.fav.kiv.editor.graphics.utils; + +import javax.swing.JFrame; + +/** + * The FrameShower class is used for displaying the frame in the thread safe mode. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class FrameShower implements Runnable { + /** The frame */ + private final JFrame frame; + + /** + * Initializes a newly created FrameShower with the specified frame. + * + * @param frame + * the frame. + */ + public FrameShower(JFrame frame) { + this.frame = frame; + } + + /** + * Launches the frame in the thread safe mode. + */ + public void run() { + frame.pack(); + frame.setVisible(true); + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/utils/GridLayoutUtilities.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/utils/GridLayoutUtilities.java new file mode 100644 index 000000000..cbeb71894 --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/utils/GridLayoutUtilities.java @@ -0,0 +1,171 @@ +package cz.zcu.fav.kiv.editor.graphics.utils; + +import java.awt.Component; +import java.awt.Container; +import java.awt.Dimension; +import java.awt.GridLayout; +import java.awt.Insets; + +/** + * The GridLayoutUtilities class is used for laying out components within a + * container in the grid. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class GridLayoutUtilities extends GridLayout { + + private static final long serialVersionUID = -659668560032059816L; + + /** + * Initializes a newly created GridLayoutUtilities with specified number of rows + * and columns. + * + * @param rows + * the number of rows. + * @param cols + * the number of columns. + */ + public GridLayoutUtilities(int rows, int cols) { + this(rows, cols, 0, 0); + } + + /** + * Initializes a newly created GridLayoutUtilities with specified number of rows + * and columns and size of gaps. + * + * @param rows + * the number of rows. + * @param cols + * the number of columns. + * @param hgap + * the size of horizontal gap. + * @param vgap + * the size of vertical gap. + */ + public GridLayoutUtilities(int rows, int cols, int hgap, int vgap) { + super(rows, cols, hgap, vgap); + } + + @Override + public Dimension preferredLayoutSize(Container parent) { + synchronized (parent.getTreeLock()) { + Insets insets = parent.getInsets(); + int ncomponents = parent.getComponentCount(); + int nrows = getRows(); + int ncols = getColumns(); + if (nrows > 0) { + ncols = (ncomponents + nrows - 1) / nrows; + } else { + nrows = (ncomponents + ncols - 1) / ncols; + } + int[] w = new int[ncols]; + int[] h = new int[nrows]; + for (int i = 0; i < ncomponents; i++) { + int r = i / ncols; + int c = i % ncols; + Component comp = parent.getComponent(i); + Dimension d = comp.getPreferredSize(); + if (w[c] < d.width) { + w[c] = d.width; + } + if (h[r] < d.height) { + h[r] = d.height; + } + } + int nw = 0; + for (int j = 0; j < ncols; j++) { + nw += w[j]; + } + int nh = 0; + for (int i = 0; i < nrows; i++) { + nh += h[i]; + } + return new Dimension(insets.left + insets.right + nw + (ncols - 1) * getHgap(), + insets.top + insets.bottom + nh + (nrows - 1) * getVgap()); + } + } + + @Override + public Dimension minimumLayoutSize(Container parent) { + synchronized (parent.getTreeLock()) { + Insets insets = parent.getInsets(); + int ncomponents = parent.getComponentCount(); + int nrows = getRows(); + int ncols = getColumns(); + if (nrows > 0) { + ncols = (ncomponents + nrows - 1) / nrows; + } else { + nrows = (ncomponents + ncols - 1) / ncols; + } + int[] w = new int[ncols]; + int[] h = new int[nrows]; + for (int i = 0; i < ncomponents; i++) { + int r = i / ncols; + int c = i % ncols; + Component comp = parent.getComponent(i); + Dimension d = comp.getMinimumSize(); + if (w[c] < d.width) { + w[c] = d.width; + } + if (h[r] < d.height) { + h[r] = d.height; + } + } + int nw = 0; + for (int j = 0; j < ncols; j++) { + nw += w[j]; + } + int nh = 0; + for (int i = 0; i < nrows; i++) { + nh += h[i]; + } + return new Dimension(insets.left + insets.right + nw + (ncols - 1) * getHgap(), + insets.top + insets.bottom + nh + (nrows - 1) * getVgap()); + } + } + + @Override + public void layoutContainer(Container parent) { + synchronized (parent.getTreeLock()) { + Insets insets = parent.getInsets(); + int ncomponents = parent.getComponentCount(); + int nrows = getRows(); + int ncols = getColumns(); + if (ncomponents == 0) { + return; + } + if (nrows > 0) { + ncols = (ncomponents + nrows - 1) / nrows; + } else { + nrows = (ncomponents + ncols - 1) / ncols; + } + int hgap = getHgap(); + int vgap = getVgap(); + + int[] w = new int[ncols]; + int[] h = new int[nrows]; + for (int i = 0; i < ncomponents; i++) { + int r = i / ncols; + int c = i % ncols; + Component comp = parent.getComponent(i); + Dimension d = comp.getPreferredSize(); + w[c] = parent.getWidth(); + + if (h[r] < d.height) { + h[r] = d.height; + } + } + for (int c = 0, x = insets.left; c < ncols; c++) { + for (int r = 0, y = insets.top; r < nrows; r++) { + int i = r * ncols + c; + if (i < ncomponents) { + parent.getComponent(i).setBounds(x, y, w[c], h[r]); + } + y += h[r] + vgap; + } + x += w[c] + hgap; + } + } + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/utils/OpenBrowser.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/utils/OpenBrowser.java new file mode 100644 index 000000000..e0a7802cd --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/utils/OpenBrowser.java @@ -0,0 +1,55 @@ +package cz.zcu.fav.kiv.editor.graphics.utils; + +import java.lang.reflect.Method; + +import javax.swing.JOptionPane; + +import cz.zcu.fav.kiv.editor.controller.logger.Log; +import cz.zcu.fav.kiv.editor.controller.resource.ResourceController; + +/** + * The OpenBrowser class is used for launching the main web browser of the operating + * system. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class OpenBrowser { + + /** + * Launches the main web browser of any operating system (Mac, Windows or Unix). + * + * @param url + * the url of the page that will be opened in the web browser. + */ + public static void openURL(String url) { + String osName = System.getProperty("os.name"); + try { + if (osName.startsWith("Mac OS")) { + Class fileMgr = Class.forName("com.apple.eio.FileManager"); + Method openURL = fileMgr.getDeclaredMethod("openURL", new Class[] { String.class }); + openURL.invoke(null, new Object[] { url }); + } else if (osName.startsWith("Windows")) { + Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler " + url); + } else { // assume Unix or Linux + String[] browsers = { "firefox", "opera", "konqueror", "epiphany", "mozilla", + "netscape" }; + String browser = null; + for (int count = 0; count < browsers.length && browser == null; count++) + if (Runtime.getRuntime().exec(new String[] { "which", browsers[count] }) + .waitFor() == 0) + browser = browsers[count]; + if (browser == null) + throw new Exception("Could not find web browser"); + else + Runtime.getRuntime().exec(new String[] { browser, url }); + } + } catch (Exception ex) { + Log.error(ex); + JOptionPane.showMessageDialog(null, ResourceController.getMessage("error.open_browser") + + ":\n" + ex.getLocalizedMessage(), ResourceController + .getMessage("error.open_browser.title"), JOptionPane.WARNING_MESSAGE); + } + } + +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/utils/OverwriteFileDialog.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/utils/OverwriteFileDialog.java new file mode 100644 index 000000000..8c32de5f5 --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/utils/OverwriteFileDialog.java @@ -0,0 +1,84 @@ +package cz.zcu.fav.kiv.editor.graphics.utils; + +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; + +import javax.swing.JDialog; +import javax.swing.JFrame; +import javax.swing.JOptionPane; + +import cz.zcu.fav.kiv.editor.controller.resource.ResourceController; + +/** + * The OverwriteFileDialog class is the dialog used for asking the user if the chosen + * file should be overwritten or not. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class OverwriteFileDialog { + /** The dialog panel with options */ + private final JOptionPane optionPane; + + /** The single instance of the dialog */ + private static OverwriteFileDialog instance; + + /** + * Shows the OverwriteFileDialog dialog with three options : yes, no and cancel. + * + * @param frame + * the parent frame of the option dialog. + * @return the single instance of the dialog. + */ + public static OverwriteFileDialog showDialog(final JFrame frame) { + instance = new OverwriteFileDialog(frame); + return instance; + } + + /** + * Initializes and shows a newly created OverwriteFileDialog dialog with three + * options : yes, no and cancel. + * + * @param frame + * the parent frame of the option dialog. + */ + private OverwriteFileDialog(JFrame frame) { + optionPane = new JOptionPane(ResourceController + .getMessage("save_file.dialog_file_exist.text"), JOptionPane.QUESTION_MESSAGE, + JOptionPane.YES_NO_OPTION, null, new Object[] { + ResourceController.getMessage("button.yes"), + ResourceController.getMessage("button.cancel") }, ResourceController + .getMessage("button.yes")); + final JDialog dialog = new JDialog(frame, ResourceController + .getMessage("save_file.dialog_file_exist.title"), true); + dialog.setContentPane(optionPane); + dialog.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE); + + optionPane.addPropertyChangeListener(new PropertyChangeListener() { + public void propertyChange(PropertyChangeEvent e) { + String prop = e.getPropertyName(); + + if (dialog.isVisible() && (e.getSource() == optionPane) + && (prop.equals(JOptionPane.VALUE_PROPERTY))) { + dialog.setVisible(false); + } + } + }); + dialog.pack(); + dialog.setLocationRelativeTo(frame); + dialog.setVisible(true); + } + + /** + * Gets the user answer chosen in the option dialog. + * + * @return true if the user has chosen the option yes. + */ + public boolean getAnswer() { + String value = optionPane.getValue().toString(); + if (value.equals(ResourceController.getMessage("button.yes"))) + return true; + else + return false; + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/utils/SaveFileDialog.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/utils/SaveFileDialog.java new file mode 100644 index 000000000..dfc88affc --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/utils/SaveFileDialog.java @@ -0,0 +1,88 @@ +package cz.zcu.fav.kiv.editor.graphics.utils; + +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; + +import javax.swing.JDialog; +import javax.swing.JFrame; +import javax.swing.JOptionPane; + +import cz.zcu.fav.kiv.editor.controller.resource.ResourceController; + +/** + * The OverwriteFileDialog class is the dialog used for asking the user if the actual + * file should be saved or not. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class SaveFileDialog { + /** The dialog panel with options */ + private JOptionPane optionPane; + + /** The single instance of the dialog */ + private static SaveFileDialog instance; + + /** + * Shows the SaveFileDialog dialog with three options : yes, no and cancel. + * + * @param frame + * the parent frame of the save dialog. + * @return the single instance of the dialog. + */ + public static SaveFileDialog showDialog(final JFrame frame) { + instance = new SaveFileDialog(frame); + return instance; + } + + /** + * Initializes and shows a newly created SaveFileDialog dialog with three options : + * yes, no and cancel. + * + * @param frame + * the parent frame of the save dialog. + */ + private SaveFileDialog(final JFrame frame) { + optionPane = new JOptionPane(ResourceController + .getMessage("save_file.dialog_save_changes.text"), JOptionPane.QUESTION_MESSAGE, + JOptionPane.YES_NO_CANCEL_OPTION, null, new Object[] { + ResourceController.getMessage("button.yes"), + ResourceController.getMessage("button.no"), + ResourceController.getMessage("button.cancel") }, ResourceController + .getMessage("button.yes")); + final JDialog dialog = new JDialog(frame, ResourceController + .getMessage("save_file.dialog_save_changes.title"), true); + dialog.setContentPane(optionPane); + dialog.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE); + + optionPane.addPropertyChangeListener(new PropertyChangeListener() { + public void propertyChange(PropertyChangeEvent e) { + String prop = e.getPropertyName(); + + if (dialog.isVisible() && (e.getSource() == optionPane) + && (prop.equals(JOptionPane.VALUE_PROPERTY))) { + dialog.setVisible(false); + } + } + }); + + dialog.pack(); + dialog.setLocationRelativeTo(frame); + dialog.setVisible(true); + } + + /** + * Gets the user answer chosen in the save dialog. + * + * @return true if the user has chosen the option yes. + */ + public Boolean getAnswer() { + String value = optionPane.getValue().toString(); + if (value.equals(ResourceController.getMessage("button.yes"))) + return true; + else if (value.equals(ResourceController.getMessage("button.no"))) + return false; + else + return null; + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/utils/SpringUtilities.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/utils/SpringUtilities.java new file mode 100644 index 000000000..20b332bc3 --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/utils/SpringUtilities.java @@ -0,0 +1,106 @@ +package cz.zcu.fav.kiv.editor.graphics.utils; + +import java.awt.Component; +import java.awt.Container; + +import javax.swing.Spring; +import javax.swing.SpringLayout; + +import cz.zcu.fav.kiv.editor.controller.logger.Log; + +/** + * The SpringUtilities class is used for laying out components within a container in + * the compact grid. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class SpringUtilities { + + /** + * Gets the constraints for the specified cell. + * + * @param row + * row where the cell is placed. + * @param col + * column where the cell is placed. + * @param parent + * the parent container of the cell. + * @param cols + * number of columns. + * @return the constraints for the cell. + */ + private static SpringLayout.Constraints getConstraintsForCell(int row, int col, + Container parent, int cols) { + SpringLayout layout = (SpringLayout) parent.getLayout(); + Component c = parent.getComponent(row * cols + col); + + return layout.getConstraints(c); + } + + /** + * Aligns the first rows * cols components of parent + * in a grid. Each component in a column is as wide as the maximum preferred width of the + * components in that column; height is similarly determined for each row. The parent is made + * just big enough to fit them all. + * + * @param rows + * number of rows. + * @param cols + * number of columns. + * @param initialX + * x location to start the grid at. + * @param initialY + * y location to start the grid at. + * @param xPad + * x padding between cells. + * @param yPad + * y padding between cells. + */ + public static void makeCompactGrid(Container parent, int rows, int cols, int initialX, + int initialY, int xPad, int yPad) { + SpringLayout layout; + try { + layout = (SpringLayout) parent.getLayout(); + } catch (ClassCastException exc) { + Log.error(exc); + return; + } + + // Align all cells in each column and make them the same width. + Spring x = Spring.constant(initialX); + for (int c = 0; c < cols; c++) { + Spring width = Spring.constant(0); + for (int r = 0; r < rows; r++) { + width = Spring.max(width, getConstraintsForCell(r, c, parent, cols).getWidth()); + } + for (int r = 0; r < rows; r++) { + SpringLayout.Constraints constraints = getConstraintsForCell(r, c, parent, cols); + constraints.setX(x); + constraints.setWidth(width); + } + x = Spring.sum(x, Spring.sum(width, Spring.constant(xPad))); + } + + // Align all cells in each row and make them the same height. + Spring y = Spring.constant(initialY); + for (int r = 0; r < rows; r++) { + Spring height = Spring.constant(0); + for (int c = 0; c < cols; c++) { + height = Spring.max(height, getConstraintsForCell(r, c, parent, cols).getHeight()); + } + + for (int c = 0; c < cols; c++) { + SpringLayout.Constraints constraints = getConstraintsForCell(r, c, parent, cols); + constraints.setY(y); + constraints.setHeight(height); + } + y = Spring.sum(y, Spring.sum(height, Spring.constant(yPad))); + } + + // Set the parent's size. + SpringLayout.Constraints pCons = layout.getConstraints(parent); + pCons.setConstraint(SpringLayout.SOUTH, y); + pCons.setConstraint(SpringLayout.EAST, x); + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/utils/XmlFilter.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/utils/XmlFilter.java new file mode 100644 index 000000000..e64a2e923 --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/utils/XmlFilter.java @@ -0,0 +1,51 @@ +package cz.zcu.fav.kiv.editor.graphics.utils; + +import java.io.File; + +import javax.swing.filechooser.FileFilter; + +/** + * The XmlFilter class is used for showing only XML files in the directory listing of + * a JFileChooser. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class XmlFilter extends FileFilter { + /** The xml extension */ + public final static String xml = "xml"; + + @Override + public boolean accept(File f) { + if (f.isDirectory()) + return true; + + String extension = getExtension(f); + if ((extension != null) && (extension.equals(xml))) + return true; + + return false; + } + + @Override + public String getDescription() { + return "XML files (*.xml)"; + } + + /** + * Parses the file extension of the input file (part of the file name situated behind '.'). + * + * @param file + * the name of the file. + * @return the extension of the file. + */ + private String getExtension(File file) { + String ext = null; + int i = file.getName().lastIndexOf('.'); + + if (i > 0 && i < file.getName().length() - 1) { + ext = file.getName().substring(i + 1).toLowerCase(); + } + return ext; + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/utils/XslFilter.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/utils/XslFilter.java new file mode 100644 index 000000000..c2e691cb2 --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/graphics/utils/XslFilter.java @@ -0,0 +1,51 @@ +package cz.zcu.fav.kiv.editor.graphics.utils; + +import java.io.File; + +import javax.swing.filechooser.FileFilter; + +/** + * The XmlFilter class is used for showing only XSL files in the directory listing of + * a JFileChooser. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class XslFilter extends FileFilter { + /** The xsl extension */ + public final static String xsl = "xsl"; + + @Override + public boolean accept(File f) { + if (f.isDirectory()) + return true; + + String extension = getExtension(f); + if ((extension != null) && (extension.equals(xsl))) + return true; + + return false; + } + + @Override + public String getDescription() { + return "XSL files (*.xsl)"; + } + + /** + * Parses the file extension of the input file (part of the file name situated behind '.'). + * + * @param file + * the name of the file. + * @return the extension of the file. + */ + private String getExtension(File file) { + String ext = null; + int i = file.getName().lastIndexOf('.'); + + if (i > 0 && i < file.getName().length() - 1) { + ext = file.getName().substring(i + 1).toLowerCase(); + } + return ext; + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/stylesheet/FileStreamOutput.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/stylesheet/FileStreamOutput.java new file mode 100644 index 000000000..7ddf20518 --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/stylesheet/FileStreamOutput.java @@ -0,0 +1,102 @@ +package cz.zcu.fav.kiv.editor.stylesheet; + +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.OutputStream; + +import cz.zcu.fav.kiv.editor.controller.options.OptionItems; + +/** + * The FileStreamOutput class is used for changing chars of ends of line (CR+LF, CR, + * LF) in the output XSL stylesheet file stream. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class FileStreamOutput extends OutputStream { + /** The output XSL file stream */ + private final FileOutputStream file; + + /** The char defining CR (carriage return) */ + private static final int CR = 13; + + /** The char defining CR (line feed) */ + private static final int LF = 10; + + /** + * Initializes a newly created FileStreamOutput with defined file output stream. + * + * @param outputStream + * the output file stream. + */ + public FileStreamOutput(final FileOutputStream outputStream) { + super(); + this.file = outputStream; + } + + @Override + public void write(int b) throws IOException { + file.write(b); + } + + @Override + public void close() throws IOException { + file.close(); + super.close(); + } + + @Override + public void flush() throws IOException { + file.flush(); + } + + @Override + public void write(byte[] b, int off, int len) throws IOException { + replaceNewline(b, off, len); + } + + @Override + public void write(byte[] b) throws IOException { + replaceNewline(b, 0, b.length); + } + + /** + * Replaces chars at ends of lines. There are defined 3 types of chars: CR, LF, or CR+LF. + * + * @param byteArrray + * the array of byte representing a text. + * @param begin + * the begin of the actually processing part of the byte array. + * @param length + * the length of the actually processing part of the byte array. + * @throws IOException + */ + private void replaceNewline(byte[] byteArrray, int begin, int length) throws IOException { + for (int i = begin; i < length; i++) { + switch (OptionItems.NEWLINE) { + case CRLF: + if ((byteArrray[i] == CR) && (byteArrray[i + 1] != LF)) { + file.write(byteArrray[i]); + file.write(LF); + } else if ((byteArrray[i] != CR) && (byteArrray.length > (i + 1)) + && (byteArrray[i + 1] == LF)) { + file.write(byteArrray[i]); + file.write(CR); + } else { + file.write(byteArrray[i]); + } + break; + case CR: + if (byteArrray[i] != LF) + file.write(byteArrray[i]); + break; + case LF: + if (byteArrray[i] != CR) + file.write(byteArrray[i]); + break; + default: + file.write(byteArrray[i]); + } + } + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/stylesheet/OpenFileHadler.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/stylesheet/OpenFileHadler.java new file mode 100644 index 000000000..3b73dd344 --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/stylesheet/OpenFileHadler.java @@ -0,0 +1,146 @@ +package cz.zcu.fav.kiv.editor.stylesheet; + +import org.w3c.dom.Element; +import org.w3c.dom.Node; + +import cz.zcu.fav.kiv.editor.beans.ConfigData; +import cz.zcu.fav.kiv.editor.beans.parameters.Parameter; +import cz.zcu.fav.kiv.editor.beans.properties.Attribute; +import cz.zcu.fav.kiv.editor.beans.properties.Property; +import cz.zcu.fav.kiv.editor.beans.types.Type; +import cz.zcu.fav.kiv.editor.controller.MessageWriter; +import cz.zcu.fav.kiv.editor.controller.errors.ParserException; +import cz.zcu.fav.kiv.editor.controller.resource.ResourceController; + +/** + * The OpenFileHadler class contains methods for processing elements of loading XSL + * stylesheet files. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class OpenFileHadler { + + /** + * Parses node 'parameter' and its value in the input XSL file. + * + * @param node + * the node 'parameter' in the input XSL file. + * @param line + * the number of line where is the node 'parameter' in the input XSL file. + * @param data + * the data containing editor data structure. + */ + public static void parserParameterTag(Element node, int line, ConfigData data) { + String paramName = null; + String paramValue = null; + try { + paramName = node.getAttributeNode(XslTagConst.NAME).getNodeValue(); + // param has both - select and text value + if (node.hasAttribute(XslTagConst.SELECT) && (node.hasChildNodes())) + throw new ParserException(); + + if (node.hasAttribute(XslTagConst.SELECT)) + paramValue = node.getAttribute(XslTagConst.SELECT); + else { + Node text = node.getFirstChild(); // Text + paramValue = text.getNodeValue().toString(); + } + + Parameter param = data.searchParameter(paramName); + if (param != null) { + parserValue(param.getType(), paramValue); + param.setNode(node); + param.setChosen(); + } else { + MessageWriter.writeWarning(ResourceController.getMessage( + "open_file.parameter_exist", line, paramName)); + } + } catch (Throwable ex) { + MessageWriter.writeWarning(ResourceController.getMessage("open_file.parameter_invalid", + line, paramName)); + } + } + + /** + * Parses node 'attribute-set' and its value in the input XSL file. + * + * @param node + * the node 'attribute-set' in the input XSL file. + * @param line + * the number of line where is the node 'attribute-set' in the input XSL file. + * @param data + * the data containing editor data structure. + * @return the editor property corresponding to the node 'attribute-set' + */ + public static Property parserPropertyTag(Element node, int line, ConfigData data) { + String propName = null; + Property prop = null; + try { + propName = node.getAttributeNode(XslTagConst.NAME).getNodeValue(); + + prop = data.searchProperty(propName); + if (prop != null) { + prop.setNode(node); + prop.setChosen(); + } else + MessageWriter.writeWarning(ResourceController.getMessage( + "open_file.attribute_set_exist", line, propName)); + + } catch (Throwable ex) { + MessageWriter.writeWarning(ResourceController.getMessage( + "open_file.attribute_set_invalid", line, propName)); + } + return prop; + } + + /** + * Parses node 'attribute' of the node 'attribute-set' and its value in the input XSL file. + * + * @param node + * the node 'attribute' in the input XSL file. + * @param line + * the number of line where is the node 'attribute' in the input XSL file. + * @param propery + * the parent property of attribute. + */ + public static void parserPropertyAttribute(Element node, int line, Property propery) { + String attrName = null; + String attrValue = null; + try { + attrName = node.getAttributeNode(XslTagConst.NAME).getNodeValue(); + Node text = node.getFirstChild(); // Text + attrValue = text.getNodeValue().toString(); + + Attribute attr = propery.searchAttribute(attrName); + if (attr != null) { + parserValue(attr.getType(), attrValue); + attr.setChosen(true); + attr.setNode(node); + } else + MessageWriter.writeWarning(ResourceController.getMessage( + "open_file.attribute_exist", line, attrName)); + + } catch (Throwable ex) { + MessageWriter.writeWarning(ResourceController.getMessage("open_file.attribute_invalid", + line, attrName)); + } + } + + /** + * Parses the value of node 'parameter' and assignes it to the corresponding parameter. + * Type. + * + * @param type + * the type of parameter. + * @param typeValue + * the new value of the type. + * @throws ParserException + * if the new value is not valid. + */ + private static void parserValue(Type type, String typeValue) throws ParserException { + typeValue = typeValue.trim().replaceAll("'", ""); + type.setLoadedValue(typeValue); + } + +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/stylesheet/SaveFileHandler.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/stylesheet/SaveFileHandler.java new file mode 100644 index 000000000..6967b65c0 --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/stylesheet/SaveFileHandler.java @@ -0,0 +1,334 @@ +package cz.zcu.fav.kiv.editor.stylesheet; + +import org.w3c.dom.Comment; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.Text; + +import cz.zcu.fav.kiv.editor.beans.ConfigData; +import cz.zcu.fav.kiv.editor.beans.common.ParentParameter; +import cz.zcu.fav.kiv.editor.beans.parameters.Parameter; +import cz.zcu.fav.kiv.editor.beans.parameters.TypeParam; +import cz.zcu.fav.kiv.editor.beans.properties.Attribute; +import cz.zcu.fav.kiv.editor.beans.properties.AttributeGroup; +import cz.zcu.fav.kiv.editor.beans.properties.Property; +import cz.zcu.fav.kiv.editor.beans.properties.TypeAttr; +import cz.zcu.fav.kiv.editor.beans.sections.Group; +import cz.zcu.fav.kiv.editor.beans.sections.Section; +import cz.zcu.fav.kiv.editor.beans.sections.Subsection; +import cz.zcu.fav.kiv.editor.controller.options.OptionItems; + +/** + * The SaveFileHandler class contains methods for saving changes of actually opened + * XSL stylesheet file. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class SaveFileHandler { + + /** + * Saves changes of actually opened XSL stylesheet file. + * + * @param doc + * DOM structure of the opened XSL document. + * @param data + * the data containing editor data structure. + */ + public static void saveStylesheet(Document doc, ConfigData data) { + Node stylesheet = doc.getElementsByTagName(XslTagConst.STYLESHEET).item(0); + Node firstNode = null; + boolean newInSection; + boolean isInserted = false; + for (Section section : data.getSectionList()) { + for (Subsection subsection : section.getSubsectionList()) { + if ((OptionItems.REARRANGE_SAVE)&&(subsection.getComment() != null)) + subsection.setComment(null); + firstNode = null; + newInSection = false; + for (Group gr : subsection.getGroupList()) { + for (ParentParameter elem : gr.getElementList()) { + if (elem instanceof Parameter) { + if (OptionItems.REARRANGE_SAVE) + isInserted = rearrangeParameter((Parameter) elem, doc, stylesheet); + else { + isInserted = changeParameter((Parameter) elem, doc, stylesheet, subsection.getComment()); + } + } + if (elem instanceof Property) { + isInserted = changeProperty((Property) elem, doc, stylesheet, subsection.getComment()); + } + if (elem.getNode() != null) { + //first node inserted in section -> insert comment + if ((isInserted)&&(!newInSection)) { + newInSection = true; + firstNode = elem.getNode(); + } + } + } + } + //has comment? + if ((OptionItems.GENERATE_COMMENTS) && (firstNode != null) + && (subsection.getComment() == null) + && (newInSection)) { + Comment comment = doc.createComment(" " + section.getTitle() + " :: " + + subsection.getTitle() + " "); + subsection.setComment(comment); + stylesheet.insertBefore(comment, firstNode); + } + //remove comment - no parameters + if ((subsection.getComment() != null) + && (subsection.getComment().getNextSibling() instanceof Comment)) { + XslParser.removeNode(subsection.getComment()); + subsection.setComment(null); + } + } + } + } + + /** + * Changes the parameter value and places the parameter at the end of stylesheet file. + * + * @param param + * the changing parameter. + * @param doc + * DOM structure of the opened XSL document. + * @param stylesheet + * the node of 'stylesheet' element. + * @return true if the parameter was inserted at the end of stylesheet. + */ + private static boolean rearrangeParameter(Parameter param, Document doc, Node stylesheet) { + if (param.getNode() != null) { + XslParser.removeNode(param.getNode()); + param.setNode(null); + } + // add node at the end + return addNewParameter(param, doc, stylesheet, null); + } + + /** + * Change parameter value in the opened stylesheet file. If the parameter is yet in the opened + * stylesheet then it is inserted at the end of stylesheet. + * + * @param param + * the changing parameter. + * @param doc + * DOM structure of the opened XSL document. + * @param stylesheet + * the node of 'stylesheet' element. + * @param lastNode + * the last node of the same subsection. + * @return true if the parameter was inserted at the end of stylesheet. + */ + private static boolean changeParameter(Parameter param, Document doc, Node stylesheet, Node lastNode) { + if (param.getNode() != null) { + if (!param.isChosen()) { + XslParser.removeNode(param.getNode()); + param.setNode(null); + } else { + Node newNode = createParamElement(param, doc); + param.getNode().getParentNode().replaceChild(newNode, param.getNode()); + param.setNode(newNode); + } + return false; + } + return addNewParameter(param, doc, stylesheet, lastNode); + } + + /** + * Inserts a new parameter at the end of stylesheet file + * or after the 'lastNode' it it is not null. + * + * @param param + * the changing parameter. + * @param doc + * DOM structure of the opened XSL document. + * @param stylesheet + * the node of 'stylesheet' element. + * @param lastNode + * the last node of the same subsection. + * @return true if the parameter was inserted at the end of stylesheet file. + */ + private static boolean addNewParameter(Parameter param, Document doc, Node stylesheet, Node lastNode) { + if (param.isChosen()) { + Node node = createParamElement(param, doc); + if (lastNode != null) + stylesheet.insertBefore(node, lastNode.getNextSibling()); + else + stylesheet.appendChild(node); + param.setNode(node); + return true; + } + return false; + } + + /** + * Changes or inserts property in the stylesheet file. + * + * @param prop + * the changing property. + * @param doc + * DOM structure of the opened XSL document. + * @param stylesheet + * the node of 'stylesheet' element. + * @return true if the property was inserted at the end of stylesheet file. + */ + private static boolean changeProperty(Property prop, Document doc, Node stylesheet, Node lastNode) { + if ((prop.getNode() == null) && (prop.isChosen())) { + Element attrSetElem = doc.createElement(XslTagConst.ATTRIBUTE_SET); + attrSetElem.setAttribute(XslTagConst.NAME, prop.getName()); + changeAttributes(prop.getAttributeGroupList(), attrSetElem, doc); + // add new property + if (attrSetElem.getChildNodes().getLength() > 0) { + if (lastNode != null) + stylesheet.insertBefore(attrSetElem, lastNode.getNextSibling()); + else + stylesheet.appendChild(attrSetElem); + prop.setNode(attrSetElem); + return true; + } + return false; + } + // property is not chosen and was in the opened stylesheet file + if ((prop.getNode() != null) && (!prop.isChosen())) { + XslParser.removeNode(prop.getNode()); + return false; + } + + if ((prop.getNode() != null) && (prop.isChosen())) { + changeAttributes(prop.getAttributeGroupList(), prop.getNode(), doc); + // move property to the end + if (OptionItems.REARRANGE_SAVE) { + stylesheet.appendChild(prop.getNode()); + return true; + } + return false; + } + return false; + } + + /** + * Changes property attributes and their values. + * + * @param attributeGroups + * the groups of attributes of the parent property. + * @param parent + * the node of parent property. + * @param doc + * DOM structure of the opened XSL document. + */ + private static void changeAttributes(AttributeGroup[] attributeGroups, Node parent, Document doc) { + Node node; + for (AttributeGroup panel : attributeGroups) + for (Attribute attr : panel.getAttributeList()) { + if (attr.isChosen()) { + if (attr.getNode() != null) { + attr.getNode().setTextContent(createNewValueAttr(attr.getType())); + } else { + node = createAttributeElement(attr, doc); + parent.appendChild(node); + attr.setNode(node); + } + } else { + if (attr.getNode() != null) { + XslParser.removeNode(attr.getNode()); + attr.setNode(null); + } + } + } + } + + /** + * Creates a new node from parameter. + * + * @param param + * the parameter used for creating the node. + * @param doc + * DOM structure of the opened XSL document. + * @return the new parameter node. + */ + private static Element createParamElement(Parameter param, Document doc) { + Element paramElem = doc.createElement(XslTagConst.PARAM); + // name + paramElem.setAttribute(XslTagConst.NAME, param.getName()); + + String paramValue = createNewValueParam(param.getType()); + + if (OptionItems.USE_PARAM_SELECT) { + paramElem.setAttribute(XslTagConst.SELECT, addApostrophe(paramValue)); + } else { + Text text = doc.createTextNode(paramValue); + paramElem.appendChild(text); + } + + return paramElem; + } + + /** + * Creates a new node from attribute. + * + * @param attr + * the attribute used for creating the node. + * @param doc + * DOM structure of the opened XSL document. + * @return the new attribute node. + */ + private static Element createAttributeElement(Attribute attr, Document doc) { + Element element = doc.createElement(XslTagConst.ATTRIBUTE); + + Text text = doc.createTextNode(createNewValueAttr(attr.getType())); + element.appendChild(text); + + // name + element.setAttribute(XslTagConst.NAME, attr.getName()); + return element; + } + + /** + * Creates a new value content of the parameter node. + * + * @param type + * the parameter type with value. + * @return the new value content of the parameter node. + */ + private static String createNewValueParam(TypeParam type) { + StringBuilder value = new StringBuilder(type.getValue()); + if (type.getUnit() != null) + value.append(type.getUnit().getValue()); + return value.toString(); + } + + /** + * Creates a new value content of the attribute node. + * + * @param types + * the attribute type with value. + * @return the new value content of the attribute node. + */ + private static String createNewValueAttr(TypeAttr type) { + StringBuilder attrValue = new StringBuilder(); + attrValue.append(type.getValue().toString()); + if (type.getUnit() != null) + attrValue.append(type.getUnit().getValue()); + + return attrValue.toString().trim(); + } + + /** + * Adds apostrophes around the value if the value isnt't a number. + * + * @param value + * the changing value. + * @return value with apostrophes if the value isn't a number. + */ + private static String addApostrophe(String value) { + try { + Float.parseFloat(value); + } catch (NumberFormatException e) { + value = "'" + value.trim() + "'"; + } + return value; + } + +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/stylesheet/XslParser.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/stylesheet/XslParser.java new file mode 100644 index 000000000..624a32146 --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/stylesheet/XslParser.java @@ -0,0 +1,214 @@ +package cz.zcu.fav.kiv.editor.stylesheet; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.OutputStreamWriter; +import java.nio.charset.Charset; +import java.util.ArrayList; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.parsers.SAXParser; +import javax.xml.parsers.SAXParserFactory; +import javax.xml.transform.OutputKeys; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamResult; + +import org.w3c.dom.DOMImplementation; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.traversal.DocumentTraversal; +import org.w3c.dom.traversal.NodeFilter; +import org.w3c.dom.traversal.NodeIterator; +import org.xml.sax.SAXException; +import org.xml.sax.XMLReader; + +import cz.zcu.fav.kiv.editor.beans.ConfigData; +import cz.zcu.fav.kiv.editor.controller.errors.OpenFileException; +import cz.zcu.fav.kiv.editor.controller.errors.SaveFileException; +import cz.zcu.fav.kiv.editor.controller.errors.XslParserException; +import cz.zcu.fav.kiv.editor.controller.logger.Log; +import cz.zcu.fav.kiv.editor.controller.options.OptionItems; + +/** + * The XslParser class contains methods for reading and saving XSL stylesheet files. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class XslParser { + + /** The size of indent used in output XSL files */ + public static final int INDENT = 2; + + /** + * Opens and reads the input XSL file. Creates a DOM structure of the opened XSL document. + * + * @param file + * the name of the XSL file that will be opened. + * @param configData + * the data containing editor data structure. + * @return DOM structure of the opened XSL document. + * @throws OpenFileException + * if the file cannot be opened. + */ + public static Document readXsltFile(String file, ConfigData configData) + throws OpenFileException { + Document doc = null; + try { + SAXParserFactory spf = SAXParserFactory.newInstance(); + spf.setValidating(false); + spf.setNamespaceAware(true); + + SAXParser sp = spf.newSAXParser(); + XMLReader parser = sp.getXMLReader(); + parser.setErrorHandler(new XslParserException()); + + XsltFileHandler handler = new XsltFileHandler(configData); + parser.setContentHandler(handler); + parser.setProperty("http://xml.org/sax/properties/lexical-handler", handler); + parser.setProperty("http://xml.org/sax/properties/declaration-handler", handler); + + parser.parse(file); + + doc = handler.getDocument(); + } catch (SAXException ex) { + Log.error(ex); + throw new OpenFileException(ex.getMessage()); + } catch (Exception ex) { + Log.error(ex); + throw new OpenFileException(); + } + return doc; + } + + /** + * Saves changes of actually opened XSL stylesheet file and saves the DOM structure to the XSL file. + * + * @param file + * the name of the XSL file that will be saved. + * @param document + * the DOM structure of the file that will be saved. + * @throws SaveFileException + * if the file cannot be saved. + */ + public static void saveXsltFile(String file, Document document, ConfigData configData) throws SaveFileException { + SaveFileHandler.saveStylesheet(document, configData); + try { + TransformerFactory tf = TransformerFactory.newInstance(); + tf.setAttribute("indent-number", INDENT); + Transformer writer = tf.newTransformer(); + writer.setOutputProperty(OutputKeys.INDENT, "yes"); + writer.setOutputProperty("encoding", OptionItems.ENCODING); + + writer.setOutputProperty(OutputKeys.METHOD, "xml"); + + OutputStreamWriter osw = new OutputStreamWriter(new FileStreamOutput( + new FileOutputStream(new File(file))), Charset.forName(OptionItems.ENCODING)); + + writer.transform(new DOMSource(document), new StreamResult(osw)); + } catch (Exception ex) { + Log.error(ex); + throw new SaveFileException(ex); + } + } + + /** + * Creates a new DOM structure of an empty XSL stylesheet. + * + * @return a DOM structure of an empty XSL stylesheet. + */ + public static Document createXsltFile() { + Document doc = null; + try { + DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); + DocumentBuilder builder = dbf.newDocumentBuilder(); + DOMImplementation impl = builder.getDOMImplementation(); + doc = impl.createDocument(OptionItems.XSL_NAMESPACE, "xsl:stylesheet", null); + // XSL namespace + Element element = doc.getDocumentElement(); + element.setAttribute("xmlns:xsl", OptionItems.XSL_NAMESPACE); + // FO namespace + if (OptionItems.ADD_FO_NAMESPACE) + element.setAttribute("xmlns:fo", OptionItems.FO_NAMESPACE); + element.setAttribute("version", OptionItems.STYLESHEET_VERSION); + + // add imports + addImportFiles(doc); + } catch (ParserConfigurationException ex) { + Log.error(ex); + } + return doc; + } + + /** + * Adds to the DOM structure elements defining import of other XSL stylesheets. + * + * @param document + * the DOM structure of the XSL stylesheet. + */ + private static void addImportFiles(Document document) { + Element importElem; + int lastChar = 0; + Pattern pattern = Pattern.compile(";"); + Matcher matcher = pattern.matcher(OptionItems.IMPORT_FILE); + while (matcher.find()) { + importElem = document.createElement("xsl:import"); + importElem.setAttribute("href", OptionItems.IMPORT_FILE.substring(lastChar, + matcher.start()).trim()); + lastChar = matcher.end(); + document.getDocumentElement().appendChild(importElem); + } + if (lastChar < OptionItems.IMPORT_FILE.trim().length()) { + importElem = document.createElement("xsl:import"); + importElem.setAttribute("href", OptionItems.IMPORT_FILE.substring(lastChar, + OptionItems.IMPORT_FILE.trim().length())); + document.getDocumentElement().appendChild(importElem); + } + } + + /** + * Removes all comments in DOM structure of the XSL stylesheet. + * + * @param document + * the DOM structure of the XSL stylesheet. + */ + public static void removeComments(Document document) { + NodeIterator nodeList = ((DocumentTraversal) document).createNodeIterator(document + .getDocumentElement(), NodeFilter.SHOW_COMMENT, null, false); + Node comment; + List commentList = new ArrayList(); + while ((comment = nodeList.nextNode()) != null) + commentList.add(comment); + removeNodes(commentList); + } + + /** + * Removes all nodes from the list. + * + * @param nodeList + * the list of nodes that will be removed. + */ + public static void removeNodes(List nodeList) { + for (Node node : nodeList) { + removeNode(node); + } + } + + /** + * Remove the input node. + * + * @param node + * the node that will be removed. + */ + public static void removeNode(Node node) { + node.getParentNode().removeChild(node); + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/stylesheet/XslTagConst.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/stylesheet/XslTagConst.java new file mode 100644 index 000000000..7d7d6920a --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/stylesheet/XslTagConst.java @@ -0,0 +1,25 @@ +package cz.zcu.fav.kiv.editor.stylesheet; + +/** + * The XslTagConst class contains elements used in XSL stylesheet files. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class XslTagConst { + public static final String STYLESHEET = "xsl:stylesheet"; + + public static final String IMPORT = "xsl:import"; + + public static final String HREF = "href"; + + public static final String PARAM = "xsl:param"; + + public static final String NAME = "name"; + + public static final String SELECT = "select"; + + public static final String ATTRIBUTE_SET = "xsl:attribute-set"; + + public static final String ATTRIBUTE = "xsl:attribute"; +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/stylesheet/XsltFileHandler.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/stylesheet/XsltFileHandler.java new file mode 100644 index 000000000..2c06a0a54 --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/stylesheet/XsltFileHandler.java @@ -0,0 +1,237 @@ +package cz.zcu.fav.kiv.editor.stylesheet; + +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; +import java.util.Stack; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; + +import org.w3c.dom.Comment; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Text; +import org.xml.sax.Attributes; +import org.xml.sax.ContentHandler; +import org.xml.sax.DTDHandler; +import org.xml.sax.Locator; +import org.xml.sax.SAXException; +import org.xml.sax.ext.DeclHandler; + +import org.xml.sax.ext.LexicalHandler; +import org.xml.sax.helpers.DefaultHandler; + +import cz.zcu.fav.kiv.editor.beans.ConfigData; +import cz.zcu.fav.kiv.editor.beans.properties.Property; +import cz.zcu.fav.kiv.editor.config.constants.TagDefinition; +import cz.zcu.fav.kiv.editor.controller.resource.ResourceController; + +/** + * The XsltFileHandler class reads the input XSL stylesheet file element by element and creates from them a DOM structure. + * Simultaneously reports all errros in the input XSL file. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class XsltFileHandler extends DefaultHandler implements ContentHandler, LexicalHandler, + DeclHandler, DTDHandler { + private ConfigData data; + + // locator + private Locator locator; + + private Document document; + + private Element element = null; + + private Element stylesheet; + + private Comment comment; + + private Stack stack; + + private int parameterBeginLine; + + private int attributeBeginLine; + + private Property property; + + private Map namespaces; + + private boolean insideCDATA; + + // string buffers + private StringBuffer commentBuffer = new StringBuffer(TagDefinition.BUFFER_SIZE); + + private StringBuffer elementBuffer = new StringBuffer(TagDefinition.BUFFER_SIZE); + + private StringBuffer cdataBuffer = new StringBuffer(TagDefinition.BUFFER_SIZE); + + public XsltFileHandler(ConfigData data) { + super(); + this.data = data; + } + + public void startDocument() { + try { + DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); + DocumentBuilder builder = dbf.newDocumentBuilder(); + + document = builder.newDocument(); + stylesheet = document.createElement(XslTagConst.STYLESHEET); + } catch (Exception ex) { + + } + stack = new Stack(); + namespaces = new HashMap(); + } + + public void startElement(String namespaceURI, String localName, String qName, Attributes atts) + throws SAXException { + if (qName.equals(XslTagConst.STYLESHEET)) { + //attributes + if (atts.getLength() > 0) + appendAttributes(stylesheet, atts); + + // namespaces + if (namespaces.size() > 0) { + appendNamespaces(stylesheet); + } + + document.appendChild(stylesheet); + stack.push(stylesheet); + } else { + if (stack.empty()) + throw new SAXException(ResourceController + .getMessage("open_file.stylesheet_invalid")); + element = document.createElement(qName); + //attributes + if (atts.getLength() > 0) + appendAttributes(element, atts); + + // namespaces + if (namespaces.size() > 0) + appendNamespaces(element); + + stack.peek().appendChild(element); + stack.push(element); + } + + if (qName.equals(XslTagConst.PARAM)) { + parameterBeginLine = locator.getLineNumber(); + } else if (qName.equals(XslTagConst.ATTRIBUTE)) { + attributeBeginLine = locator.getLineNumber(); + } else if ((qName.equals(XslTagConst.ATTRIBUTE_SET)) + && (stack.peek().getParentNode().getNodeName().equals(XslTagConst.STYLESHEET))) { + property = OpenFileHadler + .parserPropertyTag(stack.peek(), locator.getLineNumber(), data); + } + + elementBuffer.setLength(0); + } + + private void appendNamespaces(Element node) { + for (Iterator it = namespaces.entrySet().iterator(); it.hasNext();) { + Map.Entry entry = (Map.Entry) it.next(); + if (entry.getKey().toString().length() > 0) + node.setAttributeNS("http://www.w3.org/2000/xmlns/", "xmlns:" + + entry.getKey().toString(), entry.getValue().toString()); + else + node.setAttributeNS("http://www.w3.org/2000/xmlns/", "xmlns", entry.getValue() + .toString()); + } + namespaces = new HashMap(); + } + + private void appendAttributes(Element node, Attributes atts) { + for (int i = 0; i < atts.getLength(); i++) { + node.setAttribute(atts.getQName(i), atts.getValue(i)); + } + } + + public void endElement(String namespaceURI, String localName, String qName) { + if (elementBuffer.length() > 0) { + if (elementBuffer.toString().trim().length() > 0) { + Text text = document.createTextNode(elementBuffer.toString().trim()); + stack.peek().appendChild(text); + } + elementBuffer.setLength(0); + } + + if (qName.equals(XslTagConst.PARAM) + && (stack.peek().getParentNode().getNodeName().equals(XslTagConst.STYLESHEET))) { + OpenFileHadler.parserParameterTag(stack.peek(), parameterBeginLine, data); + } else if (qName.equals(XslTagConst.ATTRIBUTE_SET)) { + property = null; + } else if ((qName.equals(XslTagConst.ATTRIBUTE)) && (property != null)) { + OpenFileHadler.parserPropertyAttribute(stack.peek(), attributeBeginLine, property); + } + + stack.pop(); + } + + public void characters(char[] ch, int start, int length) { + if (insideCDATA) + cdataBuffer.append(ch, start, length); + else + elementBuffer.append(ch, start, length); + } + + public void startPrefixMapping(String prefix, String uri) throws SAXException { + namespaces.put(prefix, uri); + } + + public void setDocumentLocator(Locator locator) { + this.locator = locator; + } + + public void comment(char[] ch, int start, int length) throws SAXException { + commentBuffer.append(ch, start, length); + comment = document.createComment(commentBuffer.toString()); + if (!stack.empty()) + stack.peek().appendChild(comment); + else + document.appendChild(comment); + commentBuffer.setLength(0); + } + + public void endCDATA() throws SAXException { + insideCDATA = false; + stack.peek().appendChild(document.createCDATASection(cdataBuffer.toString())); + cdataBuffer.setLength(0); + } + + public void endDTD() throws SAXException { + } + + public void endEntity(String name) throws SAXException { + } + + public void startCDATA() throws SAXException { + insideCDATA = true; + } + + public void startDTD(String name, String publicId, String systemId) throws SAXException { + } + + public void startEntity(String name) throws SAXException { + } + + public Document getDocument() { + return document; + } + + public void attributeDecl(String arg0, String arg1, String arg2, String arg3, String arg4) + throws SAXException { + } + + public void elementDecl(String arg0, String arg1) throws SAXException { + } + + public void externalEntityDecl(String arg0, String arg1, String arg2) throws SAXException { + } + + public void internalEntityDecl(String arg0, String arg1) throws SAXException { + } + +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/template/TemplateConst.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/template/TemplateConst.java new file mode 100644 index 000000000..89d87d08a --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/template/TemplateConst.java @@ -0,0 +1,55 @@ +package cz.zcu.fav.kiv.editor.template; + +import java.io.File; + +import cz.zcu.fav.kiv.editor.config.constants.FileConst; + +/** + * The TemplateConst class contains enumarated lists of elements used in XML template + * and XML schema of the template and path and name of the default template. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class TemplateConst { + /** The size of buffer used for reading element contents */ + public static int BUFFER_SIZE = 300; + + /** The directory where default template is stored */ + public static final String CONF_FILE_TEMPLATE_DIR = "templates" + File.separator; + + /** The file with default template */ + public static final String CONF_FILE_TEMPLATE = CONF_FILE_TEMPLATE_DIR + "template.xml"; + + /** The XML schema of the file with default template */ + public static final String CONF_FILE_TEMPLATE_XSD = FileConst.CONF_FILE_XSD_DIR + + "template.xsd"; + + /** + * The enumerated list of elements used in templates. + */ + public static enum TemplateTags { + ATTRIBUTE_SET("attribute-set"), ATTRIBUTE("attribute"), PARAMETER("parameter"); + + String value; + + TemplateTags(String value) { + this.value = value; + } + + /** + * Returns predefined constant of element according to the element name. + * + * @param key + * the name of element. + * @return a constant of element with defined name. + */ + public static TemplateTags getValue(String key) { + for (TemplateTags type : values()) { + if (type.value.equals(key)) + return type; + } + return null; + } + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/template/TemplateController.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/template/TemplateController.java new file mode 100644 index 000000000..c9afc1d5f --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/template/TemplateController.java @@ -0,0 +1,63 @@ +package cz.zcu.fav.kiv.editor.template; + +import cz.zcu.fav.kiv.editor.beans.ConfigData; +import cz.zcu.fav.kiv.editor.controller.MessageWriter; +import cz.zcu.fav.kiv.editor.controller.errors.ConfigException; +import cz.zcu.fav.kiv.editor.controller.errors.FileNotFoundException; +import cz.zcu.fav.kiv.editor.controller.logger.Log; +import cz.zcu.fav.kiv.editor.controller.resource.ResourceController; + +/** + * The TemplateController class contains method for reading templates. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class TemplateController { + + /** The instance of TemplateController */ + private static TemplateController instance; + + /** + * Static methods return instance of TemplateController. If the + * instance is null, initializes a new one. + * + * @return the instance of TemplateController. + */ + public static TemplateController getInstance() { + if (instance != null) + return instance; + return new TemplateController(); + } + + /** The parser of XML templates */ + private TemplateParser parser; + + /** + * Initializes a newly created TemplateController. Simultaneously initializes + * new TemplateParser. + */ + private TemplateController() { + parser = new TemplateParser(); + } + + /** + * Reads a template defined by its path templateFile. + * + * @param configData + * the data containing editor data structure. + * @param templateFile + * the path to the file with template. + * @throws ConfigException + * if the template or its XML schema isn't well-formed. + * @throws FileNotFoundException + * if the template or its XML schema doesn't exist. + */ + public void readTemplate(ConfigData configData, String templateFile) throws ConfigException, + FileNotFoundException { + MessageWriter.writeInfo(ResourceController.getMessage( + "new_file_template.load_template.title", TemplateConst.CONF_FILE_TEMPLATE)); + parser.readTemplate(configData, templateFile); + Log.info("info.template_control.load_template", TemplateConst.CONF_FILE_TEMPLATE); + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/template/TemplateParser.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/template/TemplateParser.java new file mode 100644 index 000000000..bb8bb4919 --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/template/TemplateParser.java @@ -0,0 +1,86 @@ +package cz.zcu.fav.kiv.editor.template; + +import java.io.IOException; +import java.io.InputStream; + +import javax.xml.parsers.SAXParser; +import javax.xml.parsers.SAXParserFactory; + +import org.xml.sax.SAXException; +import org.xml.sax.XMLReader; + +import cz.zcu.fav.kiv.editor.beans.ConfigData; +import cz.zcu.fav.kiv.editor.controller.errors.ConfigException; +import cz.zcu.fav.kiv.editor.controller.errors.FileNotFoundException; +import cz.zcu.fav.kiv.editor.controller.errors.XslParserException; +import cz.zcu.fav.kiv.editor.controller.logger.Log; + +/** + * The TemplateParser class contains method for parsing template files. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class TemplateParser { + /** The parser key defining XML schema language */ + private static final String JAXP_SCHEMA_LANGUAGE = "http://java.sun.com/xml/jaxp/properties/schemaLanguage"; + + /** The constants defining XML schema language */ + private static final String W3C_XML_SCHEMA = "http://www.w3.org/2001/XMLSchema"; + + /** The key defining XML schema */ + private static final String JAXP_SCHEMA_SOURCE = "http://java.sun.com/xml/jaxp/properties/schemaSource"; + + /** The XML parser used for reading template files */ + private XMLReader parser; + + /** + * Initializes a newly created TemplateParser. Sets up the SAX parser used for + * parsing. + */ + public TemplateParser() { + SAXParserFactory spf = SAXParserFactory.newInstance(); + spf.setValidating(true); + spf.setNamespaceAware(true); + + try { + SAXParser sp = spf.newSAXParser(); + sp.setProperty(JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA); + parser = sp.getXMLReader(); + parser.setErrorHandler(new XslParserException()); + } catch (Exception ex) { + Log.error(ex); + } + } + + /** + * Parses the file with template. + * + * @param configData + * the data containing editor data structure. + * @param templateFile + * the path to the file with template. + * @throws ConfigException + * if the template or its XML schema isn't well-formed. + * @throws FileNotFoundException + * if the template or its XML schema doesn't exist. + */ + public void readTemplate(ConfigData configData, String templateFile) throws ConfigException, + FileNotFoundException { + InputStream xsdFile = TemplateParser.class.getResourceAsStream(TemplateConst.CONF_FILE_TEMPLATE_XSD); + if (xsdFile == null) + throw new FileNotFoundException(TemplateConst.CONF_FILE_TEMPLATE_XSD); + + TemplateXmlHandler handler = new TemplateXmlHandler(configData, templateFile); + parser.setContentHandler(handler); + try { + parser.setProperty(JAXP_SCHEMA_SOURCE, xsdFile); + parser.parse(templateFile); + } catch (IOException ex) { + throw new FileNotFoundException(templateFile); + } catch (SAXException ex) { + throw new ConfigException(templateFile, ex.getMessage()); + } + } + +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/template/TemplateXmlHandler.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/template/TemplateXmlHandler.java new file mode 100644 index 000000000..8637b047c --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/template/TemplateXmlHandler.java @@ -0,0 +1,172 @@ +package cz.zcu.fav.kiv.editor.template; + +import org.xml.sax.Attributes; +import org.xml.sax.Locator; +import org.xml.sax.helpers.DefaultHandler; + +import cz.zcu.fav.kiv.editor.beans.ConfigData; +import cz.zcu.fav.kiv.editor.beans.parameters.Parameter; +import cz.zcu.fav.kiv.editor.beans.properties.Attribute; +import cz.zcu.fav.kiv.editor.beans.properties.Property; +import cz.zcu.fav.kiv.editor.config.constants.FileConst; +import cz.zcu.fav.kiv.editor.config.constants.TagDefinition; +import cz.zcu.fav.kiv.editor.controller.MessageWriter; +import cz.zcu.fav.kiv.editor.controller.errors.ParserException; +import cz.zcu.fav.kiv.editor.controller.resource.ResourceController; +import cz.zcu.fav.kiv.editor.template.TemplateConst.TemplateTags; + +/** + * The TemplateXmlHandler class is used for parsing file with template. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class TemplateXmlHandler extends DefaultHandler { + /** The locator specifying actual line number */ + private Locator locator; + + /** The data containing editor data structure */ + private ConfigData configData; + + /** The name of the file with template */ + private String templateFile; + + /** The number of the line with property element */ + private int propertyLine; + + /** The property with attribute */ + private Property property; + + /** The list of attribute values */ + private String attributeValue; + + /** The name of parameter */ + private String parameterValue; + + /** The flag specifying whether the parser is inside attribute element */ + private boolean insideAttributeElement = false; + + /** The flag specifying whether the parser is inside parameter element */ + private boolean insideParameterElement = false; + + /** The string buffer for content of attribute element */ + private StringBuffer attributeBuffer = new StringBuffer(TagDefinition.BUFFER_SIZE); + + /** The string buffer for content of parameter element */ + private StringBuffer parameterBuffer = new StringBuffer(TagDefinition.BUFFER_SIZE); + + /** + * Initializes a newly created TemplateXmlHandler with ConfigData + * and template name templateFile. + * + * @param configData + * the data containing editor data structure. + * @param template + * the name of the file with template. + */ + public TemplateXmlHandler(ConfigData configData, String template) { + this.configData = configData; + this.templateFile = template; + } + + @Override + public void startElement(String namespaceURI, String localName, String qName, Attributes atts) { + TemplateTags enumTag = TemplateConst.TemplateTags.getValue(qName); + if (enumTag != null) + switch (enumTag) { + case ATTRIBUTE_SET: + property = configData.searchProperty(atts.getValue(0)); + if (property == null) + MessageWriter.writeWarning(ResourceController.getMessage("parser.template.find_property", FileConst.CONF_FILE_CONFIG, atts.getValue(0), templateFile, locator.getLineNumber())); + else + property.setChosen(); + + this.propertyLine = locator.getLineNumber(); + break; + case ATTRIBUTE: + insideAttributeElement = true; + attributeBuffer.setLength(0); + attributeValue = atts.getValue(0); + break; + case PARAMETER: + insideParameterElement = true; + parameterBuffer.setLength(0); + parameterValue = atts.getValue(0); + break; + } + } + + @Override + public void endElement(String namespaceURI, String localName, String qName) { + TemplateTags enumTag = TemplateConst.TemplateTags.getValue(qName); + if (enumTag != null) + switch (enumTag) { + case ATTRIBUTE: + insideAttributeElement = false; + try { + if (property != null) + changeAttribute(attributeBuffer.toString()); + } catch (ParserException ce) { + MessageWriter.writeWarning(ResourceController.getMessage("parser.template.parse_attribute_value", templateFile, attributeBuffer.toString(), this.propertyLine)); + } + break; + case PARAMETER: + insideParameterElement = false; + try { + changeParameter(); + } catch (ParserException ce) { + MessageWriter.writeWarning(ResourceController.getMessage("parser.template.parse_parameter_value", templateFile, attributeBuffer.toString(), this.propertyLine)); + } + break; + } + } + + @Override + public void characters(char[] ch, int start, int length) { + if (insideAttributeElement) { + attributeBuffer.append(ch, start, length); + } else if (insideParameterElement) { + parameterBuffer.append(ch, start, length); + } + } + + /** + * Change type value of the actual parsed parameter. + * + * @throws ParserException + * if the parameter value is not valid. + */ + private void changeParameter() throws ParserException { + Parameter parameter = configData.searchParameter(parameterBuffer.toString()); + if (parameter == null) + MessageWriter.writeWarning(ResourceController.getMessage("parser.template.find_parameter", FileConst.CONF_FILE_CONFIG, parameterBuffer.toString(), templateFile, locator.getLineNumber())); + else { + // set new parameter value + parameter.getType().setLoadedValue(parameterValue); + parameter.setChosen(); + } + + } + + /** + * Change type values of the actual parsed attribute specified by name. + * + * @param attrName + * an attribute name. + * @throws ParserException + * if the attribute values are not valid. + */ + private void changeAttribute(String attrName) throws ParserException { + Attribute searchAttr = property.searchAttribute(attrName); + if (searchAttr != null) { + if (attributeValue != null) + searchAttr.getType().setLoadedValue(attributeValue); + searchAttr.setChosen(true); + } else + MessageWriter.writeWarning(ResourceController.getMessage("parser.template.find_attribute", FileConst.CONF_FILE_ATTRIBUTES, attributeBuffer.toString(), templateFile, this.propertyLine)); + } + + public void setDocumentLocator(Locator locator) { + this.locator = locator; + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/utils/ErrorDialog.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/utils/ErrorDialog.java new file mode 100644 index 000000000..9665df66a --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/utils/ErrorDialog.java @@ -0,0 +1,27 @@ +package cz.zcu.fav.kiv.editor.utils; + +import javax.swing.JOptionPane; + +import cz.zcu.fav.kiv.editor.controller.resource.ResourceController; +import cz.zcu.fav.kiv.editor.graphics.MainFrame; + +/** + * The ErrorDialog class displays the error dialog containing the description of the + * application error. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class ErrorDialog { + + /** + * Shows the error dialog with the description of the input error. + * + * @param error + * the error to display in the error dialog. + */ + public static void showDialog(Exception error) { + JOptionPane.showMessageDialog(MainFrame.getInstance(), error.getStackTrace(), + ResourceController.getMessage("error_dialog.title"), JOptionPane.ERROR_MESSAGE); + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/utils/RunBatch.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/utils/RunBatch.java new file mode 100644 index 000000000..a08eb16a6 --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/utils/RunBatch.java @@ -0,0 +1,143 @@ +package cz.zcu.fav.kiv.editor.utils; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; + +import cz.zcu.fav.kiv.editor.controller.MessageWriter; +import cz.zcu.fav.kiv.editor.controller.logger.Log; + +/** + * The StreamWriter class is used for reporting messages and errors generated during + * lauch of the batch file. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +class StreamWriter extends Thread { + /** The constant defining error message */ + public static final String ERROR = "error"; + + /** The constant defining output message */ + public static final String OUTPUT = "output"; + + /** The input message stream */ + private InputStream inputStream; + + /** The type of output message */ + private String type; + + /** + * Initializes a newly created StreamWriter with defined InputStream + * and message type. + * + * @param is + * the input stream. + * @param type + * the type of message. + */ + public StreamWriter(InputStream is, String type) { + this.inputStream = is; + this.type = type; + } + + /** + * Launches the message writer. + */ + public void run() { + try { + InputStreamReader input = new InputStreamReader(inputStream); + BufferedReader reader = new BufferedReader(input); + String line = null; + while ((line = reader.readLine()) != null) { + if (type.equals(ERROR)) + MessageWriter.writeEmphasis(line); + else + MessageWriter.write(line); + } + } catch (IOException ioe) { + Log.error(ioe); + } + } +} + +/** + * The RunBatch class launches a batch file defined by user. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class RunBatch { + /** The constant defining file separator */ + private static final String FILE_SEPARATOR = "\\" + File.separator; + + /** The in the batch file that determine place where the actual XSL stylesheet is placed */ + private static final String XSL = "\\[XSL\\]"; + + /** The constant defining quote */ + private static final String QUOTE = "\""; + + /** The name of the auxiliary batch file */ + public static final String RUN_BAT = "transformation.bat"; + + /** + * Executes the batch file. + * + * @throws Throwable + * if the batch file cannot be executed. + */ + public static void execBatch() throws Throwable { + String osName = System.getProperty("os.name"); + String[] cmd = new String[3]; + if (osName.startsWith("Windows")) { + cmd[0] = "cmd.exe"; + cmd[1] = "/C"; + cmd[2] = RUN_BAT; + } + + Runtime rt = Runtime.getRuntime(); + Process proc = rt.exec(cmd); + // any error message? + StreamWriter errorGobbler = new StreamWriter(proc.getErrorStream(), StreamWriter.ERROR); + + // any output? + StreamWriter outputGobbler = new StreamWriter(proc.getInputStream(), StreamWriter.OUTPUT); + + // kick them off + errorGobbler.start(); + outputGobbler.start(); + } + + /** + * Replace the mark [XSL] in the batch file by the actual opened XSL stylesheet file. + * + * @param batchName + * the name of the batch file. + * @param xslName + * the name of the actually opened XSL stylesheet file. + * @throws Throwable + * if the batch file is invalid. + */ + public static void replaceXslName(String batchName, String xslName) throws Throwable { + FileReader fileRead = new FileReader(batchName); + BufferedReader in = new BufferedReader(fileRead); + FileWriter fw = new FileWriter(RUN_BAT); + BufferedWriter out = new BufferedWriter(fw); + + String line; + while ((line = in.readLine()) != null) { + line = line.replaceAll(XSL, QUOTE + + xslName.replaceAll(FILE_SEPARATOR, FILE_SEPARATOR + FILE_SEPARATOR) + QUOTE); + + out.write(line); + out.newLine(); + } + fileRead.close(); + out.close(); + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/utils/TagControl.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/utils/TagControl.java new file mode 100644 index 000000000..7adb15a78 --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/utils/TagControl.java @@ -0,0 +1,156 @@ +package cz.zcu.fav.kiv.editor.utils; + +import cz.zcu.fav.kiv.editor.beans.types.Type; +import cz.zcu.fav.kiv.editor.beans.types.Unit; +import cz.zcu.fav.kiv.editor.controller.errors.ParserException; + +/** + * The TagControl class controls the components and values of parameters and + * attributes. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class TagControl { + + /** + * Controls if the input value corresponds to the Type component. + * + * @param type + * the type with the component. + * @param value + * the new value for controlling. + */ + public static void controlSetTypeValue(Type type, String value) throws ParserException { + switch (type.getName()) { + case LIST: + controlList(type, value); + break; + case INTEGER: + controlInteger(type, value); + break; + case NUMBER: + controlInteger(type, value); + break; + case FLOAT: + controlFloat(type, value); + break; + case COLOR: + controlColor(type, value); + break; + case BOOLEAN: + controlBoolean(type, value); + break; + case LENGTH: + controlLength(type, value); + break; + default: + type.setValue(value); + } + } + + + /** + * Controls if the list of predefined units in Unit contains the input unit name. + * + * @param unit + * the unit with the list of predefined units. + * @param unitName + * the name of input unit. + * @return true if the Unit contains the input unit name. + */ + private static void controlTypeUnit(Unit unit, String unitName) throws ParserException { + if (unit.getValueList().contains(unitName)) + unit.setValue(unitName); + else + throw new ParserException(); + } + + /** + * Controls if the input value is a valid value for component combo-box. + * + * @param type + * the type with component combo-box. + * @param value + * the input value for controlling. + * @return true if the input value is valid for the component combo-box. + */ + private static void controlList(Type type, String value) throws ParserException{ + if ((type.getValueList() != null) + &&(type.getValueList().containsKey(value))) + type.setValue(value); + else + throw new ParserException(); + } + + /** + * Controls if the input value is a valid value for component spinner-int. + * + * @param value + * the input value for controlling. + * @return true if the input value is valid for the component spinner-int. + */ + private static void controlInteger(Type type, String value) throws ParserException { + try { + Integer.parseInt(value); + type.setValue(value); + } catch (Exception pe) { + throw new ParserException(); + } + } + + /** + * Controls if the input value is a valid value for component spinner-float. + * + * @param value + * the input value for controlling. + * @return true if the input value is valid for the component spinner-float. + */ + private static void controlFloat(Type type, String value) throws ParserException { + try { + Double.parseDouble(value); + type.setValue(value); + } catch (NumberFormatException pe) { + throw new ParserException(); + } + } + + /** + * Controls if the input value is a valid value for component color-chooser. + * + * @param type + * the type with component color-chooser. + * @param value + * the input value for controlling. + * @return true if the input value is valid for the component color-chooser. + */ + private static void controlColor(Type type, String value) throws ParserException { + if ((type.getValueList() != null) + &&(type.getValueList().get(value) == null) + &&(TagParser.parseColor(value) == null)) + throw new ParserException(); + else + type.setValue(value); + } + + /** + * Controls if the input value is a valid value for component check-box. + * + * @param value + * the input value for controlling. + * @return true if the input value is valid for the component check-box. + */ + private static void controlBoolean(Type type, String value) throws ParserException { + if (value.equals("0") || value.equals("1")) + type.setValue(value); + else + throw new ParserException(); + } + + private static void controlLength(Type type,String value) throws ParserException { + String number = TagParser.parserNumber(value); + String unit = TagParser.parserUnit(value); + controlTypeUnit(type.getUnit(), unit); + type.setValue(number); + } +} diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/utils/TagParser.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/utils/TagParser.java new file mode 100644 index 000000000..e3f80ddee --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/utils/TagParser.java @@ -0,0 +1,123 @@ +package cz.zcu.fav.kiv.editor.utils; + +import java.awt.Color; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import cz.zcu.fav.kiv.editor.controller.errors.ParserException; + +/** + * The TagParser class parses values of parameters, properties and attributes loaded + * from input files (configuration and XSL stylesheet). + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class TagParser { + + /** + * Parses the number from the string containing number with unit e.g. parses 12.4 from 12.4em. + * + * @param text + * the input text containing number and unit. + * @throws ParserException + * if the input text doesn't contain a number. + * @return a number parsed from the input text. + */ + public static String parserNumber(String text) throws ParserException { + text = text.trim().replaceAll("'", ""); + Pattern pattern = Pattern.compile("\\+?\\-?\\d+\\.?\\d*"); + Matcher matcher = pattern.matcher(text); + if (matcher.find()) + return matcher.group(); + else + throw new ParserException(text); + } + + /** + * Parses the unit from the string containing number with unit e.g. parses em from 12.4em. + * + * @param text + * the input text containing number and unit. + * @return a unit parsed from the input text. + */ + public static String parserUnit(String text) { + Pattern pattern = Pattern.compile("[a-z]+"); + Matcher matcher = pattern.matcher(text); + if (matcher.find()) + return matcher.group(); + else + return ""; + } + + /** + * Transformes a string containing color in hexadecimal format (#rrggbb) to Color. + * + * @param color + * the input color Color. + * @return transformed input color to a string containg the color in hexadecimal format + * (#rrggbb). + */ + public static String createColor(Color color) { + String red = Integer.toHexString(color.getRed()).toUpperCase(); + String green = Integer.toHexString(color.getGreen()).toUpperCase(); + String blue = Integer.toHexString(color.getBlue()).toUpperCase(); + + if (red.length() == 1) + red = "0" + red; + if (green.length() == 1) + green = "0" + green; + if (blue.length() == 1) + blue = "0" + blue; + + return "#" + red + green + blue; + } + + /** + * Parses the string containing color in hexadecimal format (#rrggbb) and converts it to the + * Color. + * + * @param hexCol + * the string containing a color in in hexadecimal format (#rrggbb). + * @return a color parsed from the input string. If the input color is invalid, then + * null is returned. + */ + public static Color parseColor(String hexCol) { + if (hexCol.length() != 7) + return null; + try { + return new Color(Integer.parseInt(hexCol.substring(1, 3), 16), Integer.parseInt(hexCol + .substring(3, 5), 16), Integer.parseInt(hexCol.substring(5, 7), 16)); + } catch (Throwable e) { + return null; + } + } + + /** + * Parses boolean value from the input string containig 1/0 or true/false. + * + * @param boolValue + * the string containing 1/0 or true/false. + * @return a parsed boolean value - true or false. + */ + public static Boolean parseBoolean(String boolValue) { + try { + return (Integer.valueOf(boolValue) == 0) ? false : true; + } catch (NumberFormatException ex) { + if (boolValue.equals("true") || boolValue.equals("false")) + return Boolean.valueOf(boolValue); + } + return null; + } + + /** + * Converts the boolean value to the string value "1" or "0". + * + * @param boolValue + * the input boolean value. + * @return a string "1" if the input was true, "0" if the input was false. + */ + public static String convertBoolean(boolean boolValue) { + return boolValue ? "1" : "0"; + } +} diff --git a/contrib/tools/fo-editor/src/log4j.xml b/contrib/tools/fo-editor/src/log4j.xml new file mode 100644 index 000000000..96cb5cd3d --- /dev/null +++ b/contrib/tools/fo-editor/src/log4j.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/contrib/tools/fo-editor/src/resources/ErrorResource.properties b/contrib/tools/fo-editor/src/resources/ErrorResource.properties new file mode 100644 index 000000000..78b748b7f --- /dev/null +++ b/contrib/tools/fo-editor/src/resources/ErrorResource.properties @@ -0,0 +1,35 @@ + +#OptionController +error.option_controller.file_not_found=File {0} not found. +error.option_controller.store=Couldn't store {0}. +info.option_controller.load_default_option=Default option loaded. +info.option_controller.load_file=Option file loaded. +info.option_controller.load_option_items=Option items loaded. +info.option_controller.save_file=Option file saved. + +#ProgressControl +info.progress_control.load_file=File {0} successfully loaded. +info.progress_control.load_parameter_description=Files with parameter descriptions successfully loaded. +info.progress_control.load_property_description=Files with property descriptions successfully loaded. + +#TemplateControl +info.template_control.load_template=File {0} succesfully loaded. + +#ResourceController +error.resource_controller.missing_key=Missing string key {0}. + +#ParamXmlParser +error.param_parser.transformation_error=Cannot transform description. +error.param_parser.parser_error=Cannot parser .xml definition file. + +#EditorIcon +error.editor_icon=File image not found. + +#TypeParam - relations +error.update_value=Cannot update component value. + +#OptionForm +info.option_form.editor.update_values=Restored default editor option values. +info.option_form.editor.save_values=Saved editor option values. +info.option_form.save.update_values=Restored default stylesheet option values. +info.option_form.save.save_values=Saved stylesheet option values. diff --git a/contrib/tools/fo-editor/src/resources/TextResource_cs.properties b/contrib/tools/fo-editor/src/resources/TextResource_cs.properties new file mode 100644 index 000000000..5de8b9b67 --- /dev/null +++ b/contrib/tools/fo-editor/src/resources/TextResource_cs.properties @@ -0,0 +1,205 @@ +#main frame +editor.title=Editor FO parametrů + +editor.browser.description=Otevře stránku s popisem {0} ve webovém prohlížeči. +editor.browser.menu.open_browser=Otevřít webový prohlížeč +editor.browser.menu.copy_location=Kopírovat umístění + +#attribute frame +frame.attribute.title=Atributy - + +#intro frame +frame.intro.title=Editor FO parametrů - načítání... + +frame.intro.progress.loading_file=Načítání konfiguračních souborů... +frame.intro.progress.read_file=Soubor {0} úspěšně načten. +frame.intro.progress.read_ok=OK +frame.intro.progress.correct_error=Prosím opravte výše uvedenou chybu a spusťte editor znovu. + +parser.config_file.title=Načítání konfiguračních souborů +parser.config.duplicate_parameter={0} - {1} (řádka {2}) se vyskytuje vícekrát. +parser.attributes.invalid_attribute_value={0} - (řádka {1}) má nepodporované hodnoty hodnotu. +parser.attributes.invalid_attribute_default_value={0} - (řádka {1}) nepodporovanou hodnotu . +parser.attributes.invalid_attribute_type={0} - (řádka {1}) má nepodporovaný typ. +parser.figures.invalid_parameter_value={0} -
    "{1}" (řádka {2}) má nepodporovaný parametr "{3}". +parser.figures.invalid_class={0} -
    "{1}" (řádka {2}) odkazuje na nepodporovanou třídu {3}. +parser.xml_definition_file.invalid_directory=Cesta k adresáři s XML specifikacemi FO parametrů není správně nastavena (Nastavení/Vlastnosti editoru.../Specifikace FO parametrů). +parser.xml_definition_file.missing_file=Chybí soubor "{0}.xml" v adresáři "{1}". +parser.parameters.invalid_type={0} - "{1}" (řádka {2}) má nepodporovaný "data-type" ({1}.xml). +parser.parameters.invalid_value={0} - "{1}" (řádka {2}) má nepodporovanou hodnotu ({1}.xml). +parser.parameters.dependency_cycle={0} - cyklicky závislé parametry: {1}. +parser.property.invalid_value={0} - "{1}" (řádka {2}) má nepodporovanou hodnotu atributu {3} ({1}.xml). +parser.property.invalid_type={0} - {1} (řádka {2}) má nepodporovaný "data-type" ({1}.xml). +parser.property.unsupported_attribute={0} - {1} (řádka {2}) má nepodporovaný atribut {3} ({1}.xml). + +#template +parser.template.find_property={0} - nelze najít "{1}" definovaný v {2} (řádka {3}). +parser.template.find_attribute={0} - nelze najít "{1}" definovaný v {2} (řádka {3}). +parser.template.find_parameter={0} - nelze najít "{1}" definovaný v {2} (řádka {3}). +parser.template.parse_attribute_value={0} - nelze přečíst hodnotu "{1}" (řádka {2}). +parser.template.parse_parameter_value={0} - nelze přečíst hodnotu "{1}" (řádka {2}). + +#frame about +frame.about.title=O programu Editor FO parametrů +frame.about.version=Verze: {0} +frame.about.author=Autor: Marta Vaclavikova + +#frame info +frame.config_info.title=Informace o konfiguračních souborech +frame.config_info.directory=Adresář s XML specifikacemi FO parametrů +frame.config_info.files.title=Konfigurační soubory +frame.config_info.files.config.description=Definuje rozmístění parametrů a sad atributů v editoru. +frame.config_info.files.attributes.description=Definuje vlastnosti a rozmístění atributů. +frame.config_info.files.types.description=Definuje typy parametrů a atributů. +frame.config_info.files.graphics.description=Definuje grafické prvky. +frame.config_info.template.title=Standardní šablona + +#frame option +frame.option.save.title=Vlastnosti stylu +frame.option.editor.title=Vlastnosti editoru + +option_editor.language=Jazyk editoru +option_editor.language.description=Změnit jazykovou verzi prohlížeče. +option_editor.xml_definition_path=XML specifikace FO parametrů +option_editor.xml_definition_path.description=Cesta k adresáři, kde jsou uloženy XML specifikace FO parametrů. +option_editor.xml_definition_path.button=Projít... +option_editor.erase_console=Smazat konzoli +option_editor.erase_console.description=Smazat konzoli pred každou akcí editoru. + +option_save.new_file_template.title=Nový XSL styl +option_save.stylesheet_format.title=XSL styl +option_save.output_file.title=Výstupní soubor +option_save.add_fo_namespace=Přidat jmenný prostor FO +option_save.add_fo_namespace.description=Přidat jmenný prostor FP do definice elementu xsl:stylesheet. +option_save.change_save=Uložení s přeuspořádáním +option_save.change_save.description=Přeuspořádat všechny známé parametry při ukládání XSL stylu. +option_save.change_save.warning=Všechny komentáře v otevřeném souboru se odstraní! +option_save.generate_com=Generovat komentáře +option_save.generate_com.description=Generovat komentáře k parametrům v XSL stylu. +option_save.use_param_select=Použít 'select' v parametrech +option_save.use_param_select.description=Použít atribut 'select' v definicích parametrů, např. . +option_save.encoding=Kódování +option_save.encoding.description=Kódování výstupního XSL souboru, např. . +option_save.newline=Konec řádky +option_save.newline.description=Znak konce řádky používaný ve výstupních XSL souborech. +option_save.stylesheet_version=Verze XSL stylu +option_save.stylesheet_version.description=Verze XSL stylu, např. . +option_save.import_file=Importovaný styl +option_save.import_file.description=Standardní XSL styl importovaný editovaným XSL stylem, např. . Write down path separated by ';'. + +# open file +open_file.title=Otevírání souboru +open_file.success_info=Soubor {0} úspěšně načten. +open_file.stylesheet_invalid=Element typu je na nesprávné pozici. +open_file.parameter_exist=Řádka {0} - "{1}" není dosud podporovaný editorem. +open_file.parameter_invalid=Řádka {0} - "{1}" má nepodporovaný formát. +open_file.attribute_set_exist=Řádka {0} - "{1}" není dosud podporovaný editorem. +open_file.attribute_set_invalid=Řádka {0} - "{1}" má nepodporovaný formát. +open_file.attribute_exist=Řádka {0} - "{1}" není dosud podporovaný editorem. +open_file.attribute_invalid=Řádka {0} - "{1}" má nepodporovaný formát. + +#save file +save_file.dialog_file_exist.title=Přepsat soubor +save_file.dialog_file_exist.text=Přepsat existující soubor? +save_file.dialog_save_changes.title=Uložit změny +save_file.dialog_save_changes.text=Soubor s XSL stylem byl změněn.\nChcete uložit změny? +save_file.title=Ukládání souboru +save_file.success_info=Soubor {0} úspěšně uložen. + +#new file +new_file.title=Vytváření nového souboru +new_file.empty.info=Nový prázdný soubor úspěšně vytvořen. +new_file.default.info=Nový soubor podle standardní šablony úspěšně vytvořen. +new_file.stylesheet.info=Nový soubor podle šablony {0} úspěšně vytvořen. +new_file_template.load_template.title=Načítání souboru se šablonou {0}. + +#run batch +run_batch_file.title=Spuštění dávkového souboru +run_batch_file.running=Spuštění dávkového souboru {0}. +run_batch_file.not_saved=Nelze spustit dávkový soubor - soubor se stylem není uložen. +run_batch_file.file_not_exists=Nelze spustit dávkový soubor - dávkový soubor neexistuje. Prosím vyberte dávkový soubor. +run_batch_file.error_running=Chyba při běhu dávkového souboru {0}. + +#errors +error.config_error=Chyba v souboru {0}. +error.xslt_parser=Řádka {0}, sloupec {1} \n {2} +error.xslt_parser.fatal=Závažná chyba: +error.xslt_parser.warning=Varování: +error.file_not_found.file=Nelze najít soubor {0}. +error.file_not_found.dir=Cesta k adresáři s XML specifikacemi parametrů není správně nastavena. +error.parser_error=Nelze přečíst {0}. +error.open_file.wrong_form=Soubor není validní\n +error.save_file=Chyba při ukládání souboru {0}: +error.component.update_value=Nelze změnit hodnotu komponenty {0} na novou hodnotu {1}. +error_dialog.title=Chyba v aplikaci +error.open_browser=Chyba při spouštění webového prohlížeče. +error.open_browser.title=Chyba spouštění webového prohlížeče + +#menu +menu.file=&Soubor +menu_item.new=&Nový +menu_item.new.tooltip=Vytvořit nový XSL styl +menu_item.new_empty=&Prázdný +menu_item.new_empty.tooltip=Vytvořit nový prázdný XSL styl +menu_item.new_default=&Standardní šablona +menu_item.new_default.tooltip=Vytvořit nový styl podle standardní šablony +menu_item.new_stylesheet=&Vybrat šablonu... +menu_item.new_stylesheet.tooltip=Vytvořit nový styl podle uživatelovy šablony +menu_item.open=&Otevřít... +menu_item.open.tooltip=Otevřít XSL soubor se stylem +menu_item.close=&Zavřít +menu_item.close.tooltip=Zavřít XSL soubor se stylem +menu_item.save_as=&Uložit jako... +menu_item.save_as.tooltip=Uložit XSL soubor se stylem +menu_item.save=&Uložit +menu_item.save.tooltip=Uložit XSL soubor se stylem +menu_item.exit=&Konec +menu_item.exit.tooltip=Zavřít editor +menu_item.option=&Nastavení +menu_item.option_save=Vlastnosti &stylu... +menu_item.option_save.tooltip=Změnit vlastnosti stylu +menu_item.option_editor=Vlastnosti &editoru... +menu_item.option_editor.tooltip=Změnit vlastnosti editoru +menu_item.run=&Spustit +menu_item.run_batch=&Spustit dávku +menu_item.run_batch.tooltip=Spustit vybraný dávkový soubor +menu_item.run_edit_batch=&Změnit dávkový soubor.. +menu_item.run_edit_batch.tooltip=Vybrat dávkový soubor +menu_item.run_batch_save=&Uložit před spuštěním +menu_item.run_batch_save.tooltip=Uložit aktuální soubor se stylem před spuštěním dávky +menu_item.help=&Nápověda +menu_item.help_window=&Obsah +menu_item.help_window.tooltip=Zobrazit obsah nápovědy +menu_item.config=&Konfigurace... +menu_item.config.tooltip=Zobrazit informace o konfiguračních souborech +menu_item.about=&O programu... +menu_item.about.tooltip=Zobrazit dialog O programu + +#language +language.en=Anglicky +language.cs=Česky + +#newline +encoding.crlf=WIN (CR+LF) +encoding.lf=UNIX (LF) +encoding.cr=MAC (CR) + +#button +button.cancel=Zrušit +button.save=Uložit +button.default=Obnovit původní +button.yes=Ano +button.no=Ne +button.ok=OK + +#url +url.parameter_description=http://docbook.sourceforge.net/release/xsl/current/doc/fo/{0}.html + +#color editor +component.color_editor.title=Editor barev +component.color_editor.error_parsing_color=Nelze přečíst barvu {0}. Nastavena standardní barva. + +# message writer +message_writer.warning=VAROVÁNÍ: +message_writer.error=CHYBA: +message_writer.info=INFO: diff --git a/contrib/tools/fo-editor/src/resources/TextResource_en.properties b/contrib/tools/fo-editor/src/resources/TextResource_en.properties new file mode 100644 index 000000000..ca62f04f7 --- /dev/null +++ b/contrib/tools/fo-editor/src/resources/TextResource_en.properties @@ -0,0 +1,205 @@ +#main frame +editor.title=FO Parameter Editor + +editor.browser.description=Open description page {0} in web browser. +editor.browser.menu.open_browser=Open web browser +editor.browser.menu.copy_location=Copy location + +#attribute frame +frame.attribute.title=Attributes - + +#intro frame +frame.intro.title=FO Parameter Editor - loading... + +frame.intro.progress.loading_file=Loading configuration files... +frame.intro.progress.read_file=File {0} successfully loaded. +frame.intro.progress.read_ok=OK +frame.intro.progress.correct_error=Please correct last mentioned error and launch the editor again. + +parser.config_file.title=Loading configuration files +parser.config.duplicate_parameter={0} - {1} (line {2}) is duplicated. +parser.attributes.invalid_attribute_value={0} - (line {1}) has unsupported values. +parser.attributes.invalid_attribute_default_value={0} - (line {1}) has unsupported value. +parser.attributes.invalid_attribute_type={0} - (line {1}) has unsupported type. +parser.figures.invalid_parameter_value={0} -
    "{1}" (line {2}) has unsupported parameter "{3}". +parser.figures.invalid_class={0} -
    "{1}" (line {2}) has reference to unsupported class {3}. +parser.xml_definition_file.invalid_directory=Path to the directory containing XML specifications of FO parameters is not properly set (Options/Editor options.../FO parameter specification). +parser.xml_definition_file.missing_file=Missing file "{0}.xml" in "{1}" directory. +parser.parameters.invalid_type={0} - "{1}" (line {2}) has unsupported "data-type" ({1}.xml). +parser.parameters.invalid_value={0} - "{1}" (line {2}) has unsupported value ({1}.xml). +parser.parameters.dependency_cycle={0} - cycle dependent parameters: {1}. +parser.property.invalid_value={0} - "{1}" (line {2}) has unsupported value of the attribute {3} ({1}.xml). +parser.property.invalid_type={0} - {1} (line {2}) has unsupported "data-type" ({1}.xml). +parser.property.unsupported_attribute={0} - {1} (line {2}) has unsupported attribute {3} ({1}.xml). + +#template +parser.template.find_property={0} - can’t find "{1}" defined in {2} (line {3}). +parser.template.find_attribute={0} - can’t find "{1}" defined in {2} (line {3}). +parser.template.find_parameter={0} - can’t find "{1}" defined in {2} (line {3}). +parser.template.parse_attribute_value={0} - can’t parse value of "{1}" (line {2}). +parser.template.parse_parameter_value={0} - can’t parse value of "{1}" (line {2}). + +#frame about +frame.about.title=About FO Parameters Editor +frame.about.version=Version: {0} +frame.about.author=Author: Marta Vaclavikova + +#frame info +frame.config_info.title=Configuration Files Info +frame.config_info.directory=Directory with FO parameter XML specification +frame.config_info.files.title=Configuration files +frame.config_info.files.config.description=Defines layout of parameters and attribute-sets in the editor. +frame.config_info.files.attributes.description=Defines features and layout of attributes in the attribute-sets. +frame.config_info.files.types.description=Defines parameter and attribute types. +frame.config_info.files.graphics.description=Defines graphics figures. +frame.config_info.template.title=Default template + +#frame option +frame.option.save.title=Stylesheet Options +frame.option.editor.title=Editor Options + +option_editor.language=Editor language +option_editor.language.description=Change language used in the editor. +option_editor.xml_definition_path=FO parameter XML specification +option_editor.xml_definition_path.description=Path to the directory where files with XML specifications of FO parameters are stored. +option_editor.xml_definition_path.button=Browse... +option_editor.erase_console=Erase console +option_editor.erase_console.description=Erase error console before every editor action. + +option_save.new_file_template.title=New XSL stylesheet +option_save.stylesheet_format.title=XSL stylesheet +option_save.output_file.title=Output file +option_save.add_fo_namespace=Add FO namespace +option_save.add_fo_namespace.description=Add FO namespace to the xsl:stylesheet definition. +option_save.change_save=Rearrange save +option_save.change_save.description=Rearrange all known parameters by saving XSL stylesheet. +option_save.change_save.warning=All comments in the opened file will be erased! +option_save.generate_com=Generate comments +option_save.generate_com.description=Generate parameter comments in the XSL stylesheet. +option_save.use_param_select=Use 'select' in parameters +option_save.use_param_select.description=Use attribute 'select' in parameter definitions, e.g. . +option_save.encoding=Output encoding +option_save.encoding.description=Output XSL file encoding, e.g. . +option_save.newline=End of line +option_save.newline.description=End of line character used in output XSL files. +option_save.stylesheet_version=Stylesheet version +option_save.stylesheet_version.description=Stylesheet version, e.g. . +option_save.import_file=Imported stylesheet +option_save.import_file.description=Standard stylesheet file imported by edited stylesheet, e.g. . Write down path separated by ';'. + +# open file +open_file.title=Opening file +open_file.success_info=File {0} succesfully opened. +open_file.stylesheet_invalid=The element isn’t well placed. +open_file.parameter_exist=Line {0} - "{1}" isn’t supported by the editor yet. +open_file.parameter_invalid=Line {0} - "{1}" hasn’t supported format. +open_file.attribute_set_exist=Line {0} - "{1}" isn’t supported by the editor yet. +open_file.attribute_set_invalid=Line {0} - "{1}" hasn’t supported format. +open_file.attribute_exist=Line {0} - "{1}" isn’t supported by the editor yet. +open_file.attribute_invalid=Line {0} - "{1}" hasn’t supported format. + +#save file +save_file.dialog_file_exist.title=Overwrite file +save_file.dialog_file_exist.text=Overwrite existing file? +save_file.dialog_save_changes.title=Save changes +save_file.dialog_save_changes.text=Stylesheet file has changed.\nDo you want to save the changes? +save_file.title=Saving file +save_file.success_info=File {0} succesfully saved. + +#new file +new_file.title=Creating new file +new_file.empty.info=New empty file succesfully created. +new_file.default.info=New file according to the default template succesfully created. +new_file.stylesheet.info=New file according to the stylesheet {0} succesfully created. +new_file_template.load_template.title=Loading template file {0}. + +#run batch +run_batch_file.title=Running batch file +run_batch_file.running=Running batch file {0}. +run_batch_file.not_saved=Cannot run batch file - stylesheet file is not saved. +run_batch_file.file_not_exists=Cannot run batch file - batch file doesn't exist. Please choose a batch file. +run_batch_file.error_running=Error running batch file {0}. + +#errors +error.config_error=Error in the file {0}. +error.xslt_parser=Line {0}, column {1} \n {2} +error.xslt_parser.fatal=Fatal error: +error.xslt_parser.warning=Warning: +error.file_not_found.file=Could not find file {0}. +error.file_not_found.dir=Path to the directory with XML parameter specifications is not properly set. +error.parser_error=Cannot parse {0}. +error.open_file.wrong_form=File is not well-formed\n +error.save_file=Error saving file {0}: +error.component.update_value=Cannot update value of the parameter/attribute {0} by new value {1}. +error_dialog.title=Application Error +error.open_browser=Error attempting to launch web browser. +error.open_browser.title=Error launching web browser + +#menu +menu.file=&File +menu_item.new=&New +menu_item.new.tooltip=Create new XSL file +menu_item.new_empty=&Empty +menu_item.new_empty.tooltip=Create a new empty stylesheet +menu_item.new_default=&Default Template +menu_item.new_default.tooltip=Create a new stylesheet according the default template +menu_item.new_stylesheet=&Choose Template... +menu_item.new_stylesheet.tooltip=Create a new stylesheet according the user template +menu_item.open=&Open... +menu_item.open.tooltip=Open XSL stylesheet file +menu_item.close=&Close +menu_item.close.tooltip=Close XSL stylesheet file +menu_item.save_as=S&ave As... +menu_item.save_as.tooltip=Save XSL stylesheet file +menu_item.save=&Save +menu_item.save.tooltip=Save XSL stylesheet file +menu_item.exit=&Exit +menu_item.exit.tooltip=Close editor +menu_item.option=&Options +menu_item.option_save=&Stylesheet Options... +menu_item.option_save.tooltip=Change stylesheet options +menu_item.option_editor=&Editor Options... +menu_item.option_editor.tooltip=Change editor options +menu_item.run=&Run +menu_item.run_batch=&Run Batch +menu_item.run_batch.tooltip=Run selected batch file +menu_item.run_edit_batch=&Change Batch File.. +menu_item.run_edit_batch.tooltip=Select batch file +menu_item.run_batch_save=&Save Before Run +menu_item.run_batch_save.tooltip=Save actual stylesheet file before running batch file +menu_item.help=&Help +menu_item.help_window=&Help Contents +menu_item.help_window.tooltip=Show help contents +menu_item.config=&Config Info... +menu_item.config.tooltip=Show information about configuration files +menu_item.about=&About... +menu_item.about.tooltip=Show about dialog + +#language +language.en=English +language.cs=Czech + +#newline +encoding.crlf=WIN (CR+LF) +encoding.lf=UNIX (LF) +encoding.cr=MAC (CR) + +#button +button.cancel=Cancel +button.save=Save +button.default=Restore Defaults +button.yes=Yes +button.no=No +button.ok=OK + +#url +url.parameter_description=http://docbook.sourceforge.net/release/xsl/current/doc/fo/{0}.html + +#color editor +component.color_editor.title=Color Editor +component.color_editor.error_parsing_color=Cannot parse color {0}. Set default color. + +# message writer +message_writer.warning=WARNING: +message_writer.error=ERROR: +message_writer.info=INFO: diff --git a/contrib/tools/fo-editor/src/schemas/attributes.xsd b/contrib/tools/fo-editor/src/schemas/attributes.xsd new file mode 100644 index 000000000..47dab7992 --- /dev/null +++ b/contrib/tools/fo-editor/src/schemas/attributes.xsd @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/contrib/tools/fo-editor/src/schemas/config.xsd b/contrib/tools/fo-editor/src/schemas/config.xsd new file mode 100644 index 000000000..aaac93460 --- /dev/null +++ b/contrib/tools/fo-editor/src/schemas/config.xsd @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/contrib/tools/fo-editor/src/schemas/convert.xsl b/contrib/tools/fo-editor/src/schemas/convert.xsl new file mode 100644 index 000000000..91b013ca0 --- /dev/null +++ b/contrib/tools/fo-editor/src/schemas/convert.xsl @@ -0,0 +1,45 @@ + +&amp;"> +]> + + + + + + + + + + + + +

    +
    + + + + + + + + + + + + + + +
    +
    + + +
      + +
    • -
    • +
      +
    +
    + +
    diff --git a/contrib/tools/fo-editor/src/schemas/graphics.xsd b/contrib/tools/fo-editor/src/schemas/graphics.xsd new file mode 100644 index 000000000..4e572081d --- /dev/null +++ b/contrib/tools/fo-editor/src/schemas/graphics.xsd @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/contrib/tools/fo-editor/src/schemas/template.xsd b/contrib/tools/fo-editor/src/schemas/template.xsd new file mode 100644 index 000000000..6190d86e0 --- /dev/null +++ b/contrib/tools/fo-editor/src/schemas/template.xsd @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/contrib/tools/fo-editor/src/schemas/types.xsd b/contrib/tools/fo-editor/src/schemas/types.xsd new file mode 100644 index 000000000..3275e352d --- /dev/null +++ b/contrib/tools/fo-editor/src/schemas/types.xsd @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/contrib/tools/fo-editor/templates/template.xml b/contrib/tools/fo-editor/templates/template.xml new file mode 100644 index 000000000..4db7ed858 --- /dev/null +++ b/contrib/tools/fo-editor/templates/template.xml @@ -0,0 +1,36 @@ + + -- 2.40.0

FeaG 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 z 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�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 literal 0 HcmV?d00001 diff --git a/contrib/tools/fo-editor/scripts/README b/contrib/tools/fo-editor/scripts/README new file mode 100644 index 000000000..1b079d4f6 --- /dev/null +++ b/contrib/tools/fo-editor/scripts/README @@ -0,0 +1,68 @@ +============================== +Installing FO Parameter Editor +============================== + + ------------ + Requirements + ------------ + + * Sun or Apple Java[tm] runtime 1.5.0 or above. + + FO Parameter Editor is officially supported on Windows XP and Linux. + + + ------------------ + Install on Windows + ------------------ + + 1. Make sure that you have a Java™ 1.5.0+ runtime installed on your machine. + To check this, open a command window and type "java -version" followed by Enter. + You should get something looking like this: + + C:\> java -version + java version "1.5.0_04" + Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_04-b05) + Java HotSpot(TM) Client VM (build 1.5.0_04-b05, mixed mode, sharing) + + 2. Use a tool like WinZip (http://www.winzip.com/), 7-Zip (http://www.7-zip.org/) + or Info-Zip (http://www.info-zip.org/) to unzip the FO Parameter Editor distribution + inside any directory you want: + + C:\> unzip FOeditor-1_0.zip + + 3. FO Parameter Editor is intended to be used directly from the FOeditor-1_0 directory. + That is, you can start FO Parameter Editor by + - simply clicking on FOEditor.jar + - or by executing: C:\> FOeditor-1_0\run.bat + + After that, you may want to add a shortcut to "C:\FOeditor\run.bat" or + "C:\FOeditor\FOEditor.jar" on your desktop. + Errors occuring during the editor run are written down in a log file error.log. + + + ------------------ + Install on Linux + ------------------ + + 1. Make sure that you have a Java™ 1.5.0+ runtime installed on your machine. + To check this, open a command window and type "java -version" followed by Enter. + You should get something looking like this: + + # java -version + java version "1.5.0_04" + Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_04-b05) + Java HotSpot(TM) Client VM (build 1.5.0_04-b05, mixed mode, sharing) + + 2. Unzip the FO Parameter Editor distribution inside any directory you want: + + # unzip FOeditor-1_0.zip + + 3. FO Parameter Editor is intended to be used directly from the FOeditor-1_0 directory. + That is, you can start FO Parameter Editor by + - simply clicking on FOEditor.jar + - or by executing: # FOeditor-1_0\run.sh + + After that, you may want to add a shortcut to "..\FOeditor\run.sh" or + "..\FOeditor\FOEditor.jar" on your desktop. + Errors occuring during the editor run are written down in a log file error.log. + \ No newline at end of file diff --git a/contrib/tools/fo-editor/scripts/run.bat b/contrib/tools/fo-editor/scripts/run.bat new file mode 100644 index 000000000..fa2d0697e --- /dev/null +++ b/contrib/tools/fo-editor/scripts/run.bat @@ -0,0 +1,5 @@ +@echo off + +start javaw -jar FOEditor.jar + +exit \ No newline at end of file diff --git a/contrib/tools/fo-editor/scripts/run.sh b/contrib/tools/fo-editor/scripts/run.sh new file mode 100644 index 000000000..abf069d59 --- /dev/null +++ b/contrib/tools/fo-editor/scripts/run.sh @@ -0,0 +1 @@ +java -jar FOEditor.jar diff --git a/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/beans/ConfigData.java b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/beans/ConfigData.java new file mode 100644 index 000000000..10db3e89d --- /dev/null +++ b/contrib/tools/fo-editor/src/cz/zcu/fav/kiv/editor/beans/ConfigData.java @@ -0,0 +1,83 @@ +package cz.zcu.fav.kiv.editor.beans; + +import java.util.Collections; +import java.util.List; +import java.util.Map; + +import cz.zcu.fav.kiv.editor.beans.parameters.Parameter; +import cz.zcu.fav.kiv.editor.beans.properties.Property; +import cz.zcu.fav.kiv.editor.beans.sections.Section; + +/** + * The ConfigData class represents main structure containing the list of parameter + * sections and lists of predefined type values. + * + * @author Marta Vaclavikova + * @version 1.0, 05/2007 + */ +public class ConfigData { + /** The list of sections */ + private List