branch feature/editor updated (f3aae3a -> 0fe5926)
This is an automated email from the git hooks/post-receive script. New change to branch feature/editor in repository eugene. See https://gitlab.nuiton.org/nuiton/eugene.git discards f3aae3a mImprove readme discards 5b1a10b Meilleurs icons discards 96756da POC adds cad16cf [jgitflow-maven-plugin]updating develop poms to master versions to avoid merge conflicts adds 56a1de8 [jgitflow-maven-plugin]updating poms for 3.0-alpha-7 branch with snapshot versions adds c739ea7 Prepare release adds eeb143a Add missing license header adds 3e0dcfb [jgitflow-maven-plugin]updating poms for branch'release/3.0-alpha-7' with non-snapshot versions adds 5a9e167 [jgitflow-maven-plugin]merging 'release/3.0-alpha-7' into 'master' adds 20578ed [jgitflow-maven-plugin]merging 'master' into 'develop' adds aea0c14 [jgitflow-maven-plugin]Updating develop poms back to pre merge state adds 3e4479f Rethink stereotypes and tag values API (fixes #4042) adds f079bb4 Add missing i18n traductions adds 2277192 Remove application config generate mojo from eugene project (See #4047) adds c94d209 Remove application config generate mojo from eugene project (Fixes #4047) Merge branch 'feature/4047' into develop new 5ba610d Use new API in mojos + remove extension of providers no more used new 92e9a29 Use new API, clean reader code, remove extension on providers (no more used) new 2fbb098 POC new bf4242e Meilleurs icons new 1389d7a mImprove readme new 8ec5954 POC new b82259b Rethink stereotypes and tag values API (See #4042) new 0fe5926 use nuiton-config 3.0 + last stable of jaxx This update added new revisions after undoing existing revisions. That is to say, some revisions that were in the old version of the branch are not in the new version. This situation occurs when a user --force pushes a change and generates a repository containing something like this: * -- * -- B -- O -- O -- O (f3aae3a) \ N -- N -- N refs/heads/feature/editor (0fe5926) You should already have received notification emails for all of the O revisions, and so the following emails describe only the N revisions from the common base, B. Any revisions marked "omits" are not gone; other references still refer to them. Any revisions marked "discards" are gone forever. The 8 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "adds" were already present in the repository and have only been added to this reference. Detailed log of new commits: commit 0fe5926fa96b6b430a4fa60fd2f66d4da0a087d2 Author: Tony CHEMIT <chemit@codelutin.com> Date: Sun Oct 2 19:19:06 2016 +0200 use nuiton-config 3.0 + last stable of jaxx commit b82259b4755eeadc0b4e028a09c0af4c42f0df1c Author: Tony CHEMIT <chemit@codelutin.com> Date: Mon Sep 26 12:29:09 2016 +0200 Rethink stereotypes and tag values API (See #4042) commit 8ec595453fbb06245da0502a18d2da7576d8a845 Author: Tony CHEMIT <chemit@codelutin.com> Date: Sat Sep 24 09:49:07 2016 +0200 POC commit 1389d7a4d6976fcb7f2ee440f27310cb0ab1c485 Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Sep 21 08:28:14 2016 +0200 mImprove readme commit bf4242ecac54b64324f649b56a135fbe8c410c77 Author: Tony CHEMIT <chemit@codelutin.com> Date: Mon Sep 19 13:33:33 2016 +0200 Meilleurs icons commit 2fbb0985771b9d2a865eb1464ff9ad7ae5f1e962 Author: Tony CHEMIT <chemit@codelutin.com> Date: Mon Sep 19 12:23:23 2016 +0200 POC commit 92e9a292ee9de56cfa6ce71bbfffe4f91199dbc7 Author: Tony CHEMIT <chemit@codelutin.com> Date: Sun Oct 2 18:15:47 2016 +0200 Use new API, clean reader code, remove extension on providers (no more used) commit 5ba610d449497d6cc7d6f19b5e5d32dc547884e9 Author: Tony CHEMIT <chemit@codelutin.com> Date: Sun Oct 2 18:09:28 2016 +0200 Use new API in mojos + remove extension of providers no more used Summary of changes: eugene-config-templates/LICENSE.txt | 165 ---- eugene-config-templates/README.md | 0 eugene-config-templates/pom.xml | 106 --- .../src/license/THIRD-PARTY.properties | 21 - .../templates/ApplicationConfigTransformer.java | 292 ------- eugene-config-templates/src/site/fr/rst/index.rst | 33 - eugene-config-templates/src/site/rst/index.rst | 33 - eugene-config-templates/src/site/site_en.xml | 54 -- eugene-config-templates/src/site/site_fr.xml | 58 -- eugene-editor-maven-plugin/pom.xml | 46 +- .../src/main/config/EugeneEditor.toml | 11 + .../EugeneEditorApplicationContext.java | 10 +- .../editor/application/ModelExtensionHelper.java | 167 ++-- .../config/EugeneEditorConfigOption.java | 103 --- .../application/ui/ContentUIInitializer.java | 63 ++ .../editor/application/ui/ContentUIManager.java | 4 +- .../application/ui/content/AggregationMode.java | 12 + .../application/ui/content/AttributeContentUI.jaxx | 22 +- .../application/ui/content/AttributeContentUI.jcss | 42 +- .../ui/content/AttributeContentUIHandler.java | 28 +- .../application/ui/content/ClassContentUI.jaxx | 8 +- .../application/ui/content/ClassContentUI.jcss | 9 +- .../ui/content/ClassContentUIHandler.java | 40 +- .../editor/application/ui/content/ContentUI.java | 6 + .../editor/application/ui/content/ContentUI.jcss | 13 +- ...{ContenUIHandler.java => ContentUIHandler.java} | 127 ++- .../ui/content/EnumerationContentUI.jaxx | 8 +- .../ui/content/EnumerationContentUI.jcss | 6 +- .../ui/content/EnumerationContentUIHandler.java | 13 +- .../application/ui/content/InterfaceContentUI.jaxx | 2 +- .../application/ui/content/InterfaceContentUI.jcss | 4 +- .../ui/content/InterfaceContentUIHandler.java | 13 +- .../application/ui/content/ModelContentUI.jcss | 2 +- .../ui/content/ModelContentUIHandler.java | 11 +- .../application/ui/content/Multiplicity.java | 22 +- .../application/ui/content/OperationContentUI.jaxx | 18 +- .../application/ui/content/OperationContentUI.jcss | 10 +- .../ui/content/OperationContentUIHandler.java | 8 +- .../application/ui/content/PackageContentUI.jcss | 2 +- .../ui/content/PackageContentUIHandler.java | 11 +- .../editor/application/ui/content/Visibility.java | 33 + .../actions/AddInterfaceFromClassAction.java | 10 +- .../actions/AddLiteralFromEnumerationAction.java | 32 - .../actions/AddSuperClassFromInterfaceAction.java | 4 +- .../ui/content/actions/ContentActionSupport.java | 16 +- .../CreateAttributeFromAttributeAction.java | 4 +- .../actions/CreateAttributeFromClassAction.java | 4 +- .../CreateAttributeFromInterfaceAction.java | 4 +- .../CreateLiteralFromEnumerationAction.java | 11 + .../CreateOperationFromOperationAction.java | 4 +- .../actions/CreatePackageFromModelAction.java | 2 +- .../CreateParameterFromOperationAction.java | 1 + .../DeleteAttributeFromAttributeAction.java | 19 +- .../actions/DeleteClassFromClassAction.java | 12 +- .../DeleteEnumerationFromEnumerationAction.java | 12 +- .../DeleteInterfaceFromInterfaceAction.java | 12 +- ...va => DeleteLiteralsFromEnumerationAction.java} | 4 +- .../DeleteOperationFromOperationAction.java | 15 +- .../actions/DeletePackageFromPackageAction.java | 11 +- ...n.java => RemoveInterfacesFromClassAction.java} | 12 +- ... => RemoveSuperClassesFromInterfaceAction.java} | 10 +- .../ui/tree/EugeneEditorTreeSelectionModel.java | 12 +- .../application/ui/tree/node/AttributeNode.java | 98 ++- .../editor/application/ui/tree/node/ClassNode.java | 55 +- .../ui/tree/node/ClassifierNodeSupport.java | 103 +++ .../application/ui/tree/node/EnumerationNode.java | 22 +- .../application/ui/tree/node/InterfaceNode.java | 44 +- .../editor/application/ui/tree/node/ModelNode.java | 48 +- .../application/ui/tree/node/NodeSupport.java | 97 +-- .../application/ui/tree/node/OperationNode.java | 39 +- .../application/ui/tree/node/PackageNode.java | 10 +- .../eugene/editor/plugin/EugeneEditorMojo.java | 32 +- .../eugene-editor-maven-plugin_en_GB.properties | 17 +- .../eugene-editor-maven-plugin_fr_FR.properties | 19 +- .../src/main/resources/icons/action-redo.png | Bin 0 -> 458 bytes .../src/main/resources/icons/action-rollback.png | Bin 0 -> 469 bytes .../src/main/resources/icons/action-undo.png | Bin 0 -> 458 bytes .../src/main/resources/icons/type-attribute2x.png | Bin 0 -> 991 bytes .../src/main/resources/icons/type-class2x.png | Bin 0 -> 991 bytes .../main/resources/icons/type-enumeration2x.png | Bin 0 -> 803 bytes .../src/main/resources/icons/type-field.png | Bin 0 -> 499 bytes .../src/main/resources/icons/type-field2x.png | Bin 0 -> 925 bytes .../src/main/resources/icons/type-interface2x.png | Bin 0 -> 832 bytes .../src/main/resources/icons/type-model2x.png | Bin 0 -> 175 bytes .../src/main/resources/icons/type-operation2x.png | Bin 0 -> 870 bytes .../src/main/resources/icons/type-package2x.png | Bin 0 -> 218 bytes .../src/main/resources/icons/type-value.png | Bin 0 -> 95 bytes .../src/main/resources/icons/type-value2x.png | Bin 0 -> 122 bytes .../src/main/resources/icons/type-variable.png | Bin 0 -> 515 bytes .../src/main/resources/icons/type-variable2x.png | Bin 0 -> 911 bytes .../tree/node/OperationNode-error-validation.xml | 2 +- eugene-java-templates/pom.xml | 19 + .../eugene/java/AbstractJavaBeanTransformer.java | 45 +- .../nuiton/eugene/java/EugeneJavaStereoTypes.java | 436 ++++++++++ .../nuiton/eugene/java/EugeneJavaTagValues.java | 247 ++++++ .../nuiton/eugene/java/JavaBeanTransformer.java | 18 +- .../eugene/java/JavaBeanTransformerTagValues.java | 181 +++++ .../eugene/java/JavaEnumerationTransformer.java | 6 +- .../eugene/java/JavaInterfaceTransformer.java | 2 +- .../eugene/java/JavaTemplatesStereoTypes.java | 35 +- .../nuiton/eugene/java/JavaTemplatesTagValues.java | 45 +- .../eugene/java/SimpleJavaBeanTransformer.java | 52 +- .../java/SimpleJavaBeanTransformerTagValues.java | 461 +++++++++++ .../SimpleJavaBeanWithNoInterfaceTransformer.java | 39 +- ...avaBeanWithNoInterfaceTransformerTagValues.java | 421 ++++++++++ ...stereotype.provider.StereotypeMetadatasProvider | 1 + ...ion.tagvalue.provider.TagValueMetadatasProvider | 1 + .../i18n/eugene-java-templates_en_GB.properties | 45 ++ .../i18n/eugene-java-templates_fr_FR.properties | 45 ++ ...pesTest.java => EugeneJavaStereoTypesTest.java} | 33 +- ...aluesTest.java => EugeneJavaTagValuesTest.java} | 19 +- eugene-maven-plugin/pom.xml | 19 +- .../nuiton/eugene/plugin/AvailableDataMojo.java | 197 ++--- .../plugin/GenerateApplicationConfigMojo.java | 406 ---------- .../org/nuiton/eugene/plugin/GenerateMojo.java | 142 +--- .../nuiton/eugene/plugin/StereotypesReport.java | 24 +- .../org/nuiton/eugene/plugin/TagValuesReport.java | 21 +- .../eugene/plugin/modelextension/ElementBean.java | 4 +- .../plugin/modelextension/ModelBeanBuilder.java | 4 +- .../renderer/AbstractEugeneReportRenderer.java | 28 +- .../plugin/renderer/StereotypesReportRenderer.java | 57 +- .../plugin/renderer/TagValuesReportRenderer.java | 60 +- .../writer/BaseChainedFileWriterToMemoryModel.java | 31 +- .../main/resources/tag-values-report.properties | 1 + .../main/resources/tag-values-report_fr.properties | 1 + eugene/pom.xml | 14 + .../org/nuiton/eugene/EugeneCoreStereotypes.java | 161 ++++ .../org/nuiton/eugene/EugeneCoreTagValues.java | 264 +++++++ .../java/org/nuiton/eugene/EugeneStereoTypes.java | 1 + .../java/org/nuiton/eugene/EugeneTagValues.java | 1 + .../main/java/org/nuiton/eugene/GeneratorUtil.java | 17 +- .../main/java/org/nuiton/eugene/ModelReader.java | 35 +- .../org/nuiton/eugene/java/JavaGeneratorUtil.java | 8 +- .../eugene/java/ObjectModelTransformerToJava.java | 38 +- .../main/java/org/nuiton/eugene/models/Model.java | 4 +- .../InvalidStereotypeSyntaxException.java | 4 +- .../MismatchStereotypeTargetException.java | 4 +- .../stereotype/MissingStereoTypeException.java | 36 +- .../stereotype/StereotypeMetadata.java} | 38 +- .../stereotype/StereotypeNotFoundException.java | 4 +- .../stereotype/StereotypeUtil.java} | 119 ++- .../stereotype/WithStereotypes.java} | 6 +- .../AggregateStereotypeMetadatasProvider.java | 113 +++ .../DefaultStereotypeMetadatasProvider.java | 84 ++ .../provider/StereotypeMetadatasProvider.java} | 27 +- .../tagvalue/InvalidTagValueSyntaxException.java | 2 +- .../tagvalue/MismatchTagValueTargetException.java | 2 +- .../tagvalue/MissingTagValueException.java | 43 +- .../extension/tagvalue/TagValueMetadata.java | 73 ++ .../tagvalue/TagValueNotFoundException.java | 2 +- .../tagvalue/TagValueUtil.java} | 227 ++---- .../tagvalue/WithTagValues.java} | 7 +- .../matcher/EqualsTagValueNameMatcher.java | 12 +- .../tagvalue/matcher/StartsWithTagNameMatcher.java | 12 +- .../matcher/TagValueDefinitionMatcher.java | 24 +- .../AggregateTagValueMetadatasProvider.java | 113 +++ .../provider/DefaultTagValueMetadatasProvider.java | 103 +++ .../provider/TagValueMetadatasProvider.java} | 25 +- .../eugene/models/object/ObjectModelElement.java | 4 +- .../eugene/models/object/ObjectModelPackage.java | 6 +- .../object/reader/AbstractObjectModelReader.java | 878 +-------------------- .../extension/FlatModelExtensionFileParser.java | 34 +- .../reader/extension/LoadModelExtension.java | 74 +- .../reader/extension/ModelExtensionFileParser.java | 20 +- .../object/xml/ObjectModelAttributeImpl.java | 12 +- .../object/xml/ObjectModelClassifierImpl.java | 11 + .../models/object/xml/ObjectModelElementImpl.java | 16 +- .../eugene/models/object/xml/ObjectModelImpl.java | 10 + .../models/object/xml/ObjectModelPackageImpl.java | 10 + .../eugene/models/state/xml/StateModelImpl.java | 10 + .../AggregateStereotypeDefinitionProvider.java | 1 + .../InvalidStereotypeSyntaxException.java | 1 + .../MismatchStereotypeTargetException.java | 1 + .../stereotype/MissingStereoTypeException.java | 1 + .../stereotype/MyStereotypeDefinitionProvider.java | 1 + .../eugene/models/stereotype/StereotypeAble.java | 1 + .../models/stereotype/StereotypeDefinition.java | 1 + .../stereotype/StereotypeDefinitionProvider.java | 1 + ...ereotypeDefinitionProviderManagerExtension.java | 1 + .../stereotype/StereotypeDefinitionProviders.java | 1 + .../stereotype/StereotypeNotFoundException.java | 1 + .../eugene/models/stereotype/Stereotypes.java | 1 + .../eugene/models/stereotype/package-info.java | 1 + .../AggregateTagValueDefinitionProvider.java | 1 + .../tagvalue/InvalidTagValueSyntaxException.java | 1 + .../tagvalue/MismatchTagValueTargetException.java | 1 + .../models/tagvalue/MissingTagValueException.java | 1 + .../eugene/models/tagvalue/TagValueAble.java | 1 + .../eugene/models/tagvalue/TagValueDefinition.java | 1 + .../tagvalue/TagValueDefinitionProvider.java | 1 + ...TagValueDefinitionProviderManagerExtension.java | 1 + .../tagvalue/TagValueDefinitionProviders.java | 1 + .../models/tagvalue/TagValueNotFoundException.java | 1 + .../nuiton/eugene/models/tagvalue/TagValues.java | 1 + .../matcher/EqualsTagValueNameMatcher.java | 1 + .../tagvalue/matcher/StartsWithTagNameMatcher.java | 1 + .../matcher/TagValueDefinitionMatcher.java | 1 + .../eugene/models/tagvalue/package-info.java | 1 + ...stereotype.provider.StereotypeMetadatasProvider | 1 + ...ion.tagvalue.provider.TagValueMetadatasProvider | 1 + .../main/resources/i18n/eugene_en_GB.properties | 11 + .../main/resources/i18n/eugene_fr_FR.properties | 11 + ...pesTest.java => EugeneCoreStereotypesTest.java} | 27 +- ...aluesTest.java => EugeneCoreTagValuesTest.java} | 40 +- .../models/object/XMI21ToObjectModelTest.java | 5 +- pom.xml | 40 +- 206 files changed, 4619 insertions(+), 3832 deletions(-) delete mode 100644 eugene-config-templates/LICENSE.txt delete mode 100644 eugene-config-templates/README.md delete mode 100644 eugene-config-templates/pom.xml delete mode 100644 eugene-config-templates/src/license/THIRD-PARTY.properties delete mode 100644 eugene-config-templates/src/main/java/org/nuiton/eugene/config/templates/ApplicationConfigTransformer.java delete mode 100644 eugene-config-templates/src/site/fr/rst/index.rst delete mode 100644 eugene-config-templates/src/site/rst/index.rst delete mode 100644 eugene-config-templates/src/site/site_en.xml delete mode 100644 eugene-config-templates/src/site/site_fr.xml create mode 100644 eugene-editor-maven-plugin/src/main/config/EugeneEditor.toml delete mode 100644 eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/config/EugeneEditorConfigOption.java create mode 100644 eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/AggregationMode.java rename eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/{ContenUIHandler.java => ContentUIHandler.java} (64%) create mode 100644 eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/Visibility.java delete mode 100644 eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/AddLiteralFromEnumerationAction.java rename eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/{RemoveLiteralFromEnumerationAction.java => DeleteLiteralsFromEnumerationAction.java} (81%) rename eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/{RemoveInterfaceFromClassAction.java => RemoveInterfacesFromClassAction.java} (66%) rename eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/{RemoveSuperClassFromInterfaceAction.java => RemoveSuperClassesFromInterfaceAction.java} (66%) create mode 100644 eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/ClassifierNodeSupport.java create mode 100644 eugene-editor-maven-plugin/src/main/resources/icons/action-redo.png create mode 100644 eugene-editor-maven-plugin/src/main/resources/icons/action-rollback.png create mode 100644 eugene-editor-maven-plugin/src/main/resources/icons/action-undo.png create mode 100644 eugene-editor-maven-plugin/src/main/resources/icons/type-attribute2x.png create mode 100644 eugene-editor-maven-plugin/src/main/resources/icons/type-class2x.png create mode 100644 eugene-editor-maven-plugin/src/main/resources/icons/type-enumeration2x.png create mode 100644 eugene-editor-maven-plugin/src/main/resources/icons/type-field.png create mode 100644 eugene-editor-maven-plugin/src/main/resources/icons/type-field2x.png create mode 100644 eugene-editor-maven-plugin/src/main/resources/icons/type-interface2x.png create mode 100644 eugene-editor-maven-plugin/src/main/resources/icons/type-model2x.png create mode 100644 eugene-editor-maven-plugin/src/main/resources/icons/type-operation2x.png create mode 100644 eugene-editor-maven-plugin/src/main/resources/icons/type-package2x.png create mode 100644 eugene-editor-maven-plugin/src/main/resources/icons/type-value.png create mode 100644 eugene-editor-maven-plugin/src/main/resources/icons/type-value2x.png create mode 100644 eugene-editor-maven-plugin/src/main/resources/icons/type-variable.png create mode 100644 eugene-editor-maven-plugin/src/main/resources/icons/type-variable2x.png create mode 100644 eugene-java-templates/src/main/java/org/nuiton/eugene/java/EugeneJavaStereoTypes.java create mode 100644 eugene-java-templates/src/main/java/org/nuiton/eugene/java/EugeneJavaTagValues.java create mode 100644 eugene-java-templates/src/main/java/org/nuiton/eugene/java/JavaBeanTransformerTagValues.java create mode 100644 eugene-java-templates/src/main/java/org/nuiton/eugene/java/SimpleJavaBeanTransformerTagValues.java create mode 100644 eugene-java-templates/src/main/java/org/nuiton/eugene/java/SimpleJavaBeanWithNoInterfaceTransformerTagValues.java create mode 100644 eugene-java-templates/src/main/resources/META-INF/services/org.nuiton.eugene.models.extension.stereotype.provider.StereotypeMetadatasProvider create mode 100644 eugene-java-templates/src/main/resources/META-INF/services/org.nuiton.eugene.models.extension.tagvalue.provider.TagValueMetadatasProvider create mode 100644 eugene-java-templates/src/main/resources/i18n/eugene-java-templates_en_GB.properties create mode 100644 eugene-java-templates/src/main/resources/i18n/eugene-java-templates_fr_FR.properties copy eugene-java-templates/src/test/java/org/nuiton/eugene/java/{JavaTemplatesStereoTypesTest.java => EugeneJavaStereoTypesTest.java} (50%) copy eugene-java-templates/src/test/java/org/nuiton/eugene/java/{JavaTemplatesTagValuesTest.java => EugeneJavaTagValuesTest.java} (69%) delete mode 100644 eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/GenerateApplicationConfigMojo.java create mode 100644 eugene/src/main/java/org/nuiton/eugene/EugeneCoreStereotypes.java create mode 100644 eugene/src/main/java/org/nuiton/eugene/EugeneCoreTagValues.java copy eugene/src/main/java/org/nuiton/eugene/models/{ => extension}/stereotype/InvalidStereotypeSyntaxException.java (93%) copy eugene/src/main/java/org/nuiton/eugene/models/{ => extension}/stereotype/MismatchStereotypeTargetException.java (93%) copy eugene/src/main/java/org/nuiton/eugene/models/{ => extension}/stereotype/MissingStereoTypeException.java (61%) copy eugene/src/main/java/org/nuiton/eugene/models/{stereotype/StereotypeAble.java => extension/stereotype/StereotypeMetadata.java} (53%) copy eugene/src/main/java/org/nuiton/eugene/models/{ => extension}/stereotype/StereotypeNotFoundException.java (93%) copy eugene/src/main/java/org/nuiton/eugene/models/{stereotype/Stereotypes.java => extension/stereotype/StereotypeUtil.java} (73%) copy eugene/src/main/java/org/nuiton/eugene/models/{stereotype/StereotypeAble.java => extension/stereotype/WithStereotypes.java} (92%) create mode 100644 eugene/src/main/java/org/nuiton/eugene/models/extension/stereotype/provider/AggregateStereotypeMetadatasProvider.java create mode 100644 eugene/src/main/java/org/nuiton/eugene/models/extension/stereotype/provider/DefaultStereotypeMetadatasProvider.java copy eugene/src/main/java/org/nuiton/eugene/models/{object/reader/extension/ModelExtensionFileParser.java => extension/stereotype/provider/StereotypeMetadatasProvider.java} (53%) copy eugene/src/main/java/org/nuiton/eugene/models/{ => extension}/tagvalue/InvalidTagValueSyntaxException.java (94%) copy eugene/src/main/java/org/nuiton/eugene/models/{ => extension}/tagvalue/MismatchTagValueTargetException.java (94%) copy eugene/src/main/java/org/nuiton/eugene/models/{ => extension}/tagvalue/MissingTagValueException.java (53%) create mode 100644 eugene/src/main/java/org/nuiton/eugene/models/extension/tagvalue/TagValueMetadata.java copy eugene/src/main/java/org/nuiton/eugene/models/{ => extension}/tagvalue/TagValueNotFoundException.java (94%) copy eugene/src/main/java/org/nuiton/eugene/models/{tagvalue/TagValues.java => extension/tagvalue/TagValueUtil.java} (52%) copy eugene/src/main/java/org/nuiton/eugene/models/{tagvalue/TagValueAble.java => extension/tagvalue/WithTagValues.java} (94%) copy eugene/src/main/java/org/nuiton/eugene/models/{ => extension}/tagvalue/matcher/EqualsTagValueNameMatcher.java (72%) copy eugene/src/main/java/org/nuiton/eugene/models/{ => extension}/tagvalue/matcher/StartsWithTagNameMatcher.java (72%) copy eugene/src/main/java/org/nuiton/eugene/models/{ => extension}/tagvalue/matcher/TagValueDefinitionMatcher.java (57%) create mode 100644 eugene/src/main/java/org/nuiton/eugene/models/extension/tagvalue/provider/AggregateTagValueMetadatasProvider.java create mode 100644 eugene/src/main/java/org/nuiton/eugene/models/extension/tagvalue/provider/DefaultTagValueMetadatasProvider.java copy eugene/src/main/java/org/nuiton/eugene/models/{object/reader/extension/ModelExtensionFileParser.java => extension/tagvalue/provider/TagValueMetadatasProvider.java} (55%) create mode 100644 eugene/src/main/resolver-cache/META-INF/services/org.nuiton.eugene.models.extension.stereotype.provider.StereotypeMetadatasProvider create mode 100644 eugene/src/main/resolver-cache/META-INF/services/org.nuiton.eugene.models.extension.tagvalue.provider.TagValueMetadatasProvider create mode 100644 eugene/src/main/resources/i18n/eugene_en_GB.properties create mode 100644 eugene/src/main/resources/i18n/eugene_fr_FR.properties copy eugene/src/test/java/org/nuiton/eugene/{EugeneStereotypesTest.java => EugeneCoreStereotypesTest.java} (64%) copy eugene/src/test/java/org/nuiton/eugene/{EugeneTagValuesTest.java => EugeneCoreTagValuesTest.java} (58%) -- To stop receiving notification emails like this one, please contact nuiton.org SCM administrator <admin+scm@nuiton.org>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/editor in repository eugene. See https://gitlab.nuiton.org/nuiton/eugene.git commit 5ba610d449497d6cc7d6f19b5e5d32dc547884e9 Author: Tony CHEMIT <chemit@codelutin.com> Date: Sun Oct 2 18:09:28 2016 +0200 Use new API in mojos + remove extension of providers no more used --- eugene-maven-plugin/pom.xml | 5 + .../nuiton/eugene/plugin/AvailableDataMojo.java | 197 +++++++-------------- .../org/nuiton/eugene/plugin/GenerateMojo.java | 150 +++------------- .../nuiton/eugene/plugin/StereotypesReport.java | 24 ++- .../org/nuiton/eugene/plugin/TagValuesReport.java | 21 +-- .../renderer/AbstractEugeneReportRenderer.java | 28 +-- .../plugin/renderer/StereotypesReportRenderer.java | 57 +++--- .../plugin/renderer/TagValuesReportRenderer.java | 60 ++++--- .../writer/BaseChainedFileWriterToMemoryModel.java | 27 +-- 9 files changed, 206 insertions(+), 363 deletions(-) diff --git a/eugene-maven-plugin/pom.xml b/eugene-maven-plugin/pom.xml index 162ca3d..d28cb38 100644 --- a/eugene-maven-plugin/pom.xml +++ b/eugene-maven-plugin/pom.xml @@ -97,6 +97,11 @@ </dependency> <dependency> + <groupId>org.nuiton.i18n</groupId> + <artifactId>nuiton-i18n</artifactId> + </dependency> + + <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> </dependency> diff --git a/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/AvailableDataMojo.java b/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/AvailableDataMojo.java index 8157f4c..23bc216 100644 --- a/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/AvailableDataMojo.java +++ b/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/AvailableDataMojo.java @@ -22,6 +22,8 @@ package org.nuiton.eugene.plugin; +import com.google.common.base.Function; +import com.google.common.collect.Maps; import org.apache.commons.lang3.StringUtils; import org.apache.maven.plugin.AbstractMojo; import org.apache.maven.plugin.MojoExecutionException; @@ -33,21 +35,20 @@ import org.apache.maven.plugins.annotations.ResolutionScope; import org.nuiton.eugene.ModelReader; import org.nuiton.eugene.Template; import org.nuiton.eugene.models.Model; +import org.nuiton.eugene.models.extension.stereotype.StereotypeMetadata; +import org.nuiton.eugene.models.extension.stereotype.provider.StereotypeMetadatasProvider; +import org.nuiton.eugene.models.extension.tagvalue.TagValueMetadata; +import org.nuiton.eugene.models.extension.tagvalue.provider.TagValueMetadatasProvider; import org.nuiton.eugene.models.object.ObjectModel; -import org.nuiton.eugene.models.stereotype.StereotypeDefinition; -import org.nuiton.eugene.models.stereotype.StereotypeDefinitionProvider; -import org.nuiton.eugene.models.stereotype.StereotypeDefinitionProviders; -import org.nuiton.eugene.models.tagvalue.TagValueDefinition; -import org.nuiton.eugene.models.tagvalue.TagValueDefinitionProvider; -import org.nuiton.eugene.models.tagvalue.TagValueDefinitionProviders; import org.nuiton.eugene.writer.ChainedFileWriter; import java.util.Arrays; import java.util.EnumSet; -import java.util.LinkedHashMap; import java.util.Map; import java.util.Set; +import static org.nuiton.i18n.I18n.t; + /** * Obtain the list of some known data informations. * @@ -58,7 +59,6 @@ import java.util.Set; * @since 2.0.0 */ @Mojo(name = "available-data", - requiresProject = true, requiresDirectInvocation = true, requiresDependencyResolution = ResolutionScope.TEST) public class AvailableDataMojo extends AbstractMojo { @@ -108,24 +108,20 @@ public class AvailableDataMojo extends AbstractMojo { * * @since 2.9 */ - @Component(role = StereotypeDefinitionProvider.class) - protected Map<String, StereotypeDefinitionProvider> stereotypeDefinitionProviders; + @Component(role = StereotypeMetadatasProvider.class) + protected Map<String, StereotypeMetadatasProvider> stereotypeMetadatasProviders; /** * All available tag value providers introspects via plexus. * * @since 2.9 */ - @Component(role = TagValueDefinitionProvider.class) - protected Map<String, TagValueDefinitionProvider> tagValueDefinitionProviders; - - protected Map<String, TagValueDefinitionProvider> loadedTagValueDefinitionProviders; - - protected Map<String, StereotypeDefinitionProvider> loadedStereotypeDefinitionProviders; + @Component(role = TagValueMetadatasProvider.class) + protected Map<String, TagValueMetadatasProvider> tagValueMetadatasProviders; - protected TagValueDefinitionProvider currentTagValueDefinitionProvider; + protected TagValueMetadatasProvider currentTagValueMetadatasProvider; - protected StereotypeDefinitionProvider currentStereotypeDefinitionProvider; + protected StereotypeMetadatasProvider currentStereotypeMetadatasProvider; @Override public void execute() throws MojoExecutionException, MojoFailureException { @@ -155,45 +151,18 @@ public class AvailableDataMojo extends AbstractMojo { safeDataTypes.add(data); } catch (IllegalArgumentException e) { getLog().warn( - "does not know data type : " + s + " use one of " + - Arrays.toString(AvailableData.values()) + "does not know data type : " + s + " use one of " + Arrays.toString(AvailableData.values()) ); } } } - if (safeDataTypes.contains(AvailableData.stereotype)) { - - loadedStereotypeDefinitionProviders = new LinkedHashMap<String, StereotypeDefinitionProvider>(); - // init stores - for (Map.Entry<String, StereotypeDefinitionProvider> e : stereotypeDefinitionProviders.entrySet()) { - StereotypeDefinitionProvider provider = StereotypeDefinitionProviders.newProvider( - Arrays.asList(e.getValue()), - false - ); - loadedStereotypeDefinitionProviders.put(e.getKey(), provider); - } - } - - if (safeDataTypes.contains(AvailableData.tagvalue)) { - - loadedTagValueDefinitionProviders = new LinkedHashMap<String, TagValueDefinitionProvider>(); - // init stores - for (Map.Entry<String, TagValueDefinitionProvider> e : tagValueDefinitionProviders.entrySet()) { - TagValueDefinitionProvider provider = TagValueDefinitionProviders.newProvider( - Arrays.asList(e.getValue()), - false - ); - loadedTagValueDefinitionProviders.put(e.getKey(), provider); - } - } for (AvailableData data : safeDataTypes) { buffer.append("\n"); appendData(data, buffer); } - getLog().info("Get datas for data types : " + safeDataTypes + - buffer.toString()); + getLog().info("Get datas for data types : " + safeDataTypes + buffer.toString()); } protected void appendData(AvailableData data, StringBuilder buffer) { @@ -203,25 +172,24 @@ public class AvailableDataMojo extends AbstractMojo { if (data == AvailableData.tagvalue) { int nbData = 0; - for (TagValueDefinitionProvider provider : loadedTagValueDefinitionProviders.values()) { - currentTagValueDefinitionProvider = provider; + for (TagValueMetadatasProvider provider : tagValueMetadatasProviders.values()) { + currentTagValueMetadatasProvider = provider; nbData += data.getData(this).size(); } - currentTagValueDefinitionProvider = null; + currentTagValueMetadatasProvider = null; String format = "\nFound %s %ss in %s provider(s) : %s\n"; buffer.append(String.format(format, - nbData, - dataType, - loadedTagValueDefinitionProviders.size(), - loadedTagValueDefinitionProviders.keySet()) + nbData, + dataType, + tagValueMetadatasProviders.size(), + tagValueMetadatasProviders.keySet()) ); - for (Map.Entry<String, TagValueDefinitionProvider> e : loadedTagValueDefinitionProviders.entrySet()) { + for (Map.Entry<String, TagValueMetadatasProvider> e : tagValueMetadatasProviders.entrySet()) { String providerName = e.getKey(); - TagValueDefinitionProvider provider = e.getValue(); - currentTagValueDefinitionProvider = provider; + currentTagValueMetadatasProvider = e.getValue(); Map<String, ?> map = data.getData(this); int size = map.size(); @@ -244,25 +212,24 @@ public class AvailableDataMojo extends AbstractMojo { } else if (data == AvailableData.stereotype) { int nbData = 0; - for (StereotypeDefinitionProvider provider : loadedStereotypeDefinitionProviders.values()) { - currentStereotypeDefinitionProvider = provider; + for (StereotypeMetadatasProvider provider : stereotypeMetadatasProviders.values()) { + currentStereotypeMetadatasProvider = provider; nbData += data.getData(this).size(); } - currentStereotypeDefinitionProvider = null; + currentStereotypeMetadatasProvider = null; String format = "\nFound %s %ss in %s provider(s) : %s\n"; buffer.append(String.format(format, - nbData, - dataType, - loadedStereotypeDefinitionProviders.size(), - loadedStereotypeDefinitionProviders.keySet()) + nbData, + dataType, + stereotypeMetadatasProviders.size(), + stereotypeMetadatasProviders.keySet()) ); - for (Map.Entry<String, StereotypeDefinitionProvider> e : loadedStereotypeDefinitionProviders.entrySet()) { + for (Map.Entry<String, StereotypeMetadatasProvider> e : stereotypeMetadatasProviders.entrySet()) { String providerName = e.getKey(); - StereotypeDefinitionProvider provider = e.getValue(); - currentStereotypeDefinitionProvider = provider; + currentStereotypeMetadatasProvider = e.getValue(); Map<String, ?> map = data.getData(this); int size = map.size(); @@ -321,18 +288,17 @@ public class AvailableDataMojo extends AbstractMojo { @Override String toString(Object data) { ChainedFileWriter w = (ChainedFileWriter) data; - StringBuilder b = new StringBuilder(super.toString(data)); - b.append("\n").append(" inputProtocol : "); - b.append(w.getInputProtocol()); - b.append("\n").append(" outputProtocol : "); - b.append(w.getOutputProtocol(ObjectModel.NAME)); - b.append("\n").append(" defaultIncludes : "); - b.append(w.getDefaultIncludes()); - b.append("\n").append(" defaultInputDirectory : "); - b.append(w.getDefaultInputDirectory()); - b.append("\n").append(" defaultTestInputDirectory : "); - b.append(w.getDefaultTestInputDirectory()); - return b.toString(); + String b = super.toString(data) + "\n" + " inputProtocol : " + + w.getInputProtocol() + + "\n" + " outputProtocol : " + + w.getOutputProtocol(ObjectModel.NAME) + + "\n" + " defaultIncludes : " + + w.getDefaultIncludes() + + "\n" + " defaultInputDirectory : " + + w.getDefaultInputDirectory() + + "\n" + " defaultTestInputDirectory : " + + w.getDefaultTestInputDirectory(); + return b; } }, modelreader { @@ -350,19 +316,25 @@ public class AvailableDataMojo extends AbstractMojo { tagvalue { @Override public Map<String, ?> getData(AvailableDataMojo mojo) { - return mojo.getCurrentTagValueDefinitionProvider().getDefinition(); + Set<TagValueMetadata> tagValues = mojo.currentTagValueMetadatasProvider.getTagValues(); + return Maps.uniqueIndex(tagValues, new Function<TagValueMetadata, String>() { + @Override + public String apply(TagValueMetadata input) { + return input.getName(); + } + }); } @Override String toString(Object data) { - TagValueDefinition d = (TagValueDefinition) data; + TagValueMetadata d = (TagValueMetadata) data; StringBuilder sb = new StringBuilder(); - Class<?>[] targets = d.target(); + Set<Class<?>> targets = d.getTargets(); for (Class<?> aClass : targets) { sb.append(", ").append(aClass.getSimpleName()); } String result = sb.toString(); - if (targets.length > 0) { + if (targets.size() > 0) { result = result.substring(2); } return result; @@ -377,25 +349,31 @@ public class AvailableDataMojo extends AbstractMojo { buffer.append("] targets : '"); buffer.append(toString(value)); buffer.append("\' : "); - buffer.append(((TagValueDefinition) value).documentation()); + buffer.append(t(((TagValueMetadata) value).getDescription())); } }, stereotype { @Override public Map<String, ?> getData(AvailableDataMojo mojo) { - return mojo.getCurrentStereotypeDefinitionProvider().getDefinition(); + Set<StereotypeMetadata> stereotypes = mojo.currentStereotypeMetadatasProvider.getStereotypes(); + return Maps.uniqueIndex(stereotypes, new Function<StereotypeMetadata, String>() { + @Override + public String apply(StereotypeMetadata input) { + return input.getName(); + } + }); } @Override String toString(Object data) { - StereotypeDefinition d = (StereotypeDefinition) data; + StereotypeMetadata d = (StereotypeMetadata) data; StringBuilder sb = new StringBuilder(); - Class<?>[] targets = d.target(); + Set<Class<?>> targets = d.getTargets(); for (Class<?> aClass : targets) { sb.append(", ").append(aClass.getSimpleName()); } String result = sb.toString(); - if (targets.length > 0) { + if (targets.size() > 0) { result = result.substring(2); } return result; @@ -410,7 +388,7 @@ public class AvailableDataMojo extends AbstractMojo { buffer.append("] targets : '"); buffer.append(toString(value)); buffer.append("\' : "); - buffer.append(((StereotypeDefinition) value).documentation()); + buffer.append(t(((StereotypeMetadata) value).getDescription())); } }; @@ -431,45 +409,4 @@ public class AvailableDataMojo extends AbstractMojo { } } - public TagValueDefinitionProvider getCurrentTagValueDefinitionProvider() { - return currentTagValueDefinitionProvider; - } - - public StereotypeDefinitionProvider getCurrentStereotypeDefinitionProvider() { - return currentStereotypeDefinitionProvider; - } - - protected TagValueDefinitionProvider getTagValueDefinitionProvider() throws MojoExecutionException { - - TagValueDefinitionProvider provider; - - if (tagValueDefinitionProviders == null || tagValueDefinitionProviders.isEmpty()) { - - // could not find any model properties via plexus - // try to obtain them by ServiceLoader - - provider = TagValueDefinitionProviders.newProvider(getClass().getClassLoader(), false); - } else { - provider = TagValueDefinitionProviders.newProvider(tagValueDefinitionProviders.values(), false); - } - return provider; - } - - - protected StereotypeDefinitionProvider getStereotypeDefinitionProvider() throws MojoExecutionException { - - StereotypeDefinitionProvider provider; - - if (stereotypeDefinitionProviders == null || stereotypeDefinitionProviders.isEmpty()) { - - // could not find any model properties via plexus - // try to obtain them by ServiceLoader - - provider = StereotypeDefinitionProviders.newProvider(getClass().getClassLoader(), false); - } else { - provider = StereotypeDefinitionProviders.newProvider(stereotypeDefinitionProviders.values(), false); - } - return provider; - } - } diff --git a/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/GenerateMojo.java b/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/GenerateMojo.java index 0172e55..4f410be 100644 --- a/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/GenerateMojo.java +++ b/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/GenerateMojo.java @@ -38,12 +38,6 @@ import org.nuiton.eugene.ModelHelper; import org.nuiton.eugene.ModelReader; import org.nuiton.eugene.Template; import org.nuiton.eugene.models.Model; -import org.nuiton.eugene.models.extension.stereotype.StereotypeMetadatasProviderManagerExtension; -import org.nuiton.eugene.models.extension.stereotype.provider.AggregateStereotypeMetadatasProvider; -import org.nuiton.eugene.models.extension.stereotype.provider.StereotypeMetadatasProvider; -import org.nuiton.eugene.models.extension.tagvalue.TagValueMetadatasProviderManagerExtension; -import org.nuiton.eugene.models.extension.tagvalue.provider.AggregateTagValueMetadatasProvider; -import org.nuiton.eugene.models.extension.tagvalue.provider.TagValueMetadatasProvider; import org.nuiton.eugene.models.object.reader.InvalidModelPropertiesException; import org.nuiton.eugene.plugin.writer.BaseChainedFileWriter; import org.nuiton.eugene.plugin.writer.BaseChainedFileWriterToMemoryModel; @@ -65,7 +59,7 @@ import java.net.MalformedURLException; import java.net.URL; import java.net.URLClassLoader; import java.util.ArrayList; -import java.util.Arrays; +import java.util.Collections; import java.util.HashSet; import java.util.LinkedHashMap; import java.util.List; @@ -81,10 +75,7 @@ import java.util.Set; * @author Tony Chemit - chemit@codelutin.com * @since 2.5 */ -@Mojo(name = "generate", - requiresProject = true, - requiresDirectInvocation = false, - requiresDependencyResolution = ResolutionScope.COMPILE) +@Mojo(name = "generate", requiresDependencyResolution = ResolutionScope.COMPILE) public class GenerateMojo extends AbstractPlugin implements ChainedFileWriterConfiguration, PluginWithEncoding { /** @@ -196,7 +187,6 @@ public class GenerateMojo extends AbstractPlugin implements ChainedFileWriterCon * * By default, use an {@code objectmodel}. * - * @required * @since 2.0.0 */ @Parameter(property = "eugene.modelType", defaultValue = "objectmodel", required = true) @@ -205,7 +195,6 @@ public class GenerateMojo extends AbstractPlugin implements ChainedFileWriterCon /** * Properties to pass to writer. * - * @parameter * @since 2.0.0 */ @Parameter @@ -334,38 +323,6 @@ public class GenerateMojo extends AbstractPlugin implements ChainedFileWriterCon /** All available templates introspects via plexus. */ @Component(role = Template.class) protected Map<String, Template<?>> modelTemplates; -// -// /** -// * All available stereotype providers introspects via plexus. -// * -// * @since 2.9 -// */ -// @Component(role = StereotypeMetadatasProvider.class) -// protected Map<String, StereotypeMetadatasProvider> stereotypeMetadatasProviders; -// -// /** -// * All available tag value providers introspects via plexus. -// * -// * @since 2.9 -// */ -// @Component(role = TagValueMetadatasProvider.class) -// protected Map<String, TagValueMetadatasProvider> tagValueMetadatasProviders; - - /** - * All available stereotype providers introspects via plexus. - * - * @since 3.0 - */ - @Component(role = StereotypeMetadatasProvider.class) - protected Set<StereotypeMetadatasProvider> stereotypeMetadatasProviders; - - /** - * All available tag value providers introspects via plexus. - * - * @since 3.0 - */ - @Component(role = TagValueMetadatasProvider.class) - protected Set<TagValueMetadatasProvider> tagValueMetadatasProviders; /** The engine to compute {@link ChainedFileWriter} from inputs entries. */ @Component(role = ChainedWriterEngine.class) @@ -379,7 +336,7 @@ public class GenerateMojo extends AbstractPlugin implements ChainedFileWriterCon protected List<Template<Model>> templateList; protected WriterReport newWriterReport() { - WriterReport writerReport = new WriterReport() { + return new WriterReport() { @Override public void addFile(String entry, File file, boolean b) { @@ -403,7 +360,6 @@ public class GenerateMojo extends AbstractPlugin implements ChainedFileWriterCon } } }; - return writerReport; } @Override @@ -424,14 +380,14 @@ public class GenerateMojo extends AbstractPlugin implements ChainedFileWriterCon if (model == null) { throw new MojoExecutionException( "No modelType named '" + modelType + "', use one of " + - _models.keySet() + _models.keySet() ); } if (inputs.length == 0) { throw new MojoExecutionException( "Must specify something to include using the includes " + - "property" + "property" ); } //FIXME-TC20091217 use a configurator in plexus ? @@ -467,7 +423,7 @@ public class GenerateMojo extends AbstractPlugin implements ChainedFileWriterCon } if (properties == null) { - properties = new LinkedHashMap<String, Object>(); + properties = new LinkedHashMap<>(); } if (engine.containsWriter("xmi")) { @@ -475,7 +431,7 @@ public class GenerateMojo extends AbstractPlugin implements ChainedFileWriterCon // add xmi writer support properties.put(XmiChainedFileWriter.PROP_FULL_PACKAGE_PATH, - fullPackagePath); + fullPackagePath); properties.put(XmiChainedFileWriter.PROP_EXTRACTED_PACKAGES, extractedPackages); properties.put(XmiChainedFileWriter.PROP_RESOLVER, resolver); } @@ -484,14 +440,7 @@ public class GenerateMojo extends AbstractPlugin implements ChainedFileWriterCon // add model writer support - properties.put(BaseChainedFileWriterToMemoryModel.PROP_TAG_VALUE_DEFINITION_PROVIDER, - getTagValueMetadatasProvider()); - - properties.put(BaseChainedFileWriterToMemoryModel.PROP_STEREOTYPE_DEFINITION_PROVIDER, - getStereotypeMetadatasProvider()); - - properties.put(BaseChainedFileWriterToMemoryModel.PROP_FAIL_IF_UNSAFE, - failIfUnsafe); + properties.put(BaseChainedFileWriterToMemoryModel.PROP_FAIL_IF_UNSAFE, failIfUnsafe); } // init templates @@ -519,7 +468,7 @@ public class GenerateMojo extends AbstractPlugin implements ChainedFileWriterCon } try { - List<String> skipInputList = new ArrayList<String>(); + List<String> skipInputList = new ArrayList<>(); if (!StringUtils.isEmpty(skipInputs)) { @@ -530,12 +479,12 @@ public class GenerateMojo extends AbstractPlugin implements ChainedFileWriterCon // launch writers in incoming order of dicovering of them - Set<ChainedFileWriterToMemoryModel> models = new HashSet<ChainedFileWriterToMemoryModel>(); + Set<ChainedFileWriterToMemoryModel> models = new HashSet<>(); for (ChainedFileWriter writer : engine.getSelectedWriters()) { if (skipInputList.contains(writer.getInputProtocol())) { getLog().info("Skip phase [" + writer.getInputProtocol() + - "] as required in skipInputs configuration."); + "] as required in skipInputs configuration."); continue; } long t0 = System.nanoTime(); @@ -592,28 +541,17 @@ public class GenerateMojo extends AbstractPlugin implements ChainedFileWriterCon getLog().info("Process phase [generator]"); - AggregateTagValueMetadatasProvider tagValueMetadatasProvider = getTagValueMetadatasProvider(); - AggregateStereotypeMetadatasProvider stereotypeMetadatasProvider = getStereotypeMetadatasProvider(); - for (ChainedFileWriterToMemoryModel entry : models) { Model model = entry.getModel(); - // init tag values extension - TagValueMetadatasProviderManagerExtension extension = model.getExtension(TagValueMetadatasProviderManagerExtension.OBJECTMODEL_EXTENSION, TagValueMetadatasProviderManagerExtension.class); - extension.setProdiver(tagValueMetadatasProvider); - - // init stereotype extension - StereotypeMetadatasProviderManagerExtension stereotypeExtension = model.getExtension(StereotypeMetadatasProviderManagerExtension.OBJECTMODEL_EXTENSION, StereotypeMetadatasProviderManagerExtension.class); - stereotypeExtension.setProdiver(stereotypeMetadatasProvider); - Long lastModified = entry.getLastModifiedSource(); File outputDir = entry.getOutputDirectory(); applyTemplates(model, - lastModified, - outputDir, - templateList, - writerReport); + lastModified, + outputDir, + templateList, + writerReport); // must fix source compile roots fixCompileSourceRoots(outputDir); @@ -801,8 +739,8 @@ public class GenerateMojo extends AbstractPlugin implements ChainedFileWriterCon public ClassLoader getFixedClassLoader() throws MojoExecutionException { if (fixedClassLoader == null) { - Set<String> urlsAsString = new HashSet<String>(); - List<URL> urls = new ArrayList<URL>(); + Set<String> urlsAsString = new HashSet<>(); + List<URL> urls = new ArrayList<>(); try { ClassLoader loader; @@ -811,7 +749,7 @@ public class GenerateMojo extends AbstractPlugin implements ChainedFileWriterCon getProject().getBuild().getOutputDirectory()); if (verbose) { getLog().info("Add in generator's classLoader : " + - extraClassPathDirectory); + extraClassPathDirectory); } addDirectoryToUrlsList( extraClassPathDirectory, @@ -843,8 +781,8 @@ public class GenerateMojo extends AbstractPlugin implements ChainedFileWriterCon (MavenProject) entry.getValue(); if (verbose) { getLog().info("Add project reference in " + - "generator's classLoader : '" + - relatedProject.getArtifact() + "'"); + "generator's classLoader : '" + + relatedProject.getArtifact() + "'"); } //TODO il faudrait peut-etre aussi ajouter les //TODO dependances ? @@ -943,7 +881,7 @@ public class GenerateMojo extends AbstractPlugin implements ChainedFileWriterCon project.addTestCompileSourceRoot(destDirGen.getPath()); Resource resources = new Resource(); resources.setDirectory(destDirGen.getAbsolutePath()); - resources.setExcludes(Arrays.asList("**/*.java")); + resources.setExcludes(Collections.singletonList("**/*.java")); if (isVerbose()) { getLog().info("Add test resource root :" + resources); } @@ -958,7 +896,7 @@ public class GenerateMojo extends AbstractPlugin implements ChainedFileWriterCon project.addCompileSourceRoot(destDirGen.getPath()); Resource resources = new Resource(); resources.setDirectory(destDirGen.getAbsolutePath()); - resources.setExcludes(Arrays.asList("**/*.java")); + resources.setExcludes(Collections.singletonList("**/*.java")); if (isVerbose()) { getLog().info("Add resource root :" + resources); } @@ -967,42 +905,6 @@ public class GenerateMojo extends AbstractPlugin implements ChainedFileWriterCon } } - protected AggregateTagValueMetadatasProvider getTagValueMetadatasProvider() throws MojoExecutionException { - - AggregateTagValueMetadatasProvider provider; - - if (tagValueMetadatasProviders == null || - tagValueMetadatasProviders.isEmpty() || - isTestPhase()) { - - // could not find any model properties via plexus - // try to obtain them by ServiceLoader - - provider = new AggregateTagValueMetadatasProvider(getFixedClassLoader()); - } else { - provider = new AggregateTagValueMetadatasProvider(tagValueMetadatasProviders); - } - return provider; - } - - - protected AggregateStereotypeMetadatasProvider getStereotypeMetadatasProvider() throws MojoExecutionException { - - AggregateStereotypeMetadatasProvider provider; - - if (stereotypeMetadatasProviders == null || - stereotypeMetadatasProviders.isEmpty() || - isTestPhase()) { - - // could not find any model properties via plexus - // try to obtain them by ServiceLoader - - provider = new AggregateStereotypeMetadatasProvider(getFixedClassLoader()); - } else { - provider = new AggregateStereotypeMetadatasProvider(stereotypeMetadatasProviders); - } - return provider; - } protected List<Template<Model>> initTemplates() { @@ -1024,7 +926,7 @@ public class GenerateMojo extends AbstractPlugin implements ChainedFileWriterCon } } else { templateProperties.put(Template.PROP_GENERATED_PACKAGES, - generatedPackages); + generatedPackages); if (verbose) { getLog().info("generating only for packages " + generatedPackages); } @@ -1032,7 +934,7 @@ public class GenerateMojo extends AbstractPlugin implements ChainedFileWriterCon // init templates - List<Template<Model>> templatesList = new ArrayList<Template<Model>>(); + List<Template<Model>> templatesList = new ArrayList<>(); if (StringUtils.isNotEmpty(templates)) { String[] templatesNames = templates.split(","); @@ -1044,14 +946,14 @@ public class GenerateMojo extends AbstractPlugin implements ChainedFileWriterCon if (template == null) { getLog().warn("template [" + templateName + "] is not " + - "registred via plexus, try to load it directly"); + "registred via plexus, try to load it directly"); try { template = (Template<Model>) Class.forName( templateName, true, loader).newInstance(); } catch (Exception e) { throw new IllegalStateException( "Can't obtain template [" + templateName + - "] for reason " + e.getMessage(), e + "] for reason " + e.getMessage(), e ); } } diff --git a/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/StereotypesReport.java b/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/StereotypesReport.java index 351a3a7..34ed9cb 100644 --- a/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/StereotypesReport.java +++ b/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/StereotypesReport.java @@ -27,24 +27,23 @@ import org.apache.maven.plugins.annotations.Mojo; import org.apache.maven.plugins.annotations.Parameter; import org.apache.maven.plugins.annotations.ResolutionScope; import org.apache.maven.reporting.MavenReportException; -import org.nuiton.eugene.models.stereotype.StereotypeDefinitionProvider; -import org.nuiton.eugene.models.tagvalue.TagValueDefinitionProvider; +import org.nuiton.eugene.models.extension.stereotype.provider.StereotypeMetadatasProvider; import org.nuiton.eugene.plugin.renderer.StereotypesReportRenderer; import java.util.Locale; import java.util.Map; /** - * To report a {@link TagValueDefinitionProvider}. + * To report a {@link StereotypeMetadatasProvider}. * * Created on 5/31/14. * * @author Tony Chemit - chemit@codelutin.com * @since 2.10 */ -@Mojo(name = "stereotypes-report", requiresProject = true, requiresReports = true, +@Mojo(name = "stereotypes-report", requiresReports = true, requiresDependencyResolution = ResolutionScope.COMPILE) -public class StereotypesReport extends AbstractEugeneReport<StereotypeDefinitionProvider> { +public class StereotypesReport extends AbstractEugeneReport<StereotypeMetadatasProvider> { /** * Name of the stereotypes provider. @@ -54,13 +53,13 @@ public class StereotypesReport extends AbstractEugeneReport<StereotypeDefinition @Parameter(property = "eugene.providerName", defaultValue = "${project.artifactId}", required = true) protected String providerName; - @Component(role = StereotypeDefinitionProvider.class) - protected Map<String, StereotypeDefinitionProvider> providers; + @Component(role = StereotypeMetadatasProvider.class) + protected Map<String, StereotypeMetadatasProvider> providers; @Override - protected StereotypeDefinitionProvider initData(Locale locale) throws MavenReportException { + protected StereotypeMetadatasProvider initData(Locale locale) throws MavenReportException { - StereotypeDefinitionProvider provider = providers.get(providerName); + StereotypeMetadatasProvider provider = providers.get(providerName); if (provider == null) { @@ -69,18 +68,15 @@ public class StereotypesReport extends AbstractEugeneReport<StereotypeDefinition } - provider.init(); - return provider; } @Override - protected StereotypesReportRenderer createRenderer(Locale locale, StereotypeDefinitionProvider data) { + protected StereotypesReportRenderer createRenderer(Locale locale, StereotypeMetadatasProvider data) { - StereotypesReportRenderer renderer = new StereotypesReportRenderer( + return new StereotypesReportRenderer( getSink(), i18n, locale, getOutputName(), javaDocDestDir, jxrDestDir, data); - return renderer; } diff --git a/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/TagValuesReport.java b/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/TagValuesReport.java index 87d3c0e..fef45e5 100644 --- a/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/TagValuesReport.java +++ b/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/TagValuesReport.java @@ -27,14 +27,14 @@ import org.apache.maven.plugins.annotations.Mojo; import org.apache.maven.plugins.annotations.Parameter; import org.apache.maven.plugins.annotations.ResolutionScope; import org.apache.maven.reporting.MavenReportException; -import org.nuiton.eugene.models.tagvalue.TagValueDefinitionProvider; +import org.nuiton.eugene.models.extension.tagvalue.provider.TagValueMetadatasProvider; import org.nuiton.eugene.plugin.renderer.TagValuesReportRenderer; import java.util.Locale; import java.util.Map; /** - * To report a {@link TagValueDefinitionProvider}. + * To report a {@link TagValueMetadatasProvider}. * * Created on 5/31/14. * @@ -43,7 +43,7 @@ import java.util.Map; */ @Mojo(name = "tag-values-report", requiresProject = true, requiresReports = true, requiresDependencyResolution = ResolutionScope.COMPILE) -public class TagValuesReport extends AbstractEugeneReport<TagValueDefinitionProvider> { +public class TagValuesReport extends AbstractEugeneReport<TagValueMetadatasProvider> { /** * Name of the tagValue provider. @@ -53,13 +53,13 @@ public class TagValuesReport extends AbstractEugeneReport<TagValueDefinitionProv @Parameter(property = "eugene.providerName", defaultValue = "${project.artifactId}", required = true) protected String providerName; - @Component(role = TagValueDefinitionProvider.class) - protected Map<String, TagValueDefinitionProvider> providers; + @Component(role = TagValueMetadatasProvider.class) + protected Map<String, TagValueMetadatasProvider> providers; @Override - protected TagValueDefinitionProvider initData(Locale locale) throws MavenReportException { + protected TagValueMetadatasProvider initData(Locale locale) throws MavenReportException { - TagValueDefinitionProvider provider = providers.get(providerName); + TagValueMetadatasProvider provider = providers.get(providerName); if (provider == null) { @@ -68,18 +68,15 @@ public class TagValuesReport extends AbstractEugeneReport<TagValueDefinitionProv } - provider.init(); - return provider; } @Override - protected TagValuesReportRenderer createRenderer(Locale locale, TagValueDefinitionProvider data) { + protected TagValuesReportRenderer createRenderer(Locale locale, TagValueMetadatasProvider data) { - TagValuesReportRenderer renderer = new TagValuesReportRenderer( + return new TagValuesReportRenderer( getSink(), i18n, locale, getOutputName(), javaDocDestDir, jxrDestDir, data); - return renderer; } diff --git a/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/renderer/AbstractEugeneReportRenderer.java b/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/renderer/AbstractEugeneReportRenderer.java index c7ac914..5a69f35 100644 --- a/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/renderer/AbstractEugeneReportRenderer.java +++ b/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/renderer/AbstractEugeneReportRenderer.java @@ -22,7 +22,7 @@ package org.nuiton.eugene.plugin.renderer; * #L% */ -import org.apache.commons.collections4.MapUtils; +import org.apache.commons.collections4.CollectionUtils; import org.apache.maven.doxia.sink.Sink; import org.apache.maven.doxia.sink.SinkEventAttributeSet; import org.apache.maven.doxia.sink.SinkEventAttributes; @@ -40,7 +40,7 @@ import org.nuiton.eugene.models.object.ObjectModelPackage; import org.nuiton.eugene.models.object.ObjectModelParameter; import java.util.Locale; -import java.util.Map; +import java.util.Set; /** * @author Tony Chemit - chemit@codelutin.com @@ -72,7 +72,9 @@ public abstract class AbstractEugeneReportRenderer<D, DD> extends AbstractMavenR protected final String jxrDestDir; - protected abstract Map<String, DD> getDataDetails(); + protected abstract Set<DD> getDataDetails(); + + protected abstract String getProviderDescription(D data); public AbstractEugeneReportRenderer(Sink sink, I18N i18n, @@ -112,6 +114,9 @@ public abstract class AbstractEugeneReportRenderer<D, DD> extends AbstractMavenR sink.paragraph(); sink.text(getText("report.overview.text")); sink.text(" "); + sink.italic(); + sink.text(getProviderDescription(data)); + sink.italic_(); sink.bold(); sink.text(implementation); sink.bold_(); @@ -132,14 +137,13 @@ public abstract class AbstractEugeneReportRenderer<D, DD> extends AbstractMavenR sink.link_(); sink.paragraph_(); - Map<String, DD> detailEntries = getDataDetails(); + Set<DD> detailEntries = getDataDetails(); renderSummaryTable(data, detailEntries); sink.section1_(); - - if (MapUtils.isNotEmpty(detailEntries)) { + if (CollectionUtils.isNotEmpty(detailEntries)) { sink.section1(); @@ -153,9 +157,9 @@ public abstract class AbstractEugeneReportRenderer<D, DD> extends AbstractMavenR sink.text(getText("report.detail.text")); sink.paragraph_(); - for (Map.Entry<String, DD> detailEntry : detailEntries.entrySet()) { + for (DD detailEntry : detailEntries) { - renderDetail(detailEntry.getKey(), detailEntry.getValue()); + renderDetail(detailEntry); } @@ -167,9 +171,9 @@ public abstract class AbstractEugeneReportRenderer<D, DD> extends AbstractMavenR protected abstract String getEugeneDocLink(); - protected abstract void renderSummaryTable(D provider, Map<String, DD> detailEntries); + protected abstract void renderSummaryTable(D provider, Set<DD> detailEntries); - protected abstract void renderDetail(String key, DD detail); + protected abstract void renderDetail(DD detail); protected String getText(boolean key) { return getText("report." + String.valueOf(key)); @@ -249,9 +253,9 @@ public abstract class AbstractEugeneReportRenderer<D, DD> extends AbstractMavenR sink.tableCell_(); } - protected void renderTargets(Class<?>... targets) { + protected void renderTargets(Set<Class<?>> targets) { - boolean moreThanOne = targets.length > 1; + boolean moreThanOne = targets.size() > 1; if (moreThanOne) { diff --git a/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/renderer/StereotypesReportRenderer.java b/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/renderer/StereotypesReportRenderer.java index 5c532a6..1605b25 100644 --- a/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/renderer/StereotypesReportRenderer.java +++ b/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/renderer/StereotypesReportRenderer.java @@ -22,14 +22,14 @@ package org.nuiton.eugene.plugin.renderer; * #L% */ -import org.apache.commons.collections4.MapUtils; +import org.apache.commons.collections4.CollectionUtils; import org.apache.maven.doxia.sink.Sink; import org.codehaus.plexus.i18n.I18N; -import org.nuiton.eugene.models.stereotype.StereotypeDefinition; -import org.nuiton.eugene.models.stereotype.StereotypeDefinitionProvider; +import org.nuiton.eugene.models.extension.stereotype.StereotypeMetadata; +import org.nuiton.eugene.models.extension.stereotype.provider.StereotypeMetadatasProvider; import java.util.Locale; -import java.util.Map; +import java.util.Set; /** * Created on 5/31/14. @@ -37,7 +37,7 @@ import java.util.Map; * @author Tony Chemit - chemit@codelutin.com * @since 2.10 */ -public class StereotypesReportRenderer extends AbstractEugeneReportRenderer<StereotypeDefinitionProvider, StereotypeDefinition> { +public class StereotypesReportRenderer extends AbstractEugeneReportRenderer<StereotypeMetadatasProvider, StereotypeMetadata> { public StereotypesReportRenderer(Sink sink, I18N i18n, @@ -45,19 +45,31 @@ public class StereotypesReportRenderer extends AbstractEugeneReportRenderer<Ster String bundleName, String javaDocDestDir, String jxrDestDir, - StereotypeDefinitionProvider data) { + StereotypeMetadatasProvider data) { super(sink, i18n, locale, bundleName, javaDocDestDir, jxrDestDir, data); } @Override - protected Map<String, StereotypeDefinition> getDataDetails() { - return data.getDefinition(); + protected Set<StereotypeMetadata> getDataDetails() { + return data.getStereotypes(); } @Override - protected void renderSummaryTable(StereotypeDefinitionProvider provider, Map<String, StereotypeDefinition> details) { + protected String getProviderDescription(StereotypeMetadatasProvider data) { + return data.getDescription(); + } + + @Override + protected void renderSummaryTable(StereotypeMetadatasProvider provider, Set<StereotypeMetadata> details) { + + sink.section2(); - if (MapUtils.isEmpty(details)) { + sink.sectionTitle2(); + sink.text(getText("report.provider.stereotype.name")); + sink.text(provider.getDescription()); + sink.sectionTitle2_(); + + if (CollectionUtils.isEmpty(details)) { sink.text(getText("report.noStereotype")); @@ -79,14 +91,13 @@ public class StereotypesReportRenderer extends AbstractEugeneReportRenderer<Ster sinkHeaderCellText(getText("report.stereotype.description")); sink.tableRow_(); - for (Map.Entry<String, StereotypeDefinition> entry : details.entrySet()) { + for (StereotypeMetadata entry : details) { - String stereotypeName = entry.getKey(); - StereotypeDefinition stereotypeDefinition = entry.getValue(); + String stereotypeName = entry.getName(); sink.tableRow(); sinkCellLink(stereotypeName, "./" + bundleName + ".html#detail_" + stereotypeName); - sinkCellText(stereotypeDefinition.documentation()); + sinkCellText(entry.getDescription()); sink.tableRow_(); } @@ -97,15 +108,17 @@ public class StereotypesReportRenderer extends AbstractEugeneReportRenderer<Ster } + sink.section2_(); + } @Override - protected void renderDetail(String key, StereotypeDefinition detail) { + protected void renderDetail(StereotypeMetadata detail) { sink.section2(); sink.sectionTitle2(); - sink.anchor("detail_" + key); - sink.text(getText("report.detail.stereotype.title") + " " + key); + sink.anchor("detail_" + detail.getName()); + sink.text(getText("report.detail.stereotype.title") + " " + detail.getName()); sink.anchor_(); sink.sectionTitle2_(); @@ -115,19 +128,19 @@ public class StereotypesReportRenderer extends AbstractEugeneReportRenderer<Ster sink.tableRow(); sinkHeaderCellText(getText("report.detail.stereotype.name")); - sinkCellText(key); + sinkCellText(detail.getName()); sink.tableRow_(); sink.tableRow(); sinkHeaderCellText(getText("report.detail.stereotype.description")); - sinkCellText(detail.documentation()); + sinkCellText(detail.getDescription()); sink.tableRow_(); sink.tableRow(); sinkHeaderCellText(getText("report.detail.stereotype.target")); sink.tableCell(); - renderTargets(detail.target()); + renderTargets(detail.getTargets()); sink.tableCell_(); sink.tableRow_(); @@ -153,9 +166,9 @@ public class StereotypesReportRenderer extends AbstractEugeneReportRenderer<Ster String url; if (locale.getCountry().equals(Locale.FRENCH.getCountry())) { - url = "http://doc.nuiton.org/eugene/fr/eugene/stereotypes.html"; + url = "http://eugene.nuiton.org/v/latest/fr/eugene/stereotypes.html"; } else { - url = "http://doc.nuiton.org/eugene/eugene/stereotypes.html"; + url = "http://eugene.nuiton.org/v/latest/eugene/stereotypes.html"; } return url; diff --git a/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/renderer/TagValuesReportRenderer.java b/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/renderer/TagValuesReportRenderer.java index 5ef953c..1e502e8 100644 --- a/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/renderer/TagValuesReportRenderer.java +++ b/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/renderer/TagValuesReportRenderer.java @@ -22,14 +22,14 @@ package org.nuiton.eugene.plugin.renderer; * #L% */ -import org.apache.commons.collections4.MapUtils; +import org.apache.commons.collections4.CollectionUtils; import org.apache.maven.doxia.sink.Sink; import org.codehaus.plexus.i18n.I18N; -import org.nuiton.eugene.models.tagvalue.TagValueDefinition; -import org.nuiton.eugene.models.tagvalue.TagValueDefinitionProvider; +import org.nuiton.eugene.models.extension.tagvalue.TagValueMetadata; +import org.nuiton.eugene.models.extension.tagvalue.provider.TagValueMetadatasProvider; import java.util.Locale; -import java.util.Map; +import java.util.Set; /** * Created on 5/31/14. @@ -37,7 +37,7 @@ import java.util.Map; * @author Tony Chemit - chemit@codelutin.com * @since 2.10 */ -public class TagValuesReportRenderer extends AbstractEugeneReportRenderer<TagValueDefinitionProvider, TagValueDefinition> { +public class TagValuesReportRenderer extends AbstractEugeneReportRenderer<TagValueMetadatasProvider, TagValueMetadata> { public TagValuesReportRenderer(Sink sink, I18N i18n, @@ -45,19 +45,31 @@ public class TagValuesReportRenderer extends AbstractEugeneReportRenderer<TagVal String bundleName, String javaDocDestDir, String jxrDestDir, - TagValueDefinitionProvider data) { + TagValueMetadatasProvider data) { super(sink, i18n, locale, bundleName, javaDocDestDir, jxrDestDir, data); } @Override - protected Map<String, TagValueDefinition> getDataDetails() { - return data.getDefinition(); + protected Set<TagValueMetadata> getDataDetails() { + return data.getTagValues(); } @Override - protected void renderSummaryTable(TagValueDefinitionProvider provider, Map<String, TagValueDefinition> details) { + protected String getProviderDescription(TagValueMetadatasProvider data) { + return data.getDescription(); + } - if (MapUtils.isEmpty(details)) { + @Override + protected void renderSummaryTable(TagValueMetadatasProvider provider, Set<TagValueMetadata> details) { + + sink.section2(); + + sink.sectionTitle2(); + sink.text(getText("report.provider.tagvalue.name")); + sink.text(provider.getDescription()); + sink.sectionTitle2_(); + + if (CollectionUtils.isEmpty(details)) { sink.text(getText("report.noTagValues")); @@ -79,14 +91,13 @@ public class TagValuesReportRenderer extends AbstractEugeneReportRenderer<TagVal sinkHeaderCellText(getText("report.tagValue.description")); sink.tableRow_(); - for (Map.Entry<String, TagValueDefinition> entry : details.entrySet()) { + for (TagValueMetadata entry : details) { - String tagValueName = entry.getKey(); - TagValueDefinition tagValueDefinition = entry.getValue(); + String tagValueName = entry.getName(); sink.tableRow(); sinkCellLink(tagValueName, "./" + bundleName + ".html#detail_" + tagValueName); - sinkCellText(tagValueDefinition.documentation()); + sinkCellText(entry.getDescription()); sink.tableRow_(); } @@ -96,16 +107,17 @@ public class TagValuesReportRenderer extends AbstractEugeneReportRenderer<TagVal sink.section3_(); } + sink.section2_(); } @Override - protected void renderDetail(String key, TagValueDefinition detail) { + protected void renderDetail(TagValueMetadata detail) { sink.section2(); sink.sectionTitle2(); - sink.anchor("detail_" + key); - sink.text(getText("report.detail.tagValue.title") + " " + key); + sink.anchor("detail_" + detail.getName()); + sink.text(getText("report.detail.tagValue.title") + " " + detail.getName()); sink.anchor_(); sink.sectionTitle2_(); @@ -115,29 +127,29 @@ public class TagValuesReportRenderer extends AbstractEugeneReportRenderer<TagVal sink.tableRow(); sinkHeaderCellText(getText("report.detail.tagValue.name")); - sinkCellText(key); + sinkCellText(detail.getName()); sink.tableRow_(); sink.tableRow(); sinkHeaderCellText(getText("report.detail.tagValue.description")); - sinkCellText(detail.documentation()); + sinkCellText(detail.getDescription()); sink.tableRow_(); sink.tableRow(); sinkHeaderCellText(getText("report.detail.tagValue.defaultValue")); - sinkCellText(detail.defaultValue()); + sinkCellText(detail.getDefaultValue()); sink.tableRow_(); sink.tableRow(); sinkHeaderCellText(getText("report.detail.tagValue.matcherClass")); - sinkCellText(detail.matcherClass().getName()); + sinkCellText(detail.getMatcherClass().getName()); sink.tableRow_(); sink.tableRow(); sinkHeaderCellText(getText("report.detail.tagValue.target")); sink.tableCell(); - renderTargets(detail.target()); + renderTargets(detail.getTargets()); sink.tableCell_(); sink.tableRow_(); @@ -163,9 +175,9 @@ public class TagValuesReportRenderer extends AbstractEugeneReportRenderer<TagVal String url; if (locale.getCountry().equals(Locale.FRENCH.getCountry())) { - url = "http://doc.nuiton.org/eugene/fr/eugene/tagValues.html"; + url = "http://eugene.nuiton.org/v/latest/fr/eugene/tagValues.html"; } else { - url = "http://doc.nuiton.org/eugene/eugene/tagValues.html"; + url = "http://eugene.nuiton.org/v/latest/eugene/tagValues.html"; } return url; diff --git a/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/writer/BaseChainedFileWriterToMemoryModel.java b/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/writer/BaseChainedFileWriterToMemoryModel.java index 897c546..3eb3787 100644 --- a/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/writer/BaseChainedFileWriterToMemoryModel.java +++ b/eugene-maven-plugin/src/main/java/org/nuiton/eugene/plugin/writer/BaseChainedFileWriterToMemoryModel.java @@ -25,9 +25,7 @@ package org.nuiton.eugene.plugin.writer; import org.nuiton.eugene.ModelReader; import org.nuiton.eugene.models.Model; import org.nuiton.eugene.models.extension.stereotype.InvalidStereotypeSyntaxException; -import org.nuiton.eugene.models.extension.stereotype.provider.StereotypeMetadatasProvider; import org.nuiton.eugene.models.extension.tagvalue.InvalidTagValueSyntaxException; -import org.nuiton.eugene.models.extension.tagvalue.provider.TagValueMetadatasProvider; import org.nuiton.eugene.models.object.ObjectModel; import org.nuiton.eugene.models.object.reader.extension.LoadModelExtension; import org.nuiton.eugene.writer.ChainedFileWriterConfiguration; @@ -51,15 +49,8 @@ public abstract class BaseChainedFileWriterToMemoryModel extends BaseChainedFile public static final String PROP_MODEL_READER = "modelReader"; - public static final String PROP_TAG_VALUE_DEFINITION_PROVIDER = "tagValueMetadatasProvider"; - - public static final String PROP_STEREOTYPE_DEFINITION_PROVIDER = "stereotypeMetadatasProvider"; - public static final String PROP_FAIL_IF_UNSAFE = "failIfUnsafe"; - @Deprecated - public static final String PROP_MODEL_PROPERTIES_PROVIDER = "modelPropertiesProvider"; - public static final String PROP_READER = "reader"; protected Model model; @@ -72,9 +63,6 @@ public abstract class BaseChainedFileWriterToMemoryModel extends BaseChainedFile super( PROP_READER, "reader", PROP_MODEL_READER, "xmlModelReader", - PROP_TAG_VALUE_DEFINITION_PROVIDER, "tagValueMetadatasProvider", - PROP_STEREOTYPE_DEFINITION_PROVIDER, "stereotypeMetadatasProvider", - PROP_MODEL_PROPERTIES_PROVIDER, "modelPropertiesProvider", PROP_FAIL_IF_UNSAFE, "failIfUnsafe" ); } @@ -117,14 +105,6 @@ public abstract class BaseChainedFileWriterToMemoryModel extends BaseChainedFile return getProperty(PROP_READER, String.class); } - protected TagValueMetadatasProvider getTagValueDefinitionProvider() { - return getProperty(PROP_TAG_VALUE_DEFINITION_PROVIDER, TagValueMetadatasProvider.class); - } - - protected StereotypeMetadatasProvider getStereotypeDefinitionProvider() { - return getProperty(PROP_STEREOTYPE_DEFINITION_PROVIDER, StereotypeMetadatasProvider.class); - } - protected boolean isFailIfUnsafe() { Boolean property = getProperty(PROP_FAIL_IF_UNSAFE, Boolean.class); return property != null && property; @@ -150,7 +130,7 @@ public abstract class BaseChainedFileWriterToMemoryModel extends BaseChainedFile try { ClassLoader fixedClassLoader = loader; modelReader = (ModelReader<?>) Class.forName(reader, true, - fixedClassLoader).newInstance(); + fixedClassLoader).newInstance(); String modelTypeFromReader = modelReader.getModelType(); if (!modelType.equals(modelTypeFromReader)) { throw new IllegalStateException("Model reader [" + modelTypeFromReader + "] does not match with modelType: " + modelType); @@ -159,7 +139,7 @@ public abstract class BaseChainedFileWriterToMemoryModel extends BaseChainedFile throw eee; } catch (Exception eee) { throw new IllegalStateException("could not obtain reader " - + reader, eee); + + reader, eee); } } else { @@ -181,9 +161,6 @@ public abstract class BaseChainedFileWriterToMemoryModel extends BaseChainedFile boolean verbose = configuration.isVerbose(); - getModelReader().setStereotypeMetadatasProvider(getStereotypeDefinitionProvider()); - getModelReader().setTagValueMetadatasProvider(getTagValueDefinitionProvider()); - // set the verbose level of the model reader getModelReader().setVerbose(verbose); } -- To stop receiving notification emails like this one, please contact nuiton.org SCM administrator <admin+scm@nuiton.org>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/editor in repository eugene. See https://gitlab.nuiton.org/nuiton/eugene.git commit 92e9a292ee9de56cfa6ce71bbfffe4f91199dbc7 Author: Tony CHEMIT <chemit@codelutin.com> Date: Sun Oct 2 18:15:47 2016 +0200 Use new API, clean reader code, remove extension on providers (no more used) --- eugene-java-templates/pom.xml | 14 + .../eugene/java/AbstractJavaBeanTransformer.java | 40 +- .../nuiton/eugene/java/EugeneJavaStereoTypes.java | 70 +- .../nuiton/eugene/java/EugeneJavaTagValues.java | 582 ++------------ .../nuiton/eugene/java/JavaBeanTransformer.java | 18 +- .../eugene/java/JavaBeanTransformerTagValues.java | 181 +++++ .../eugene/java/JavaEnumerationTransformer.java | 2 +- .../eugene/java/JavaInterfaceTransformer.java | 2 +- .../eugene/java/JavaTemplatesStereoTypes.java | 33 +- .../nuiton/eugene/java/JavaTemplatesTagValues.java | 45 +- .../eugene/java/SimpleJavaBeanTransformer.java | 52 +- .../java/SimpleJavaBeanTransformerTagValues.java | 461 +++++++++++ .../SimpleJavaBeanWithNoInterfaceTransformer.java | 39 +- ...avaBeanWithNoInterfaceTransformerTagValues.java | 421 ++++++++++ .../i18n/eugene-java-templates_en_GB.properties | 45 ++ .../i18n/eugene-java-templates_fr_FR.properties | 45 ++ .../eugene/java/EugeneJavaTagValuesTest.java | 6 +- eugene/pom.xml | 14 + .../org/nuiton/eugene/EugeneCoreStereotypes.java | 40 +- .../org/nuiton/eugene/EugeneCoreTagValues.java | 38 +- .../main/java/org/nuiton/eugene/GeneratorUtil.java | 13 +- .../main/java/org/nuiton/eugene/ModelReader.java | 27 - .../eugene/java/ObjectModelTransformerToJava.java | 32 +- .../extension/stereotype/StereotypeMetadata.java | 24 +- ...tereotypeMetadatasProviderManagerExtension.java | 42 - .../extension/stereotype/StereotypeUtil.java | 22 + .../AggregateStereotypeMetadatasProvider.java | 10 +- .../DefaultStereotypeMetadatasProvider.java | 22 + .../provider/StereotypeMetadatasProvider.java | 24 + .../extension/tagvalue/TagValueMetadata.java | 24 +- .../TagValueMetadatasProviderManagerExtension.java | 42 - .../models/extension/tagvalue/TagValueUtil.java | 22 + .../AggregateTagValueMetadatasProvider.java | 32 +- .../provider/DefaultTagValueMetadatasProvider.java | 24 +- .../provider/TagValueMetadatasProvider.java | 24 + .../object/reader/AbstractObjectModelReader.java | 885 +-------------------- .../extension/FlatModelExtensionFileParser.java | 17 +- .../reader/extension/ModelExtensionFileParser.java | 15 + .../main/resources/i18n/eugene_en_GB.properties | 11 + .../main/resources/i18n/eugene_fr_FR.properties | 11 + .../nuiton/eugene/EugeneCoreStereotypesTest.java | 22 + .../org/nuiton/eugene/EugeneCoreTagValuesTest.java | 22 + pom.xml | 11 +- 43 files changed, 1780 insertions(+), 1746 deletions(-) diff --git a/eugene-java-templates/pom.xml b/eugene-java-templates/pom.xml index 555e662..d86f56a 100644 --- a/eugene-java-templates/pom.xml +++ b/eugene-java-templates/pom.xml @@ -126,6 +126,20 @@ </execution> </executions> </plugin> + + <plugin> + <groupId>org.nuiton.i18n</groupId> + <artifactId>i18n-maven-plugin</artifactId> + <executions> + <execution> + <goals> + <goal>parserJava</goal> + <goal>gen</goal> + </goals> + </execution> + </executions> + </plugin> + </plugins> </build> diff --git a/eugene-java-templates/src/main/java/org/nuiton/eugene/java/AbstractJavaBeanTransformer.java b/eugene-java-templates/src/main/java/org/nuiton/eugene/java/AbstractJavaBeanTransformer.java index 87eb128..39a5868 100644 --- a/eugene-java-templates/src/main/java/org/nuiton/eugene/java/AbstractJavaBeanTransformer.java +++ b/eugene-java-templates/src/main/java/org/nuiton/eugene/java/AbstractJavaBeanTransformer.java @@ -30,6 +30,7 @@ import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.eugene.GeneratorUtil; +import org.nuiton.eugene.models.extension.stereotype.MissingStereoTypeException; import org.nuiton.eugene.models.object.ObjectModelAttribute; import org.nuiton.eugene.models.object.ObjectModelClass; import org.nuiton.eugene.models.object.ObjectModelClassifier; @@ -37,7 +38,6 @@ import org.nuiton.eugene.models.object.ObjectModelInterface; import org.nuiton.eugene.models.object.ObjectModelJavaModifier; import org.nuiton.eugene.models.object.ObjectModelOperation; import org.nuiton.eugene.models.object.ObjectModelPackage; -import org.nuiton.eugene.models.stereotype.MissingStereoTypeException; import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport; @@ -48,7 +48,7 @@ import java.util.List; import java.util.Set; /** - * Common class form javabean like transformer. + * Common class form javabean like templates. * * @author Tony Chemit - chemit@codelutin.com * @see SimpleJavaBeanTransformer @@ -60,21 +60,12 @@ public abstract class AbstractJavaBeanTransformer extends ObjectModelTransformer /** Logger. */ private static final Log log = LogFactory.getLog(AbstractJavaBeanTransformer.class); - private EugeneJavaTagValues javaTemplatesTagValues; - private EugeneJavaStereoTypes javaTemplatesStereoTypes; + protected final EugeneJavaTagValues javaTemplatesTagValues; + protected final EugeneJavaStereoTypes javaTemplatesStereoTypes; - public EugeneJavaTagValues getJavaTemplatesTagValues() { - if (javaTemplatesTagValues == null) { - javaTemplatesTagValues = getTagValueMetadatasProvider(EugeneJavaTagValues.class); - } - return javaTemplatesTagValues; - } - - public EugeneJavaStereoTypes getJavaTemplatesStereoTypes() { - if (javaTemplatesStereoTypes == null) { - javaTemplatesStereoTypes = getStereotypeMetadatasProvider(EugeneJavaStereoTypes.class); - } - return javaTemplatesStereoTypes; + public AbstractJavaBeanTransformer() { + javaTemplatesTagValues = new EugeneJavaTagValues(); + javaTemplatesStereoTypes = new EugeneJavaStereoTypes(); } protected boolean notFoundInClassPath(ObjectModelClass input, String className) { @@ -122,7 +113,7 @@ public abstract class AbstractJavaBeanTransformer extends ObjectModelTransformer protected String getAttributeTypeWithGeneric(ObjectModelAttribute attr) { String attrType = getAttributeType(attr); - String generic = getEugeneTagValues().getAttributeGenericTagValue(attr); + String generic = eugeneTagValues.getAttributeGenericTagValue(attr); if (generic != null) { attrType += "<" + getAttributeType(generic) + ">"; } @@ -286,7 +277,7 @@ public abstract class AbstractJavaBeanTransformer extends ObjectModelTransformer (List<ObjectModelAttribute>) input.getAttributes(); List<ObjectModelAttribute> attrs = - new ArrayList<ObjectModelAttribute>(); + new ArrayList<>(); for (ObjectModelAttribute attr : attributes) { if (attr.isNavigable()) { @@ -641,7 +632,7 @@ public abstract class AbstractJavaBeanTransformer extends ObjectModelTransformer ObjectModelClassifier output, String extraInterfaceName) { boolean foundSerializable = false; - Set<String> added = new HashSet<String>(); + Set<String> added = new HashSet<>(); for (ObjectModelInterface parentInterface : input.getInterfaces()) { String fqn = parentInterface.getQualifiedName(); added.add(fqn); @@ -787,7 +778,7 @@ public abstract class AbstractJavaBeanTransformer extends ObjectModelTransformer ObjectModelClass input, ObjectModelClassifier output) { - String i18nPrefix = getEugeneTagValues().getI18nPrefixTagValue(input, + String i18nPrefix = eugeneTagValues.getI18nPrefixTagValue(input, aPackage, model); if (!StringUtils.isEmpty(i18nPrefix)) { @@ -841,8 +832,7 @@ public abstract class AbstractJavaBeanTransformer extends ObjectModelTransformer if (booleanProperty) { methodPrefix = JavaGeneratorUtil.OPERATION_GETTER_BOOLEAN_PREFIX; } - String getterName = getJavaBeanMethodName(methodPrefix, attrName); - return getterName; + return getJavaBeanMethodName(methodPrefix, attrName); } protected String generateName(String prefix, String name, String suffix) { @@ -863,7 +853,7 @@ public abstract class AbstractJavaBeanTransformer extends ObjectModelTransformer if (!notInClassPath) { - boolean canOverride = getJavaTemplatesStereoTypes().isOverrideAbstractClasses(aclass, aPackage, model); + boolean canOverride = javaTemplatesStereoTypes.isOverrideAbstractClasses(aclass, aPackage, model); String fqn = aclass.getPackageName() + "." + abstractClassName; if (!canOverride) { String message = "Can not override abstract class " + fqn + ", already found in classpath"; @@ -889,7 +879,7 @@ public abstract class AbstractJavaBeanTransformer extends ObjectModelTransformer if (!noMethods) { - boolean canOverride = getJavaTemplatesStereoTypes().isAcceptBeanWithMethods(aclass, aPackage, model); + boolean canOverride = javaTemplatesStereoTypes.isAcceptBeanWithMethods(aclass, aPackage, model); String fqn = aclass.getPackageName() + "." + className; if (!canOverride) { String message = "Concrete class " + fqn + " contains some methods, the current generator does not accept it."; @@ -912,7 +902,7 @@ public abstract class AbstractJavaBeanTransformer extends ObjectModelTransformer } protected boolean isUseJava8() { - return getJavaTemplatesTagValues().isUseJava8(model); + return javaTemplatesTagValues.isUseJava8(model); } } diff --git a/eugene-java-templates/src/main/java/org/nuiton/eugene/java/EugeneJavaStereoTypes.java b/eugene-java-templates/src/main/java/org/nuiton/eugene/java/EugeneJavaStereoTypes.java index 125b674..244bdc2 100644 --- a/eugene-java-templates/src/main/java/org/nuiton/eugene/java/EugeneJavaStereoTypes.java +++ b/eugene-java-templates/src/main/java/org/nuiton/eugene/java/EugeneJavaStereoTypes.java @@ -33,6 +33,7 @@ import org.nuiton.eugene.models.object.ObjectModelPackage; import java.util.Set; import static org.nuiton.i18n.I18n.n; +import static org.nuiton.i18n.I18n.t; /** * Defines all stereotypes managed by Java templates. @@ -43,6 +44,11 @@ import static org.nuiton.i18n.I18n.n; */ public class EugeneJavaStereoTypes extends DefaultStereotypeMetadatasProvider { + @Override + public String getDescription() { + return t("eugene.java.stereotypes"); + } + public enum Store implements StereotypeMetadata { /** @@ -52,7 +58,7 @@ public class EugeneJavaStereoTypes extends DefaultStereotypeMetadatasProvider { * @see #hasBeanStereotype(ObjectModelPackage) * @since 2.5.6 */ - bean(n("eugene.java.stereotype.bean"), ObjectModelClassifier.class, ObjectModelPackage.class), + bean(n("eugene.java.stereotype.bean"), false, ObjectModelClassifier.class, ObjectModelPackage.class), /** * Tag value to authorize user to generate some bean with methods, some generators won't generate them : Lots code). @@ -64,8 +70,8 @@ public class EugeneJavaStereoTypes extends DefaultStereotypeMetadatasProvider { * @see #isAcceptBeanWithMethods(ObjectModelClassifier, ObjectModelPackage, ObjectModel) * @since 3.0 */ - acceptBeanWithMethods(n("eugene.java.stereotype.acceptBeanWithMethods"), ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), - + @Deprecated + acceptBeanWithMethods(n("eugene.java.stereotype.acceptBeanWithMethods"), true, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), /** * Tag value to authorize user to override abstract classes. @@ -77,7 +83,8 @@ public class EugeneJavaStereoTypes extends DefaultStereotypeMetadatasProvider { * @see #isOverrideAbstractClasses(ObjectModelClassifier, ObjectModelPackage, ObjectModel) * @since 3.0 */ - overrideAbstractClasses(n("eugene.java.stereotype.overrideAbstractClasses"), ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), + @Deprecated + overrideAbstractClasses(n("eugene.java.stereotype.overrideAbstractClasses"), true, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), /** * Tag value to generate property change support on generated beans. @@ -87,7 +94,8 @@ public class EugeneJavaStereoTypes extends DefaultStereotypeMetadatasProvider { * @see #isSkipGeneratePropertyChangeSupport(ObjectModelClassifier, ObjectModelPackage, ObjectModel) * @since 2.12 */ - generatePropertyChangeSupport(n("eugene.java.stereotype.generatePropertyChangeSupport"), ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), + @Deprecated + generatePropertyChangeSupport(n("eugene.java.stereotype.generatePropertyChangeSupport"), true, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), /** * Tag value to generate lazy instanciation of any collection to avoid NPEs. @@ -97,7 +105,8 @@ public class EugeneJavaStereoTypes extends DefaultStereotypeMetadatasProvider { * @see #isSkipGenerateNotEmptyCollections(ObjectModelClassifier, ObjectModelPackage, ObjectModel) * @since 2.12 */ - generateNotEmptyCollections(n("eugene.java.stereotype.generateNotEmptyCollections"), ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), + @Deprecated + generateNotEmptyCollections(n("eugene.java.stereotype.generateNotEmptyCollections"), true, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), /** * To generate an interface of each simple bean. @@ -107,7 +116,8 @@ public class EugeneJavaStereoTypes extends DefaultStereotypeMetadatasProvider { * @see #isSimpleBeanSkipGenerateInterface(ObjectModelClassifier, ObjectModelPackage, ObjectModel) * @since 2.6.2 */ - simpleBeanGenerateInterface(n("eugene.java.stereotype.simpleBeanGenerateInterface"), ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), + @Deprecated + simpleBeanGenerateInterface(n("eugene.java.stereotype.simpleBeanGenerateInterface"), true, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), /** * To generate a factory of generated simple beans. @@ -117,7 +127,8 @@ public class EugeneJavaStereoTypes extends DefaultStereotypeMetadatasProvider { * @see #isSimpleBeanSkipGenerateFactory(ObjectModel) * @since 2.6.2 */ - simpleBeanGenerateFactory(n("eugene.java.stereotype.simpleBeanGenerateFactory"), ObjectModel.class), + @Deprecated + simpleBeanGenerateFactory(n("eugene.java.stereotype.simpleBeanGenerateFactory"), true, ObjectModel.class), /** * To generate a factory of generated simple beans. @@ -127,7 +138,8 @@ public class EugeneJavaStereoTypes extends DefaultStereotypeMetadatasProvider { * @see #isSimpleBeanSkipGenerateDefaults(ObjectModelClassifier, ObjectModelPackage, ObjectModel) * @since 2.7.2 */ - simpleBeanGenerateDefaults(n("eugene.java.stereotype.simpleBeanGenerateDefaults"), ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), + @Deprecated + simpleBeanGenerateDefaults(n("eugene.java.stereotype.simpleBeanGenerateDefaults"), true, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), /** * To generate a factory of generated simple beans. @@ -137,8 +149,8 @@ public class EugeneJavaStereoTypes extends DefaultStereotypeMetadatasProvider { * @see #isSimpleBeanWithNoInterfaceSkipGenerateDefaults(ObjectModelClassifier, ObjectModelPackage, ObjectModel) * @since 3.0 */ - simpleBeanWithNoInterfaceGenerateDefaults(n("eugene.java.stereotype.simpleBeanWithNoInterfaceGenerateDefaults"), ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), - + @Deprecated + simpleBeanWithNoInterfaceGenerateDefaults(n("eugene.java.stereotype.simpleBeanWithNoInterfaceGenerateDefaults"), true, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), /** * To generate or not guava predicates on each property of the bean. @@ -148,7 +160,8 @@ public class EugeneJavaStereoTypes extends DefaultStereotypeMetadatasProvider { * @see #isSimpleBeanWithNoInterfaceSkipGeneratePredicates(ObjectModelClassifier, ObjectModelPackage, ObjectModel) * @since 3.0 */ - simpleBeanWithNoInterfaceGeneratePredicates(n("eugene.java.stereotype.simpleBeanWithNoInterfaceGeneratePredicates"), ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), + @Deprecated + simpleBeanWithNoInterfaceGeneratePredicates(n("eugene.java.stereotype.simpleBeanWithNoInterfaceGeneratePredicates"), true, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), /** * To generate or not guava functions on each property of the bean. @@ -158,7 +171,8 @@ public class EugeneJavaStereoTypes extends DefaultStereotypeMetadatasProvider { * @see #isSimpleBeanWithNoInterfaceSkipGenerateFunctions(ObjectModelClassifier, ObjectModelPackage, ObjectModel) * @since 3.0 */ - simpleBeanWithNoInterfaceGenerateFunctions(n("eugene.java.stereotype.simpleBeanWithNoInterfaceGenerateFunctions"), ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), + @Deprecated + simpleBeanWithNoInterfaceGenerateFunctions(n("eugene.java.stereotype.simpleBeanWithNoInterfaceGenerateFunctions"), true, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), /** * To generate or not constructors methods on Default classes. @@ -168,15 +182,17 @@ public class EugeneJavaStereoTypes extends DefaultStereotypeMetadatasProvider { * @see #isSimpleBeanWithNoInterfaceSkipGenerateDefaultConstructors(ObjectModelClassifier, ObjectModelPackage, ObjectModel)} * @since 3.0 */ - simpleBeanWithNoInterfaceSkipGenerateConstructors(n("eugene.java.stereotype.simpleBeanWithNoInterfaceSkipGenerateConstructors"), ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class); - + @Deprecated + simpleBeanWithNoInterfaceSkipGenerateConstructors(n("eugene.java.stereotype.simpleBeanWithNoInterfaceSkipGenerateConstructors"), true, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class); private final Set<Class<?>> targets; - private final String i18nDocumentationKey; + private final String i18nDescriptionKey; + private final boolean deprecated; - Store(String i18nDocumentationKey, Class<?>... targets) { + Store(String i18nDescriptionKey, boolean deprecated, Class<?>... targets) { + this.deprecated = deprecated; this.targets = ImmutableSet.copyOf(targets); - this.i18nDocumentationKey = i18nDocumentationKey; + this.i18nDescriptionKey = i18nDescriptionKey; } @Override @@ -190,13 +206,13 @@ public class EugeneJavaStereoTypes extends DefaultStereotypeMetadatasProvider { } @Override - public String getI18nDocumentationKey() { - return i18nDocumentationKey; + public String getDescription() { + return t(i18nDescriptionKey); } @Override public boolean isDeprecated() { - return false; + return deprecated; } } @@ -240,6 +256,7 @@ public class EugeneJavaStereoTypes extends DefaultStereotypeMetadatasProvider { * @see Store#acceptBeanWithMethods * @since 3.0 */ + @Deprecated public boolean isAcceptBeanWithMethods(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { return StereotypeUtil.findDirectStereotype(Store.acceptBeanWithMethods, classifier, aPackage, model); } @@ -258,6 +275,7 @@ public class EugeneJavaStereoTypes extends DefaultStereotypeMetadatasProvider { * @see Store#overrideAbstractClasses * @since 3.0 */ + @Deprecated public boolean isOverrideAbstractClasses(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { return StereotypeUtil.findDirectStereotype(Store.overrideAbstractClasses, classifier, aPackage, model); } @@ -276,6 +294,7 @@ public class EugeneJavaStereoTypes extends DefaultStereotypeMetadatasProvider { * @see Store#generatePropertyChangeSupport * @since 2.12 */ + @Deprecated public boolean isSkipGeneratePropertyChangeSupport(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { return StereotypeUtil.findDirectStereotype(Store.generatePropertyChangeSupport, classifier, aPackage, model); } @@ -294,6 +313,7 @@ public class EugeneJavaStereoTypes extends DefaultStereotypeMetadatasProvider { * @see Store#generateNotEmptyCollections * @since 2.12 */ + @Deprecated public boolean isSkipGenerateNotEmptyCollections(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { return StereotypeUtil.findDirectStereotype(Store.generateNotEmptyCollections, classifier, aPackage, model); } @@ -309,6 +329,7 @@ public class EugeneJavaStereoTypes extends DefaultStereotypeMetadatasProvider { * @see Store#simpleBeanGenerateInterface * @since 2.3 */ + @Deprecated public boolean isSimpleBeanSkipGenerateInterface(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { return StereotypeUtil.findDirectStereotype(Store.simpleBeanGenerateInterface, classifier, aPackage, model); } @@ -321,6 +342,7 @@ public class EugeneJavaStereoTypes extends DefaultStereotypeMetadatasProvider { * @see Store#simpleBeanGenerateFactory * @since 2.7.2 */ + @Deprecated public boolean isSimpleBeanSkipGenerateFactory(ObjectModel model) { return StereotypeUtil.findDirectStereotype(Store.simpleBeanGenerateFactory, model); } @@ -336,6 +358,7 @@ public class EugeneJavaStereoTypes extends DefaultStereotypeMetadatasProvider { * @see Store#simpleBeanGenerateDefaults * @since 2.7.2 */ + @Deprecated public boolean isSimpleBeanSkipGenerateDefaults(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { return StereotypeUtil.findDirectStereotype(Store.simpleBeanGenerateDefaults, classifier, aPackage, model); } @@ -351,6 +374,7 @@ public class EugeneJavaStereoTypes extends DefaultStereotypeMetadatasProvider { * @see Store#simpleBeanWithNoInterfaceGenerateDefaults * @since 3.0 */ + @Deprecated public boolean isSimpleBeanWithNoInterfaceSkipGenerateDefaults(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { return StereotypeUtil.findDirectStereotype(Store.simpleBeanWithNoInterfaceGenerateDefaults, classifier, aPackage, model); } @@ -368,6 +392,7 @@ public class EugeneJavaStereoTypes extends DefaultStereotypeMetadatasProvider { * @see Store#simpleBeanWithNoInterfaceGeneratePredicates * @since 3.0 */ + @Deprecated public boolean isSimpleBeanWithNoInterfaceSkipGeneratePredicates(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { return StereotypeUtil.findDirectStereotype(Store.simpleBeanWithNoInterfaceGeneratePredicates, classifier, aPackage, model); } @@ -385,6 +410,7 @@ public class EugeneJavaStereoTypes extends DefaultStereotypeMetadatasProvider { * @see Store#simpleBeanWithNoInterfaceGenerateFunctions * @since 3.0 */ + @Deprecated public boolean isSimpleBeanWithNoInterfaceSkipGenerateFunctions(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { return StereotypeUtil.findDirectStereotype(Store.simpleBeanWithNoInterfaceGenerateFunctions, classifier, aPackage, model); } @@ -402,9 +428,9 @@ public class EugeneJavaStereoTypes extends DefaultStereotypeMetadatasProvider { * @see Store#simpleBeanWithNoInterfaceSkipGenerateConstructors * @since 3.0 */ + @Deprecated public boolean isSimpleBeanWithNoInterfaceSkipGenerateDefaultConstructors(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { return StereotypeUtil.findDirectStereotype(Store.simpleBeanWithNoInterfaceSkipGenerateConstructors, classifier, aPackage, model); } - } diff --git a/eugene-java-templates/src/main/java/org/nuiton/eugene/java/EugeneJavaTagValues.java b/eugene-java-templates/src/main/java/org/nuiton/eugene/java/EugeneJavaTagValues.java index 7ca6609..f9d013d 100644 --- a/eugene-java-templates/src/main/java/org/nuiton/eugene/java/EugeneJavaTagValues.java +++ b/eugene-java-templates/src/main/java/org/nuiton/eugene/java/EugeneJavaTagValues.java @@ -23,7 +23,6 @@ package org.nuiton.eugene.java; */ import com.google.common.collect.ImmutableSet; -import org.apache.commons.lang3.StringUtils; import org.nuiton.eugene.models.extension.tagvalue.TagValueMetadata; import org.nuiton.eugene.models.extension.tagvalue.TagValueUtil; import org.nuiton.eugene.models.extension.tagvalue.matcher.EqualsTagValueNameMatcher; @@ -35,6 +34,7 @@ import org.nuiton.eugene.models.object.ObjectModelPackage; import java.util.Set; import static org.nuiton.i18n.I18n.n; +import static org.nuiton.i18n.I18n.t; /** * Defines all tag values managed by Java templates. @@ -45,342 +45,57 @@ import static org.nuiton.i18n.I18n.n; */ public class EugeneJavaTagValues extends DefaultTagValueMetadatasProvider { -// /** -// * Tag value to generate property change support on generated beans. -// * -// * You can globaly use it on the complete model, on packages, or to a specific classifier. -// * -// * @see #isSkipGeneratePropertyChangeSupport(ObjectModelClassifier, ObjectModelPackage, ObjectModel) -// * @since 2.12 -// */ -// @TagValueDefinition( -// target = {ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class}, -// defaultValue = "true", -// documentation = "To generate property change support code.") -// generatePropertyChangeSupport(n("eugene.java.tagvalue."), String.class, null,ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), -// -// /** -// * Tag value to generate lazy instanciation of any collection to avoid NPEs. -// * -// * You can globaly use it on the complete model or a package, or to a specific classifier. -// * -// * @see #isSkipGenerateNotEmptyCollections(ObjectModelClassifier, ObjectModelPackage, ObjectModel) -// * @since 2.12 -// */ -// @TagValueDefinition( -// target = {ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class}, -// defaultValue = "true", -// documentation = "To lazy instanciate collections to avoid NPE codes.") -// generateNotEmptyCollections(n("eugene.java.tagvalue."), String.class, null,ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), + @Override + public String getDescription() { + return t("eugene.java.tagvalues"); + } public enum Store implements TagValueMetadata { /** - * Tag value to use a super class for generated bean. - * - * If the bean needs Property change support (says you use the {@link JavaTemplatesStereoTypes#STEREOTYPE_SKIP_GENERATE_PROPERTY_CHANGE_SUPPORT}), - * then your class must provide everything for it. - * - * More over, if you use some collections in your bean you must also define - * two method named {@code getChild(Collection list, int index)} and - * {@code getChild(List list, int index)} - * - * See new code to know minimum stuff to add in your class for this purpose. - * <pre> - * public abstract class AbstractBean implements Serializable { - * - * private static final long serialVersionUID = 1L; - * - * protected final PropertyChangeSupport pcs = new PropertyChangeSupport(this); - * - * public void addPropertyChangeListener(PropertyChangeListener listener) { - * pcs.addPropertyChangeListener(listener); - * } - * - * public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener) { - * pcs.addPropertyChangeListener(propertyName, listener); - * } - * - * public void removePropertyChangeListener(PropertyChangeListener listener) { - * pcs.removePropertyChangeListener(listener); - * } - * - * public void removePropertyChangeListener(String propertyName, PropertyChangeListener listener) { - * pcs.removePropertyChangeListener(propertyName, listener); - * } - * - * protected void firePropertyChange(String propertyName, Object oldValue, Object newValue) { - * pcs.firePropertyChange(propertyName, oldValue, newValue); - * } - * - * protected void firePropertyChange(String propertyName, Object newValue) { - * firePropertyChange(propertyName, null, newValue); - * } - * - * protected <T> T getChild(Collection<T> list, int index) { - * return CollectionUtil.getOrNull(list, index); - * } - * - * protected <T> T getChild(List<T> list, int index) { - * return CollectionUtil.getOrNull(list, index); - * } - * } - * </pre> - * - * You can globaly use it on the complete model or to a specific classifier. - * - * @see #getBeanSuperClassTagValue(ObjectModelClassifier, ObjectModelPackage, ObjectModel) - * @since 2.5.6 - */ - beanSuperClass(n("eugene.java.tagvalue.beanSuperClass"), String.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), - /** - * Tag value to use a super class for generated bean. - * - * If the bean needs Property change support (says you use the tag-value {@link JavaTemplatesStereoTypes#STEREOTYPE_SKIP_GENERATE_PROPERTY_CHANGE_SUPPORT}, - * then your class must provide evrything for it. - * - * More over, if you use some collections in your bean you must also define - * two method named {@code getChild(Collection list, int index)} and - * {@code getChild(List list, int index)} - * - * See new code to know minimum stuff to add in your class for this purpose. - * <pre> - * public abstract class AbstractBean implements Serializable { - * - * private static final long serialVersionUID = 1L; - * - * protected final PropertyChangeSupport pcs = new PropertyChangeSupport(this); - * - * public void addPropertyChangeListener(PropertyChangeListener listener) { - * pcs.addPropertyChangeListener(listener); - * } - * - * public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener) { - * pcs.addPropertyChangeListener(propertyName, listener); - * } - * - * public void removePropertyChangeListener(PropertyChangeListener listener) { - * pcs.removePropertyChangeListener(listener); - * } - * - * public void removePropertyChangeListener(String propertyName, PropertyChangeListener listener) { - * pcs.removePropertyChangeListener(propertyName, listener); - * } - * - * protected void firePropertyChange(String propertyName, Object oldValue, Object newValue) { - * pcs.firePropertyChange(propertyName, oldValue, newValue); - * } - * - * protected void firePropertyChange(String propertyName, Object newValue) { - * firePropertyChange(propertyName, null, newValue); - * } - * - * protected <T> T getChild(Collection<T> list, int index) { - * return CollectionUtil.getOrNull(list, index); - * } - * - * protected <T> T getChild(List<T> list, int index) { - * return CollectionUtil.getOrNull(list, index); - * } - * } - * </pre> - * - * You can globaly use it on the complete model or to a specific classifier. - * - * @see #getSimpleBeanSuperClassTagValue(ObjectModelClassifier, ObjectModelPackage, ObjectModel) - * @since 2.5.6 - */ - simpleBeanSuperClass(n("eugene.java.tagvalue.simpleBeanSuperClass"), String.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), - - /** - * To add a prefix on the name of each generated bean class. - * - * You can globaly use it on the complete model or to a specific classifier. - * - * @see #getSimpleBeanClassNamePrefixTagValue(ObjectModelClassifier, ObjectModelPackage, ObjectModel) - * @since 2.6.2 - */ - simpleBeanClassNamePrefix(n("eugene.java.tagvalue.simpleBeanClassNamePrefix"), String.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), - - /** - * To add a prefix on the name of each generated bean class. - * - * You can globaly use it on the complete model or to a specific classifier. - * - * @see #getSimpleBeanClassNameSuffixTagValue(ObjectModelClassifier, ObjectModelPackage, ObjectModel) - * @since 2.6.2 - */ - simpleBeanClassNameSuffix(n("eugene.java.tagvalue.simpleBeanClassNameSuffix"), String.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), - - /** - * Tag value to use a super interface for generated interfaces on simple bean. - * - * You can globaly use it on the complete model or to a specific classifier. - * - * @see #getSimpleBeanInterfaceSuperClassTagValue(ObjectModelClassifier, ObjectModelPackage, ObjectModel) - * @since 2.6.2 - */ - simpleBeanInterfaceSuperClass(n("eugene.java.tagvalue.simpleBeanInterfaceSuperClass"), String.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), - - /** - * To add a prefix on the name of each generated interface of a simple bean. - * - * You can globaly use it on the complete model or to a specific classifier. - * - * @see #getSimpleBeanInterfaceNamePrefixTagValue(ObjectModelClassifier, ObjectModelPackage, ObjectModel) - * @since 2.6.2 - */ - simpleBeanInterfaceNamePrefix(n("eugene.java.tagvalue.simpleBeanInterfaceNamePrefix"), String.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), - - /** - * To add a prefix on the name of each generated interface of a simple bean. - * - * You can globaly use it on the complete model or to a specific classifier. - * - * @see #getSimpleBeanInterfaceNameSuffixTagValue(ObjectModelClassifier, ObjectModelPackage, ObjectModel) - * @since 2.6.2 - */ - simpleBeanInterfaceNameSuffix(n("eugene.java.tagvalue.simpleBeanInterfaceNameSuffix"), String.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), - - /** - * Tag value to use a super super-class for generated defaults class of a - * simple bean. - * - * You can globaly use it on the complete model or to a specific classifier. - * - * @see #getSimpleBeanDefaultsSuperClassTagValue(ObjectModelClassifier, ObjectModelPackage, ObjectModel) - * @since 2.7.2 - */ - simpleBeanDefaultsSuperClass(n("eugene.java.tagvalue.simpleBeanDefaultsSuperClass"), String.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), - - /** - * To add a prefix on the name of each generated bean class. - * - * You can globaly use it on the complete model or to a specific classifier. - * - * @see #getSimpleBeanDefaultsClassNamePrefixTagValue(ObjectModelClassifier, ObjectModelPackage, ObjectModel) - * @since 2.7.2 - */ - simpleBeanDefaultsClassNamePrefix(n("eugene.java.tagvalue.simpleBeanDefaultsClassNamePrefix"), String.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), - - /** - * To add a suffix on the name of each generated bean class. - * - * You can globaly use it on the complete model or to a specific classifier. - * - * @see #getSimpleBeanDefaultsClassNameSuffixTagValue(ObjectModelClassifier, ObjectModelPackage, ObjectModel) - * @since 2.6.2 - */ - simpleBeanDefaultsClassNameSuffix(n("eugene.java.tagvalue.simpleBeanDefaultsClassNameSuffix"), String.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), - - /** - * Tag value to use a super class for generated bean. - * - * If the bean needs Property change support (says you use the tag-value {@link JavaTemplatesStereoTypes#STEREOTYPE_SKIP_GENERATE_PROPERTY_CHANGE_SUPPORT}, - * then your class must provide evrything for it. - * - * More over, if you use some collections in your bean you must also define - * two method named {@code getChild(Collection list, int index)} and - * {@code getChild(List list, int index)} - * - * See new code to know minimum stuff to add in your class for this purpose. - * <pre> - * public abstract class AbstractBean implements Serializable { - * - * private static final long serialVersionUID = 1L; + * Tag value to authorize user to generate some bean with methods, some generators won't generate them : Lots code). * - * protected final PropertyChangeSupport pcs = new PropertyChangeSupport(this); + * By default, user should never add methods in bean classes, simply write them in your java code!. * - * public void addPropertyChangeListener(PropertyChangeListener listener) { - * pcs.addPropertyChangeListener(listener); - * } + * You can globaly use it on the complete model, on packages, or to a specific classifier. * - * public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener) { - * pcs.addPropertyChangeListener(propertyName, listener); - * } - * - * public void removePropertyChangeListener(PropertyChangeListener listener) { - * pcs.removePropertyChangeListener(listener); - * } - * - * public void removePropertyChangeListener(String propertyName, PropertyChangeListener listener) { - * pcs.removePropertyChangeListener(propertyName, listener); - * } - * - * protected void firePropertyChange(String propertyName, Object oldValue, Object newValue) { - * pcs.firePropertyChange(propertyName, oldValue, newValue); - * } - * - * protected void firePropertyChange(String propertyName, Object newValue) { - * firePropertyChange(propertyName, null, newValue); - * } - * - * protected <T> T getChild(Collection<T> list, int index) { - * return CollectionUtil.getOrNull(list, index); - * } - * - * protected <T> T getChild(List<T> list, int index) { - * return CollectionUtil.getOrNull(list, index); - * } - * } - * </pre> - * - * You can globaly use it on the complete model or to a specific classifier. - * - * @see #getSimpleBeanWithNoInterfaceSuperClassTagValue(ObjectModelClassifier, ObjectModelPackage, ObjectModel) + * @see #isAcceptBeanWithMethods(ObjectModelClassifier, ObjectModelPackage, ObjectModel) * @since 3.0 */ - simpleBeanWithNoInterfaceSuperClass(n("eugene.java.tagvalue.simpleBeanWithNoInterfaceSuperClass"), String.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), + acceptBeanWithMethods(n("eugene.java.tagvalue.acceptBeanWithMethods"), boolean.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), - /** - * Tag value to use a super super-class for generated defaults class of a simple bean. - * - * You can globaly use it on the complete model or to a specific classifier. - * - * @see #getSimpleBeanWithNoInterfaceDefaultsSuperClassTagValue(ObjectModelClassifier, ObjectModelPackage, ObjectModel) - * @since 3.0 - */ - simpleBeanWithNoInterfaceDefaultsSuperClass(n("eugene.java.tagvalue.simpleBeanWithNoInterfaceDefaultsSuperClass"), String.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), /** - * To add a prefix on the name of each generated bean class. + * Tag value to authorize user to override abstract classes. * - * You can globaly use it on the complete model or to a specific classifier. + * By default, user should never override abstract classes but works on implementation ones. * - * @see #getSimpleBeanClassNamePrefixTagValue(ObjectModelClassifier, ObjectModelPackage, ObjectModel) - * @since 3.0 - */ - simpleBeanWithNoInterfaceClassNamePrefix(n("eugene.java.tagvalue.simpleBeanWithNoInterfaceClassNamePrefix"), String.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), - - /** - * To add a prefix on the name of each generated bean class. + * You can globaly use it on the complete model, on packages, or to a specific classifier. * - * You can globaly use it on the complete model or to a specific classifier. - * - * @see #getSimpleBeanClassNameSuffixTagValue(ObjectModelClassifier, ObjectModelPackage, ObjectModel) + * @see #isOverrideAbstractClasses(ObjectModelClassifier, ObjectModelPackage, ObjectModel) * @since 3.0 */ - simpleBeanWithNoInterfaceClassNameSuffix(n("eugene.java.tagvalue.simpleBeanWithNoInterfaceClassNameSuffix"), String.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), + overrideAbstractClasses(n("eugene.java.tagvalue.overrideAbstractClasses"), boolean.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), /** - * To add a prefix on the name of each generated bean class. + * Tag value to generate property change support on generated beans. * - * You can globaly use it on the complete model or to a specific classifier. + * You can globaly use it on the complete model, on packages, or to a specific classifier. * - * @see #getSimpleBeanWithNoInterfaceDefaultsClassNamePrefixTagValue(ObjectModelClassifier, ObjectModelPackage, ObjectModel) + * @see #isSkipGeneratePropertyChangeSupport(ObjectModelClassifier, ObjectModelPackage, ObjectModel) * @since 3.0 */ - simpleBeanWithNoInterfaceDefaultsClassNamePrefix(n("eugene.java.tagvalue.simpleBeanWithNoInterfaceDefaultsClassNamePrefix"), String.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), + generatePropertyChangeSupport(n("eugene.java.tagvalue.generatePropertyChangeSupport"), boolean.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), /** - * To add a suffix on the name of each generated bean class. + * Tag value to generate lazy instanciation of any collection to avoid NPEs. * - * You can globaly use it on the complete model or to a specific classifier. + * You can globaly use it on the complete model or a package, or to a specific classifier. * - * @see #getSimpleBeanWithNoInterfaceDefaultsClassNameSuffixTagValue(ObjectModelClassifier, ObjectModelPackage, ObjectModel) + * @see #isSkipGenerateNotEmptyCollections(ObjectModelClassifier, ObjectModelPackage, ObjectModel) * @since 3.0 */ - simpleBeanWithNoInterfaceDefaultsClassNameSuffix(n("eugene.java.tagvalue.simpleBeanWithNoInterfaceDefaultsClassNameSuffix"), String.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), + generateNotEmptyCollections(n("eugene.java.tagvalue.generateNotEmptyCollections"), boolean.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), /** * To use java 8 new syntax and api in generation. @@ -394,13 +109,13 @@ public class EugeneJavaTagValues extends DefaultTagValueMetadatasProvider { private final Set<Class<?>> targets; private final Class<?> type; - private final String i18nDocumentationKey; + private final String i18nDescriptionKey; private final String defaultValue; - Store(String i18nDocumentationKey, Class<?> type, String defaultValue, Class<?>... targets) { + Store(String i18nDescriptionKey, Class<?> type, String defaultValue, Class<?>... targets) { this.targets = ImmutableSet.copyOf(targets); this.type = type; - this.i18nDocumentationKey = i18nDocumentationKey; + this.i18nDescriptionKey = i18nDescriptionKey; this.defaultValue = defaultValue; } @@ -425,8 +140,8 @@ public class EugeneJavaTagValues extends DefaultTagValueMetadatasProvider { } @Override - public String getI18nDocumentationKey() { - return i18nDocumentationKey; + public String getDescription() { + return t(i18nDescriptionKey); } @Override @@ -445,257 +160,76 @@ public class EugeneJavaTagValues extends DefaultTagValueMetadatasProvider { super((TagValueMetadata[]) Store.values()); } - /** - * Obtain the value of the {@link Store#beanSuperClass} tag value on the given model or classifier. + * Obtain the value of the {@link Store#acceptBeanWithMethods} tag value on the given model, package or classifier. * - * It will first look on the model, and then in the given classifier. + * It will first look on the model, then and package and then in the given classifier. * - * @param classifier classifier to seek - * @param model model to seek - * @return the none empty value of the found tag value or {@code null} if not found nor empty. - * @see Store#beanSuperClass - * @since 2.3 - */ - public String getBeanSuperClassTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - return TagValueUtil.findTagValue(Store.beanSuperClass, classifier, aPackage, model); - } - - /** - * Obtain the value of the {@link Store#simpleBeanSuperClass} tag value on the given model or classifier. - * - * It will first look on the model, and then in the given classifier. - * - * @param classifier classifier to seek - * @param model model to seek - * @return the none empty value of the found tag value or {@code null} if not found nor empty. - * @see Store#simpleBeanSuperClass - * @since 2.6.2 - */ - public String getSimpleBeanSuperClassTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - return TagValueUtil.findTagValue(Store.simpleBeanSuperClass, classifier, aPackage, model); - } - - /** - * Obtain the value of the {@link Store#simpleBeanInterfaceSuperClass} tag value on the given model or classifier. - * - * It will first look on the model, and then in the given classifier. + * If no value found, then will use the default value of the tag value. * * @param classifier classifier to seek + * @param aPackage package to seek * @param model model to seek * @return the none empty value of the found tag value or {@code null} if not found nor empty. - * @see Store#simpleBeanInterfaceSuperClass - * @since 2.6.2 - */ - public String getSimpleBeanInterfaceSuperClassTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - return TagValueUtil.findTagValue(Store.simpleBeanInterfaceSuperClass, classifier, aPackage, model); - } - - /** - * Obtain the value of the {@link Store#simpleBeanClassNamePrefix} tag value on the given model or classifier. - * - * It will first look on the model, and then in the given classifier. - * - * @param classifier classifier to seek - * @param model model to seek - * @return the none empty value of the found tag value or {@code null} if not found nor empty. - * @see Store#simpleBeanClassNamePrefix - * @since 2.6.2 - */ - public String getSimpleBeanClassNamePrefixTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - return TagValueUtil.findTagValue(Store.simpleBeanClassNamePrefix, classifier, aPackage, model); - } - - /** - * Obtain the value of the {@link Store#simpleBeanClassNameSuffix} tag value on the given model or classifier. - * - * It will first look on the model, and then in the given classifier. - * - * @param classifier classifier to seek - * @param model model to seek - * @return the none empty value of the found tag value or {@code null} if not found nor empty. - * @see Store#simpleBeanClassNameSuffix - * @since 2.6.2 - */ - public String getSimpleBeanClassNameSuffixTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - return TagValueUtil.findTagValue(Store.simpleBeanClassNameSuffix, classifier, aPackage, model); - } - - /** - * Obtain the value of the {@link Store#simpleBeanInterfaceNamePrefix} tag value on the given model or classifier. - * - * It will first look on the model, and then in the given classifier. - * - * @param classifier classifier to seek - * @param model model to seek - * @return the none empty value of the found tag value or {@code null} if not found nor empty. - * @see Store#simpleBeanInterfaceNamePrefix - * @since 2.6.2 - */ - public String getSimpleBeanInterfaceNamePrefixTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - return TagValueUtil.findTagValue(Store.simpleBeanInterfaceNamePrefix, classifier, aPackage, model); - } - - /** - * Obtain the value of the {@link Store#simpleBeanInterfaceNameSuffix} tag value on the given model or classifier. - * - * It will first look on the model, and then in the given classifier. - * - * @param classifier classifier to seek - * @param model model to seek - * @return the none empty value of the found tag value or {@code null} if not found nor empty. - * @see Store#simpleBeanInterfaceNameSuffix - * @since 2.6.2 - */ - public String getSimpleBeanInterfaceNameSuffixTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - return TagValueUtil.findTagValue(Store.simpleBeanInterfaceNameSuffix, classifier, aPackage, model); - } - - /** - * Obtain the value of the {@link Store#simpleBeanDefaultsSuperClass} tag value on the given model or classifier. - * - * It will first look on the model, and then in the given classifier. - * - * @param classifier classifier to seek - * @param model model to seek - * @return the none empty value of the found tag value or {@code null} if not found nor empty. - * @see Store#simpleBeanDefaultsSuperClass - * @since 2.7.2 - */ - public String getSimpleBeanDefaultsSuperClassTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - return TagValueUtil.findTagValue(Store.simpleBeanDefaultsSuperClass, classifier, aPackage, model); - } - - /** - * Obtain the value of the {@link Store#simpleBeanDefaultsClassNamePrefix} tag value on the given model or classifier. - * - * It will first look on the model, and then in the given classifier. - * - * @param classifier classifier to seek - * @param model model to seek - * @return the none empty value of the found tag value or {@code null} if not found nor empty. - * @see Store#simpleBeanDefaultsClassNamePrefix - * @since 2.7.2 - */ - public String getSimpleBeanDefaultsClassNamePrefixTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - return TagValueUtil.findTagValue(Store.simpleBeanDefaultsClassNamePrefix, classifier, aPackage, model); - } - - /** - * Obtain the value of the {@link Store#simpleBeanDefaultsClassNameSuffix} tag value on the given model or classifier. - * - * It will first look on the model, and then in the given classifier. - * - * <strong>If not filled, then use default {@code s} value.</strong> - * - * @param classifier classifier to seek - * @param model model to seek - * @return the none empty value of the found tag value or {@code null} if not found nor empty. - * @see Store#simpleBeanDefaultsClassNameSuffix - * @since 2.6.2 - */ - public String getSimpleBeanDefaultsClassNameSuffixTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - String value = TagValueUtil.findTagValue(Store.simpleBeanDefaultsClassNameSuffix, classifier, aPackage, model); - if (StringUtils.isBlank(value)) { - value = "s"; - } - return value; - } - - /** - * Obtain the value of the {@link Store#simpleBeanWithNoInterfaceSuperClass} tag value on the given model or classifier. - * - * It will first look on the model, and then in the given classifier. - * - * @param classifier classifier to seek - * @param model model to seek - * @return the none empty value of the found tag value or {@code null} if not found nor empty. - * @see Store#simpleBeanWithNoInterfaceSuperClass + * @see Store#acceptBeanWithMethods * @since 3.0 */ - public String getSimpleBeanWithNoInterfaceSuperClassTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - return TagValueUtil.findTagValue(Store.simpleBeanWithNoInterfaceSuperClass, classifier, aPackage, model); + public boolean isAcceptBeanWithMethods(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { + return TagValueUtil.findBooleanTagValue(Store.acceptBeanWithMethods, classifier, aPackage, model); } /** - * Obtain the value of the {@link Store#simpleBeanWithNoInterfaceDefaultsSuperClass} tag value on the given model or classifier. - * - * It will first look on the model, and then in the given classifier. + * Obtain the value of the {@link Store#overrideAbstractClasses} tag value on the given model, package or classifier. * - * @param classifier classifier to seek - * @param model model to seek - * @return the none empty value of the found tag value or {@code null} if not found nor empty. - * @see Store#simpleBeanWithNoInterfaceDefaultsSuperClass - * @since 3.0 - */ - public String getSimpleBeanWithNoInterfaceDefaultsSuperClassTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - return TagValueUtil.findTagValue(Store.simpleBeanWithNoInterfaceDefaultsSuperClass, classifier, aPackage, model); - } - - /** - * Obtain the value of the {@link Store#simpleBeanWithNoInterfaceClassNamePrefix} tag value on the given model or classifier. + * It will first look on the model, then and package and then in the given classifier. * - * It will first look on the model, and then in the given classifier. + * If no value found, then will use the default value of the tag value. * * @param classifier classifier to seek + * @param aPackage package to seek * @param model model to seek * @return the none empty value of the found tag value or {@code null} if not found nor empty. - * @see Store#simpleBeanWithNoInterfaceClassNamePrefix + * @see Store#overrideAbstractClasses * @since 3.0 */ - public String getSimpleBeanWithNoInterfaceClassNamePrefixTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - return TagValueUtil.findTagValue(Store.simpleBeanWithNoInterfaceClassNamePrefix, classifier, aPackage, model); + public boolean isOverrideAbstractClasses(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { + return TagValueUtil.findBooleanTagValue(Store.overrideAbstractClasses, classifier, aPackage, model); } /** - * Obtain the value of the {@link Store#simpleBeanWithNoInterfaceClassNameSuffix} tag value on the given model or classifier. + * Obtain the value of the {@link Store#generatePropertyChangeSupport} tag value on the given model, package or classifier. * - * It will first look on the model, and then in the given classifier. + * It will first look on the model, then and package and then in the given classifier. * - * @param classifier classifier to seek - * @param model model to seek - * @return the none empty value of the found tag value or {@code null} if not found nor empty. - * @see Store#simpleBeanWithNoInterfaceClassNameSuffix - * @since 3.0 - */ - public String getSimpleBeanWithNoInterfaceClassNameSuffixTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - return TagValueUtil.findTagValue(Store.simpleBeanWithNoInterfaceClassNameSuffix, classifier, aPackage, model); - } - - /** - * Obtain the value of the {@link Store#simpleBeanWithNoInterfaceDefaultsClassNamePrefix} tag value on the given model or classifier. - * - * It will first look on the model, and then in the given classifier. + * If no value found, then will use the default value of the tag value. * * @param classifier classifier to seek + * @param aPackage package to seek * @param model model to seek * @return the none empty value of the found tag value or {@code null} if not found nor empty. - * @see Store#simpleBeanWithNoInterfaceDefaultsClassNamePrefix - * @since 3.0 + * @see Store#generatePropertyChangeSupport + * @since 2.12 */ - public String getSimpleBeanWithNoInterfaceDefaultsClassNamePrefixTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - return TagValueUtil.findTagValue(Store.simpleBeanWithNoInterfaceDefaultsClassNamePrefix, classifier, aPackage, model); + public boolean isSkipGeneratePropertyChangeSupport(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { + return TagValueUtil.findBooleanTagValue(Store.generatePropertyChangeSupport, classifier, aPackage, model); } /** - * Obtain the value of the {@link Store#simpleBeanWithNoInterfaceDefaultsClassNameSuffix} tag value on the given model or classifier. + * Obtain the value of the {@link Store#generateNotEmptyCollections} tag value on the given model, package or classifier. * - * It will first look on the model, and then in the given classifier. + * It will first look on the model, then and package and then in the given classifier. * - * <strong>If not filled, then use default {@code s} value.</strong> + * If no value found, then will use the default value of the tag value. * * @param classifier classifier to seek + * @param aPackage package to seek * @param model model to seek * @return the none empty value of the found tag value or {@code null} if not found nor empty. - * @see Store#simpleBeanWithNoInterfaceDefaultsClassNameSuffix - * @since 3.0 + * @see Store#generateNotEmptyCollections + * @since 2.12 */ - public String getSimpleBeanWithNoInterfaceDefaultsClassNameSuffixTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - String value = TagValueUtil.findTagValue(Store.simpleBeanWithNoInterfaceDefaultsClassNameSuffix, classifier, aPackage, model); - if (StringUtils.isBlank(value)) { - value = "s"; - } - return value; + public boolean isSkipGenerateNotEmptyCollections(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { + return TagValueUtil.findBooleanTagValue(Store.generateNotEmptyCollections, classifier, aPackage, model); } /** diff --git a/eugene-java-templates/src/main/java/org/nuiton/eugene/java/JavaBeanTransformer.java b/eugene-java-templates/src/main/java/org/nuiton/eugene/java/JavaBeanTransformer.java index 79437d1..8dde685 100644 --- a/eugene-java-templates/src/main/java/org/nuiton/eugene/java/JavaBeanTransformer.java +++ b/eugene-java-templates/src/main/java/org/nuiton/eugene/java/JavaBeanTransformer.java @@ -50,6 +50,12 @@ public class JavaBeanTransformer extends AbstractJavaBeanTransformer { private static final Log log = LogFactory.getLog(JavaBeanTransformer.class); + protected final JavaBeanTransformerTagValues javaBeanTransformerTagValues; + + public JavaBeanTransformer() { + javaBeanTransformerTagValues = new JavaBeanTransformerTagValues(); + } + @Override public void transformFromClass(ObjectModelClass input) { @@ -78,7 +84,7 @@ public class JavaBeanTransformer extends AbstractJavaBeanTransformer { protected boolean canGenerateImpl(ObjectModelClass input, ObjectModelClass abstractOutput) { String fqn = input.getQualifiedName() + "Impl"; - if (isInClassPath(fqn)) { + if (getResourcesHelper().isJavaFileInClassPath(fqn)) { // already in class-path return false; @@ -144,9 +150,7 @@ public class JavaBeanTransformer extends AbstractJavaBeanTransformer { if (!superClassIsBean) { // try to find a super class by tag-value - superClass = - getJavaTemplatesTagValues().getBeanSuperClassTagValue( - input, aPackage, model); + superClass = javaBeanTransformerTagValues.getBeanSuperClassTagValue(input, aPackage, model); if (superClass != null) { // will act as if super class is a bean @@ -176,10 +180,10 @@ public class JavaBeanTransformer extends AbstractJavaBeanTransformer { generateI18nBlockAndConstants(aPackage, input, output); - boolean usePCS = !getJavaTemplatesStereoTypes().isSkipGeneratePropertyChangeSupport(input, aPackage, model); + boolean usePCS = !javaTemplatesStereoTypes.isSkipGeneratePropertyChangeSupport(input, aPackage, model); - boolean generateBooleanGetMethods = getEugeneTagValues().isGenerateBooleanGetMethods(input, aPackage, model); - boolean generateNotEmptyCollections = !getJavaTemplatesStereoTypes().isSkipGenerateNotEmptyCollections(input, aPackage, model); + boolean generateBooleanGetMethods = eugeneTagValues.isGenerateBooleanGetMethods(input, aPackage, model); + boolean generateNotEmptyCollections = !javaTemplatesStereoTypes.isSkipGenerateNotEmptyCollections(input, aPackage, model); // Get available properties List<ObjectModelAttribute> properties = getProperties(input); diff --git a/eugene-java-templates/src/main/java/org/nuiton/eugene/java/JavaBeanTransformerTagValues.java b/eugene-java-templates/src/main/java/org/nuiton/eugene/java/JavaBeanTransformerTagValues.java new file mode 100644 index 0000000..febd6ad --- /dev/null +++ b/eugene-java-templates/src/main/java/org/nuiton/eugene/java/JavaBeanTransformerTagValues.java @@ -0,0 +1,181 @@ +package org.nuiton.eugene.java; + +/* + * #%L + * EUGene :: Java templates + * %% + * Copyright (C) 2012 CodeLutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + +import com.google.common.collect.ImmutableSet; +import org.nuiton.eugene.models.extension.tagvalue.TagValueMetadata; +import org.nuiton.eugene.models.extension.tagvalue.TagValueUtil; +import org.nuiton.eugene.models.extension.tagvalue.matcher.EqualsTagValueNameMatcher; +import org.nuiton.eugene.models.extension.tagvalue.provider.DefaultTagValueMetadatasProvider; +import org.nuiton.eugene.models.object.ObjectModel; +import org.nuiton.eugene.models.object.ObjectModelClassifier; +import org.nuiton.eugene.models.object.ObjectModelPackage; + +import java.util.Set; + +import static org.nuiton.i18n.I18n.n; +import static org.nuiton.i18n.I18n.t; + +/** + * Defines all tag values managed by Java templates. + * + * @author Tony Chemit - chemit@codelutin.com + * @plexus.component role="org.nuiton.eugene.models.extension.tagvalue.provider.TagValueMetadatasProvider" role-hint="eugene-java-templates" + * @since 2.5.6 + */ +public class JavaBeanTransformerTagValues extends DefaultTagValueMetadatasProvider { + + @Override + public String getDescription() { + return t("eugene.javaBeanTransformer.tagvalues"); + } + + public enum Store implements TagValueMetadata { + + /** + * Tag value to use a super class for generated bean. + * + * If the bean needs Property change support (says you use the {@link JavaTemplatesStereoTypes#STEREOTYPE_SKIP_GENERATE_PROPERTY_CHANGE_SUPPORT}), + * then your class must provide everything for it. + * + * More over, if you use some collections in your bean you must also define + * two method named {@code getChild(Collection list, int index)} and + * {@code getChild(List list, int index)} + * + * See new code to know minimum stuff to add in your class for this purpose. + * <pre> + * public abstract class AbstractBean implements Serializable { + * + * private static final long serialVersionUID = 1L; + * + * protected final PropertyChangeSupport pcs = new PropertyChangeSupport(this); + * + * public void addPropertyChangeListener(PropertyChangeListener listener) { + * pcs.addPropertyChangeListener(listener); + * } + * + * public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener) { + * pcs.addPropertyChangeListener(propertyName, listener); + * } + * + * public void removePropertyChangeListener(PropertyChangeListener listener) { + * pcs.removePropertyChangeListener(listener); + * } + * + * public void removePropertyChangeListener(String propertyName, PropertyChangeListener listener) { + * pcs.removePropertyChangeListener(propertyName, listener); + * } + * + * protected void firePropertyChange(String propertyName, Object oldValue, Object newValue) { + * pcs.firePropertyChange(propertyName, oldValue, newValue); + * } + * + * protected void firePropertyChange(String propertyName, Object newValue) { + * firePropertyChange(propertyName, null, newValue); + * } + * + * protected <T> T getChild(Collection<T> list, int index) { + * return CollectionUtil.getOrNull(list, index); + * } + * + * protected <T> T getChild(List<T> list, int index) { + * return CollectionUtil.getOrNull(list, index); + * } + * } + * </pre> + * + * You can globaly use it on the complete model or to a specific classifier. + * + * @see #getBeanSuperClassTagValue(ObjectModelClassifier, ObjectModelPackage, ObjectModel) + * @since 2.5.6 + */ + beanSuperClass(n("eugene.javaBeanTransformer.tagvalue.beanSuperClass"), String.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class); + private final Set<Class<?>> targets; + private final Class<?> type; + private final String i18nDescriptionKey; + private final String defaultValue; + + Store(String i18nDescriptionKey, Class<?> type, String defaultValue, Class<?>... targets) { + this.targets = ImmutableSet.copyOf(targets); + this.type = type; + this.i18nDescriptionKey = i18nDescriptionKey; + this.defaultValue = defaultValue; + } + + @Override + public String getName() { + return name(); + } + + @Override + public Set<Class<?>> getTargets() { + return targets; + } + + @Override + public Class<?> getType() { + return type; + } + + @Override + public Class<EqualsTagValueNameMatcher> getMatcherClass() { + return EqualsTagValueNameMatcher.class; + } + + @Override + public String getDescription() { + return t(i18nDescriptionKey); + } + + @Override + public String getDefaultValue() { + return defaultValue; + } + + @Override + public boolean isDeprecated() { + return false; + } + + } + + public JavaBeanTransformerTagValues() { + super((TagValueMetadata[]) Store.values()); + } + + /** + * Obtain the value of the {@link Store#beanSuperClass} tag value on the given model or classifier. + * + * It will first look on the model, and then in the given classifier. + * + * @param classifier classifier to seek + * @param model model to seek + * @return the none empty value of the found tag value or {@code null} if not found nor empty. + * @see Store#beanSuperClass + * @since 2.3 + */ + public String getBeanSuperClassTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { + return TagValueUtil.findTagValue(Store.beanSuperClass, classifier, aPackage, model); + } + +} diff --git a/eugene-java-templates/src/main/java/org/nuiton/eugene/java/JavaEnumerationTransformer.java b/eugene-java-templates/src/main/java/org/nuiton/eugene/java/JavaEnumerationTransformer.java index 07880d1..bcd5b54 100644 --- a/eugene-java-templates/src/main/java/org/nuiton/eugene/java/JavaEnumerationTransformer.java +++ b/eugene-java-templates/src/main/java/org/nuiton/eugene/java/JavaEnumerationTransformer.java @@ -76,7 +76,7 @@ public class JavaEnumerationTransformer extends ObjectModelTransformerToJava { if (b) { // check if not found in class-path - b = !isInClassPath(input); + b = !getResourcesHelper().isJavaFileInClassPath(input.getQualifiedName()); } return b; } diff --git a/eugene-java-templates/src/main/java/org/nuiton/eugene/java/JavaInterfaceTransformer.java b/eugene-java-templates/src/main/java/org/nuiton/eugene/java/JavaInterfaceTransformer.java index d2dc31e..e564bb3 100644 --- a/eugene-java-templates/src/main/java/org/nuiton/eugene/java/JavaInterfaceTransformer.java +++ b/eugene-java-templates/src/main/java/org/nuiton/eugene/java/JavaInterfaceTransformer.java @@ -123,7 +123,7 @@ public class JavaInterfaceTransformer extends ObjectModelTransformerToJava { protected boolean canGenerate(ObjectModelInterface input) { // check if not found in class-path - boolean b = !isInClassPath(input); + boolean b = !getResourcesHelper().isJavaFileInClassPath(input.getQualifiedName()); if (b) { diff --git a/eugene-java-templates/src/main/java/org/nuiton/eugene/java/JavaTemplatesStereoTypes.java b/eugene-java-templates/src/main/java/org/nuiton/eugene/java/JavaTemplatesStereoTypes.java index 7344287..1e38930 100644 --- a/eugene-java-templates/src/main/java/org/nuiton/eugene/java/JavaTemplatesStereoTypes.java +++ b/eugene-java-templates/src/main/java/org/nuiton/eugene/java/JavaTemplatesStereoTypes.java @@ -243,8 +243,7 @@ public class JavaTemplatesStereoTypes extends StereotypeDefinitionProvider { * @since 3.0 */ public boolean isAcceptBeanWithMethods(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - boolean value = Stereotypes.findDirectStereotype(STEREOTYPE_ACCEPT_BEAN_WITH_METHODS, classifier, aPackage, model); - return value; + return Stereotypes.findDirectStereotype(STEREOTYPE_ACCEPT_BEAN_WITH_METHODS, classifier, aPackage, model); } /** @@ -262,8 +261,7 @@ public class JavaTemplatesStereoTypes extends StereotypeDefinitionProvider { * @since 3.0 */ public boolean isOverrideAbstractClasses(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - boolean value = Stereotypes.findDirectStereotype(STEREOTYPE_OVERRIDE_ABSTRACT_CLASSES, classifier, aPackage, model); - return value; + return Stereotypes.findDirectStereotype(STEREOTYPE_OVERRIDE_ABSTRACT_CLASSES, classifier, aPackage, model); } /** @@ -281,8 +279,7 @@ public class JavaTemplatesStereoTypes extends StereotypeDefinitionProvider { * @since 2.12 */ public boolean isSkipGeneratePropertyChangeSupport(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - boolean value = Stereotypes.findDirectStereotype(STEREOTYPE_SKIP_GENERATE_PROPERTY_CHANGE_SUPPORT, classifier, aPackage, model); - return value; + return Stereotypes.findDirectStereotype(STEREOTYPE_SKIP_GENERATE_PROPERTY_CHANGE_SUPPORT, classifier, aPackage, model); } /** @@ -300,8 +297,7 @@ public class JavaTemplatesStereoTypes extends StereotypeDefinitionProvider { * @since 2.12 */ public boolean isSkipGenerateNotEmptyCollections(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - boolean value = Stereotypes.findDirectStereotype(STEREOTYPE_SKIP_GENERATE_NOT_EMPTY_COLLECTIONS, classifier, aPackage, model); - return value; + return Stereotypes.findDirectStereotype(STEREOTYPE_SKIP_GENERATE_NOT_EMPTY_COLLECTIONS, classifier, aPackage, model); } /** @@ -316,8 +312,7 @@ public class JavaTemplatesStereoTypes extends StereotypeDefinitionProvider { * @since 2.3 */ public boolean isSimpleBeanSkipGenerateInterface(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - boolean value = Stereotypes.findDirectStereotype(STEREOTYPE_SIMPLE_BEAN_SKIP_GENERATE_INTERFACE, classifier, aPackage, model); - return value; + return Stereotypes.findDirectStereotype(STEREOTYPE_SIMPLE_BEAN_SKIP_GENERATE_INTERFACE, classifier, aPackage, model); } /** @@ -329,8 +324,7 @@ public class JavaTemplatesStereoTypes extends StereotypeDefinitionProvider { * @since 2.7.2 */ public boolean isSimpleBeanSkipGenerateFactory(ObjectModel model) { - boolean value = Stereotypes.findDirectStereotype(STEREOTYPE_SIMPLE_BEAN_SKIP_GENERATE_FACTORY, model); - return value; + return Stereotypes.findDirectStereotype(STEREOTYPE_SIMPLE_BEAN_SKIP_GENERATE_FACTORY, model); } /** @@ -345,8 +339,7 @@ public class JavaTemplatesStereoTypes extends StereotypeDefinitionProvider { * @since 2.7.2 */ public boolean isSimpleBeanSkipGenerateDefaults(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - boolean value = Stereotypes.findDirectStereotype(STEREOTYPE_SIMPLE_BEAN_SKIP_GENERATE_DEFAULTS, classifier, aPackage, model); - return value; + return Stereotypes.findDirectStereotype(STEREOTYPE_SIMPLE_BEAN_SKIP_GENERATE_DEFAULTS, classifier, aPackage, model); } /** @@ -361,8 +354,7 @@ public class JavaTemplatesStereoTypes extends StereotypeDefinitionProvider { * @since 3.0 */ public boolean isSimpleBeanWithNoInterfaceSkipGenerateDefaults(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - boolean value = Stereotypes.findDirectStereotype(STEREOTYPE_SIMPLE_BEAN_WITH_NO_INTERFACE_SKIP_GENERATE_DEFAULTS, classifier, aPackage, model); - return value; + return Stereotypes.findDirectStereotype(STEREOTYPE_SIMPLE_BEAN_WITH_NO_INTERFACE_SKIP_GENERATE_DEFAULTS, classifier, aPackage, model); } /** @@ -379,8 +371,7 @@ public class JavaTemplatesStereoTypes extends StereotypeDefinitionProvider { * @since 3.0 */ public boolean isSimpleBeanWithNoInterfaceSkipGeneratePredicates(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - boolean value = Stereotypes.findDirectStereotype(STEREOTYPE_SIMPLE_BEAN_WITH_NO_INTERFACE_SKIP_GENERATE_PREDICATES, classifier, aPackage, model); - return value; + return Stereotypes.findDirectStereotype(STEREOTYPE_SIMPLE_BEAN_WITH_NO_INTERFACE_SKIP_GENERATE_PREDICATES, classifier, aPackage, model); } /** @@ -397,8 +388,7 @@ public class JavaTemplatesStereoTypes extends StereotypeDefinitionProvider { * @since 3.0 */ public boolean isSimpleBeanWithNoInterfaceSkipGenerateFunctions(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - boolean value = Stereotypes.findDirectStereotype(STEREOTYPE_SIMPLE_BEAN_WITH_NO_INTERFACE_SKIP_GENERATE_FUNCTIONS, classifier, aPackage, model); - return value; + return Stereotypes.findDirectStereotype(STEREOTYPE_SIMPLE_BEAN_WITH_NO_INTERFACE_SKIP_GENERATE_FUNCTIONS, classifier, aPackage, model); } /** @@ -415,8 +405,7 @@ public class JavaTemplatesStereoTypes extends StereotypeDefinitionProvider { * @since 3.0 */ public boolean isSimpleBeanWithNoInterfaceSkipGenerateDefaultConstructors(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - boolean value = Stereotypes.findDirectStereotype(STEREOTYPE_SIMPLE_BEAN_WITH_NO_INTERFACE_SKIP_GENERATE_DEFAULT_CONSTRUCTORS, classifier, aPackage, model); - return value; + return Stereotypes.findDirectStereotype(STEREOTYPE_SIMPLE_BEAN_WITH_NO_INTERFACE_SKIP_GENERATE_DEFAULT_CONSTRUCTORS, classifier, aPackage, model); } diff --git a/eugene-java-templates/src/main/java/org/nuiton/eugene/java/JavaTemplatesTagValues.java b/eugene-java-templates/src/main/java/org/nuiton/eugene/java/JavaTemplatesTagValues.java index 1131b8c..c18a197 100644 --- a/eugene-java-templates/src/main/java/org/nuiton/eugene/java/JavaTemplatesTagValues.java +++ b/eugene-java-templates/src/main/java/org/nuiton/eugene/java/JavaTemplatesTagValues.java @@ -467,8 +467,7 @@ public class JavaTemplatesTagValues extends TagValueDefinitionProvider { * @since 2.3 */ public String getBeanSuperClassTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - String value = findTagValue(TAG_BEAN_SUPER_CLASS, classifier, aPackage, model); - return value; + return findTagValue(TAG_BEAN_SUPER_CLASS, classifier, aPackage, model); } /** @@ -483,8 +482,7 @@ public class JavaTemplatesTagValues extends TagValueDefinitionProvider { * @since 2.6.2 */ public String getSimpleBeanSuperClassTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - String value = findTagValue(TAG_SIMPLE_BEAN_SUPER_CLASS, classifier, aPackage, model); - return value; + return findTagValue(TAG_SIMPLE_BEAN_SUPER_CLASS, classifier, aPackage, model); } /** @@ -499,8 +497,7 @@ public class JavaTemplatesTagValues extends TagValueDefinitionProvider { * @since 2.6.2 */ public String getSimpleBeanInterfaceSuperClassTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - String value = findTagValue(TAG_SIMPLE_BEAN_INTERFACE_SUPER_CLASS, classifier, aPackage, model); - return value; + return findTagValue(TAG_SIMPLE_BEAN_INTERFACE_SUPER_CLASS, classifier, aPackage, model); } /** @@ -515,8 +512,7 @@ public class JavaTemplatesTagValues extends TagValueDefinitionProvider { * @since 2.6.2 */ public String getSimpleBeanClassNamePrefixTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - String value = findTagValue(TAG_SIMPLE_BEAN_CLASS_NAME_PREFIX, classifier, aPackage, model); - return value; + return findTagValue(TAG_SIMPLE_BEAN_CLASS_NAME_PREFIX, classifier, aPackage, model); } /** @@ -531,8 +527,7 @@ public class JavaTemplatesTagValues extends TagValueDefinitionProvider { * @since 2.6.2 */ public String getSimpleBeanClassNameSuffixTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - String value = findTagValue(TAG_SIMPLE_BEAN_CLASS_NAME_SUFFIX, classifier, aPackage, model); - return value; + return findTagValue(TAG_SIMPLE_BEAN_CLASS_NAME_SUFFIX, classifier, aPackage, model); } /** @@ -547,8 +542,7 @@ public class JavaTemplatesTagValues extends TagValueDefinitionProvider { * @since 2.6.2 */ public String getSimpleBeanInterfaceNamePrefixTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - String value = findTagValue(TAG_SIMPLE_BEAN_INTERFACE_NAME_PREFIX, classifier, aPackage, model); - return value; + return findTagValue(TAG_SIMPLE_BEAN_INTERFACE_NAME_PREFIX, classifier, aPackage, model); } /** @@ -563,8 +557,7 @@ public class JavaTemplatesTagValues extends TagValueDefinitionProvider { * @since 2.6.2 */ public String getSimpleBeanInterfaceNameSuffixTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - String value = findTagValue(TAG_SIMPLE_BEAN_INTERFACE_NAME_SUFFIX, classifier, aPackage, model); - return value; + return findTagValue(TAG_SIMPLE_BEAN_INTERFACE_NAME_SUFFIX, classifier, aPackage, model); } /** @@ -579,8 +572,7 @@ public class JavaTemplatesTagValues extends TagValueDefinitionProvider { * @since 2.7.2 */ public String getSimpleBeanDefaultsSuperClassTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - String value = findTagValue(TAG_SIMPLE_BEAN_DEFAULTS_SUPER_CLASS, classifier, aPackage, model); - return value; + return findTagValue(TAG_SIMPLE_BEAN_DEFAULTS_SUPER_CLASS, classifier, aPackage, model); } /** @@ -595,8 +587,7 @@ public class JavaTemplatesTagValues extends TagValueDefinitionProvider { * @since 2.7.2 */ public String getSimpleBeanDefaultsClassNamePrefixTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - String value = findTagValue(TAG_SIMPLE_BEAN_DEFAULTS_CLASS_NAME_PREFIX, classifier, aPackage, model); - return value; + return findTagValue(TAG_SIMPLE_BEAN_DEFAULTS_CLASS_NAME_PREFIX, classifier, aPackage, model); } /** @@ -632,8 +623,7 @@ public class JavaTemplatesTagValues extends TagValueDefinitionProvider { * @since 3.0 */ public String getSimpleBeanWithNoInterfaceSuperClassTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - String value = findTagValue(TAG_SIMPLE_BEAN_WITH_NO_INTERFACE_SUPER_CLASS, classifier, aPackage, model); - return value; + return findTagValue(TAG_SIMPLE_BEAN_WITH_NO_INTERFACE_SUPER_CLASS, classifier, aPackage, model); } /** @@ -648,8 +638,7 @@ public class JavaTemplatesTagValues extends TagValueDefinitionProvider { * @since 3.0 */ public String getSimpleBeanWithNoInterfaceDefaultsSuperClassTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - String value = findTagValue(TAG_SIMPLE_BEAN_WITH_NO_INTERFACE_DEFAULTS_SUPER_CLASS, classifier, aPackage, model); - return value; + return findTagValue(TAG_SIMPLE_BEAN_WITH_NO_INTERFACE_DEFAULTS_SUPER_CLASS, classifier, aPackage, model); } /** @@ -664,8 +653,7 @@ public class JavaTemplatesTagValues extends TagValueDefinitionProvider { * @since 3.0 */ public String getSimpleBeanWithNoInterfaceClassNamePrefixTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - String value = findTagValue(TAG_SIMPLE_BEAN_WITH_NO_INTERFACE_CLASS_NAME_PREFIX, classifier, aPackage, model); - return value; + return findTagValue(TAG_SIMPLE_BEAN_WITH_NO_INTERFACE_CLASS_NAME_PREFIX, classifier, aPackage, model); } /** @@ -680,8 +668,7 @@ public class JavaTemplatesTagValues extends TagValueDefinitionProvider { * @since 3.0 */ public String getSimpleBeanWithNoInterfaceClassNameSuffixTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - String value = findTagValue(TAG_SIMPLE_BEAN_WITH_NO_INTERFACE_CLASS_NAME_SUFFIX, classifier, aPackage, model); - return value; + return findTagValue(TAG_SIMPLE_BEAN_WITH_NO_INTERFACE_CLASS_NAME_SUFFIX, classifier, aPackage, model); } /** @@ -696,8 +683,7 @@ public class JavaTemplatesTagValues extends TagValueDefinitionProvider { * @since 3.0 */ public String getSimpleBeanWithNoInterfaceDefaultsClassNamePrefixTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { - String value = findTagValue(TAG_SIMPLE_BEAN_WITH_NO_INTERFACE_DEFAULTS_CLASS_NAME_PREFIX, classifier, aPackage, model); - return value; + return findTagValue(TAG_SIMPLE_BEAN_WITH_NO_INTERFACE_DEFAULTS_CLASS_NAME_PREFIX, classifier, aPackage, model); } /** @@ -743,8 +729,7 @@ public class JavaTemplatesTagValues extends TagValueDefinitionProvider { * @since 2.15 */ public boolean isUseJava8(ObjectModel model) { - boolean value = findBooleanTagValue(TAG_JAVA8, model); - return value; + return findBooleanTagValue(TAG_JAVA8, model); } } diff --git a/eugene-java-templates/src/main/java/org/nuiton/eugene/java/SimpleJavaBeanTransformer.java b/eugene-java-templates/src/main/java/org/nuiton/eugene/java/SimpleJavaBeanTransformer.java index 61562e5..88c9405 100644 --- a/eugene-java-templates/src/main/java/org/nuiton/eugene/java/SimpleJavaBeanTransformer.java +++ b/eugene-java-templates/src/main/java/org/nuiton/eugene/java/SimpleJavaBeanTransformer.java @@ -58,8 +58,13 @@ import java.util.List; public class SimpleJavaBeanTransformer extends AbstractJavaBeanTransformer { /** Logger. */ - private static final Log log = - LogFactory.getLog(SimpleJavaBeanTransformer.class); + private static final Log log = LogFactory.getLog(SimpleJavaBeanTransformer.class); + + protected final SimpleJavaBeanTransformerTagValues simpleJavaBeanTransformerTagValues; + + public SimpleJavaBeanTransformer() { + simpleJavaBeanTransformerTagValues = new SimpleJavaBeanTransformerTagValues(); + } @Override public void transformFromModel(ObjectModel model) { @@ -142,7 +147,7 @@ public class SimpleJavaBeanTransformer extends AbstractJavaBeanTransformer { generateBeanDefaults(input, abstractDefaultClassName, defaultClassName); } - boolean generateAbstractDefaults = !getJavaTemplatesStereoTypes().isSimpleBeanSkipGenerateDefaults(input, aPackage, model) + boolean generateAbstractDefaults = !javaTemplatesStereoTypes.isSimpleBeanSkipGenerateDefaults(input, aPackage, model) && canGenerateAbstractClass(aPackage, input, abstractDefaultClassName); if (generateAbstractDefaults) { @@ -152,25 +157,22 @@ public class SimpleJavaBeanTransformer extends AbstractJavaBeanTransformer { protected boolean canGenerateFactory(ObjectModel model, String className) { - boolean generateFactory = !getJavaTemplatesStereoTypes().isSimpleBeanSkipGenerateFactory(model); + boolean generateFactory = !javaTemplatesStereoTypes.isSimpleBeanSkipGenerateFactory(model); String defaultPackage = getDefaultPackageName(); String fqn = defaultPackage + "." + className; - boolean canGenerate = generateFactory && !isInClassPath(fqn); - return canGenerate; + return generateFactory && !getResourcesHelper().isJavaFileInClassPath(fqn); } protected boolean canGenerateInterface(ObjectModelPackage aPackage, ObjectModelClass input, String className) { - boolean generateInterface = - !getJavaTemplatesStereoTypes().isSimpleBeanSkipGenerateInterface(input, aPackage, model); + boolean generateInterface = !javaTemplatesStereoTypes.isSimpleBeanSkipGenerateInterface(input, aPackage, model); - boolean canGenerate = generateInterface && notFoundInClassPath(input, className); - return canGenerate; + return generateInterface && notFoundInClassPath(input, className); } @@ -179,7 +181,7 @@ public class SimpleJavaBeanTransformer extends AbstractJavaBeanTransformer { boolean withInput = input != null; boolean canGenerate = notFoundInClassPath(input, className) - && !getJavaTemplatesStereoTypes().isSimpleBeanSkipGenerateDefaults(input, aPackage, model); + && !javaTemplatesStereoTypes.isSimpleBeanSkipGenerateDefaults(input, aPackage, model); if (canGenerate) { @@ -277,7 +279,7 @@ public class SimpleJavaBeanTransformer extends AbstractJavaBeanTransformer { // try to find a super class by tag-value superClass = - getJavaTemplatesTagValues().getSimpleBeanInterfaceSuperClassTagValue( + simpleJavaBeanTransformerTagValues.getSimpleBeanInterfaceSuperClassTagValue( input, aPackage, model); } @@ -350,9 +352,7 @@ public class SimpleJavaBeanTransformer extends AbstractJavaBeanTransformer { if (!superClassIsBean) { // try to find a super class by tag-value - superClass = - getJavaTemplatesTagValues().getSimpleBeanSuperClassTagValue( - input, aPackage, model); + superClass = simpleJavaBeanTransformerTagValues.getSimpleBeanSuperClassTagValue(input, aPackage, model); if (superClass != null) { // will act as if super class is a bean @@ -390,10 +390,10 @@ public class SimpleJavaBeanTransformer extends AbstractJavaBeanTransformer { // Get available properties List<ObjectModelAttribute> properties = getProperties(input); - boolean usePCS = !getJavaTemplatesStereoTypes().isSkipGeneratePropertyChangeSupport(input, aPackage, model); + boolean usePCS = !javaTemplatesStereoTypes.isSkipGeneratePropertyChangeSupport(input, aPackage, model); - boolean generateBooleanGetMethods = getEugeneTagValues().isGenerateBooleanGetMethods(input, aPackage, model); - boolean generateNotEmptyCollections = !getJavaTemplatesStereoTypes().isSkipGenerateNotEmptyCollections(input, aPackage, model); + boolean generateBooleanGetMethods = eugeneTagValues.isGenerateBooleanGetMethods(input, aPackage, model); + boolean generateNotEmptyCollections = !javaTemplatesStereoTypes.isSkipGenerateNotEmptyCollections(input, aPackage, model); // Add properties field + javabean methods for (ObjectModelAttribute attr : properties) { @@ -422,7 +422,7 @@ public class SimpleJavaBeanTransformer extends AbstractJavaBeanTransformer { // try to find a super class by tag-value String superClassName = - getJavaTemplatesTagValues().getSimpleBeanDefaultsSuperClassTagValue( + simpleJavaBeanTransformerTagValues.getSimpleBeanDefaultsSuperClassTagValue( aClass, aPackage, model); ObjectModelClass output = createAbstractClass(abstractoutclassName, packageName); @@ -513,7 +513,7 @@ public class SimpleJavaBeanTransformer extends AbstractJavaBeanTransformer { protected Collection<ObjectModelOperation> getPublicOperations(ObjectModelClass clazz) { - Collection<ObjectModelOperation> result = new ArrayList<ObjectModelOperation>(); + Collection<ObjectModelOperation> result = new ArrayList<>(); for (ObjectModelOperation operation : clazz.getOperations()) { ObjectModelJavaModifier visibility = @@ -527,8 +527,8 @@ public class SimpleJavaBeanTransformer extends AbstractJavaBeanTransformer { } protected String getBeanInterfaceName(ObjectModelPackage aPackage, ObjectModelClass input) { - String interfaceNamePrefix = getJavaTemplatesTagValues().getSimpleBeanInterfaceNamePrefixTagValue(input, aPackage, model); - String interfaceNameSuffix = getJavaTemplatesTagValues().getSimpleBeanInterfaceNameSuffixTagValue(input, aPackage, model); + String interfaceNamePrefix = simpleJavaBeanTransformerTagValues.getSimpleBeanInterfaceNamePrefixTagValue(input, aPackage, model); + String interfaceNameSuffix = simpleJavaBeanTransformerTagValues.getSimpleBeanInterfaceNameSuffixTagValue(input, aPackage, model); return generateName( interfaceNamePrefix, @@ -538,8 +538,8 @@ public class SimpleJavaBeanTransformer extends AbstractJavaBeanTransformer { } protected String getBeanClassName(ObjectModelPackage aPackage, ObjectModelClass input) { - String classNamePrefix = getJavaTemplatesTagValues().getSimpleBeanClassNamePrefixTagValue(input, aPackage, model); - String classNameSuffix = getJavaTemplatesTagValues().getSimpleBeanClassNameSuffixTagValue(input, aPackage, model); + String classNamePrefix = simpleJavaBeanTransformerTagValues.getSimpleBeanClassNamePrefixTagValue(input, aPackage, model); + String classNameSuffix = simpleJavaBeanTransformerTagValues.getSimpleBeanClassNameSuffixTagValue(input, aPackage, model); return generateName( classNamePrefix, @@ -549,8 +549,8 @@ public class SimpleJavaBeanTransformer extends AbstractJavaBeanTransformer { } protected String getBeanDefaultsClassName(ObjectModelPackage aPackage, ObjectModelClass input) { - String classNamePrefix = getJavaTemplatesTagValues().getSimpleBeanDefaultsClassNamePrefixTagValue(input, aPackage, model); - String classNameSuffix = getJavaTemplatesTagValues().getSimpleBeanDefaultsClassNameSuffixTagValue(input, aPackage, model); + String classNamePrefix = simpleJavaBeanTransformerTagValues.getSimpleBeanDefaultsClassNamePrefixTagValue(input, aPackage, model); + String classNameSuffix = simpleJavaBeanTransformerTagValues.getSimpleBeanDefaultsClassNameSuffixTagValue(input, aPackage, model); return generateName( classNamePrefix, input.getName(), diff --git a/eugene-java-templates/src/main/java/org/nuiton/eugene/java/SimpleJavaBeanTransformerTagValues.java b/eugene-java-templates/src/main/java/org/nuiton/eugene/java/SimpleJavaBeanTransformerTagValues.java new file mode 100644 index 0000000..378aef4 --- /dev/null +++ b/eugene-java-templates/src/main/java/org/nuiton/eugene/java/SimpleJavaBeanTransformerTagValues.java @@ -0,0 +1,461 @@ +package org.nuiton.eugene.java; + +/* + * #%L + * EUGene :: Java templates + * %% + * Copyright (C) 2012 CodeLutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + +import com.google.common.collect.ImmutableSet; +import org.apache.commons.lang3.StringUtils; +import org.nuiton.eugene.models.extension.tagvalue.TagValueMetadata; +import org.nuiton.eugene.models.extension.tagvalue.TagValueUtil; +import org.nuiton.eugene.models.extension.tagvalue.matcher.EqualsTagValueNameMatcher; +import org.nuiton.eugene.models.extension.tagvalue.provider.DefaultTagValueMetadatasProvider; +import org.nuiton.eugene.models.object.ObjectModel; +import org.nuiton.eugene.models.object.ObjectModelClassifier; +import org.nuiton.eugene.models.object.ObjectModelPackage; + +import java.util.Set; + +import static org.nuiton.i18n.I18n.n; +import static org.nuiton.i18n.I18n.t; + +/** + * Defines all tag values managed by Java templates. + * + * @author Tony Chemit - chemit@codelutin.com + * @plexus.component role="org.nuiton.eugene.models.extension.tagvalue.provider.TagValueMetadatasProvider" role-hint="simpleJavaBean" + * @since 2.5.6 + */ +public class SimpleJavaBeanTransformerTagValues extends DefaultTagValueMetadatasProvider { + @Override + public String getDescription() { + return t("eugene.simpleBeanTransformer.tagvalues"); + } + + public enum Store implements TagValueMetadata { + + /** + * To generate an interface of each simple bean. + * + * You can globaly use it on the complete model or to a specific classifier. + * + * @see #isSimpleBeanSkipGenerateInterface(ObjectModelClassifier, ObjectModelPackage, ObjectModel) + * @since 2.6.2 + */ + simpleBeanGenerateInterface(n("eugene.simpleBeanTransformer.tagvalue.simpleBeanGenerateInterface"), boolean.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), + + /** + * To generate a factory of generated simple beans. + * + * You must use it on the complete model. + * + * @see #isSimpleBeanSkipGenerateFactory(ObjectModel) + * @since 2.6.2 + */ + simpleBeanGenerateFactory(n("eugene.simpleBeanTransformer.tagvalue.simpleBeanGenerateFactory"), boolean.class, null, ObjectModel.class), + + /** + * To generate a factory of generated simple beans. + * + * You must use it on the complete model. + * + * @see #isSimpleBeanSkipGenerateDefaults(ObjectModelClassifier, ObjectModelPackage, ObjectModel) + * @since 2.7.2 + */ + simpleBeanGenerateDefaults(n("eugene.simpleBeanTransformer.tagvalue.simpleBeanGenerateDefaults"), boolean.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), + + /** + * Tag value to use a super class for generated bean. + * + * If the bean needs Property change support (says you use the tag-value {@link JavaTemplatesStereoTypes#STEREOTYPE_SKIP_GENERATE_PROPERTY_CHANGE_SUPPORT}, + * then your class must provide evrything for it. + * + * More over, if you use some collections in your bean you must also define + * two method named {@code getChild(Collection list, int index)} and + * {@code getChild(List list, int index)} + * + * See new code to know minimum stuff to add in your class for this purpose. + * <pre> + * public abstract class AbstractBean implements Serializable { + * + * private static final long serialVersionUID = 1L; + * + * protected final PropertyChangeSupport pcs = new PropertyChangeSupport(this); + * + * public void addPropertyChangeListener(PropertyChangeListener listener) { + * pcs.addPropertyChangeListener(listener); + * } + * + * public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener) { + * pcs.addPropertyChangeListener(propertyName, listener); + * } + * + * public void removePropertyChangeListener(PropertyChangeListener listener) { + * pcs.removePropertyChangeListener(listener); + * } + * + * public void removePropertyChangeListener(String propertyName, PropertyChangeListener listener) { + * pcs.removePropertyChangeListener(propertyName, listener); + * } + * + * protected void firePropertyChange(String propertyName, Object oldValue, Object newValue) { + * pcs.firePropertyChange(propertyName, oldValue, newValue); + * } + * + * protected void firePropertyChange(String propertyName, Object newValue) { + * firePropertyChange(propertyName, null, newValue); + * } + * + * protected <T> T getChild(Collection<T> list, int index) { + * return CollectionUtil.getOrNull(list, index); + * } + * + * protected <T> T getChild(List<T> list, int index) { + * return CollectionUtil.getOrNull(list, index); + * } + * } + * </pre> + * + * You can globaly use it on the complete model or to a specific classifier. + * + * @see #getSimpleBeanSuperClassTagValue(ObjectModelClassifier, ObjectModelPackage, ObjectModel) + * @since 2.5.6 + */ + simpleBeanSuperClass(n("eugene.simpleBeanTransformer.tagvalue.simpleBeanSuperClass"), String.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), + + /** + * To add a prefix on the name of each generated bean class. + * + * You can globaly use it on the complete model or to a specific classifier. + * + * @see #getSimpleBeanClassNamePrefixTagValue(ObjectModelClassifier, ObjectModelPackage, ObjectModel) + * @since 2.6.2 + */ + simpleBeanClassNamePrefix(n("eugene.simpleBeanTransformer.tagvalue.simpleBeanClassNamePrefix"), String.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), + + /** + * To add a prefix on the name of each generated bean class. + * + * You can globaly use it on the complete model or to a specific classifier. + * + * @see #getSimpleBeanClassNameSuffixTagValue(ObjectModelClassifier, ObjectModelPackage, ObjectModel) + * @since 2.6.2 + */ + simpleBeanClassNameSuffix(n("eugene.simpleBeanTransformer.tagvalue.simpleBeanClassNameSuffix"), String.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), + + /** + * Tag value to use a super interface for generated interfaces on simple bean. + * + * You can globaly use it on the complete model or to a specific classifier. + * + * @see #getSimpleBeanInterfaceSuperClassTagValue(ObjectModelClassifier, ObjectModelPackage, ObjectModel) + * @since 2.6.2 + */ + simpleBeanInterfaceSuperClass(n("eugene.simpleBeanTransformer.tagvalue.simpleBeanInterfaceSuperClass"), String.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), + + /** + * To add a prefix on the name of each generated interface of a simple bean. + * + * You can globaly use it on the complete model or to a specific classifier. + * + * @see #getSimpleBeanInterfaceNamePrefixTagValue(ObjectModelClassifier, ObjectModelPackage, ObjectModel) + * @since 2.6.2 + */ + simpleBeanInterfaceNamePrefix(n("eugene.simpleBeanTransformer.tagvalue.simpleBeanInterfaceNamePrefix"), String.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), + + /** + * To add a prefix on the name of each generated interface of a simple bean. + * + * You can globaly use it on the complete model or to a specific classifier. + * + * @see #getSimpleBeanInterfaceNameSuffixTagValue(ObjectModelClassifier, ObjectModelPackage, ObjectModel) + * @since 2.6.2 + */ + simpleBeanInterfaceNameSuffix(n("eugene.simpleBeanTransformer.tagvalue.simpleBeanInterfaceNameSuffix"), String.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), + + /** + * Tag value to use a super super-class for generated defaults class of a + * simple bean. + * + * You can globaly use it on the complete model or to a specific classifier. + * + * @see #getSimpleBeanDefaultsSuperClassTagValue(ObjectModelClassifier, ObjectModelPackage, ObjectModel) + * @since 2.7.2 + */ + simpleBeanDefaultsSuperClass(n("eugene.simpleBeanTransformer.tagvalue.simpleBeanDefaultsSuperClass"), String.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), + + /** + * To add a prefix on the name of each generated bean class. + * + * You can globaly use it on the complete model or to a specific classifier. + * + * @see #getSimpleBeanDefaultsClassNamePrefixTagValue(ObjectModelClassifier, ObjectModelPackage, ObjectModel) + * @since 2.7.2 + */ + simpleBeanDefaultsClassNamePrefix(n("eugene.simpleBeanTransformer.tagvalue.simpleBeanDefaultsClassNamePrefix"), String.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), + + /** + * To add a suffix on the name of each generated bean class. + * + * You can globaly use it on the complete model or to a specific classifier. + * + * @see #getSimpleBeanDefaultsClassNameSuffixTagValue(ObjectModelClassifier, ObjectModelPackage, ObjectModel) + * @since 2.6.2 + */ + simpleBeanDefaultsClassNameSuffix(n("eugene.simpleBeanTransformer.tagvalue.simpleBeanDefaultsClassNameSuffix"), String.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class),; + + private final Set<Class<?>> targets; + private final Class<?> type; + private final String i18nDescriptionKey; + private final String defaultValue; + + Store(String i18nDescriptionKey, Class<?> type, String defaultValue, Class<?>... targets) { + this.targets = ImmutableSet.copyOf(targets); + this.type = type; + this.i18nDescriptionKey = i18nDescriptionKey; + this.defaultValue = defaultValue; + } + + @Override + public String getName() { + return name(); + } + + @Override + public Set<Class<?>> getTargets() { + return targets; + } + + @Override + public Class<?> getType() { + return type; + } + + @Override + public Class<EqualsTagValueNameMatcher> getMatcherClass() { + return EqualsTagValueNameMatcher.class; + } + + @Override + public String getDescription() { + return t(i18nDescriptionKey); + } + + @Override + public String getDefaultValue() { + return defaultValue; + } + + @Override + public boolean isDeprecated() { + return false; + } + + } + + public SimpleJavaBeanTransformerTagValues() { + super((TagValueMetadata[]) Store.values()); + } + + /** + * Obtain the value of the {@link Store#simpleBeanSuperClass} tag value on the given model or classifier. + * + * It will first look on the model, and then in the given classifier. + * + * @param classifier classifier to seek + * @param model model to seek + * @return the none empty value of the found tag value or {@code null} if not found nor empty. + * @see Store#simpleBeanSuperClass + * @since 2.6.2 + */ + public String getSimpleBeanSuperClassTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { + return TagValueUtil.findTagValue(Store.simpleBeanSuperClass, classifier, aPackage, model); + } + + /** + * Obtain the value of the {@link Store#simpleBeanInterfaceSuperClass} tag value on the given model or classifier. + * + * It will first look on the model, and then in the given classifier. + * + * @param classifier classifier to seek + * @param model model to seek + * @return the none empty value of the found tag value or {@code null} if not found nor empty. + * @see Store#simpleBeanInterfaceSuperClass + * @since 2.6.2 + */ + public String getSimpleBeanInterfaceSuperClassTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { + return TagValueUtil.findTagValue(Store.simpleBeanInterfaceSuperClass, classifier, aPackage, model); + } + + /** + * Obtain the value of the {@link Store#simpleBeanClassNamePrefix} tag value on the given model or classifier. + * + * It will first look on the model, and then in the given classifier. + * + * @param classifier classifier to seek + * @param model model to seek + * @return the none empty value of the found tag value or {@code null} if not found nor empty. + * @see Store#simpleBeanClassNamePrefix + * @since 2.6.2 + */ + public String getSimpleBeanClassNamePrefixTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { + return TagValueUtil.findTagValue(Store.simpleBeanClassNamePrefix, classifier, aPackage, model); + } + + /** + * Obtain the value of the {@link Store#simpleBeanClassNameSuffix} tag value on the given model or classifier. + * + * It will first look on the model, and then in the given classifier. + * + * @param classifier classifier to seek + * @param model model to seek + * @return the none empty value of the found tag value or {@code null} if not found nor empty. + * @see Store#simpleBeanClassNameSuffix + * @since 2.6.2 + */ + public String getSimpleBeanClassNameSuffixTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { + return TagValueUtil.findTagValue(Store.simpleBeanClassNameSuffix, classifier, aPackage, model); + } + + /** + * Obtain the value of the {@link Store#simpleBeanInterfaceNamePrefix} tag value on the given model or classifier. + * + * It will first look on the model, and then in the given classifier. + * + * @param classifier classifier to seek + * @param model model to seek + * @return the none empty value of the found tag value or {@code null} if not found nor empty. + * @see Store#simpleBeanInterfaceNamePrefix + * @since 2.6.2 + */ + public String getSimpleBeanInterfaceNamePrefixTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { + return TagValueUtil.findTagValue(Store.simpleBeanInterfaceNamePrefix, classifier, aPackage, model); + } + + /** + * Obtain the value of the {@link Store#simpleBeanInterfaceNameSuffix} tag value on the given model or classifier. + * + * It will first look on the model, and then in the given classifier. + * + * @param classifier classifier to seek + * @param model model to seek + * @return the none empty value of the found tag value or {@code null} if not found nor empty. + * @see Store#simpleBeanInterfaceNameSuffix + * @since 2.6.2 + */ + public String getSimpleBeanInterfaceNameSuffixTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { + return TagValueUtil.findTagValue(Store.simpleBeanInterfaceNameSuffix, classifier, aPackage, model); + } + + /** + * Obtain the value of the {@link Store#simpleBeanDefaultsSuperClass} tag value on the given model or classifier. + * + * It will first look on the model, and then in the given classifier. + * + * @param classifier classifier to seek + * @param model model to seek + * @return the none empty value of the found tag value or {@code null} if not found nor empty. + * @see Store#simpleBeanDefaultsSuperClass + * @since 2.7.2 + */ + public String getSimpleBeanDefaultsSuperClassTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { + return TagValueUtil.findTagValue(Store.simpleBeanDefaultsSuperClass, classifier, aPackage, model); + } + + /** + * Obtain the value of the {@link Store#simpleBeanDefaultsClassNamePrefix} tag value on the given model or classifier. + * + * It will first look on the model, and then in the given classifier. + * + * @param classifier classifier to seek + * @param model model to seek + * @return the none empty value of the found tag value or {@code null} if not found nor empty. + * @see Store#simpleBeanDefaultsClassNamePrefix + * @since 2.7.2 + */ + public String getSimpleBeanDefaultsClassNamePrefixTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { + return TagValueUtil.findTagValue(Store.simpleBeanDefaultsClassNamePrefix, classifier, aPackage, model); + } + + /** + * Obtain the value of the {@link Store#simpleBeanDefaultsClassNameSuffix} tag value on the given model or classifier. + * + * It will first look on the model, and then in the given classifier. + * + * <strong>If not filled, then use default {@code s} value.</strong> + * + * @param classifier classifier to seek + * @param model model to seek + * @return the none empty value of the found tag value or {@code null} if not found nor empty. + * @see Store#simpleBeanDefaultsClassNameSuffix + * @since 2.6.2 + */ + public String getSimpleBeanDefaultsClassNameSuffixTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { + String value = TagValueUtil.findTagValue(Store.simpleBeanDefaultsClassNameSuffix, classifier, aPackage, model); + if (StringUtils.isBlank(value)) { + value = "s"; + } + return value; + } + + /** + * Obtain the value of the {@link Store#simpleBeanGenerateInterface} tag value on the given model or classifier. + * + * It will first look on the model, and then in the given classifier. + * + * @param classifier classifier to seek + * @param model model to seek + * @return the none empty value of the found tag value or {@code null} if not found nor empty. + * @see Store#simpleBeanGenerateInterface + * @since 2.3 + */ + public boolean isSimpleBeanSkipGenerateInterface(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { + return TagValueUtil.findBooleanTagValue(Store.simpleBeanGenerateInterface, classifier, aPackage, model); + } + + /** + * Obtain the value of the {@link Store#simpleBeanGenerateFactory} tag value on the given model or classifier. + * + * @param model model to seek + * @return the none empty value of the found tag value or {@code null} if not found nor empty. + * @see Store#simpleBeanGenerateFactory + * @since 2.7.2 + */ + public boolean isSimpleBeanSkipGenerateFactory(ObjectModel model) { + return TagValueUtil.findBooleanTagValue(Store.simpleBeanGenerateFactory, model); + } + + /** + * Obtain the value of the {@link Store#simpleBeanGenerateDefaults} tag value on the given model or classifier. + * + * It will first look on the model, and then in the given classifier. + * + * @param classifier classifier to seek + * @param model model to seek + * @return the none empty value of the found tag value or {@code null} if not found nor empty. + * @see Store#simpleBeanGenerateDefaults + * @since 2.7.2 + */ + public boolean isSimpleBeanSkipGenerateDefaults(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { + return TagValueUtil.findBooleanTagValue(Store.simpleBeanGenerateDefaults, classifier, aPackage, model); + } + +} diff --git a/eugene-java-templates/src/main/java/org/nuiton/eugene/java/SimpleJavaBeanWithNoInterfaceTransformer.java b/eugene-java-templates/src/main/java/org/nuiton/eugene/java/SimpleJavaBeanWithNoInterfaceTransformer.java index 705218c..79ae81a 100644 --- a/eugene-java-templates/src/main/java/org/nuiton/eugene/java/SimpleJavaBeanWithNoInterfaceTransformer.java +++ b/eugene-java-templates/src/main/java/org/nuiton/eugene/java/SimpleJavaBeanWithNoInterfaceTransformer.java @@ -49,7 +49,7 @@ import java.util.Collections; import java.util.List; /** - * Generates a java bean and a utility class around it. This transformer acts like {@link SimpleJavaBeanTransformer} + * Generates a java bean and a utility class around it. This templates acts like {@link SimpleJavaBeanTransformer} * but with no interface generation (plus there is not factory generation at all). * * For example: @@ -78,6 +78,12 @@ public class SimpleJavaBeanWithNoInterfaceTransformer extends AbstractJavaBeanTr ImmutableSet<ObjectModelClass> beanDefaultClasses; protected boolean useJava8; + protected final SimpleJavaBeanWithNoInterfaceTransformerTagValues simpleJavaBeanWithNoInterfaceTransformerTagValues; + + public SimpleJavaBeanWithNoInterfaceTransformer() { + simpleJavaBeanWithNoInterfaceTransformerTagValues = new SimpleJavaBeanWithNoInterfaceTransformerTagValues(); + } + @Override public void transformFromModel(ObjectModel model) { super.transformFromModel(model); @@ -88,9 +94,6 @@ public class SimpleJavaBeanWithNoInterfaceTransformer extends AbstractJavaBeanTr ImmutableSet.Builder<ObjectModelClass> beanClassesBuilder = new ImmutableSet.Builder<>(); ImmutableSet.Builder<ObjectModelClass> beanDefaultClassesBuilder = new ImmutableSet.Builder<>(); - EugeneJavaTagValues javaTemplatesTagValues = getJavaTemplatesTagValues(); - EugeneJavaStereoTypes javaTemplatesStereoTypes = getJavaTemplatesStereoTypes(); - for (ObjectModelClass aClass : model.getClasses()) { ObjectModelPackage aPackage = model.getPackage(aClass.getPackageName()); @@ -98,8 +101,8 @@ public class SimpleJavaBeanWithNoInterfaceTransformer extends AbstractJavaBeanTr beanClassesBuilder.add(aClass); - String classNamePrefix = javaTemplatesTagValues.getSimpleBeanWithNoInterfaceClassNamePrefixTagValue(aClass, aPackage, model); - String classNameSuffix = javaTemplatesTagValues.getSimpleBeanWithNoInterfaceClassNameSuffixTagValue(aClass, aPackage, model); + String classNamePrefix = simpleJavaBeanWithNoInterfaceTransformerTagValues.getSimpleBeanWithNoInterfaceClassNamePrefixTagValue(aClass, aPackage, model); + String classNameSuffix = simpleJavaBeanWithNoInterfaceTransformerTagValues.getSimpleBeanWithNoInterfaceClassNameSuffixTagValue(aClass, aPackage, model); String generateName = generateName(classNamePrefix, aClass.getName(), classNameSuffix); beanNameTranslationBuilder.put(aClass, generateName); @@ -110,8 +113,8 @@ public class SimpleJavaBeanWithNoInterfaceTransformer extends AbstractJavaBeanTr beanDefaultClassesBuilder.add(aClass); - String classDefaultsNamePrefix = javaTemplatesTagValues.getSimpleBeanWithNoInterfaceDefaultsClassNamePrefixTagValue(aClass, aPackage, model); - String classDefaultsNameSuffix = javaTemplatesTagValues.getSimpleBeanWithNoInterfaceDefaultsClassNameSuffixTagValue(aClass, aPackage, model); + String classDefaultsNamePrefix = simpleJavaBeanWithNoInterfaceTransformerTagValues.getSimpleBeanWithNoInterfaceDefaultsClassNamePrefixTagValue(aClass, aPackage, model); + String classDefaultsNameSuffix = simpleJavaBeanWithNoInterfaceTransformerTagValues.getSimpleBeanWithNoInterfaceDefaultsClassNameSuffixTagValue(aClass, aPackage, model); String generateDefaultsName = generateName(classDefaultsNamePrefix, aClass.getName(), classDefaultsNameSuffix); beanDefaultsNameTranslationBuilder.put(aClass, generateDefaultsName); @@ -139,7 +142,7 @@ public class SimpleJavaBeanWithNoInterfaceTransformer extends AbstractJavaBeanTr String defaultPackageName = getDefaultPackageName(); String modelBeanInitializeClassName = model.getName() + "ModelInitializer"; - boolean generateModelInitializer = !isInClassPath(defaultPackageName + "." + modelBeanInitializeClassName); + boolean generateModelInitializer = !getResourcesHelper().isJavaFileInClassPath(defaultPackageName + "." + modelBeanInitializeClassName); if (generateModelInitializer) { ObjectModelInterface anInterface = createInterface(modelBeanInitializeClassName, defaultPackageName); @@ -157,7 +160,7 @@ public class SimpleJavaBeanWithNoInterfaceTransformer extends AbstractJavaBeanTr } String modelInitializerRunnerClassName = model.getName() + "ModelInitializerRunner"; - boolean generateInitializerRunnerClassName = !isInClassPath(defaultPackageName + "." + modelInitializerRunnerClassName); + boolean generateInitializerRunnerClassName = !getResourcesHelper().isJavaFileInClassPath(defaultPackageName + "." + modelInitializerRunnerClassName); if (generateInitializerRunnerClassName) { ObjectModelClass aClass = createClass(modelInitializerRunnerClassName, defaultPackageName); @@ -281,7 +284,7 @@ public class SimpleJavaBeanWithNoInterfaceTransformer extends AbstractJavaBeanTr if (!superClassIsBean) { // try to find a super class by tag-value - superClass = getJavaTemplatesTagValues().getSimpleBeanWithNoInterfaceSuperClassTagValue(input, aPackage, model); + superClass = simpleJavaBeanWithNoInterfaceTransformerTagValues.getSimpleBeanWithNoInterfaceSuperClassTagValue(input, aPackage, model); if (superClass != null) { // will act as if super class is a bean @@ -311,9 +314,9 @@ public class SimpleJavaBeanWithNoInterfaceTransformer extends AbstractJavaBeanTr // Get available properties List<ObjectModelAttribute> properties = getProperties(input); - boolean usePCS = !getJavaTemplatesStereoTypes().isSkipGeneratePropertyChangeSupport(input, aPackage, model); - boolean generateBooleanGetMethods = getEugeneTagValues().isGenerateBooleanGetMethods(input, aPackage, model); - boolean generateNotEmptyCollections = !getJavaTemplatesStereoTypes().isSkipGenerateNotEmptyCollections(input, aPackage, model); + boolean usePCS = !javaTemplatesStereoTypes.isSkipGeneratePropertyChangeSupport(input, aPackage, model); + boolean generateBooleanGetMethods = eugeneTagValues.isGenerateBooleanGetMethods(input, aPackage, model); + boolean generateNotEmptyCollections = !javaTemplatesStereoTypes.isSkipGenerateNotEmptyCollections(input, aPackage, model); // Add properties field + javabean methods for (ObjectModelAttribute attr : properties) { @@ -375,19 +378,19 @@ public class SimpleJavaBeanWithNoInterfaceTransformer extends AbstractJavaBeanTr }*/ ); - boolean generateContructors = !getJavaTemplatesStereoTypes().isSimpleBeanWithNoInterfaceSkipGenerateDefaultConstructors(aClass, aPackage, model) && !aClass.isAbstract(); + boolean generateContructors = !javaTemplatesStereoTypes.isSimpleBeanWithNoInterfaceSkipGenerateDefaultConstructors(aClass, aPackage, model) && !aClass.isAbstract(); if (generateContructors) { generateAbstractBeanDefaultsConstructors(output, typeName); } generateAbstractBeanDefaultsCopyMethods(output, typeName); - boolean generatePredicates = !getJavaTemplatesStereoTypes().isSimpleBeanWithNoInterfaceSkipGeneratePredicates(aClass, aPackage, model); + boolean generatePredicates = !javaTemplatesStereoTypes.isSimpleBeanWithNoInterfaceSkipGeneratePredicates(aClass, aPackage, model); if (generatePredicates) { generateAbstractBeanDefaultsPredicates(aClass, output, typeName); } - boolean generateFunctions = !getJavaTemplatesStereoTypes().isSimpleBeanWithNoInterfaceSkipGenerateFunctions(aClass, aPackage, model); + boolean generateFunctions = !javaTemplatesStereoTypes.isSimpleBeanWithNoInterfaceSkipGenerateFunctions(aClass, aPackage, model); if (generateFunctions) { generateAbstractBeanDefaultsFunctions(aClass, output, typeName); } @@ -719,7 +722,7 @@ public class SimpleJavaBeanWithNoInterfaceTransformer extends AbstractJavaBeanTr if (!superClassIsBean) { // try to find a super class by tag-value - superClassName = getJavaTemplatesTagValues().getSimpleBeanWithNoInterfaceDefaultsSuperClassTagValue(aClass, aPackage, model); + superClassName = simpleJavaBeanWithNoInterfaceTransformerTagValues.getSimpleBeanWithNoInterfaceDefaultsSuperClassTagValue(aClass, aPackage, model); } return superClassName; diff --git a/eugene-java-templates/src/main/java/org/nuiton/eugene/java/SimpleJavaBeanWithNoInterfaceTransformerTagValues.java b/eugene-java-templates/src/main/java/org/nuiton/eugene/java/SimpleJavaBeanWithNoInterfaceTransformerTagValues.java new file mode 100644 index 0000000..5a067ed --- /dev/null +++ b/eugene-java-templates/src/main/java/org/nuiton/eugene/java/SimpleJavaBeanWithNoInterfaceTransformerTagValues.java @@ -0,0 +1,421 @@ +package org.nuiton.eugene.java; + +/* + * #%L + * EUGene :: Java templates + * %% + * Copyright (C) 2012 CodeLutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + +import com.google.common.collect.ImmutableSet; +import org.apache.commons.lang3.StringUtils; +import org.nuiton.eugene.models.extension.tagvalue.TagValueMetadata; +import org.nuiton.eugene.models.extension.tagvalue.TagValueUtil; +import org.nuiton.eugene.models.extension.tagvalue.matcher.EqualsTagValueNameMatcher; +import org.nuiton.eugene.models.extension.tagvalue.provider.DefaultTagValueMetadatasProvider; +import org.nuiton.eugene.models.object.ObjectModel; +import org.nuiton.eugene.models.object.ObjectModelClassifier; +import org.nuiton.eugene.models.object.ObjectModelPackage; + +import java.util.Set; + +import static org.nuiton.i18n.I18n.n; +import static org.nuiton.i18n.I18n.t; + +/** + * Defines all tag values managed by Java templates. + * + * @author Tony Chemit - chemit@codelutin.com + * @plexus.component role="org.nuiton.eugene.models.extension.tagvalue.provider.TagValueMetadatasProvider" role-hint="simpleJavaBeanWithNoInterface" + * @since 2.5.6 + */ +public class SimpleJavaBeanWithNoInterfaceTransformerTagValues extends DefaultTagValueMetadatasProvider { + + @Override + public String getDescription() { + return t("eugene.simpleBeanWithNoInterfaceTransformer.tagvalues"); + } + + public enum Store implements TagValueMetadata { + + /** + * To generate a factory of generated simple beans. + * + * You must use it on the complete model. + * + * @see #isSimpleBeanWithNoInterfaceSkipGenerateDefaults(ObjectModelClassifier, ObjectModelPackage, ObjectModel) + * @since 3.0 + */ + simpleBeanWithNoInterfaceGenerateDefaults(n("eugene.simpleBeanWithNoInterfaceTransformer.tagvalue.simpleBeanWithNoInterfaceGenerateDefaults"), boolean.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), + + + /** + * To generate or not guava predicates on each property of the bean. + * + * You can globaly use it on the complete model or to a specific classifier. + * + * @see #isSimpleBeanWithNoInterfaceSkipGeneratePredicates(ObjectModelClassifier, ObjectModelPackage, ObjectModel) + * @since 3.0 + */ + simpleBeanWithNoInterfaceGeneratePredicates(n("eugene.simpleBeanWithNoInterfaceTransformer.tagvalue.simpleBeanWithNoInterfaceGeneratePredicates"), boolean.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), + + /** + * To generate or not guava functions on each property of the bean. + * + * You can globaly use it on the complete model or to a specific classifier. + * + * @see #isSimpleBeanWithNoInterfaceSkipGenerateFunctions(ObjectModelClassifier, ObjectModelPackage, ObjectModel) + * @since 3.0 + */ + simpleBeanWithNoInterfaceGenerateFunctions(n("eugene.simpleBeanWithNoInterfaceTransformer.tagvalue.simpleBeanWithNoInterfaceGenerateFunctions"), boolean.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), + + /** + * To generate or not constructors methods on Default classes. + * + * You can globaly use it on the complete model, package or on a specific classifier. + * + * @see #isSimpleBeanWithNoInterfaceSkipGenerateDefaultConstructors(ObjectModelClassifier, ObjectModelPackage, ObjectModel)} + * @since 3.0 + */ + simpleBeanWithNoInterfaceSkipGenerateConstructors(n("eugene.simpleBeanWithNoInterfaceTransformer.tagvalue.simpleBeanWithNoInterfaceGenerateConstructors"), boolean.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), + + /** + * Tag value to use a super class for generated bean. + * + * If the bean needs Property change support (says you use the tag-value {@link JavaTemplatesStereoTypes#STEREOTYPE_SKIP_GENERATE_PROPERTY_CHANGE_SUPPORT}, + * then your class must provide evrything for it. + * + * More over, if you use some collections in your bean you must also define + * two method named {@code getChild(Collection list, int index)} and + * {@code getChild(List list, int index)} + * + * See new code to know minimum stuff to add in your class for this purpose. + * <pre> + * public abstract class AbstractBean implements Serializable { + * + * private static final long serialVersionUID = 1L; + * + * protected final PropertyChangeSupport pcs = new PropertyChangeSupport(this); + * + * public void addPropertyChangeListener(PropertyChangeListener listener) { + * pcs.addPropertyChangeListener(listener); + * } + * + * public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener) { + * pcs.addPropertyChangeListener(propertyName, listener); + * } + * + * public void removePropertyChangeListener(PropertyChangeListener listener) { + * pcs.removePropertyChangeListener(listener); + * } + * + * public void removePropertyChangeListener(String propertyName, PropertyChangeListener listener) { + * pcs.removePropertyChangeListener(propertyName, listener); + * } + * + * protected void firePropertyChange(String propertyName, Object oldValue, Object newValue) { + * pcs.firePropertyChange(propertyName, oldValue, newValue); + * } + * + * protected void firePropertyChange(String propertyName, Object newValue) { + * firePropertyChange(propertyName, null, newValue); + * } + * + * protected <T> T getChild(Collection<T> list, int index) { + * return CollectionUtil.getOrNull(list, index); + * } + * + * protected <T> T getChild(List<T> list, int index) { + * return CollectionUtil.getOrNull(list, index); + * } + * } + * </pre> + * + * You can globaly use it on the complete model or to a specific classifier. + * + * @see #getSimpleBeanWithNoInterfaceSuperClassTagValue(ObjectModelClassifier, ObjectModelPackage, ObjectModel) + * @since 3.0 + */ + simpleBeanWithNoInterfaceSuperClass(n("eugene.simpleBeanWithNoInterfaceTransformer.tagvalue.simpleBeanWithNoInterfaceSuperClass"), String.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), + + /** + * Tag value to use a super super-class for generated defaults class of a simple bean. + * + * You can globaly use it on the complete model or to a specific classifier. + * + * @see #getSimpleBeanWithNoInterfaceDefaultsSuperClassTagValue(ObjectModelClassifier, ObjectModelPackage, ObjectModel) + * @since 3.0 + */ + simpleBeanWithNoInterfaceDefaultsSuperClass(n("eugene.simpleBeanWithNoInterfaceTransformer.tagvalue.simpleBeanWithNoInterfaceDefaultsSuperClass"), String.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), + + /** + * To add a prefix on the name of each generated bean class. + * + * You can globaly use it on the complete model or to a specific classifier. + * + * @see #getSimpleBeanWithNoInterfaceClassNamePrefixTagValue(ObjectModelClassifier, ObjectModelPackage, ObjectModel) + * @since 3.0 + */ + simpleBeanWithNoInterfaceClassNamePrefix(n("eugene.simpleBeanWithNoInterfaceTransformer.tagvalue.simpleBeanWithNoInterfaceClassNamePrefix"), String.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), + + /** + * To add a prefix on the name of each generated bean class. + * + * You can globaly use it on the complete model or to a specific classifier. + * + * @see #getSimpleBeanWithNoInterfaceClassNameSuffixTagValue(ObjectModelClassifier, ObjectModelPackage, ObjectModel) + * @since 3.0 + */ + simpleBeanWithNoInterfaceClassNameSuffix(n("eugene.simpleBeanWithNoInterfaceTransformer.tagvalue.simpleBeanWithNoInterfaceClassNameSuffix"), String.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), + + /** + * To add a prefix on the name of each generated bean class. + * + * You can globaly use it on the complete model or to a specific classifier. + * + * @see #getSimpleBeanWithNoInterfaceDefaultsClassNamePrefixTagValue(ObjectModelClassifier, ObjectModelPackage, ObjectModel) + * @since 3.0 + */ + simpleBeanWithNoInterfaceDefaultsClassNamePrefix(n("eugene.simpleBeanWithNoInterfaceTransformer.tagvalue.simpleBeanWithNoInterfaceDefaultsClassNamePrefix"), String.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class), + + /** + * To add a suffix on the name of each generated bean class. + * + * You can globaly use it on the complete model or to a specific classifier. + * + * @see #getSimpleBeanWithNoInterfaceDefaultsClassNameSuffixTagValue(ObjectModelClassifier, ObjectModelPackage, ObjectModel) + * @since 3.0 + */ + simpleBeanWithNoInterfaceDefaultsClassNameSuffix(n("eugene.simpleBeanWithNoInterfaceTransformer.tagvalue.simpleBeanWithNoInterfaceDefaultsClassNameSuffix"), String.class, null, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class); + + private final Set<Class<?>> targets; + private final Class<?> type; + private final String i18nDescriptionKey; + private final String defaultValue; + + Store(String i18nDescriptionKey, Class<?> type, String defaultValue, Class<?>... targets) { + this.targets = ImmutableSet.copyOf(targets); + this.type = type; + this.i18nDescriptionKey = i18nDescriptionKey; + this.defaultValue = defaultValue; + } + + @Override + public String getName() { + return name(); + } + + @Override + public Set<Class<?>> getTargets() { + return targets; + } + + @Override + public Class<?> getType() { + return type; + } + + @Override + public Class<EqualsTagValueNameMatcher> getMatcherClass() { + return EqualsTagValueNameMatcher.class; + } + + @Override + public String getDescription() { + return t(i18nDescriptionKey); + } + + @Override + public String getDefaultValue() { + return defaultValue; + } + + @Override + public boolean isDeprecated() { + return false; + } + + } + + public SimpleJavaBeanWithNoInterfaceTransformerTagValues() { + super((TagValueMetadata[]) Store.values()); + } + + /** + * Obtain the value of the {@link Store#simpleBeanWithNoInterfaceSuperClass} tag value on the given model or classifier. + * + * It will first look on the model, and then in the given classifier. + * + * @param classifier classifier to seek + * @param model model to seek + * @return the none empty value of the found tag value or {@code null} if not found nor empty. + * @see Store#simpleBeanWithNoInterfaceSuperClass + * @since 3.0 + */ + public String getSimpleBeanWithNoInterfaceSuperClassTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { + return TagValueUtil.findTagValue(Store.simpleBeanWithNoInterfaceSuperClass, classifier, aPackage, model); + } + + /** + * Obtain the value of the {@link Store#simpleBeanWithNoInterfaceDefaultsSuperClass} tag value on the given model or classifier. + * + * It will first look on the model, and then in the given classifier. + * + * @param classifier classifier to seek + * @param model model to seek + * @return the none empty value of the found tag value or {@code null} if not found nor empty. + * @see Store#simpleBeanWithNoInterfaceDefaultsSuperClass + * @since 3.0 + */ + public String getSimpleBeanWithNoInterfaceDefaultsSuperClassTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { + return TagValueUtil.findTagValue(Store.simpleBeanWithNoInterfaceDefaultsSuperClass, classifier, aPackage, model); + } + + /** + * Obtain the value of the {@link Store#simpleBeanWithNoInterfaceClassNamePrefix} tag value on the given model or classifier. + * + * It will first look on the model, and then in the given classifier. + * + * @param classifier classifier to seek + * @param model model to seek + * @return the none empty value of the found tag value or {@code null} if not found nor empty. + * @see Store#simpleBeanWithNoInterfaceClassNamePrefix + * @since 3.0 + */ + public String getSimpleBeanWithNoInterfaceClassNamePrefixTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { + return TagValueUtil.findTagValue(Store.simpleBeanWithNoInterfaceClassNamePrefix, classifier, aPackage, model); + } + + /** + * Obtain the value of the {@link Store#simpleBeanWithNoInterfaceClassNameSuffix} tag value on the given model or classifier. + * + * It will first look on the model, and then in the given classifier. + * + * @param classifier classifier to seek + * @param model model to seek + * @return the none empty value of the found tag value or {@code null} if not found nor empty. + * @see Store#simpleBeanWithNoInterfaceClassNameSuffix + * @since 3.0 + */ + public String getSimpleBeanWithNoInterfaceClassNameSuffixTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { + return TagValueUtil.findTagValue(Store.simpleBeanWithNoInterfaceClassNameSuffix, classifier, aPackage, model); + } + + /** + * Obtain the value of the {@link Store#simpleBeanWithNoInterfaceDefaultsClassNamePrefix} tag value on the given model or classifier. + * + * It will first look on the model, and then in the given classifier. + * + * @param classifier classifier to seek + * @param model model to seek + * @return the none empty value of the found tag value or {@code null} if not found nor empty. + * @see Store#simpleBeanWithNoInterfaceDefaultsClassNamePrefix + * @since 3.0 + */ + public String getSimpleBeanWithNoInterfaceDefaultsClassNamePrefixTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { + return TagValueUtil.findTagValue(Store.simpleBeanWithNoInterfaceDefaultsClassNamePrefix, classifier, aPackage, model); + } + + /** + * Obtain the value of the {@link Store#simpleBeanWithNoInterfaceDefaultsClassNameSuffix} tag value on the given model or classifier. + * + * It will first look on the model, and then in the given classifier. + * + * <strong>If not filled, then use default {@code s} value.</strong> + * + * @param classifier classifier to seek + * @param model model to seek + * @return the none empty value of the found tag value or {@code null} if not found nor empty. + * @see Store#simpleBeanWithNoInterfaceDefaultsClassNameSuffix + * @since 3.0 + */ + public String getSimpleBeanWithNoInterfaceDefaultsClassNameSuffixTagValue(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { + String value = TagValueUtil.findTagValue(Store.simpleBeanWithNoInterfaceDefaultsClassNameSuffix, classifier, aPackage, model); + if (StringUtils.isBlank(value)) { + value = "s"; + } + return value; + } + + /** + * Obtain the value of the {@link Store#simpleBeanWithNoInterfaceGenerateDefaults} tag value on the given model or classifier. + * + * It will first look on the model, and then in the given classifier. + * + * @param classifier classifier to seek + * @param model model to seek + * @return the none empty value of the found tag value or {@code null} if not found nor empty. + * @see Store#simpleBeanWithNoInterfaceGenerateDefaults + * @since 3.0 + */ + public boolean isSimpleBeanWithNoInterfaceSkipGenerateDefaults(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { + return TagValueUtil.findBooleanTagValue(Store.simpleBeanWithNoInterfaceGenerateDefaults, classifier, aPackage, model); + } + + /** + * Obtain the value of the {@link Store#simpleBeanWithNoInterfaceGeneratePredicates} tag value on the given model or classifier. + * + * It will first look on the model, and then in the given classifier. + * + * <strong>If not filled, then use default {@code s} value.</strong> + * + * @param classifier classifier to seek + * @param model model to seek + * @return the none empty value of the found tag value or {@code null} if not found nor empty. + * @see Store#simpleBeanWithNoInterfaceGeneratePredicates + * @since 3.0 + */ + public boolean isSimpleBeanWithNoInterfaceSkipGeneratePredicates(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { + return TagValueUtil.findBooleanTagValue(Store.simpleBeanWithNoInterfaceGeneratePredicates, classifier, aPackage, model); + } + + /** + * Obtain the value of the {@link Store#simpleBeanWithNoInterfaceGenerateFunctions} tag value on the given model or classifier. + * + * It will first look on the model, and then in the given classifier. + * + * <strong>If not filled, then use default {@code s} value.</strong> + * + * @param classifier classifier to seek + * @param model model to seek + * @return the none empty value of the found tag value or {@code null} if not found nor empty. + * @see Store#simpleBeanWithNoInterfaceGenerateFunctions + * @since 3.0 + */ + public boolean isSimpleBeanWithNoInterfaceSkipGenerateFunctions(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { + return TagValueUtil.findBooleanTagValue(Store.simpleBeanWithNoInterfaceGenerateFunctions, classifier, aPackage, model); + } + + /** + * Obtain the value of the {@link Store#simpleBeanWithNoInterfaceSkipGenerateConstructors} tag value on the given model or classifier. + * + * It will first look on the model, and then in the given classifier. + * + * <strong>If not filled, then use default {@code s} value.</strong> + * + * @param classifier classifier to seek + * @param model model to seek + * @return the none empty value of the found tag value or {@code null} if not found nor empty. + * @see Store#simpleBeanWithNoInterfaceSkipGenerateConstructors + * @since 3.0 + */ + public boolean isSimpleBeanWithNoInterfaceSkipGenerateDefaultConstructors(ObjectModelClassifier classifier, ObjectModelPackage aPackage, ObjectModel model) { + return TagValueUtil.findBooleanTagValue(Store.simpleBeanWithNoInterfaceSkipGenerateConstructors, classifier, aPackage, model); + } + +} diff --git a/eugene-java-templates/src/main/resources/i18n/eugene-java-templates_en_GB.properties b/eugene-java-templates/src/main/resources/i18n/eugene-java-templates_en_GB.properties new file mode 100644 index 0000000..485a515 --- /dev/null +++ b/eugene-java-templates/src/main/resources/i18n/eugene-java-templates_en_GB.properties @@ -0,0 +1,45 @@ +eugene.java.stereotype.acceptBeanWithMethods=Accept methods on bean? +eugene.java.stereotype.bean=Is a bean? +eugene.java.stereotype.generateNotEmptyCollections=Generate none empty collections? +eugene.java.stereotype.generatePropertyChangeSupport=Generate PropertychangeSupport? +eugene.java.stereotype.overrideAbstractClasses=Overrides abstract classes? +eugene.java.stereotype.simpleBeanGenerateDefaults=Generate DefaultsBean? +eugene.java.stereotype.simpleBeanGenerateFactory=Generate BeanFactories? +eugene.java.stereotype.simpleBeanGenerateInterface=Generate interface on bean? +eugene.java.stereotype.simpleBeanWithNoInterfaceGenerateDefaults=Generate DefaultsBean? +eugene.java.stereotype.simpleBeanWithNoInterfaceGenerateFunctions=Generate Functions? +eugene.java.stereotype.simpleBeanWithNoInterfaceGeneratePredicates=Generate predicates? +eugene.java.stereotype.simpleBeanWithNoInterfaceSkipGenerateConstructors=No generate constructors' bean? +eugene.java.stereotypes=EUGeNe Java stereotypes +eugene.java.tagvalue.acceptBeanWithMethods=Accept methods on bean? +eugene.java.tagvalue.generateNotEmptyCollections=Generate none empty collections? +eugene.java.tagvalue.generatePropertyChangeSupport=Generate PropertychangeSupport? +eugene.java.tagvalue.java8=Java 8 support +eugene.java.tagvalue.overrideAbstractClasses=Overrides abstract classes? +eugene.java.tagvalues=EUGeNe Java tag values +eugene.javaBeanTransformer.tagvalue.beanSuperClass=Bean super class +eugene.javaBeanTransformer.tagvalues=EUGeNe JavaBean transformer tag values +eugene.simpleBeanTransformer.tagvalue.simpleBeanClassNamePrefix=Prefix to apply on bean class name +eugene.simpleBeanTransformer.tagvalue.simpleBeanClassNameSuffix=Suffix to apply on bean class name +eugene.simpleBeanTransformer.tagvalue.simpleBeanDefaultsClassNamePrefix=Prefix to apply on DefaultsBean class name +eugene.simpleBeanTransformer.tagvalue.simpleBeanDefaultsClassNameSuffix=Suffix to apply on DefaultsBean class name +eugene.simpleBeanTransformer.tagvalue.simpleBeanDefaultsSuperClass=DefaultsBean super class +eugene.simpleBeanTransformer.tagvalue.simpleBeanGenerateDefaults=Generate DefaultsBean? +eugene.simpleBeanTransformer.tagvalue.simpleBeanGenerateFactory=Generate BeanFactories? +eugene.simpleBeanTransformer.tagvalue.simpleBeanGenerateInterface=Generate interface on bean? +eugene.simpleBeanTransformer.tagvalue.simpleBeanInterfaceNamePrefix=Prefix to apply on bean's interface class name +eugene.simpleBeanTransformer.tagvalue.simpleBeanInterfaceNameSuffix=Suffix to apply on bean's interface class name +eugene.simpleBeanTransformer.tagvalue.simpleBeanInterfaceSuperClass=Bean's interface super class +eugene.simpleBeanTransformer.tagvalue.simpleBeanSuperClass=Bean super class +eugene.simpleBeanTransformer.tagvalues=EUGeNe Simple Bean transformer tag values +eugene.simpleBeanWithNoInterfaceTransformer.tagvalue.simpleBeanWithNoInterfaceClassNamePrefix=Prefix to apply on bean class name +eugene.simpleBeanWithNoInterfaceTransformer.tagvalue.simpleBeanWithNoInterfaceClassNameSuffix=Suffix to apply on bean class name +eugene.simpleBeanWithNoInterfaceTransformer.tagvalue.simpleBeanWithNoInterfaceDefaultsClassNamePrefix=Prefix to apply on DefaultsBean class name +eugene.simpleBeanWithNoInterfaceTransformer.tagvalue.simpleBeanWithNoInterfaceDefaultsClassNameSuffix=Suffix to apply on DefaultsBean class name +eugene.simpleBeanWithNoInterfaceTransformer.tagvalue.simpleBeanWithNoInterfaceDefaultsSuperClass=DefaultsBean super class +eugene.simpleBeanWithNoInterfaceTransformer.tagvalue.simpleBeanWithNoInterfaceGenerateConstructors=No generate constructors' bean? +eugene.simpleBeanWithNoInterfaceTransformer.tagvalue.simpleBeanWithNoInterfaceGenerateDefaults=Generate DefaultsBean? +eugene.simpleBeanWithNoInterfaceTransformer.tagvalue.simpleBeanWithNoInterfaceGenerateFunctions=Generate Functions? +eugene.simpleBeanWithNoInterfaceTransformer.tagvalue.simpleBeanWithNoInterfaceGeneratePredicates=Generate predicates? +eugene.simpleBeanWithNoInterfaceTransformer.tagvalue.simpleBeanWithNoInterfaceSuperClass=Bean super class +eugene.simpleBeanWithNoInterfaceTransformer.tagvalues=EUGeNe Simple Bean With No Interface transformer tag values diff --git a/eugene-java-templates/src/main/resources/i18n/eugene-java-templates_fr_FR.properties b/eugene-java-templates/src/main/resources/i18n/eugene-java-templates_fr_FR.properties new file mode 100644 index 0000000..08a7698 --- /dev/null +++ b/eugene-java-templates/src/main/resources/i18n/eugene-java-templates_fr_FR.properties @@ -0,0 +1,45 @@ +eugene.java.stereotype.acceptBeanWithMethods=Accepter les beans avec des méthodes ? +eugene.java.stereotype.bean=Is a bean ? +eugene.java.stereotype.generateNotEmptyCollections=Générer des collections non vides ? +eugene.java.stereotype.generatePropertyChangeSupport=Générer le support PropertyChangeSupport ? +eugene.java.stereotype.overrideAbstractClasses=Surcharger les classes abstraites de bean ? +eugene.java.stereotype.simpleBeanGenerateDefaults=Générer les DefaultsBean ? +eugene.java.stereotype.simpleBeanGenerateFactory=Générer les BeanFactory ? +eugene.java.stereotype.simpleBeanGenerateInterface=Générer les interfaces de bean ? +eugene.java.stereotype.simpleBeanWithNoInterfaceGenerateDefaults=Générer les DefaultsBean ? +eugene.java.stereotype.simpleBeanWithNoInterfaceGenerateFunctions=Générer les Functions ? +eugene.java.stereotype.simpleBeanWithNoInterfaceGeneratePredicates=Générer les Predicats ? +eugene.java.stereotype.simpleBeanWithNoInterfaceSkipGenerateConstructors=Ne pas générer les constructeurs sur bean ? +eugene.java.stereotypes=EUGeNe Java stéréotypes +eugene.java.tagvalue.acceptBeanWithMethods=Accepter les beans avec des méthodes ? +eugene.java.tagvalue.generateNotEmptyCollections=Générer des collections non vides ? +eugene.java.tagvalue.generatePropertyChangeSupport=Générer le support PropertyChangeSupport ? +eugene.java.tagvalue.java8=Utiliser java 8 ? +eugene.java.tagvalue.overrideAbstractClasses=Surcharger les classes abstraites de bean ? +eugene.java.tagvalues=EUGeNe Java tag values +eugene.javaBeanTransformer.tagvalue.beanSuperClass=Super classe du bean +eugene.javaBeanTransformer.tagvalues=EUGeNe JavaBean transformer tag values +eugene.simpleBeanTransformer.tagvalue.simpleBeanClassNamePrefix=Préfixe à appliquer sur le nom du bean +eugene.simpleBeanTransformer.tagvalue.simpleBeanClassNameSuffix=Suffixe à appliquer sur le nom du bean +eugene.simpleBeanTransformer.tagvalue.simpleBeanDefaultsClassNamePrefix=Préfixe à appliquer sur le nom de DefaultsBean +eugene.simpleBeanTransformer.tagvalue.simpleBeanDefaultsClassNameSuffix=Suffixe à appliquer sur le nom de Defaultsbean +eugene.simpleBeanTransformer.tagvalue.simpleBeanDefaultsSuperClass=Super classe de DefaultsBean +eugene.simpleBeanTransformer.tagvalue.simpleBeanGenerateDefaults=Générer les DefaultsBean ? +eugene.simpleBeanTransformer.tagvalue.simpleBeanGenerateFactory=Générer les BeanFactory ? +eugene.simpleBeanTransformer.tagvalue.simpleBeanGenerateInterface=Générer les interfaces de bean ? +eugene.simpleBeanTransformer.tagvalue.simpleBeanInterfaceNamePrefix=Préfixe à appliquer sur le nom de l'interface du bean +eugene.simpleBeanTransformer.tagvalue.simpleBeanInterfaceNameSuffix=Suffixe à appliquer sur le nom de l'interface du bean +eugene.simpleBeanTransformer.tagvalue.simpleBeanInterfaceSuperClass=Super classes de l'interface du bean +eugene.simpleBeanTransformer.tagvalue.simpleBeanSuperClass=Super classe du bean +eugene.simpleBeanTransformer.tagvalues=EUGeNe Simple Bean transformer tag values +eugene.simpleBeanWithNoInterfaceTransformer.tagvalue.simpleBeanWithNoInterfaceClassNamePrefix=Préfixe à appliquer sur le nom du bean +eugene.simpleBeanWithNoInterfaceTransformer.tagvalue.simpleBeanWithNoInterfaceClassNameSuffix=Suffixe à appliquer sur le nom du bean +eugene.simpleBeanWithNoInterfaceTransformer.tagvalue.simpleBeanWithNoInterfaceDefaultsClassNamePrefix=Préfixe à appliquer sur le nom de DefaultsBean +eugene.simpleBeanWithNoInterfaceTransformer.tagvalue.simpleBeanWithNoInterfaceDefaultsClassNameSuffix=Suffixe à appliquer sur le nom de Defaultsbean +eugene.simpleBeanWithNoInterfaceTransformer.tagvalue.simpleBeanWithNoInterfaceDefaultsSuperClass=Super classe de DefaultsBean +eugene.simpleBeanWithNoInterfaceTransformer.tagvalue.simpleBeanWithNoInterfaceGenerateConstructors=Ne pas générer les constructeurs sur bean ? +eugene.simpleBeanWithNoInterfaceTransformer.tagvalue.simpleBeanWithNoInterfaceGenerateDefaults=Générer les DefaultsBean ? +eugene.simpleBeanWithNoInterfaceTransformer.tagvalue.simpleBeanWithNoInterfaceGenerateFunctions=Générer les Functions ? +eugene.simpleBeanWithNoInterfaceTransformer.tagvalue.simpleBeanWithNoInterfaceGeneratePredicates=Générer les Predicats ? +eugene.simpleBeanWithNoInterfaceTransformer.tagvalue.simpleBeanWithNoInterfaceSuperClass=Super classes de l'interface du bean +eugene.simpleBeanWithNoInterfaceTransformer.tagvalues=EUGeNe Simple Bean With No Interface transformer tag values diff --git a/eugene-java-templates/src/test/java/org/nuiton/eugene/java/EugeneJavaTagValuesTest.java b/eugene-java-templates/src/test/java/org/nuiton/eugene/java/EugeneJavaTagValuesTest.java index 6dd1643..3613c9b 100644 --- a/eugene-java-templates/src/test/java/org/nuiton/eugene/java/EugeneJavaTagValuesTest.java +++ b/eugene-java-templates/src/test/java/org/nuiton/eugene/java/EugeneJavaTagValuesTest.java @@ -47,11 +47,11 @@ public class EugeneJavaTagValuesTest { @Test public void validate() throws Exception { - validate(EugeneJavaTagValues.Store.beanSuperClass.getName(), true, ObjectModel.class, ObjectModelPackage.class, ObjectModelClassifier.class, ObjectModelClass.class, ObjectModelEnumeration.class); - validate(EugeneJavaTagValues.Store.beanSuperClass.getName(), false, ObjectModelOperation.class, ObjectModelAttribute.class); + validate(EugeneJavaTagValues.Store.java8.getName(), true, ObjectModel.class); + validate(EugeneJavaTagValues.Store.java8.getName(), false, ObjectModelOperation.class, ObjectModelAttribute.class, ObjectModelPackage.class, ObjectModelClassifier.class, ObjectModelClass.class, ObjectModelEnumeration.class); long l = System.nanoTime(); - validate(EugeneJavaTagValues.Store.beanSuperClass.getName() + l, false, ObjectModelPackage.class, ObjectModelOperation.class, ObjectModelAttribute.class); + validate(EugeneJavaTagValues.Store.java8.getName() + l, false, ObjectModel.class, ObjectModelOperation.class, ObjectModelAttribute.class); } diff --git a/eugene/pom.xml b/eugene/pom.xml index 5e0498f..9c67f7d 100644 --- a/eugene/pom.xml +++ b/eugene/pom.xml @@ -178,6 +178,20 @@ </execution> </executions> </plugin> + + <plugin> + <groupId>org.nuiton.i18n</groupId> + <artifactId>i18n-maven-plugin</artifactId> + <executions> + <execution> + <goals> + <goal>parserJava</goal> + <goal>gen</goal> + </goals> + </execution> + </executions> + </plugin> + </plugins> </build> diff --git a/eugene/src/main/java/org/nuiton/eugene/EugeneCoreStereotypes.java b/eugene/src/main/java/org/nuiton/eugene/EugeneCoreStereotypes.java index b864d7d..92cb6ec 100644 --- a/eugene/src/main/java/org/nuiton/eugene/EugeneCoreStereotypes.java +++ b/eugene/src/main/java/org/nuiton/eugene/EugeneCoreStereotypes.java @@ -1,5 +1,27 @@ package org.nuiton.eugene; +/*- + * #%L + * EUGene :: EUGene + * %% + * Copyright (C) 2004 - 2016 CodeLutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + import com.google.common.collect.ImmutableSet; import org.nuiton.eugene.models.extension.stereotype.StereotypeMetadata; import org.nuiton.eugene.models.extension.stereotype.StereotypeUtil; @@ -11,6 +33,7 @@ import org.nuiton.eugene.models.object.ObjectModelPackage; import java.util.Set; import static org.nuiton.i18n.I18n.n; +import static org.nuiton.i18n.I18n.t; /** * Defines all stereotypes managed by Eugene. @@ -26,6 +49,11 @@ import static org.nuiton.i18n.I18n.n; */ public class EugeneCoreStereotypes extends DefaultStereotypeMetadatasProvider { + @Override + public String getDescription() { + return t("eugene.core.stereotypes"); + } + public enum Store implements StereotypeMetadata { /** * Stereotype to mark an attribute with multiplicity as ordered. @@ -45,16 +73,16 @@ public class EugeneCoreStereotypes extends DefaultStereotypeMetadatasProvider { */ unique(n("eugene.core.stereotypes.unique"), ObjectModelAttribute.class), /** - * Stereotype to skip generation for some transformer. + * Stereotype to skip generation for some templates. */ skip(n("eugene.core.stereotypes.skip"), ObjectModelClassifier.class, ObjectModelPackage.class); private final Set<Class<?>> targets; - private final String i18nDocumentationKey; + private final String i18nDescriptionKey; - Store(String i18nDocumentationKey, Class<?>... targets) { + Store(String i18nDescriptionKey, Class<?>... targets) { this.targets = ImmutableSet.copyOf(targets); - this.i18nDocumentationKey = i18nDocumentationKey; + this.i18nDescriptionKey = i18nDescriptionKey; } @Override @@ -68,8 +96,8 @@ public class EugeneCoreStereotypes extends DefaultStereotypeMetadatasProvider { } @Override - public String getI18nDocumentationKey() { - return i18nDocumentationKey; + public String getDescription() { + return t(i18nDescriptionKey); } @Override diff --git a/eugene/src/main/java/org/nuiton/eugene/EugeneCoreTagValues.java b/eugene/src/main/java/org/nuiton/eugene/EugeneCoreTagValues.java index 9145702..8922adf 100644 --- a/eugene/src/main/java/org/nuiton/eugene/EugeneCoreTagValues.java +++ b/eugene/src/main/java/org/nuiton/eugene/EugeneCoreTagValues.java @@ -1,5 +1,27 @@ package org.nuiton.eugene; +/*- + * #%L + * EUGene :: EUGene + * %% + * Copyright (C) 2004 - 2016 CodeLutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + import com.google.common.collect.ImmutableSet; import org.nuiton.eugene.models.extension.tagvalue.TagValueMetadata; import org.nuiton.eugene.models.extension.tagvalue.TagValueUtil; @@ -14,6 +36,7 @@ import org.nuiton.eugene.models.object.ObjectModelPackage; import java.util.Set; import static org.nuiton.i18n.I18n.n; +import static org.nuiton.i18n.I18n.t; /** * Created on 24/09/16. @@ -29,6 +52,11 @@ import static org.nuiton.i18n.I18n.n; */ public class EugeneCoreTagValues extends DefaultTagValueMetadatasProvider { + @Override + public String getDescription() { + return t("eugene.core.tagvalues"); + } + public enum Store implements TagValueMetadata { /** @@ -88,13 +116,13 @@ public class EugeneCoreTagValues extends DefaultTagValueMetadatasProvider { private final Set<Class<?>> targets; private final Class<?> type; - private final String i18nDocumentationKey; + private final String i18nDescriptionKey; private final String defaultValue; - Store(String i18nDocumentationKey, Class<?> type, String defaultValue, Class<?>... targets) { + Store(String i18nDescriptionKey, Class<?> type, String defaultValue, Class<?>... targets) { this.targets = ImmutableSet.copyOf(targets); this.type = type; - this.i18nDocumentationKey = i18nDocumentationKey; + this.i18nDescriptionKey = i18nDescriptionKey; this.defaultValue = defaultValue; } @@ -119,8 +147,8 @@ public class EugeneCoreTagValues extends DefaultTagValueMetadatasProvider { } @Override - public String getI18nDocumentationKey() { - return i18nDocumentationKey; + public String getDescription() { + return t(i18nDescriptionKey); } @Override diff --git a/eugene/src/main/java/org/nuiton/eugene/GeneratorUtil.java b/eugene/src/main/java/org/nuiton/eugene/GeneratorUtil.java index 0fe6f0d..0ed4416 100644 --- a/eugene/src/main/java/org/nuiton/eugene/GeneratorUtil.java +++ b/eugene/src/main/java/org/nuiton/eugene/GeneratorUtil.java @@ -25,6 +25,9 @@ package org.nuiton.eugene; import org.apache.commons.lang3.StringUtils; import org.nuiton.eugene.models.Model; +import org.nuiton.eugene.models.extension.tagvalue.TagValueMetadata; +import org.nuiton.eugene.models.extension.tagvalue.TagValueUtil; +import org.nuiton.eugene.models.extension.tagvalue.WithTagValues; import org.nuiton.eugene.models.object.ObjectModel; import org.nuiton.eugene.models.object.ObjectModelAttribute; import org.nuiton.eugene.models.object.ObjectModelClass; @@ -33,8 +36,6 @@ import org.nuiton.eugene.models.object.ObjectModelElement; import org.nuiton.eugene.models.object.ObjectModelOperation; import org.nuiton.eugene.models.object.ObjectModelParameter; import org.nuiton.eugene.models.object.SerialVersionUIDBuilder; -import org.nuiton.eugene.models.tagvalue.TagValueAble; -import org.nuiton.eugene.models.tagvalue.TagValues; import org.nuiton.util.StringUtil; import java.io.File; @@ -56,12 +57,6 @@ public class GeneratorUtil { public static final String SERIAL_VERSION_UID = "serialVersionUID"; /** - * Static singleton instance used to read defaultValue - * TODO-tchemit 2014-06-19 Remove this when remove deprecated methods using it - */ - protected final static EugeneCoreTagValues EUGENE_CORE_TAG_VALUES = new EugeneCoreTagValues(); - - /** * return parent package of given package (return given package if it is a root package) * eg : org.nuiton.eugene.models -> org.nuiton.eugene * eg : org -> org @@ -510,7 +505,7 @@ public class GeneratorUtil { * @param element l'élément à tester * @param model le modele utilisé * @return la valeur du tagValue ou null - * @deprecated since 2.9 (will be remove in version 3.0), prefer use now {@link TagValues#findTagValue(String, TagValueAble...)} + * @deprecated since 2.9 (will be remove in version 3.0), prefer use now {@link TagValueUtil#findTagValue(TagValueMetadata, WithTagValues...)} */ @Deprecated public static String findTagValue(String tagName, diff --git a/eugene/src/main/java/org/nuiton/eugene/ModelReader.java b/eugene/src/main/java/org/nuiton/eugene/ModelReader.java index 827f9ae..8332479 100644 --- a/eugene/src/main/java/org/nuiton/eugene/ModelReader.java +++ b/eugene/src/main/java/org/nuiton/eugene/ModelReader.java @@ -111,31 +111,4 @@ public abstract class ModelReader<M extends Model> { */ public abstract M read(File... file) throws IOException; - public TagValueMetadatasProvider getTagValueMetadatasProvider() { - return tagValueMetadatasProvider; - } - - /** - * Sets the provider of available tag values. - * - * @param tagValueMetadatasProvider the provider to use - * @since 2.9 - */ - public void setTagValueMetadatasProvider(TagValueMetadatasProvider tagValueMetadatasProvider) { - this.tagValueMetadatasProvider = tagValueMetadatasProvider; - } - - public StereotypeMetadatasProvider getStereotypeMetadatasProvider() { - return stereotypeMetadatasProvider; - } - - /** - * Sets the provider of available stereotypes. - * - * @param stereotypeMetadatasProvider the provider to use - * @since 2.9 - */ - public void setStereotypeMetadatasProvider(StereotypeMetadatasProvider stereotypeMetadatasProvider) { - this.stereotypeMetadatasProvider = stereotypeMetadatasProvider; - } } diff --git a/eugene/src/main/java/org/nuiton/eugene/java/ObjectModelTransformerToJava.java b/eugene/src/main/java/org/nuiton/eugene/java/ObjectModelTransformerToJava.java index ab57b7d..baa3750 100644 --- a/eugene/src/main/java/org/nuiton/eugene/java/ObjectModelTransformerToJava.java +++ b/eugene/src/main/java/org/nuiton/eugene/java/ObjectModelTransformerToJava.java @@ -30,10 +30,6 @@ import org.nuiton.eugene.GeneratorUtil; import org.nuiton.eugene.Template; import org.nuiton.eugene.java.extension.ImportsManager; import org.nuiton.eugene.java.extension.ObjectModelAnnotation; -import org.nuiton.eugene.models.extension.stereotype.StereotypeMetadatasProviderManagerExtension; -import org.nuiton.eugene.models.extension.stereotype.provider.StereotypeMetadatasProvider; -import org.nuiton.eugene.models.extension.tagvalue.TagValueMetadatasProviderManagerExtension; -import org.nuiton.eugene.models.extension.tagvalue.provider.TagValueMetadatasProvider; import org.nuiton.eugene.models.object.ObjectModel; import org.nuiton.eugene.models.object.ObjectModelAttribute; import org.nuiton.eugene.models.object.ObjectModelClass; @@ -68,8 +64,7 @@ import java.util.Set; */ public abstract class ObjectModelTransformerToJava extends ObjectModelTransformer<ObjectModel> { - private static final Log log = - LogFactory.getLog(ObjectModelTransformerToJava.class); + private static final Log log = LogFactory.getLog(ObjectModelTransformerToJava.class); /** * internal builder @@ -78,13 +73,10 @@ public abstract class ObjectModelTransformerToJava extends ObjectModelTransforme private String constantPrefix; - private EugeneCoreTagValues eugeneTagValues; + protected final EugeneCoreTagValues eugeneTagValues; - public EugeneCoreTagValues getEugeneTagValues() { - if (eugeneTagValues == null) { - eugeneTagValues = getTagValueMetadatasProvider(EugeneCoreTagValues.class); - } - return eugeneTagValues; + public ObjectModelTransformerToJava() { + eugeneTagValues = new EugeneCoreTagValues(); } @Override @@ -242,7 +234,7 @@ public abstract class ObjectModelTransformerToJava extends ObjectModelTransforme protected String getConstantPrefix(ObjectModelClassifier input) { // look if there is a constant_prefix tag value - String prefix = getEugeneTagValues().getConstantPrefixTagValue( + String prefix = eugeneTagValues.getConstantPrefixTagValue( input, input == null ? null : getPackage(input), getModel()); @@ -1017,18 +1009,4 @@ public abstract class ObjectModelTransformerToJava extends ObjectModelTransforme return isInClassPath(packageName + "." + className); } - protected <T extends TagValueMetadatasProvider> T getTagValueMetadatasProvider(Class<T> providerType) { - - TagValueMetadatasProviderManagerExtension extension = model.getExtension( - TagValueMetadatasProviderManagerExtension.OBJECTMODEL_EXTENSION, TagValueMetadatasProviderManagerExtension.class); - return extension.getProvider(providerType); - } - - protected <T extends StereotypeMetadatasProvider> T getStereotypeMetadatasProvider(Class<T> providerType) { - - StereotypeMetadatasProviderManagerExtension extension = model.getExtension( - StereotypeMetadatasProviderManagerExtension.OBJECTMODEL_EXTENSION, StereotypeMetadatasProviderManagerExtension.class); - return extension.getProvider(providerType); - } - } diff --git a/eugene/src/main/java/org/nuiton/eugene/models/extension/stereotype/StereotypeMetadata.java b/eugene/src/main/java/org/nuiton/eugene/models/extension/stereotype/StereotypeMetadata.java index cc15931..42d81de 100644 --- a/eugene/src/main/java/org/nuiton/eugene/models/extension/stereotype/StereotypeMetadata.java +++ b/eugene/src/main/java/org/nuiton/eugene/models/extension/stereotype/StereotypeMetadata.java @@ -1,5 +1,27 @@ package org.nuiton.eugene.models.extension.stereotype; +/*- + * #%L + * EUGene :: EUGene + * %% + * Copyright (C) 2004 - 2016 CodeLutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + import java.util.Set; /** @@ -30,7 +52,7 @@ public interface StereotypeMetadata { * * @return the i18n documentation key */ - String getI18nDocumentationKey(); + String getDescription(); /** * @return {@code true} if this stereotype is deprecated diff --git a/eugene/src/main/java/org/nuiton/eugene/models/extension/stereotype/StereotypeMetadatasProviderManagerExtension.java b/eugene/src/main/java/org/nuiton/eugene/models/extension/stereotype/StereotypeMetadatasProviderManagerExtension.java deleted file mode 100644 index 314cc4b..0000000 --- a/eugene/src/main/java/org/nuiton/eugene/models/extension/stereotype/StereotypeMetadatasProviderManagerExtension.java +++ /dev/null @@ -1,42 +0,0 @@ -package org.nuiton.eugene.models.extension.stereotype; - -import com.google.common.base.Preconditions; -import org.nuiton.eugene.models.extension.stereotype.provider.AggregateStereotypeMetadatasProvider; -import org.nuiton.eugene.models.extension.stereotype.provider.StereotypeMetadatasProvider; - -/** - * Created on 24/09/16. - * - * @author Tony Chemit - chemit@codelutin.com - */ -public class StereotypeMetadatasProviderManagerExtension { - - /** - * Extension static used to identify this extension in ObjectModel. - */ - public static final String OBJECTMODEL_EXTENSION = "stereotypeMetadatasProvider"; - - protected AggregateStereotypeMetadatasProvider prodiver; - - public void setProdiver(AggregateStereotypeMetadatasProvider prodiver) { - this.prodiver = prodiver; - } - - public <T extends StereotypeMetadatasProvider> T getProvider(Class<T> providerType) { - - Preconditions.checkState(prodiver != null, "No prodiver assigned"); - - StereotypeMetadatasProvider result = null; - for (StereotypeMetadatasProvider stereotypeDefinitionProvider : prodiver) { - if (providerType.equals(stereotypeDefinitionProvider.getClass())) { - result = stereotypeDefinitionProvider; - break; - } - } - - Preconditions.checkState(result != null, "No prodiver of this type: " + providerType.getName()); - return (T) result; - - } - -} \ No newline at end of file diff --git a/eugene/src/main/java/org/nuiton/eugene/models/extension/stereotype/StereotypeUtil.java b/eugene/src/main/java/org/nuiton/eugene/models/extension/stereotype/StereotypeUtil.java index f520ab7..2aac49f 100644 --- a/eugene/src/main/java/org/nuiton/eugene/models/extension/stereotype/StereotypeUtil.java +++ b/eugene/src/main/java/org/nuiton/eugene/models/extension/stereotype/StereotypeUtil.java @@ -1,5 +1,27 @@ package org.nuiton.eugene.models.extension.stereotype; +/*- + * #%L + * EUGene :: EUGene + * %% + * Copyright (C) 2004 - 2016 CodeLutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + import com.google.common.collect.ImmutableSet; import org.nuiton.eugene.models.object.ObjectModelElement; import org.nuiton.eugene.models.object.ObjectModelPackage; diff --git a/eugene/src/main/java/org/nuiton/eugene/models/extension/stereotype/provider/AggregateStereotypeMetadatasProvider.java b/eugene/src/main/java/org/nuiton/eugene/models/extension/stereotype/provider/AggregateStereotypeMetadatasProvider.java index 76e3602..aba170a 100644 --- a/eugene/src/main/java/org/nuiton/eugene/models/extension/stereotype/provider/AggregateStereotypeMetadatasProvider.java +++ b/eugene/src/main/java/org/nuiton/eugene/models/extension/stereotype/provider/AggregateStereotypeMetadatasProvider.java @@ -24,8 +24,6 @@ package org.nuiton.eugene.models.extension.stereotype.provider; import com.google.common.base.Optional; import com.google.common.collect.ImmutableSet; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; import org.nuiton.eugene.models.extension.stereotype.MismatchStereotypeTargetException; import org.nuiton.eugene.models.extension.stereotype.StereotypeMetadata; import org.nuiton.eugene.models.extension.stereotype.StereotypeNotFoundException; @@ -41,9 +39,6 @@ import java.util.ServiceLoader; */ public class AggregateStereotypeMetadatasProvider implements StereotypeMetadatasProvider, Iterable<StereotypeMetadatasProvider> { - /** Logger. */ - private static final Log log = LogFactory.getLog(AggregateStereotypeMetadatasProvider.class); - protected final Iterable<StereotypeMetadatasProvider> providers; /** @@ -76,6 +71,11 @@ public class AggregateStereotypeMetadatasProvider implements StereotypeMetadatas } @Override + public String getDescription() { + return null; + } + + @Override public ImmutableSet<StereotypeMetadata> getStereotypes() { ImmutableSet.Builder<StereotypeMetadata> builder = ImmutableSet.builder(); for (StereotypeMetadatasProvider tagValuesMetadatasProvider : providers) { diff --git a/eugene/src/main/java/org/nuiton/eugene/models/extension/stereotype/provider/DefaultStereotypeMetadatasProvider.java b/eugene/src/main/java/org/nuiton/eugene/models/extension/stereotype/provider/DefaultStereotypeMetadatasProvider.java index e483b38..0c76110 100644 --- a/eugene/src/main/java/org/nuiton/eugene/models/extension/stereotype/provider/DefaultStereotypeMetadatasProvider.java +++ b/eugene/src/main/java/org/nuiton/eugene/models/extension/stereotype/provider/DefaultStereotypeMetadatasProvider.java @@ -1,5 +1,27 @@ package org.nuiton.eugene.models.extension.stereotype.provider; +/*- + * #%L + * EUGene :: EUGene + * %% + * Copyright (C) 2004 - 2016 CodeLutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + import com.google.common.base.Optional; import com.google.common.collect.ImmutableSet; import org.nuiton.eugene.models.extension.stereotype.MismatchStereotypeTargetException; diff --git a/eugene/src/main/java/org/nuiton/eugene/models/extension/stereotype/provider/StereotypeMetadatasProvider.java b/eugene/src/main/java/org/nuiton/eugene/models/extension/stereotype/provider/StereotypeMetadatasProvider.java index 4e3fdf4..4e58017 100644 --- a/eugene/src/main/java/org/nuiton/eugene/models/extension/stereotype/provider/StereotypeMetadatasProvider.java +++ b/eugene/src/main/java/org/nuiton/eugene/models/extension/stereotype/provider/StereotypeMetadatasProvider.java @@ -1,5 +1,27 @@ package org.nuiton.eugene.models.extension.stereotype.provider; +/*- + * #%L + * EUGene :: EUGene + * %% + * Copyright (C) 2004 - 2016 CodeLutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + import com.google.common.base.Optional; import org.nuiton.eugene.models.extension.stereotype.MismatchStereotypeTargetException; import org.nuiton.eugene.models.extension.stereotype.StereotypeMetadata; @@ -14,6 +36,8 @@ import java.util.Set; */ public interface StereotypeMetadatasProvider { + String getDescription(); + Set<StereotypeMetadata> getStereotypes(); void validate(String stereotypeName, Class<?> type) throws StereotypeNotFoundException, MismatchStereotypeTargetException; diff --git a/eugene/src/main/java/org/nuiton/eugene/models/extension/tagvalue/TagValueMetadata.java b/eugene/src/main/java/org/nuiton/eugene/models/extension/tagvalue/TagValueMetadata.java index 6d0a86b..7d55c5e 100644 --- a/eugene/src/main/java/org/nuiton/eugene/models/extension/tagvalue/TagValueMetadata.java +++ b/eugene/src/main/java/org/nuiton/eugene/models/extension/tagvalue/TagValueMetadata.java @@ -1,5 +1,27 @@ package org.nuiton.eugene.models.extension.tagvalue; +/*- + * #%L + * EUGene :: EUGene + * %% + * Copyright (C) 2004 - 2016 CodeLutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + import org.nuiton.eugene.models.extension.tagvalue.matcher.TagValueDefinitionMatcher; import java.util.Set; @@ -30,7 +52,7 @@ public interface TagValueMetadata { * * @return the i18n documentation key */ - String getI18nDocumentationKey(); + String getDescription(); /** * @return default value for this tag value diff --git a/eugene/src/main/java/org/nuiton/eugene/models/extension/tagvalue/TagValueMetadatasProviderManagerExtension.java b/eugene/src/main/java/org/nuiton/eugene/models/extension/tagvalue/TagValueMetadatasProviderManagerExtension.java deleted file mode 100644 index e831420..0000000 --- a/eugene/src/main/java/org/nuiton/eugene/models/extension/tagvalue/TagValueMetadatasProviderManagerExtension.java +++ /dev/null @@ -1,42 +0,0 @@ -package org.nuiton.eugene.models.extension.tagvalue; - -import com.google.common.base.Preconditions; -import org.nuiton.eugene.models.extension.tagvalue.provider.AggregateTagValueMetadatasProvider; -import org.nuiton.eugene.models.extension.tagvalue.provider.TagValueMetadatasProvider; - -/** - * Created on 24/09/16. - * - * @author Tony Chemit - chemit@codelutin.com - */ -public class TagValueMetadatasProviderManagerExtension { - - /** - * Extension static used to identify this extension in ObjectModel. - */ - public static final String OBJECTMODEL_EXTENSION = "tagValueMetadatasProvider"; - - protected AggregateTagValueMetadatasProvider prodiver; - - public void setProdiver(AggregateTagValueMetadatasProvider prodiver) { - this.prodiver = prodiver; - } - - public <T extends TagValueMetadatasProvider> T getProvider(Class<T> providerType) { - - Preconditions.checkState(prodiver != null, "No prodiver assigned"); - - TagValueMetadatasProvider result = null; - for (TagValueMetadatasProvider stereotypeDefinitionProvider : prodiver) { - if (providerType.equals(stereotypeDefinitionProvider.getClass())) { - result = stereotypeDefinitionProvider; - break; - } - } - - Preconditions.checkState(result != null, "No prodiver of this type: " + providerType.getName()); - return (T) result; - - } - -} \ No newline at end of file diff --git a/eugene/src/main/java/org/nuiton/eugene/models/extension/tagvalue/TagValueUtil.java b/eugene/src/main/java/org/nuiton/eugene/models/extension/tagvalue/TagValueUtil.java index 9a40b42..3a5f220 100644 --- a/eugene/src/main/java/org/nuiton/eugene/models/extension/tagvalue/TagValueUtil.java +++ b/eugene/src/main/java/org/nuiton/eugene/models/extension/tagvalue/TagValueUtil.java @@ -1,5 +1,27 @@ package org.nuiton.eugene.models.extension.tagvalue; +/*- + * #%L + * EUGene :: EUGene + * %% + * Copyright (C) 2004 - 2016 CodeLutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + import org.apache.commons.lang3.StringUtils; import org.nuiton.eugene.models.object.ObjectModelElement; import org.nuiton.eugene.models.object.ObjectModelPackage; diff --git a/eugene/src/main/java/org/nuiton/eugene/models/extension/tagvalue/provider/AggregateTagValueMetadatasProvider.java b/eugene/src/main/java/org/nuiton/eugene/models/extension/tagvalue/provider/AggregateTagValueMetadatasProvider.java index 6167328..6b31ba6 100644 --- a/eugene/src/main/java/org/nuiton/eugene/models/extension/tagvalue/provider/AggregateTagValueMetadatasProvider.java +++ b/eugene/src/main/java/org/nuiton/eugene/models/extension/tagvalue/provider/AggregateTagValueMetadatasProvider.java @@ -1,10 +1,30 @@ package org.nuiton.eugene.models.extension.tagvalue.provider; +/*- + * #%L + * EUGene :: EUGene + * %% + * Copyright (C) 2004 - 2016 CodeLutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + import com.google.common.base.Optional; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableSet; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; import org.nuiton.eugene.models.extension.tagvalue.MismatchTagValueTargetException; import org.nuiton.eugene.models.extension.tagvalue.TagValueMetadata; import org.nuiton.eugene.models.extension.tagvalue.TagValueNotFoundException; @@ -20,9 +40,6 @@ import java.util.Set; */ public class AggregateTagValueMetadatasProvider implements TagValueMetadatasProvider, Iterable<TagValueMetadatasProvider> { - /** Logger. */ - private static final Log log = LogFactory.getLog(AggregateTagValueMetadatasProvider.class); - protected final Iterable<TagValueMetadatasProvider> providers; /** @@ -55,6 +72,11 @@ public class AggregateTagValueMetadatasProvider implements TagValueMetadatasProv } @Override + public String getDescription() { + return null; + } + + @Override public Set<TagValueMetadata> getTagValues() { ImmutableSet.Builder<TagValueMetadata> builder = ImmutableSet.builder(); for (TagValueMetadatasProvider tagValuesMetadatasProvider : providers) { diff --git a/eugene/src/main/java/org/nuiton/eugene/models/extension/tagvalue/provider/DefaultTagValueMetadatasProvider.java b/eugene/src/main/java/org/nuiton/eugene/models/extension/tagvalue/provider/DefaultTagValueMetadatasProvider.java index 8524dbc..2cff3ea 100644 --- a/eugene/src/main/java/org/nuiton/eugene/models/extension/tagvalue/provider/DefaultTagValueMetadatasProvider.java +++ b/eugene/src/main/java/org/nuiton/eugene/models/extension/tagvalue/provider/DefaultTagValueMetadatasProvider.java @@ -1,5 +1,27 @@ package org.nuiton.eugene.models.extension.tagvalue.provider; +/*- + * #%L + * EUGene :: EUGene + * %% + * Copyright (C) 2004 - 2016 CodeLutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + import com.google.common.base.Optional; import com.google.common.collect.ImmutableSet; import org.nuiton.eugene.models.extension.tagvalue.MismatchTagValueTargetException; @@ -17,7 +39,7 @@ import java.util.Set; * * @author Tony Chemit - chemit@codelutin.com */ -public class DefaultTagValueMetadatasProvider implements TagValueMetadatasProvider { +public abstract class DefaultTagValueMetadatasProvider implements TagValueMetadatasProvider { protected final Set<TagValueMetadata> tagValues; protected final Set<TagValueDefinitionMatcher> matcher; diff --git a/eugene/src/main/java/org/nuiton/eugene/models/extension/tagvalue/provider/TagValueMetadatasProvider.java b/eugene/src/main/java/org/nuiton/eugene/models/extension/tagvalue/provider/TagValueMetadatasProvider.java index 67ef9ec..c7f6996 100644 --- a/eugene/src/main/java/org/nuiton/eugene/models/extension/tagvalue/provider/TagValueMetadatasProvider.java +++ b/eugene/src/main/java/org/nuiton/eugene/models/extension/tagvalue/provider/TagValueMetadatasProvider.java @@ -1,5 +1,27 @@ package org.nuiton.eugene.models.extension.tagvalue.provider; +/*- + * #%L + * EUGene :: EUGene + * %% + * Copyright (C) 2004 - 2016 CodeLutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + import com.google.common.base.Optional; import org.nuiton.eugene.models.extension.tagvalue.MismatchTagValueTargetException; import org.nuiton.eugene.models.extension.tagvalue.TagValueMetadata; @@ -14,6 +36,8 @@ import java.util.Set; */ public interface TagValueMetadatasProvider { + String getDescription(); + Set<TagValueMetadata> getTagValues(); void validate(String tagValueName, Class<?> type) throws TagValueNotFoundException, MismatchTagValueTargetException; diff --git a/eugene/src/main/java/org/nuiton/eugene/models/object/reader/AbstractObjectModelReader.java b/eugene/src/main/java/org/nuiton/eugene/models/object/reader/AbstractObjectModelReader.java index 403183f..b7396a9 100644 --- a/eugene/src/main/java/org/nuiton/eugene/models/object/reader/AbstractObjectModelReader.java +++ b/eugene/src/main/java/org/nuiton/eugene/models/object/reader/AbstractObjectModelReader.java @@ -23,53 +23,24 @@ package org.nuiton.eugene.models.object.reader; */ import com.google.common.collect.Sets; -import org.apache.commons.collections.CollectionUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.nuiton.eugene.EugeneCoreTagValues; import org.nuiton.eugene.ModelHelper; import org.nuiton.eugene.ModelReader; import org.nuiton.eugene.models.extension.stereotype.InvalidStereotypeSyntaxException; -import org.nuiton.eugene.models.extension.stereotype.MismatchStereotypeTargetException; -import org.nuiton.eugene.models.extension.stereotype.StereotypeMetadata; -import org.nuiton.eugene.models.extension.stereotype.StereotypeNotFoundException; -import org.nuiton.eugene.models.extension.stereotype.StereotypeUtil; -import org.nuiton.eugene.models.extension.stereotype.provider.AggregateStereotypeMetadatasProvider; import org.nuiton.eugene.models.extension.tagvalue.InvalidTagValueSyntaxException; -import org.nuiton.eugene.models.extension.tagvalue.MismatchTagValueTargetException; -import org.nuiton.eugene.models.extension.tagvalue.TagValueMetadata; -import org.nuiton.eugene.models.extension.tagvalue.TagValueNotFoundException; -import org.nuiton.eugene.models.extension.tagvalue.TagValueUtil; -import org.nuiton.eugene.models.extension.tagvalue.provider.AggregateTagValueMetadatasProvider; import org.nuiton.eugene.models.object.ObjectModel; -import org.nuiton.eugene.models.object.ObjectModelAssociationClass; -import org.nuiton.eugene.models.object.ObjectModelAttribute; import org.nuiton.eugene.models.object.ObjectModelClass; -import org.nuiton.eugene.models.object.ObjectModelClassifier; -import org.nuiton.eugene.models.object.ObjectModelElement; -import org.nuiton.eugene.models.object.ObjectModelOperation; import org.nuiton.eugene.models.object.ObjectModelPackage; import org.nuiton.eugene.models.object.reader.extension.LoadModelExtension; -import org.nuiton.eugene.models.object.xml.ObjectModelAssociationClassImpl; -import org.nuiton.eugene.models.object.xml.ObjectModelClassifierImpl; import org.nuiton.eugene.models.object.xml.ObjectModelImpl; import org.nuiton.eugene.models.object.xml.ObjectModelPackageImpl; -import org.nuiton.eugene.models.stereotype.Stereotypes; import org.nuiton.util.FileUtil; -import org.nuiton.util.RecursiveProperties; -import org.nuiton.util.StringUtil; import java.io.File; -import java.io.FileInputStream; import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Iterator; import java.util.LinkedHashSet; -import java.util.List; -import java.util.Properties; import java.util.Set; -import java.util.regex.Matcher; /** * Abstract object model reader. @@ -81,22 +52,6 @@ public abstract class AbstractObjectModelReader extends ModelReader<ObjectModel> private static final Log log = LogFactory.getLog(AbstractObjectModelReader.class); - public static final String TAGVALUE = "tagvalue"; - - public static final String TAG_VALUE = "tagValue"; - - public static final String STEREOTYPE = "stereotype"; - - public static final String OPERATION = "operation"; - - public static final String ATTRIBUTE = "attribute"; - - public static final String CLASS = "class"; - - public static final String MODEL = "model"; - - public static final String PACKAGE = "package"; - @Override public String getModelType() { return ModelHelper.ModelType.OBJECT.getAlias(); @@ -106,19 +61,6 @@ public abstract class AbstractObjectModelReader extends ModelReader<ObjectModel> protected void beforeReadFile(File... files) { - if (tagValueMetadatasProvider == null) { - if (log.isDebugEnabled()) { - log.debug("No tag value provider filled, will instanciate a new default one"); - } - setTagValueMetadatasProvider(new AggregateTagValueMetadatasProvider(getClass().getClassLoader())); - } - if (stereotypeMetadatasProvider == null) { - if (log.isDebugEnabled()) { - log.debug("No stereotype provider filled, will instanciate a new default one"); - } - setStereotypeMetadatasProvider(new AggregateStereotypeMetadatasProvider(getClass().getClassLoader())); - } - } @Override @@ -143,11 +85,11 @@ public abstract class AbstractObjectModelReader extends ModelReader<ObjectModel> File propFile = new File(dir, name + ".properties"); if (!propFile.exists()) { if (isVerbose()) { - log.info("Pas de fichier de propriete " + propFile + " associé au model"); + log.info("Pas de fichier de propriétés " + propFile + " associé au model"); } } else { if (isVerbose()) { - log.info("Lecture du fichier de propriete " + propFile + " associé au model"); + log.info("Lecture du fichier de propriétés " + propFile + " associé au model"); } try { loadModelExtension.load(propFile); @@ -162,235 +104,13 @@ public abstract class AbstractObjectModelReader extends ModelReader<ObjectModel> if (log.isDebugEnabled()) { for (ObjectModelClass m : model.getClasses()) { - log.debug("loaded class in objectmodel : " + m.getName()); + log.debug("loaded class in model: " + m.getName()); } } return model; } /** - * Retrieve an attribute from a {@code clazz} with its {@code name}. - * This method manage the association class case to explore participants - * attributes if needed. - * - * @param clazz where the attribute need to be find - * @param name attribute name to find - * @return the attribute found or null - */ - @Deprecated - protected ObjectModelAttribute getAttribute(ObjectModelClass clazz, - String name) { - ObjectModelAttribute result = clazz.getAttribute(name); - - // Ano #619 : FD-2010-05-17 : Specific case for Association class : - // check on participant attributes - if (result == null && clazz instanceof ObjectModelAssociationClassImpl) { - if (log.isDebugEnabled()) { - log.debug("Attribute " + name + " not found from " + - clazz.getQualifiedName() + " association class. " + - "Will check participants..."); - } - ObjectModelAssociationClass assoc = (ObjectModelAssociationClass) clazz; - for (ObjectModelAttribute participant : assoc.getParticipantsAttributes()) { - if (participant.getName().equals(name)) { - result = participant; - break; - } - } - } - return result; - } - - @Deprecated - public Properties loadModelProperties(File propFile, - ObjectModel model) throws IOException { - - Properties prop = new RecursiveProperties(); - - try (FileInputStream inStream = new FileInputStream(propFile)) { - prop.load(inStream); - } - - // number of sucessfull imported tag values into model - boolean safe = true; - - int numberImportedTagValues = 0; - int numberImportedStereotypes = 0; - - // get all the tagvalues keys and sort them - List<String> keys = new ArrayList<>(); - CollectionUtils.addAll(keys, prop.keys()); - Collections.sort(keys); - - boolean strictLoading = isStrictLoading(); - // for each tag value try to import in in model - for (String key : keys) { - String value = prop.getProperty(key); - - boolean stereoTypeKey = isStereotype(key); - boolean tagValueTypeKey = isTagValue(key); - - if (log.isDebugEnabled()) { - log.debug("Property: '" + key + "' = " + value); - } - - if (key.startsWith(MODEL)) { - - // model stereotype - if (stereoTypeKey) { - - Set<String> stereotypes = Stereotypes.getStereotypes(value); - for (String stereotype : stereotypes) { - boolean loaded = loadModelStereotype(model, stereotype); - safe &= loaded; - if (loaded) { - numberImportedStereotypes++; - } - } - continue; - - } - - // model tag value - if (tagValueTypeKey) { - - boolean loaded = loadModelTagValue(model, key, value); - if (loaded) { - numberImportedTagValues++; - } - safe &= loaded; - continue; - - } - - throw new InvalidModelPropertiesException(key + " is not a valid model entry."); - - } - - if (key.startsWith(PACKAGE)) { - - // package stereotype or tag value - - if (stereoTypeKey) { - - // package stereotype - Matcher matcher; - try { - matcher = StereotypeUtil.getPackageMatcher(key); - } catch (InvalidStereotypeSyntaxException e) { - String message = "Invalid stereotype [" + key + "] : syntax is not correct."; - if (strictLoading) { - if (log.isErrorEnabled()) { - log.error(message); - } - } else { - if (log.isWarnEnabled()) { - log.warn(message); - } - } - safe = false; - continue; - } - - String fqn = matcher.group(1); - fqn = StringUtil.substring(fqn, 0, -1); // remove ended . - // target is package - String target = PACKAGE; - // target real type - Class<?> targetType = getTargetType(target); - - Set<String> stereotypes = StereotypeUtil.getStereotypes(value); - for (String stereotype : stereotypes) { - boolean loaded = loadPackageStereotype(model, key, fqn, targetType, stereotype); - safe &= loaded; - if (loaded) { - numberImportedStereotypes++; - } - } - continue; - - } - - boolean loaded = loadPackageTagValue(model, key, value); - if (loaded) { - numberImportedTagValues++; - } - safe &= loaded; - - continue; - } - - // element tag value or stereotype - - if (stereoTypeKey) { - - // stereotype property - - // check key is ok - Matcher matcher; - try { - matcher = StereotypeUtil.getMatcher(key); - } catch (InvalidStereotypeSyntaxException e) { - String message = "Invalid stereotype [" + key + "] : syntax is not correct."; - if (strictLoading) { - if (log.isErrorEnabled()) { - log.error(message); - } - } else { - if (log.isWarnEnabled()) { - log.warn(message); - } - } - safe = false; - continue; - } - - String fqn = matcher.group(1); - fqn = StringUtil.substring(fqn, 0, -1); // remove ended . - // target is class, attribute or operation - String target = matcher.group(2); - String targetName = matcher.group(3); - // target real type - Class<?> targetType = getTargetType(target); - - Set<String> stereotypes = StereotypeUtil.getStereotypes(value); - for (String stereotype : stereotypes) { - boolean loaded = loadStereotype(model, key, fqn, target, targetName, targetType, stereotype); - safe &= loaded; - if (loaded) { - numberImportedStereotypes++; - } - } - continue; - - } - - // tag value property - - boolean loaded = loadTagValue(model, key, value); - if (loaded) { - numberImportedTagValues++; - } - safe &= loaded; - } - if (isVerbose()) { - log.info(numberImportedTagValues + " tag values were succesfull imported from " + propFile); - log.info(numberImportedStereotypes + " stereotypes were succesfull imported from " + propFile); - } - if (!safe) { - - String errorMessage = "There is some tag value(s) or stereotype(s) failed to be imported from " + propFile; - if (strictLoading) { - throw new InvalidModelPropertiesException(errorMessage); - } - if (isVerbose()) { - log.info(errorMessage); - } - } - return prop; - } - - /** * Add all missing sub packages in a model. * * @param model the model to scan @@ -403,7 +123,7 @@ public abstract class AbstractObjectModelReader extends ModelReader<ObjectModel> String aPackageName = aPackage.getName(); if (verbose) { - log.info("Treate package: " + aPackageName); + log.info("Treat package: " + aPackageName); } if (subPackageNames.add(aPackageName)) { @@ -456,601 +176,4 @@ public abstract class AbstractObjectModelReader extends ModelReader<ObjectModel> } } - @Deprecated - protected boolean loadModelTagValue(ObjectModel model, String key, String value) throws InvalidModelPropertiesException { - - Matcher matcher; - try { - matcher = TagValueUtil.getModelMatcher(key); - } catch (InvalidTagValueSyntaxException e) { - String message = "Invalid model tag value [" + key + "] : only tagvalue or tagValue is allowed on model in properties"; - if (isStrictLoading()) { - if (log.isErrorEnabled()) { - log.error(message); - } - } else { - if (log.isWarnEnabled()) { - log.warn(message); - } - } - return false; - } - - String tag = matcher.group(2); - - boolean safe = false; - - try { - tagValueMetadatasProvider.validate(tag, ObjectModel.class); - safe = true; - } catch (TagValueNotFoundException e) { - String message = "Invalid model tag value [" + key + "] : the tagvalue '" + tag + "' is unknown."; - if (isStrictLoading()) { - if (log.isErrorEnabled()) { - log.error(message); - } - } else { - if (log.isWarnEnabled()) { - log.warn(message); - } - } - } catch (MismatchTagValueTargetException e) { - String message = "Invalid model tag value [" + key + "] : this tagvalue '" + tag + "' can not be apply on the model."; - if (isStrictLoading()) { - if (log.isErrorEnabled()) { - log.error(message); - } - } else { - if (log.isWarnEnabled()) { - log.warn(message); - } - } - } - - if (safe) { - - // test if tagValue is deprecated - TagValueMetadata tagValueMetadata = tagValueMetadatasProvider.getTagValue(tag).get(); - boolean deprecated = tagValueMetadata.isDeprecated(); - if (deprecated) { - if (log.isWarnEnabled()) { - log.warn("Deprecated tagValue usage [" + key + "] : " + value); - } - } - } else { - if (isStrictLoading()) { - // in strict loading do not accept unsafe tags - return false; - } - } - - ObjectModelImpl modelImpl = (ObjectModelImpl) model; - if (tag.equals(EugeneCoreTagValues.Store.version.getName())) { - - // push directly the version in the model version property - modelImpl.setVersion(value); - } - if (isVerbose()) { - log.info("model tag value imported " + key + " --> " + tag + " = " + value); - } - modelImpl.addTagValue(tag, value); - return true; - } - - @Deprecated - protected boolean loadPackageTagValue(ObjectModel model, String key, String value) throws InvalidModelPropertiesException { - - Matcher matcher; - try { - matcher = TagValueUtil.getPackageMatcher(key); - } catch (InvalidTagValueSyntaxException e) { - String message = "Invalid package tag value [" + key + "]"; - if (isStrictLoading()) { - if (log.isErrorEnabled()) { - log.error(message); - } - } else { - if (log.isWarnEnabled()) { - log.warn(message); - } - } - return false; - } - - String packageName = matcher.group(1); - packageName = StringUtil.substring(packageName, 0, -1); // remove ended . - String tag = matcher.group(3); - - boolean safe = false; - - try { - tagValueMetadatasProvider.validate(tag, ObjectModelPackage.class); - safe = true; - } catch (TagValueNotFoundException e) { - String message = "Invalid model tag value [" + key + "] : the tagvalue '" + tag + "' is unknown."; - if (isStrictLoading()) { - if (log.isErrorEnabled()) { - log.error(message); - } - } else { - if (log.isWarnEnabled()) { - log.warn(message); - } - } - } catch (MismatchTagValueTargetException e) { - String message = "Invalid model tag value [" + key + "] : this tagvalue '" + tag + "' can not be apply on the model."; - if (isStrictLoading()) { - if (log.isErrorEnabled()) { - log.error(message); - } - } else { - if (log.isWarnEnabled()) { - log.warn(message); - } - } - } - - if (safe) { - - // test if tagValue is deprecated - TagValueMetadata tagValueMetadata = tagValueMetadatasProvider.getTagValue(tag).get(); - boolean deprecated = tagValueMetadata.isDeprecated(); - if (deprecated) { - if (log.isWarnEnabled()) { - log.warn("Deprecated tagValue usage [" + key + "] : " + value); - } - } - } else { - if (isStrictLoading()) { - // in strict loading do not accept unsafe tags - return false; - } - } - - ObjectModelPackage aPackage = model.getPackage(packageName); - if (isVerbose()) { - log.info("package tag value imported " + key + " --> " + tag + " = " + value); - } - aPackage.addTagValue(tag, value); - return true; - } - - @Deprecated - protected boolean loadTagValue(ObjectModel model, String key, String value) { - Matcher matcher; - try { - matcher = TagValueUtil.getMatcher(key); - } catch (InvalidTagValueSyntaxException e) { - - String message = "Invalid tag value [" + key + "] : syntax is not correct."; - if (isStrictLoading()) { - if (log.isErrorEnabled()) { - log.error(message); - } - } else { - if (log.isWarnEnabled()) { - log.warn(message); - } - } - return false; - } - - String fqn = matcher.group(1); - fqn = StringUtil.substring(fqn, 0, -1); // remove ended dot - // target is class, attribute or operation - String target = matcher.group(2); - // name of the target (can be null on class) - String targetName = matcher.group(3); - // type is tagvalue - String type = matcher.group(4).toLowerCase(); - // name of the tag value - String tag = matcher.group(5); - // target real type - Class<?> targetType = getTargetType(target); - - if (log.isDebugEnabled()) { - log.debug("Property: '" + key + "' => " - + "fqn:" + fqn + " target:" + target - + " targetName:" + targetName - + " type:" + type + " tag:" + tag); - } - - boolean safe = false; - - try { - tagValueMetadatasProvider.validate(tag, targetType); - safe = true; - } catch (TagValueNotFoundException e) { - - String message = "Invalid tag value [" + key + "] : this tagvalue '" + tag + "' is unknown."; - if (isStrictLoading()) { - if (log.isErrorEnabled()) { - log.error(message); - } - } else { - if (log.isWarnEnabled()) { - log.warn(message); - } - } - - } catch (MismatchTagValueTargetException e) { - String message = "Invalid tag value [" + key + "] : this tagvalue '" + tag + "' can not be apply on the given type '" + target + "'."; - if (isStrictLoading()) { - if (log.isErrorEnabled()) { - log.error(message); - } - } else { - if (log.isWarnEnabled()) { - log.warn(message); - } - } - } - - - if (safe) { - - // test if tagValue is deprecated - TagValueMetadata tagValueMetadata = tagValueMetadatasProvider.getTagValue(tag).get(); - boolean deprecated = tagValueMetadata.isDeprecated(); - if (deprecated) { - if (log.isWarnEnabled()) { - log.warn("Deprecated tagValue usage [" + key + "] : " + value); - } - } - } else { - - if (isStrictLoading()) { - // in strict loading do not accept unsafe tags - return false; - } - } - - ObjectModelClassifier omc = getClassifier(model, TAGVALUE, key, fqn); - if (omc == null) { - - // classifier not found - return false; - } - - List<ObjectModelElement> elements = - getObjectElements(omc, TAGVALUE, key, fqn, target, targetName); - - if (elements == null) { - - // no elements to apply - return false; - } - - for (ObjectModelElement element : elements) { - - if (log.isDebugEnabled()) { - log.debug("add tagValue " + tag - + ", value:" + value - + " to element:" + element); - } - element.addTagValue(tag, value); - - } - if (isVerbose()) { - log.info("tag value imported " + key + " --> " + fqn + ":" + target + ":" + targetName + ":" + type + ":" + tag + " = " + value); - } - return true; - } - - @Deprecated - protected boolean loadModelStereotype(ObjectModel model, String stereotype) throws InvalidModelPropertiesException { - - - boolean safe = false; - - try { - stereotypeMetadatasProvider.validate(stereotype, ObjectModel.class); - safe = true; - } catch (StereotypeNotFoundException e) { - - String message = "Invalid model stereotype [" + stereotype + "] : the stereotype '" + stereotype + "' is unknown."; - if (isStrictLoading()) { - if (log.isErrorEnabled()) { - log.error(message); - } - } else { - if (log.isWarnEnabled()) { - log.warn(message); - } - } - } catch (MismatchStereotypeTargetException e) { - String message = "Invalid model stereotype [" + stereotype + "] : this stereotype '" + stereotype + "' can not be apply on model."; - if (isStrictLoading()) { - if (log.isErrorEnabled()) { - log.error(message); - } - } else { - if (log.isWarnEnabled()) { - log.warn(message); - } - } - } - - if (safe) { - - // test if stereotype is deprecated - StereotypeMetadata tagValueMetadata = stereotypeMetadatasProvider.getStereotype(stereotype).get(); - boolean deprecated = tagValueMetadata.isDeprecated(); - if (deprecated) { - if (log.isWarnEnabled()) { - log.warn("Deprecated model stereotype usage: " + stereotype); - } - } - } else { - if (isStrictLoading()) { - // in strict loading do not accept unsafe stereotypes - return false; - } - } - - if (isVerbose()) { - log.info("stereotype imported " + stereotype + " --> model."); - } - - model.addStereotype(stereotype); - - return true; - } - - @Deprecated - protected boolean loadStereotype(ObjectModel model, - String key, - String fqn, - String target, - String targetName, - Class<?> targetType, - String stereotype) { - - boolean safe = false; - try { - stereotypeMetadatasProvider.validate(stereotype, targetType); - safe = true; - } catch (StereotypeNotFoundException e) { - - String message = "Invalid model stereotype [" + key + "] : the stereotype '" + stereotype + "' is unknown."; - if (isStrictLoading()) { - if (log.isErrorEnabled()) { - log.error(message); - } - } else { - if (log.isWarnEnabled()) { - log.warn(message); - } - } - } catch (MismatchStereotypeTargetException e) { - String message = "Invalid model stereotype [" + key + "] : this stereotype '" + stereotype + "' can not be apply on '" + targetType + "'."; - if (isStrictLoading()) { - if (log.isErrorEnabled()) { - log.error(message); - } - } else { - if (log.isWarnEnabled()) { - log.warn(message); - } - } - } - - if (safe) { - - // test if stereotype is deprecated - StereotypeMetadata tagValueMetadata = stereotypeMetadatasProvider.getStereotype(stereotype).get(); - boolean deprecated = tagValueMetadata.isDeprecated(); - - if (deprecated) { - if (log.isWarnEnabled()) { - log.warn("Deprecated stereotype usage [" + key + "] : " + stereotype); - } - } - } else { - if (isStrictLoading()) { - // in strict loading do not accept unsafe stereotypes - return false; - } - } - - if (log.isDebugEnabled()) { - log.debug("Property: '" + key + "' => " - + "fqn:" + fqn + " target:" + target - + " targetName:" + targetName - + " type:" + stereotype); - } - - ObjectModelClassifier omc = getClassifier(model, STEREOTYPE, key, fqn); - if (omc == null) { - - // classifier not found - return false; - } - - List<ObjectModelElement> elems = getObjectElements(omc, STEREOTYPE, key, fqn, target, targetName); - - if (CollectionUtils.isEmpty(elems)) { - - // no element to apply - return false; - } - - for (ObjectModelElement elem : elems) { - elem.addStereotype(stereotype); - } - - if (isVerbose()) { - log.info("stereotype imported " + key + " --> " + fqn + ":" + target + ":" + targetName + ":" + stereotype + " = " + stereotype); - } - - return true; - } - - @Deprecated - protected boolean loadPackageStereotype(ObjectModel model, - String key, - String fqn, - Class<?> targetType, - String stereotype) { - - boolean safe = false; - try { - stereotypeMetadatasProvider.validate(stereotype, targetType); - safe = true; - } catch (StereotypeNotFoundException e) { - - String message = "Invalid model stereotype [" + key + "] : the stereotype '" + stereotype + "' is unknown."; - if (isStrictLoading()) { - if (log.isErrorEnabled()) { - log.error(message); - } - } else { - if (log.isWarnEnabled()) { - log.warn(message); - } - } - } catch (MismatchStereotypeTargetException e) { - String message = "Invalid model stereotype [" + key + "] : this stereotype '" + stereotype + "' can not be apply on '" + targetType + "'."; - if (isStrictLoading()) { - if (log.isErrorEnabled()) { - log.error(message); - } - } else { - if (log.isWarnEnabled()) { - log.warn(message); - } - } - } - - if (safe) { - - // test if tagValue is deprecated - StereotypeMetadata tagValueMetadata = stereotypeMetadatasProvider.getStereotype(stereotype).get(); - boolean deprecated = tagValueMetadata.isDeprecated(); - - if (deprecated) { - if (log.isWarnEnabled()) { - log.warn("Deprecated stereotype usage [" + key + "] : " + stereotype); - } - } - } else { - if (isStrictLoading()) { - // in strict loading do not accept unsafe stereotypes - return false; - } - } - - if (log.isDebugEnabled()) { - log.debug("Property: '" + key + "' => " - + "fqn:" + fqn - + " type:" + stereotype); - } - - ObjectModelPackage omc = model.getPackage(fqn); - if (omc == null) { - - // package not found - return false; - } - - omc.addStereotype(stereotype); - - if (isVerbose()) { - log.info("stereotype imported " + key + " --> " + fqn + ":" + ":" + stereotype + " = " + stereotype); - } - - return true; - } - - @Deprecated - protected Class<?> getTargetType(String target) { - if (ATTRIBUTE.equals(target)) { - return ObjectModelAttribute.class; - } - if (OPERATION.equals(target)) { - return ObjectModelOperation.class; - } - if (CLASS.equals(target)) { - return ObjectModelClassifier.class; - } - if (PACKAGE.equals(target)) { - return ObjectModelPackage.class; - } - - return null; - } - - @Deprecated - protected ObjectModelClassifier getClassifier(ObjectModel model, String type, String key, String fqn) { - ObjectModelClassifier omc = model.getClassifier(fqn); - if (omc == null) { - if (log.isWarnEnabled()) { - log.warn("Invalid " + type + " [" + key + - "] : Could not find classifier for " + fqn); - } - return null; - } - - //todo tchemit 2010-11-25 : what does it mean ? every thing extends ObjectModelClassifierImpl - if (!(omc instanceof ObjectModelClassifierImpl)) { - // TODO il faudra avoir des methodes d'acces en Set sur l'interface pour eviter ce message - if (log.isWarnEnabled()) { - log.warn("Can't add properties to model, " + - "it's not an " + - "ObjectModelClassifierImpl : " + - omc.getQualifiedName()); - } - return null; - } - return omc; - } - - @Deprecated - protected List<ObjectModelElement> getObjectElements(ObjectModelClassifier omc, String type, String key, String fqn, String target, String targetName) { - List<ObjectModelElement> elems = new ArrayList<>(); - if (CLASS.equals(target)) { - elems.add(omc); - } else if (ATTRIBUTE.equals(target)) { - - ObjectModelAttribute attr = - getAttribute((ObjectModelClass) omc, targetName); - if (attr != null && attr.isNavigable()) { - elems.add(attr); - } - - } else if (OPERATION.equals(target)) { - elems.addAll(omc.getOperations(targetName)); - } - - if (elems.isEmpty()) { - if (log.isWarnEnabled()) { - log.warn("Invalid " + type + " [" + key + "] : Could not find any element '" + targetName + "' of type '" + target + "' on classifier '" + fqn + "'."); - } - return null; - } - - Iterator<ObjectModelElement> itr = elems.iterator(); - while (itr.hasNext()) { - ObjectModelElement element = itr.next(); - if (element == null) { - if (log.isWarnEnabled()) { - log.warn("Invalid " + type + " [" + key + "] : Element '" + targetName + "' of type '" + target + "' on classifier '" + fqn + "' is null."); - } - itr.remove(); - } - } - - return elems; - } - - @Deprecated - protected boolean isTagValue(String key) { - return key.contains(TAGVALUE) || key.contains(TAG_VALUE); - } - - @Deprecated - protected boolean isStereotype(String key) { - return key.contains(STEREOTYPE); - } - } diff --git a/eugene/src/main/java/org/nuiton/eugene/models/object/reader/extension/FlatModelExtensionFileParser.java b/eugene/src/main/java/org/nuiton/eugene/models/object/reader/extension/FlatModelExtensionFileParser.java index 7ca8b01..3c605de 100644 --- a/eugene/src/main/java/org/nuiton/eugene/models/object/reader/extension/FlatModelExtensionFileParser.java +++ b/eugene/src/main/java/org/nuiton/eugene/models/object/reader/extension/FlatModelExtensionFileParser.java @@ -30,7 +30,6 @@ import org.nuiton.eugene.models.extension.stereotype.StereotypeUtil; import org.nuiton.eugene.models.extension.tagvalue.InvalidTagValueSyntaxException; import org.nuiton.eugene.models.extension.tagvalue.TagValueUtil; import org.nuiton.eugene.models.object.reader.InvalidModelPropertiesException; -import org.nuiton.eugene.models.stereotype.Stereotypes; import org.nuiton.util.RecursiveProperties; import org.nuiton.util.StringUtil; @@ -47,14 +46,6 @@ import java.util.Properties; import java.util.Set; import java.util.regex.Matcher; -import static org.nuiton.eugene.models.object.reader.AbstractObjectModelReader.ATTRIBUTE; -import static org.nuiton.eugene.models.object.reader.AbstractObjectModelReader.CLASS; -import static org.nuiton.eugene.models.object.reader.AbstractObjectModelReader.MODEL; -import static org.nuiton.eugene.models.object.reader.AbstractObjectModelReader.PACKAGE; -import static org.nuiton.eugene.models.object.reader.AbstractObjectModelReader.STEREOTYPE; -import static org.nuiton.eugene.models.object.reader.AbstractObjectModelReader.TAGVALUE; -import static org.nuiton.eugene.models.object.reader.AbstractObjectModelReader.TAG_VALUE; - /** * Created on 09/09/16. * @@ -92,7 +83,7 @@ public class FlatModelExtensionFileParser implements ModelExtensionFileParser { } - if (strictLoading &&!safe) { + if (strictLoading && !safe) { String errorMessage = "There is some tag value(s) or stereotype(s) failed to be imported from " + file; throw new InvalidModelPropertiesException(errorMessage); @@ -117,7 +108,7 @@ public class FlatModelExtensionFileParser implements ModelExtensionFileParser { // model stereotype if (stereoTypeKey) { - Set<String> stereotypes = Stereotypes.getStereotypes(value); + Set<String> stereotypes = StereotypeUtil.getStereotypes(value); for (String stereotype : stereotypes) { safe &= callback.onModelStereotypeFound(stereotype); } @@ -152,7 +143,7 @@ public class FlatModelExtensionFileParser implements ModelExtensionFileParser { String fqn = matcher.group(1); fqn = StringUtil.substring(fqn, 0, -1); // remove ended . - Set<String> stereotypes = Stereotypes.getStereotypes(value); + Set<String> stereotypes = StereotypeUtil.getStereotypes(value); for (String stereotype : stereotypes) { safe &= callback.onPackageStereotypeFound(fqn, stereotype); } @@ -193,7 +184,7 @@ public class FlatModelExtensionFileParser implements ModelExtensionFileParser { String target = matcher.group(2); String targetName = matcher.group(3); - Set<String> stereotypes = Stereotypes.getStereotypes(value); + Set<String> stereotypes = StereotypeUtil.getStereotypes(value); for (String stereotype : stereotypes) { if (CLASS.equals(target)) { diff --git a/eugene/src/main/java/org/nuiton/eugene/models/object/reader/extension/ModelExtensionFileParser.java b/eugene/src/main/java/org/nuiton/eugene/models/object/reader/extension/ModelExtensionFileParser.java index 9ab5866..8034d27 100644 --- a/eugene/src/main/java/org/nuiton/eugene/models/object/reader/extension/ModelExtensionFileParser.java +++ b/eugene/src/main/java/org/nuiton/eugene/models/object/reader/extension/ModelExtensionFileParser.java @@ -35,5 +35,20 @@ import java.io.IOException; * @author Tony Chemit - chemit@codelutin.com */ public interface ModelExtensionFileParser { + + String TAGVALUE = "tagvalue"; + + String TAG_VALUE = "tagValue"; + + String STEREOTYPE = "stereotype"; + + String ATTRIBUTE = "attribute"; + + String CLASS = "class"; + + String MODEL = "model"; + + String PACKAGE = "package"; + void parse(File file, ModelExtensionFileParserCallback callback) throws IOException, InvalidStereotypeSyntaxException, InvalidTagValueSyntaxException; } diff --git a/eugene/src/main/resources/i18n/eugene_en_GB.properties b/eugene/src/main/resources/i18n/eugene_en_GB.properties new file mode 100644 index 0000000..30f0113 --- /dev/null +++ b/eugene/src/main/resources/i18n/eugene_en_GB.properties @@ -0,0 +1,11 @@ +eugene.core.stereotypes=EUGeNe Core stereotypes +eugene.core.stereotypes.ordered=Is attribute ordererd ? +eugene.core.stereotypes.skip=Skip generation +eugene.core.stereotypes.unique=Is attribute unique ? +eugene.core.tagValues.attributeGeneric=Generic type of attribute +eugene.core.tagValues.constantPrefix=Constant field prefix +eugene.core.tagValues.documentation=Documentation +eugene.core.tagValues.generateBooleanGetMethods=Generate getter on Boolean +eugene.core.tagValues.i18n=I18n prefix +eugene.core.tagValues.version=Version of model +eugene.core.tagvalues=EUGeNe Core tag values diff --git a/eugene/src/main/resources/i18n/eugene_fr_FR.properties b/eugene/src/main/resources/i18n/eugene_fr_FR.properties new file mode 100644 index 0000000..db0b548 --- /dev/null +++ b/eugene/src/main/resources/i18n/eugene_fr_FR.properties @@ -0,0 +1,11 @@ +eugene.core.stereotypes=EUGeNe stéréotypes +eugene.core.stereotypes.ordered=L'attribut est-il ordonné ? +eugene.core.stereotypes.skip=Ne pas générer +eugene.core.stereotypes.unique=L'attribut est-il unique ? +eugene.core.tagValues.attributeGeneric=Type générique de l'attribut +eugene.core.tagValues.constantPrefix=Préfixe des constantes +eugene.core.tagValues.documentation=Documentation +eugene.core.tagValues.generateBooleanGetMethods=Génerer les getters sur le type Boolean +eugene.core.tagValues.i18n=Préfix i18n +eugene.core.tagValues.version=Version du modèle +eugene.core.tagvalues=EUGeNe Core tag values diff --git a/eugene/src/test/java/org/nuiton/eugene/EugeneCoreStereotypesTest.java b/eugene/src/test/java/org/nuiton/eugene/EugeneCoreStereotypesTest.java index fa1af5a..b084ef4 100644 --- a/eugene/src/test/java/org/nuiton/eugene/EugeneCoreStereotypesTest.java +++ b/eugene/src/test/java/org/nuiton/eugene/EugeneCoreStereotypesTest.java @@ -1,5 +1,27 @@ package org.nuiton.eugene; +/*- + * #%L + * EUGene :: EUGene + * %% + * Copyright (C) 2004 - 2016 CodeLutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + import org.junit.Assert; import org.junit.Before; import org.junit.Test; diff --git a/eugene/src/test/java/org/nuiton/eugene/EugeneCoreTagValuesTest.java b/eugene/src/test/java/org/nuiton/eugene/EugeneCoreTagValuesTest.java index d694981..57c8160 100644 --- a/eugene/src/test/java/org/nuiton/eugene/EugeneCoreTagValuesTest.java +++ b/eugene/src/test/java/org/nuiton/eugene/EugeneCoreTagValuesTest.java @@ -1,5 +1,27 @@ package org.nuiton.eugene; +/*- + * #%L + * EUGene :: EUGene + * %% + * Copyright (C) 2004 - 2016 CodeLutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. + * #L% + */ + import org.junit.Assert; import org.junit.Before; import org.junit.Test; diff --git a/pom.xml b/pom.xml index e154149..04141da 100644 --- a/pom.xml +++ b/pom.xml @@ -136,6 +136,7 @@ <!-- redmine project Id --> <projectId>eugene</projectId> + <ciViewId>Eugene</ciViewId> <processorPluginVersion>1.3</processorPluginVersion> <nuitonUtilsVersion>3.0-rc-15</nuitonUtilsVersion> @@ -151,11 +152,17 @@ <plexusPluginVersion>1.3.8</plexusPluginVersion> <doxiaVersion>1.6</doxiaVersion> <mavenVersion>3.3.9</mavenVersion> - - <ciViewId>Eugene</ciViewId> + + <!-- Java level configuration --> <javaVersion>1.7</javaVersion> <signatureArtifactId>java17</signatureArtifactId> <signatureVersion>1.0</signatureVersion> + + <!-- I18n configuration --> + <i18n.failsIfAnyKeyMissingValue>true</i18n.failsIfAnyKeyMissingValue> + <i18n.checkBundle>true</i18n.checkBundle> + <i18n.showEmpty>true</i18n.showEmpty> + </properties> <dependencyManagement> -- To stop receiving notification emails like this one, please contact nuiton.org SCM administrator <admin+scm@nuiton.org>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/editor in repository eugene. See https://gitlab.nuiton.org/nuiton/eugene.git commit 2fbb0985771b9d2a865eb1464ff9ad7ae5f1e962 Author: Tony CHEMIT <chemit@codelutin.com> Date: Mon Sep 19 12:23:23 2016 +0200 POC --- eugene-editor-maven-plugin/LICENSE.txt | 165 ++ eugene-editor-maven-plugin/README.md | 2 + eugene-editor-maven-plugin/pom.xml | 500 +++++ .../src/license/THIRD-PARTY.properties | 37 + .../src/main/assembly/bin.xml | 73 + .../src/main/assembly/dist/go.bat | 1 + .../src/main/assembly/dist/go.sh | 4 + .../EugeneEditorApplicationContext.java | 77 + .../editor/application/ModelExtensionHelper.java | 161 ++ .../eugene/editor/application/ModelHelper.java | 66 + .../application/config/EugeneEditorConfig.java | 23 + .../config/EugeneEditorConfigOption.java | 103 + .../application/ui/ContentUIInitializer.java | 223 ++ .../editor/application/ui/ContentUIManager.java | 55 + .../editor/application/ui/EugeneEditorCommon.jcss | 26 + .../editor/application/ui/EugeneEditorUI.jaxx | 96 + .../editor/application/ui/EugeneEditorUI.jcss | 164 ++ .../application/ui/EugeneEditorUIHandler.java | 44 + .../editor/application/ui/EugeneEditorUIMode.java | 11 + .../application/ui/actions/ActionSupport.java | 23 + .../ui/actions/ChangeApplicationLocaleAction.java | 53 + .../application/ui/actions/GotoSiteAction.java | 29 + .../ui/actions/QuitApplicationAction.java | 33 + .../application/ui/actions/SaveProjectAction.java | 29 + .../application/ui/actions/ShowAboutAction.java | 29 + .../application/ui/actions/ShowConfigAction.java | 29 + .../application/ui/content/AttributeContentUI.jaxx | 104 + .../application/ui/content/AttributeContentUI.jcss | 69 + .../ui/content/AttributeContentUIHandler.java | 69 + .../application/ui/content/ClassContentUI.jaxx | 84 + .../application/ui/content/ClassContentUI.jcss | 68 + .../ui/content/ClassContentUIHandler.java | 60 + .../application/ui/content/ContenUIHandler.java | 154 ++ .../editor/application/ui/content/ContentUI.java | 29 + .../editor/application/ui/content/ContentUI.jcss | 74 + .../ui/content/EnumerationContentUI.jaxx | 73 + .../ui/content/EnumerationContentUI.jcss | 50 + .../ui/content/EnumerationContentUIHandler.java | 45 + .../application/ui/content/InterfaceContentUI.jaxx | 77 + .../application/ui/content/InterfaceContentUI.jcss | 63 + .../ui/content/InterfaceContentUIHandler.java | 55 + .../application/ui/content/ModelContentUI.jaxx | 62 + .../application/ui/content/ModelContentUI.jcss | 19 + .../ui/content/ModelContentUIHandler.java | 34 + .../application/ui/content/Multiplicity.java | 40 + .../application/ui/content/OperationContentUI.jaxx | 87 + .../application/ui/content/OperationContentUI.jcss | 67 + .../ui/content/OperationContentUIHandler.java | 68 + .../application/ui/content/PackageContentUI.jaxx | 59 + .../application/ui/content/PackageContentUI.jcss | 37 + .../ui/content/PackageContentUIHandler.java | 33 + .../ui/content/ParameterTableModel.java | 103 + .../actions/AddInterfaceFromClassAction.java | 39 + .../actions/AddLiteralFromEnumerationAction.java | 32 + .../actions/AddSuperClassFromInterfaceAction.java | 31 + .../ui/content/actions/ContentActionSupport.java | 55 + .../CreateAttributeFromAttributeAction.java | 44 + .../actions/CreateAttributeFromClassAction.java | 42 + .../CreateAttributeFromInterfaceAction.java | 42 + .../actions/CreateClassFromClassAction.java | 45 + .../actions/CreateClassFromPackageAction.java | 43 + .../CreateEnumerationFromEnumerationAction.java | 44 + .../CreateEnumerationFromPackageAction.java | 43 + .../CreateInterfaceFromInterfaceAction.java | 44 + .../actions/CreateInterfaceFromPackageAction.java | 43 + .../CreateLiteralFromEnumerationAction.java | 21 + .../actions/CreateOperationFromClassAction.java | 43 + .../CreateOperationFromInterfaceAction.java | 43 + .../CreateOperationFromOperationAction.java | 44 + .../actions/CreatePackageFromModelAction.java | 45 + .../actions/CreatePackageFromPackageAction.java | 42 + .../CreateParameterFromOperationAction.java | 35 + .../DeleteAttributeFromAttributeAction.java | 45 + .../actions/DeleteClassFromClassAction.java | 46 + .../DeleteEnumerationFromEnumerationAction.java | 46 + .../DeleteInterfaceFromInterfaceAction.java | 41 + .../DeleteOperationFromOperationAction.java | 45 + .../actions/DeletePackageFromPackageAction.java | 45 + .../DeleteParameterFromOperationAction.java | 50 + .../actions/RemoveInterfaceFromClassAction.java | 38 + .../RemoveLiteralFromEnumerationAction.java | 36 + .../RemoveSuperClassFromInterfaceAction.java | 38 + .../application/ui/tree/EugeneEditorTree.java | 29 + .../ui/tree/EugeneEditorTreeCellRenderer.java | 35 + .../ui/tree/EugeneEditorTreeSelectionModel.java | 99 + .../application/ui/tree/TreeModelBuilder.java | 82 + .../application/ui/tree/node/AttributeNode.java | 71 + .../editor/application/ui/tree/node/ClassNode.java | 71 + .../application/ui/tree/node/EnumerationNode.java | 63 + .../application/ui/tree/node/InterfaceNode.java | 65 + .../editor/application/ui/tree/node/ModelNode.java | 137 ++ .../application/ui/tree/node/NodeSupport.java | 195 ++ .../application/ui/tree/node/OperationNode.java | 97 + .../application/ui/tree/node/PackageNode.java | 49 + .../eugene/editor/plugin/EugeneEditorMojo.java | 169 ++ .../eugene-editor-maven-plugin_en_GB.properties | 102 + .../eugene-editor-maven-plugin_fr_FR.properties | 102 + .../src/main/resources/icons/action-about.png | Bin 0 -> 936 bytes .../src/main/resources/icons/action-add.png | Bin 0 -> 733 bytes .../src/main/resources/icons/action-cancel.png | Bin 0 -> 587 bytes .../src/main/resources/icons/action-close.png | Bin 0 -> 688 bytes .../src/main/resources/icons/action-collapse.png | Bin 0 -> 372 bytes .../src/main/resources/icons/action-config.png | Bin 0 -> 611 bytes .../src/main/resources/icons/action-delete.png | Bin 0 -> 783 bytes .../src/main/resources/icons/action-exit.png | Bin 0 -> 830 bytes .../src/main/resources/icons/action-expand.png | Bin 0 -> 371 bytes .../main/resources/icons/action-fileChooser.png | Bin 0 -> 441 bytes .../src/main/resources/icons/action-help.png | Bin 0 -> 746 bytes .../src/main/resources/icons/action-i18n-en.png | Bin 0 -> 599 bytes .../src/main/resources/icons/action-i18n-fr.png | Bin 0 -> 545 bytes .../src/main/resources/icons/action-i18n-uk.png | Bin 0 -> 599 bytes .../src/main/resources/icons/action-save.png | Bin 0 -> 838 bytes .../src/main/resources/icons/action-select.png | Bin 0 -> 392 bytes .../src/main/resources/icons/action-site.png | Bin 0 -> 928 bytes .../src/main/resources/icons/action-translate.png | Bin 0 -> 790 bytes .../src/main/resources/icons/action-unselect.png | Bin 0 -> 311 bytes .../src/main/resources/icons/modifier-package.png | Bin 0 -> 1400 bytes .../src/main/resources/icons/modifier-private.png | Bin 0 -> 1403 bytes .../main/resources/icons/modifier-protected.png | Bin 0 -> 1403 bytes .../src/main/resources/icons/modifier-public.png | Bin 0 -> 1408 bytes .../src/main/resources/icons/type-attribute.png | Bin 0 -> 1536 bytes .../src/main/resources/icons/type-class.png | Bin 0 -> 1523 bytes .../src/main/resources/icons/type-enumeration.png | Bin 0 -> 1512 bytes .../src/main/resources/icons/type-interface.png | Bin 0 -> 1520 bytes .../src/main/resources/icons/type-model.png | Bin 0 -> 1414 bytes .../src/main/resources/icons/type-operation.png | Bin 0 -> 1518 bytes .../src/main/resources/icons/type-package.png | Bin 0 -> 1409 bytes .../src/main/resources/log4j.properties | 30 + .../tree/node/AttributeNode-error-validation.xml | 44 + .../ui/tree/node/ClassNode-error-validation.xml | 36 + .../tree/node/EnumerationNode-error-validation.xml | 36 + .../tree/node/InterfaceNode-error-validation.xml | 36 + .../ui/tree/node/ModelNode-error-validation.xml | 36 + .../tree/node/OperationNode-error-validation.xml | 44 + .../ui/tree/node/PackageNode-error-validation.xml | 36 + .../src/main/resources/validators.xml | 54 + .../src/site/fr/rst/index.rst | 72 + eugene-editor-maven-plugin/src/site/rst/index.rst | 44 + eugene-editor-maven-plugin/src/site/site_en.xml | 62 + eugene-editor-maven-plugin/src/site/site_fr.xml | 66 + .../observe-entities/observe-common.objectmodel | 670 ++++++ .../observe-entities/observe-longline.objectmodel | 2251 ++++++++++++++++++++ .../observe-entities/observe-seine.objectmodel | 1677 +++++++++++++++ .../observe-entities/observe.objectmodel-ext | 248 +++ .../object/xml/ObjectModelClassifierImpl.java | 16 + .../object/xml/ObjectModelEnumerationImpl.java | 11 + .../object/xml/ObjectModelOperationImpl.java | 10 + pom.xml | 141 +- 148 files changed, 11973 insertions(+), 2 deletions(-) diff --git a/eugene-editor-maven-plugin/LICENSE.txt b/eugene-editor-maven-plugin/LICENSE.txt new file mode 100644 index 0000000..cca7fc2 --- /dev/null +++ b/eugene-editor-maven-plugin/LICENSE.txt @@ -0,0 +1,165 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. diff --git a/eugene-editor-maven-plugin/README.md b/eugene-editor-maven-plugin/README.md new file mode 100644 index 0000000..d2e50d3 --- /dev/null +++ b/eugene-editor-maven-plugin/README.md @@ -0,0 +1,2 @@ +To deploy new version of pom: mvn deploy +To install localy: mvn install diff --git a/eugene-editor-maven-plugin/pom.xml b/eugene-editor-maven-plugin/pom.xml new file mode 100644 index 0000000..27ecd26 --- /dev/null +++ b/eugene-editor-maven-plugin/pom.xml @@ -0,0 +1,500 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + #%L + EUGene :: Maven plugin + + $HeadURL$ + %% + Copyright (C) 2006 - 2010 CodeLutin + %% + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Lesser Public License for more details. + + You should have received a copy of the GNU General Lesser Public + License along with this program. If not, see + <http://www.gnu.org/licenses/lgpl-3.0.html>. + #L% + --> + +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + + <parent> + <groupId>org.nuiton</groupId> + <artifactId>eugene</artifactId> + <version>3.0-SNAPSHOT</version> + </parent> + + <groupId>org.nuiton.eugene</groupId> + <artifactId>eugene-editor-maven-plugin</artifactId> + <packaging>maven-plugin</packaging> + + <name>EUGene :: Editor Maven Plugin</name> + <description>EUGene model editor maven plugin</description> + <inceptionYear>2016</inceptionYear> + + <properties> + + <javaVersion>1.8</javaVersion> + <signatureArtifactId>java18</signatureArtifactId> + <signatureVersion>1.0</signatureVersion> + + <!-- jaxx configuration --> + <jaxx.addProjectClassPath>true</jaxx.addProjectClassPath> + <jaxx.addSourcesToClassPath>true</jaxx.addSourcesToClassPath> + <jaxx.defaultErrorUIFQN>jaxx.runtime.validator.swing.ui.ImageValidationUI</jaxx.defaultErrorUIFQN> + <!--<jaxx.useUIManagerForIcon>true</jaxx.useUIManagerForIcon>--> + <jaxx.autoImportCss>true</jaxx.autoImportCss> + <jaxx.autoRecurseInCss>false</jaxx.autoRecurseInCss> + <jaxx.commonCss> + ${project.basedir}/src/main/java/org/nuiton/eugene/editor/application/ui/EugeneEditorUI.jcss + </jaxx.commonCss> + <jaxx.validatorFactoryFQN>jaxx.runtime.validator.swing.SwingValidator</jaxx.validatorFactoryFQN> + <jaxx.cssExtension>jcss</jaxx.cssExtension> + <jaxx.addAutoHandlerUI>true</jaxx.addAutoHandlerUI> + + <applicationName>EugeneEditor</applicationName> + + <!-- generate license bundled files --> + <license.generateBundle>true</license.generateBundle> + <license.bundleThirdPartyPath>META-INF/${applicationName}-THIRD-PARTY.txt</license.bundleThirdPartyPath> + <license.bundleLicensePath>META-INF/${applicationName}-LICENSE.txt</license.bundleLicensePath> + + <!-- i18n configuration --> + <i18n.bundles>fr_FR,en_GB</i18n.bundles> + <i18n.silent>true</i18n.silent> + <!--<i18n.failsIfAnyKeyMissingValue>true</i18n.failsIfAnyKeyMissingValue>--> + <i18n.checkBundle>true</i18n.checkBundle> + <i18n.showEmpty>true</i18n.showEmpty> + + <i18n.bundleOutputName>${applicationName}-i18n</i18n.bundleOutputName> + <i18n.bundleCsvFile>${applicationName}-i18n.csv</i18n.bundleCsvFile> + <i18n.bundleCsvSeparator>|</i18n.bundleCsvSeparator> + + <maven.build.timestamp.format>dd/MM/yyyy HH:mm z</maven.build.timestamp.format> + <buildDate>${maven.build.timestamp}</buildDate> + <buildNumber/> + + </properties> + + <dependencies> + + <dependency> + <groupId>${project.groupId}</groupId> + <artifactId>eugene</artifactId> + <version>${project.version}</version> + <scope>compile</scope> + </dependency> + + <dependency> + <groupId>org.apache.maven</groupId> + <artifactId>maven-plugin-api</artifactId> + </dependency> + + <dependency> + <groupId>org.apache.maven</groupId> + <artifactId>maven-core</artifactId> + </dependency> + + <dependency> + <groupId>org.apache.maven</groupId> + <artifactId>maven-model</artifactId> + </dependency> + + <dependency> + <groupId>org.apache.maven</groupId> + <artifactId>maven-artifact</artifactId> + </dependency> + + <dependency> + <groupId>org.apache.maven</groupId> + <artifactId>maven-settings</artifactId> + </dependency> + + <dependency> + <groupId>org.apache.maven.plugin-tools</groupId> + <artifactId>maven-plugin-annotations</artifactId> + </dependency> + + <dependency> + <groupId>org.codehaus.plexus</groupId> + <artifactId>plexus-utils</artifactId> + </dependency> + + <dependency> + <groupId>org.nuiton</groupId> + <artifactId>helper-maven-plugin-api</artifactId> + </dependency> + + <dependency> + <groupId>org.nuiton</groupId> + <artifactId>nuiton-utils</artifactId> + </dependency> + <dependency> + <groupId>org.nuiton</groupId> + <artifactId>nuiton-config</artifactId> + </dependency> + + <!-- TODO pk devoir rajouter ça ? --> + <dependency> + <groupId>net.sf.saxon</groupId> + <artifactId>saxon</artifactId> + <version>8.7</version> + <scope>runtime</scope> + </dependency> + <!-- TODO pk devoir rajouter ça ? --> + <dependency> + <groupId>net.sf.saxon</groupId> + <artifactId>saxon-dom</artifactId> + <version>8.7</version> + <scope>runtime</scope> + </dependency> + + <dependency> + <groupId>org.apache.commons</groupId> + <artifactId>commons-lang3</artifactId> + </dependency> + + <dependency> + <groupId>commons-collections</groupId> + <artifactId>commons-collections</artifactId> + </dependency> + + <dependency> + <groupId>org.apache.commons</groupId> + <artifactId>commons-collections4</artifactId> + </dependency> + + <dependency> + <groupId>com.google.guava</groupId> + <artifactId>guava</artifactId> + </dependency> + + <!-- jaxx dependencies --> + + <dependency> + <groupId>org.nuiton.jaxx</groupId> + <artifactId>jaxx-runtime</artifactId> + </dependency> + <dependency> + <groupId>org.nuiton.jaxx</groupId> + <artifactId>jaxx-validator</artifactId> + </dependency> + <dependency> + <groupId>org.nuiton.jaxx</groupId> + <artifactId>jaxx-widgets</artifactId> + </dependency> + <dependency> + <groupId>org.nuiton.jaxx</groupId> + <artifactId>jaxx-widgets-select</artifactId> + </dependency> + <dependency> + <groupId>org.nuiton.jaxx</groupId> + <artifactId>jaxx-widgets-about</artifactId> + </dependency> + <dependency> + <groupId>org.nuiton.jaxx</groupId> + <artifactId>jaxx-config</artifactId> + </dependency> + <dependency> + <groupId>org.nuiton.jaxx</groupId> + <artifactId>jaxx-application-api</artifactId> + </dependency> + + <!-- SwingX --> + <dependency> + <groupId>org.swinglabs.swingx</groupId> + <artifactId>swingx-core</artifactId> + </dependency> + <dependency> + <groupId>org.swinglabs.swingx</groupId> + <artifactId>swingx-painters</artifactId> + </dependency> + <dependency> + <groupId>org.swinglabs.swingx</groupId> + <artifactId>swingx-common</artifactId> + </dependency> + <dependency> + <groupId>org.swinglabs.swingx</groupId> + <artifactId>swingx-autocomplete</artifactId> + </dependency> + <dependency> + <groupId>org.swinglabs</groupId> + <artifactId>jxlayer</artifactId> + </dependency> + + <dependency> + <groupId>log4j</groupId> + <artifactId>log4j</artifactId> + <scope>runtime</scope> + </dependency> + + </dependencies> + + <build> + + <pluginManagement> + <plugins> + + <plugin> + <artifactId>maven-plugin-plugin</artifactId> + <configuration> + <skipErrorNoDescriptorsFound>true</skipErrorNoDescriptorsFound> + </configuration> + <executions> + <execution> + <goals> + <goal>helpmojo</goal> + <goal>descriptor</goal> + </goals> + </execution> + </executions> + </plugin> + + </plugins> + </pluginManagement> + + <plugins> + + <!-- expose new plexus components --> + <plugin> + <groupId>org.codehaus.plexus</groupId> + <artifactId>plexus-component-metadata</artifactId> + <executions> + <execution> + <goals> + <goal>generate-metadata</goal> + </goals> + </execution> + </executions> + </plugin> + + <plugin> + <groupId>org.codehaus.mojo</groupId> + <artifactId>buildnumber-maven-plugin</artifactId> + <executions> + <execution> + <inherited>false</inherited> + <goals> + <goal>create</goal> + </goals> + <phase>validate</phase> + </execution> + </executions> + <configuration> + <doCheck>false</doCheck> + <doUpdate>false</doUpdate> + </configuration> + </plugin> + + <plugin> + <groupId>${project.groupId}</groupId> + <artifactId>eugene-maven-plugin</artifactId> + <version>${project.version}</version> + <executions> + <execution> + <phase>generate-sources</phase> + <id>generate-config</id> + <configuration> + <modelName>EugeneEditor</modelName> + <packageName>org.nuiton.eugene.editor.application.config</packageName> + </configuration> + <goals> + <goal>generate-config</goal> + </goals> + </execution> + </executions> + </plugin> + + <plugin> + <groupId>org.nuiton.jaxx</groupId> + <artifactId>jaxx-maven-plugin</artifactId> + <executions> + <execution> + <goals> + <goal>generate</goal> + </goals> + </execution> + </executions> + </plugin> + + <plugin> + <groupId>org.nuiton.i18n</groupId> + <artifactId>i18n-maven-plugin</artifactId> + <executions> + <execution> + <id>parse-java</id> + <goals> + <goal>parserJava</goal> + </goals> + <configuration> + <entries> + <entry> + <specificGoal>parserJava</specificGoal> + <basedir>${project.build.directory}/generated-sources/java/</basedir> + </entry> + </entries> + </configuration> + </execution> + <execution> + <id>parse-validation</id> + <goals> + <goal>parserValidation</goal> + </goals> + <configuration> + <entries> + <entry> + <basedir>${project.basedir}/src/main/resources/</basedir> + <includes> + <param>**/**-validation.xml</param> + </includes> + </entry> + </entries> + </configuration> + </execution> + <execution> + <id>gen</id> + <goals> + <goal>gen</goal> + </goals> + </execution> + <execution> + <id>make-bundle</id> + <goals> + <goal>bundle</goal> + <goal>generate-csv-bundle</goal> + </goals> + </execution> + </executions> + </plugin> + + </plugins> + </build> + + <profiles> + + <profile> + <id>changelog-profile</id> + <activation> + <property> + <name>performRelease</name> + <value>true</value> + </property> + </activation> + <build> + <defaultGoal>generate-resources</defaultGoal> + + <plugins> + + <plugin> + <groupId>org.codehaus.mojo</groupId> + <artifactId>build-helper-maven-plugin</artifactId> + <executions> + <execution> + <id>parse-version</id> + <goals> + <goal>parse-version</goal> + </goals> + </execution> + </executions> + </plugin> + + <plugin> + <artifactId>maven-dependency-plugin</artifactId> + <executions> + <execution> + <id>get-changelog</id> + <phase>generate-resources</phase> + <goals> + <goal>copy</goal> + </goals> + <configuration> + <outputDirectory>${project.build.directory}/changelog</outputDirectory> + <artifactItems> + <artifactItem> + <groupId>${project.parent.groupId}</groupId> + <artifactId>${project.parent.artifactId}</artifactId> + <version>${project.version}</version> + <classifier>changelog</classifier> + <type>pom</type> + </artifactItem> + </artifactItems> + </configuration> + </execution> + </executions> + </plugin> + + <plugin> + <artifactId>maven-antrun-plugin</artifactId> + <executions> + <execution> + <id>Copy changelog</id> + <phase>process-resources</phase> + <configuration> + <target> + <copy failonerror="true" overwrite="true" + file="${project.build.directory}/changelog/${project.parent.artifactId}-${project.version}-changelog.pom" + tofile="${project.build.directory}/generated-sources/license/${applicationName}.txt"/> + <copy failonerror="true" overwrite="true" + file="${project.build.directory}/changelog/${project.parent.artifactId}-${project.version}-changelog.pom" + tofile="${project.build.directory}/generated-sources/license/META-INF/${applicationName}-CHANGELOG.txt"/> + </target> + </configuration> + <goals> + <goal>run</goal> + </goals> + </execution> + </executions> + </plugin> + + </plugins> + </build> + </profile> + + <profile> + <id>run-observe-entities</id> + + <properties> + <sourceDirectory>${project.basedir}/src/test/resources/observe-entities</sourceDirectory> + </properties> + + <build> + <defaultGoal>compile</defaultGoal> + <plugins> + <plugin> + <groupId>${project.groupId}</groupId> + <artifactId>${project.artifactId}</artifactId> + <version>${project.version}</version> + <executions> + <execution> + <phase>compile</phase> + <goals><goal>run</goal></goals> + <configuration> + <sourceDirectory>${sourceDirectory}</sourceDirectory> + <generatedSourceDirectory>${sourceDirectory}</generatedSourceDirectory> + </configuration> + </execution> + </executions> + <dependencies> + <dependency> + <groupId>org.nuiton.topia</groupId> + <artifactId>topia-templates</artifactId> + <version>3.1.3</version> + <scope>compile</scope> + </dependency> + </dependencies> + </plugin> + </plugins> + </build> + </profile> + + </profiles> +</project> diff --git a/eugene-editor-maven-plugin/src/license/THIRD-PARTY.properties b/eugene-editor-maven-plugin/src/license/THIRD-PARTY.properties new file mode 100644 index 0000000..fc3ffd2 --- /dev/null +++ b/eugene-editor-maven-plugin/src/license/THIRD-PARTY.properties @@ -0,0 +1,37 @@ +# Generated by org.codehaus.mojo.license.AddThirdPartyMojo +#------------------------------------------------------------------------------- +# Already used licenses in project : +# - Apache License +# - Apache License Version 2.0 +# - Apache Software License, Version 1.1 +# - BSD License +# - COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0 +# - Eclipse Public License 1.0 +# - Eclipse Public License, Version 1.0 +# - Indiana University Extreme! Lab Software License, vesion 1.1.1 +# - Lesser General Public License (LGPL) v 3.0 +# - Lesser General Public License (LPGL) +# - Lesser General Public License (LPGL) v 2.1 +# - MIT License +# - Mozilla Public License Version 1.0 +# - New BSD License +# - Public Domain +# - The Apache Software License, Version 2.0 +# - The GNU General Public License +# - The SAX License +# - The W3C License +# - http://classworlds.codehaus.org/license.html +# - http://jaxen.codehaus.org/license.html +#------------------------------------------------------------------------------- +# Please fill the missing licenses for dependencies : +# +# +#Sun Aug 09 09:53:01 CEST 2015 +antlr--antlr--2.7.2=BSD License +classworlds--classworlds--1.1-alpha-2=http\://classworlds.codehaus.org/license.html +commons-primitives--commons-primitives--1.0=The Apache Software License, Version 2.0 +dom4j--dom4j--1.1=BSD License +org.codehaus.plexus--plexus-container-default--1.0-alpha-9-stable-1=The Apache Software License, Version 2.0 +org.codehaus.plexus--plexus-i18n--1.0-beta-10=The Apache Software License, Version 2.0 +org.codehaus.plexus--plexus-velocity--1.1.7=The Apache Software License, Version 2.0 +oro--oro--2.0.8=The Apache Software License, Version 2.0 diff --git a/eugene-editor-maven-plugin/src/main/assembly/bin.xml b/eugene-editor-maven-plugin/src/main/assembly/bin.xml new file mode 100644 index 0000000..17504b2 --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/assembly/bin.xml @@ -0,0 +1,73 @@ +<!-- + #%L + ObServe :: Application Swing + %% + Copyright (C) 2008 - 2016 IRD, Codelutin, Tony Chemit + %% + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this program. If not, see + <http://www.gnu.org/licenses/gpl-3.0.html>. + #L% + --> +<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd"> + <id>bin</id> + <formats> + <format>zip</format> + </formats> + + <fileSets> + + <fileSet> + <directory>target</directory> + <outputDirectory/> + <fileMode>0755</fileMode> + <includes> + <include>${project.build.finalName}.jar</include> + <include>${applicationName}.exe</include> + </includes> + </fileSet> + + <fileSet> + <directory>target/classes</directory> + <outputDirectory/> + <includes> + <include>THIRD-PARTY.txt</include> + <include>LICENSE.txt</include> + </includes> + </fileSet> + + <fileSet> + <directory>src/main/assembly/dist</directory> + <outputDirectory/> + <includes> + <include>**/*</include> + </includes> + <excludes> + <exclude>**/*.sh</exclude> + <exclude>**/*.bat</exclude> + </excludes> + </fileSet> + + <fileSet> + <directory>src/main/assembly/dist</directory> + <outputDirectory/> + <fileMode>0755</fileMode> + <filtered>true</filtered> + <includes> + <include>**/*.sh</include> + <include>**/*.bat</include> + </includes> + </fileSet> + </fileSets> +</assembly> diff --git a/eugene-editor-maven-plugin/src/main/assembly/dist/go.bat b/eugene-editor-maven-plugin/src/main/assembly/dist/go.bat new file mode 100755 index 0000000..cffa0cc --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/assembly/dist/go.bat @@ -0,0 +1 @@ +java -Xmx512M -Xms512M -jar ${project.build.finalName}.jar %1 %2 %3 %4 %5 %6 %7 %8 %9 \ No newline at end of file diff --git a/eugene-editor-maven-plugin/src/main/assembly/dist/go.sh b/eugene-editor-maven-plugin/src/main/assembly/dist/go.sh new file mode 100755 index 0000000..065be9f --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/assembly/dist/go.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +MX=512M +java -Xmx${MX} -Xms${MX} -jar ${project.build.finalName}.jar "$@" \ No newline at end of file diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/EugeneEditorApplicationContext.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/EugeneEditorApplicationContext.java new file mode 100644 index 0000000..d23a2e9 --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/EugeneEditorApplicationContext.java @@ -0,0 +1,77 @@ +package org.nuiton.eugene.editor.application; + +import org.nuiton.eugene.editor.application.config.EugeneEditorConfig; +import org.nuiton.eugene.models.object.ObjectModel; +import org.nuiton.eugene.models.stereotype.AggregateStereotypeDefinitionProvider; +import org.nuiton.eugene.models.tagvalue.AggregateTagValueDefinitionProvider; +import org.nuiton.i18n.I18n; +import org.nuiton.i18n.init.DefaultI18nInitializer; + +import javax.swing.ActionMap; +import java.util.Locale; + +/** + * Created on 15/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class EugeneEditorApplicationContext { + + protected final EugeneEditorConfig config; + protected final ClassLoader classLoader; + protected final ObjectModel objectModel; + protected final Object lock; + protected final ActionMap actionMap; + protected final ModelExtensionHelper modelExtensionHelper; + protected final ModelHelper modelHelper; + + public EugeneEditorApplicationContext(EugeneEditorConfig config, + ClassLoader classLoader, + AggregateTagValueDefinitionProvider tagValueDefinitionProvider, + AggregateStereotypeDefinitionProvider stereotypeDefinitionProvider, + ObjectModel objectModel) { + + I18n.init(new DefaultI18nInitializer("EugeneEditor-i18n"), Locale.FRANCE); + + this.config = config; + this.classLoader = classLoader; + this.modelExtensionHelper = new ModelExtensionHelper(tagValueDefinitionProvider, stereotypeDefinitionProvider); + this.modelHelper = new ModelHelper(objectModel); + this.objectModel = objectModel; + this.lock = new Object(); + this.actionMap = new ActionMap(); + + } + + public EugeneEditorConfig getConfig() { + return config; + } + + public ModelExtensionHelper getModelExtensionHelper() { + return modelExtensionHelper; + } + + public ModelHelper getModelHelper() { + return modelHelper; + } + + public ObjectModel getObjectModel() { + return objectModel; + } + + public ActionMap getActionMap() { + return actionMap; + } + + public void lock() throws InterruptedException { + synchronized (lock) { + lock.wait(); + } + } + + public void unlock() { + synchronized (lock) { + lock.notifyAll(); + } + } +} diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ModelExtensionHelper.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ModelExtensionHelper.java new file mode 100644 index 0000000..a2451b5 --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ModelExtensionHelper.java @@ -0,0 +1,161 @@ +package org.nuiton.eugene.editor.application; + +import org.nuiton.eugene.models.object.ObjectModel; +import org.nuiton.eugene.models.object.ObjectModelAttribute; +import org.nuiton.eugene.models.object.ObjectModelClassifier; +import org.nuiton.eugene.models.object.ObjectModelEnumeration; +import org.nuiton.eugene.models.object.ObjectModelInterface; +import org.nuiton.eugene.models.object.ObjectModelOperation; +import org.nuiton.eugene.models.object.ObjectModelPackage; +import org.nuiton.eugene.models.stereotype.AggregateStereotypeDefinitionProvider; +import org.nuiton.eugene.models.stereotype.StereotypeDefinition; +import org.nuiton.eugene.models.stereotype.StereotypeDefinitionProvider; +import org.nuiton.eugene.models.tagvalue.AggregateTagValueDefinitionProvider; +import org.nuiton.eugene.models.tagvalue.TagValueDefinition; +import org.nuiton.eugene.models.tagvalue.TagValueDefinitionProvider; + +import java.util.Arrays; +import java.util.Map; +import java.util.Set; +import java.util.TreeMap; +import java.util.stream.Collectors; + +/** + * Created on 16/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class ModelExtensionHelper { + + private final AggregateTagValueDefinitionProvider tagValueDefinitionProvider; + private final AggregateStereotypeDefinitionProvider stereotypeDefinitionProvider; + + private final Map<String, TagValueDefinition> modelTagValues; + private final Map<String, TagValueDefinition> packageTagValues; + private final Map<String, TagValueDefinition> classTagValues; + private final Map<String, TagValueDefinition> interfaceTagValues; + private final Map<String, TagValueDefinition> enumerationTagValues; + private final Map<String, TagValueDefinition> attributeTagValues; + private final Map<String, TagValueDefinition> operationTagValues; + + private final Map<String, StereotypeDefinition> modelStereotypes; + private final Map<String, StereotypeDefinition> packageStereotypes; + private final Map<String, StereotypeDefinition> classStereotypes; + private final Map<String, StereotypeDefinition> interfaceStereotypes; + private final Map<String, StereotypeDefinition> enumerationStereotypes; + private final Map<String, StereotypeDefinition> attributeStereotypes; + private final Map<String, StereotypeDefinition> operationStereotypes; + + public ModelExtensionHelper(AggregateTagValueDefinitionProvider tagValueDefinitionProvider, + AggregateStereotypeDefinitionProvider stereotypeDefinitionProvider) { + this.tagValueDefinitionProvider = tagValueDefinitionProvider; + this.stereotypeDefinitionProvider = stereotypeDefinitionProvider; + this.modelStereotypes = filterStereotypes(stereotypeDefinitionProvider, ObjectModel.class); + this.packageStereotypes = filterStereotypes(stereotypeDefinitionProvider, ObjectModelPackage.class); + this.classStereotypes = filterStereotypes(stereotypeDefinitionProvider, ObjectModelClassifier.class); + this.interfaceStereotypes = filterStereotypes(stereotypeDefinitionProvider, ObjectModelInterface.class); + this.enumerationStereotypes = filterStereotypes(stereotypeDefinitionProvider, ObjectModelEnumeration.class); + this.attributeStereotypes = filterStereotypes(stereotypeDefinitionProvider, ObjectModelAttribute.class); + this.operationStereotypes = filterStereotypes(stereotypeDefinitionProvider, ObjectModelOperation.class); + this.modelTagValues = filterTagValues(tagValueDefinitionProvider, ObjectModel.class); + this.packageTagValues = filterTagValues(tagValueDefinitionProvider, ObjectModelPackage.class); + this.classTagValues = filterTagValues(tagValueDefinitionProvider, ObjectModelClassifier.class); + this.interfaceTagValues = filterTagValues(tagValueDefinitionProvider, ObjectModelInterface.class); + this.enumerationTagValues = filterTagValues(tagValueDefinitionProvider, ObjectModelEnumeration.class); + this.attributeTagValues = filterTagValues(tagValueDefinitionProvider, ObjectModelAttribute.class); + this.operationTagValues = filterTagValues(tagValueDefinitionProvider, ObjectModelOperation.class); + + } + + public AggregateTagValueDefinitionProvider getTagValueDefinitionProvider() { + return tagValueDefinitionProvider; + } + + public AggregateStereotypeDefinitionProvider getStereotypeDefinitionProvider() { + return stereotypeDefinitionProvider; + } + + public Map<String, StereotypeDefinition> getModelStereotypes() { + return modelStereotypes; + } + + public Map<String, StereotypeDefinition> getPackageStereotypes() { + return packageStereotypes; + } + + public Map<String, StereotypeDefinition> getClassStereotypes() { + return classStereotypes; + } + + public Map<String, StereotypeDefinition> getInterfaceStereotypes() { + return interfaceStereotypes; + } + + public Map<String, StereotypeDefinition> getEnumerationStereotypes() { + return enumerationStereotypes; + } + + public Map<String, StereotypeDefinition> getAttributeStereotypes() { + return attributeStereotypes; + } + + public Map<String, StereotypeDefinition> getOperationStereotypes() { + return operationStereotypes; + } + + public Map<String, TagValueDefinition> getModelTagValues() { + return modelTagValues; + } + + public Map<String, TagValueDefinition> getPackageTagValues() { + return packageTagValues; + } + + public Map<String, TagValueDefinition> getClassTagValues() { + return classTagValues; + } + + public Map<String, TagValueDefinition> getInterfaceTagValues() { + return interfaceTagValues; + } + + public Map<String, TagValueDefinition> getEnumerationTagValues() { + return enumerationTagValues; + } + + public Map<String, TagValueDefinition> getAttributeTagValues() { + return attributeTagValues; + } + + public Map<String, TagValueDefinition> getOperationTagValues() { + return operationTagValues; + } + + protected <O> Map<String, StereotypeDefinition> filterStereotypes(AggregateStereotypeDefinitionProvider stereotypeDefinitionProvider, Class<O> type) { + + Map<String, StereotypeDefinition> allDefinitions = new TreeMap<>(); + for (StereotypeDefinitionProvider definitionProvider : stereotypeDefinitionProvider) { + + Set<Map.Entry<String, StereotypeDefinition>> definitions = definitionProvider.getDefinition().entrySet().stream() + .filter(d -> Arrays.asList(d.getValue().target()).contains(type)) + .collect(Collectors.toSet()); + definitions.forEach(e -> allDefinitions.put(e.getKey(), e.getValue())); + } + return allDefinitions; + } + + protected <O> Map<String, TagValueDefinition> filterTagValues(AggregateTagValueDefinitionProvider tagValueDefinitionProvider, Class<O> type) { + + Map<String, TagValueDefinition> allDefinitions = new TreeMap<>(); + for (TagValueDefinitionProvider definitionProvider : tagValueDefinitionProvider) { + + Set<Map.Entry<String, TagValueDefinition>> definitions = definitionProvider.getDefinition().entrySet().stream() + .filter(d -> Arrays.asList(d.getValue().target()).contains(type)) + .collect(Collectors.toSet()); + definitions.forEach(e -> allDefinitions.put(e.getKey(), e.getValue())); + } + return allDefinitions; + } + + +} diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ModelHelper.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ModelHelper.java new file mode 100644 index 0000000..9b50184 --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ModelHelper.java @@ -0,0 +1,66 @@ +package org.nuiton.eugene.editor.application; + +import org.nuiton.eugene.models.object.ObjectModel; +import org.nuiton.eugene.models.object.ObjectModelClass; +import org.nuiton.eugene.models.object.ObjectModelInterface; + +import java.util.Set; +import java.util.stream.Collectors; + +/** + * Created on 17/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class ModelHelper { + + private final ObjectModel model; + + public ModelHelper(ObjectModel model) { + this.model = model; + } + + public Set<String> getAllClasses() { + return model.getClasses().stream().map(ObjectModelClass::getQualifiedName).collect(Collectors.toSet()); + } + + public Set<String> getAllClassesWithJava() { + Set<String> result = getAllClasses(); + result.add("byte"); + result.add("boolean"); + result.add("char"); + result.add("int"); + result.add("long"); + result.add("float"); + result.add("double"); + result.add("void"); + result.add("Byte"); + result.add("Boolean"); + result.add("Char"); + result.add("Int"); + result.add("Long"); + result.add("Float"); + result.add("Double"); + result.add("java.lang.Byte"); + result.add("java.lang.Boolean"); + result.add("java.lang.Character"); + result.add("java.lang.Integer"); + result.add("java.lang.Long"); + result.add("java.lang.Float"); + result.add("java.lang.Double"); + result.add("String"); + result.add("java.lang.String"); + result.add("java.util.Date"); + result.add("java.sql.Timestamp"); + result.add("java.sql.Time"); + return result; + } + + public Set<String> getAllInterfaces() { + return model.getInterfaces().stream().map(ObjectModelInterface::getQualifiedName).collect(Collectors.toSet()); + } + + public ObjectModel getModel() { + return model; + } +} diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/config/EugeneEditorConfig.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/config/EugeneEditorConfig.java new file mode 100644 index 0000000..fe6f97e --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/config/EugeneEditorConfig.java @@ -0,0 +1,23 @@ +package org.nuiton.eugene.editor.application.config; + +import com.google.common.base.Charsets; +import org.nuiton.config.ApplicationConfig; +import org.nuiton.config.ArgumentsParserException; + +/** + * Created on 15/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class EugeneEditorConfig extends GeneratedEugeneEditorConfig { + + public EugeneEditorConfig(String... args) throws ArgumentsParserException { + + ApplicationConfig delegate = get(); + delegate.setEncoding(Charsets.UTF_8.name()); + delegate.setConfigFileName("EugeneEditor.conf"); + delegate.parse(args); + + } + +} diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/config/EugeneEditorConfigOption.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/config/EugeneEditorConfigOption.java new file mode 100644 index 0000000..2ce2930 --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/config/EugeneEditorConfigOption.java @@ -0,0 +1,103 @@ +package org.nuiton.eugene.editor.application.config; + +import org.nuiton.config.ApplicationConfig; +import org.nuiton.config.ConfigOptionDef; + +import java.io.File; + +import static org.nuiton.i18n.I18n.n; + +/** + * Created on 15/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public enum EugeneEditorConfigOption implements ConfigOptionDef { + + /** le nom du fichier de configuration (sans le prefix .) */ + CONFIG_FILE( + String.class, ApplicationConfig.CONFIG_FILE_NAME, + n("eugene.editor.config.configFileName.description"), + null + ), + /** le repertoire de stoquage local */ + WORKING_DIRECTORY( + File.class, "eugene.editor.working.directory", + n("eugene.editor.config.workingDirectory.description"), + null + ), + /** le repertoire de stoquage local */ + MODEL_EXTENSION_FILE( + File.class, "eugene.editor.modelExtensionFile", + n("eugene.editor.config.modelExtensionFile.description"), + null + ); + + + /** + * Clef qui represente l'option (c'est celle enregistrée dans le fichier de + * configuration). + */ + protected final String key; + + /** Clef i18n de description de l'option */ + protected final String description; + + /** Type de l'option */ + protected final Class<?> type; + + /** Valeur par défaut de l'option */ + protected String defaultValue; + + EugeneEditorConfigOption(Class<?> type, String key, String description, String defaultValue) { + this.key = key; + this.description = description; + this.type = type; + this.defaultValue = defaultValue; + } + + @Override + public String getKey() { + return key; + } + + @Override + public String getDescription() { + return description; + } + + @Override + public Class<?> getType() { + return type; + } + + @Override + public String getDefaultValue() { + return defaultValue; + } + + @Override + public void setDefaultValue(String defaultValue) { + this.defaultValue = defaultValue; + } + + @Override + public boolean isTransient() { + // pour le moment on ne sauvegarde rien + return true; + } + + @Override + public void setTransient(boolean b) { + } + + @Override + public boolean isFinal() { + return false; + } + + @Override + public void setFinal(boolean b) { + } + +} diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/ContentUIInitializer.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/ContentUIInitializer.java new file mode 100644 index 0000000..e05c029 --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/ContentUIInitializer.java @@ -0,0 +1,223 @@ +package org.nuiton.eugene.editor.application.ui; + +import com.google.common.collect.ImmutableMap; +import jaxx.runtime.swing.editor.EnumEditor; +import jaxx.runtime.swing.editor.NumberEditor; +import jaxx.runtime.swing.renderer.EnumEditorRenderer; +import org.apache.commons.lang3.BooleanUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.reflect.ConstructorUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.eugene.editor.application.ui.content.ContentUI; +import org.nuiton.jaxx.application.bean.JavaBeanObjectUtil; + +import javax.swing.Action; +import javax.swing.Icon; +import javax.swing.JButton; +import javax.swing.JCheckBox; +import javax.swing.JComponent; +import javax.swing.JLabel; +import javax.swing.JTextField; +import javax.swing.SwingUtilities; +import javax.swing.text.JTextComponent; +import java.awt.Component; +import java.awt.event.FocusAdapter; +import java.awt.event.FocusEvent; +import java.awt.event.KeyAdapter; +import java.awt.event.KeyEvent; +import java.lang.reflect.InvocationTargetException; +import java.util.EnumSet; +import java.util.LinkedHashMap; +import java.util.Map; + +/** + * Created on 16/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class ContentUIInitializer { + + public static final String CLIENT_PROPERTY_PROPERTY_NAME = "property"; + /** Logger. */ + private static final Log log = LogFactory.getLog(ContentUIInitializer.class); + private final Map<Class, Callback> callbacks; + + public ContentUIInitializer(Map<Class, Callback> callbacks) { + this.callbacks = callbacks; + } + + public static <U extends ContentUI> ContentUIInitializer newInitializer() { + + return ContentUIInitializer.<U>builder() + .addCallback(JButton.class, (ui, editor) -> { + + String actionId = editor.getName(); + + String actionFqn = ui.getClass().getPackage().getName() + ".actions." + StringUtils.capitalize(actionId) + "Action"; + + try { + Class<? extends Action> aClass = (Class<? extends Action>) Class.forName(actionFqn); + if (log.isDebugEnabled()) { + log.debug("Found action: " + actionFqn); + } + Action action = ConstructorUtils.invokeConstructor(aClass, ui); + Icon icon = editor.getIcon(); + if (icon != null) { + action.putValue(Action.SMALL_ICON, icon); + } + String text = editor.getText(); + if (text != null) { + action.putValue(Action.NAME, text); + } + String tip = editor.getToolTipText(); + if (tip != null) { + action.putValue(Action.SHORT_DESCRIPTION, tip); + } + action.setEnabled(editor.isEnabled()); + editor.setAction(action); + } catch (ClassNotFoundException e) { + // no action foud + } catch (NoSuchMethodException | InstantiationException | InvocationTargetException | IllegalAccessException e) { + + //TODO use a specialized exception + throw new RuntimeException("Could not init action: " + actionId, e); + } + }) + .addCallback(NumberEditor.class, (ui, editor) -> { + if (log.isDebugEnabled()) { + log.debug("init number editor " + editor.getName()); + } + editor.init(); + }) + .addCallback(JLabel.class, (ui, editor) -> { + String name = editor.getName(); + if (name != null && name.endsWith("Label")) { + name = StringUtils.removeEnd(name, "Label"); + + Component objectById = (Component) ui.getObjectById(name); + if (objectById != null) { + + if (log.isDebugEnabled()) { + log.debug("Set labelFor " + objectById.getName()); + } + editor.setLabelFor(objectById); + } + } + }) + .addCallback(JTextField.class, (ui, editor) -> { + addAutoSelectOnFocus(editor); + + String propertyName = (String) editor.getClientProperty(CLIENT_PROPERTY_PROPERTY_NAME); + if (propertyName != null) { + editor.addKeyListener(new KeyAdapter() { + + @Override + public void keyReleased(KeyEvent e) { + JTextField source = (JTextField) e.getSource(); + String text = source.getText(); + JavaBeanObjectUtil.setProperty(ui.getModel(), propertyName, text); + } + }); + } + + }) + .addCallback(JCheckBox.class, (ui, editor) -> { + if (log.isDebugEnabled()) { + log.debug("init simple boolean editor " + editor.getName()); + } + final String propertyName = (String) editor.getClientProperty(CLIENT_PROPERTY_PROPERTY_NAME); + if (propertyName != null) { + editor.addItemListener(event -> { + Boolean newValue = ((JCheckBox) event.getSource()).isSelected(); + JavaBeanObjectUtil.setProperty(ui.getModel(), propertyName, newValue); + }); + } + }) + .addCallback(EnumEditor.class, (ui, editor) -> { + if (log.isDebugEnabled()) { + log.debug("init enumEditor editor " + editor.getName()); + } + ImmutableMap.Builder<Enum, String> labelsBuilder = ImmutableMap.builder(); + for (Object e : EnumSet.allOf(editor.getType())) { + labelsBuilder.put((Enum) e, e.toString()); + } + editor.setRenderer(new EnumEditorRenderer<>(labelsBuilder.build())); + }) + + .build(); + + } + + public static <U extends ContentUI> Builder<U> builder() { + return new Builder<>(); + } + + protected static void addAutoSelectOnFocus(JTextComponent jTextField) { + jTextField.addFocusListener(new FocusAdapter() { + + @Override + public void focusGained(final FocusEvent e) { + SwingUtilities.invokeLater(() -> { + JTextField source = (JTextField) e.getSource(); + source.selectAll(); + }); + + } + }); + } + + public <U extends ContentUI> U initUI(U ui) { + + if (log.isDebugEnabled()) { + log.debug("ui " + getClass()); + } + + for (String name : ui.get$objectMap().keySet()) { + Object o = ui.getObjectById(name); + + if (o == null) { + continue; + } + if (o instanceof Component) { + + Component o1 = (Component) o; + Callback<U, Component> callback = callbacks.get(o1.getClass()); + if (callback != null) { + if (log.isDebugEnabled()) { + log.debug("Found callback for component: " + o1.getName() + " → " + callback); + } + callback.onComponentFound(ui, o1); + } + } + + } + + return ui; + } + + protected boolean isAutoSelectOnFocus(JComponent comp) { + Boolean selectOnFocus = (Boolean) comp.getClientProperty("selectOnFocus"); + return BooleanUtils.isTrue(selectOnFocus); + } + + interface Callback<U extends ContentUI, C extends Component> { + + void onComponentFound(U ui, C component); + } + + public static class Builder<U extends ContentUI> { + + protected final Map<Class, Callback> callbacks = new LinkedHashMap<>(); + + public <C extends Component> Builder<U> addCallback(Class<C> type, Callback<U, C> callback) { + callbacks.put(type, callback); + return this; + } + + public ContentUIInitializer build() { + return new ContentUIInitializer(callbacks); + } + } + +} diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/ContentUIManager.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/ContentUIManager.java new file mode 100644 index 0000000..885ece1 --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/ContentUIManager.java @@ -0,0 +1,55 @@ +package org.nuiton.eugene.editor.application.ui; + +import org.nuiton.eugene.editor.application.ui.content.AttributeContentUI; +import org.nuiton.eugene.editor.application.ui.content.ClassContentUI; +import org.nuiton.eugene.editor.application.ui.content.ContentUI; +import org.nuiton.eugene.editor.application.ui.content.EnumerationContentUI; +import org.nuiton.eugene.editor.application.ui.content.InterfaceContentUI; +import org.nuiton.eugene.editor.application.ui.content.ModelContentUI; +import org.nuiton.eugene.editor.application.ui.content.OperationContentUI; +import org.nuiton.eugene.editor.application.ui.content.PackageContentUI; +import org.nuiton.eugene.editor.application.ui.tree.node.AttributeNode; +import org.nuiton.eugene.editor.application.ui.tree.node.ClassNode; +import org.nuiton.eugene.editor.application.ui.tree.node.EnumerationNode; +import org.nuiton.eugene.editor.application.ui.tree.node.InterfaceNode; +import org.nuiton.eugene.editor.application.ui.tree.node.ModelNode; +import org.nuiton.eugene.editor.application.ui.tree.node.NodeSupport; +import org.nuiton.eugene.editor.application.ui.tree.node.OperationNode; +import org.nuiton.eugene.editor.application.ui.tree.node.PackageNode; + +import java.util.Collections; +import java.util.Map; +import java.util.Objects; +import java.util.TreeMap; + +/** + * Created on 16/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class ContentUIManager { + + protected final Map<String, ContentUI> contents; + + public ContentUIManager(EugeneEditorUI ui) { + + Map<String, ContentUI> contents = new TreeMap<>(); + + ContentUIInitializer initializer = ContentUIInitializer.newInitializer(); + + contents.put(ModelNode.class.getName(), initializer.initUI(new ModelContentUI(ui))); + contents.put(PackageNode.class.getName(), initializer.initUI(new PackageContentUI(ui))); + contents.put(ClassNode.class.getName(), initializer.initUI(new ClassContentUI(ui))); + contents.put(InterfaceNode.class.getName(), initializer.initUI(new InterfaceContentUI(ui))); + contents.put(EnumerationNode.class.getName(), initializer.initUI(new EnumerationContentUI(ui))); + contents.put(AttributeNode.class.getName(), initializer.initUI(new AttributeContentUI(ui))); + contents.put(OperationNode.class.getName(), initializer.initUI(new OperationContentUI(ui))); + this.contents = Collections.unmodifiableMap(contents); + + } + + public <M, N extends NodeSupport<M>> ContentUI<N> getContent(N node) { + Objects.requireNonNull(node); + return contents.get(node.getClass().getName()); + } +} diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/EugeneEditorCommon.jcss b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/EugeneEditorCommon.jcss new file mode 100644 index 0000000..a133fec --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/EugeneEditorCommon.jcss @@ -0,0 +1,26 @@ + +JToolBar { + borderPainted:false; + floatable:false; + opaque:false; +} + +JTabbedPane { + _notBlocking: true; +} + +FilterableDoubleList { + showDecorator:false; + showReset:true; + showSelectPopupEnabled: true; + filterable:false; + _notBlocking: true; +} + +BeanComboBox { + showReset:true; +} + +BlockingLayerUI { + acceptedComponentTypes: {javax.swing.JScrollBar.class}; +} diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/EugeneEditorUI.jaxx b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/EugeneEditorUI.jaxx new file mode 100644 index 0000000..87588ba --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/EugeneEditorUI.jaxx @@ -0,0 +1,96 @@ +<JFrame id='mainFrame' width='1600' height='900' + onWindowClosing='new QuitApplicationAction(this).actionPerformed(null)'> + + <import> + + jaxx.runtime.swing.CardLayout2 + jaxx.runtime.swing.CardLayout2Ext + jaxx.runtime.swing.BlockingLayerUI + jaxx.runtime.swing.StatusMessagePanel + jaxx.runtime.validator.swing.SwingValidatorMessageTableModel + + org.nuiton.eugene.editor.application.ui.actions.ChangeApplicationLocaleAction + org.nuiton.eugene.editor.application.ui.actions.SaveProjectAction + org.nuiton.eugene.editor.application.ui.actions.GotoSiteAction + org.nuiton.eugene.editor.application.ui.actions.QuitApplicationAction + org.nuiton.eugene.editor.application.ui.actions.ShowAboutAction + org.nuiton.eugene.editor.application.ui.actions.ShowConfigAction + + org.nuiton.eugene.editor.application.ui.tree.EugeneEditorTree + + org.jdesktop.swingx.JXTitledPanel + + java.util.Locale + + javax.swing.UIManager + + </import> + + <script><![CDATA[ +public boolean canQuitContent() { + return handler.canQuitContent(this); +} +]]> </script> + + <Boolean id='busy' javaBean='false'/> + <EugeneEditorUIMode id='mode' javaBean="EugeneEditorUIMode.PROJECT"/> + + <CardLayout2 id='contentLayout'/> + <CardLayout2Ext id='bodyLayout' constructorParams='this, "body"'/> + <BlockingLayerUI id='busyBlockLayerUI'/> + + <!-- menu --> + <JMenuBar id='menu'> + + <JMenu id='menuFile'> + <JMenuItem id='menuFileSaveProject'/> + <JMenuItem id='menuFileQuitApplication'/> + </JMenu> + + <JMenu id='menuConfiguration'> + <JMenu id='menuLanguage'> + <JMenuItem id='menuLanguageUK'/> + <JMenuItem id='menuLanguageFR'/> + </JMenu> + <JSeparator/> + <JMenuItem id='menuShowConfiguration'/> + </JMenu> + + <JMenu id='menuHelp'> + <JMenuItem id='menuHelpSite'/> + <JMenuItem id='menuHelpAbout'/> + </JMenu> + + </JMenuBar> + + <JPanel id='body' constraints="BorderLayout.CENTER" decorator='boxed'> + + <JSplitPane id='projectPane' constraints="EugeneEditorUIMode.PROJECT.name()"> + + <JXTitledPanel id='projectNavigationView'> + <JScrollPane id='projectNavigationScrollPane'> + <!--columnHeaderView='{navigationTreeHeader}'>--> + <EugeneEditorTree id="projectNavigation" constructorParams="this"/> + <!--<BeanTreeHeader id='navigationTreeHeader' tree='{navigation}'/>--> + </JScrollPane> + </JXTitledPanel> + + <JSplitPane id='splitpane2'> + + <JPanel id="content"/> + + <JXTitledPanel id='messageView'> + <JScrollPane> + <JTable id='errorTable'/> + </JScrollPane> + </JXTitledPanel> + + </JSplitPane> + + </JSplitPane> + + </JPanel> + + <StatusMessagePanel id='status' constraints="BorderLayout.SOUTH"/> + +</JFrame> \ No newline at end of file diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/EugeneEditorUI.jcss b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/EugeneEditorUI.jcss new file mode 100644 index 0000000..5fcc0d8 --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/EugeneEditorUI.jcss @@ -0,0 +1,164 @@ +/* + * #%L + * ObServe :: Swing + * %% + * Copyright (C) 2008 - 2010 IRD, Codelutin, Tony Chemit + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +JToolBar { + borderPainted: false; + floatable: false; + opaque: false; +} + +JSplitPane { + oneTouchExpandable: true; + continuousLayout: false; + dividerSize: 6; +} + +#mainFrame { + defaultCloseOperation: "do_nothing_on_close"; + /*iconImage: {SwingUtil.createImageIcon("logo-OT_web.png").getImage()};*/ +} + +#menu { + enabled: {!isBusy()}; +} + +#menuFile { + text: "eugene.editor.menu.file"; + mnemonic: F; + /*enabled: {getHandler().acceptMode(getMode(), !isBusy(), !isMainFromSynchro(), ObserveUIMode.NO_DB, ObserveUIMode.DB)};*/ +} + +#menuFileSaveProject { + action: {new SaveProjectAction(this)}; +} + +#menuFileQuitApplication { + action: {new QuitApplicationAction(this)}; +} + + +#menuConfiguration { + text: "eugene.editor.menu.configuration"; + toolTipText: "eugene.editor.menu.configuration.tip"; + mnemonic: C; + /*enabled: {getHandler().acceptMode(getMode(), !isBusy(), !isMainFromSynchro(), ObserveUIMode.DB, ObserveUIMode.NO_DB)};*/ +} + +#menuShowConfiguration { + action: {new ShowConfigAction(this)}; +} + +#menuLanguage { + text: "eugene.editor.menu.locale"; + toolTipText: "eugene.editor.menu.locale"; + actionIcon: "translate"; + mnemonic: L; + /*enabled: {getHandler().acceptMode(getMode(), !isBusy(), !isMainFromSynchro(), ObserveUIMode.DB, ObserveUIMode.NO_DB)};*/ +} + +#menuLanguageFR { + action: {new ChangeApplicationLocaleAction(this, Locale.FRANCE, t("eugene.editor.action.locale.fr"), t("eugene.editor.action.locale.fr.tip"))}; + /*enabled: {!getHandler().acceptLocale(getConfig().getLocale(), "fr_FR")};*/ +} + +#menuLanguageUK { + action: {new ChangeApplicationLocaleAction(this, Locale.UK, t("eugene.editor.action.locale.uk"), t("eugene.editor.action.locale.uk.tip"))}; + /*enabled: {!getHandler().acceptLocale(getConfig().getLocale(), "en_GB")};*/ +} + +#menuHelp { + text: "eugene.editor.menu.help"; + mnemonic: A; + enabled: {!isBusy()}; +} + +#menuHelpSite { + action: {new GotoSiteAction(this)}; +} + +#menuHelpAbout { + action: {new ShowAboutAction(this)}; +} + +#errorTable { + rowSelectionAllowed: true; + autoCreateRowSorter: true; + autoResizeMode: 2; + cellSelectionEnabled: false; + selectionMode: 0; + minimumSize: {SwingUtil.newMinDimension()}; + model: {getContextValue(SwingValidatorMessageTableModel.class)}; +} + +#busyBlockLayerUI { + useIcon: false; + blockingColor: {UIManager.getColor("BlockingLayerUI.blockingColor")}; + block: {isBusy()}; + /*acceptedComponentNames: {SwingUtil.ACCEPTABLE_COMPONENTS};*/ +} + +#projectPane { + orientation: {JSplitPane.HORIZONTAL_SPLIT}; + resizeWeight: 0.0; +} + +#splitpane2 { + orientation: {JSplitPane.VERTICAL_SPLIT}; + resizeWeight: 1.0; +} + +#contentLayout { + useOnlyVisibleComponentDimension: true; +} + +#projectNavigationView { + title: "eugene.editor.title.view.navigation"; +} + +#projectNavigation { + minimumSize: {SwingUtil.newMinDimension()}; +} + +#projectNavigationTreeHeader { + showSelectActions: false; +} + +#messageView { + title: "eugene.editor.view.message"; +} + +#bodyLayout { + selected: {getMode().name()}; +} + +#body { + layout: {bodyLayout}; +} + +#content { + layout: {contentLayout}; +} + +#status { + showBusy: {true}; + busy: {isBusy()}; +} diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/EugeneEditorUIHandler.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/EugeneEditorUIHandler.java new file mode 100644 index 0000000..c76bdb1 --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/EugeneEditorUIHandler.java @@ -0,0 +1,44 @@ +package org.nuiton.eugene.editor.application.ui; + +import jaxx.runtime.spi.UIHandler; +import jaxx.runtime.validator.swing.SwingValidatorMessageTableModel; +import org.nuiton.eugene.editor.application.EugeneEditorApplicationContext; +import org.nuiton.eugene.editor.application.ui.tree.TreeModelBuilder; +import org.nuiton.eugene.models.object.ObjectModel; + +import javax.swing.SwingUtilities; +import javax.swing.tree.TreeModel; + +/** + * Created on 16/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.0 + */ +public class EugeneEditorUIHandler implements UIHandler<EugeneEditorUI> { + + @Override + public void beforeInit(EugeneEditorUI ui) { + + SwingValidatorMessageTableModel errorModel = new SwingValidatorMessageTableModel(); + ui.setContextValue(errorModel); + + ObjectModel objectModel = ui.getContextValue(EugeneEditorApplicationContext.class).getObjectModel(); + + TreeModel treeModel = TreeModelBuilder.build(objectModel); + ui.setContextValue(treeModel); + } + + @Override + public void afterInit(EugeneEditorUI ui) { + + SwingUtilities.invokeLater(() -> ui.getProjectNavigation().setSelectionRow(0)); + + } + + public boolean canQuitContent(EugeneEditorUI ui) { + + //TODO vérifier que le content est valide + return true; + } +} diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/EugeneEditorUIMode.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/EugeneEditorUIMode.java new file mode 100644 index 0000000..918d895 --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/EugeneEditorUIMode.java @@ -0,0 +1,11 @@ +package org.nuiton.eugene.editor.application.ui; + +/** + * Created on 16/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public enum EugeneEditorUIMode { + + PROJECT, CONFIG +} diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/actions/ActionSupport.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/actions/ActionSupport.java new file mode 100644 index 0000000..889a696 --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/actions/ActionSupport.java @@ -0,0 +1,23 @@ +package org.nuiton.eugene.editor.application.ui.actions; + +import org.nuiton.eugene.editor.application.ui.EugeneEditorUI; + +import javax.swing.AbstractAction; + +/** + * Created on 16/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public abstract class ActionSupport extends AbstractAction { + + private final EugeneEditorUI ui; + + public ActionSupport(EugeneEditorUI ui) { + this.ui = ui; + } + + protected EugeneEditorUI getUi() { + return ui; + } +} diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/actions/ChangeApplicationLocaleAction.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/actions/ChangeApplicationLocaleAction.java new file mode 100644 index 0000000..9e20a6c --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/actions/ChangeApplicationLocaleAction.java @@ -0,0 +1,53 @@ +package org.nuiton.eugene.editor.application.ui.actions; + +import jaxx.runtime.SwingUtil; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.eugene.editor.application.EugeneEditorApplicationContext; +import org.nuiton.eugene.editor.application.config.EugeneEditorConfig; +import org.nuiton.eugene.editor.application.ui.EugeneEditorUI; + +import java.awt.event.ActionEvent; +import java.util.Locale; + +/** + * Created on 16/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class ChangeApplicationLocaleAction extends ActionSupport { + + /** Logger. */ + private static final Log log = LogFactory.getLog(ChangeApplicationLocaleAction.class); + + private final Locale newLocale; + + public ChangeApplicationLocaleAction(EugeneEditorUI ui, Locale newLocale, String name, String description) { + super(ui); + this.newLocale = newLocale; + putValue(NAME, name); + putValue(SMALL_ICON, SwingUtil.createActionIcon("i18n-" + newLocale.getLanguage())); + putValue(SHORT_DESCRIPTION, description); + putValue(MNEMONIC_KEY, (int) newLocale.getLanguage().toUpperCase().charAt(0)); + + } + + @Override + public void actionPerformed(ActionEvent e) { + + if (log.isInfoEnabled()) { + log.info("Changing application language..."); + } + boolean canContinue = true; + if (canContinue) { + + EugeneEditorConfig config = getUi().getContextValue(EugeneEditorApplicationContext.class).getConfig(); + + // sauvegarde de la nouvelle locale + //config.setLocale(newLocale); + + //ObserveUICallback.ui.run(); + } + + } +} diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/actions/GotoSiteAction.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/actions/GotoSiteAction.java new file mode 100644 index 0000000..2f7a26e --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/actions/GotoSiteAction.java @@ -0,0 +1,29 @@ +package org.nuiton.eugene.editor.application.ui.actions; + +import jaxx.runtime.SwingUtil; +import org.nuiton.eugene.editor.application.ui.EugeneEditorUI; + +import java.awt.event.ActionEvent; + +import static org.nuiton.i18n.I18n.t; + +/** + * Created on 16/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class GotoSiteAction extends ActionSupport { + + public GotoSiteAction(EugeneEditorUI ui) { + super(ui); + putValue(NAME, t("eugene.editor.action.site")); + putValue(SMALL_ICON, SwingUtil.createActionIcon("site")); + putValue(SHORT_DESCRIPTION, t("eugene.editor.action.site.tip")); + putValue(MNEMONIC_KEY, (int) 's'); + } + + @Override + public void actionPerformed(ActionEvent e) { + + } +} diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/actions/QuitApplicationAction.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/actions/QuitApplicationAction.java new file mode 100644 index 0000000..176253b --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/actions/QuitApplicationAction.java @@ -0,0 +1,33 @@ +package org.nuiton.eugene.editor.application.ui.actions; + +import jaxx.runtime.SwingUtil; +import org.nuiton.eugene.editor.application.EugeneEditorApplicationContext; +import org.nuiton.eugene.editor.application.ui.EugeneEditorUI; + +import java.awt.event.ActionEvent; + +import static org.nuiton.i18n.I18n.t; + +/** + * Created on 16/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class QuitApplicationAction extends ActionSupport { + + public QuitApplicationAction(EugeneEditorUI ui) { + super(ui); + putValue(NAME, t("eugene.editor.action.exit")); + putValue(SMALL_ICON, SwingUtil.createActionIcon("exit")); + putValue(SHORT_DESCRIPTION, t("eugene.editor.action.exit.tip")); + putValue(MNEMONIC_KEY, (int) 'q'); + } + + @Override + public void actionPerformed(ActionEvent e) { + + getUi().dispose(); + + getUi().getContextValue(EugeneEditorApplicationContext.class).unlock(); + } +} diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/actions/SaveProjectAction.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/actions/SaveProjectAction.java new file mode 100644 index 0000000..034c8ba --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/actions/SaveProjectAction.java @@ -0,0 +1,29 @@ +package org.nuiton.eugene.editor.application.ui.actions; + +import jaxx.runtime.SwingUtil; +import org.nuiton.eugene.editor.application.ui.EugeneEditorUI; + +import java.awt.event.ActionEvent; + +import static org.nuiton.i18n.I18n.t; + +/** + * Created on 16/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class SaveProjectAction extends ActionSupport { + + public SaveProjectAction(EugeneEditorUI ui) { + super(ui); + putValue(NAME, t("eugene.editor.action.saveProject")); + putValue(SMALL_ICON, SwingUtil.createActionIcon("save")); + putValue(SHORT_DESCRIPTION, t("eugene.editor.action.saveProject.tip")); + putValue(MNEMONIC_KEY, (int) 'e'); + } + + @Override + public void actionPerformed(ActionEvent e) { + + } +} diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/actions/ShowAboutAction.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/actions/ShowAboutAction.java new file mode 100644 index 0000000..55d4f0b --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/actions/ShowAboutAction.java @@ -0,0 +1,29 @@ +package org.nuiton.eugene.editor.application.ui.actions; + +import jaxx.runtime.SwingUtil; +import org.nuiton.eugene.editor.application.ui.EugeneEditorUI; + +import java.awt.event.ActionEvent; + +import static org.nuiton.i18n.I18n.t; + +/** + * Created on 16/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class ShowAboutAction extends ActionSupport { + + public ShowAboutAction(EugeneEditorUI ui) { + super(ui); + putValue(NAME, t("eugene.editor.action.showAbout")); + putValue(SMALL_ICON, SwingUtil.createActionIcon("about")); + putValue(SHORT_DESCRIPTION, t("eugene.editor.action.showAbout.tip")); + putValue(MNEMONIC_KEY, (int) 'p'); + } + + @Override + public void actionPerformed(ActionEvent e) { + + } +} diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/actions/ShowConfigAction.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/actions/ShowConfigAction.java new file mode 100644 index 0000000..a1a7087 --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/actions/ShowConfigAction.java @@ -0,0 +1,29 @@ +package org.nuiton.eugene.editor.application.ui.actions; + +import jaxx.runtime.SwingUtil; +import org.nuiton.eugene.editor.application.ui.EugeneEditorUI; + +import java.awt.event.ActionEvent; + +import static org.nuiton.i18n.I18n.t; + +/** + * Created on 16/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class ShowConfigAction extends ActionSupport { + + public ShowConfigAction(EugeneEditorUI ui) { + super(ui); + putValue(NAME, t("eugene.editor.action.showConfig")); + putValue(SMALL_ICON, SwingUtil.createActionIcon("config")); + putValue(SHORT_DESCRIPTION, t("eugene.editor.action.showConfig.tip")); + putValue(MNEMONIC_KEY, (int) 'c'); + } + + @Override + public void actionPerformed(ActionEvent e) { + + } +} diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/AttributeContentUI.jaxx b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/AttributeContentUI.jaxx new file mode 100644 index 0000000..b898689 --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/AttributeContentUI.jaxx @@ -0,0 +1,104 @@ +<org.jdesktop.swingx.JXTitledPanel id="attributeMainContent" implements="ContentUI<AttributeNode>" + styleClass="top"> + + <style source="ContentUI.jcss"/> + <import> + org.nuiton.eugene.editor.application.ui.content.Multiplicity + org.nuiton.eugene.editor.application.ui.tree.node.AttributeNode + </import> + <script><![CDATA[ +public void open(AttributeNode data) { handler.open(this, data); } +public void close() { handler.close(); } +]]> </script> + + <AttributeNode id="model" javaBean="null"/> + + <ButtonGroup id='visibilityMode'/> + <ButtonGroup id='aggregationMode'/> + + <JToolBar id="actions"> + <JButton id="createAttributeFromAttribute"/> + <JButton id="deleteAttributeFromAttribute"/> + </JToolBar> + + <JScrollPane> + + <org.jdesktop.swingx.JXTaskPaneContainer id="form"> + <org.jdesktop.swingx.JXTaskPane id="generalPane"> + <Table fill="both"> + <row> + <cell columns="2"> + <JLabel id="attributeNameLabel"/> + </cell> + <cell weightx="1"> + <JTextField id="attributeName" onKeyReleased="model.setName(attributeName.getText())"/> + </cell> + </row> + <row> + <cell columns="2"> + <JLabel id="attributeTypeLabel"/> + </cell> + <cell> + <JComboBox id="attributeType" genericType="String" onActionPerformed="model.setType((String)attributeType.getSelectedItem())"/> + </cell> + </row> + <row> + <cell columns="2"> + <JLabel id="attributeDefaultValueLabel"/> + </cell> + <cell weightx="1"> + <JTextField id="attributeDefaultValue"/> + </cell> + </row> + <row> + <cell columns="3"> + <JPanel id="visibility"> + <JRadioButton id="visibilityPublic" value="public" styleClass="visibilityMode"/> + <JRadioButton id="visibilityPackage" value="" styleClass="visibilityMode"/> + <JRadioButton id="visibilityProtected" value="protected" styleClass="visibilityMode"/> + <JRadioButton id="visibilityPrivate" value="private" styleClass="visibilityMode"/> + </JPanel> + </cell> + </row> + <row> + <cell> + <JLabel id="multiplicityLabel"/> + </cell> + <cell> + <JComboBox id="multiplicity" genericType="Multiplicity"/> + </cell> + <cell> + <JPanel id="aggregation"> + <JRadioButton id="aggregationAggregate" value="aggregate" styleClass="aggregationMode"/> + <JRadioButton id="aggregationCompose" value="compose" styleClass="aggregationMode"/> + <JRadioButton id="aggregationNone" value="none" styleClass="aggregationMode"/> + <JCheckBox id="bidi" constraints="BorderLayout.EAST"/> + </JPanel> + </cell> + </row> + </Table> + </org.jdesktop.swingx.JXTaskPane> + <org.jdesktop.swingx.JXTaskPane id="stereotypesAndTagValuesPane"> + <Table fill="both"> + <row> + <cell weightx="1"> + <JPanel id="stereotypes"> + <JLabel id="noStereotype"/> + </JPanel> + </cell> + </row> + <row> + <cell weightx="1"> + <JPanel id="tagValues"> + <JLabel id="noTagValue"/> + </JPanel> + </cell> + </row> + </Table> + + </org.jdesktop.swingx.JXTaskPane> + + </org.jdesktop.swingx.JXTaskPaneContainer> + </JScrollPane> + +</org.jdesktop.swingx.JXTitledPanel> \ No newline at end of file diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/AttributeContentUI.jcss b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/AttributeContentUI.jcss new file mode 100644 index 0000000..d521a84 --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/AttributeContentUI.jcss @@ -0,0 +1,69 @@ + +#attributeMainContent { + title:"eugene.editor.attribute"; +} + +#attributeNameLabel { + text:"eugene.editor.attribute.name"; +} + +#attributeName { + text:{getModel().getUserObject().getName()}; + _property:{"name"}; +} + +#attributeDefaultValueLabel { + text:"eugene.editor.attribute.defaultValue"; +} + +#attributeDefaultValue { + text:{getModel().getUserObject().getDefaultValue()}; + _property:{"defaultValue"}; +} + +#attributeTypeLabel { + text:"eugene.editor.attribute.type"; +} + +#attributeType { + selectedItem:{getModel().getUserObject().getType()}; + _property:{"type"}; +} + +#createAttributeFromAttribute { + text:"eugene.editor.create.attribute"; + actionIcon:add; +} + +#deleteAttributeFromAttribute { + text:"eugene.editor.delete.attribute"; + actionIcon:delete; +} + +#aggregationAggregate { + text:"eugene.editor.aggregation.aggregate"; + selected:{"aggregate".equals(aggregationMode.getSelectedValue())}; +} + +#aggregationCompose { + text:"eugene.editor.aggregation.compose"; + selected:{"compose".equals(aggregationMode.getSelectedValue())}; +} + +#aggregationNone { + text:"eugene.editor.aggregation.none"; + selected:{"none".equals(aggregationMode.getSelectedValue())}; +} + +#aggregation { + border: {new javax.swing.border.TitledBorder(t("eugene.editor.aggregation"))}; + layout: {new GridLayout(1, 0)}; +} + +.aggregationMode { + buttonGroup:"aggregationMode"; +} + +#bidi { + text:"eugene.editor.bidi"; +} diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/AttributeContentUIHandler.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/AttributeContentUIHandler.java new file mode 100644 index 0000000..9571351 --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/AttributeContentUIHandler.java @@ -0,0 +1,69 @@ +package org.nuiton.eugene.editor.application.ui.content; + +import jaxx.runtime.SwingUtil; +import org.nuiton.eugene.editor.application.ModelExtensionHelper; +import org.nuiton.eugene.editor.application.ModelHelper; +import org.nuiton.eugene.editor.application.ui.tree.node.AttributeNode; +import org.nuiton.eugene.models.object.ObjectModelAttribute; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +/** + * Created on 16/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class AttributeContentUIHandler extends ContenUIHandler<AttributeNode, AttributeContentUI> { + + @Override + public void beforeInit(AttributeContentUI ui) { + + } + + @Override + public void afterInit(AttributeContentUI ui) { + + ModelExtensionHelper helper = getApplicationContext(ui).getModelExtensionHelper(); + afterInit(ui, helper.getAttributeTagValues(), helper.getAttributeStereotypes()); + + } + + @Override + protected void open(AttributeContentUI ui, AttributeNode node) { + + ObjectModelAttribute data = node.getUserObject(); + + open(ui, node, data.getStereotypes(), data.getTagValues()); + ui.getVisibilityMode().setSelectedValue(data.getVisibility()); + + ModelHelper modelHelper = getApplicationContext(ui).getModelHelper(); + List<String> allClasses = new ArrayList<>(modelHelper.getAllClassesWithJava()); + Collections.sort(allClasses); + allClasses.add(0, null); + + SwingUtil.fillComboBox(ui.getAttributeType(), allClasses, data.getType()); + + List<Multiplicity> multiplicities = Arrays.asList(Multiplicity.values()); + + SwingUtil.fillComboBox(ui.getMultiplicity(), multiplicities, Multiplicity.valueOf(data.getMinMultiplicity(), data.getMaxMultiplicity())); + + ui.getAggregationMode().setSelectedValue("none"); + if (data.isAggregate()) { + + ui.getAggregationMode().setSelectedValue("aggregate"); + } + if (data.isComposite()) { + ui.getAggregationMode().setSelectedValue("compose"); + } + + ObjectModelAttribute reverseAttribute = data.getReverseAttribute(); + + ui.getBidi().setSelected(reverseAttribute != null && reverseAttribute.isNavigable()); + + ui.getAttributeDefaultValue().setText(data.getDefaultValue()); + + } +} diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ClassContentUI.jaxx b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ClassContentUI.jaxx new file mode 100644 index 0000000..3317648 --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ClassContentUI.jaxx @@ -0,0 +1,84 @@ +<org.jdesktop.swingx.JXTitledPanel id="classMainContent" implements="ContentUI<ClassNode>" styleClass="top"> + + <style source="ContentUI.jcss"/> + <import> + org.nuiton.eugene.editor.application.ui.tree.node.ClassNode + javax.swing.DefaultListModel + </import> + <script><![CDATA[ +public void open(ClassNode data) { handler.open(this, data); } +public void close() { handler.close(); } +]]> </script> + + <ClassNode id="model" javaBean="null"/> + + <JToolBar id="actions"> + <JButton id="createAttributeFromClass"/> + <JButton id="createOperationFromClass"/> + <JSeparator/> + <JButton id="createClassFromClass"/> + <JButton id="deleteClassFromClass"/> + </JToolBar> + + <org.jdesktop.swingx.JXTaskPaneContainer id="form"> + <org.jdesktop.swingx.JXTaskPane id="generalPane"> + <Table fill="both"> + <row> + <cell> + <JLabel id="classNameLabel"/> + </cell> + <cell weightx="1"> + <JTextField id="className" onKeyReleased="model.setName(className.getText())"/> + </cell> + </row> + <row> + <cell> + <JLabel id="superClassLabel"/> + </cell> + <cell weightx="1"> + <JComboBox id="superClass" genericType="String"/> + </cell> + </row> + <row> + <cell columns="2"> + + <JScrollPane id="interfacesScrollPane" columnHeaderView="{interfacesHeader}"> + <JList id="interfaces" genericType="String"/> + <JPanel id="interfacesHeader" layout="{new BorderLayout()}"> + <JComboBox id="interfacesHeaderType" constraints="BorderLayout.CENTER" genericType="String" + onItemStateChanged="addInterfaceFromClass.setEnabled(event.getStateChange() == ItemEvent.SELECTED)"/> + <JToolBar id="interfacesHeaderActions" constraints="BorderLayout.EAST"> + <JButton id="addInterfaceFromClass"/> + <JButton id="removeInterfaceFromClass"/> + </JToolBar> + </JPanel> + </JScrollPane> + + </cell> + </row> + </Table> + </org.jdesktop.swingx.JXTaskPane> + + <org.jdesktop.swingx.JXTaskPane id="stereotypesAndTagValuesPane"> + <Table fill="both"> + <row> + <cell weightx="1"> + <JPanel id="stereotypes"> + <JLabel id="noStereotype"/> + </JPanel> + </cell> + </row> + <row> + <cell weightx="1"> + <JPanel id="tagValues"> + <JLabel id="noTagValue"/> + </JPanel> + </cell> + </row> + </Table> + + </org.jdesktop.swingx.JXTaskPane> + + </org.jdesktop.swingx.JXTaskPaneContainer> + +</org.jdesktop.swingx.JXTitledPanel> \ No newline at end of file diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ClassContentUI.jcss b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ClassContentUI.jcss new file mode 100644 index 0000000..23a071c --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ClassContentUI.jcss @@ -0,0 +1,68 @@ + + +#classMainContent { + title:"eugene.editor.class"; +} + +#superClassLabel { + text:"eugene.editor.superClass"; +} + +#classNameLabel { + text:"eugene.editor.class.name"; +} + +#className { + text:{getModel().getUserObject().getName()}; + _property:{"name"}; +} + +#createClassFromClass { + text:"eugene.editor.create.class"; + actionIcon:add; +} + +#createAttributeFromClass { + text:"eugene.editor.create.attribute"; + actionIcon:add; +} + +#createOperationFromClass { + text:"eugene.editor.create.operation"; + actionIcon:add; +} + +#deleteClassFromClass { + text:"eugene.editor.delete.class"; + actionIcon:delete; +} + +#addInterfaceFromClass { + text:"eugene.editor.add.interface"; + actionIcon:add; + enabled:false; +} + +#removeInterfaceFromClass { + text:"eugene.editor.delete.interface"; + actionIcon:delete; + enabled:false; +} + +#interfaces { + model:{new DefaultListModel()}; +} + +#interfacesHeaderPanel { + layout: {new BorderLayout()}; +} + +#interfacesPane { + title:"eugene.editor.interfaces"; + icon:{SwingUtil.createIcon("type", "interface")}; +} + +#interfacesScrollPane { + horizontalScrollBarPolicy:{JScrollPane.HORIZONTAL_SCROLLBAR_NEVER}; + border: {new javax.swing.border.TitledBorder(t("eugene.editor.interfaces"))}; +} diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ClassContentUIHandler.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ClassContentUIHandler.java new file mode 100644 index 0000000..f4792bd --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ClassContentUIHandler.java @@ -0,0 +1,60 @@ +package org.nuiton.eugene.editor.application.ui.content; + +import jaxx.runtime.SwingUtil; +import org.nuiton.eugene.editor.application.ModelExtensionHelper; +import org.nuiton.eugene.editor.application.ModelHelper; +import org.nuiton.eugene.editor.application.ui.tree.node.ClassNode; +import org.nuiton.eugene.models.object.ObjectModelClass; + +import javax.swing.ListSelectionModel; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +/** + * Created on 16/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class ClassContentUIHandler extends ContenUIHandler<ClassNode, ClassContentUI> { + + @Override + public void beforeInit(ClassContentUI ui) { + + } + + @Override + public void afterInit(ClassContentUI ui) { + + ModelExtensionHelper helper = getApplicationContext(ui).getModelExtensionHelper(); + afterInit(ui, helper.getClassTagValues(), helper.getClassStereotypes()); + + ui.getInterfaces().getSelectionModel().addListSelectionListener(e -> ui.getRemoveInterfaceFromClass().setEnabled(!((ListSelectionModel) e.getSource()).isSelectionEmpty())); + + } + + @Override + protected void open(ClassContentUI ui, ClassNode node) { + + ObjectModelClass data = node.getUserObject(); + open(ui, node, data.getStereotypes(), data.getTagValues()); + + ModelHelper modelHelper = getApplicationContext(ui).getModelHelper(); + List<String> allClasses = new ArrayList<>(modelHelper.getAllClasses()); + Collections.sort(allClasses); + allClasses.add(0, null); + + String superClass = node.getSuperClass(); + + SwingUtil.fillComboBox(ui.getSuperClass(), allClasses, superClass); + + addInterfaces(ui, data.getInterfaces(), ui.getInterfaces(), allClasses); + + //TODO Supprimer toutes les classes qui héritent de celle ci + allClasses.remove(superClass); + SwingUtil.fillComboBox(ui.getInterfacesHeaderType(), allClasses, null); + ui.getInterfacesHeaderType().setSelectedItem(null); + + } + +} diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ContenUIHandler.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ContenUIHandler.java new file mode 100644 index 0000000..d4ba542 --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ContenUIHandler.java @@ -0,0 +1,154 @@ +package org.nuiton.eugene.editor.application.ui.content; + +import jaxx.runtime.SwingUtil; +import jaxx.runtime.spi.UIHandler; +import org.nuiton.eugene.editor.application.EugeneEditorApplicationContext; +import org.nuiton.eugene.editor.application.ui.tree.node.NodeSupport; +import org.nuiton.eugene.models.object.ObjectModelInterface; +import org.nuiton.eugene.models.stereotype.StereotypeDefinition; +import org.nuiton.eugene.models.tagvalue.TagValueDefinition; + +import javax.swing.JCheckBox; +import javax.swing.JLabel; +import javax.swing.JList; +import javax.swing.JPanel; +import javax.swing.JTextField; +import java.awt.GridLayout; +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; + +/** + * Created on 16/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public abstract class ContenUIHandler<M extends NodeSupport, U extends ContentUI<M>> implements UIHandler<U> { + + protected abstract void open(U ui, M data); + + protected void close() { + + } + + protected void afterInit(U ui, + Map<String, TagValueDefinition> availableTagValues, + Map<String, StereotypeDefinition> availableStereotypes) { + + Map<String, Object> $objectMap = ui.get$objectMap(); + if (!availableStereotypes.isEmpty()) { + + JPanel stereotypes = ui.getStereotypes(); + stereotypes.putClientProperty("stereotypes", availableStereotypes); + stereotypes.setLayout(new GridLayout(1, 0)); + stereotypes.removeAll(); + for (Map.Entry<String, StereotypeDefinition> entry : availableStereotypes.entrySet()) { + String stereotype = entry.getKey(); + JCheckBox b = new JCheckBox(); + b.setText(stereotype); + b.setToolTipText(entry.getValue().documentation()); + stereotypes.add(b); + $objectMap.put("stereotype-" + stereotype, b); + } + } + + if (!availableTagValues.isEmpty()) { + + JPanel tagValues = ui.getTagValues(); + tagValues.putClientProperty("tagValues", availableTagValues); + tagValues.setLayout(new GridLayout(0, 2)); + tagValues.removeAll(); + + for (Map.Entry<String, TagValueDefinition> entry : availableTagValues.entrySet()) { + + JTextField field = new JTextField(); + + String tagValue = entry.getKey(); + JLabel label = new JLabel(tagValue); + $objectMap.put("tagValue-" + tagValue, field); + label.setToolTipText(entry.getValue().documentation()); + label.setLabelFor(field); + + tagValues.add(label); + tagValues.add(field); + } + } + + } + + protected void open(U ui, M model, Set<String> stereotypes, Map<String, String> tagValues) { + + ui.setModel(model); + + JPanel stereotypesPanel = ui.getStereotypes(); + Map<String, StereotypeDefinition> stereotyps = (Map) stereotypesPanel.getClientProperty("stereotypes"); + + if (stereotyps != null) { + + for (String tagValue : stereotyps.keySet()) { + + JCheckBox objectById = (JCheckBox) ui.getObjectById("stereotype-" + tagValue); + if (objectById != null) { + objectById.setSelected(false); + } + + } + } + + for (String stereotype : stereotypes) { + + JCheckBox objectById = (JCheckBox) ui.getObjectById("stereotype-" + stereotype); + if (objectById != null) { + objectById.setSelected(true); + } + } + + JPanel tagValuesPanel = ui.getTagValues(); + Map<String, TagValueDefinition> tags = (Map) tagValuesPanel.getClientProperty("tagValues"); + + if (tags != null) { + + for (String tagValue : tags.keySet()) { + + JTextField objectById = (JTextField) ui.getObjectById("tagValue-" + tagValue); + if (objectById != null) { + objectById.setText(null); + } + + } + } + + for (Map.Entry<String, String> entry : tagValues.entrySet()) { + JTextField objectById = (JTextField) ui.getObjectById("tagValue-" + entry.getKey()); + if (objectById != null) { + objectById.setText(entry.getValue()); + } + } + + } + + protected void addInterfaces(U ui, Collection<ObjectModelInterface> interfaces, JList interfacesPanel, List<String> allClasses) { + + List<String> interfaceNames; + + if (interfaces.isEmpty()) { + interfaceNames = Collections.emptyList(); + } else { + + interfaceNames = interfaces.stream().map(ObjectModelInterface::getQualifiedName).collect(Collectors.toList()); + Collections.sort(interfaceNames); + interfaceNames.add(0, null); + allClasses.removeAll(interfaceNames); + } + + SwingUtil.fillList(interfacesPanel, interfaceNames, null); + + } + + protected EugeneEditorApplicationContext getApplicationContext(U ui) { + return ui.getContextValue(EugeneEditorApplicationContext.class); + } +} diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ContentUI.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ContentUI.java new file mode 100644 index 0000000..29737dd --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ContentUI.java @@ -0,0 +1,29 @@ +package org.nuiton.eugene.editor.application.ui.content; + +import jaxx.runtime.JAXXObject; +import org.nuiton.eugene.editor.application.ui.tree.node.NodeSupport; + +import javax.swing.JComponent; +import javax.swing.JPanel; + +/** + * Created on 16/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public interface ContentUI<M extends NodeSupport> extends JAXXObject { + + void setLeftDecoration(JComponent component); + + M getModel(); + + void setModel(M model); + + void open(M model); + + JPanel getStereotypes(); + + JPanel getTagValues(); + + void close(); +} diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ContentUI.jcss b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ContentUI.jcss new file mode 100644 index 0000000..162b820 --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ContentUI.jcss @@ -0,0 +1,74 @@ +.top { + rightDecoration:{actions}; +} + +/* #model {} */ + +/* #actions {} */ + +#generalPane { + title:"eugene.editor.general"; +} + +#stereotypesAndTagValuesPane { + title:"eugene.editor.stereotypesAndTagValues"; +} +#stereotypes { + border: {new javax.swing.border.TitledBorder(t("eugene.editor.stereotypes"))}; + layout: {new BorderLayout()}; +} + +#tagValues { + border: {new javax.swing.border.TitledBorder(t("eugene.editor.tagValues"))}; + layout: {new BorderLayout()}; +} + +#visibility { + border: {new javax.swing.border.TitledBorder(t("eugene.editor.visibility"))}; + layout: {new GridLayout(1, 0)}; +} + +.visibilityMode { + buttonGroup:"visibilityMode"; +} + +#visibilityPublic { + text:"eugene.editor.visibility.public"; + selected:{"public".equals(getModel().getUserObject().getVisibility())}; +} + +#visibilityPackage { + text:"eugene.editor.visibility.package"; + selected:{"".equals(getModel().getUserObject().getVisibility())}; +} + +#visibilityProtected { + text:"eugene.editor.visibility.protected"; + selected:{"protected".equals(getModel().getUserObject().getVisibility())}; +} + +#visibilityPrivate { + text:"eugene.editor.visibility.private"; + selected:{"private".equals(getModel().getUserObject().getVisibility())}; +} + +#noInterface { + text:"eugene.no.interface.defined"; + horizontalAlignment: {JLabel.CENTER}; + verticalAlignment: {JLabel.CENTER}; + enabled: false; +} + +#noStereotype { + text:"eugene.no.stereotype.found"; + horizontalAlignment: {JLabel.CENTER}; + verticalAlignment: {JLabel.CENTER}; + enabled: false; +} + +#noTagValue { + text:"eugene.no.tagValue.found"; + horizontalAlignment: {JLabel.CENTER}; + verticalAlignment: {JLabel.CENTER}; + enabled: false; +} \ No newline at end of file diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/EnumerationContentUI.jaxx b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/EnumerationContentUI.jaxx new file mode 100644 index 0000000..a045def --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/EnumerationContentUI.jaxx @@ -0,0 +1,73 @@ +<org.jdesktop.swingx.JXTitledPanel id="enumerationMainContent" implements="ContentUI<EnumerationNode>" + styleClass="top"> + + <style source="ContentUI.jcss"/> + <import> + org.nuiton.eugene.editor.application.ui.tree.node.EnumerationNode + </import> + <script><![CDATA[ +public void open(EnumerationNode data) { handler.open(this, data); } +public void close() { handler.close(); } +]]> </script> + + <EnumerationNode id="model" javaBean="null"/> + + <JToolBar id="actions"> + <JButton id="createEnumerationFromEnumeration"/> + <JButton id="deleteEnumerationFromEnumeration"/> + </JToolBar> + + <org.jdesktop.swingx.JXTaskPaneContainer id="form"> + <org.jdesktop.swingx.JXTaskPane id="generalPane"> + <Table fill="both"> + <row> + <cell> + <JLabel id="enumerationNameLabel"/> + </cell> + <cell weightx="1"> + <JTextField id="enumerationName" onKeyReleased="model.setName(enumerationName.getText())"/> + </cell> + </row> + <row> + <cell columns="2"> + + <JScrollPane id="literalsScrollPane" columnHeaderView="{literalsHeader}"> + <JList id="literals" genericType="String"/> + <JPanel id="literalsHeader" layout="{new BorderLayout()}"> + <JTextField id="literalsHeaderName" constraints="BorderLayout.WEST" + onKeyReleased="addLiteralFromEnumeration.setEnabled(!literalsHeaderName.getText().trim().isEmpty())"/> + <JToolBar id="literalsHeaderActions" constraints="BorderLayout.EAST"> + <JButton id="addLiteralFromEnumeration"/> + <JButton id="removeLiteralFromEnumeration"/> + </JToolBar> + </JPanel> + </JScrollPane> + + </cell> + </row> + </Table> + </org.jdesktop.swingx.JXTaskPane> + + <org.jdesktop.swingx.JXTaskPane id="stereotypesAndTagValuesPane"> + <Table fill="both"> + <row> + <cell weightx="1"> + <JPanel id="stereotypes"> + <JLabel id="noStereotype"/> + </JPanel> + </cell> + </row> + <row> + <cell weightx="1"> + <JPanel id="tagValues"> + <JLabel id="noTagValue"/> + </JPanel> + </cell> + </row> + </Table> + + </org.jdesktop.swingx.JXTaskPane> + + </org.jdesktop.swingx.JXTaskPaneContainer> + +</org.jdesktop.swingx.JXTitledPanel> \ No newline at end of file diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/EnumerationContentUI.jcss b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/EnumerationContentUI.jcss new file mode 100644 index 0000000..f0a9e13 --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/EnumerationContentUI.jcss @@ -0,0 +1,50 @@ + + +#enumerationMainContent { + title:"eugene.editor.enumeration"; +} + +#enumerationNameLabel { + text:"eugene.editor.enumeration.name"; +} + +#enumerationName { + text:{getModel().getUserObject().getName()}; + _property:{"name"}; +} + +#createEnumerationFromEnumeration { + text:"eugene.editor.create.enumeration"; + actionIcon:add; +} + +#deleteEnumerationFromEnumeration { + text:"eugene.editor.delete.enumeration"; + actionIcon:delete; +} + +#addLiteralFromEnumeration { + text:"eugene.editor.add.literal"; + actionIcon:add; + enabled:false; +} + +#removeLiteralFromEnumeration { + text:"eugene.editor.delete.literal"; + actionIcon:delete; + enabled:false; +} + +#literalsHeaderPanel { + layout: {new BorderLayout()}; +} + +#literalsPane { + title:"eugene.editor.literals"; + icon:{SwingUtil.createIcon("type", "enumeration")}; +} + +#literalsScrollPane { + horizontalScrollBarPolicy:{JScrollPane.HORIZONTAL_SCROLLBAR_NEVER}; + border: {new javax.swing.border.TitledBorder(t("eugene.editor.literals"))}; +} diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/EnumerationContentUIHandler.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/EnumerationContentUIHandler.java new file mode 100644 index 0000000..a89461b --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/EnumerationContentUIHandler.java @@ -0,0 +1,45 @@ +package org.nuiton.eugene.editor.application.ui.content; + +import org.nuiton.eugene.editor.application.ModelExtensionHelper; +import org.nuiton.eugene.editor.application.ui.tree.node.EnumerationNode; +import org.nuiton.eugene.models.object.ObjectModelEnumeration; + +import javax.swing.DefaultListModel; +import javax.swing.ListSelectionModel; + +/** + * Created on 16/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class EnumerationContentUIHandler extends ContenUIHandler<EnumerationNode, EnumerationContentUI> { + + @Override + public void beforeInit(EnumerationContentUI ui) { + + } + + @Override + public void afterInit(EnumerationContentUI ui) { + + ModelExtensionHelper helper = getApplicationContext(ui).getModelExtensionHelper(); + afterInit(ui, helper.getEnumerationTagValues(), helper.getEnumerationStereotypes()); + ui.getLiterals().setModel(new DefaultListModel<>()); + ui.getLiterals().getSelectionModel().addListSelectionListener(e -> ui.getRemoveLiteralFromEnumeration().setEnabled(!((ListSelectionModel) e.getSource()).isSelectionEmpty())); + //ui.getLiteralsHeaderName().addPropertyChangeListener( e -> ui.getAddLiteralFromEnumeration().setEnabled(!Strings.isNullOrEmpty(((JTextField) e.getSource()).getText()))); + + } + + @Override + protected void open(EnumerationContentUI ui, EnumerationNode node) { + ObjectModelEnumeration data = node.getUserObject(); + open(ui, node, data.getStereotypes(), data.getTagValues()); + + DefaultListModel<String> listModel = (DefaultListModel<String>) ui.getLiterals().getModel(); + listModel.clear(); + + data.getLiterals().forEach(listModel::addElement); + + } + +} diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/InterfaceContentUI.jaxx b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/InterfaceContentUI.jaxx new file mode 100644 index 0000000..4f229c9 --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/InterfaceContentUI.jaxx @@ -0,0 +1,77 @@ +<org.jdesktop.swingx.JXTitledPanel id="interfaceMainContent" implements="ContentUI<InterfaceNode>" + styleClass="top"> + + <style source="ContentUI.jcss"/> + <import> + org.nuiton.eugene.editor.application.ui.tree.node.InterfaceNode + javax.swing.DefaultListModel + </import> + <script><![CDATA[ +public void open(InterfaceNode data) { handler.open(this, data); } +public void close() { handler.close(); } +]]> </script> + + <InterfaceNode id="model" javaBean="null"/> + + <JToolBar id="actions"> + <JButton id="createAttributeFromInterface"/> + <JButton id="createOperationFromInterface"/> + <JSeparator/> + <JButton id="createInterfaceFromInterface"/> + <JButton id="deleteInterfaceFromInterface"/> + </JToolBar> + + <org.jdesktop.swingx.JXTaskPaneContainer id="form"> + <org.jdesktop.swingx.JXTaskPane id="generalPane"> + <Table fill="both"> + <row> + <cell> + <JLabel id="interfaceNameLabel"/> + </cell> + <cell weightx="1"> + <JTextField id="interfaceName" onKeyReleased="model.setName(interfaceName.getText())"/> + </cell> + </row> + <row> + <cell columns="2"> + + <JScrollPane id="superClassesScrollPane" columnHeaderView="{superClassesHeader}"> + <JList id="superClasses" genericType="String"/> + <JPanel id="superClassesHeader" layout="{new BorderLayout()}"> + <JComboBox id="superClassesHeaderType" constraints="BorderLayout.WEST" genericType="String" + onItemStateChanged="addSuperClassFromInterface.setEnabled(event.getStateChange() == ItemEvent.SELECTED)"/> + <JToolBar id="superClassesHeaderActions" constraints="BorderLayout.EAST"> + <JButton id="addSuperClassFromInterface"/> + <JButton id="removeSuperClassFromInterface"/> + </JToolBar> + </JPanel> + </JScrollPane> + + </cell> + </row> + </Table> + </org.jdesktop.swingx.JXTaskPane> + + <org.jdesktop.swingx.JXTaskPane id="stereotypesAndTagValuesPane"> + <Table fill="both"> + <row> + <cell weightx="1"> + <JPanel id="stereotypes"> + <JLabel id="noStereotype"/> + </JPanel> + </cell> + </row> + <row> + <cell weightx="1"> + <JPanel id="tagValues"> + <JLabel id="noTagValue"/> + </JPanel> + </cell> + </row> + </Table> + + </org.jdesktop.swingx.JXTaskPane> + + </org.jdesktop.swingx.JXTaskPaneContainer> + +</org.jdesktop.swingx.JXTitledPanel> \ No newline at end of file diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/InterfaceContentUI.jcss b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/InterfaceContentUI.jcss new file mode 100644 index 0000000..407dbf8 --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/InterfaceContentUI.jcss @@ -0,0 +1,63 @@ + + +#interfaceMainContent { + title:"eugene.editor.interface"; +} + +#interfaceNameLabel { + text:"eugene.editor.interface.name"; +} + +#interfaceName { + text:{getModel().getUserObject().getName()}; + _property:{"name"}; +} + +#createInterfaceFromInterface { + text:"eugene.editor.create.interface"; + actionIcon:add; +} + +#createAttributeFromInterface { + text:"eugene.editor.create.attribute"; + actionIcon:add; +} + +#createOperationFromInterface { + text:"eugene.editor.create.operation"; + actionIcon:add; +} + +#deleteInterfaceFromInterface { + text:"eugene.editor.delete.interface"; + actionIcon:delete; +} + +#addSuperClassFromInterface { + text:"eugene.editor.add.superClass"; + actionIcon:add; + enabled:false; +} + +#removeSuperClassFromInterface { + text:"eugene.editor.delete.superClass"; + actionIcon:delete; + enabled:false; +} + +#superClasses { + model:{new DefaultListModel()}; +} +#superClassesHeaderPanel { + layout: {new BorderLayout()}; +} + +#superClassesPane { + title:"eugene.editor.superClasses"; + icon:{SwingUtil.createIcon("type", "class")}; +} + +#superClassesScrollPane { + horizontalScrollBarPolicy:{JScrollPane.HORIZONTAL_SCROLLBAR_NEVER}; + border: {new javax.swing.border.TitledBorder(t("eugene.editor.superClasses"))}; +} diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/InterfaceContentUIHandler.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/InterfaceContentUIHandler.java new file mode 100644 index 0000000..0c0d914 --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/InterfaceContentUIHandler.java @@ -0,0 +1,55 @@ +package org.nuiton.eugene.editor.application.ui.content; + +import jaxx.runtime.SwingUtil; +import org.nuiton.eugene.editor.application.ModelExtensionHelper; +import org.nuiton.eugene.editor.application.ModelHelper; +import org.nuiton.eugene.editor.application.ui.tree.node.InterfaceNode; +import org.nuiton.eugene.models.object.ObjectModelInterface; + +import javax.swing.ListSelectionModel; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +/** + * Created on 16/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class InterfaceContentUIHandler extends ContenUIHandler<InterfaceNode, InterfaceContentUI> { + + @Override + public void beforeInit(InterfaceContentUI ui) { + + } + + @Override + public void afterInit(InterfaceContentUI ui) { + + ModelExtensionHelper helper = getApplicationContext(ui).getModelExtensionHelper(); + afterInit(ui, helper.getInterfaceTagValues(), helper.getInterfaceStereotypes()); +// ui.getSuperClasses().setModel(new DefaultListModel<>()); + ui.getSuperClasses().getSelectionModel().addListSelectionListener(e -> ui.getRemoveSuperClassFromInterface().setEnabled(!((ListSelectionModel) e.getSource()).isSelectionEmpty())); + + } + + @Override + protected void open(InterfaceContentUI ui, InterfaceNode node) { + ObjectModelInterface data = node.getUserObject(); + open(ui, node, data.getStereotypes(), data.getTagValues()); + + ModelHelper modelHelper = getApplicationContext(ui).getModelHelper(); + + List<String> allInterfaces = new ArrayList<>(modelHelper.getAllInterfaces()); + + addInterfaces(ui, data.getInterfaces(), ui.getSuperClasses(), allInterfaces); + + //TODO Supprimer toutes les interfaces qui héritent de celle ci + Collections.sort(allInterfaces); + allInterfaces.add(0, null); + + SwingUtil.fillComboBox(ui.getSuperClassesHeaderType(), allInterfaces, null); + ui.getSuperClassesHeaderType().setSelectedItem(null); + + } +} diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ModelContentUI.jaxx b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ModelContentUI.jaxx new file mode 100644 index 0000000..f6c1994 --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ModelContentUI.jaxx @@ -0,0 +1,62 @@ +<org.jdesktop.swingx.JXTitledPanel id="modelMainContent" implements="ContentUI<ModelNode>" styleClass="top"> + + <style source="ContentUI.jcss"/> + <import> + org.nuiton.eugene.editor.application.ui.tree.node.ModelNode + jaxx.runtime.validator.swing.SwingValidatorMessageTableModel + </import> + <script><![CDATA[ +public void open(ModelNode data) { handler.open(this, data); } +public void close() { handler.close(); } +]]> </script> + + <ModelNode id="model" javaBean="null"/> + + <BeanValidator id='validator' + beanClass='org.nuiton.eugene.editor.application.ui.tree.node.ModelNode' + bean="{getModel()}" + errorTableModel='{getContextValue(SwingValidatorMessageTableModel.class)}'> + <field name='name' component='modelName'/> + </BeanValidator> + + <JToolBar id="actions"> + <JButton id="createPackageFromModel"/> + </JToolBar> + + <org.jdesktop.swingx.JXTaskPaneContainer id="form"> + <org.jdesktop.swingx.JXTaskPane id="generalPane"> + <Table fill="both"> + <row> + <cell> + <JLabel id="modelNameLabel"/> + </cell> + <cell weightx="1"> + <JTextField id="modelName" onKeyReleased="model.setName(modelName.getText())"/> + </cell> + </row> + </Table> + </org.jdesktop.swingx.JXTaskPane> + + <org.jdesktop.swingx.JXTaskPane id="stereotypesAndTagValuesPane"> + <Table fill="both"> + <row> + <cell weightx="1"> + <JPanel id="stereotypes"> + <JLabel id="noStereotype"/> + </JPanel> + </cell> + </row> + <row> + <cell weightx="1"> + <JPanel id="tagValues"> + <JLabel id="noTagValue"/> + </JPanel> + </cell> + </row> + </Table> + + </org.jdesktop.swingx.JXTaskPane> + + </org.jdesktop.swingx.JXTaskPaneContainer> + +</org.jdesktop.swingx.JXTitledPanel> \ No newline at end of file diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ModelContentUI.jcss b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ModelContentUI.jcss new file mode 100644 index 0000000..660a226 --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ModelContentUI.jcss @@ -0,0 +1,19 @@ + + +#modelMainContent { + title:"eugene.editor.model"; +} + +#modelNameLabel { + text:"eugene.editor.model.name"; +} + +#modelName { + text:{getModel().getUserObject().getName()}; + _property:{"name"}; +} + +#createPackageFromModel { + text:"eugene.editor.create.package"; + actionIcon: add; +} diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ModelContentUIHandler.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ModelContentUIHandler.java new file mode 100644 index 0000000..b884171 --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ModelContentUIHandler.java @@ -0,0 +1,34 @@ +package org.nuiton.eugene.editor.application.ui.content; + +import org.nuiton.eugene.editor.application.ModelExtensionHelper; +import org.nuiton.eugene.editor.application.ui.tree.node.ModelNode; +import org.nuiton.eugene.models.object.ObjectModel; + +/** + * Created on 16/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class ModelContentUIHandler extends ContenUIHandler<ModelNode, ModelContentUI> { + + @Override + public void beforeInit(ModelContentUI ui) { + + } + + @Override + public void afterInit(ModelContentUI ui) { + + ModelExtensionHelper helper = getApplicationContext(ui).getModelExtensionHelper(); + afterInit(ui, helper.getModelTagValues(), helper.getModelStereotypes()); + + } + + @Override + protected void open(ModelContentUI ui, ModelNode node) { + + ObjectModel data = node.getUserObject(); + open(ui, node, data.getStereotypes(), data.getTagValues()); + + } +} diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/Multiplicity.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/Multiplicity.java new file mode 100644 index 0000000..1466188 --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/Multiplicity.java @@ -0,0 +1,40 @@ +package org.nuiton.eugene.editor.application.ui.content; + +/** + * Created on 18/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public enum Multiplicity { + + ONE(1, 1, "1"), + ZERO_OR_ONE(0, 1, "0..1"), + ZERO_TO_MANY(0, -1, "0..*"), + ONE_TO_MANY(1, -1, "1..*"), + MANY_TO_MANY(-1, -1, "*..*"); + + private final int min; + private final int max; + + private final String text; + + Multiplicity(int min, int max, String text) { + this.min = min; + this.max = max; + this.text = text; + } + + @Override + public String toString() { + return text; + } + + public static Multiplicity valueOf(int min, int max) { + for (Multiplicity multiplicity : values()) { + if (min == multiplicity.min && max == multiplicity.max) { + return multiplicity; + } + } + return null; + } +} diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/OperationContentUI.jaxx b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/OperationContentUI.jaxx new file mode 100644 index 0000000..c53f7e6 --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/OperationContentUI.jaxx @@ -0,0 +1,87 @@ +<org.jdesktop.swingx.JXTitledPanel id="operationMainContent" implements="ContentUI<OperationNode>" + styleClass="top"> + + <style source="ContentUI.jcss"/> + <import> + org.nuiton.eugene.editor.application.ui.tree.node.OperationNode + </import> + <script><![CDATA[ +public void open(OperationNode data) { handler.open(this, data); } +public void close() { handler.close(); } +]]> </script> + + <OperationNode id="model" javaBean="null"/> + <ButtonGroup id='visibilityMode'/> + + <JToolBar id="actions"> + <JButton id="createOperationFromOperation"/> + <JButton id="deleteOperationFromOperation"/> + </JToolBar> + <JScrollPane> + <org.jdesktop.swingx.JXTaskPaneContainer id="form"> + <org.jdesktop.swingx.JXTaskPane id="generalPane"> + <Table fill="both"> + <row> + <cell> + <JLabel id="operationNameLabel"/> + </cell> + <cell weightx="1"> + <JTextField id="operationName" onKeyReleased="model.setName(operationName.getText())"/> + </cell> + </row> + <row> + <cell> + <JLabel id="operationReturnTypeLabel"/> + </cell> + <cell> + <JComboBox id="operationReturnType" genericType="String" onActionPerformed="model.setReturnType((String)operationReturnType.getSelectedItem())"/> + </cell> + </row> + <row> + <cell columns="2"> + <JPanel id="visibility"> + <JRadioButton id="visibilityPublic" value="public" styleClass="visibilityMode"/> + <JRadioButton id="visibilityPackage" value="" styleClass="visibilityMode"/> + <JRadioButton id="visibilityProtected" value="protected" styleClass="visibilityMode"/> + <JRadioButton id="visibilityPrivate" value="private" styleClass="visibilityMode"/> + </JPanel> + </cell> + </row> + </Table> + </org.jdesktop.swingx.JXTaskPane> + + <org.jdesktop.swingx.JXTaskPane id="stereotypesAndTagValuesPane"> + <Table fill="both"> + <row> + <cell weightx="1"> + <JPanel id="stereotypes"> + <JLabel id="noStereotype"/> + </JPanel> + </cell> + </row> + <row> + <cell weightx="1"> + <JPanel id="tagValues"> + <JLabel id="noTagValue"/> + </JPanel> + </cell> + </row> + </Table> + </org.jdesktop.swingx.JXTaskPane> + + <org.jdesktop.swingx.JXTaskPane id="parametersPane" layout="{new BorderLayout()}"> + <JPanel id="parametersHeader" constraints="BorderLayout.NORTH" layout="{new BorderLayout()}"> + <JToolBar id="parametersHeaderActions" constraints="BorderLayout.EAST"> + <JButton id="createParameterFromOperation"/> + <JButton id="deleteParameterFromOperation"/> + </JToolBar> + </JPanel> + <JScrollPane id="parametersScrollPane" constraints="BorderLayout.CENTER"> + <JTable id="parameters"/> + </JScrollPane> + </org.jdesktop.swingx.JXTaskPane> + + </org.jdesktop.swingx.JXTaskPaneContainer> + </JScrollPane> + +</org.jdesktop.swingx.JXTitledPanel> \ No newline at end of file diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/OperationContentUI.jcss b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/OperationContentUI.jcss new file mode 100644 index 0000000..4e84c08 --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/OperationContentUI.jcss @@ -0,0 +1,67 @@ + +#operationMainContent { + title:"eugene.editor.operation"; +} + +#operationNameLabel { + text:"eugene.editor.operation.name"; +} + +#operationName { + text:{getModel().getUserObject().getName()}; + _property:{"name"}; +} + +#operationReturnTypeLabel { + text:"eugene.editor.operation.returnType"; +} + +#operationReturnType { + selectedItem:{getModel().getUserObject().getReturnType()}; + _property:{"returnType"}; +} + +#createOperationFromOperation { + text:"eugene.editor.create.operation"; + actionIcon:add; +} + +#deleteOperationFromOperation { + text:"eugene.editor.delete.operation"; + actionIcon:delete; +} + +#createParameterFromOperation { + text:"eugene.editor.create.parameter"; + actionIcon:add; +} + +#deleteParameterFromOperation { + text:"eugene.editor.delete.parameter"; + actionIcon:delete; + enabled:false; +} + +#parametersHeaderPanel { + layout: {new BorderLayout()}; +} + +#parametersPane { + title:"eugene.editor.parameters"; + icon:{SwingUtil.createIcon("type", "attribute")}; +} + +#parametersScrollPane { + horizontalScrollBarPolicy:{JScrollPane.HORIZONTAL_SCROLLBAR_NEVER}; +} + +#parameters { + model: {new ParameterTableModel()}; +} + +#noParameter { + text:"eugene.no.parameter.defined"; + horizontalAlignment: {JLabel.CENTER}; + verticalAlignment: {JLabel.CENTER}; + enabled: false; +} \ No newline at end of file diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/OperationContentUIHandler.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/OperationContentUIHandler.java new file mode 100644 index 0000000..3c5bb69 --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/OperationContentUIHandler.java @@ -0,0 +1,68 @@ +package org.nuiton.eugene.editor.application.ui.content; + +import jaxx.runtime.SwingUtil; +import org.jdesktop.swingx.JXComboBox; +import org.jdesktop.swingx.autocomplete.ComboBoxCellEditor; +import org.nuiton.eugene.editor.application.ModelExtensionHelper; +import org.nuiton.eugene.editor.application.ModelHelper; +import org.nuiton.eugene.editor.application.ui.tree.node.OperationNode; +import org.nuiton.eugene.models.object.ObjectModelOperation; +import org.nuiton.eugene.models.object.ObjectModelParameter; + +import javax.swing.JTable; +import javax.swing.ListSelectionModel; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + +/** + * Created on 16/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class OperationContentUIHandler extends ContenUIHandler<OperationNode, OperationContentUI> { + + @Override + public void beforeInit(OperationContentUI ui) { + + } + + @Override + public void afterInit(OperationContentUI ui) { + + ModelExtensionHelper helper = getApplicationContext(ui).getModelExtensionHelper(); + afterInit(ui, helper.getOperationTagValues(), helper.getOperationStereotypes()); + ui.getParameters().getSelectionModel().addListSelectionListener(e -> ui.getDeleteParameterFromOperation().setEnabled(!((ListSelectionModel) e.getSource()).isSelectionEmpty())); + + } + + @Override + protected void open(OperationContentUI ui, OperationNode node) { + + ObjectModelOperation data = node.getUserObject(); + open(ui, node, data.getStereotypes(), data.getTagValues()); + ui.getVisibilityMode().setSelectedValue(data.getVisibility()); + + Collection<ObjectModelParameter> parameters = data.getParameters(); + JTable parametersPanel = ui.getParameters(); + + ParameterTableModel tableModel = (ParameterTableModel) parametersPanel.getModel(); + tableModel.clear(); + + if (!parameters.isEmpty()) { + parameters.forEach(tableModel::add); + } + + ModelHelper modelHelper = getApplicationContext(ui).getModelHelper(); + List<String> allClasses = new ArrayList<>(modelHelper.getAllClassesWithJava()); + Collections.sort(allClasses); + allClasses.add(0, null); + + SwingUtil.fillComboBox(ui.getOperationReturnType(), allClasses, data.getReturnType()); + + ui.getParameters().setDefaultEditor(Class.class, new ComboBoxCellEditor(new JXComboBox(allClasses.toArray(new String[allClasses.size()])))); + + } + +} diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/PackageContentUI.jaxx b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/PackageContentUI.jaxx new file mode 100644 index 0000000..751491b --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/PackageContentUI.jaxx @@ -0,0 +1,59 @@ +<org.jdesktop.swingx.JXTitledPanel id="packageMainContent" implements="ContentUI<PackageNode>" styleClass="top"> + + <style source="ContentUI.jcss"/> + <import> + org.nuiton.eugene.editor.application.ui.tree.node.PackageNode + </import> + <script><![CDATA[ +public void open(PackageNode data) { handler.open(this, data); } +public void close() { handler.close(); } +]]> </script> + + <PackageNode id="model" javaBean="null"/> + + <JToolBar id="actions"> + <JButton id="createClassFromPackage"/> + <JButton id="createInterfaceFromPackage"/> + <JButton id="createEnumerationFromPackage"/> + <JSeparator/> + <JButton id="createPackageFromPackage"/> + <JButton id="deletePackageFromPackage"/> + </JToolBar> + + <org.jdesktop.swingx.JXTaskPaneContainer id="form"> + <org.jdesktop.swingx.JXTaskPane id="generalPane"> + <Table fill="both"> + <row> + <cell> + <JLabel id="packageNameLabel"/> + </cell> + <cell weightx="1"> + <JTextField id="packageName" onKeyReleased="model.setName(packageName.getText())"/> + </cell> + </row> + </Table> + </org.jdesktop.swingx.JXTaskPane> + + <org.jdesktop.swingx.JXTaskPane id="stereotypesAndTagValuesPane"> + <Table fill="both"> + <row> + <cell weightx="1"> + <JPanel id="stereotypes"> + <JLabel id="noStereotype"/> + </JPanel> + </cell> + </row> + <row> + <cell weightx="1"> + <JPanel id="tagValues"> + <JLabel id="noTagValue"/> + </JPanel> + </cell> + </row> + </Table> + + </org.jdesktop.swingx.JXTaskPane> + + </org.jdesktop.swingx.JXTaskPaneContainer> + +</org.jdesktop.swingx.JXTitledPanel> \ No newline at end of file diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/PackageContentUI.jcss b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/PackageContentUI.jcss new file mode 100644 index 0000000..5d657fc --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/PackageContentUI.jcss @@ -0,0 +1,37 @@ +#packageMainContent { + title:"eugene.editor.package"; +} + +#packageNameLabel { + text:"eugene.editor.package.name"; +} + +#packageName { + text:{getModel().getUserObject().getName()}; + _property:{"name"}; +} + +#createPackageFromPackage { + text:"eugene.editor.create.package"; + actionIcon:add; +} + +#createClassFromPackage { + text:"eugene.editor.create.class"; + actionIcon:add; +} + +#createInterfaceFromPackage { + text:"eugene.editor.create.interface"; + actionIcon:add; +} + +#createEnumerationFromPackage { + text:"eugene.editor.create.enumeration"; + actionIcon:add; +} + +#deletePackageFromPackage { + text:"eugene.editor.delete.package"; + actionIcon:delete; +} \ No newline at end of file diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/PackageContentUIHandler.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/PackageContentUIHandler.java new file mode 100644 index 0000000..962c4e0 --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/PackageContentUIHandler.java @@ -0,0 +1,33 @@ +package org.nuiton.eugene.editor.application.ui.content; + +import org.nuiton.eugene.editor.application.ModelExtensionHelper; +import org.nuiton.eugene.editor.application.ui.tree.node.PackageNode; +import org.nuiton.eugene.models.object.ObjectModelPackage; + +/** + * Created on 16/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class PackageContentUIHandler extends ContenUIHandler<PackageNode, PackageContentUI> { + + @Override + public void beforeInit(PackageContentUI ui) { + } + + @Override + public void afterInit(PackageContentUI ui) { + + ModelExtensionHelper helper = getApplicationContext(ui).getModelExtensionHelper(); + afterInit(ui, helper.getPackageTagValues(), helper.getPackageStereotypes()); + + } + + @Override + protected void open(PackageContentUI ui, PackageNode node) { + + ObjectModelPackage data = node.getUserObject(); + open(ui, node, data.getStereotypes(), data.getTagValues()); + + } +} diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ParameterTableModel.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ParameterTableModel.java new file mode 100644 index 0000000..b01e084 --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ParameterTableModel.java @@ -0,0 +1,103 @@ +package org.nuiton.eugene.editor.application.ui.content; + +import org.nuiton.eugene.models.object.ObjectModelParameter; +import org.nuiton.eugene.models.object.xml.ObjectModelParameterImpl; + +import javax.swing.table.AbstractTableModel; +import java.util.ArrayList; +import java.util.List; + +import static org.nuiton.i18n.I18n.t; + +/** + * Created on 17/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class ParameterTableModel extends AbstractTableModel { + + private final List<ObjectModelParameter> parameters = new ArrayList<>(); + + public void add(ObjectModelParameter parameter) { + this.parameters.add(parameter); + fireTableRowsInserted(getRowCount() - 1, getRowCount() - 1); + } + + public void remove(int rowIndex) { + this.parameters.remove(rowIndex); + fireTableRowsDeleted(rowIndex, rowIndex); + } + + public void clear() { + int rowCount = getRowCount(); + parameters.clear(); + fireTableRowsDeleted(0, rowCount); + } + + public ObjectModelParameter get(int rowIndex) { + return parameters.get(rowIndex); + } + + @Override + public String getColumnName(int column) { + switch (column) { + case 0: + return t("eugene.editor.parameter.name"); + case 1: + return t("eugene.editor.parameter.type"); + default: + return null; + } + } + + @Override + public Class<?> getColumnClass(int columnIndex) { + switch (columnIndex) { + case 0: + return String.class; + case 1: + return Class.class; + default: + return null; + } + } + + @Override + public int getRowCount() { + return parameters.size(); + } + + @Override + public int getColumnCount() { + return 2; + } + + @Override + public boolean isCellEditable(int rowIndex, int columnIndex) { + return true; + } + + @Override + public Object getValueAt(int rowIndex, int columnIndex) { + ObjectModelParameter parameter = parameters.get(rowIndex); + switch (columnIndex) { + case 0: + return parameter.getName(); + case 1: + return parameter.getType(); + } + return null; + } + + @Override + public void setValueAt(Object aValue, int rowIndex, int columnIndex) { + ObjectModelParameter parameter = parameters.get(rowIndex); + switch (columnIndex) { + case 0: + ((ObjectModelParameterImpl) parameter).setName((String) aValue); + case 1: + ((ObjectModelParameterImpl) parameter).setType((String) aValue); + } + fireTableRowsUpdated(rowIndex, rowIndex); + } +} diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/AddInterfaceFromClassAction.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/AddInterfaceFromClassAction.java new file mode 100644 index 0000000..427feec --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/AddInterfaceFromClassAction.java @@ -0,0 +1,39 @@ +package org.nuiton.eugene.editor.application.ui.content.actions; + +import org.apache.commons.lang3.StringUtils; +import org.nuiton.eugene.editor.application.ui.content.ClassContentUI; +import org.nuiton.eugene.models.object.xml.ObjectModelInterfaceImpl; + +import javax.swing.DefaultComboBoxModel; +import javax.swing.DefaultListModel; + +/** + * Created on 16/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class AddInterfaceFromClassAction extends ContentActionSupport<ClassContentUI> { + + public AddInterfaceFromClassAction(ClassContentUI ui) { + super(ui); + } + + @Override + protected void execute(ClassContentUI ui) { + + String interfaceName = (String) ui.getInterfacesHeaderType().getSelectedItem(); + String[] split = interfaceName.split("\\."); + + ObjectModelInterfaceImpl newInterface = new ObjectModelInterfaceImpl(); + newInterface.setName(split[split.length - 1]); + newInterface.setPackage(StringUtils.removeEnd(interfaceName, "." + newInterface.getName())); + newInterface.postInit(); + + ui.getModel().getUserObject().getInterfaces().add(newInterface); + + ((DefaultListModel<String>) ui.getInterfaces().getModel()).addElement(interfaceName); + ((DefaultComboBoxModel) ui.getInterfacesHeaderType().getModel()).removeElement(interfaceName); + + } + +} diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/AddLiteralFromEnumerationAction.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/AddLiteralFromEnumerationAction.java new file mode 100644 index 0000000..fd45704 --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/AddLiteralFromEnumerationAction.java @@ -0,0 +1,32 @@ +package org.nuiton.eugene.editor.application.ui.content.actions; + +import org.nuiton.eugene.editor.application.ui.content.EnumerationContentUI; + +import javax.swing.DefaultListModel; + +/** + * Created on 16/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class AddLiteralFromEnumerationAction extends ContentActionSupport<EnumerationContentUI> { + + public AddLiteralFromEnumerationAction(EnumerationContentUI ui) { + super(ui); + } + + @Override + protected void execute(EnumerationContentUI ui) { + + String text = ui.getLiteralsHeaderName().getText().trim(); + + ui.getModel().addLiteral(text); + + ((DefaultListModel<String>) ui.getLiterals().getModel()).addElement(text); + ui.getLiteralsHeaderName().setText(""); + //TODO Comprendre pk le binding ne fonctionne pas + ui.getAddLiteralFromEnumeration().setEnabled(false); + + } + +} diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/AddSuperClassFromInterfaceAction.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/AddSuperClassFromInterfaceAction.java new file mode 100644 index 0000000..a39bfa6 --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/AddSuperClassFromInterfaceAction.java @@ -0,0 +1,31 @@ +package org.nuiton.eugene.editor.application.ui.content.actions; + +import org.nuiton.eugene.editor.application.ui.content.InterfaceContentUI; + +import javax.swing.DefaultComboBoxModel; +import javax.swing.DefaultListModel; + +/** + * Created on 16/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class AddSuperClassFromInterfaceAction extends ContentActionSupport<InterfaceContentUI> { + + public AddSuperClassFromInterfaceAction(InterfaceContentUI ui) { + super(ui); + } + + @Override + protected void execute(InterfaceContentUI ui) { + + String superClassName = (String) ui.getSuperClassesHeaderType().getSelectedItem(); + + ui.getModel().addInterface(superClassName); + + ((DefaultListModel<String>) ui.getSuperClasses().getModel()).addElement(superClassName); + ((DefaultComboBoxModel) ui.getSuperClassesHeaderType().getModel()).removeElement(superClassName); + + } + +} diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/ContentActionSupport.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/ContentActionSupport.java new file mode 100644 index 0000000..424f45a --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/ContentActionSupport.java @@ -0,0 +1,55 @@ +package org.nuiton.eugene.editor.application.ui.content.actions; + +import org.nuiton.eugene.editor.application.ui.EugeneEditorUI; +import org.nuiton.eugene.editor.application.ui.content.ContentUI; +import org.nuiton.eugene.editor.application.ui.tree.EugeneEditorTree; +import org.nuiton.eugene.editor.application.ui.tree.node.NodeSupport; + +import javax.swing.AbstractAction; +import java.awt.event.ActionEvent; + +/** + * Created on 16/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public abstract class ContentActionSupport<U extends ContentUI<?>> extends AbstractAction { + + private final U ui; + + public ContentActionSupport(U ui) { + this.ui = ui; + } + + protected abstract void execute(U ui); + + protected boolean canExecute(U ui) { + return true; + } + + @Override + public final void actionPerformed(ActionEvent e) { + + boolean canExecute = canExecute(ui); + if (canExecute) { + execute(ui); + } + } + + protected EugeneEditorUI getMainUi(U ui) { + return ui.getParentContainer(EugeneEditorUI.class); + } + + protected EugeneEditorTree getTree(U ui) { + return getMainUi(ui).getProjectNavigation(); + } + + protected NodeSupport getSelectedNode(NodeSupport currentNode) { + NodeSupport parentNode = currentNode.getParent(); + NodeSupport newSelectedNode = parentNode.getChildBefore(currentNode); + if (newSelectedNode == null) { + newSelectedNode = parentNode; + } + return newSelectedNode; + } +} diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateAttributeFromAttributeAction.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateAttributeFromAttributeAction.java new file mode 100644 index 0000000..a2df3ad --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateAttributeFromAttributeAction.java @@ -0,0 +1,44 @@ +package org.nuiton.eugene.editor.application.ui.content.actions; + +import org.nuiton.eugene.editor.application.ui.content.AttributeContentUI; +import org.nuiton.eugene.editor.application.ui.tree.EugeneEditorTree; +import org.nuiton.eugene.editor.application.ui.tree.node.AttributeNode; +import org.nuiton.eugene.editor.application.ui.tree.node.NodeSupport; + +import javax.swing.tree.DefaultTreeModel; +import javax.swing.tree.TreePath; + +/** + * Created on 16/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class CreateAttributeFromAttributeAction extends ContentActionSupport<AttributeContentUI> { + + public CreateAttributeFromAttributeAction(AttributeContentUI ui) { + super(ui); + } + + @Override + protected boolean canExecute(AttributeContentUI ui) { + return getMainUi(ui).canQuitContent(); + } + + @Override + protected void execute(AttributeContentUI ui) { + + AttributeNode currentNode = ui.getModel(); + NodeSupport parentNode = currentNode.getParent(); + + AttributeNode newNode = parentNode.addAttribute(); + + EugeneEditorTree tree = getTree(ui); + + DefaultTreeModel treeModel = tree.getModel(); + treeModel.insertNodeInto(newNode, parentNode, parentNode.getChildCount()); + + tree.setSelectionPath(new TreePath(treeModel.getPathToRoot(newNode))); + + } + +} diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateAttributeFromClassAction.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateAttributeFromClassAction.java new file mode 100644 index 0000000..2273630 --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateAttributeFromClassAction.java @@ -0,0 +1,42 @@ +package org.nuiton.eugene.editor.application.ui.content.actions; + +import org.nuiton.eugene.editor.application.ui.content.ClassContentUI; +import org.nuiton.eugene.editor.application.ui.tree.EugeneEditorTree; +import org.nuiton.eugene.editor.application.ui.tree.node.AttributeNode; +import org.nuiton.eugene.editor.application.ui.tree.node.NodeSupport; + +import javax.swing.tree.DefaultTreeModel; +import javax.swing.tree.TreePath; + +/** + * Created on 16/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class CreateAttributeFromClassAction extends ContentActionSupport<ClassContentUI> { + + public CreateAttributeFromClassAction(ClassContentUI ui) { + super(ui); + } + + @Override + protected boolean canExecute(ClassContentUI ui) { + return getMainUi(ui).canQuitContent(); + } + + @Override + protected void execute(ClassContentUI ui) { + + NodeSupport currentNode = ui.getModel(); + AttributeNode newNode = currentNode.addAttribute(); + + EugeneEditorTree tree = getTree(ui); + + DefaultTreeModel treeModel = tree.getModel(); + treeModel.insertNodeInto(newNode, currentNode, currentNode.getChildCount()); + + tree.setSelectionPath(new TreePath(treeModel.getPathToRoot(newNode))); + + } + +} diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateAttributeFromInterfaceAction.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateAttributeFromInterfaceAction.java new file mode 100644 index 0000000..f75fa25 --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateAttributeFromInterfaceAction.java @@ -0,0 +1,42 @@ +package org.nuiton.eugene.editor.application.ui.content.actions; + +import org.nuiton.eugene.editor.application.ui.content.InterfaceContentUI; +import org.nuiton.eugene.editor.application.ui.tree.EugeneEditorTree; +import org.nuiton.eugene.editor.application.ui.tree.node.AttributeNode; +import org.nuiton.eugene.editor.application.ui.tree.node.NodeSupport; + +import javax.swing.tree.DefaultTreeModel; +import javax.swing.tree.TreePath; + +/** + * Created on 16/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class CreateAttributeFromInterfaceAction extends ContentActionSupport<InterfaceContentUI> { + + public CreateAttributeFromInterfaceAction(InterfaceContentUI ui) { + super(ui); + } + + @Override + protected boolean canExecute(InterfaceContentUI ui) { + return getMainUi(ui).canQuitContent(); + } + + @Override + protected void execute(InterfaceContentUI ui) { + + NodeSupport currentNode = ui.getModel(); + AttributeNode newNode = currentNode.addAttribute(); + + EugeneEditorTree tree = getTree(ui); + + DefaultTreeModel treeModel = tree.getModel(); + treeModel.insertNodeInto(newNode, currentNode, currentNode.getChildCount()); + + tree.setSelectionPath(new TreePath(treeModel.getPathToRoot(newNode))); + + } + +} diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateClassFromClassAction.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateClassFromClassAction.java new file mode 100644 index 0000000..6dd1f99 --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateClassFromClassAction.java @@ -0,0 +1,45 @@ +package org.nuiton.eugene.editor.application.ui.content.actions; + +import org.nuiton.eugene.editor.application.ui.content.ClassContentUI; +import org.nuiton.eugene.editor.application.ui.tree.EugeneEditorTree; +import org.nuiton.eugene.editor.application.ui.tree.node.ClassNode; +import org.nuiton.eugene.editor.application.ui.tree.node.NodeSupport; + +import javax.swing.tree.DefaultTreeModel; +import javax.swing.tree.TreePath; + +/** + * Created on 16/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class CreateClassFromClassAction extends ContentActionSupport<ClassContentUI> { + + public CreateClassFromClassAction(ClassContentUI ui) { + super(ui); + } + + @Override + protected boolean canExecute(ClassContentUI ui) { + return getMainUi(ui).canQuitContent(); + } + + @Override + protected void execute(ClassContentUI ui) { + + ClassNode currentNode = ui.getModel(); + + ClassNode newNode = currentNode.getRoot().addClass(currentNode.getPackageName()); + + EugeneEditorTree tree = getTree(ui); + + DefaultTreeModel treeModel = tree.getModel(); + NodeSupport parentNode = currentNode.getParent(); + treeModel.insertNodeInto(newNode, parentNode, parentNode.getChildCount()); + + tree.setSelectionPath(new TreePath(treeModel.getPathToRoot(newNode))); + + } + + +} diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateClassFromPackageAction.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateClassFromPackageAction.java new file mode 100644 index 0000000..4e69e2c --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateClassFromPackageAction.java @@ -0,0 +1,43 @@ +package org.nuiton.eugene.editor.application.ui.content.actions; + +import org.nuiton.eugene.editor.application.ui.content.PackageContentUI; +import org.nuiton.eugene.editor.application.ui.tree.EugeneEditorTree; +import org.nuiton.eugene.editor.application.ui.tree.node.ClassNode; +import org.nuiton.eugene.editor.application.ui.tree.node.PackageNode; + +import javax.swing.tree.DefaultTreeModel; +import javax.swing.tree.TreePath; + +/** + * Created on 16/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class CreateClassFromPackageAction extends ContentActionSupport<PackageContentUI> { + + public CreateClassFromPackageAction(PackageContentUI ui) { + super(ui); + } + + @Override + protected boolean canExecute(PackageContentUI ui) { + return getMainUi(ui).canQuitContent(); + } + + @Override + protected void execute(PackageContentUI ui) { + + PackageNode currentNode = ui.getModel(); + + ClassNode newNode = currentNode.getRoot().addClass(currentNode.getName()); + + EugeneEditorTree tree = getTree(ui); + + DefaultTreeModel treeModel = tree.getModel(); + treeModel.insertNodeInto(newNode, currentNode, currentNode.getChildCount()); + + tree.setSelectionPath(new TreePath(treeModel.getPathToRoot(newNode))); + + } + +} diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateEnumerationFromEnumerationAction.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateEnumerationFromEnumerationAction.java new file mode 100644 index 0000000..02494fb --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateEnumerationFromEnumerationAction.java @@ -0,0 +1,44 @@ +package org.nuiton.eugene.editor.application.ui.content.actions; + +import org.nuiton.eugene.editor.application.ui.content.EnumerationContentUI; +import org.nuiton.eugene.editor.application.ui.tree.EugeneEditorTree; +import org.nuiton.eugene.editor.application.ui.tree.node.EnumerationNode; +import org.nuiton.eugene.editor.application.ui.tree.node.NodeSupport; + +import javax.swing.tree.DefaultTreeModel; +import javax.swing.tree.TreePath; + +/** + * Created on 16/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class CreateEnumerationFromEnumerationAction extends ContentActionSupport<EnumerationContentUI> { + + public CreateEnumerationFromEnumerationAction(EnumerationContentUI ui) { + super(ui); + } + + @Override + protected boolean canExecute(EnumerationContentUI ui) { + return getMainUi(ui).canQuitContent(); + } + + @Override + protected void execute(EnumerationContentUI ui) { + + EnumerationNode currentNode = ui.getModel(); + + EnumerationNode newNode = currentNode.getRoot().addEnumeration(currentNode.getPackageName()); + + EugeneEditorTree tree = getTree(ui); + + DefaultTreeModel treeModel = tree.getModel(); + NodeSupport parentNode = currentNode.getParent(); + treeModel.insertNodeInto(newNode, parentNode, parentNode.getChildCount()); + + tree.setSelectionPath(new TreePath(treeModel.getPathToRoot(newNode))); + + } + +} diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateEnumerationFromPackageAction.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateEnumerationFromPackageAction.java new file mode 100644 index 0000000..27f444c --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateEnumerationFromPackageAction.java @@ -0,0 +1,43 @@ +package org.nuiton.eugene.editor.application.ui.content.actions; + +import org.nuiton.eugene.editor.application.ui.content.PackageContentUI; +import org.nuiton.eugene.editor.application.ui.tree.EugeneEditorTree; +import org.nuiton.eugene.editor.application.ui.tree.node.EnumerationNode; +import org.nuiton.eugene.editor.application.ui.tree.node.PackageNode; + +import javax.swing.tree.DefaultTreeModel; +import javax.swing.tree.TreePath; + +/** + * Created on 16/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class CreateEnumerationFromPackageAction extends ContentActionSupport<PackageContentUI> { + + public CreateEnumerationFromPackageAction(PackageContentUI ui) { + super(ui); + } + + @Override + protected boolean canExecute(PackageContentUI ui) { + return getMainUi(ui).canQuitContent(); + } + + @Override + protected void execute(PackageContentUI ui) { + + PackageNode currentNode = ui.getModel(); + + EnumerationNode newNode = currentNode.getRoot().addEnumeration(currentNode.getName()); + + EugeneEditorTree tree = getTree(ui); + + DefaultTreeModel treeModel = tree.getModel(); + treeModel.insertNodeInto(newNode, currentNode, currentNode.getChildCount()); + + tree.setSelectionPath(new TreePath(treeModel.getPathToRoot(newNode))); + + } + +} diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateInterfaceFromInterfaceAction.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateInterfaceFromInterfaceAction.java new file mode 100644 index 0000000..e5cb464 --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateInterfaceFromInterfaceAction.java @@ -0,0 +1,44 @@ +package org.nuiton.eugene.editor.application.ui.content.actions; + +import org.nuiton.eugene.editor.application.ui.content.InterfaceContentUI; +import org.nuiton.eugene.editor.application.ui.tree.EugeneEditorTree; +import org.nuiton.eugene.editor.application.ui.tree.node.InterfaceNode; +import org.nuiton.eugene.editor.application.ui.tree.node.NodeSupport; + +import javax.swing.tree.DefaultTreeModel; +import javax.swing.tree.TreePath; + +/** + * Created on 16/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class CreateInterfaceFromInterfaceAction extends ContentActionSupport<InterfaceContentUI> { + + public CreateInterfaceFromInterfaceAction(InterfaceContentUI ui) { + super(ui); + } + + @Override + protected boolean canExecute(InterfaceContentUI ui) { + return getMainUi(ui).canQuitContent(); + } + + @Override + protected void execute(InterfaceContentUI ui) { + + InterfaceNode currentNode = ui.getModel(); + + InterfaceNode newNode = currentNode.getRoot().addInterface(currentNode.getPackageName()); + + EugeneEditorTree tree = getTree(ui); + + DefaultTreeModel treeModel = tree.getModel(); + NodeSupport parentNode = currentNode.getParent(); + treeModel.insertNodeInto(newNode, parentNode, parentNode.getChildCount()); + + tree.setSelectionPath(new TreePath(treeModel.getPathToRoot(newNode))); + + } + +} diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateInterfaceFromPackageAction.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateInterfaceFromPackageAction.java new file mode 100644 index 0000000..89b2818 --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateInterfaceFromPackageAction.java @@ -0,0 +1,43 @@ +package org.nuiton.eugene.editor.application.ui.content.actions; + +import org.nuiton.eugene.editor.application.ui.content.PackageContentUI; +import org.nuiton.eugene.editor.application.ui.tree.EugeneEditorTree; +import org.nuiton.eugene.editor.application.ui.tree.node.InterfaceNode; +import org.nuiton.eugene.editor.application.ui.tree.node.PackageNode; + +import javax.swing.tree.DefaultTreeModel; +import javax.swing.tree.TreePath; + +/** + * Created on 16/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class CreateInterfaceFromPackageAction extends ContentActionSupport<PackageContentUI> { + + public CreateInterfaceFromPackageAction(PackageContentUI ui) { + super(ui); + } + + @Override + protected boolean canExecute(PackageContentUI ui) { + return getMainUi(ui).canQuitContent(); + } + + @Override + protected void execute(PackageContentUI ui) { + + PackageNode currentNode = ui.getModel(); + + InterfaceNode newNode = currentNode.getRoot().addInterface(currentNode.getName()); + + EugeneEditorTree tree = getTree(ui); + + DefaultTreeModel treeModel = tree.getModel(); + treeModel.insertNodeInto(newNode, currentNode, currentNode.getChildCount()); + + tree.setSelectionPath(new TreePath(treeModel.getPathToRoot(newNode))); + + } + +} diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateLiteralFromEnumerationAction.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateLiteralFromEnumerationAction.java new file mode 100644 index 0000000..7ef273c --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateLiteralFromEnumerationAction.java @@ -0,0 +1,21 @@ +package org.nuiton.eugene.editor.application.ui.content.actions; + +import org.nuiton.eugene.editor.application.ui.content.EnumerationContentUI; + +/** + * Created on 16/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class CreateLiteralFromEnumerationAction extends ContentActionSupport<EnumerationContentUI> { + + public CreateLiteralFromEnumerationAction(EnumerationContentUI ui) { + super(ui); + } + + @Override + protected void execute(EnumerationContentUI ui) { + + } + +} diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateOperationFromClassAction.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateOperationFromClassAction.java new file mode 100644 index 0000000..af6fa7a --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateOperationFromClassAction.java @@ -0,0 +1,43 @@ +package org.nuiton.eugene.editor.application.ui.content.actions; + +import org.nuiton.eugene.editor.application.ui.content.ClassContentUI; +import org.nuiton.eugene.editor.application.ui.tree.EugeneEditorTree; +import org.nuiton.eugene.editor.application.ui.tree.node.ClassNode; +import org.nuiton.eugene.editor.application.ui.tree.node.OperationNode; + +import javax.swing.tree.DefaultTreeModel; +import javax.swing.tree.TreePath; + +/** + * Created on 16/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class CreateOperationFromClassAction extends ContentActionSupport<ClassContentUI> { + + public CreateOperationFromClassAction(ClassContentUI ui) { + super(ui); + } + + @Override + protected boolean canExecute(ClassContentUI ui) { + return getMainUi(ui).canQuitContent(); + } + + @Override + protected void execute(ClassContentUI ui) { + + ClassNode currentNode = ui.getModel(); + + OperationNode newNode = currentNode.addOperation(); + + EugeneEditorTree tree = getTree(ui); + + DefaultTreeModel treeModel = tree.getModel(); + treeModel.insertNodeInto(newNode, currentNode, currentNode.getChildCount()); + + tree.setSelectionPath(new TreePath(treeModel.getPathToRoot(newNode))); + + } + +} diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateOperationFromInterfaceAction.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateOperationFromInterfaceAction.java new file mode 100644 index 0000000..76fce52 --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateOperationFromInterfaceAction.java @@ -0,0 +1,43 @@ +package org.nuiton.eugene.editor.application.ui.content.actions; + +import org.nuiton.eugene.editor.application.ui.content.InterfaceContentUI; +import org.nuiton.eugene.editor.application.ui.tree.EugeneEditorTree; +import org.nuiton.eugene.editor.application.ui.tree.node.InterfaceNode; +import org.nuiton.eugene.editor.application.ui.tree.node.OperationNode; + +import javax.swing.tree.DefaultTreeModel; +import javax.swing.tree.TreePath; + +/** + * Created on 16/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class CreateOperationFromInterfaceAction extends ContentActionSupport<InterfaceContentUI> { + + public CreateOperationFromInterfaceAction(InterfaceContentUI ui) { + super(ui); + } + + @Override + protected boolean canExecute(InterfaceContentUI ui) { + return getMainUi(ui).canQuitContent(); + } + + @Override + protected void execute(InterfaceContentUI ui) { + + InterfaceNode currentNode = ui.getModel(); + + OperationNode newNode = currentNode.addOperation(); + + EugeneEditorTree tree = getTree(ui); + + DefaultTreeModel treeModel = tree.getModel(); + treeModel.insertNodeInto(newNode, currentNode, currentNode.getChildCount()); + + tree.setSelectionPath(new TreePath(treeModel.getPathToRoot(newNode))); + + } + +} diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateOperationFromOperationAction.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateOperationFromOperationAction.java new file mode 100644 index 0000000..882f9f4 --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateOperationFromOperationAction.java @@ -0,0 +1,44 @@ +package org.nuiton.eugene.editor.application.ui.content.actions; + +import org.nuiton.eugene.editor.application.ui.content.OperationContentUI; +import org.nuiton.eugene.editor.application.ui.tree.EugeneEditorTree; +import org.nuiton.eugene.editor.application.ui.tree.node.NodeSupport; +import org.nuiton.eugene.editor.application.ui.tree.node.OperationNode; + +import javax.swing.tree.DefaultTreeModel; +import javax.swing.tree.TreePath; + +/** + * Created on 16/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class CreateOperationFromOperationAction extends ContentActionSupport<OperationContentUI> { + + public CreateOperationFromOperationAction(OperationContentUI ui) { + super(ui); + } + + @Override + protected boolean canExecute(OperationContentUI ui) { + return getMainUi(ui).canQuitContent(); + } + + @Override + protected void execute(OperationContentUI ui) { + + OperationNode currentNode = ui.getModel(); + NodeSupport parentNode = currentNode.getParent(); + + OperationNode newNode = parentNode.addOperation(); + + EugeneEditorTree tree = getTree(ui); + + DefaultTreeModel treeModel = tree.getModel(); + treeModel.insertNodeInto(newNode, parentNode, parentNode.getChildCount()); + + tree.setSelectionPath(new TreePath(treeModel.getPathToRoot(newNode))); + + } + +} diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreatePackageFromModelAction.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreatePackageFromModelAction.java new file mode 100644 index 0000000..26e8495 --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreatePackageFromModelAction.java @@ -0,0 +1,45 @@ +package org.nuiton.eugene.editor.application.ui.content.actions; + +import org.nuiton.eugene.editor.application.ui.content.ModelContentUI; +import org.nuiton.eugene.editor.application.ui.tree.EugeneEditorTree; +import org.nuiton.eugene.editor.application.ui.tree.node.ModelNode; +import org.nuiton.eugene.editor.application.ui.tree.node.PackageNode; + +import javax.swing.tree.DefaultTreeModel; +import javax.swing.tree.TreePath; + +/** + * Created on 16/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class CreatePackageFromModelAction extends ContentActionSupport<ModelContentUI> { + + public CreatePackageFromModelAction(ModelContentUI ui) { + super(ui); + } + + @Override + protected boolean canExecute(ModelContentUI ui) { + return getMainUi(ui).canQuitContent(); + } + + @Override + protected void execute(ModelContentUI ui) { + + ModelNode currentNode = ui.getModel(); + + PackageNode newNode = currentNode.addPackage(""); + + EugeneEditorTree tree = getTree(ui); + + DefaultTreeModel treeModel = tree.getModel(); + ModelNode root = (ModelNode) treeModel.getRoot(); + treeModel.insertNodeInto(newNode, root, root.getChildCount()); + + TreePath path = new TreePath(treeModel.getPathToRoot(newNode)); + tree.setSelectionPath(path); + + } + +} diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreatePackageFromPackageAction.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreatePackageFromPackageAction.java new file mode 100644 index 0000000..8411afb --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreatePackageFromPackageAction.java @@ -0,0 +1,42 @@ +package org.nuiton.eugene.editor.application.ui.content.actions; + +import org.nuiton.eugene.editor.application.ui.content.PackageContentUI; +import org.nuiton.eugene.editor.application.ui.tree.EugeneEditorTree; +import org.nuiton.eugene.editor.application.ui.tree.node.ModelNode; +import org.nuiton.eugene.editor.application.ui.tree.node.PackageNode; + +import javax.swing.tree.DefaultTreeModel; +import javax.swing.tree.TreePath; + +/** + * Created on 16/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class CreatePackageFromPackageAction extends ContentActionSupport<PackageContentUI> { + + public CreatePackageFromPackageAction(PackageContentUI ui) { + super(ui); + } + + @Override + protected void execute(PackageContentUI ui) { + + PackageNode currentNode = ui.getModel(); + ModelNode root = currentNode.getRoot(); + + PackageNode newNode = root.addPackage(currentNode.getName() + "."); + + EugeneEditorTree tree = getTree(ui); + + DefaultTreeModel treeModel = tree.getModel(); + + treeModel.insertNodeInto(newNode, root, root.getChildCount()); + + TreePath path = new TreePath(treeModel.getPathToRoot(newNode)); + tree.setSelectionPath(path); + + } + + +} diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateParameterFromOperationAction.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateParameterFromOperationAction.java new file mode 100644 index 0000000..32c0424 --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateParameterFromOperationAction.java @@ -0,0 +1,35 @@ +package org.nuiton.eugene.editor.application.ui.content.actions; + +import org.nuiton.eugene.editor.application.ui.content.OperationContentUI; +import org.nuiton.eugene.editor.application.ui.content.ParameterTableModel; +import org.nuiton.eugene.editor.application.ui.tree.node.OperationNode; +import org.nuiton.eugene.models.object.xml.ObjectModelParameterImpl; + +/** + * Created on 16/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class CreateParameterFromOperationAction extends ContentActionSupport<OperationContentUI> { + + public CreateParameterFromOperationAction(OperationContentUI ui) { + super(ui); + } + + @Override + protected boolean canExecute(OperationContentUI ui) { + return getMainUi(ui).canQuitContent(); + } + + @Override + protected void execute(OperationContentUI ui) { + + OperationNode currentNode = ui.getModel(); + + ObjectModelParameterImpl newData = currentNode.addParameter(); + + ((ParameterTableModel) ui.getParameters().getModel()).add(newData); + + } + +} diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/DeleteAttributeFromAttributeAction.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/DeleteAttributeFromAttributeAction.java new file mode 100644 index 0000000..61dc3db --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/DeleteAttributeFromAttributeAction.java @@ -0,0 +1,45 @@ +package org.nuiton.eugene.editor.application.ui.content.actions; + +import org.nuiton.eugene.editor.application.ui.content.AttributeContentUI; +import org.nuiton.eugene.editor.application.ui.tree.EugeneEditorTree; +import org.nuiton.eugene.editor.application.ui.tree.node.NodeSupport; + +import javax.swing.tree.DefaultTreeModel; +import javax.swing.tree.TreePath; + +/** + * Created on 16/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class DeleteAttributeFromAttributeAction extends ContentActionSupport<AttributeContentUI> { + + public DeleteAttributeFromAttributeAction(AttributeContentUI ui) { + super(ui); + } + + @Override + protected boolean canExecute(AttributeContentUI ui) { + return getMainUi(ui).canQuitContent(); + } + + @Override + protected void execute(AttributeContentUI ui) { + + NodeSupport currentNode = ui.getModel(); + + currentNode.getParent().removeAttribute(ui.getModel().getName()); + + EugeneEditorTree tree = getTree(ui); + + NodeSupport newSelectedNode = getSelectedNode(currentNode); + + DefaultTreeModel treeModel = tree.getModel(); + treeModel.removeNodeFromParent(currentNode); + + TreePath path = new TreePath(treeModel.getPathToRoot(newSelectedNode)); + tree.setSelectionPath(path); + + } + +} diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/DeleteClassFromClassAction.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/DeleteClassFromClassAction.java new file mode 100644 index 0000000..96e324e --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/DeleteClassFromClassAction.java @@ -0,0 +1,46 @@ +package org.nuiton.eugene.editor.application.ui.content.actions; + +import org.nuiton.eugene.editor.application.ui.content.ClassContentUI; +import org.nuiton.eugene.editor.application.ui.tree.EugeneEditorTree; +import org.nuiton.eugene.editor.application.ui.tree.node.ClassNode; +import org.nuiton.eugene.editor.application.ui.tree.node.NodeSupport; + +import javax.swing.tree.DefaultTreeModel; +import javax.swing.tree.TreePath; + +/** + * Created on 16/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class DeleteClassFromClassAction extends ContentActionSupport<ClassContentUI> { + + public DeleteClassFromClassAction(ClassContentUI ui) { + super(ui); + } + + @Override + protected boolean canExecute(ClassContentUI ui) { + return getMainUi(ui).canQuitContent(); + } + + @Override + protected void execute(ClassContentUI ui) { + + ClassNode currentNode = ui.getModel(); + + currentNode.getRoot().removeClass(ui.getModel().getUserObject().getQualifiedName()); + + EugeneEditorTree tree = getTree(ui); + + NodeSupport newSelectedNode = getSelectedNode(currentNode); + + DefaultTreeModel treeModel = tree.getModel(); + treeModel.removeNodeFromParent(currentNode); + + TreePath path = new TreePath(treeModel.getPathToRoot(newSelectedNode)); + tree.setSelectionPath(path); + + } + +} diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/DeleteEnumerationFromEnumerationAction.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/DeleteEnumerationFromEnumerationAction.java new file mode 100644 index 0000000..d8774c6 --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/DeleteEnumerationFromEnumerationAction.java @@ -0,0 +1,46 @@ +package org.nuiton.eugene.editor.application.ui.content.actions; + +import org.nuiton.eugene.editor.application.ui.content.EnumerationContentUI; +import org.nuiton.eugene.editor.application.ui.tree.EugeneEditorTree; +import org.nuiton.eugene.editor.application.ui.tree.node.EnumerationNode; +import org.nuiton.eugene.editor.application.ui.tree.node.NodeSupport; + +import javax.swing.tree.DefaultTreeModel; +import javax.swing.tree.TreePath; + +/** + * Created on 16/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class DeleteEnumerationFromEnumerationAction extends ContentActionSupport<EnumerationContentUI> { + + public DeleteEnumerationFromEnumerationAction(EnumerationContentUI ui) { + super(ui); + } + + @Override + protected boolean canExecute(EnumerationContentUI ui) { + return getMainUi(ui).canQuitContent(); + } + + @Override + protected void execute(EnumerationContentUI ui) { + + EnumerationNode currentNode = ui.getModel(); + + currentNode.getRoot().removeEnumeration(ui.getModel().getUserObject().getQualifiedName()); + + EugeneEditorTree tree = getTree(ui); + + NodeSupport newSelectedNode = getSelectedNode(currentNode); + + DefaultTreeModel treeModel = tree.getModel(); + treeModel.removeNodeFromParent(currentNode); + + TreePath path = new TreePath(treeModel.getPathToRoot(newSelectedNode)); + tree.setSelectionPath(path); + + } + +} diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/DeleteInterfaceFromInterfaceAction.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/DeleteInterfaceFromInterfaceAction.java new file mode 100644 index 0000000..bb2fb40 --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/DeleteInterfaceFromInterfaceAction.java @@ -0,0 +1,41 @@ +package org.nuiton.eugene.editor.application.ui.content.actions; + +import org.nuiton.eugene.editor.application.ui.content.InterfaceContentUI; +import org.nuiton.eugene.editor.application.ui.tree.EugeneEditorTree; +import org.nuiton.eugene.editor.application.ui.tree.node.InterfaceNode; +import org.nuiton.eugene.editor.application.ui.tree.node.NodeSupport; + +import javax.swing.tree.DefaultTreeModel; +import javax.swing.tree.TreePath; + +/** + * Created on 16/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class DeleteInterfaceFromInterfaceAction extends ContentActionSupport<InterfaceContentUI> { + + public DeleteInterfaceFromInterfaceAction(InterfaceContentUI ui) { + super(ui); + } + + @Override + protected void execute(InterfaceContentUI ui) { + + InterfaceNode currentNode = ui.getModel(); + + currentNode.getRoot().removeInterface(currentNode.getUserObject().getQualifiedName()); + + EugeneEditorTree tree = getTree(ui); + + NodeSupport newSelectedNode = getSelectedNode(currentNode); + + DefaultTreeModel treeModel = tree.getModel(); + treeModel.removeNodeFromParent(currentNode); + + TreePath path = new TreePath(treeModel.getPathToRoot(newSelectedNode)); + tree.setSelectionPath(path); + + } + +} diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/DeleteOperationFromOperationAction.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/DeleteOperationFromOperationAction.java new file mode 100644 index 0000000..522d36d --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/DeleteOperationFromOperationAction.java @@ -0,0 +1,45 @@ +package org.nuiton.eugene.editor.application.ui.content.actions; + +import org.nuiton.eugene.editor.application.ui.content.OperationContentUI; +import org.nuiton.eugene.editor.application.ui.tree.EugeneEditorTree; +import org.nuiton.eugene.editor.application.ui.tree.node.NodeSupport; +import org.nuiton.eugene.editor.application.ui.tree.node.OperationNode; + +import javax.swing.tree.DefaultTreeModel; +import javax.swing.tree.TreePath; + +/** + * Created on 16/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class DeleteOperationFromOperationAction extends ContentActionSupport<OperationContentUI> { + + public DeleteOperationFromOperationAction(OperationContentUI ui) { + super(ui); + } + + @Override + protected boolean canExecute(OperationContentUI ui) { + return getMainUi(ui).canQuitContent(); + } + + @Override + protected void execute(OperationContentUI ui) { + + OperationNode currentNode = ui.getModel(); + + currentNode.getParent().removeOperation(ui.getModel().getName()); + + EugeneEditorTree tree = getTree(ui); + + NodeSupport newSelectedNode = getSelectedNode(currentNode); + + DefaultTreeModel treeModel = tree.getModel(); + treeModel.removeNodeFromParent(currentNode); + + tree.setSelectionPath(new TreePath(treeModel.getPathToRoot(newSelectedNode))); + + } + +} diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/DeletePackageFromPackageAction.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/DeletePackageFromPackageAction.java new file mode 100644 index 0000000..90cfb1a --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/DeletePackageFromPackageAction.java @@ -0,0 +1,45 @@ +package org.nuiton.eugene.editor.application.ui.content.actions; + +import org.nuiton.eugene.editor.application.ui.content.PackageContentUI; +import org.nuiton.eugene.editor.application.ui.tree.EugeneEditorTree; +import org.nuiton.eugene.editor.application.ui.tree.node.NodeSupport; +import org.nuiton.eugene.editor.application.ui.tree.node.PackageNode; + +import javax.swing.tree.DefaultTreeModel; +import javax.swing.tree.TreePath; + +/** + * Created on 16/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class DeletePackageFromPackageAction extends ContentActionSupport<PackageContentUI> { + + public DeletePackageFromPackageAction(PackageContentUI ui) { + super(ui); + } + + @Override + protected boolean canExecute(PackageContentUI ui) { + return getMainUi(ui).canQuitContent(); + } + + @Override + protected void execute(PackageContentUI ui) { + + PackageNode currentNode = ui.getModel(); + currentNode.getRoot().removePackage(ui.getModel().getName()); + + EugeneEditorTree tree = getTree(ui); + + NodeSupport newSelectedNode = getSelectedNode(currentNode); + + DefaultTreeModel treeModel = tree.getModel(); + treeModel.removeNodeFromParent(currentNode); + + tree.setSelectionPath(new TreePath(treeModel.getPathToRoot(newSelectedNode))); + + } + + +} diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/DeleteParameterFromOperationAction.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/DeleteParameterFromOperationAction.java new file mode 100644 index 0000000..1233dc2 --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/DeleteParameterFromOperationAction.java @@ -0,0 +1,50 @@ +package org.nuiton.eugene.editor.application.ui.content.actions; + +import org.nuiton.eugene.editor.application.ui.content.OperationContentUI; +import org.nuiton.eugene.editor.application.ui.content.ParameterTableModel; +import org.nuiton.eugene.editor.application.ui.tree.node.OperationNode; + +import java.util.Arrays; + +/** + * Created on 16/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class DeleteParameterFromOperationAction extends ContentActionSupport<OperationContentUI> { + + public DeleteParameterFromOperationAction(OperationContentUI ui) { + super(ui); + } + + @Override + protected boolean canExecute(OperationContentUI ui) { + return getMainUi(ui).canQuitContent(); + } + + @Override + protected void execute(OperationContentUI ui) { + + int[] selectedRows = ui.getParameters().getSelectedRows(); + if (selectedRows.length == 0) { + return; + } + + Arrays.sort(selectedRows); + + ParameterTableModel tableModel = (ParameterTableModel) ui.getParameters().getModel(); + OperationNode currentNode = ui.getModel(); + + for (int i = selectedRows.length - 1; i > -1; i--) { + + int selectedRow = selectedRows[i]; + + currentNode.removeParameter(tableModel.get(selectedRow).getName()); + + tableModel.remove(selectedRow); + + } + + } + +} diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/RemoveInterfaceFromClassAction.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/RemoveInterfaceFromClassAction.java new file mode 100644 index 0000000..267a4bf --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/RemoveInterfaceFromClassAction.java @@ -0,0 +1,38 @@ +package org.nuiton.eugene.editor.application.ui.content.actions; + +import org.nuiton.eugene.editor.application.ui.content.ClassContentUI; +import org.nuiton.eugene.editor.application.ui.tree.node.ModelNode; + +import javax.swing.DefaultListModel; + +/** + * Created on 16/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class RemoveInterfaceFromClassAction extends ContentActionSupport<ClassContentUI> { + + public RemoveInterfaceFromClassAction(ClassContentUI ui) { + super(ui); + } + + @Override + protected void execute(ClassContentUI ui) { + + ModelNode modelNode = ui.getModel().getRoot(); + + DefaultListModel listModel = (DefaultListModel) ui.getInterfaces().getModel(); + + for (String interfaceName : ui.getInterfaces().getSelectedValuesList()) { + + modelNode.removeInterface(interfaceName); + + listModel.removeElement(interfaceName); + + ui.getInterfacesHeaderType().addItem(interfaceName); + + } + + } + +} diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/RemoveLiteralFromEnumerationAction.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/RemoveLiteralFromEnumerationAction.java new file mode 100644 index 0000000..f223c0a --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/RemoveLiteralFromEnumerationAction.java @@ -0,0 +1,36 @@ +package org.nuiton.eugene.editor.application.ui.content.actions; + +import org.nuiton.eugene.editor.application.ui.content.EnumerationContentUI; +import org.nuiton.eugene.editor.application.ui.tree.node.EnumerationNode; + +import javax.swing.DefaultListModel; + +/** + * Created on 16/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class RemoveLiteralFromEnumerationAction extends ContentActionSupport<EnumerationContentUI> { + + public RemoveLiteralFromEnumerationAction(EnumerationContentUI ui) { + super(ui); + } + + @Override + protected void execute(EnumerationContentUI ui) { + + EnumerationNode currentNode = ui.getModel(); + + DefaultListModel listModel = (DefaultListModel) ui.getLiterals().getModel(); + + for (String literal : ui.getLiterals().getSelectedValuesList()) { + + currentNode.removeLiteral(literal); + + listModel.removeElement(literal); + + } + + } + +} diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/RemoveSuperClassFromInterfaceAction.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/RemoveSuperClassFromInterfaceAction.java new file mode 100644 index 0000000..f042a3d --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/RemoveSuperClassFromInterfaceAction.java @@ -0,0 +1,38 @@ +package org.nuiton.eugene.editor.application.ui.content.actions; + +import org.nuiton.eugene.editor.application.ui.content.InterfaceContentUI; +import org.nuiton.eugene.editor.application.ui.tree.node.ModelNode; + +import javax.swing.DefaultListModel; +import java.util.List; + +/** + * Created on 16/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class RemoveSuperClassFromInterfaceAction extends ContentActionSupport<InterfaceContentUI> { + + public RemoveSuperClassFromInterfaceAction(InterfaceContentUI ui) { + super(ui); + } + + @Override + protected void execute(InterfaceContentUI ui) { + + List<String> interfaceNames = ui.getSuperClasses().getSelectedValuesList(); + + ModelNode currentNode = ui.getModel().getRoot(); + + for (String interfaceName : interfaceNames) { + + currentNode.removeInterface(interfaceName); + + ((DefaultListModel) ui.getSuperClasses().getModel()).removeElement(interfaceName); + ui.getSuperClassesHeaderType().addItem(interfaceName); + + } + + } + +} diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/EugeneEditorTree.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/EugeneEditorTree.java new file mode 100644 index 0000000..d19b113 --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/EugeneEditorTree.java @@ -0,0 +1,29 @@ +package org.nuiton.eugene.editor.application.ui.tree; + +import org.nuiton.eugene.editor.application.ui.EugeneEditorUI; + +import javax.swing.JTree; +import javax.swing.tree.DefaultTreeModel; + +/** + * Created on 19/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class EugeneEditorTree extends JTree { + + public EugeneEditorTree(EugeneEditorUI ui) { + setModel(ui.getContextValue(DefaultTreeModel.class)); + setSelectionModel(new EugeneEditorTreeSelectionModel(ui)); + setCellRenderer(new EugeneEditorTreeCellRenderer()); + setLargeModel(true); + setShowsRootHandles(false); + setRowHeight(16); + } + + @Override + public DefaultTreeModel getModel() { + return (DefaultTreeModel) super.getModel(); + } + +} diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/EugeneEditorTreeCellRenderer.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/EugeneEditorTreeCellRenderer.java new file mode 100644 index 0000000..7660983 --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/EugeneEditorTreeCellRenderer.java @@ -0,0 +1,35 @@ +package org.nuiton.eugene.editor.application.ui.tree; + +import org.nuiton.eugene.editor.application.ui.tree.node.NodeSupport; + +import javax.swing.JTree; +import javax.swing.tree.DefaultTreeCellRenderer; +import java.awt.Component; + +/** + * Created on 16/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class EugeneEditorTreeCellRenderer extends DefaultTreeCellRenderer { + + @Override + public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) { + + NodeSupport node = (NodeSupport) value; + + if (node.isCreate()) { + value = node.getCreateName(); + } + + if (node.isModified()) { + value = value + " *"; + } + super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus); + + setIcon(node.getIcon()); + + return this; + + } +} diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/EugeneEditorTreeSelectionModel.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/EugeneEditorTreeSelectionModel.java new file mode 100644 index 0000000..29cfa94 --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/EugeneEditorTreeSelectionModel.java @@ -0,0 +1,99 @@ +package org.nuiton.eugene.editor.application.ui.tree; + +import org.nuiton.eugene.editor.application.ui.ContentUIManager; +import org.nuiton.eugene.editor.application.ui.EugeneEditorUI; +import org.nuiton.eugene.editor.application.ui.content.ContentUI; +import org.nuiton.eugene.editor.application.ui.tree.node.NodeSupport; + +import javax.swing.JComponent; +import javax.swing.JLabel; +import javax.swing.SwingUtilities; +import javax.swing.tree.DefaultTreeSelectionModel; +import javax.swing.tree.TreePath; +import java.beans.PropertyChangeListener; + +/** + * Created on 18/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class EugeneEditorTreeSelectionModel extends DefaultTreeSelectionModel { + + public static final String CLIENT_PROPERTY_NODE = "node"; + private final EugeneEditorUI ui; + private final PropertyChangeListener reloadNodeChangeListener; + private final ContentUIManager contentUIManager; + + public EugeneEditorTreeSelectionModel(EugeneEditorUI ui) { + this.ui = ui; + this.contentUIManager = new ContentUIManager(ui); + setSelectionMode(SINGLE_TREE_SELECTION); + reloadNodeChangeListener = evt -> { + NodeSupport source = (NodeSupport) evt.getSource(); + if (source.getReloadProperties().contains(evt.getPropertyName())) { + ui.getProjectNavigation().getModel().nodeChanged(source); + } + }; + } + + @Override + public void setSelectionPaths(TreePath[] paths) { + if (paths.length == 1) { + setSelectionPath(paths[0]); + } else { + super.setSelectionPaths(paths); + } + } + + @Override + public void setSelectionPath(TreePath path) { + + if (!isSelectionEmpty()) { + + NodeSupport node = (NodeSupport) getSelectionPath().getLastPathComponent(); + ContentUI contentUi = contentUIManager.getContent(node); + boolean canQuit = ui.canQuitContent(); + + if (!canQuit) { + return; + } + + contentUi.close(); + + if (node.isCreate()) { + node.setCreate(false); + + //TODO Do some post create actions (resort tree) + + } + + } + + NodeSupport node = (NodeSupport) path.getLastPathComponent(); + + openNode(node, contentUIManager); + + SwingUtilities.invokeLater(ui.getProjectPane()::revalidate); + + super.setSelectionPaths(new TreePath[]{path}); + + } + + protected <M, N extends NodeSupport<M>> void openNode(N node, ContentUIManager contentUIManager) { + + node.removePropertyChangeListener(reloadNodeChangeListener); + node.addPropertyChangeListener(reloadNodeChangeListener); + + ContentUI<N> content = contentUIManager.getContent(node); + + content.setContextValue(node, CLIENT_PROPERTY_NODE); + + content.setLeftDecoration(new JLabel(node.getIcon())); + + content.open(node); + + ui.getSplitpane2().setLeftComponent((JComponent) content); + + } + +} diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/TreeModelBuilder.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/TreeModelBuilder.java new file mode 100644 index 0000000..cbcd7cd --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/TreeModelBuilder.java @@ -0,0 +1,82 @@ +package org.nuiton.eugene.editor.application.ui.tree; + +import org.nuiton.eugene.editor.application.ui.tree.node.AttributeNode; +import org.nuiton.eugene.editor.application.ui.tree.node.ClassNode; +import org.nuiton.eugene.editor.application.ui.tree.node.EnumerationNode; +import org.nuiton.eugene.editor.application.ui.tree.node.InterfaceNode; +import org.nuiton.eugene.editor.application.ui.tree.node.ModelNode; +import org.nuiton.eugene.editor.application.ui.tree.node.OperationNode; +import org.nuiton.eugene.editor.application.ui.tree.node.PackageNode; +import org.nuiton.eugene.models.object.ObjectModel; +import org.nuiton.eugene.models.object.ObjectModelAttribute; +import org.nuiton.eugene.models.object.ObjectModelClass; +import org.nuiton.eugene.models.object.ObjectModelEnumeration; +import org.nuiton.eugene.models.object.ObjectModelInterface; +import org.nuiton.eugene.models.object.ObjectModelOperation; +import org.nuiton.eugene.models.object.ObjectModelPackage; +import org.nuiton.eugene.models.object.xml.ObjectModelAttributeImpl; +import org.nuiton.eugene.models.object.xml.ObjectModelClassImpl; +import org.nuiton.eugene.models.object.xml.ObjectModelEnumerationImpl; +import org.nuiton.eugene.models.object.xml.ObjectModelImpl; +import org.nuiton.eugene.models.object.xml.ObjectModelInterfaceImpl; +import org.nuiton.eugene.models.object.xml.ObjectModelOperationImpl; +import org.nuiton.eugene.models.object.xml.ObjectModelPackageImpl; + +import javax.swing.tree.DefaultTreeModel; +import javax.swing.tree.TreeModel; +import java.util.Map; +import java.util.TreeMap; + +/** + * Created on 16/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class TreeModelBuilder { + + public static TreeModel build(ObjectModel objectModel) { + + ModelNode modelNode = new ModelNode((ObjectModelImpl) objectModel); + + Map<String, PackageNode> packages = new TreeMap<>(); + + for (ObjectModelPackage objectModelPackage : objectModel.getPackages()) { + PackageNode packageNode = new PackageNode((ObjectModelPackageImpl) objectModelPackage); + packages.put(objectModelPackage.getName(), packageNode); + } + + for (ObjectModelClass objectModelClass : objectModel.getClasses()) { + ClassNode classNode = new ClassNode((ObjectModelClassImpl) objectModelClass); + packages.get(objectModelClass.getPackageName()).add(classNode); + objectModelClass.getAttributes().stream() + .filter(ObjectModelAttribute::isNavigable) + .forEach(objectModelAttribute -> classNode.add(new AttributeNode((ObjectModelAttributeImpl) objectModelAttribute))); + for (ObjectModelOperation objectModelOperation : objectModelClass.getOperations()) { + classNode.add(new OperationNode((ObjectModelOperationImpl) objectModelOperation)); + } + } + for (ObjectModelInterface objectModelInterface : objectModel.getInterfaces()) { + InterfaceNode interfaceNode = new InterfaceNode((ObjectModelInterfaceImpl) objectModelInterface); + packages.get(objectModelInterface.getPackageName()).add(interfaceNode); + objectModelInterface.getAttributes().stream() + .filter(ObjectModelAttribute::isNavigable) + .forEach(objectModelAttribute -> interfaceNode.add(new AttributeNode((ObjectModelAttributeImpl) objectModelAttribute))); + for (ObjectModelOperation objectModelOperation : objectModelInterface.getOperations()) { + interfaceNode.add(new OperationNode((ObjectModelOperationImpl) objectModelOperation)); + } + } + for (ObjectModelEnumeration objectModelEnumeration : objectModel.getEnumerations()) { + EnumerationNode enumerationNode = new EnumerationNode((ObjectModelEnumerationImpl) objectModelEnumeration); + packages.get(objectModelEnumeration.getPackageName()).add(enumerationNode); + objectModelEnumeration.getAttributes().stream() + .filter(ObjectModelAttribute::isNavigable) + .forEach(objectModelAttribute -> enumerationNode.add(new AttributeNode((ObjectModelAttributeImpl) objectModelAttribute))); + } + + packages.values().stream().filter(packageNode -> !packageNode.isLeaf()).forEach(modelNode::add); + + return new DefaultTreeModel(modelNode); + } + + +} diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/AttributeNode.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/AttributeNode.java new file mode 100644 index 0000000..457cca4 --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/AttributeNode.java @@ -0,0 +1,71 @@ +package org.nuiton.eugene.editor.application.ui.tree.node; + +import com.google.common.collect.ImmutableSet; +import org.nuiton.eugene.models.object.xml.ObjectModelAttributeImpl; + +import java.util.Set; + +import static org.nuiton.i18n.I18n.t; + +/** + * Created on 16/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class AttributeNode extends NodeSupport<ObjectModelAttributeImpl> { + + private static final String PROPERTY_VISIBILITY = "visibility"; + private static final String PROPERTY_TYPE = "type"; + + public AttributeNode(ObjectModelAttributeImpl objectModelAttribute) { + super(objectModelAttribute, PROPERTY_NAME, PROPERTY_TYPE, PROPERTY_VISIBILITY); + } + + @Override + public String getName() { + return getUserObject().getName(); + } + + @Override + public void setName(String name) { + String oldValue = getName(); + getUserObject().setName(name); + getUserObject().postInit(); + firePropertyChange(PROPERTY_NAME, oldValue, name); + } + + public String getVisibility() { + return getUserObject().getVisibility(); + } + + public void setVisibility(String visibility) { + String oldValue = getVisibility(); + getUserObject().setVisibility(visibility); + firePropertyChange(PROPERTY_VISIBILITY, oldValue, visibility); + } + + public String getType() { + return getUserObject().getType(); + } + + public void setType(String type) { + String oldValue = getType(); + getUserObject().setType(type); + firePropertyChange(PROPERTY_TYPE, oldValue, type); + } + + @Override + public String getCreateName() { + return t("eugene.editor.new.attribute"); + } + + @Override + public Set<String> getReloadProperties() { + return ImmutableSet.of(PROPERTY_NAME, PROPERTY_MODIFIED); + } + + @Override + public String toString() { + return getName(); + } +} diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/ClassNode.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/ClassNode.java new file mode 100644 index 0000000..1b0b4d5 --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/ClassNode.java @@ -0,0 +1,71 @@ +package org.nuiton.eugene.editor.application.ui.tree.node; + +import com.google.common.collect.ImmutableSet; +import org.nuiton.eugene.models.object.ObjectModelClass; +import org.nuiton.eugene.models.object.xml.ObjectModelClassImpl; + +import java.util.Collection; +import java.util.Set; + +import static org.nuiton.i18n.I18n.t; + +/** + * Created on 16/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class ClassNode extends NodeSupport<ObjectModelClassImpl> { + + public static final String PROPERTY_SUPER_CLASS = "superClass"; + + public ClassNode(ObjectModelClassImpl objectModelClass) { + super(objectModelClass, PROPERTY_NAME); + } + + @Override + public String getName() { + return getUserObject().getName(); + } + + @Override + public void setName(String name) { + String oldValue = getName(); + getUserObject().setName(name); + getUserObject().postInit(); + firePropertyChange(PROPERTY_NAME, oldValue, name); + } + + public String getSuperClass() { + Collection<ObjectModelClass> superclasses = getUserObject().getSuperclasses(); + return superclasses.isEmpty() ? null : superclasses.iterator().next().getQualifiedName(); + } + + public void setSuperClass(String superClass) { + Object oldValue = getSuperClass(); + ObjectModelClass modelSuperClass = getRoot().getUserObject().getClass(superClass); + Collection<ObjectModelClass> superclasses = getUserObject().getSuperclasses(); + superclasses.clear(); + superclasses.add(modelSuperClass); + firePropertyChange(PROPERTY_SUPER_CLASS, oldValue, superClass); + } + + @Override + public String getCreateName() { + return t("eugene.editor.new.class"); + } + + @Override + public Set<String> getReloadProperties() { + return ImmutableSet.of(PROPERTY_NAME, PROPERTY_MODIFIED); + } + + @Override + public String toString() { + return getName(); + } + + public String getPackageName() { + return getParent().getName(); + } + +} diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/EnumerationNode.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/EnumerationNode.java new file mode 100644 index 0000000..5b4fa1b --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/EnumerationNode.java @@ -0,0 +1,63 @@ +package org.nuiton.eugene.editor.application.ui.tree.node; + +import com.google.common.collect.ImmutableSet; +import org.nuiton.eugene.models.object.xml.ObjectModelEnumerationImpl; +import org.nuiton.eugene.models.object.xml.ObjectModelImplRef; + +import java.util.Set; + +import static org.nuiton.i18n.I18n.t; + +/** + * Created on 16/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class EnumerationNode extends NodeSupport<ObjectModelEnumerationImpl> { + + public EnumerationNode(ObjectModelEnumerationImpl objectModelEnumeration) { + super(objectModelEnumeration, PROPERTY_NAME); + } + + @Override + public String getName() { + return getUserObject().getName(); + } + + @Override + public void setName(String name) { + String oldValue = getName(); + getUserObject().setName(name); + getUserObject().postInit(); + firePropertyChange(PROPERTY_NAME, oldValue, name); + } + + @Override + public String getCreateName() { + return t("eugene.editor.new.enumeration"); + } + + @Override + public Set<String> getReloadProperties() { + return ImmutableSet.of(PROPERTY_NAME, PROPERTY_MODIFIED); + } + + @Override + public String toString() { + return getName(); + } + + public String getPackageName() { + return getParent().getName(); + } + + public void addLiteral(String literal) { + ObjectModelImplRef ref = new ObjectModelImplRef(); + ref.setName(literal); + getUserObject().addLiteral(ref); + } + + public void removeLiteral(String literal) { + getUserObject().removeLiteral(literal); + } +} diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/InterfaceNode.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/InterfaceNode.java new file mode 100644 index 0000000..c2a5fca --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/InterfaceNode.java @@ -0,0 +1,65 @@ +package org.nuiton.eugene.editor.application.ui.tree.node; + +import com.google.common.collect.ImmutableSet; +import org.apache.commons.lang3.StringUtils; +import org.nuiton.eugene.models.object.xml.ObjectModelInterfaceImpl; + +import java.util.Set; + +import static org.nuiton.i18n.I18n.t; + +/** + * Created on 16/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class InterfaceNode extends NodeSupport<ObjectModelInterfaceImpl> { + + public InterfaceNode(ObjectModelInterfaceImpl objectModelInterface) { + super(objectModelInterface, PROPERTY_NAME); + } + + @Override + public String getName() { + return getUserObject().getName(); + } + + @Override + public void setName(String name) { + String oldValue = getName(); + getUserObject().setName(name); + getUserObject().postInit(); + firePropertyChange(PROPERTY_NAME, oldValue, name); + } + + @Override + public String getCreateName() { + return t("eugene.editor.new.interface"); + } + + @Override + public Set<String> getReloadProperties() { + return ImmutableSet.of(PROPERTY_NAME, PROPERTY_MODIFIED); + } + + @Override + public String toString() { + return getName(); + } + + public void addInterface(String superClassName) { + + String[] split = superClassName.split("\\."); + + ObjectModelInterfaceImpl newInterface = new ObjectModelInterfaceImpl(); + newInterface.setName(split[split.length - 1]); + newInterface.setPackage(StringUtils.removeEnd(superClassName, "." + newInterface.getName())); + newInterface.postInit(); + + getUserObject().getInterfaces().add(newInterface); + } + + public String getPackageName() { + return getParent().getName(); + } +} diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/ModelNode.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/ModelNode.java new file mode 100644 index 0000000..337a404 --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/ModelNode.java @@ -0,0 +1,137 @@ +package org.nuiton.eugene.editor.application.ui.tree.node; + +import com.google.common.collect.ImmutableSet; +import org.nuiton.eugene.models.object.ObjectModelClass; +import org.nuiton.eugene.models.object.ObjectModelEnumeration; +import org.nuiton.eugene.models.object.ObjectModelInterface; +import org.nuiton.eugene.models.object.ObjectModelPackage; +import org.nuiton.eugene.models.object.xml.ObjectModelClassImpl; +import org.nuiton.eugene.models.object.xml.ObjectModelEnumerationImpl; +import org.nuiton.eugene.models.object.xml.ObjectModelImpl; +import org.nuiton.eugene.models.object.xml.ObjectModelInterfaceImpl; +import org.nuiton.eugene.models.object.xml.ObjectModelPackageImpl; + +import java.util.Set; +import java.util.stream.Collectors; + +import static org.nuiton.i18n.I18n.t; + +/** + * Created on 16/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class ModelNode extends NodeSupport<ObjectModelImpl> { + + public static final String PROPERTY_CLASSES = "classes"; + public static final String PROPERTY_INTERFACES = "interfaces"; + public static final String PROPERTY_ENUMERATIONS = "enumerations"; + public static final String PROPERTY_PACKAGES = "packages"; + + public ModelNode(ObjectModelImpl objectModel) { + super(objectModel, PROPERTY_NAME); + } + + @Override + public String getName() { + return getUserObject().getName(); + } + + @Override + public void setName(String name) { + String oldValue = getName(); + getUserObject().setName(name); + firePropertyChange(PROPERTY_NAME, oldValue, name); + } + + @Override + public String getCreateName() { + return t("eugene.editor.new.model"); + } + + @Override + public Set<String> getReloadProperties() { + return ImmutableSet.of(PROPERTY_NAME, PROPERTY_MODIFIED); + } + + @Override + public String toString() { + return getName(); + } + + public void add(PackageNode packageNode) { + super.add(packageNode); + } + + + public PackageNode addPackage(String packageName) { + + ObjectModelPackageImpl newData = new ObjectModelPackageImpl(); + newData.setName(""); + + getUserObject().addPackage(newData); + firePropertyChange(PROPERTY_PACKAGES, null, getUserObject().getPackages().stream().map(ObjectModelPackage::getName).collect(Collectors.toList())); + PackageNode node = new PackageNode(newData); + node.setCreate(true); + return node; + } + + public void removePackage(String name) { + getUserObject().removePackage(name); + firePropertyChange(PROPERTY_PACKAGES, null, getUserObject().getPackages().stream().map(ObjectModelPackage::getName).collect(Collectors.toList())); + } + + public ClassNode addClass(String packageName) { + + ObjectModelClassImpl newData = new ObjectModelClassImpl(); + newData.setName(""); + newData.setPackage(packageName); + + getUserObject().addClass(newData); + firePropertyChange(PROPERTY_CLASSES, null, getUserObject().getClasses().stream().map(ObjectModelClass::getName).collect(Collectors.toList())); + ClassNode node = new ClassNode(newData); + node.setCreate(true); + return node; + } + + public void removeClass(String qualifiedName) { + getUserObject().removeClass(qualifiedName); + firePropertyChange(PROPERTY_CLASSES, null, getUserObject().getClasses().stream().map(ObjectModelClass::getName).collect(Collectors.toList())); + } + + public InterfaceNode addInterface(String packageName) { + + ObjectModelInterfaceImpl newData = new ObjectModelInterfaceImpl(); + newData.setName(""); + newData.setPackage(packageName); + + getUserObject().addInterface(newData); + firePropertyChange(PROPERTY_INTERFACES, null, getUserObject().getInterfaces().stream().map(ObjectModelInterface::getName).collect(Collectors.toList())); + InterfaceNode node = new InterfaceNode(newData); + node.setCreate(true); + return node; + } + + public void removeInterface(String qualifiedName) { + getUserObject().removeInterface(qualifiedName); + firePropertyChange(PROPERTY_INTERFACES, null, getUserObject().getInterfaces().stream().map(ObjectModelInterface::getName).collect(Collectors.toList())); + } + + public EnumerationNode addEnumeration(String packageName) { + ObjectModelEnumerationImpl newData = new ObjectModelEnumerationImpl(); + newData.setName(""); + newData.setPackage(packageName); + + getUserObject().addEnumeration(newData); + firePropertyChange(PROPERTY_ENUMERATIONS, null, getUserObject().getEnumerations().stream().map(ObjectModelEnumeration::getName).collect(Collectors.toList())); + EnumerationNode node = new EnumerationNode(newData); + node.setCreate(true); + return node; + } + + public void removeEnumeration(String qualifiedName) { + getUserObject().removeEnumeration(qualifiedName); + firePropertyChange(PROPERTY_ENUMERATIONS, null, getUserObject().getEnumerations().stream().map(ObjectModelEnumeration::getName).collect(Collectors.toList())); + } + +} diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/NodeSupport.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/NodeSupport.java new file mode 100644 index 0000000..c22170f --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/NodeSupport.java @@ -0,0 +1,195 @@ +package org.nuiton.eugene.editor.application.ui.tree.node; + +import jaxx.runtime.SwingUtil; +import org.apache.commons.lang3.StringUtils; +import org.nuiton.eugene.models.object.xml.ObjectModelAttributeImpl; +import org.nuiton.eugene.models.object.xml.ObjectModelClassifierImpl; +import org.nuiton.eugene.models.object.xml.ObjectModelOperationImpl; +import org.nuiton.util.beans.BeanMonitor; + +import javax.swing.Icon; +import javax.swing.ImageIcon; +import javax.swing.event.SwingPropertyChangeSupport; +import javax.swing.tree.DefaultMutableTreeNode; +import javax.swing.tree.TreeNode; +import java.beans.Introspector; +import java.beans.PropertyChangeListener; +import java.util.Enumeration; +import java.util.Objects; +import java.util.Set; + +/** + * Created on 16/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public abstract class NodeSupport<M> extends DefaultMutableTreeNode { + + public static final String PROPERTY_NAME = "name"; + public static final String PROPERTY_MODIFIED = "modified"; + public static final String PROPERTY_VALID = "valid"; + public static final String PROPERTY_CREATE = "create"; + protected ImageIcon icon; + + private boolean create; + private boolean modified; + private boolean valid; + + private final SwingPropertyChangeSupport pcs = new SwingPropertyChangeSupport(this); + private final BeanMonitor monitor = new BeanMonitor(); + + public NodeSupport(M userObject, String... monitorProperties) { + super(userObject); + monitor.setBean(this); + monitor.setProperties(monitorProperties); + addPropertyChangeListener(evt -> { + if (!Objects.equals(NodeSupport.PROPERTY_MODIFIED, evt.getPropertyName())) { + setModified(monitor.wasModified()); + } + }); + } + + @Override + public M getUserObject() { + return (M) super.getUserObject(); + } + + public Icon getIcon() { + if (icon == null) { + icon = SwingUtil.createIcon("type", Introspector.decapitalize(StringUtils.removeEnd(getClass().getSimpleName(), "Node"))); + } + return icon; + } + + public abstract String getName(); + + public abstract void setName(String name); + + public abstract String getCreateName(); + + public abstract Set<String> getReloadProperties(); + + public boolean isCreate() { + return create; + } + + public void setCreate(boolean create) { + boolean oldValue = this.create; + this.create = create; + firePropertyChange(PROPERTY_CREATE, oldValue, create); + } + + @Override + public NodeSupport getParent() { + return (NodeSupport) super.getParent(); + } + + @Override + public ModelNode getRoot() { + return (ModelNode) super.getRoot(); + } + + @Override + public NodeSupport getChildBefore(TreeNode aChild) { + return (NodeSupport) super.getChildBefore(aChild); + } + + public boolean isModified() { + return modified; + } + + public void setModified(boolean modified) { + Object oldValue = isModified(); + this.modified = modified; + firePropertyChange(PROPERTY_MODIFIED, oldValue, modified); + if (getParent() != null) { + getParent().recomputeModified(); + } + } + + public void recomputeModified() { + + boolean modified = false; + Enumeration children = children(); + while (children.hasMoreElements()) { + NodeSupport node = (NodeSupport) children.nextElement(); + if (node.isModified()) { + modified = true; + break; + } + } + setModified(modified); + } + + public boolean isValid() { + return valid; + } + + public void setValid(boolean valid) { + Object oldValue = isValid(); + this.valid = valid; + pcs.firePropertyChange(PROPERTY_VALID, oldValue, valid); + } + + public void addPropertyChangeListener(PropertyChangeListener listener) { + pcs.addPropertyChangeListener(listener); + } + + public void removePropertyChangeListener(PropertyChangeListener listener) { + pcs.removePropertyChangeListener(listener); + } + + public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener) { + pcs.addPropertyChangeListener(propertyName, listener); + } + + public void removePropertyChangeListener(String propertyName, PropertyChangeListener listener) { + pcs.removePropertyChangeListener(propertyName, listener); + } + + public void reset() { + monitor.clearModified(); + } + + protected void firePropertyChange(String propertyName, Object oldValue, Object newValue) { + pcs.firePropertyChange(propertyName, oldValue, newValue); + } + + public AttributeNode addAttribute() { + + ObjectModelAttributeImpl newData = new ObjectModelAttributeImpl(); + newData.setName(""); + + ObjectModelClassifierImpl classifier = (ObjectModelClassifierImpl) getUserObject(); + classifier.addAttribute(newData); + + AttributeNode node = new AttributeNode(newData); + node.setCreate(true); + return node; + } + + public void removeOperation(String name) { + + ObjectModelClassifierImpl classifier = (ObjectModelClassifierImpl) getUserObject(); + classifier.removeOperation(name); + + } + + public void removeAttribute(String name) { + ObjectModelClassifierImpl classifier = (ObjectModelClassifierImpl) getUserObject(); + classifier.removeAttribute(name); + } + + public OperationNode addOperation() { + + ObjectModelOperationImpl newData = new ObjectModelOperationImpl(); + newData.setName(""); + + ObjectModelClassifierImpl classifier = (ObjectModelClassifierImpl) getUserObject(); + classifier.addOperation(newData); + + OperationNode node = new OperationNode(newData); + node.setCreate(true); + return node; + } +} diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/OperationNode.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/OperationNode.java new file mode 100644 index 0000000..49a6be2 --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/OperationNode.java @@ -0,0 +1,97 @@ +package org.nuiton.eugene.editor.application.ui.tree.node; + +import com.google.common.collect.ImmutableSet; +import org.nuiton.eugene.models.object.xml.ObjectModelOperationImpl; +import org.nuiton.eugene.models.object.xml.ObjectModelParameterImpl; + +import java.util.Set; + +import static org.nuiton.i18n.I18n.t; + +/** + * Created on 16/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class OperationNode extends NodeSupport<ObjectModelOperationImpl> { + + private static final String PROPERTY_VISIBILITY = "visibility"; + private static final String PROPERTY_RETURN_TYPE = "returnType"; + private static final String PROPERTY_ABSTRACT = "abstract"; + + public OperationNode(ObjectModelOperationImpl objectModelAttribute) { + super(objectModelAttribute, PROPERTY_NAME, PROPERTY_ABSTRACT, PROPERTY_RETURN_TYPE); + } + + @Override + public String getName() { + return getUserObject().getName(); + } + + @Override + public void setName(String name) { + String oldValue = getName(); + getUserObject().setName(name); + getUserObject().postInit(); + firePropertyChange(PROPERTY_NAME, oldValue, name); + } + + public String getVisibility() { + return getUserObject().getVisibility(); + } + + public void setVisibility(String visibility) { + String oldValue = getVisibility(); + getUserObject().setVisibility(visibility); + firePropertyChange(PROPERTY_VISIBILITY, oldValue, visibility); + } + + public String getReturnType() { + return getUserObject().getReturnType(); + } + + public void setReturnType(String returnType) { + String oldValue = getReturnType(); + ObjectModelParameterImpl returnParameter = new ObjectModelParameterImpl(); + returnParameter.setType(returnType); + getUserObject().setReturnParameter(returnParameter); + firePropertyChange(PROPERTY_RETURN_TYPE, oldValue, returnType); + } + + public boolean isAbstract() { + return getUserObject().isAbstract(); + } + + public void setAbstract(boolean abstractz) { + boolean oldValue = isAbstract(); + getUserObject().setAbstract(abstractz); + firePropertyChange(PROPERTY_ABSTRACT, oldValue, abstractz); + } + + @Override + public String getCreateName() { + return t("eugene.editor.new.operation"); + } + + @Override + public Set<String> getReloadProperties() { + return ImmutableSet.of(PROPERTY_NAME, PROPERTY_MODIFIED); + } + + @Override + public String toString() { + return getName(); + } + + public void removeParameter(String name) { + getUserObject().removeParameter(name); + } + + public ObjectModelParameterImpl addParameter() { + + ObjectModelParameterImpl newData = new ObjectModelParameterImpl(); + newData.setName(""); + getUserObject().addParameter(newData); + return newData; + } +} diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/PackageNode.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/PackageNode.java new file mode 100644 index 0000000..457f305 --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/PackageNode.java @@ -0,0 +1,49 @@ +package org.nuiton.eugene.editor.application.ui.tree.node; + +import com.google.common.collect.ImmutableSet; +import org.nuiton.eugene.models.object.xml.ObjectModelPackageImpl; + +import java.util.Set; + +import static org.nuiton.i18n.I18n.t; + +/** + * Created on 16/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public class PackageNode extends NodeSupport<ObjectModelPackageImpl> { + + public PackageNode(ObjectModelPackageImpl objectModelPackage) { + super(objectModelPackage, PROPERTY_NAME); + } + + @Override + public String getName() { + return getUserObject().getName(); + } + + @Override + public void setName(String name) { + String oldValue = getName(); + getUserObject().setName(name); + getUserObject().postInit(); + firePropertyChange(PROPERTY_NAME, oldValue, name); + } + + @Override + public String getCreateName() { + return t("eugene.editor.new.package"); + } + + @Override + public Set<String> getReloadProperties() { + return ImmutableSet.of(PROPERTY_NAME, PROPERTY_MODIFIED); + } + + @Override + public String toString() { + return getName(); + } + +} diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/plugin/EugeneEditorMojo.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/plugin/EugeneEditorMojo.java new file mode 100644 index 0000000..74beda9 --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/plugin/EugeneEditorMojo.java @@ -0,0 +1,169 @@ +package org.nuiton.eugene.editor.plugin; + +import jaxx.runtime.context.JAXXInitialContext; +import org.apache.maven.plugins.annotations.Component; +import org.apache.maven.plugins.annotations.Mojo; +import org.apache.maven.plugins.annotations.Parameter; +import org.apache.maven.plugins.annotations.ResolutionScope; +import org.apache.maven.project.MavenProject; +import org.nuiton.eugene.ModelReader; +import org.nuiton.eugene.editor.application.EugeneEditorApplicationContext; +import org.nuiton.eugene.editor.application.config.EugeneEditorConfig; +import org.nuiton.eugene.editor.application.ui.EugeneEditorUI; +import org.nuiton.eugene.models.object.ObjectModel; +import org.nuiton.eugene.models.object.reader.extension.LoadModelExtension; +import org.nuiton.eugene.models.stereotype.AggregateStereotypeDefinitionProvider; +import org.nuiton.eugene.models.stereotype.StereotypeDefinitionProvider; +import org.nuiton.eugene.models.stereotype.StereotypeDefinitionProviders; +import org.nuiton.eugene.models.tagvalue.AggregateTagValueDefinitionProvider; +import org.nuiton.eugene.models.tagvalue.TagValueDefinitionProvider; +import org.nuiton.eugene.models.tagvalue.TagValueDefinitionProviders; +import org.nuiton.plugin.AbstractPlugin; + +import javax.swing.SwingUtilities; +import java.io.File; +import java.net.URLClassLoader; +import java.util.Map; + +/** + * Laucnh the editor on models detected in project. + * + * Created on 16/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.0 + */ +@Mojo(name = "run", requiresDependencyResolution = ResolutionScope.RUNTIME) +public class EugeneEditorMojo extends AbstractPlugin { + + /** + * Pour activer le mode verbeux. + */ + @Parameter(property = "eugene.verbose", defaultValue = "${maven.verbose}") + protected boolean verbose; + + /** + * Encoding to be used for generation of files. + */ + @Parameter(property = "eugene.encoding", defaultValue = "${project.build.sourceEncoding}") + protected String encoding; + /** + * Maven project. + */ + @Parameter(defaultValue = "${project}", readonly = true) + protected MavenProject project; + /** + * All available tag value providers introspects via plexus. + */ + @Component(role = TagValueDefinitionProvider.class) + protected Map<String, TagValueDefinitionProvider> tagValueDefinitionProviders; + /** + * All available stereotype providers introspects via plexus. + */ + @Component(role = StereotypeDefinitionProvider.class) + protected Map<String, StereotypeDefinitionProvider> stereotypeDefinitionProviders; + @Component(hint = "xmlobjectmodel") + protected ModelReader modelReader; + protected ObjectModel model; + protected AggregateTagValueDefinitionProvider tagValueDefinitionProvider; + protected AggregateStereotypeDefinitionProvider stereotypeDefinitionProvider; + protected ClassLoader contextClassLoader; + protected URLClassLoader classLoader; + /** + * The source directory where to scan options java file. + */ + @Parameter(property = "eugene.sourceDirectory", defaultValue = "${basedir}/src/main/xmi", required = true) + private File sourceDirectory; + /** + * The source directory where to scan options java file. + */ + @Parameter(property = "eugene.generatedSourceDirectory", defaultValue = "${project.build.directory}/generated-sources/models", required = true) + private File generatedSourceDirectory; + /** + * The source directory where to scan options java file. + */ + @Parameter(property = "eugene.workingDirectory", defaultValue = "${project.build.directory}/eugeneEditor", required = true) + private File workingDirectory; + + @Override + protected void init() throws Exception { + + contextClassLoader = Thread.currentThread().getContextClassLoader(); + classLoader = initClassLoader(getProject(), generatedSourceDirectory, true, false, false, true, true); + + tagValueDefinitionProvider = TagValueDefinitionProviders.newProvider(tagValueDefinitionProviders.values(), verbose); + stereotypeDefinitionProvider = StereotypeDefinitionProviders.newProvider(stereotypeDefinitionProviders.values(), verbose); + + modelReader.setVerbose(verbose); + modelReader.setTagValueDefinitionProvider(tagValueDefinitionProvider); + modelReader.setStereotypeDefinitionProvider(stereotypeDefinitionProvider); + + File[] files = generatedSourceDirectory.listFiles(f -> f.getName().endsWith(".objectmodel")); + if (files != null) { + + getLog().info("Found " + files.length + " model file(s)."); + model = (ObjectModel) modelReader.read(files); + } + + LoadModelExtension<ObjectModel> loadModelExtension = new LoadModelExtension<>(verbose, false, model); + + File[] extensionFiles = sourceDirectory.listFiles(f -> f.getName().endsWith(".objectmodel-ext")); + if (extensionFiles != null) { + + getLog().info("Found " + extensionFiles.length + " model extension file(s)."); + + for (File file : extensionFiles) { + getLog().info("Loading extension file: " + file); + loadModelExtension.load(file); + } + + } + + } + + @Override + protected void doAction() throws Exception { + + Thread.currentThread().setContextClassLoader(classLoader); + try { + + EugeneEditorConfig config = new EugeneEditorConfig(); + config.setWorkingDirectory(workingDirectory); + EugeneEditorApplicationContext applicationContext = new EugeneEditorApplicationContext( + config, + classLoader, + tagValueDefinitionProvider, + stereotypeDefinitionProvider, + model); + + JAXXInitialContext ctx = new JAXXInitialContext().add(applicationContext); + SwingUtilities.invokeLater(() -> new EugeneEditorUI(ctx).setVisible(true)); + + applicationContext.lock(); + + } finally { + + Thread.currentThread().setContextClassLoader(contextClassLoader); + } + } + + @Override + public boolean isVerbose() { + return verbose; + } + + @Override + public void setVerbose(boolean verbose) { + this.verbose = verbose; + } + + @Override + public MavenProject getProject() { + return project; + } + + @Override + public void setProject(MavenProject project) { + this.project = project; + } +} diff --git a/eugene-editor-maven-plugin/src/main/resources/i18n/eugene-editor-maven-plugin_en_GB.properties b/eugene-editor-maven-plugin/src/main/resources/i18n/eugene-editor-maven-plugin_en_GB.properties new file mode 100644 index 0000000..6281c5d --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/resources/i18n/eugene-editor-maven-plugin_en_GB.properties @@ -0,0 +1,102 @@ +eugene.editor.action.exit=Quit +eugene.editor.action.exit.tip=Quit editor +eugene.editor.action.locale.fr=FR +eugene.editor.action.locale.fr.tip=French +eugene.editor.action.locale.uk=EN +eugene.editor.action.locale.uk.tip=English +eugene.editor.action.saveProject=Save project +eugene.editor.action.saveProject.tip=Save project +eugene.editor.action.showAbout=About +eugene.editor.action.showAbout.tip=About +eugene.editor.action.showConfig=Config +eugene.editor.action.showConfig.tip=Open config +eugene.editor.action.site=Site +eugene.editor.action.site.tip=Go to site +eugene.editor.add.interface=Add interface +eugene.editor.add.literal=Literal +eugene.editor.add.superClass=Add super class +eugene.editor.aggregation=Aggregation +eugene.editor.aggregation.aggregate=Aggregate +eugene.editor.aggregation.compose=Compose +eugene.editor.aggregation.none=None +eugene.editor.attribute=Attribute +eugene.editor.attribute.defaultValue=Default value +eugene.editor.attribute.name=Name +eugene.editor.attribute.type=Type +eugene.editor.bidi=Bidirectional +eugene.editor.class=Class +eugene.editor.class.name=Name +eugene.editor.config.configFileName.description=Configuration file +eugene.editor.config.modelExtensionFile.description=PRoject in edition +eugene.editor.config.workingDirectory.description=Data directory +eugene.editor.create.attribute=Create an attribute +eugene.editor.create.class=Create a class +eugene.editor.create.enumeration=Create a enumeration +eugene.editor.create.interface=Create a interface +eugene.editor.create.literal=Create a literal +eugene.editor.create.operation=Create an operation +eugene.editor.create.package=Create a package +eugene.editor.create.parameter=Create a parameter +eugene.editor.delete.attribute=Delete attribute +eugene.editor.delete.class=Delete class +eugene.editor.delete.enumeration=Delete enumeration +eugene.editor.delete.interface=Delete interface +eugene.editor.delete.literal=Literal +eugene.editor.delete.operation=Delete Operation +eugene.editor.delete.package=Delete package +eugene.editor.delete.parameter=Delete parameter +eugene.editor.delete.superClass=Delete super class +eugene.editor.enumeration=Enumeration +eugene.editor.enumeration.name=Name +eugene.editor.general=General +eugene.editor.interface=Interface +eugene.editor.interface.name=Name +eugene.editor.interfaces=Interfaces +eugene.editor.literals=Literals +eugene.editor.menu.configuration=Configuration +eugene.editor.menu.configuration.tip=Configuration +eugene.editor.menu.file=File +eugene.editor.menu.help=Help +eugene.editor.menu.locale=Languages +eugene.editor.model=Model +eugene.editor.model.name=Name +eugene.editor.new.attribute=New attribute +eugene.editor.new.class=New class +eugene.editor.new.enumeration=New enumeration +eugene.editor.new.interface=New interface +eugene.editor.new.model=New model +eugene.editor.new.operation=New operation +eugene.editor.new.package=New package +eugene.editor.operation=Operation +eugene.editor.operation.name=Name +eugene.editor.operation.returnType=Return type +eugene.editor.package=Package +eugene.editor.package.name=Name +eugene.editor.parameter.name=Name +eugene.editor.parameter.type=Type +eugene.editor.parameters=Parameters +eugene.editor.stereotypes=Stereotypes +eugene.editor.stereotypesAndTagValues=Stereotypes and tag values +eugene.editor.superClass=Super class +eugene.editor.superClasses=Super classes +eugene.editor.tagValues=Tag values +eugene.editor.title.view.navigation=Navigation +eugene.editor.validator.attribute.mandatory.name= +eugene.editor.validator.attribute.mandatory.type= +eugene.editor.validator.enumeration.mandatory.name= +eugene.editor.validator.interface.mandatory.name= +eugene.editor.validator.model.mandatory.name= +eugene.editor.validator.operation.mandatory.name= +eugene.editor.validator.operation.mandatory.type= +eugene.editor.validator.package.mandatory.name= +eugene.editor.view.message=Messages +eugene.editor.visibility=Visibility +eugene.editor.visibility.package=package +eugene.editor.visibility.private=private +eugene.editor.visibility.protected=protected +eugene.editor.visibility.public=public +eugene.no.interface.defined=< No interface defined > +eugene.no.parameter.defined=< No paramter defined > +eugene.no.stereotype.found=< No stereotype available > +eugene.no.superClass.defined=< No super class defined > +eugene.no.tagValue.found=< No tag vaue available > diff --git a/eugene-editor-maven-plugin/src/main/resources/i18n/eugene-editor-maven-plugin_fr_FR.properties b/eugene-editor-maven-plugin/src/main/resources/i18n/eugene-editor-maven-plugin_fr_FR.properties new file mode 100644 index 0000000..78aa015 --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/resources/i18n/eugene-editor-maven-plugin_fr_FR.properties @@ -0,0 +1,102 @@ +eugene.editor.action.exit=Quitter +eugene.editor.action.exit.tip=Quitter l'éditeur +eugene.editor.action.locale.fr=FR +eugene.editor.action.locale.fr.tip=Français +eugene.editor.action.locale.uk=EN +eugene.editor.action.locale.uk.tip=Anglais +eugene.editor.action.saveProject=Enregistrer le projet +eugene.editor.action.saveProject.tip=Enregister le projet +eugene.editor.action.showAbout=À propos +eugene.editor.action.showAbout.tip=À propos +eugene.editor.action.showConfig=Préférences +eugene.editor.action.showConfig.tip=Préférences +eugene.editor.action.site=Site web +eugene.editor.action.site.tip=Accéder au site web de l'éditeur +eugene.editor.add.interface=Ajouter une interface +eugene.editor.add.literal=Ajouter un literal +eugene.editor.add.superClass=Ajouter une classe parent +eugene.editor.aggregation=Aggrégation +eugene.editor.aggregation.aggregate=Aggrège +eugene.editor.aggregation.compose=Compose +eugene.editor.aggregation.none=Aucun +eugene.editor.attribute=Attribut +eugene.editor.attribute.defaultValue=Valuer par défaut +eugene.editor.attribute.name=Nom +eugene.editor.attribute.type=Type +eugene.editor.bidi=Bi directionnel +eugene.editor.class=Classe +eugene.editor.class.name=Nom +eugene.editor.config.configFileName.description=Fichier de configuration +eugene.editor.config.modelExtensionFile.description=Fichier en cours d'édition +eugene.editor.config.workingDirectory.description=Répertoire de données de l'application +eugene.editor.create.attribute=Créer un attribut +eugene.editor.create.class=Créer une classe +eugene.editor.create.enumeration=Créer une énumération +eugene.editor.create.interface=Créer une interface +eugene.editor.create.literal=Créer un litéral +eugene.editor.create.operation=Créer une opération +eugene.editor.create.package=Créer un paquetage +eugene.editor.create.parameter=Créer un Paramètre +eugene.editor.delete.attribute=Supprimer l'attribut +eugene.editor.delete.class=Supprimer la classe +eugene.editor.delete.enumeration=Supprimer l'énumération +eugene.editor.delete.interface=Supprimer l'interface +eugene.editor.delete.literal=Supprimer le litéral +eugene.editor.delete.operation=Supprimer l'opération +eugene.editor.delete.package=Supprimer le paquetage +eugene.editor.delete.parameter=Supprimer le paramètre +eugene.editor.delete.superClass=Supprimer la classe parent +eugene.editor.enumeration=Énumération +eugene.editor.enumeration.name=Nom +eugene.editor.general=Général +eugene.editor.interface=Interface +eugene.editor.interface.name=Nom +eugene.editor.interfaces=Interfaces +eugene.editor.literals=Litérals +eugene.editor.menu.configuration=Configuration +eugene.editor.menu.configuration.tip=Configuration +eugene.editor.menu.file=Fichier +eugene.editor.menu.help=Aide +eugene.editor.menu.locale=Langues +eugene.editor.model=Modèle +eugene.editor.model.name=Nom +eugene.editor.new.attribute=Nouvel attribut +eugene.editor.new.class=Nouvelle classe +eugene.editor.new.enumeration=Nouvelle énumération +eugene.editor.new.interface=Nouvelle interface +eugene.editor.new.model=Nouveau modèle +eugene.editor.new.operation=Nouvelle opération +eugene.editor.new.package=Nouveau paquetage +eugene.editor.operation=Opération +eugene.editor.operation.name=Nom +eugene.editor.operation.returnType=Type de retour +eugene.editor.package=Paquetage +eugene.editor.package.name=Nom +eugene.editor.parameter.name=Nom +eugene.editor.parameter.type=Type +eugene.editor.parameters=Paramètres +eugene.editor.stereotypes=Stéréotypes +eugene.editor.stereotypesAndTagValues=Stéréotypes et tag values +eugene.editor.superClass=Classe parent +eugene.editor.superClasses=Classes parent +eugene.editor.tagValues=Tag values +eugene.editor.title.view.navigation=Navigation +eugene.editor.validator.attribute.mandatory.name= +eugene.editor.validator.attribute.mandatory.type= +eugene.editor.validator.enumeration.mandatory.name= +eugene.editor.validator.interface.mandatory.name= +eugene.editor.validator.model.mandatory.name= +eugene.editor.validator.operation.mandatory.name= +eugene.editor.validator.operation.mandatory.type= +eugene.editor.validator.package.mandatory.name= +eugene.editor.view.message=Messages +eugene.editor.visibility=Visibilité +eugene.editor.visibility.package=paquetage +eugene.editor.visibility.private=privé +eugene.editor.visibility.protected=protégé +eugene.editor.visibility.public=public +eugene.no.interface.defined=< Pas d'interface définie > +eugene.no.parameter.defined=< Pas de paramètre défini > +eugene.no.stereotype.found=< Pas de stéréotype disponible > +eugene.no.superClass.defined=< Pas de classe parent définie > +eugene.no.tagValue.found=< Pas de tag value disponible > diff --git a/eugene-editor-maven-plugin/src/main/resources/icons/action-about.png b/eugene-editor-maven-plugin/src/main/resources/icons/action-about.png new file mode 100644 index 0000000..0d826bb Binary files /dev/null and b/eugene-editor-maven-plugin/src/main/resources/icons/action-about.png differ diff --git a/eugene-editor-maven-plugin/src/main/resources/icons/action-add.png b/eugene-editor-maven-plugin/src/main/resources/icons/action-add.png new file mode 100644 index 0000000..6332fef Binary files /dev/null and b/eugene-editor-maven-plugin/src/main/resources/icons/action-add.png differ diff --git a/eugene-editor-maven-plugin/src/main/resources/icons/action-cancel.png b/eugene-editor-maven-plugin/src/main/resources/icons/action-cancel.png new file mode 100644 index 0000000..c149c2b Binary files /dev/null and b/eugene-editor-maven-plugin/src/main/resources/icons/action-cancel.png differ diff --git a/eugene-editor-maven-plugin/src/main/resources/icons/action-close.png b/eugene-editor-maven-plugin/src/main/resources/icons/action-close.png new file mode 100644 index 0000000..2541d2b Binary files /dev/null and b/eugene-editor-maven-plugin/src/main/resources/icons/action-close.png differ diff --git a/eugene-editor-maven-plugin/src/main/resources/icons/action-collapse.png b/eugene-editor-maven-plugin/src/main/resources/icons/action-collapse.png new file mode 100644 index 0000000..f88a24a Binary files /dev/null and b/eugene-editor-maven-plugin/src/main/resources/icons/action-collapse.png differ diff --git a/eugene-editor-maven-plugin/src/main/resources/icons/action-config.png b/eugene-editor-maven-plugin/src/main/resources/icons/action-config.png new file mode 100644 index 0000000..9460dfc Binary files /dev/null and b/eugene-editor-maven-plugin/src/main/resources/icons/action-config.png differ diff --git a/eugene-editor-maven-plugin/src/main/resources/icons/action-delete.png b/eugene-editor-maven-plugin/src/main/resources/icons/action-delete.png new file mode 100644 index 0000000..184f762 Binary files /dev/null and b/eugene-editor-maven-plugin/src/main/resources/icons/action-delete.png differ diff --git a/eugene-editor-maven-plugin/src/main/resources/icons/action-exit.png b/eugene-editor-maven-plugin/src/main/resources/icons/action-exit.png new file mode 100644 index 0000000..a77152b Binary files /dev/null and b/eugene-editor-maven-plugin/src/main/resources/icons/action-exit.png differ diff --git a/eugene-editor-maven-plugin/src/main/resources/icons/action-expand.png b/eugene-editor-maven-plugin/src/main/resources/icons/action-expand.png new file mode 100644 index 0000000..3c19e48 Binary files /dev/null and b/eugene-editor-maven-plugin/src/main/resources/icons/action-expand.png differ diff --git a/eugene-editor-maven-plugin/src/main/resources/icons/action-fileChooser.png b/eugene-editor-maven-plugin/src/main/resources/icons/action-fileChooser.png new file mode 100755 index 0000000..523a651 Binary files /dev/null and b/eugene-editor-maven-plugin/src/main/resources/icons/action-fileChooser.png differ diff --git a/eugene-editor-maven-plugin/src/main/resources/icons/action-help.png b/eugene-editor-maven-plugin/src/main/resources/icons/action-help.png new file mode 100755 index 0000000..4ed65a9 Binary files /dev/null and b/eugene-editor-maven-plugin/src/main/resources/icons/action-help.png differ diff --git a/eugene-editor-maven-plugin/src/main/resources/icons/action-i18n-en.png b/eugene-editor-maven-plugin/src/main/resources/icons/action-i18n-en.png new file mode 100644 index 0000000..ff701e1 Binary files /dev/null and b/eugene-editor-maven-plugin/src/main/resources/icons/action-i18n-en.png differ diff --git a/eugene-editor-maven-plugin/src/main/resources/icons/action-i18n-fr.png b/eugene-editor-maven-plugin/src/main/resources/icons/action-i18n-fr.png new file mode 100644 index 0000000..8332c4e Binary files /dev/null and b/eugene-editor-maven-plugin/src/main/resources/icons/action-i18n-fr.png differ diff --git a/eugene-editor-maven-plugin/src/main/resources/icons/action-i18n-uk.png b/eugene-editor-maven-plugin/src/main/resources/icons/action-i18n-uk.png new file mode 100644 index 0000000..ff701e1 Binary files /dev/null and b/eugene-editor-maven-plugin/src/main/resources/icons/action-i18n-uk.png differ diff --git a/eugene-editor-maven-plugin/src/main/resources/icons/action-save.png b/eugene-editor-maven-plugin/src/main/resources/icons/action-save.png new file mode 100644 index 0000000..41b3f43 Binary files /dev/null and b/eugene-editor-maven-plugin/src/main/resources/icons/action-save.png differ diff --git a/eugene-editor-maven-plugin/src/main/resources/icons/action-select.png b/eugene-editor-maven-plugin/src/main/resources/icons/action-select.png new file mode 100644 index 0000000..bbee129 Binary files /dev/null and b/eugene-editor-maven-plugin/src/main/resources/icons/action-select.png differ diff --git a/eugene-editor-maven-plugin/src/main/resources/icons/action-site.png b/eugene-editor-maven-plugin/src/main/resources/icons/action-site.png new file mode 100644 index 0000000..ac5957a Binary files /dev/null and b/eugene-editor-maven-plugin/src/main/resources/icons/action-site.png differ diff --git a/eugene-editor-maven-plugin/src/main/resources/icons/action-translate.png b/eugene-editor-maven-plugin/src/main/resources/icons/action-translate.png new file mode 100644 index 0000000..63ce64d Binary files /dev/null and b/eugene-editor-maven-plugin/src/main/resources/icons/action-translate.png differ diff --git a/eugene-editor-maven-plugin/src/main/resources/icons/action-unselect.png b/eugene-editor-maven-plugin/src/main/resources/icons/action-unselect.png new file mode 100644 index 0000000..3b49008 Binary files /dev/null and b/eugene-editor-maven-plugin/src/main/resources/icons/action-unselect.png differ diff --git a/eugene-editor-maven-plugin/src/main/resources/icons/modifier-package.png b/eugene-editor-maven-plugin/src/main/resources/icons/modifier-package.png new file mode 100644 index 0000000..7a22d1f Binary files /dev/null and b/eugene-editor-maven-plugin/src/main/resources/icons/modifier-package.png differ diff --git a/eugene-editor-maven-plugin/src/main/resources/icons/modifier-private.png b/eugene-editor-maven-plugin/src/main/resources/icons/modifier-private.png new file mode 100644 index 0000000..a6a4741 Binary files /dev/null and b/eugene-editor-maven-plugin/src/main/resources/icons/modifier-private.png differ diff --git a/eugene-editor-maven-plugin/src/main/resources/icons/modifier-protected.png b/eugene-editor-maven-plugin/src/main/resources/icons/modifier-protected.png new file mode 100644 index 0000000..a342bef Binary files /dev/null and b/eugene-editor-maven-plugin/src/main/resources/icons/modifier-protected.png differ diff --git a/eugene-editor-maven-plugin/src/main/resources/icons/modifier-public.png b/eugene-editor-maven-plugin/src/main/resources/icons/modifier-public.png new file mode 100644 index 0000000..62bada6 Binary files /dev/null and b/eugene-editor-maven-plugin/src/main/resources/icons/modifier-public.png differ diff --git a/eugene-editor-maven-plugin/src/main/resources/icons/type-attribute.png b/eugene-editor-maven-plugin/src/main/resources/icons/type-attribute.png new file mode 100644 index 0000000..85d50ee Binary files /dev/null and b/eugene-editor-maven-plugin/src/main/resources/icons/type-attribute.png differ diff --git a/eugene-editor-maven-plugin/src/main/resources/icons/type-class.png b/eugene-editor-maven-plugin/src/main/resources/icons/type-class.png new file mode 100644 index 0000000..b2813ef Binary files /dev/null and b/eugene-editor-maven-plugin/src/main/resources/icons/type-class.png differ diff --git a/eugene-editor-maven-plugin/src/main/resources/icons/type-enumeration.png b/eugene-editor-maven-plugin/src/main/resources/icons/type-enumeration.png new file mode 100644 index 0000000..d9a937b Binary files /dev/null and b/eugene-editor-maven-plugin/src/main/resources/icons/type-enumeration.png differ diff --git a/eugene-editor-maven-plugin/src/main/resources/icons/type-interface.png b/eugene-editor-maven-plugin/src/main/resources/icons/type-interface.png new file mode 100644 index 0000000..bd94fd7 Binary files /dev/null and b/eugene-editor-maven-plugin/src/main/resources/icons/type-interface.png differ diff --git a/eugene-editor-maven-plugin/src/main/resources/icons/type-model.png b/eugene-editor-maven-plugin/src/main/resources/icons/type-model.png new file mode 100644 index 0000000..36c21a8 Binary files /dev/null and b/eugene-editor-maven-plugin/src/main/resources/icons/type-model.png differ diff --git a/eugene-editor-maven-plugin/src/main/resources/icons/type-operation.png b/eugene-editor-maven-plugin/src/main/resources/icons/type-operation.png new file mode 100644 index 0000000..f96248d Binary files /dev/null and b/eugene-editor-maven-plugin/src/main/resources/icons/type-operation.png differ diff --git a/eugene-editor-maven-plugin/src/main/resources/icons/type-package.png b/eugene-editor-maven-plugin/src/main/resources/icons/type-package.png new file mode 100644 index 0000000..9d926e5 Binary files /dev/null and b/eugene-editor-maven-plugin/src/main/resources/icons/type-package.png differ diff --git a/eugene-editor-maven-plugin/src/main/resources/log4j.properties b/eugene-editor-maven-plugin/src/main/resources/log4j.properties new file mode 100644 index 0000000..647902a --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/resources/log4j.properties @@ -0,0 +1,30 @@ +### +# #%L +# EUGene :: Maven plugin +# %% +# Copyright (C) 2006 - 2010 CodeLutin +# %% +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Lesser Public License for more details. +# +# You should have received a copy of the GNU General Lesser Public +# License along with this program. If not, see +# <http://www.gnu.org/licenses/lgpl-3.0.html>. +# #L% +### +# Global logging configuration +log4j.rootLogger=ERROR, stdout +# Console output... +log4j.appender.stdout=org.apache.log4j.ConsoleAppender +log4j.appender.stdout.layout=org.apache.log4j.PatternLayout +log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) %M - %m%n +# package level +log4j.logger.org.nuiton=WARN +log4j.logger.org.nuiton.eugene.editor=INFO diff --git a/eugene-editor-maven-plugin/src/main/resources/org/nuiton/eugene/editor/application/ui/tree/node/AttributeNode-error-validation.xml b/eugene-editor-maven-plugin/src/main/resources/org/nuiton/eugene/editor/application/ui/tree/node/AttributeNode-error-validation.xml new file mode 100644 index 0000000..40fe7d2 --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/resources/org/nuiton/eugene/editor/application/ui/tree/node/AttributeNode-error-validation.xml @@ -0,0 +1,44 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + #%L + ObServe :: Application Swing Validation + %% + Copyright (C) 2008 - 2016 IRD, Codelutin, Tony Chemit + %% + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this program. If not, see + <http://www.gnu.org/licenses/gpl-3.0.html>. + #L% + --> + +<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN" + "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"> +<validators> + + <field name="name"> + + <field-validator type="requiredstring" short-circuit="true"> + <message>eugene.editor.validator.attribute.mandatory.name</message> + </field-validator> + + </field> + + <field name="type"> + + <field-validator type="requiredstring" short-circuit="true"> + <message>eugene.editor.validator.attribute.mandatory.type</message> + </field-validator> + + </field> + +</validators> diff --git a/eugene-editor-maven-plugin/src/main/resources/org/nuiton/eugene/editor/application/ui/tree/node/ClassNode-error-validation.xml b/eugene-editor-maven-plugin/src/main/resources/org/nuiton/eugene/editor/application/ui/tree/node/ClassNode-error-validation.xml new file mode 100644 index 0000000..0f68e18 --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/resources/org/nuiton/eugene/editor/application/ui/tree/node/ClassNode-error-validation.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + #%L + ObServe :: Application Swing Validation + %% + Copyright (C) 2008 - 2016 IRD, Codelutin, Tony Chemit + %% + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this program. If not, see + <http://www.gnu.org/licenses/gpl-3.0.html>. + #L% + --> + +<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN" + "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"> +<validators> + + <field name="name"> + + <field-validator type="requiredstring" short-circuit="true"> + <message>eugene.editor.validator.model.mandatory.name</message> + </field-validator> + + </field> + +</validators> diff --git a/eugene-editor-maven-plugin/src/main/resources/org/nuiton/eugene/editor/application/ui/tree/node/EnumerationNode-error-validation.xml b/eugene-editor-maven-plugin/src/main/resources/org/nuiton/eugene/editor/application/ui/tree/node/EnumerationNode-error-validation.xml new file mode 100644 index 0000000..0e8e5b4 --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/resources/org/nuiton/eugene/editor/application/ui/tree/node/EnumerationNode-error-validation.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + #%L + ObServe :: Application Swing Validation + %% + Copyright (C) 2008 - 2016 IRD, Codelutin, Tony Chemit + %% + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this program. If not, see + <http://www.gnu.org/licenses/gpl-3.0.html>. + #L% + --> + +<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN" + "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"> +<validators> + + <field name="name"> + + <field-validator type="requiredstring" short-circuit="true"> + <message>eugene.editor.validator.enumeration.mandatory.name</message> + </field-validator> + + </field> + +</validators> diff --git a/eugene-editor-maven-plugin/src/main/resources/org/nuiton/eugene/editor/application/ui/tree/node/InterfaceNode-error-validation.xml b/eugene-editor-maven-plugin/src/main/resources/org/nuiton/eugene/editor/application/ui/tree/node/InterfaceNode-error-validation.xml new file mode 100644 index 0000000..2517577 --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/resources/org/nuiton/eugene/editor/application/ui/tree/node/InterfaceNode-error-validation.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + #%L + ObServe :: Application Swing Validation + %% + Copyright (C) 2008 - 2016 IRD, Codelutin, Tony Chemit + %% + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this program. If not, see + <http://www.gnu.org/licenses/gpl-3.0.html>. + #L% + --> + +<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN" + "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"> +<validators> + + <field name="name"> + + <field-validator type="requiredstring" short-circuit="true"> + <message>eugene.editor.validator.interface.mandatory.name</message> + </field-validator> + + </field> + +</validators> diff --git a/eugene-editor-maven-plugin/src/main/resources/org/nuiton/eugene/editor/application/ui/tree/node/ModelNode-error-validation.xml b/eugene-editor-maven-plugin/src/main/resources/org/nuiton/eugene/editor/application/ui/tree/node/ModelNode-error-validation.xml new file mode 100644 index 0000000..0f68e18 --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/resources/org/nuiton/eugene/editor/application/ui/tree/node/ModelNode-error-validation.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + #%L + ObServe :: Application Swing Validation + %% + Copyright (C) 2008 - 2016 IRD, Codelutin, Tony Chemit + %% + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this program. If not, see + <http://www.gnu.org/licenses/gpl-3.0.html>. + #L% + --> + +<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN" + "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"> +<validators> + + <field name="name"> + + <field-validator type="requiredstring" short-circuit="true"> + <message>eugene.editor.validator.model.mandatory.name</message> + </field-validator> + + </field> + +</validators> diff --git a/eugene-editor-maven-plugin/src/main/resources/org/nuiton/eugene/editor/application/ui/tree/node/OperationNode-error-validation.xml b/eugene-editor-maven-plugin/src/main/resources/org/nuiton/eugene/editor/application/ui/tree/node/OperationNode-error-validation.xml new file mode 100644 index 0000000..f492323 --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/resources/org/nuiton/eugene/editor/application/ui/tree/node/OperationNode-error-validation.xml @@ -0,0 +1,44 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + #%L + ObServe :: Application Swing Validation + %% + Copyright (C) 2008 - 2016 IRD, Codelutin, Tony Chemit + %% + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this program. If not, see + <http://www.gnu.org/licenses/gpl-3.0.html>. + #L% + --> + +<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN" + "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"> +<validators> + + <field name="name"> + + <field-validator type="requiredstring" short-circuit="true"> + <message>eugene.editor.validator.operation.mandatory.name</message> + </field-validator> + + </field> + + <field name="returnType"> + + <field-validator type="requiredstring" short-circuit="true"> + <message>eugene.editor.validator.operation.mandatory.type</message> + </field-validator> + + </field> + +</validators> diff --git a/eugene-editor-maven-plugin/src/main/resources/org/nuiton/eugene/editor/application/ui/tree/node/PackageNode-error-validation.xml b/eugene-editor-maven-plugin/src/main/resources/org/nuiton/eugene/editor/application/ui/tree/node/PackageNode-error-validation.xml new file mode 100644 index 0000000..f300a9b --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/resources/org/nuiton/eugene/editor/application/ui/tree/node/PackageNode-error-validation.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + #%L + ObServe :: Application Swing Validation + %% + Copyright (C) 2008 - 2016 IRD, Codelutin, Tony Chemit + %% + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this program. If not, see + <http://www.gnu.org/licenses/gpl-3.0.html>. + #L% + --> + +<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN" + "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"> +<validators> + + <field name="name"> + + <field-validator type="requiredstring" short-circuit="true"> + <message>eugene.editor.validator.package.mandatory.name</message> + </field-validator> + + </field> + +</validators> diff --git a/eugene-editor-maven-plugin/src/main/resources/validators.xml b/eugene-editor-maven-plugin/src/main/resources/validators.xml new file mode 100644 index 0000000..2e14eca --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/resources/validators.xml @@ -0,0 +1,54 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + #%L + ObServe :: Application Swing + %% + Copyright (C) 2008 - 2016 IRD, Codelutin, Tony Chemit + %% + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this program. If not, see + <http://www.gnu.org/licenses/gpl-3.0.html>. + #L% + --> + +<!DOCTYPE validators PUBLIC + "-//Apache Struts//XWork Validator Config 1.0//EN" + "http://struts.apache.org/dtds/xwork-validator-config-1.0.dtd"> +<validators> + <!-- les validateurs fournis par XWork --> + <validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/> + <validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/> + <validator name="regex" class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"/> + <validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/> + <validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/> + <validator name="long" class="com.opensymphony.xwork2.validator.validators.LongRangeFieldValidator"/> + <validator name="short" class="com.opensymphony.xwork2.validator.validators.ShortRangeFieldValidator"/> + <validator name="double" class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/> + <validator name="date" class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/> + <validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/> + <validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/> + <validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator"/> + + <validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/> + <validator name="conditionalvisitor" class="com.opensymphony.xwork2.validator.validators.ConditionalVisitorFieldValidator"/> + + <!-- les validateurs fournis par Nuiton-validator --> + <validator name="collectionFieldExpression" class="org.nuiton.validator.xwork2.field.CollectionFieldExpressionValidator"/> + <validator name="requiredFile" class="org.nuiton.validator.xwork2.field.RequiredFileFieldValidator"/> + <validator name="existingFile" class="org.nuiton.validator.xwork2.field.ExistingFileFieldValidator"/> + <validator name="notExistingFile" class="org.nuiton.validator.xwork2.field.NotExistingFileFieldValidator"/> + <validator name="existingDirectory" class="org.nuiton.validator.xwork2.field.ExistingDirectoryFieldValidator"/> + <validator name="notExistingDirectory" class="org.nuiton.validator.xwork2.field.NotExistingDirectoryFieldValidator"/> + <validator name="fieldexpressionwithparams" class="org.nuiton.validator.xwork2.field.FieldExpressionWithParamsValidator"/> + +</validators> diff --git a/eugene-editor-maven-plugin/src/site/fr/rst/index.rst b/eugene-editor-maven-plugin/src/site/fr/rst/index.rst new file mode 100644 index 0000000..f98996d --- /dev/null +++ b/eugene-editor-maven-plugin/src/site/fr/rst/index.rst @@ -0,0 +1,72 @@ +.. - +.. * #%L +.. * EUGene :: Maven plugin +.. * %% +.. * Copyright (C) 2006 - 2010 CodeLutin +.. * %% +.. * This program is free software: you can redistribute it and/or modify +.. * it under the terms of the GNU Lesser General Public License as +.. * published by the Free Software Foundation, either version 3 of the +.. * License, or (at your option) any later version. +.. * +.. * This program is distributed in the hope that it will be useful, +.. * but WITHOUT ANY WARRANTY; without even the implied warranty of +.. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +.. * GNU General Lesser Public License for more details. +.. * +.. * You should have received a copy of the GNU General Lesser Public +.. * License along with this program. If not, see +.. * <http://www.gnu.org/licenses/lgpl-3.0.html>. +.. * #L% +.. - + +=================== +Maven-eugene-plugin +=================== + +.. contents:: + +Présentation +------------ + +Le plugin eugene-maven-plugin permet l'utilisation depuis maven de +Eugene. Pour plus de détails sur Eugene veuillez consulter +l'adresse suivante http://doc.nuiton.org/eugene/eugene + +Nouvautés dans la version 2.2 +----------------------------- + +Recherche de fichiers dans le class-path +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Il est possible désormais d'utiliser des fichiers contenus dans le class-path, +que ce soit des modèles zargo, xmi ou model. + +La page d'`usage`_ explique comment cela fonctionne. + +Respect des hiérarchies répertoires +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +On respecte conserve désormais de bout en bout les répertoires relatifs dont +sont extrait les données lors d'un cycle de génération et ceci afin d'éviter +toute collision de noms de fichiers et mieux s'y retrouver. + +Meilleure copie des ressources +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +L'algorithme de recopie des rsesources a été revu et est désormais spécifique à +chaque type de writer. + +Globalement, pour tous les writers fournis par le plugin, à chaque fichier +à traiter par un writer, on y associe un fichier de properties du même nom. + +Ce mécanisme n'est pas actuellement extensible mais pourrait le devenir si le +besoin est présent. + +Utilisation dans le pom.xml +--------------------------- + +Voir la `page`_ de détail des goals ou bien la page d'`usage`_ des goals. + +.. _page: plugin-info.html +.. _usage: usage.html diff --git a/eugene-editor-maven-plugin/src/site/rst/index.rst b/eugene-editor-maven-plugin/src/site/rst/index.rst new file mode 100644 index 0000000..e970fe1 --- /dev/null +++ b/eugene-editor-maven-plugin/src/site/rst/index.rst @@ -0,0 +1,44 @@ +.. - +.. * #%L +.. * EUGene :: Maven plugin +.. * %% +.. * Copyright (C) 2006 - 2010 CodeLutin +.. * %% +.. * This program is free software: you can redistribute it and/or modify +.. * it under the terms of the GNU Lesser General Public License as +.. * published by the Free Software Foundation, either version 3 of the +.. * License, or (at your option) any later version. +.. * +.. * This program is distributed in the hope that it will be useful, +.. * but WITHOUT ANY WARRANTY; without even the implied warranty of +.. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +.. * GNU General Lesser Public License for more details. +.. * +.. * You should have received a copy of the GNU General Lesser Public +.. * License along with this program. If not, see +.. * <http://www.gnu.org/licenses/lgpl-3.0.html>. +.. * #L% +.. - + +=================== +Maven-eugene-plugin +=================== + +.. contents:: + + +Abstract +-------- + +The *eugene-maven-plugin* permits to use the *EUGene* api from maven. + +For more information about *EUGene* api, see documention here : +http://doc.nuiton.org/eugene/eugene + +Usage in your pom.xml +--------------------- + +See the `details`_ page of goal or the `usage`_ page. + +.. _details: ./plugin-info.html +.. _usage: ./usage.html diff --git a/eugene-editor-maven-plugin/src/site/site_en.xml b/eugene-editor-maven-plugin/src/site/site_en.xml new file mode 100644 index 0000000..28e482f --- /dev/null +++ b/eugene-editor-maven-plugin/src/site/site_en.xml @@ -0,0 +1,62 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + #%L + EUGene :: Maven plugin + %% + Copyright (C) 2006 - 2012 CodeLutin, Tony Chemit + %% + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Lesser Public License for more details. + + You should have received a copy of the GNU General Lesser Public + License along with this program. If not, see + <http://www.gnu.org/licenses/lgpl-3.0.html>. + #L% + --> + +<project name="${project.name}" + xmlns="http://maven.apache.org/DECORATION/1.4.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/DECORATION/1.4.0 http://maven.apache.org/xsd/decoration-1.4.0.xsd"> + + <bannerLeft> + <name>${project.name}</name> + </bannerLeft> + + <body> + + <links> + <item name="[fr" href="fr/index.html"/> + <item name="en]" href="index.html"/> + </links> + + <breadcrumbs> + <item name="${project.name}" href="./index.html"/> + </breadcrumbs> + + <menu ref="parent"/> + + <menu name="User"> + <item href="index.html" name="Index"/> + <item href="usage.html" name="Usage"/> + <item href="example.html" name="Examples"/> + <item name="Goals" href="plugin-info.html"> + <item name="generate" href="generate-mojo.html"/> + <item name="available-data" href="available-data-mojo.html"/> + <item name="tag-values-report" href="tag-values-report.html"/> + <item name="stereotypes-report" href="stereotypes-report.html"/> + <item name="help" href="help-mojo.html"/> + </item> + </menu> + + <menu ref="reports"/> + + </body> +</project> diff --git a/eugene-editor-maven-plugin/src/site/site_fr.xml b/eugene-editor-maven-plugin/src/site/site_fr.xml new file mode 100644 index 0000000..21ca847 --- /dev/null +++ b/eugene-editor-maven-plugin/src/site/site_fr.xml @@ -0,0 +1,66 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + #%L + EUGene :: Maven plugin + %% + Copyright (C) 2006 - 2012 CodeLutin, Tony Chemit + %% + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Lesser Public License for more details. + + You should have received a copy of the GNU General Lesser Public + License along with this program. If not, see + <http://www.gnu.org/licenses/lgpl-3.0.html>. + #L% + --> + +<project name="${project.name}" + xmlns="http://maven.apache.org/DECORATION/1.4.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/DECORATION/1.4.0 http://maven.apache.org/xsd/decoration-1.4.0.xsd"> + + <bannerLeft> + <name>${project.name}</name> + </bannerLeft> + + <body> + + <links> + <item name="[fr" href="index.html"/> + <item name="en]" href="../index.html"/> + </links> + + <breadcrumbs> + <item name="${project.name}" href="./index.html"/> + </breadcrumbs> + + <!-- TC-20100117 : ne fonctionne pas sur une langue non principale --> + <!--<menu ref="parent"/>--> + <menu name="Parent Projet"> + <item name="Eugene" href="../../fr/index.html"/> + </menu> + + <menu name="Utilisateur"> + <item href="index.html" name="Accueil"/> + <item href="usage.html" name="Utilisation"/> + <item href="example.html" name="Examples"/> + <item name="Goals" href="plugin-info.html"> + <item name="generate" href="generate-mojo.html"/> + <item name="available-data" href="available-data-mojo.html"/> + <item name="tag-values-report" href="tag-values-report.html"/> + <item name="stereotypes-report" href="stereotypes-report.html"/> + <item name="help" href="help-mojo.html"/> + </item> + </menu> + + <menu ref="reports"/> + + </body> +</project> diff --git a/eugene-editor-maven-plugin/src/test/resources/observe-entities/observe-common.objectmodel b/eugene-editor-maven-plugin/src/test/resources/observe-entities/observe-common.objectmodel new file mode 100644 index 0000000..4532f1f --- /dev/null +++ b/eugene-editor-maven-plugin/src/test/resources/observe-entities/observe-common.objectmodel @@ -0,0 +1,670 @@ +<?xml version="1.0" encoding="UTF-8"?> +<objectModel xmlns="http://nuiton.org/eugene/objectModel/v1" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://nuiton.org/eugene/objectModel/v1 http://doc.nuiton.org/eugene/xsd/v1/objectmodel.xsd" + name="Observe" + version=""> + <package name="fr.ird.observe.entities.referentiel"/> + <class name="Vessel" package="fr.ird.observe.entities.referentiel"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.referentiel.I18nReferentialEntity" + discriminator=""/> + <attribute name="keelCode" associationType="composite" visibility="public" type="Integer" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="fleetCountry" associationType="composite" visibility="public" + type="Integer" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="changeDate" associationType="composite" visibility="public" + type="java.util.Date" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="yearService" associationType="composite" visibility="public" + type="Integer" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="length" associationType="composite" visibility="public" + type="java.lang.Float" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="capacity" associationType="composite" visibility="public" + type="java.lang.Float" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="power" associationType="composite" visibility="public" type="Integer" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="searchMaximum" associationType="composite" visibility="public" + type="java.lang.Float" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="comment" associationType="composite" visibility="public" type="String" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute visibility="public" + type="fr.ird.observe.entities.referentiel.VesselSizeCategory" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="0" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.referentiel.VesselType" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="0" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute name="flagCountry" visibility="public" + type="fr.ird.observe.entities.referentiel.Country" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="0" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + </class> + <class name="VesselType" package="fr.ird.observe.entities.referentiel"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.referentiel.I18nReferentialEntity" + discriminator=""/> + <attribute visibility="public" type="fr.ird.observe.entities.referentiel.Vessel" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + </class> + <class name="VesselSizeCategory" package="fr.ird.observe.entities.referentiel"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.referentiel.ObserveReferentialEntity" + discriminator=""/> + <attribute name="capacityLabel" associationType="composite" visibility="public" + type="String" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="gaugeLabel" associationType="composite" visibility="public" type="String" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute visibility="public" type="fr.ird.observe.entities.referentiel.Vessel" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + </class> + <class name="Species" package="fr.ird.observe.entities.referentiel"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.referentiel.I18nReferentialEntity" + discriminator=""/> + <attribute name="faoCode" associationType="composite" visibility="public" type="String" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="scientificLabel" associationType="composite" visibility="public" + type="String" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="homeId" associationType="composite" visibility="public" type="String" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="wormsId" associationType="composite" visibility="public" + type="java.lang.Long" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="lengthMeasureType" associationType="composite" visibility="public" + type="String" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="minLength" associationType="composite" visibility="public" + type="java.lang.Float" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="maxLength" associationType="composite" visibility="public" + type="java.lang.Float" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="minWeight" associationType="composite" visibility="public" + type="java.lang.Float" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="maxWeight" associationType="composite" visibility="public" + type="java.lang.Float" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute visibility="public" type="fr.ird.observe.entities.referentiel.SpeciesGroup" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="0" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" + type="fr.ird.observe.entities.referentiel.LengthWeightParameter" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.referentiel.Ocean" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.referentiel.SpeciesList" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + </class> + <class name="SpeciesList" package="fr.ird.observe.entities.referentiel"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.referentiel.I18nReferentialEntity" + discriminator=""/> + <attribute visibility="public" type="fr.ird.observe.entities.referentiel.Species" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="true" + ordering="unordered"/> + </class> + <class name="SpeciesGroup" package="fr.ird.observe.entities.referentiel"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.referentiel.I18nReferentialEntity" + discriminator=""/> + <attribute visibility="public" type="fr.ird.observe.entities.referentiel.Species" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + </class> + <class name="ObserveReferentialEntity" abstract="true" + package="fr.ird.observe.entities.referentiel"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.ObserveEntity" discriminator=""/> + <attribute name="code" associationType="composite" visibility="public" type="String" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="uri" associationType="composite" visibility="public" type="String" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="needComment" associationType="composite" visibility="public" + type="boolean" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="status" associationType="composite" visibility="public" + type="fr.ird.observe.entities.constants.ReferenceStatusPersist" + minMultiplicity="1" + maxMultiplicity="1"/> + <operation name="isEnabled" visibility="public"> + <returnParameter type="boolean"/> + </operation> + <operation name="isDisabled" visibility="public"> + <returnParameter type="boolean"/> + </operation> + </class> + <class name="Program" package="fr.ird.observe.entities.referentiel"> + <dependency name="constants" + supplierName="fr.ird.observe.entities.referentiel.ProgramConstants"/> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.referentiel.I18nReferentialEntity" + discriminator=""/> + <attribute name="nonTargetObservation" associationType="composite" visibility="public" + type="int" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="targetDiscardsObservation" associationType="composite" + visibility="public" + type="int" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="samplesObservation" associationType="composite" visibility="public" + type="int" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="objectsObservation" associationType="composite" visibility="public" + type="int" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="detailledActivitiesObservation" associationType="composite" + visibility="public" + type="int" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="mammalsObservation" associationType="composite" visibility="public" + type="int" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="birdsObservation" associationType="composite" visibility="public" + type="int" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="baitObservation" associationType="composite" visibility="public" + type="int" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="startDate" associationType="composite" visibility="public" + type="java.util.Date" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="endDate" associationType="composite" visibility="public" + type="java.util.Date" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="comment" associationType="composite" visibility="public" type="String" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="gearType" associationType="composite" visibility="public" + type="fr.ird.observe.entities.constants.GearTypePersist" + minMultiplicity="1" + maxMultiplicity="1"/> + <operation name="getGearTypePrefix" visibility="public"> + <returnParameter type="String"/> + </operation> + <operation name="setGearTypePrefix" visibility="public"> + <returnParameter type="void"/> + <parameter name="gearTypePrefix" type="String"/> + </operation> + <attribute visibility="public" type="fr.ird.observe.entities.referentiel.Organism" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + </class> + <class name="Person" package="fr.ird.observe.entities.referentiel"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.referentiel.ObserveReferentialEntity" + discriminator=""/> + <attribute name="lastName" associationType="composite" visibility="public" type="String" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="firstName" associationType="composite" visibility="public" type="String" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="observer" associationType="composite" visibility="public" type="boolean" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="captain" associationType="composite" visibility="public" type="boolean" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="dataEntryOperator" associationType="composite" visibility="public" + type="boolean" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute visibility="public" type="fr.ird.observe.entities.referentiel.Country" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="0" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + </class> + <class name="Ocean" package="fr.ird.observe.entities.referentiel"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.referentiel.I18nReferentialEntity" + discriminator=""/> + <attribute visibility="public" + type="fr.ird.observe.entities.referentiel.LengthWeightParameter" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.referentiel.Species" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + </class> + <class name="Organism" package="fr.ird.observe.entities.referentiel"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.referentiel.I18nReferentialEntity" + discriminator=""/> + <attribute name="description" associationType="composite" visibility="public" + type="String" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute visibility="public" type="fr.ird.observe.entities.referentiel.Program" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.referentiel.Country" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + </class> + <class name="I18nReferentialEntity" abstract="true" + package="fr.ird.observe.entities.referentiel"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.referentiel.ObserveReferentialEntity" + discriminator=""/> + <attribute name="label1" associationType="composite" visibility="public" type="String" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="label2" associationType="composite" visibility="public" type="String" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="label3" associationType="composite" visibility="public" type="String" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="label4" associationType="composite" visibility="public" type="String" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="label5" associationType="composite" visibility="public" type="String" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="label6" associationType="composite" visibility="public" type="String" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="label7" associationType="composite" visibility="public" type="String" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="label8" associationType="composite" visibility="public" type="String" + minMultiplicity="1" + maxMultiplicity="1"/> + </class> + <class name="Country" package="fr.ird.observe.entities.referentiel"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.referentiel.I18nReferentialEntity" + discriminator=""/> + <attribute name="iso2Code" associationType="composite" visibility="public" type="String" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="iso3Code" associationType="composite" visibility="public" type="String" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute visibility="public" type="fr.ird.observe.entities.referentiel.Organism" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.referentiel.Vessel" + reverseAttributeName="flagCountry" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.referentiel.Person" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.referentiel.Harbour" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + </class> + <class name="LengthWeightParameter" package="fr.ird.observe.entities.referentiel"> + <dependency name="constants" + supplierName="fr.ird.observe.entities.referentiel.LengthWeightParameterConstants"/> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.referentiel.ObserveReferentialEntity" + discriminator=""/> + <attribute name="startDate" associationType="composite" visibility="public" + type="java.util.Date" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="endDate" associationType="composite" visibility="public" + type="java.util.Date" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="coefficients" associationType="composite" visibility="public" + type="String" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="lengthWeightFormula" associationType="composite" visibility="public" + type="String" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="weightLengthFormula" associationType="composite" visibility="public" + type="String" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="meanLength" associationType="composite" visibility="public" + type="java.lang.Float" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="meanWeight" associationType="composite" visibility="public" + type="java.lang.Float" + minMultiplicity="1" + maxMultiplicity="1"/> + <operation name="getCoefficientNames" visibility="public"> + <returnParameter type="java.util.Set<String>"/> + </operation> + <operation name="isLengthWeightFormulaValid" visibility="public"> + <returnParameter type="boolean"/> + </operation> + <operation name="isWeightLengthFormulaValid" visibility="public"> + <returnParameter type="boolean"/> + </operation> + <operation name="setLengthWeightFormulaValid" visibility="public"> + <returnParameter type="void"/> + <parameter name="lengthWeightFormulaValid" type="boolean"/> + </operation> + <operation name="setWeightLengthFormulaValid" visibility="public"> + <returnParameter type="void"/> + <parameter name="weightLengthFormulaValid" type="boolean"/> + </operation> + <operation name="computeWeight" visibility="public"> + <returnParameter type="java.lang.Float"/> + <parameter name="length" type="float"/> + </operation> + <operation name="computeLength" visibility="public"> + <returnParameter type="java.lang.Float"/> + <parameter name="weight" type="float"/> + </operation> + <operation name="getCoefficientValues" visibility="public"> + <returnParameter type="java.util.Map<String, Double>"/> + </operation> + <operation name="getCoefficientValue" visibility="public"> + <returnParameter type="java.lang.Double"/> + <parameter name="coefficientName" type="String"/> + </operation> + <attribute visibility="public" type="fr.ird.observe.entities.referentiel.Ocean" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="0" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.referentiel.Species" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.referentiel.Sex" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + </class> + <class name="Sex" package="fr.ird.observe.entities.referentiel"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.referentiel.I18nReferentialEntity" + discriminator=""/> + <attribute visibility="public" + type="fr.ird.observe.entities.referentiel.LengthWeightParameter" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + </class> + <class name="FpaZone" package="fr.ird.observe.entities.referentiel"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.referentiel.I18nReferentialEntity" + discriminator=""/> + <attribute name="startDate" associationType="composite" visibility="public" + type="java.util.Date" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="endDate" associationType="composite" visibility="public" + type="java.util.Date" + minMultiplicity="1" + maxMultiplicity="1"/> + </class> + <class name="Harbour" package="fr.ird.observe.entities.referentiel"> + <dependency name="constants" + supplierName="fr.ird.observe.entities.referentiel.HarbourConstants"/> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.referentiel.ObserveReferentialEntity" + discriminator=""/> + <attribute name="locode" associationType="composite" visibility="public" type="String" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="name" associationType="composite" visibility="public" type="String" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="latitude" associationType="composite" visibility="public" + type="java.lang.Float" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="longitude" associationType="composite" visibility="public" + type="java.lang.Float" + minMultiplicity="1" + maxMultiplicity="1"/> + <operation name="getQuadrant" visibility="public"> + <returnParameter type="Integer"/> + </operation> + <operation name="setQuadrant" visibility="public"> + <returnParameter type="void"/> + <parameter name="quadrant" type="Integer"/> + </operation> + <attribute visibility="public" type="fr.ird.observe.entities.referentiel.Country" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="0" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + </class> + <class name="Gear" package="fr.ird.observe.entities.referentiel"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.referentiel.I18nReferentialEntity" + discriminator=""/> + <attribute visibility="public" + type="fr.ird.observe.entities.referentiel.GearCaracteristic" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="true" + ordering="unordered"/> + </class> + <class name="GearCaracteristic" package="fr.ird.observe.entities.referentiel"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.referentiel.I18nReferentialEntity" + discriminator=""/> + <attribute name="unit" associationType="composite" visibility="public" type="String" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute visibility="public" type="fr.ird.observe.entities.referentiel.Gear" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + <attribute visibility="public" + type="fr.ird.observe.entities.referentiel.GearCaracteristicType" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + </class> + <class name="GearCaracteristicType" package="fr.ird.observe.entities.referentiel"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.referentiel.I18nReferentialEntity" + discriminator=""/> + <attribute visibility="public" + type="fr.ird.observe.entities.referentiel.GearCaracteristic" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + </class> + <class name="ReferenceStatusPersist" package="fr.ird.observe.entities.referentiel"/> + <enumeration name="LengthWeightParameterConstants" + package="fr.ird.observe.entities.referentiel"> + <literal name="lengthWeightFormulaValid"/> + <literal name="weightLengthFormulaValid"/> + </enumeration> + <enumeration name="HarbourConstants" package="fr.ird.observe.entities.referentiel"> + <literal name="quadrant"/> + </enumeration> + <enumeration name="ProgramConstants" package="fr.ird.observe.entities.referentiel"> + <literal name="gearTypePrefix"/> + </enumeration> + <package name="fr.ird.observe.entities"/> + <class name="CommentableEntity" abstract="true" package="fr.ird.observe.entities"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.ObserveDataEntity" discriminator=""/> + <attribute name="comment" associationType="composite" visibility="public" type="String" + minMultiplicity="1" + maxMultiplicity="1"/> + </class> + <class name="ObserveEntity" abstract="true" package="fr.ird.observe.entities"> + <stereotype name="entity"/> + <attribute name="lastUpdateDate" associationType="composite" visibility="public" + type="java.util.Date" + minMultiplicity="1" + maxMultiplicity="1"/> + </class> + <class name="ObserveDataEntity" abstract="true" package="fr.ird.observe.entities"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.ObserveEntity" discriminator=""/> + </class> + <class name="LastUpdateDate" package="fr.ird.observe.entities"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.ObserveEntity" discriminator=""/> + <attribute name="type" associationType="composite" visibility="public" type="String" + minMultiplicity="1" + maxMultiplicity="1"/> + </class> + <interface name="Trip" package="fr.ird.observe.entities"/> + <interface name="Activity" package="fr.ird.observe.entities"/> + <interface name="ObserveSet" package="fr.ird.observe.entities"/> + <package name="java.util"/> + <package name="fr.ird.observe.entities.constants"/> + <enumeration name="ReferenceStatusPersist" package="fr.ird.observe.entities.constants"/> + <enumeration name="GearTypePersist" package="fr.ird.observe.entities.constants"/> +</objectModel> \ No newline at end of file diff --git a/eugene-editor-maven-plugin/src/test/resources/observe-entities/observe-longline.objectmodel b/eugene-editor-maven-plugin/src/test/resources/observe-entities/observe-longline.objectmodel new file mode 100644 index 0000000..687bb51 --- /dev/null +++ b/eugene-editor-maven-plugin/src/test/resources/observe-entities/observe-longline.objectmodel @@ -0,0 +1,2251 @@ +<?xml version="1.0" encoding="UTF-8"?> +<objectModel xmlns="http://nuiton.org/eugene/objectModel/v1" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://nuiton.org/eugene/objectModel/v1 http://doc.nuiton.org/eugene/xsd/v1/objectmodel.xsd" + name="Observe" + version=""> + <package name="java"/> + <package name="fr.ird.observe.entities.longline"/> + <class name="SetLongline" package="fr.ird.observe.entities.longline"> + <dependency name="constants" + supplierName="fr.ird.observe.entities.longline.SetLonglineConstants"/> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.CommentableEntity" discriminator=""/> + <interface name="fr.ird.observe.entities.ObserveSet"/> + <attribute name="homeId" associationType="composite" visibility="public" type="String" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="number" associationType="composite" visibility="public" type="Integer" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="basketsPerSectionCount" associationType="composite" visibility="public" + type="Integer" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="branchlinesPerBasketCount" associationType="composite" + visibility="public" + type="Integer" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="totalSectionsCount" associationType="composite" visibility="public" + type="Integer" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="totalBasketsCount" associationType="composite" visibility="public" + type="Integer" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="totalHooksCount" associationType="composite" visibility="public" + type="Integer" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="weightedSnap" associationType="composite" visibility="public" + type="Boolean" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="snapWeight" associationType="composite" visibility="public" type="Float" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="weightedSwivel" associationType="composite" visibility="public" + type="Boolean" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="swivelWeight" associationType="composite" visibility="public" + type="Float" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="lightsticksPerBasketCount" associationType="composite" + visibility="public" + type="Integer" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="timeBetweenHooks" associationType="composite" visibility="public" + type="Long" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="shooterUsed" associationType="composite" visibility="public" + type="Boolean" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="shooterSpeed" associationType="composite" visibility="public" + type="Float" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="maxDepthTargeted" associationType="composite" visibility="public" + type="Integer" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="settingStartTimeStamp" associationType="composite" visibility="public" + type="java.util.Date" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="settingStartLatitude" associationType="composite" visibility="public" + type="Float" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="settingStartLongitude" associationType="composite" visibility="public" + type="Float" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="settingEndTimeStamp" associationType="composite" visibility="public" + type="java.util.Date" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="settingEndLatitude" associationType="composite" visibility="public" + type="Float" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="settingEndLongitude" associationType="composite" visibility="public" + type="Float" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="settingVesselSpeed" associationType="composite" visibility="public" + type="Float" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="haulingDirectionSameAsSetting" associationType="composite" + visibility="public" + type="Boolean" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="haulingStartTimeStamp" associationType="composite" visibility="public" + type="java.util.Date" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="haulingStartLatitude" associationType="composite" visibility="public" + type="Float" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="haulingStartLongitude" associationType="composite" visibility="public" + type="Float" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="haulingEndTimeStamp" associationType="composite" visibility="public" + type="java.util.Date" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="haulingEndLatitude" associationType="composite" visibility="public" + type="Float" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="haulingEndLongitude" associationType="composite" visibility="public" + type="Float" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="haulingBreaks" associationType="composite" visibility="public" + type="Integer" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="monitored" associationType="composite" visibility="public" type="Boolean" + minMultiplicity="1" + maxMultiplicity="1"/> + <operation name="getSettingStartTime" visibility="public"> + <returnParameter type="java.util.Date"/> + </operation> + <operation name="getSettingStartDate" visibility="public"> + <returnParameter type="java.util.Date"/> + </operation> + <operation name="setSettingStartDate" visibility="public"> + <parameter name="date" type="java.util.Date"/> + </operation> + <operation name="setSettingStartTime" visibility="public"> + <parameter name="time" type="java.util.Date"/> + </operation> + <operation name="getSettingEndDate" visibility="public"> + <returnParameter type="java.util.Date"/> + </operation> + <operation name="getSettingEndTime" visibility="public"> + <returnParameter type="java.util.Date"/> + </operation> + <operation name="setSettingEndDate" visibility="public"> + <parameter name="date" type="java.util.Date"/> + </operation> + <operation name="setSettingEndTime" visibility="public"> + <parameter name="time" type="java.util.Date"/> + </operation> + <operation name="getHaulingStartDate" visibility="public"> + <returnParameter type="java.util.Date"/> + </operation> + <operation name="getHaulingStartTime" visibility="public"> + <returnParameter type="java.util.Date"/> + </operation> + <operation name="setHaulingStartDate" visibility="public"> + <parameter name="date" type="java.util.Date"/> + </operation> + <operation name="setHaulingStartTime" visibility="public"> + <parameter name="time" type="java.util.Date"/> + </operation> + <operation name="getHaulingEndDate" visibility="public"> + <returnParameter type="java.util.Date"/> + </operation> + <operation name="getHaulingEndTime" visibility="public"> + <returnParameter type="java.util.Date"/> + </operation> + <operation name="setHaulingEndDate" visibility="public"> + <parameter name="date" type="java.util.Date"/> + </operation> + <operation name="setHaulingEndTime" visibility="public"> + <parameter name="time" type="java.util.Date"/> + </operation> + <operation name="getSettingEndQuadrant" visibility="public"> + <returnParameter type="Integer"/> + </operation> + <operation name="getHaulingStartQuadrant" visibility="public"> + <returnParameter type="Integer"/> + </operation> + <operation name="getHaulingEndQuadrant" visibility="public"> + <returnParameter type="Integer"/> + </operation> + <operation name="setSettingStartQuadrant" visibility="public"> + <parameter name="quadrant" type="Integer"/> + </operation> + <operation name="setSettingEndQuadrant" visibility="public"> + <parameter name="quadrant" type="Integer"/> + </operation> + <operation name="setHaulingStartQuadrant" visibility="public"> + <parameter name="quadrant" type="Integer"/> + </operation> + <operation name="setHaulingEndQuadrant" visibility="public"> + <parameter name="quadrant" type="Integer"/> + </operation> + <operation name="getSettingStartQuadrant" visibility="public"> + <returnParameter type="Integer"/> + </operation> + <operation name="getFloatlinesCompositionProportionSum" visibility="public"> + <returnParameter type="int"/> + </operation> + <operation name="getBranchlinesCompositionProportionSum" visibility="public"> + <returnParameter type="int"/> + </operation> + <operation name="getHooksCompositionProportionSum" visibility="public"> + <returnParameter type="int"/> + </operation> + <operation name="getBaitsCompositionProportionSum" visibility="public"> + <returnParameter type="int"/> + </operation> + <operation name="setFloatlinesCompositionProportionSum" visibility="public"> + <parameter name="sum" type="int"/> + </operation> + <operation name="setBranchlinesCompositionProportionSum" visibility="public"> + <parameter name="sum" type="int"/> + </operation> + <operation name="setHooksCompositionProportionSum" visibility="public"> + <parameter name="sum" type="int"/> + </operation> + <operation name="setBaitsCompositionProportionSum" visibility="public"> + <parameter name="sum" type="int"/> + </operation> + <attribute visibility="public" type="fr.ird.observe.entities.longline.BaitsComposition" + reverseAttributeName="" + associationType="composite" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" + type="fr.ird.observe.entities.longline.FloatlinesComposition" + reverseAttributeName="" + associationType="composite" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.longline.HooksComposition" + reverseAttributeName="" + associationType="composite" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.longline.Section" + reverseAttributeName="" + associationType="composite" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" + type="fr.ird.observe.entities.referentiel.longline.SettingShape" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.longline.Tdr" + reverseAttributeName="" + associationType="composite" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.longline.CatchLongline" + reverseAttributeName="" + associationType="composite" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.longline.ActivityLongline" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="false" + ordering="unordered"/> + <attribute visibility="public" + type="fr.ird.observe.entities.referentiel.longline.LineType" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="0" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" + type="fr.ird.observe.entities.referentiel.longline.LightsticksType" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="0" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" + type="fr.ird.observe.entities.referentiel.longline.LightsticksColor" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="0" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" + type="fr.ird.observe.entities.referentiel.longline.MitigationType" + reverseAttributeName="set" + reverseMaxMultiplicity="-1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" + type="fr.ird.observe.entities.longline.BranchlinesComposition" + reverseAttributeName="" + associationType="composite" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="true" + ordering="unordered"/> + </class> + <class name="HooksComposition" package="fr.ird.observe.entities.longline"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.ObserveDataEntity" discriminator=""/> + <attribute name="proportion" associationType="composite" visibility="public" + type="Integer" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="hookOffset" associationType="composite" visibility="public" + type="Integer" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute visibility="public" + type="fr.ird.observe.entities.referentiel.longline.HookType" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.longline.SetLongline" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="false" + ordering="unordered"/> + <attribute visibility="public" + type="fr.ird.observe.entities.referentiel.longline.HookSize" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + </class> + <class name="Section" package="fr.ird.observe.entities.longline"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.ObserveDataEntity" discriminator=""/> + <interface name="fr.ird.observe.entities.longline.LonglineCompositionEntity"/> + <attribute name="settingIdentifier" associationType="composite" visibility="public" + type="Integer" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="haulingIdentifier" associationType="composite" visibility="public" + type="Integer" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute visibility="public" type="fr.ird.observe.entities.longline.SetLongline" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.longline.Basket" + reverseAttributeName="" + associationType="composite" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.longline.Tdr" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.longline.CatchLongline" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="true" + ordering="unordered"/> + </class> + <class name="SensorUsed" package="fr.ird.observe.entities.longline"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.ObserveDataEntity" discriminator=""/> + <attribute name="data" associationType="composite" visibility="public" + type="java.sql.Blob" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="dataFilename" associationType="composite" visibility="public" + type="String" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="dataLocation" associationType="composite" visibility="public" + type="String" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="sensorSerialNo" associationType="composite" visibility="public" + type="String" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute visibility="public" + type="fr.ird.observe.entities.referentiel.longline.SensorType" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.longline.ActivityLongline" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="false" + ordering="unordered"/> + <attribute visibility="public" + type="fr.ird.observe.entities.referentiel.longline.SensorDataFormat" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="0" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" + type="fr.ird.observe.entities.referentiel.longline.SensorBrand" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + </class> + <class name="SizeMeasure" package="fr.ird.observe.entities.longline"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.ObserveDataEntity" discriminator=""/> + <attribute name="size" associationType="composite" visibility="public" type="Float" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute visibility="public" type="fr.ird.observe.entities.longline.CatchLongline" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="false" + ordering="unordered"/> + <attribute visibility="public" + type="fr.ird.observe.entities.referentiel.longline.SizeMeasureType" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + </class> + <class name="Tdr" package="fr.ird.observe.entities.longline"> + <dependency name="constants" supplierName="fr.ird.observe.entities.longline.TdrConstants"/> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.ObserveDataEntity" discriminator=""/> + <interface name="fr.ird.observe.entities.longline.LonglinePositionAware"/> + <attribute name="homeId" associationType="composite" visibility="public" type="String" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="floatline1Length" associationType="composite" visibility="public" + type="Float" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="floatline2Length" associationType="composite" visibility="public" + type="Float" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="serialNo" associationType="composite" visibility="public" type="String" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="data" associationType="composite" visibility="public" + type="java.sql.Blob" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="dataFilename" associationType="composite" visibility="public" + type="String" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="dataLocation" associationType="composite" visibility="public" + type="String" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="deployementStart" associationType="composite" visibility="public" + type="java.util.Date" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="deployementEnd" associationType="composite" visibility="public" + type="java.util.Date" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="fishingStart" associationType="composite" visibility="public" + type="java.util.Date" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="fishingEnd" associationType="composite" visibility="public" + type="java.util.Date" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="fishingStartDepth" associationType="composite" visibility="public" + type="Float" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="fishingEndDepth" associationType="composite" visibility="public" + type="Float" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="meanDeployementDepth" associationType="composite" visibility="public" + type="Float" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="medianDeployementDepth" associationType="composite" visibility="public" + type="Float" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="minFishingDepth" associationType="composite" visibility="public" + type="Float" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="maxFishingDepth" associationType="composite" visibility="public" + type="Float" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="meanFishingDepth" associationType="composite" visibility="public" + type="Float" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="medianFishingDepth" associationType="composite" visibility="public" + type="Float" + minMultiplicity="1" + maxMultiplicity="1"/> + <operation name="getDeployementStartDate" visibility="public"> + <returnParameter type="java.util.Date"/> + </operation> + <operation name="getDeployementStartTime" visibility="public"> + <returnParameter type="java.util.Date"/> + </operation> + <operation name="getDeployementEndDate" visibility="public"> + <returnParameter type="java.util.Date"/> + </operation> + <operation name="getDeployementEndTime" visibility="public"> + <returnParameter type="java.util.Date"/> + </operation> + <operation name="getFishingStartDate" visibility="public"> + <returnParameter type="java.util.Date"/> + </operation> + <operation name="getFishingStartTime" visibility="public"> + <returnParameter type="java.util.Date"/> + </operation> + <operation name="getFishingEndDate" visibility="public"> + <returnParameter type="java.util.Date"/> + </operation> + <operation name="getFishingEndTime" visibility="public"> + <returnParameter type="java.util.Date"/> + </operation> + <operation name="setDeployementStartDate" visibility="public"> + <parameter name="date" type="java.util.Date"/> + </operation> + <operation name="setDeployementEndDate" visibility="public"> + <parameter name="date" type="java.util.Date"/> + </operation> + <operation name="setDeployementStartTime" visibility="public"> + <parameter name="time" type="java.util.Date"/> + </operation> + <operation name="setDeployementEndTime" visibility="public"> + <parameter name="time" type="java.util.Date"/> + </operation> + <operation name="setFishingStartDate" visibility="public"> + <parameter name="date" type="java.util.Date"/> + </operation> + <operation name="setFishingStartTime" visibility="public"> + <parameter name="time" type="java.util.Date"/> + </operation> + <operation name="setFishingEndDate" visibility="public"> + <parameter name="date" type="java.util.Date"/> + </operation> + <operation name="setFishingEndTime" visibility="public"> + <parameter name="time" type="java.util.Date"/> + </operation> + <attribute visibility="public" type="fr.ird.observe.entities.longline.Branchline" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="0" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.longline.TdrRecord" + reverseAttributeName="" + associationType="composite" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" + type="fr.ird.observe.entities.referentiel.longline.SensorBrand" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="0" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.referentiel.Species" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.longline.Section" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="0" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.longline.Basket" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="0" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.longline.SetLongline" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="0" + maxMultiplicity="1" + navigable="false" + ordering="unordered"/> + <attribute visibility="public" + type="fr.ird.observe.entities.referentiel.longline.ItemHorizontalPosition" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="0" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" + type="fr.ird.observe.entities.referentiel.longline.ItemVerticalPosition" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="0" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + </class> + <class name="TdrRecord" package="fr.ird.observe.entities.longline"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.ObserveDataEntity" discriminator=""/> + <attribute name="timeStamp" associationType="composite" visibility="public" + type="java.util.Date" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="temperature" associationType="composite" visibility="public" type="Float" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="depth" associationType="composite" visibility="public" type="Float" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute visibility="public" type="fr.ird.observe.entities.longline.Basket" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="false" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.longline.Tdr" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="false" + ordering="unordered"/> + </class> + <class name="TripLongline" package="fr.ird.observe.entities.longline"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.CommentableEntity" discriminator=""/> + <interface name="fr.ird.observe.entities.Trip"/> + <attribute name="startDate" associationType="composite" visibility="private" + type="java.util.Date" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="endDate" associationType="composite" visibility="private" + type="java.util.Date" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="totalFishingOperationsNumber" associationType="composite" + visibility="private" + type="Integer" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="homeId" associationType="composite" visibility="public" type="String" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute visibility="public" type="fr.ird.observe.entities.longline.ActivityLongline" + reverseAttributeName="" + associationType="composite" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" + type="fr.ird.observe.entities.referentiel.longline.TripType" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute name="observer" visibility="public" + type="fr.ird.observe.entities.referentiel.Person" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.referentiel.Vessel" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute name="captain" visibility="public" + type="fr.ird.observe.entities.referentiel.Person" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute name="dataEntryOperator" visibility="public" + type="fr.ird.observe.entities.referentiel.Person" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.referentiel.Program" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.referentiel.Ocean" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute name="departureHarbour" visibility="public" + type="fr.ird.observe.entities.referentiel.Harbour" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="0" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute name="landingHarbour" visibility="public" + type="fr.ird.observe.entities.referentiel.Harbour" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="0" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" + type="fr.ird.observe.entities.longline.GearUseFeaturesLongline" + reverseAttributeName="" + associationType="composite" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="true" + ordering="unordered"/> + </class> + <class name="FloatlinesComposition" package="fr.ird.observe.entities.longline"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.ObserveDataEntity" discriminator=""/> + <attribute name="length" associationType="composite" visibility="public" type="Float" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="proportion" associationType="composite" visibility="public" + type="Integer" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute visibility="public" type="fr.ird.observe.entities.longline.SetLongline" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="false" + ordering="unordered"/> + <attribute visibility="public" + type="fr.ird.observe.entities.referentiel.longline.LineType" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + </class> + <class name="Encounter" package="fr.ird.observe.entities.longline"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.ObserveDataEntity" discriminator=""/> + <attribute name="distance" associationType="composite" visibility="public" type="Float" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="count" associationType="composite" visibility="public" type="Integer" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute visibility="public" + type="fr.ird.observe.entities.referentiel.longline.EncounterType" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.longline.ActivityLongline" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="false" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.referentiel.Species" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + </class> + <class name="CatchLongline" package="fr.ird.observe.entities.longline"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.CommentableEntity" discriminator=""/> + <interface name="fr.ird.observe.entities.longline.LonglinePositionAware"/> + <attribute name="homeId" associationType="composite" visibility="public" type="String" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="count" associationType="composite" visibility="public" type="Integer" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="totalWeight" associationType="composite" visibility="public" type="Float" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="hookWhenDiscarded" associationType="composite" visibility="public" + type="Boolean" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="depredated" associationType="composite" visibility="public" + type="Boolean" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="beatDiameter" associationType="composite" visibility="public" + type="Float" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="gonadeWeight" associationType="composite" visibility="public" + type="Float" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="photoReferences" associationType="composite" visibility="public" + type="String" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="number" associationType="composite" visibility="public" type="Integer" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="acquisitionMode" associationType="composite" visibility="public" + type="int" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute visibility="public" type="fr.ird.observe.entities.longline.Basket" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="0" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.longline.Branchline" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="0" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" + type="fr.ird.observe.entities.referentiel.longline.CatchFateLongline" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute name="discardHealthness" visibility="public" + type="fr.ird.observe.entities.referentiel.longline.Healthness" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.longline.SizeMeasure" + reverseAttributeName="" + associationType="composite" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="true" + ordering="unordered"/> + <attribute name="speciesCatch" visibility="public" + type="fr.ird.observe.entities.referentiel.Species" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute name="predator" visibility="public" + type="fr.ird.observe.entities.referentiel.Species" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.longline.SetLongline" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="0" + maxMultiplicity="1" + navigable="false" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.longline.Section" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="0" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" + type="fr.ird.observe.entities.referentiel.longline.MaturityStatus" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="0" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" + type="fr.ird.observe.entities.referentiel.longline.StomacFullness" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="0" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" + type="fr.ird.observe.entities.referentiel.longline.HookPosition" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="0" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.longline.WeightMeasure" + reverseAttributeName="" + associationType="composite" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="true" + ordering="unordered"/> + <attribute name="catchHealthness" visibility="public" + type="fr.ird.observe.entities.referentiel.longline.Healthness" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.referentiel.Sex" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="0" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + </class> + <class name="BranchlinesComposition" package="fr.ird.observe.entities.longline"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.ObserveDataEntity" discriminator=""/> + <attribute name="length" associationType="composite" visibility="public" type="Float" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="proportion" associationType="composite" visibility="public" + type="Integer" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute visibility="public" type="fr.ird.observe.entities.longline.SetLongline" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="false" + ordering="unordered"/> + <attribute name="topType" visibility="public" + type="fr.ird.observe.entities.referentiel.longline.LineType" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="0" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute name="tracelineType" visibility="public" + type="fr.ird.observe.entities.referentiel.longline.LineType" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="0" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + </class> + <class name="Basket" package="fr.ird.observe.entities.longline"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.ObserveDataEntity" discriminator=""/> + <interface name="fr.ird.observe.entities.longline.LonglineCompositionEntity"/> + <attribute name="settingIdentifier" associationType="composite" visibility="public" + type="Integer" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="haulingIdentifier" associationType="composite" visibility="public" + type="Integer" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="floatline1Length" associationType="composite" visibility="public" + type="Float" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="floatline2Length" associationType="composite" visibility="public" + type="Float" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute visibility="public" type="fr.ird.observe.entities.longline.Branchline" + reverseAttributeName="" + associationType="composite" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.longline.Section" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="false" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.longline.TdrRecord" + reverseAttributeName="" + associationType="composite" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.longline.CatchLongline" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.longline.Tdr" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="true" + ordering="unordered"/> + </class> + <class name="Branchline" package="fr.ird.observe.entities.longline"> + <dependency name="constants" + supplierName="fr.ird.observe.entities.longline.BranchlineConstants"/> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.CommentableEntity" discriminator=""/> + <interface name="fr.ird.observe.entities.longline.LonglineCompositionEntity"/> + <attribute name="settingIdentifier" associationType="composite" visibility="public" + type="Integer" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="haulingIdentifier" associationType="composite" visibility="public" + type="Integer" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="depthRecorder" associationType="composite" visibility="public" + type="Boolean" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="timer" associationType="composite" visibility="public" type="Boolean" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="timeSinceContact" associationType="composite" visibility="public" + type="Long" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="hookOffset" associationType="composite" visibility="public" + type="Integer" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="branchlineLength" associationType="composite" visibility="public" + type="Float" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="weightedSwivel" associationType="composite" visibility="public" + type="Boolean" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="timerTimeOnBoard" associationType="composite" visibility="public" + type="java.util.Date" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="weightedSnap" associationType="composite" visibility="public" + type="Boolean" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="swivelWeight" associationType="composite" visibility="public" + type="Float" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="snapWeight" associationType="composite" visibility="public" type="Float" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="tracelineLength" associationType="composite" visibility="public" + type="Float" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="hookLost" associationType="composite" visibility="public" type="Boolean" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="traceCutOff" associationType="composite" visibility="public" + type="Boolean" + minMultiplicity="1" + maxMultiplicity="1"/> + <operation name="getTimerTimeOnBoardDate" visibility="public"> + <returnParameter type="java.util.Date"/> + </operation> + <operation name="setTimerTimeOnBoardDate" visibility="public"> + <parameter name="timerTimeOnboardDate" type="java.util.Date"/> + </operation> + <operation name="getTimerTimeOnBoardTime" visibility="public"> + <returnParameter type="java.util.Date"/> + </operation> + <operation name="setTimerTimeOnBoardTime" visibility="public"> + <parameter name="timerTimeOnboardTime" type="java.util.Date"/> + </operation> + <attribute visibility="public" type="fr.ird.observe.entities.longline.Basket" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="false" + ordering="unordered"/> + <attribute visibility="public" + type="fr.ird.observe.entities.referentiel.longline.HookType" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="0" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.longline.Tdr" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.longline.CatchLongline" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" + type="fr.ird.observe.entities.referentiel.longline.BaitType" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="0" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute name="topType" visibility="public" + type="fr.ird.observe.entities.referentiel.longline.LineType" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="0" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute name="tracelineType" visibility="public" + type="fr.ird.observe.entities.referentiel.longline.LineType" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="0" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" + type="fr.ird.observe.entities.referentiel.longline.BaitSettingStatus" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="0" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" + type="fr.ird.observe.entities.referentiel.longline.BaitHaulingStatus" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="0" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" + type="fr.ird.observe.entities.referentiel.longline.HookSize" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="0" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + </class> + <class name="BaitsComposition" package="fr.ird.observe.entities.longline"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.ObserveDataEntity" discriminator=""/> + <attribute name="proportion" associationType="composite" visibility="public" + type="Integer" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="individualSize" associationType="composite" visibility="public" + type="Integer" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="individualWeight" associationType="composite" visibility="public" + type="Float" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute visibility="public" type="fr.ird.observe.entities.longline.SetLongline" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="false" + ordering="unordered"/> + <attribute visibility="public" + type="fr.ird.observe.entities.referentiel.longline.BaitSettingStatus" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" + type="fr.ird.observe.entities.referentiel.longline.BaitType" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + </class> + <class name="ActivityLongline" package="fr.ird.observe.entities.longline"> + <dependency name="constants" + supplierName="fr.ird.observe.entities.longline.ActivityLonglineConstants"/> + <dependency name="constants" + supplierName="fr.ird.observe.entities.longline.ActivityLonglineConstants"/> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.CommentableEntity" discriminator=""/> + <interface name="fr.ird.observe.entities.Activity"/> + <attribute name="timeStamp" associationType="composite" visibility="public" + type="java.util.Date" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="latitude" associationType="composite" visibility="public" type="Float" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="longitude" associationType="composite" visibility="public" type="Float" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="seaSurfaceTemperature" associationType="composite" visibility="public" + type="Float" + minMultiplicity="1" + maxMultiplicity="1"/> + <operation name="getDate" visibility="public"> + <returnParameter type="java.util.Date"/> + </operation> + <operation name="getTime" visibility="public"> + <returnParameter type="java.util.Date"/> + </operation> + <operation name="setDate" visibility="public"> + <parameter name="date" type="java.util.Date"/> + </operation> + <operation name="setTime" visibility="public"> + <parameter name="time" type="java.util.Date"/> + </operation> + <attribute visibility="public" type="fr.ird.observe.entities.longline.TripLongline" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="false" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.longline.SetLongline" + reverseAttributeName="" + associationType="composite" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.longline.Encounter" + reverseAttributeName="" + associationType="composite" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" + type="fr.ird.observe.entities.referentiel.longline.VesselActivityLongline" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.longline.SensorUsed" + reverseAttributeName="" + associationType="composite" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.referentiel.FpaZone" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + </class> + <class name="WeightMeasure" package="fr.ird.observe.entities.longline"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.ObserveDataEntity" discriminator=""/> + <attribute name="weight" associationType="composite" visibility="public" type="Float" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute visibility="public" + type="fr.ird.observe.entities.referentiel.longline.WeightMeasureType" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.longline.CatchLongline" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="false" + ordering="unordered"/> + </class> + <class name="GearUseFeaturesLongline" package="fr.ird.observe.entities.longline"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.CommentableEntity" discriminator=""/> + <attribute name="number" associationType="composite" visibility="public" type="Integer" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="usedInTrip" associationType="composite" visibility="public" + type="Boolean" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute visibility="public" type="fr.ird.observe.entities.longline.TripLongline" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="false" + ordering="unordered"/> + <attribute name="gearUseFeaturesMeasurement" visibility="public" + type="fr.ird.observe.entities.longline.GearUseFeaturesMeasurementLongline" + reverseAttributeName="" + associationType="composite" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.referentiel.Gear" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + </class> + <class name="GearUseFeaturesMeasurementLongline" + package="fr.ird.observe.entities.longline"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.ObserveDataEntity" discriminator=""/> + <attribute name="measurementValue" associationType="composite" visibility="public" + type="String" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute visibility="public" + type="fr.ird.observe.entities.longline.GearUseFeaturesLongline" + reverseAttributeName="gearUseFeaturesMeasurement" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="false" + ordering="unordered"/> + <attribute visibility="public" + type="fr.ird.observe.entities.referentiel.GearCaracteristic" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + </class> + <interface name="LonglineCompositionEntity" package="fr.ird.observe.entities.longline"> + <operation name="getSettingIdentifier" visibility="public"> + <returnParameter type="Integer"/> + </operation> + <operation name="setSettingIdentifier" visibility="public"> + <returnParameter type=""/> + <parameter name="identifier" type="Integer"/> + </operation> + <operation name="getHaulingIdentifier" visibility="public"> + <returnParameter type="Integer"/> + </operation> + <operation name="setHaulingIdentifier" visibility="public"> + <returnParameter type=""/> + <parameter name="identifier" type="Integer"/> + </operation> + </interface> + <interface name="LonglinePositionAware" package="fr.ird.observe.entities.longline"> + <operation name="getSection" visibility="public"> + <returnParameter type="fr.ird.observe.entities.longline.Section"/> + </operation> + <operation name="setSection" visibility="public"> + <returnParameter type=""/> + <parameter name="section" type="fr.ird.observe.entities.longline.Section"/> + </operation> + <operation name="getBasket" visibility="public"> + <returnParameter type="fr.ird.observe.entities.longline.Basket"/> + </operation> + <operation name="setBasket" visibility="public"> + <returnParameter type=""/> + <parameter name="basket" type="fr.ird.observe.entities.longline.Basket"/> + </operation> + <operation name="getBranchline" visibility="public"> + <returnParameter type="fr.ird.observe.entities.longline.Branchline"/> + </operation> + <operation name="getBranchline" visibility="public"> + <returnParameter type=""/> + <parameter name="branchline" type="fr.ird.observe.entities.longline.Branchline"/> + </operation> + </interface> + <enumeration name="ActivityLonglineConstants" package="fr.ird.observe.entities.longline"> + <literal name="latitudeAsDegre"/> + <literal name="latitudeAsMinute"/> + <literal name="latitudeAsSeconde"/> + <literal name="longitudeAsDegre"/> + <literal name="longitudeAsMinute"/> + <literal name="longitudeAsSeconde"/> + <literal name="useSexagecimalFormat"/> + <literal name="absoluteLongitude"/> + <literal name="absoluteLatitude"/> + <literal name="quadrant"/> + </enumeration> + <enumeration name="ActivityLonglineConstants" package="fr.ird.observe.entities.longline"> + <literal name="date"/> + <literal name="time"/> + </enumeration> + <enumeration name="SetLonglineConstants" package="fr.ird.observe.entities.longline"> + <literal name="settingStartDate"/> + <literal name="settingStartTime"/> + <literal name="settingStartQuadrant"/> + <literal name="settingEndDate"/> + <literal name="settingEndTime"/> + <literal name="settingEndQuadrant"/> + <literal name="haulingStartDate"/> + <literal name="haulingStartTime"/> + <literal name="haulingStartQuadrant"/> + <literal name="haulingEndDate"/> + <literal name="haulingEndTime"/> + <literal name="haulingEndQuadrant"/> + <literal name="floatlinesCompositionProportionSum"/> + <literal name="branchlinesCompositionProportionSum"/> + <literal name="hooksCompositionProportionSum"/> + <literal name="baitsCompositionProportionSum"/> + </enumeration> + <enumeration name="TdrConstants" package="fr.ird.observe.entities.longline"> + <literal name="deployementStartDate"/> + <literal name="deployementStartTime"/> + <literal name="deployementEndDate"/> + <literal name="deployementEndTime"/> + <literal name="fishingStartDate"/> + <literal name="fishingStartTime"/> + <literal name="fishingEndDate"/> + <literal name="fishingEndTime"/> + </enumeration> + <enumeration name="BranchlineConstants" package="fr.ird.observe.entities.longline"> + <literal name="timerTimeOnBoardDate"/> + <literal name="timerTimeOnBoardTime"/> + </enumeration> + <package name="fr.ird.observe.entities.referentiel.longline"/> + <class name="WeightMeasureType" package="fr.ird.observe.entities.referentiel.longline"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.referentiel.I18nReferentialEntity" + discriminator=""/> + <attribute visibility="public" type="fr.ird.observe.entities.longline.WeightMeasure" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + </class> + <class name="VesselActivityLongline" + package="fr.ird.observe.entities.referentiel.longline"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.referentiel.I18nReferentialEntity" + discriminator=""/> + <attribute visibility="public" type="fr.ird.observe.entities.longline.ActivityLongline" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + </class> + <class name="TripType" package="fr.ird.observe.entities.referentiel.longline"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.referentiel.I18nReferentialEntity" + discriminator=""/> + <attribute visibility="public" type="fr.ird.observe.entities.longline.TripLongline" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + </class> + <class name="StomacFullness" package="fr.ird.observe.entities.referentiel.longline"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.referentiel.I18nReferentialEntity" + discriminator=""/> + <attribute visibility="public" type="fr.ird.observe.entities.longline.CatchLongline" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + </class> + <class name="SizeMeasureType" package="fr.ird.observe.entities.referentiel.longline"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.referentiel.I18nReferentialEntity" + discriminator=""/> + <attribute visibility="public" type="fr.ird.observe.entities.longline.SizeMeasure" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + </class> + <class name="SettingShape" package="fr.ird.observe.entities.referentiel.longline"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.referentiel.I18nReferentialEntity" + discriminator=""/> + <attribute visibility="public" type="fr.ird.observe.entities.longline.SetLongline" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + </class> + <class name="SensorType" package="fr.ird.observe.entities.referentiel.longline"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.referentiel.I18nReferentialEntity" + discriminator=""/> + <attribute visibility="public" type="fr.ird.observe.entities.longline.SensorUsed" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + </class> + <class name="SensorDataFormat" package="fr.ird.observe.entities.referentiel.longline"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.referentiel.I18nReferentialEntity" + discriminator=""/> + <attribute visibility="public" type="fr.ird.observe.entities.longline.SensorUsed" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + </class> + <class name="SensorBrand" package="fr.ird.observe.entities.referentiel.longline"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.referentiel.ObserveReferentialEntity" + discriminator=""/> + <attribute name="brandName" associationType="composite" visibility="public" type="String" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute visibility="public" type="fr.ird.observe.entities.longline.Tdr" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.longline.SensorUsed" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + </class> + <class name="MitigationType" package="fr.ird.observe.entities.referentiel.longline"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.referentiel.I18nReferentialEntity" + discriminator=""/> + <attribute name="set" visibility="public" + type="fr.ird.observe.entities.longline.SetLongline" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + </class> + <class name="MaturityStatus" package="fr.ird.observe.entities.referentiel.longline"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.referentiel.I18nReferentialEntity" + discriminator=""/> + <attribute name="lowerValue" associationType="composite" visibility="public" type="String" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="upperValue" associationType="composite" visibility="public" type="String" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute visibility="public" type="fr.ird.observe.entities.longline.CatchLongline" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + </class> + <class name="LineType" package="fr.ird.observe.entities.referentiel.longline"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.referentiel.I18nReferentialEntity" + discriminator=""/> + <attribute visibility="public" + type="fr.ird.observe.entities.longline.FloatlinesComposition" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.longline.Branchline" + reverseAttributeName="topType" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.longline.SetLongline" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.longline.Branchline" + reverseAttributeName="tracelineType" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + <attribute visibility="public" + type="fr.ird.observe.entities.longline.BranchlinesComposition" + reverseAttributeName="topType" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + <attribute visibility="public" + type="fr.ird.observe.entities.longline.BranchlinesComposition" + reverseAttributeName="tracelineType" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + </class> + <class name="LightsticksType" package="fr.ird.observe.entities.referentiel.longline"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.referentiel.I18nReferentialEntity" + discriminator=""/> + <attribute visibility="public" type="fr.ird.observe.entities.longline.SetLongline" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + </class> + <class name="LightsticksColor" package="fr.ird.observe.entities.referentiel.longline"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.referentiel.I18nReferentialEntity" + discriminator=""/> + <attribute visibility="public" type="fr.ird.observe.entities.longline.SetLongline" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + </class> + <class name="ItemHorizontalPosition" + package="fr.ird.observe.entities.referentiel.longline"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.referentiel.I18nReferentialEntity" + discriminator=""/> + <attribute visibility="public" type="fr.ird.observe.entities.longline.Tdr" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + </class> + <class name="ItemVerticalPosition" + package="fr.ird.observe.entities.referentiel.longline"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.referentiel.I18nReferentialEntity" + discriminator=""/> + <attribute visibility="public" type="fr.ird.observe.entities.longline.Tdr" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + </class> + <class name="HookType" package="fr.ird.observe.entities.referentiel.longline"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.referentiel.I18nReferentialEntity" + discriminator=""/> + <attribute visibility="public" type="fr.ird.observe.entities.longline.HooksComposition" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.longline.Branchline" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + </class> + <class name="Healthness" package="fr.ird.observe.entities.referentiel.longline"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.referentiel.I18nReferentialEntity" + discriminator=""/> + <attribute visibility="public" type="fr.ird.observe.entities.longline.CatchLongline" + reverseAttributeName="discardHealthness" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.longline.CatchLongline" + reverseAttributeName="catchHealthness" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + </class> + <class name="EncounterType" package="fr.ird.observe.entities.referentiel.longline"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.referentiel.I18nReferentialEntity" + discriminator=""/> + <attribute visibility="public" type="fr.ird.observe.entities.longline.Encounter" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + </class> + <class name="CatchFateLongline" package="fr.ird.observe.entities.referentiel.longline"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.referentiel.I18nReferentialEntity" + discriminator=""/> + <attribute visibility="public" type="fr.ird.observe.entities.longline.CatchLongline" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + </class> + <class name="BaitType" package="fr.ird.observe.entities.referentiel.longline"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.referentiel.I18nReferentialEntity" + discriminator=""/> + <attribute visibility="public" type="fr.ird.observe.entities.longline.BaitsComposition" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.longline.Branchline" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + </class> + <class name="BaitSettingStatus" package="fr.ird.observe.entities.referentiel.longline"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.referentiel.I18nReferentialEntity" + discriminator=""/> + <attribute visibility="public" type="fr.ird.observe.entities.longline.BaitsComposition" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.longline.Branchline" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + </class> + <class name="HookPosition" package="fr.ird.observe.entities.referentiel.longline"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.referentiel.I18nReferentialEntity" + discriminator=""/> + <attribute visibility="public" type="fr.ird.observe.entities.longline.CatchLongline" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + </class> + <class name="BaitHaulingStatus" package="fr.ird.observe.entities.referentiel.longline"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.referentiel.I18nReferentialEntity" + discriminator=""/> + <attribute visibility="public" type="fr.ird.observe.entities.longline.Branchline" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + </class> + <class name="HookSize" package="fr.ird.observe.entities.referentiel.longline"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.referentiel.I18nReferentialEntity" + discriminator=""/> + <attribute visibility="public" type="fr.ird.observe.entities.longline.Branchline" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.longline.HooksComposition" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + </class> + <package name="fr.ird.observe.entities.referentiel"/> + <class name="Species" package="fr.ird.observe.entities.referentiel"> + <attribute visibility="public" type="fr.ird.observe.entities.longline.CatchLongline" + reverseAttributeName="speciesCatch" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.longline.CatchLongline" + reverseAttributeName="predator" + reverseMaxMultiplicity="-1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.longline.Tdr" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.longline.Encounter" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.referentiel.SpeciesList" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.referentiel.SpeciesGroup" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="0" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + </class> + <class name="SpeciesList" package="fr.ird.observe.entities.referentiel"> + <attribute visibility="public" type="fr.ird.observe.entities.referentiel.Species" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="-1" + navigable="true" + ordering="unordered"/> + </class> + <class name="SpeciesGroup" package="fr.ird.observe.entities.referentiel"> + <attribute visibility="public" type="fr.ird.observe.entities.referentiel.Species" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + </class> + <class name="Organism" package="fr.ird.observe.entities.referentiel"> + <attribute visibility="public" type="fr.ird.observe.entities.referentiel.Country" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.referentiel.Program" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + </class> + <class name="Program" package="fr.ird.observe.entities.referentiel"> + <attribute visibility="public" type="fr.ird.observe.entities.longline.TripLongline" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.referentiel.Organism" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + </class> + <class name="Country" package="fr.ird.observe.entities.referentiel"> + <attribute visibility="public" type="fr.ird.observe.entities.referentiel.Organism" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.referentiel.Vessel" + reverseAttributeName="flagCountry" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.referentiel.Harbour" + reverseAttributeName="" + navigable="false" + ordering="unordered"/> + </class> + <class name="VesselSizeCategory" package="fr.ird.observe.entities.referentiel"> + <attribute visibility="public" type="fr.ird.observe.entities.referentiel.Vessel" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + </class> + <class name="VesselType" package="fr.ird.observe.entities.referentiel"> + <attribute visibility="public" type="fr.ird.observe.entities.referentiel.Vessel" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + </class> + <class name="Vessel" package="fr.ird.observe.entities.referentiel"> + <attribute visibility="public" type="fr.ird.observe.entities.longline.TripLongline" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + <attribute visibility="public" + type="fr.ird.observe.entities.referentiel.VesselSizeCategory" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.referentiel.VesselType" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute name="flagCountry" visibility="public" + type="fr.ird.observe.entities.referentiel.Country" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + </class> + <class name="I18nReferentialEntity" abstract="true" + package="fr.ird.observe.entities.referentiel"> + <superclass name="fr.ird.observe.entities.referentiel.ObserveReferentialEntity" + discriminator=""/> + </class> + <class name="ObserveReferentialEntity" abstract="true" + package="fr.ird.observe.entities.referentiel"/> + <class name="Sex" package="fr.ird.observe.entities.referentiel"> + <attribute visibility="public" type="fr.ird.observe.entities.longline.CatchLongline" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + </class> + <class name="Person" package="fr.ird.observe.entities.referentiel"> + <attribute visibility="public" type="fr.ird.observe.entities.longline.TripLongline" + reverseAttributeName="observer" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.longline.TripLongline" + reverseAttributeName="captain" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.longline.TripLongline" + reverseAttributeName="dataEntryOperator" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + </class> + <class name="FpaZone" package="fr.ird.observe.entities.referentiel"> + <attribute visibility="public" type="fr.ird.observe.entities.longline.ActivityLongline" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + </class> + <class name="Ocean" package="fr.ird.observe.entities.referentiel"> + <attribute visibility="public" type="fr.ird.observe.entities.longline.TripLongline" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + </class> + <class name="Harbour" package="fr.ird.observe.entities.referentiel"> + <attribute visibility="public" type="fr.ird.observe.entities.longline.TripLongline" + reverseAttributeName="departureHarbour" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.longline.TripLongline" + reverseAttributeName="landingHarbour" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.referentiel.Country" + reverseAttributeName="" + navigable="true" + ordering="unordered"/> + </class> + <class name="Gear" package="fr.ird.observe.entities.referentiel"> + <attribute visibility="public" + type="fr.ird.observe.entities.longline.GearUseFeaturesLongline" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + <attribute visibility="public" + type="fr.ird.observe.entities.referentiel.GearCaracteristic" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="true" + ordering="unordered"/> + </class> + <class name="GearCaracteristic" package="fr.ird.observe.entities.referentiel"> + <attribute visibility="public" + type="fr.ird.observe.entities.longline.GearUseFeaturesMeasurementLongline" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.referentiel.Gear" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + </class> + <package name="fr.ird.observe.entities"/> + <class name="CommentableEntity" abstract="true" package="fr.ird.observe.entities"> + <superclass name="fr.ird.observe.entities.ObserveDataEntity" discriminator=""/> + </class> + <class name="ObserveEntity" abstract="true" package="fr.ird.observe.entities"/> + <class name="ObserveDataEntity" abstract="true" package="fr.ird.observe.entities"/> + <interface name="Trip" package="fr.ird.observe.entities"/> + <interface name="Activity" package="fr.ird.observe.entities"/> + <interface name="ObserveSet" package="fr.ird.observe.entities"/> +</objectModel> \ No newline at end of file diff --git a/eugene-editor-maven-plugin/src/test/resources/observe-entities/observe-seine.objectmodel b/eugene-editor-maven-plugin/src/test/resources/observe-entities/observe-seine.objectmodel new file mode 100644 index 0000000..1cf5028 --- /dev/null +++ b/eugene-editor-maven-plugin/src/test/resources/observe-entities/observe-seine.objectmodel @@ -0,0 +1,1677 @@ +<?xml version="1.0" encoding="UTF-8"?> +<objectModel xmlns="http://nuiton.org/eugene/objectModel/v1" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://nuiton.org/eugene/objectModel/v1 http://doc.nuiton.org/eugene/xsd/v1/objectmodel.xsd" + name="Observe" + version="1.9.1"> + <package name="fr.ird.observe.entities.seine"/> + <class name="TripSeine" package="fr.ird.observe.entities.seine"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.CommentableEntity" discriminator=""/> + <interface name="fr.ird.observe.entities.Trip"/> + <attribute name="startDate" associationType="composite" visibility="public" + type="java.util.Date" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="endDate" associationType="composite" visibility="public" + type="java.util.Date" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="checkLevel" associationType="composite" visibility="public" type="int" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="formsUrl" associationType="composite" visibility="public" + type="java.lang.String" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="reportsUrl" associationType="composite" visibility="public" + type="java.lang.String" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="historicalData" associationType="composite" visibility="public" + type="boolean" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="ersId" associationType="composite" visibility="public" + type="java.lang.String" + minMultiplicity="1" + maxMultiplicity="1"/> + <operation name="getObserverLabel" visibility="public"> + <returnParameter type="java.lang.String"/> + </operation> + <attribute visibility="public" type="fr.ird.observe.entities.referentiel.Ocean" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="0" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.seine.Route" + reverseAttributeName="" + associationType="composite" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="true" + ordering="unordered"> + <tagValue name="orderBy" value="date"/> + </attribute> + <attribute visibility="public" type="fr.ird.observe.entities.referentiel.Vessel" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.referentiel.Program" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute name="observer" visibility="public" + type="fr.ird.observe.entities.referentiel.Person" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="0" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute name="captain" visibility="public" + type="fr.ird.observe.entities.referentiel.Person" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="0" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute name="dataEntryOperator" visibility="public" + type="fr.ird.observe.entities.referentiel.Person" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="0" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute name="departureHarbour" visibility="public" + type="fr.ird.observe.entities.referentiel.Harbour" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="0" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute name="landingHarbour" visibility="public" + type="fr.ird.observe.entities.referentiel.Harbour" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="0" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.seine.GearUseFeaturesSeine" + reverseAttributeName="" + associationType="composite" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="true" + ordering="unordered"/> + </class> + <class name="TargetCatch" package="fr.ird.observe.entities.seine"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.CommentableEntity" discriminator=""/> + <attribute name="catchWeight" associationType="composite" visibility="public" + type="java.lang.Float" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="well" associationType="composite" visibility="public" + type="java.lang.String" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="broughtOnDeck" associationType="composite" visibility="public" + type="java.lang.Boolean" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="discarded" associationType="composite" visibility="public" type="boolean" + minMultiplicity="1" + maxMultiplicity="1"/> + <operation name="getSpecies" visibility="public"> + <returnParameter type="fr.ird.observe.entities.referentiel.Species"/> + </operation> + <operation name="setSpecies" visibility="public"> + <returnParameter type="void"/> + <parameter name="species" type="fr.ird.observe.entities.referentiel.Species"/> + </operation> + <attribute visibility="public" type="fr.ird.observe.entities.seine.SetSeine" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" + type="fr.ird.observe.entities.referentiel.seine.WeightCategory" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" + type="fr.ird.observe.entities.referentiel.seine.ReasonForDiscard" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="0" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + </class> + <class name="SchoolEstimate" package="fr.ird.observe.entities.seine"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.ObserveDataEntity" discriminator=""/> + <attribute name="totalWeight" associationType="composite" visibility="public" + type="java.lang.Integer" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="meanWeight" associationType="composite" visibility="public" + type="java.lang.Integer" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute visibility="public" type="fr.ird.observe.entities.seine.SetSeine" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.referentiel.Species" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + </class> + <class name="TransmittingBuoy" package="fr.ird.observe.entities.seine"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.ObserveDataEntity" discriminator=""/> + <attribute name="code" associationType="composite" visibility="public" + type="java.lang.String" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="brand" associationType="composite" visibility="public" + type="java.lang.String" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="ownership" associationType="composite" visibility="public" + type="fr.ird.observe.entities.constants.seine.OwnershipPersist" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute visibility="public" type="fr.ird.observe.entities.seine.FloatingObject" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="false" + ordering="unordered"/> + <attribute visibility="public" + type="fr.ird.observe.entities.referentiel.seine.TransmittingBuoyType" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" + type="fr.ird.observe.entities.referentiel.seine.TransmittingBuoyOperation" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.referentiel.Country" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + </class> + <class name="TargetSample" package="fr.ird.observe.entities.seine"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.CommentableEntity" discriminator=""/> + <attribute name="nature" associationType="composite" visibility="public" + type="java.lang.String" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="discarded" associationType="composite" visibility="public" + type="java.lang.Boolean" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute visibility="public" type="fr.ird.observe.entities.seine.SetSeine" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="false" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.seine.TargetLength" + reverseAttributeName="" + associationType="composite" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="true" + ordering="unordered"/> + </class> + <class name="TargetLength" package="fr.ird.observe.entities.seine"> + <dependency name="constants" + supplierName="fr.ird.observe.entities.seine.TargetLengthConstants"/> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.ObserveDataEntity" discriminator=""/> + <interface name="fr.ird.observe.entities.LengthWeightComputable"/> + <attribute name="measureType" associationType="composite" visibility="public" type="int" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="length" associationType="composite" visibility="public" + type="java.lang.Float" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="lengthSource" associationType="composite" visibility="public" + type="boolean" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="count" associationType="composite" visibility="public" + type="java.lang.Integer" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="weight" associationType="composite" visibility="public" + type="java.lang.Float" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="weightSource" associationType="composite" visibility="public" + type="boolean" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="acquisitionMode" associationType="composite" visibility="public" + type="int" + minMultiplicity="1" + maxMultiplicity="1"/> + <operation name="getTotalWeight" visibility="public"> + <tagValue name="documentation" + value="Pour obtenir la valeur du weight total échantillonné (uniquement si un poids individuel et un count est renseigné)"/> + <returnParameter type="java.lang.Float"/> + </operation> + <attribute visibility="public" type="fr.ird.observe.entities.seine.TargetSample" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.referentiel.Species" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + </class> + <class name="SetSeine" package="fr.ird.observe.entities.seine"> + <dependency name="constants" supplierName="fr.ird.observe.entities.seine.SetConstants"/> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.CommentableEntity" discriminator=""/> + <interface name="fr.ird.observe.entities.ObserveSet"/> + <attribute name="startTime" associationType="composite" visibility="public" + type="java.util.Date" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="endPursingTimeStamp" associationType="composite" visibility="public" + type="java.util.Date" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="endSetTimeStamp" associationType="composite" visibility="public" + type="java.util.Date" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="maxGearDepth" associationType="composite" visibility="public" + type="java.lang.Integer" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="currentSpeed" associationType="composite" visibility="public" + type="java.lang.Float" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="currentDirection" associationType="composite" visibility="public" + type="java.lang.Integer" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="schoolTopDepth" associationType="composite" visibility="public" + type="java.lang.Integer" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="schoolMeanDepth" associationType="composite" visibility="public" + type="java.lang.Integer" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="schoolThickness" associationType="composite" visibility="public" + type="java.lang.Integer" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="sonarUsed" associationType="composite" visibility="public" type="boolean" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="supportVesselName" associationType="composite" visibility="public" + type="java.lang.String" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="targetDiscarded" associationType="composite" visibility="public" + type="java.lang.Boolean" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="nonTargetDiscarded" associationType="composite" visibility="public" + type="java.lang.Boolean" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="currentMeasureDepth" associationType="composite" visibility="public" + type="java.lang.Integer" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="schoolType" associationType="composite" visibility="public" + type="fr.ird.observe.entities.constants.seine.SchoolTypePersist" + minMultiplicity="1" + maxMultiplicity="1"/> + <operation name="hasTargetCatch" visibility="public"> + <returnParameter type="boolean"/> + </operation> + <operation name="hasRejetThon" visibility="public"> + <returnParameter type="boolean"/> + </operation> + <operation name="canUseTargetSample" visibility="public"> + <returnParameter type="boolean"/> + <parameter name="discarded" type="boolean"/> + </operation> + <operation name="canUseNonTargetSample" visibility="public"> + <returnParameter type="boolean"/> + </operation> + <operation name="getTargetSample" visibility="public"> + <returnParameter type="fr.ird.observe.entities.seine.TargetSample"/> + <parameter name="discarded" type="boolean"/> + </operation> + <operation name="isFreeSchoolType" visibility="public"> + <returnParameter type="boolean"/> + </operation> + <operation name="isSchoolObjectType" visibility="public"> + <returnParameter type="boolean"/> + </operation> + <operation name="isUnknownSchoolType" visibility="public"> + <returnParameter type="boolean"/> + </operation> + <operation name="setEndSetDate" visibility="public"> + <returnParameter type="void"/> + <parameter name="endSetDate" type="java.util.Date"/> + </operation> + <operation name="setEndPursingDate" visibility="public"> + <returnParameter type="void"/> + <parameter name="endPursingDate" type="java.util.Date"/> + </operation> + <operation name="getEndSetDate" visibility="public"> + <returnParameter type="java.util.Date"/> + </operation> + <operation name="getEndPursingDate" visibility="public"> + <returnParameter type="java.util.Date"/> + </operation> + <operation name="getEndSetTime" visibility="public"> + <returnParameter type="java.util.Date"/> + </operation> + <operation name="setEndSetTime" visibility="public"> + <returnParameter type="void"/> + <parameter name="endSetTime" type="java.util.Date"/> + </operation> + <operation name="getEndPursingTime" visibility="public"> + <returnParameter type="java.util.Date"/> + </operation> + <operation name="setEndPursingTime" visibility="public"> + <returnParameter type="void"/> + <parameter name="endPursingTime" type="java.util.Date"/> + </operation> + <attribute visibility="public" type="fr.ird.observe.entities.seine.NonTargetCatch" + reverseAttributeName="" + associationType="composite" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" + type="fr.ird.observe.entities.referentiel.seine.ReasonForNullSet" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="0" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.seine.NonTargetSample" + reverseAttributeName="" + associationType="composite" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.seine.TargetSample" + reverseAttributeName="" + associationType="composite" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.seine.TargetCatch" + reverseAttributeName="" + associationType="composite" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.seine.ActivitySeine" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="false" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.seine.SchoolEstimate" + reverseAttributeName="" + associationType="composite" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="true" + ordering="unordered"/> + </class> + <class name="Route" package="fr.ird.observe.entities.seine"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.CommentableEntity" discriminator=""/> + <attribute name="date" associationType="composite" visibility="public" + type="java.util.Date" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="startLogValue" associationType="composite" visibility="public" + type="java.lang.Float" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="endLogValue" associationType="composite" visibility="public" + type="java.lang.Float" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="checkLevel" associationType="composite" visibility="public" type="int" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute visibility="public" type="fr.ird.observe.entities.seine.ActivitySeine" + reverseAttributeName="" + associationType="composite" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.seine.TripSeine" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="false" + ordering="unordered"/> + </class> + <class name="ObjectSchoolEstimate" package="fr.ird.observe.entities.seine"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.ObserveDataEntity" discriminator=""/> + <attribute name="totalWeight" associationType="composite" visibility="public" + type="java.lang.Integer" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute visibility="public" type="fr.ird.observe.entities.seine.FloatingObject" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="false" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.referentiel.Species" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + </class> + <class name="ObjectObservedSpecies" package="fr.ird.observe.entities.seine"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.ObserveDataEntity" discriminator=""/> + <attribute name="count" associationType="composite" visibility="public" + type="java.lang.Integer" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="statut" associationType="composite" visibility="public" + type="java.lang.Integer" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute visibility="public" type="fr.ird.observe.entities.seine.FloatingObject" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="false" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.referentiel.Species" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" + type="fr.ird.observe.entities.referentiel.seine.SpeciesStatus" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + </class> + <class name="NonTargetSample" package="fr.ird.observe.entities.seine"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.CommentableEntity" discriminator=""/> + <attribute visibility="public" type="fr.ird.observe.entities.seine.SetSeine" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="false" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.seine.NonTargetLength" + reverseAttributeName="" + associationType="composite" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="true" + ordering="unordered"/> + </class> + <class name="NonTargetLength" package="fr.ird.observe.entities.seine"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.ObserveDataEntity" discriminator=""/> + <interface name="fr.ird.observe.entities.LengthWeightComputable"/> + <attribute name="length" associationType="composite" visibility="public" + type="java.lang.Float" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="lengthSource" associationType="composite" visibility="public" + type="boolean" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="picturesReferences" associationType="composite" visibility="public" + type="java.lang.String" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="weight" associationType="composite" visibility="public" + type="java.lang.Float" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="weightSource" associationType="composite" visibility="public" + type="boolean" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="count" associationType="composite" visibility="public" + type="java.lang.Integer" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="acquisitionMode" associationType="composite" visibility="public" + type="int" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute visibility="public" type="fr.ird.observe.entities.seine.NonTargetSample" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="false" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.referentiel.Species" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.referentiel.Sex" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + </class> + <class name="NonTargetCatch" package="fr.ird.observe.entities.seine"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.CommentableEntity" discriminator=""/> + <interface name="fr.ird.observe.entities.LengthWeightComputable"/> + <attribute name="catchWeight" associationType="composite" visibility="public" + type="java.lang.Float" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="catchWeightComputedSource" associationType="composite" + visibility="public" + type="fr.ird.observe.entities.constants.seine.NonTargetCatchComputedValueSourcePersist" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="meanWeight" associationType="composite" visibility="public" + type="java.lang.Float" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="meanWeightComputedSource" associationType="composite" visibility="public" + type="fr.ird.observe.entities.constants.seine.NonTargetCatchComputedValueSourcePersist" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="meanLength" associationType="composite" visibility="public" + type="java.lang.Float" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="meanLengthComputedSource" associationType="composite" visibility="public" + type="fr.ird.observe.entities.constants.seine.NonTargetCatchComputedValueSourcePersist" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="totalCount" associationType="composite" visibility="public" + type="java.lang.Integer" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="totalCountComputedSource" associationType="composite" visibility="public" + type="fr.ird.observe.entities.constants.seine.NonTargetCatchComputedValueSourcePersist" + minMultiplicity="1" + maxMultiplicity="1"/> + <operation name="isCatchWeightComputed" visibility="public"> + <returnParameter type="boolean"/> + </operation> + <operation name="isMeanWeightComputed" visibility="public"> + <returnParameter type="boolean"/> + </operation> + <operation name="isTotalCountComputed" visibility="public"> + <returnParameter type="boolean"/> + </operation> + <operation name="isMeanLengthComputed" visibility="public"> + <returnParameter type="boolean"/> + </operation> + <attribute visibility="public" type="fr.ird.observe.entities.seine.SetSeine" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="false" + ordering="unordered"/> + <attribute visibility="public" + type="fr.ird.observe.entities.referentiel.seine.ReasonForDiscard" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="0" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.referentiel.Species" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" + type="fr.ird.observe.entities.referentiel.seine.SpeciesFate" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="0" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + </class> + <class name="FloatingObject" package="fr.ird.observe.entities.seine"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.CommentableEntity" discriminator=""/> + <attribute name="daysAtSeaCount" associationType="composite" visibility="public" + type="java.lang.Integer" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="supportVesselName" associationType="composite" visibility="public" + type="java.lang.String" + minMultiplicity="1" + maxMultiplicity="1"/> + <operation name="getTypeTransmittingBuoyOperation" visibility="public"> + <returnParameter type="fr.ird.observe.entities.constants.seine.TypeTransmittingBuoyOperationPersist"/> + </operation> + <attribute visibility="public" type="fr.ird.observe.entities.seine.ActivitySeine" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="false" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.seine.ObjectSchoolEstimate" + reverseAttributeName="" + associationType="composite" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.seine.ObjectObservedSpecies" + reverseAttributeName="" + associationType="composite" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.referentiel.seine.ObjectType" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="0" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" + type="fr.ird.observe.entities.referentiel.seine.ObjectOperation" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.referentiel.seine.ObjectFate" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="0" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.seine.TransmittingBuoy" + reverseAttributeName="" + associationType="composite" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="true" + ordering="unordered"/> + </class> + <class name="ActivitySeine" package="fr.ird.observe.entities.seine"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.CommentableEntity" discriminator=""/> + <interface name="fr.ird.observe.entities.Activity"/> + <attribute name="time" associationType="composite" visibility="public" + type="java.util.Date" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="latitude" associationType="composite" visibility="public" + type="java.lang.Float" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="longitude" associationType="composite" visibility="public" + type="java.lang.Float" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="vesselSpeed" associationType="composite" visibility="public" + type="java.lang.Float" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="seaSurfaceTemperature" associationType="composite" visibility="public" + type="java.lang.Float" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="observedSystemDistance" associationType="composite" visibility="public" + type="java.lang.Float" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="ersId" associationType="composite" visibility="public" + type="java.lang.String" + minMultiplicity="1" + maxMultiplicity="1"/> + <operation name="isDCPOperation" visibility="public"> + <returnParameter type="boolean"/> + </operation> + <operation name="isSetOperation" visibility="public"> + <returnParameter type="boolean"/> + </operation> + <operation name="isObservedSystemOperation" visibility="public"> + <returnParameter type="boolean"/> + </operation> + <operation name="getSchoolType" visibility="public"> + <returnParameter type="fr.ird.observe.entities.constants.seine.SchoolTypePersist"/> + </operation> + <operation name="isActivityFinDeVeille" visibility="public"> + <returnParameter type="boolean"/> + </operation> + <operation name="isActivityDebutDePechePositive" visibility="public"> + <returnParameter type="boolean"/> + </operation> + <operation name="isActivityFinDePeche" visibility="public"> + <returnParameter type="boolean"/> + </operation> + <operation name="isChangedZoneOperation" visibility="public"> + <returnParameter type="boolean"/> + </operation> + <attribute visibility="public" + type="fr.ird.observe.entities.referentiel.seine.VesselActivitySeine" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" + type="fr.ird.observe.entities.referentiel.seine.SurroundingActivity" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="0" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.referentiel.seine.Wind" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="0" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" + type="fr.ird.observe.entities.referentiel.seine.DetectionMode" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="0" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" + type="fr.ird.observe.entities.referentiel.seine.ReasonForNoFishing" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="0" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.seine.Route" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="false" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.seine.FloatingObject" + reverseAttributeName="" + associationType="composite" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" + type="fr.ird.observe.entities.referentiel.seine.ObservedSystem" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.seine.SetSeine" + reverseAttributeName="" + associationType="composite" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute name="currentFpaZone" visibility="public" + type="fr.ird.observe.entities.referentiel.FpaZone" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="0" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute name="previousFpaZone" visibility="public" + type="fr.ird.observe.entities.referentiel.FpaZone" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="0" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute name="nextFpaZone" visibility="public" + type="fr.ird.observe.entities.referentiel.FpaZone" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="0" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + </class> + <class name="GearUseFeaturesSeine" package="fr.ird.observe.entities.seine"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.CommentableEntity" discriminator=""/> + <attribute name="number" associationType="composite" visibility="public" + type="java.lang.Integer" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="usedInTrip" associationType="composite" visibility="public" + type="Boolean" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute visibility="public" type="fr.ird.observe.entities.seine.TripSeine" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="false" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.referentiel.Gear" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute name="gearUseFeaturesMeasurement" visibility="public" + type="fr.ird.observe.entities.seine.GearUseFeaturesMeasurementSeine" + reverseAttributeName="" + associationType="composite" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="true" + ordering="unordered"/> + </class> + <class name="GearUseFeaturesMeasurementSeine" package="fr.ird.observe.entities.seine"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.ObserveDataEntity" discriminator=""/> + <attribute name="measurementValue" associationType="composite" visibility="public" + type="java.lang.String" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute visibility="public" type="fr.ird.observe.entities.seine.GearUseFeaturesSeine" + reverseAttributeName="gearUseFeaturesMeasurement" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="false" + ordering="unordered"/> + <attribute visibility="public" + type="fr.ird.observe.entities.referentiel.GearCaracteristic" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + </class> + <enumeration name="TargetLengthConstants" package="fr.ird.observe.entities.seine"> + <literal name="totalWeight"/> + </enumeration> + <enumeration name="SetConstants" package="fr.ird.observe.entities.seine"> + <literal name="targetSampleCapture"/> + <literal name="endSetDate"/> + <literal name="endPursingDate"/> + <literal name="endSetTime"/> + <literal name="endPursingTime"/> + </enumeration> + <package name="java"/> + <package name="org"/> + <package name="fr.ird.observe.entities.referentiel.seine"/> + <class name="VesselActivitySeine" package="fr.ird.observe.entities.referentiel.seine"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.referentiel.I18nReferentialEntity" + discriminator=""/> + <attribute visibility="public" type="fr.ird.observe.entities.seine.ActivitySeine" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + </class> + <class name="Wind" package="fr.ird.observe.entities.referentiel.seine"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.referentiel.I18nReferentialEntity" + discriminator=""/> + <attribute name="speedRange" associationType="composite" visibility="public" + type="java.lang.String" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute name="waveHeight" associationType="composite" visibility="public" + type="java.lang.String" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute visibility="public" type="fr.ird.observe.entities.seine.ActivitySeine" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + </class> + <class name="WeightCategory" package="fr.ird.observe.entities.referentiel.seine"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.referentiel.I18nReferentialEntity" + discriminator=""/> + <attribute visibility="public" type="fr.ird.observe.entities.seine.TargetCatch" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.referentiel.Species" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + </class> + <class name="TransmittingBuoyType" package="fr.ird.observe.entities.referentiel.seine"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.referentiel.I18nReferentialEntity" + discriminator=""/> + <attribute visibility="public" type="fr.ird.observe.entities.seine.TransmittingBuoy" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + </class> + <class name="TransmittingBuoyOperation" + package="fr.ird.observe.entities.referentiel.seine"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.referentiel.I18nReferentialEntity" + discriminator=""/> + <attribute visibility="public" type="fr.ird.observe.entities.seine.TransmittingBuoy" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + </class> + <class name="SurroundingActivity" package="fr.ird.observe.entities.referentiel.seine"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.referentiel.I18nReferentialEntity" + discriminator=""/> + <attribute visibility="public" type="fr.ird.observe.entities.seine.ActivitySeine" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + </class> + <class name="SpeciesStatus" package="fr.ird.observe.entities.referentiel.seine"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.referentiel.I18nReferentialEntity" + discriminator=""/> + <attribute visibility="public" type="fr.ird.observe.entities.seine.ObjectObservedSpecies" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + </class> + <class name="SpeciesFate" package="fr.ird.observe.entities.referentiel.seine"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.referentiel.I18nReferentialEntity" + discriminator=""/> + <attribute visibility="public" type="fr.ird.observe.entities.seine.NonTargetCatch" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + </class> + <class name="ReasonForNullSet" package="fr.ird.observe.entities.referentiel.seine"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.referentiel.I18nReferentialEntity" + discriminator=""/> + <attribute visibility="public" type="fr.ird.observe.entities.seine.SetSeine" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + </class> + <class name="ReasonForNoFishing" package="fr.ird.observe.entities.referentiel.seine"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.referentiel.I18nReferentialEntity" + discriminator=""/> + <attribute visibility="public" type="fr.ird.observe.entities.seine.ActivitySeine" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + </class> + <class name="ReasonForDiscard" package="fr.ird.observe.entities.referentiel.seine"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.referentiel.I18nReferentialEntity" + discriminator=""/> + <attribute visibility="public" type="fr.ird.observe.entities.seine.TargetCatch" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.seine.NonTargetCatch" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + </class> + <class name="ObservedSystem" package="fr.ird.observe.entities.referentiel.seine"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.referentiel.I18nReferentialEntity" + discriminator=""/> + <attribute name="schoolType" associationType="composite" visibility="public" + type="fr.ird.observe.entities.constants.seine.SchoolTypePersist" + minMultiplicity="1" + maxMultiplicity="1"/> + <attribute visibility="public" type="fr.ird.observe.entities.seine.ActivitySeine" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + </class> + <class name="ObjectType" package="fr.ird.observe.entities.referentiel.seine"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.referentiel.I18nReferentialEntity" + discriminator=""/> + <attribute visibility="public" type="fr.ird.observe.entities.seine.FloatingObject" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + </class> + <class name="ObjectOperation" package="fr.ird.observe.entities.referentiel.seine"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.referentiel.I18nReferentialEntity" + discriminator=""/> + <attribute visibility="public" type="fr.ird.observe.entities.seine.FloatingObject" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + </class> + <class name="ObjectFate" package="fr.ird.observe.entities.referentiel.seine"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.referentiel.I18nReferentialEntity" + discriminator=""/> + <attribute visibility="public" type="fr.ird.observe.entities.seine.FloatingObject" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + </class> + <class name="DetectionMode" package="fr.ird.observe.entities.referentiel.seine"> + <stereotype name="entity"/> + <superclass name="fr.ird.observe.entities.referentiel.I18nReferentialEntity" + discriminator=""/> + <attribute visibility="public" type="fr.ird.observe.entities.seine.ActivitySeine" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + </class> + <package name="fr.ird.observe.entities.referentiel"/> + <class name="Vessel" package="fr.ird.observe.entities.referentiel"> + <attribute visibility="public" type="fr.ird.observe.entities.seine.TripSeine" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + <attribute visibility="public" + type="fr.ird.observe.entities.referentiel.VesselSizeCategory" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="0" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.referentiel.VesselType" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="0" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute name="flagCountry" visibility="public" + type="fr.ird.observe.entities.referentiel.Country" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="0" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + </class> + <class name="VesselType" package="fr.ird.observe.entities.referentiel"> + <attribute visibility="public" type="fr.ird.observe.entities.referentiel.Vessel" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + </class> + <class name="VesselSizeCategory" package="fr.ird.observe.entities.referentiel"> + <attribute visibility="public" type="fr.ird.observe.entities.referentiel.Vessel" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + </class> + <class name="Species" package="fr.ird.observe.entities.referentiel"> + <attribute visibility="public" type="fr.ird.observe.entities.seine.NonTargetCatch" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.seine.ObjectObservedSpecies" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.seine.NonTargetLength" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.seine.TargetLength" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.seine.ObjectSchoolEstimate" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.seine.SchoolEstimate" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + <attribute visibility="public" + type="fr.ird.observe.entities.referentiel.seine.WeightCategory" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.referentiel.SpeciesGroup" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="0" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" + type="fr.ird.observe.entities.referentiel.LengthWeightParameter" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.referentiel.Ocean" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.referentiel.SpeciesList" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + </class> + <class name="SpeciesList" package="fr.ird.observe.entities.referentiel"> + <attribute visibility="public" type="fr.ird.observe.entities.referentiel.Species" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="true" + ordering="unordered"/> + </class> + <class name="SpeciesGroup" package="fr.ird.observe.entities.referentiel"> + <attribute visibility="public" type="fr.ird.observe.entities.referentiel.Species" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + </class> + <class name="ObserveReferentialEntity" abstract="true" + package="fr.ird.observe.entities.referentiel"/> + <class name="Program" package="fr.ird.observe.entities.referentiel"> + <attribute visibility="public" type="fr.ird.observe.entities.seine.TripSeine" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.referentiel.Organism" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + </class> + <class name="Person" package="fr.ird.observe.entities.referentiel"> + <attribute visibility="public" type="fr.ird.observe.entities.seine.TripSeine" + reverseAttributeName="observer" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.seine.TripSeine" + reverseAttributeName="captain" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.seine.TripSeine" + reverseAttributeName="dataEntryOperator" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + </class> + <class name="Ocean" package="fr.ird.observe.entities.referentiel"> + <attribute visibility="public" type="fr.ird.observe.entities.seine.TripSeine" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + <attribute visibility="public" + type="fr.ird.observe.entities.referentiel.LengthWeightParameter" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.referentiel.Species" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + </class> + <class name="Organism" package="fr.ird.observe.entities.referentiel"> + <attribute visibility="public" type="fr.ird.observe.entities.referentiel.Program" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.referentiel.Country" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + </class> + <class name="I18nReferentialEntity" abstract="true" + package="fr.ird.observe.entities.referentiel"> + <superclass name="fr.ird.observe.entities.referentiel.ObserveReferentialEntity" + discriminator=""/> + </class> + <class name="Country" package="fr.ird.observe.entities.referentiel"> + <attribute visibility="public" type="fr.ird.observe.entities.seine.TransmittingBuoy" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.referentiel.Organism" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.referentiel.Vessel" + reverseAttributeName="flagCountry" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + </class> + <class name="LengthWeightAble" abstract="true" + package="fr.ird.observe.entities.referentiel"/> + <class name="LengthWeightParameter" package="fr.ird.observe.entities.referentiel"> + <attribute visibility="public" type="fr.ird.observe.entities.referentiel.Ocean" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="0" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.referentiel.Species" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.referentiel.Sex" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="1" + maxMultiplicity="1" + navigable="true" + ordering="unordered"/> + </class> + <class name="Sex" package="fr.ird.observe.entities.referentiel"> + <attribute visibility="public" type="fr.ird.observe.entities.seine.NonTargetLength" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + <attribute visibility="public" + type="fr.ird.observe.entities.referentiel.LengthWeightParameter" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + </class> + <class name="FpaZone" package="fr.ird.observe.entities.referentiel"> + <attribute visibility="public" type="fr.ird.observe.entities.seine.ActivitySeine" + reverseAttributeName="currentFpaZone" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.seine.ActivitySeine" + reverseAttributeName="previousFpaZone" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.seine.ActivitySeine" + reverseAttributeName="nextFpaZone" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + </class> + <class name="Harbour" package="fr.ird.observe.entities.referentiel"> + <attribute visibility="public" type="fr.ird.observe.entities.seine.TripSeine" + reverseAttributeName="departureHarbour" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.seine.TripSeine" + reverseAttributeName="landingHarbour" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + </class> + <class name="Gear" package="fr.ird.observe.entities.referentiel"> + <attribute visibility="public" type="fr.ird.observe.entities.seine.GearUseFeaturesSeine" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + <attribute visibility="public" + type="fr.ird.observe.entities.referentiel.GearCaracteristic" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="true" + ordering="unordered"/> + </class> + <class name="GearCaracteristic" package="fr.ird.observe.entities.referentiel"> + <attribute visibility="public" + type="fr.ird.observe.entities.seine.GearUseFeaturesMeasurementSeine" + reverseAttributeName="" + reverseMaxMultiplicity="1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + <attribute visibility="public" type="fr.ird.observe.entities.referentiel.Gear" + reverseAttributeName="" + reverseMaxMultiplicity="-1" + minMultiplicity="0" + maxMultiplicity="-1" + navigable="false" + ordering="unordered"/> + </class> + <package name="fr.ird.observe.entities"/> + <class name="CommentableEntity" abstract="true" package="fr.ird.observe.entities"> + <superclass name="fr.ird.observe.entities.ObserveDataEntity" discriminator=""/> + </class> + <class name="ObserveDataEntity" abstract="true" package="fr.ird.observe.entities"/> + <interface name="LengthWeightComputable" package="fr.ird.observe.entities"> + <tagValue name="documentation" + value="Pour les entités dont on peut calculer la taille ou le weight à partir de l'autre valeurs. <p/> Si les deux valeurs sont saisies par l'observer, alors on ne fait rien. </p> Les indicateurs {@link #isLengthSource()} et {@link #isWeightSource()} permettent de savoir une fois les calculs effectués, ce qui a été calculé et ce qui a été saisi."/> + <tagValue name="author" value="chemit (chemit@codelutin.com)"/> + <tagValue name="version" value=""/> + <tagValue name="since" value="1.5"/> + <operation name="getLength" visibility="public"> + <returnParameter type="java.lang.Float"/> + </operation> + <operation name="setLength" visibility="public"> + <returnParameter type="void"/> + <parameter name="length" type="java.lang.Float"/> + </operation> + <operation name="isLengthSource" visibility="public"> + <returnParameter type="boolean"/> + </operation> + <operation name="setLengthSource" visibility="public"> + <returnParameter type="void"/> + <parameter name="lengthSource" type="boolean"/> + </operation> + <operation name="getWeight" visibility="public"> + <returnParameter type="java.lang.Float"/> + </operation> + <operation name="setWeight" visibility="public"> + <returnParameter type="void"/> + <parameter name="weight" type="java.lang.Float"/> + </operation> + <operation name="isWeightSource" visibility="public"> + <returnParameter type="boolean"/> + </operation> + <operation name="setWeightSource" visibility="public"> + <returnParameter type="void"/> + <parameter name="weightSource" type="boolean"/> + </operation> + </interface> + <interface name="Trip" package="fr.ird.observe.entities"/> + <interface name="Activity" package="fr.ird.observe.entities"/> + <interface name="ObserveSet" package="fr.ird.observe.entities"/> + <package name="fr.ird.observe.entities.constants.seine"/> + <enumeration name="OwnershipPersist" package="fr.ird.observe.entities.constants.seine"/> + <enumeration name="SchoolTypePersist" package="fr.ird.observe.entities.constants.seine"/> + <enumeration name="TypeTransmittingBuoyOperationPersist" + package="fr.ird.observe.entities.constants.seine"/> + <enumeration name="NonTargetCatchComputedValueSourcePersist" + package="fr.ird.observe.entities.constants.seine"> + <literal name="FROM_DATA"/> + <literal name="FROM_SAMPLE"/> + <literal name="FROM_REFERENTIEL"/> + </enumeration> +</objectModel> \ No newline at end of file diff --git a/eugene-editor-maven-plugin/src/test/resources/observe-entities/observe.objectmodel-ext b/eugene-editor-maven-plugin/src/test/resources/observe-entities/observe.objectmodel-ext new file mode 100644 index 0000000..c3ad97f --- /dev/null +++ b/eugene-editor-maven-plugin/src/test/resources/observe-entities/observe.objectmodel-ext @@ -0,0 +1,248 @@ +[model] +attributeType.Boolean java.lang.Boolean +attributeType.Float java.lang.Float +attributeType.Integer java.lang.Integer +attributeType.Long java.lang.Long +attributeType.String java.lang.String +generateForeignKeyNames true +generateOperatorForDAOHelper true +generatePropertyChangeSupport true +indexForeignKeys true +notGenerateToString true +useEnumerationName false +version @observe.model.version@ + +[package] +fr.ird.observe.entities + dbSchema OBSERVE_COMMON +fr.ird.observe.entities.longline + dbSchema OBSERVE_LONGLINE +fr.ird.observe.entities.referentiel + dbSchema OBSERVE_COMMON +fr.ird.observe.entities.referentiel.longline + dbSchema OBSERVE_LONGLINE +fr.ird.observe.entities.referentiel.seine + dbSchema OBSERVE_SEINE +fr.ird.observe.entities.seine + dbSchema OBSERVE_SEINE + +[class] +fr.ird.observe.entities.CommentableEntity + comment.hibernateAttributeType text +fr.ird.observe.entities.ObserveEntity + lastUpdateDate.notNull true +fr.ird.observe.entities.longline.ActivityLongline + dbName Activity + encounter.reverseDbName activity + sensorUsed.reverseDbName activity + setLongline.dbName set + vesselActivityLongline.dbName vesselActivity + vesselActivityLongline.lazy false +fr.ird.observe.entities.longline.Basket + branchline.orderBy settingIdentifier + settingIdentifier.notNull true + branchline.unique +fr.ird.observe.entities.longline.Branchline + branchlineLength.sqlType numeric + catchLongline.dbName catch + hookSize.sqlType numeric + settingIdentifier.notNull true + snapWeight.sqlType numeric + swivelWeight.sqlType numeric + tracelineLength.sqlType numeric +fr.ird.observe.entities.longline.BranchlinesComposition + length.sqlType numeric +fr.ird.observe.entities.longline.CatchLongline + dbName Catch + beatDiameter.sqlType numeric + catchFateLongline.dbName catchFate + gonadeWeight.sqlType numeric + predator.manyToManyTableName catch_predator + predator.reverseDbName catch + sizeMeasure.reverseDbName catch + totalWeight.sqlType numeric + weightMeasure.reverseDbName catch +fr.ird.observe.entities.longline.Encounter + distance.sqlType numeric +fr.ird.observe.entities.longline.FloatlinesComposition + length.sqlType numeric +fr.ird.observe.entities.longline.GearUseFeaturesLongline + dbName GearUseFeatures + gearUseFeaturesMeasurement.orderBy topiaCreateDate + gearUseFeaturesMeasurement.reverseDbName gearUseFeatures + gearUseFeaturesMeasurement.unique +fr.ird.observe.entities.longline.GearUseFeaturesMeasurementLongline + dbName GearUseFeaturesMeasurement + gearCaracteristic.notNull true +fr.ird.observe.entities.longline.HooksComposition + hookSize.sqlType numeric +fr.ird.observe.entities.longline.Section + basket.orderBy settingIdentifier + setLongline.dbName set + settingIdentifier.notNull true + basket.unique +fr.ird.observe.entities.longline.SetLongline + dbName Set + baitsComposition.reverseDbName set + branchlinesComposition.reverseDbName set + catchLongline.reverseDbName set + floatlinesComposition.reverseDbName set + haulingEndLatitude.sqlType numeric + haulingEndLongitude.sqlType numeric + haulingStartLatitude.sqlType numeric + haulingStartLongitude.sqlType numeric + hooksComposition.reverseDbName set + mitigationType.manyToManyTableName mitigationtype_set + mitigationType.reverseDbName set + section.orderBy settingIdentifier + section.reverseDbName set + settingEndLatitude.sqlType numeric + settingEndLongitude.sqlType numeric + settingStartLatitude.sqlType numeric + settingStartLongitude.sqlType numeric + settingVesselSpeed.sqlType numeric + shooterSpeed.sqlType numeric + snapWeight.sqlType numeric + swivelWeight.sqlType numeric + tdr.reverseDbName set + catchLongline.unique + section.unique +fr.ird.observe.entities.longline.SizeMeasure + size.sqlType numeric +fr.ird.observe.entities.longline.Tdr + floatline1Length.sqlType numeric + floatline2Length.sqlType numeric +fr.ird.observe.entities.longline.TdrRecord + depth.sqlType numeric + temperature.sqlType numeric +fr.ird.observe.entities.longline.TripLongline + dbName Trip + activityLongline.reverseDbName trip + gearUseFeaturesLongline.orderBy topiaCreateDate + gearUseFeaturesLongline.reverseDbName trip + activityLongline.unique + gearUseFeaturesLongline.unique +fr.ird.observe.entities.longline.WeightMeasure + weight.sqlType numeric +fr.ird.observe.entities.referentiel.Gear + gearCaracteristic.lazy false +fr.ird.observe.entities.referentiel.GearCaracteristic + gearCaracteristicType.lazy false +fr.ird.observe.entities.referentiel.LengthWeightParameter + ocean.lazy false + ocean.notNull true + sex.lazy false + sex.notNull true + species.lazy false + species.notNull true +fr.ird.observe.entities.referentiel.Organism + country.lazy false +fr.ird.observe.entities.referentiel.Program + comment.hibernateAttributeType text + organism.lazy false +fr.ird.observe.entities.referentiel.Species + maxLength.sqlType numeric + maxWeight.sqlType numeric + minLength.sqlType numeric + minWeight.sqlType numeric + ocean.lazy false + speciesGroup.lazy false +fr.ird.observe.entities.referentiel.SpeciesList + species.lazy false +fr.ird.observe.entities.referentiel.Vessel + capacity.sqlType numeric + comment.hibernateAttributeType text + flagCountry.lazy false + length.sqlType numeric + searchMaximum.sqlType numeric + vesselSizeCategory.lazy false + vesselType.lazy false +fr.ird.observe.entities.referentiel.longline.CatchFateLongline + dbName CatchFate +fr.ird.observe.entities.referentiel.longline.VesselActivityLongline + dbName VesselActivity +fr.ird.observe.entities.referentiel.seine.VesselActivitySeine + dbName VesselActivity +fr.ird.observe.entities.referentiel.seine.WeightCategory + species.lazy false +fr.ird.observe.entities.seine.ActivitySeine + dbName Activity + floatingObject.reverseDbName activity + latitude.sqlType numeric + longitude.sqlType numeric + observedSystem.manyToManyTableName activity_observedSystem + observedSystem.reverseDbName activity + observedSystemDistance.sqlType numeric + seaSurfaceTemperature.sqlType numeric + setSeine.dbName set + time.hibernateAttributeType.java.util.Date time + vesselActivitySeine.dbName vesselActivity + vesselSpeed.sqlType numeric + floatingObject.unique + observedSystem.unique +fr.ird.observe.entities.seine.FloatingObject + transmittingBuoy.unique +fr.ird.observe.entities.seine.GearUseFeaturesMeasurementSeine + dbName GearUseFeaturesMeasurement + gearCaracteristic.notNull true +fr.ird.observe.entities.seine.GearUseFeaturesSeine + dbName GearUseFeatures + gearUseFeaturesMeasurement.orderBy topiaCreateDate + gearUseFeaturesMeasurement.reverseDbName gearUseFeatures +fr.ird.observe.entities.seine.NonTargetCatch + catchWeight.sqlType numeric + meanLength.sqlType numeric + meanWeight.sqlType numeric +fr.ird.observe.entities.seine.NonTargetLength + length.sqlType numeric + sex.lazy false + weight.sqlType numeric +fr.ird.observe.entities.seine.NonTargetSample + nonTargetLength.unique +fr.ird.observe.entities.seine.Route + activitySeine.orderBy time + date.hibernateAttributeType.java.util.Date date + endLogValue.sqlType numeric + startLogValue.sqlType numeric + activitySeine.unique +fr.ird.observe.entities.seine.SchoolEstimate + naturalIdMutable true + setSeine.dbName set + setSeine.naturalId true + species.naturalId true +fr.ird.observe.entities.seine.SetSeine + dbName Set + currentSpeed.sqlType numeric + nonTargetCatch.reverseDbName set + nonTargetSample.reverseDbName set + schoolEstimate.reverseDbName set + startTime.hibernateAttributeType.java.util.Date time + targetCatch.reverseDbName set + targetSample.reverseDbName set + nonTargetSample.unique + targetSample.unique +fr.ird.observe.entities.seine.TargetCatch + naturalIdMutable true + catchWeight.sqlType numeric + discarded.naturalId true + reasonForDiscard.naturalId true + reasonForDiscard.notNull false + setSeine.dbName set + setSeine.naturalId true + weightCategory.naturalId true + well.naturalId true + well.notNull false +fr.ird.observe.entities.seine.TargetLength + length.sqlType numeric + weight.sqlType numeric +fr.ird.observe.entities.seine.TargetSample + targetLength.unique +fr.ird.observe.entities.seine.TripSeine + dbName Trip + endDate.hibernateAttributeType.java.util.Date date + gearUseFeaturesSeine.orderBy topiaCreateDate + gearUseFeaturesSeine.reverseDbName trip + route.orderBy date + route.reverseDbName trip + startDate.hibernateAttributeType.java.util.Date date + route.unique diff --git a/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelClassifierImpl.java b/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelClassifierImpl.java index 99bf8c1..965b61d 100644 --- a/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelClassifierImpl.java +++ b/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelClassifierImpl.java @@ -34,6 +34,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.HashSet; +import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Map; @@ -286,4 +287,19 @@ public abstract class ObjectModelClassifierImpl extends ObjectModelElementImpl i public final boolean isEnum() { return this instanceof ObjectModelEnumeration; } + + public void removeAttribute(String name) { + attributes.remove(name); + } + + public void removeOperation(String name) { + Iterator<ObjectModelOperation> iterator = operations.iterator(); + while (iterator.hasNext()) { + ObjectModelOperation operation = iterator.next(); + if (name.equals(operation.getName())) { + iterator.remove(); + break; + } + } + } } diff --git a/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelEnumerationImpl.java b/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelEnumerationImpl.java index 56d2f6f..3e779b8 100644 --- a/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelEnumerationImpl.java +++ b/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelEnumerationImpl.java @@ -28,6 +28,7 @@ import org.nuiton.eugene.models.object.ObjectModelModifier; import java.util.ArrayList; import java.util.Collection; +import java.util.Iterator; import java.util.Set; /** @@ -73,4 +74,14 @@ public class ObjectModelEnumerationImpl extends ObjectModelClassifierImpl implem return results; } + public void removeLiteral(String literal) { + Iterator<ObjectModelImplRef> iterator = literalRefs.iterator(); + while (iterator.hasNext()) { + ObjectModelImplRef ref = iterator.next(); + if (literal.equals(ref.getName())) { + iterator.remove(); + break; + } + } + } } diff --git a/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelOperationImpl.java b/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelOperationImpl.java index 4143783..85ab684 100644 --- a/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelOperationImpl.java +++ b/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelOperationImpl.java @@ -217,4 +217,14 @@ public class ObjectModelOperationImpl extends ObjectModelElementImpl implements return bodyCode; } + public void removeParameter(String name) { + Iterator<ObjectModelParameter> iterator = parameters.iterator(); + while (iterator.hasNext()) { + ObjectModelParameter parameter = iterator.next(); + if (name.equals(parameter.getName())) { + iterator.remove(); + break; + } + } + } } diff --git a/pom.xml b/pom.xml index 04141da..c9727ca 100644 --- a/pom.xml +++ b/pom.xml @@ -120,10 +120,12 @@ <modules> <module>eugene</module> + <module>eugene-config-templates</module> <module>eugene-java-templates</module> <module>eugene-plantuml-templates</module> <module>eugene-yaml-templates</module> <module>eugene-maven-plugin</module> + <module>eugene-editor-maven-plugin</module> </modules> <scm> @@ -152,8 +154,11 @@ <plexusPluginVersion>1.3.8</plexusPluginVersion> <doxiaVersion>1.6</doxiaVersion> <mavenVersion>3.3.9</mavenVersion> - - <!-- Java level configuration --> + <jaxxVersion>2.33-SNAPSHOT</jaxxVersion> + <i18nVersion>3.6.2</i18nVersion> + <swingXVersion>1.6.5-1</swingXVersion> + + <ciViewId>Eugene</ciViewId> <javaVersion>1.7</javaVersion> <signatureArtifactId>java17</signatureArtifactId> <signatureVersion>1.0</signatureVersion> @@ -463,6 +468,75 @@ <scope>runtime</scope> </dependency> + + <dependency> + <groupId>org.nuiton.jaxx</groupId> + <artifactId>jaxx-runtime</artifactId> + <version>${jaxxVersion}</version> + </dependency> + <dependency> + <groupId>org.nuiton.jaxx</groupId> + <artifactId>jaxx-validator</artifactId> + <version>${jaxxVersion}</version> + </dependency> + <dependency> + <groupId>org.nuiton.jaxx</groupId> + <artifactId>jaxx-widgets</artifactId> + <version>${jaxxVersion}</version> + </dependency> + + <dependency> + <groupId>org.nuiton.jaxx</groupId> + <artifactId>jaxx-widgets-select</artifactId> + <version>${jaxxVersion}</version> + </dependency> + <dependency> + <groupId>org.nuiton.jaxx</groupId> + <artifactId>jaxx-widgets-about</artifactId> + <version>${jaxxVersion}</version> + </dependency> + <dependency> + <groupId>org.nuiton.jaxx</groupId> + <artifactId>jaxx-config</artifactId> + <version>${jaxxVersion}</version> + </dependency> + <dependency> + <groupId>org.nuiton.jaxx</groupId> + <artifactId>jaxx-application-api</artifactId> + <version>${jaxxVersion}</version> + </dependency> + <dependency> + <groupId>org.nuiton.jaxx</groupId> + <artifactId>jaxx-application-swing</artifactId> + <version>${jaxxVersion}</version> + </dependency> + + <dependency> + <groupId>org.swinglabs</groupId> + <artifactId>jxlayer</artifactId> + <version>3.0.4</version> + </dependency> + <dependency> + <groupId>org.swinglabs.swingx</groupId> + <artifactId>swingx-core</artifactId> + <version>${swingXVersion}</version> + </dependency> + <dependency> + <groupId>org.swinglabs.swingx</groupId> + <artifactId>swingx-painters</artifactId> + <version>${swingXVersion}</version> + </dependency> + <dependency> + <groupId>org.swinglabs.swingx</groupId> + <artifactId>swingx-common</artifactId> + <version>${swingXVersion}</version> + </dependency> + <dependency> + <groupId>org.swinglabs.swingx</groupId> + <artifactId>swingx-autocomplete</artifactId> + <version>${swingXVersion}</version> + </dependency> + <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> @@ -512,6 +586,17 @@ </configuration> </plugin> + <plugin> + <groupId>org.nuiton.i18n</groupId> + <artifactId>i18n-maven-plugin</artifactId> + <version>${i18nVersion}</version> + </plugin> + <plugin> + <groupId>org.nuiton.jaxx</groupId> + <artifactId>jaxx-maven-plugin</artifactId> + <version>${jaxxVersion}</version> + </plugin> + </plugins> </pluginManagement> <extensions> @@ -567,5 +652,57 @@ </plugins> </build> </profile> + + <profile> + <id>generate-changelog</id> + <activation> + <property> + <name>performRelease</name> + <value>true</value> + </property> + </activation> + + <properties> + + <redmine.xmlPath>${project.build.directory}/changes/changes.xml</redmine.xmlPath> + </properties> + <build> + <defaultGoal>process-classes</defaultGoal> + <plugins> + + <!-- Generate changelog.txt and attach it to project --> + <plugin> + <groupId>org.nuiton.jredmine</groupId> + <artifactId>jredmine-maven-plugin</artifactId> + <executions> + <execution> + <id>generate-changes</id> + <goals> + <goal>generate-changes</goal> + </goals> + <phase>process-classes</phase> + <configuration> + <generateOnce>true</generateOnce> + <actionMapping>fix:1, add:2, update:4</actionMapping> + </configuration> + </execution> + <execution> + <id>generate-changelog</id> + <inherited>false</inherited> + <goals> + <goal>generate-changelog</goal> + </goals> + <phase>process-classes</phase> + <configuration> + <attach>true</attach> + </configuration> + </execution> + </executions> + </plugin> + + </plugins> + </build> + </profile> + </profiles> </project> -- To stop receiving notification emails like this one, please contact nuiton.org SCM administrator <admin+scm@nuiton.org>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/editor in repository eugene. See https://gitlab.nuiton.org/nuiton/eugene.git commit bf4242ecac54b64324f649b56a135fbe8c410c77 Author: Tony CHEMIT <chemit@codelutin.com> Date: Mon Sep 19 13:33:33 2016 +0200 Meilleurs icons --- .../src/main/resources/icons/type-attribute.png | Bin 1536 -> 502 bytes .../src/main/resources/icons/type-class.png | Bin 1523 -> 497 bytes .../src/main/resources/icons/type-enumeration.png | Bin 1512 -> 456 bytes .../src/main/resources/icons/type-interface.png | Bin 1520 -> 479 bytes .../src/main/resources/icons/type-model.png | Bin 1414 -> 142 bytes .../src/main/resources/icons/type-operation.png | Bin 1518 -> 459 bytes .../src/main/resources/icons/type-package.png | Bin 1409 -> 147 bytes 7 files changed, 0 insertions(+), 0 deletions(-) diff --git a/eugene-editor-maven-plugin/src/main/resources/icons/type-attribute.png b/eugene-editor-maven-plugin/src/main/resources/icons/type-attribute.png index 85d50ee..3a06c68 100644 Binary files a/eugene-editor-maven-plugin/src/main/resources/icons/type-attribute.png and b/eugene-editor-maven-plugin/src/main/resources/icons/type-attribute.png differ diff --git a/eugene-editor-maven-plugin/src/main/resources/icons/type-class.png b/eugene-editor-maven-plugin/src/main/resources/icons/type-class.png index b2813ef..98337ca 100644 Binary files a/eugene-editor-maven-plugin/src/main/resources/icons/type-class.png and b/eugene-editor-maven-plugin/src/main/resources/icons/type-class.png differ diff --git a/eugene-editor-maven-plugin/src/main/resources/icons/type-enumeration.png b/eugene-editor-maven-plugin/src/main/resources/icons/type-enumeration.png index d9a937b..4c3395a 100644 Binary files a/eugene-editor-maven-plugin/src/main/resources/icons/type-enumeration.png and b/eugene-editor-maven-plugin/src/main/resources/icons/type-enumeration.png differ diff --git a/eugene-editor-maven-plugin/src/main/resources/icons/type-interface.png b/eugene-editor-maven-plugin/src/main/resources/icons/type-interface.png index bd94fd7..f98b1aa 100644 Binary files a/eugene-editor-maven-plugin/src/main/resources/icons/type-interface.png and b/eugene-editor-maven-plugin/src/main/resources/icons/type-interface.png differ diff --git a/eugene-editor-maven-plugin/src/main/resources/icons/type-model.png b/eugene-editor-maven-plugin/src/main/resources/icons/type-model.png index 36c21a8..c323909 100644 Binary files a/eugene-editor-maven-plugin/src/main/resources/icons/type-model.png and b/eugene-editor-maven-plugin/src/main/resources/icons/type-model.png differ diff --git a/eugene-editor-maven-plugin/src/main/resources/icons/type-operation.png b/eugene-editor-maven-plugin/src/main/resources/icons/type-operation.png index f96248d..b55765f 100644 Binary files a/eugene-editor-maven-plugin/src/main/resources/icons/type-operation.png and b/eugene-editor-maven-plugin/src/main/resources/icons/type-operation.png differ diff --git a/eugene-editor-maven-plugin/src/main/resources/icons/type-package.png b/eugene-editor-maven-plugin/src/main/resources/icons/type-package.png index 9d926e5..d244776 100644 Binary files a/eugene-editor-maven-plugin/src/main/resources/icons/type-package.png and b/eugene-editor-maven-plugin/src/main/resources/icons/type-package.png differ -- To stop receiving notification emails like this one, please contact nuiton.org SCM administrator <admin+scm@nuiton.org>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/editor in repository eugene. See https://gitlab.nuiton.org/nuiton/eugene.git commit 1389d7a4d6976fcb7f2ee440f27310cb0ab1c485 Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Sep 21 08:28:14 2016 +0200 mImprove readme --- eugene-editor-maven-plugin/README.md | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/eugene-editor-maven-plugin/README.md b/eugene-editor-maven-plugin/README.md index d2e50d3..fa7b915 100644 --- a/eugene-editor-maven-plugin/README.md +++ b/eugene-editor-maven-plugin/README.md @@ -1,2 +1,22 @@ -To deploy new version of pom: mvn deploy -To install localy: mvn install +# Abstract + +This plugin aims to edit any objectmodel in a nice GUI. + +# Build + +Classical maven build with no suprise: + +To install localy: + +```mvn install``` + +To deploy new version: + +```mvn deploy``` + +#Try me + +You can try the plugin on an embbeded model: +``` +mvn -Prun-observe-entities +``` \ No newline at end of file -- To stop receiving notification emails like this one, please contact nuiton.org SCM administrator <admin+scm@nuiton.org>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/editor in repository eugene. See https://gitlab.nuiton.org/nuiton/eugene.git commit 8ec595453fbb06245da0502a18d2da7576d8a845 Author: Tony CHEMIT <chemit@codelutin.com> Date: Sat Sep 24 09:49:07 2016 +0200 POC --- .../application/ui/ContentUIInitializer.java | 63 +++++++++++ .../editor/application/ui/ContentUIManager.java | 4 +- .../application/ui/content/AggregationMode.java | 12 +++ .../application/ui/content/AttributeContentUI.jaxx | 22 ++-- .../application/ui/content/AttributeContentUI.jcss | 42 +++++--- .../ui/content/AttributeContentUIHandler.java | 28 ++--- .../application/ui/content/ClassContentUI.jaxx | 8 +- .../application/ui/content/ClassContentUI.jcss | 9 +- .../ui/content/ClassContentUIHandler.java | 40 +++++-- .../editor/application/ui/content/ContentUI.java | 6 ++ .../editor/application/ui/content/ContentUI.jcss | 13 ++- ...{ContenUIHandler.java => ContentUIHandler.java} | 119 +++++++++------------ .../ui/content/EnumerationContentUI.jaxx | 8 +- .../ui/content/EnumerationContentUI.jcss | 6 +- .../ui/content/EnumerationContentUIHandler.java | 13 ++- .../application/ui/content/InterfaceContentUI.jaxx | 2 +- .../application/ui/content/InterfaceContentUI.jcss | 4 +- .../ui/content/InterfaceContentUIHandler.java | 13 ++- .../application/ui/content/ModelContentUI.jcss | 2 +- .../ui/content/ModelContentUIHandler.java | 11 +- .../application/ui/content/Multiplicity.java | 22 +++- .../application/ui/content/OperationContentUI.jaxx | 18 +++- .../application/ui/content/OperationContentUI.jcss | 10 +- .../ui/content/OperationContentUIHandler.java | 8 +- .../application/ui/content/PackageContentUI.jcss | 2 +- .../ui/content/PackageContentUIHandler.java | 11 +- .../editor/application/ui/content/Visibility.java | 33 ++++++ .../actions/AddInterfaceFromClassAction.java | 10 +- .../actions/AddLiteralFromEnumerationAction.java | 32 ------ .../actions/AddSuperClassFromInterfaceAction.java | 4 +- .../ui/content/actions/ContentActionSupport.java | 16 ++- .../CreateAttributeFromAttributeAction.java | 4 +- .../actions/CreateAttributeFromClassAction.java | 4 +- .../CreateAttributeFromInterfaceAction.java | 4 +- .../CreateLiteralFromEnumerationAction.java | 11 ++ .../CreateOperationFromOperationAction.java | 4 +- .../actions/CreatePackageFromModelAction.java | 2 +- .../CreateParameterFromOperationAction.java | 1 + .../DeleteAttributeFromAttributeAction.java | 19 ++-- .../actions/DeleteClassFromClassAction.java | 12 +-- .../DeleteEnumerationFromEnumerationAction.java | 12 +-- .../DeleteInterfaceFromInterfaceAction.java | 12 +-- ...va => DeleteLiteralsFromEnumerationAction.java} | 4 +- .../DeleteOperationFromOperationAction.java | 15 +-- .../actions/DeletePackageFromPackageAction.java | 11 +- ...n.java => RemoveInterfacesFromClassAction.java} | 12 +-- ... => RemoveSuperClassesFromInterfaceAction.java} | 10 +- .../ui/tree/EugeneEditorTreeSelectionModel.java | 12 ++- .../application/ui/tree/node/AttributeNode.java | 98 ++++++++++++++--- .../editor/application/ui/tree/node/ClassNode.java | 55 +++++----- .../ui/tree/node/ClassifierNodeSupport.java | 103 ++++++++++++++++++ .../application/ui/tree/node/EnumerationNode.java | 22 ++-- .../application/ui/tree/node/InterfaceNode.java | 44 +++----- .../editor/application/ui/tree/node/ModelNode.java | 48 ++++++--- .../application/ui/tree/node/NodeSupport.java | 97 +++++++++-------- .../application/ui/tree/node/OperationNode.java | 39 ++++--- .../application/ui/tree/node/PackageNode.java | 10 +- .../eugene-editor-maven-plugin_en_GB.properties | 17 +-- .../eugene-editor-maven-plugin_fr_FR.properties | 19 ++-- .../src/main/resources/icons/action-redo.png | Bin 0 -> 458 bytes .../src/main/resources/icons/action-rollback.png | Bin 0 -> 469 bytes .../src/main/resources/icons/action-undo.png | Bin 0 -> 458 bytes .../src/main/resources/icons/type-attribute2x.png | Bin 0 -> 991 bytes .../src/main/resources/icons/type-class2x.png | Bin 0 -> 991 bytes .../main/resources/icons/type-enumeration2x.png | Bin 0 -> 803 bytes .../src/main/resources/icons/type-field.png | Bin 0 -> 499 bytes .../src/main/resources/icons/type-field2x.png | Bin 0 -> 925 bytes .../src/main/resources/icons/type-interface2x.png | Bin 0 -> 832 bytes .../src/main/resources/icons/type-model2x.png | Bin 0 -> 175 bytes .../src/main/resources/icons/type-operation2x.png | Bin 0 -> 870 bytes .../src/main/resources/icons/type-package2x.png | Bin 0 -> 218 bytes .../src/main/resources/icons/type-value.png | Bin 0 -> 95 bytes .../src/main/resources/icons/type-value2x.png | Bin 0 -> 122 bytes .../src/main/resources/icons/type-variable.png | Bin 0 -> 515 bytes .../src/main/resources/icons/type-variable2x.png | Bin 0 -> 911 bytes .../tree/node/OperationNode-error-validation.xml | 2 +- .../object/xml/ObjectModelAttributeImpl.java | 8 ++ .../object/xml/ObjectModelClassifierImpl.java | 11 ++ pom.xml | 2 +- 79 files changed, 813 insertions(+), 502 deletions(-) diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/ContentUIInitializer.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/ContentUIInitializer.java index e05c029..5364871 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/ContentUIInitializer.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/ContentUIInitializer.java @@ -9,6 +9,7 @@ import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.reflect.ConstructorUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.jdesktop.swingx.JXTitledPanel; import org.nuiton.eugene.editor.application.ui.content.ContentUI; import org.nuiton.jaxx.application.bean.JavaBeanObjectUtil; @@ -16,20 +17,28 @@ import javax.swing.Action; import javax.swing.Icon; import javax.swing.JButton; import javax.swing.JCheckBox; +import javax.swing.JComboBox; import javax.swing.JComponent; import javax.swing.JLabel; +import javax.swing.JRadioButton; import javax.swing.JTextField; +import javax.swing.KeyStroke; import javax.swing.SwingUtilities; +import javax.swing.UIDefaults; +import javax.swing.UIManager; import javax.swing.text.JTextComponent; import java.awt.Component; +import java.awt.Insets; import java.awt.event.FocusAdapter; import java.awt.event.FocusEvent; +import java.awt.event.ItemEvent; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.lang.reflect.InvocationTargetException; import java.util.EnumSet; import java.util.LinkedHashMap; import java.util.Map; +import java.util.Objects; /** * Created on 16/09/16. @@ -47,6 +56,9 @@ public class ContentUIInitializer { this.callbacks = callbacks; } + //TODO Utilisiter ça sur les JXTitledPanel + //UIManager.getInsets("JXTitledPanel.captionInsets") + public static <U extends ContentUI> ContentUIInitializer newInitializer() { return ContentUIInitializer.<U>builder() @@ -75,6 +87,15 @@ public class ContentUIInitializer { action.putValue(Action.SHORT_DESCRIPTION, tip); } action.setEnabled(editor.isEnabled()); + String accelerator = (String) editor.getClientProperty("accelerator"); + if (accelerator != null) { + + KeyStroke keyStroke = KeyStroke.getKeyStroke(accelerator); + Objects.requireNonNull(keyStroke, "cant find keystroke for accelerator: " + accelerator); + action.putValue(Action.ACCELERATOR_KEY, keyStroke); + action.putValue(Action.ACTION_COMMAND_KEY, action.getClass().getName()); + + } editor.setAction(action); } catch (ClassNotFoundException e) { // no action foud @@ -90,6 +111,19 @@ public class ContentUIInitializer { } editor.init(); }) + .addCallback(JXTitledPanel.class, (ui, editor) -> { + if (log.isDebugEnabled()) { + log.debug("init jx title panel" + editor.getName()); + } + UIDefaults defaults = UIManager.getLookAndFeelDefaults(); + defaults.put("JXTitledPanel.captionInsets", new Insets(5, 5, 5, 5)); + + editor.putClientProperty("Nimbus.Overrides.InheritDefaults", true); + editor.putClientProperty("Nimbus.Overrides", defaults); + + SwingUtilities.updateComponentTreeUI(editor); + + }) .addCallback(JLabel.class, (ui, editor) -> { String name = editor.getName(); if (name != null && name.endsWith("Label")) { @@ -122,6 +156,35 @@ public class ContentUIInitializer { } }) + .addCallback(JComboBox.class, (ui, editor) -> { + + String propertyName = (String) editor.getClientProperty(CLIENT_PROPERTY_PROPERTY_NAME); + if (propertyName != null) { + editor.addItemListener( + e -> { + if (e.getStateChange() == ItemEvent.SELECTED) { + JComboBox source = (JComboBox) e.getSource(); + JavaBeanObjectUtil.setProperty(ui.getModel(), propertyName, source.getSelectedItem()); + } + }); + } + + }) + .addCallback(JRadioButton.class, (ui, editor) -> { + + String propertyName = (String) editor.getClientProperty(CLIENT_PROPERTY_PROPERTY_NAME); + if (propertyName != null) { + editor.addItemListener( + e -> { + if (e.getStateChange() == ItemEvent.SELECTED) { + JRadioButton source = (JRadioButton) e.getSource(); + Object selectedValue = source.getClientProperty("$value"); + JavaBeanObjectUtil.setProperty(ui.getModel(), propertyName, selectedValue); + } + }); + } + + }) .addCallback(JCheckBox.class, (ui, editor) -> { if (log.isDebugEnabled()) { log.debug("init simple boolean editor " + editor.getName()); diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/ContentUIManager.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/ContentUIManager.java index 885ece1..7089661 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/ContentUIManager.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/ContentUIManager.java @@ -16,6 +16,8 @@ import org.nuiton.eugene.editor.application.ui.tree.node.ModelNode; import org.nuiton.eugene.editor.application.ui.tree.node.NodeSupport; import org.nuiton.eugene.editor.application.ui.tree.node.OperationNode; import org.nuiton.eugene.editor.application.ui.tree.node.PackageNode; +import org.nuiton.eugene.models.stereotype.StereotypeAble; +import org.nuiton.eugene.models.tagvalue.TagValueAble; import java.util.Collections; import java.util.Map; @@ -48,7 +50,7 @@ public class ContentUIManager { } - public <M, N extends NodeSupport<M>> ContentUI<N> getContent(N node) { + public <M extends StereotypeAble & TagValueAble, N extends NodeSupport<M>> ContentUI<N> getContent(N node) { Objects.requireNonNull(node); return contents.get(node.getClass().getName()); } diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/AggregationMode.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/AggregationMode.java new file mode 100644 index 0000000..08eedb5 --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/AggregationMode.java @@ -0,0 +1,12 @@ +package org.nuiton.eugene.editor.application.ui.content; + +/** + * Created on 21/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public enum AggregationMode { + NONE, + AGGREGATE, + COMPOSE +} diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/AttributeContentUI.jaxx b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/AttributeContentUI.jaxx index b898689..ca9353c 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/AttributeContentUI.jaxx +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/AttributeContentUI.jaxx @@ -3,7 +3,9 @@ <style source="ContentUI.jcss"/> <import> + org.nuiton.eugene.editor.application.ui.content.AggregationMode org.nuiton.eugene.editor.application.ui.content.Multiplicity + org.nuiton.eugene.editor.application.ui.content.Visibility org.nuiton.eugene.editor.application.ui.tree.node.AttributeNode </import> <script><![CDATA[ @@ -31,7 +33,7 @@ public void close() { handler.close(); } <JLabel id="attributeNameLabel"/> </cell> <cell weightx="1"> - <JTextField id="attributeName" onKeyReleased="model.setName(attributeName.getText())"/> + <JTextField id="attributeName"/> </cell> </row> <row> @@ -39,7 +41,7 @@ public void close() { handler.close(); } <JLabel id="attributeTypeLabel"/> </cell> <cell> - <JComboBox id="attributeType" genericType="String" onActionPerformed="model.setType((String)attributeType.getSelectedItem())"/> + <JComboBox id="attributeType" genericType="String"/> </cell> </row> <row> @@ -53,10 +55,10 @@ public void close() { handler.close(); } <row> <cell columns="3"> <JPanel id="visibility"> - <JRadioButton id="visibilityPublic" value="public" styleClass="visibilityMode"/> - <JRadioButton id="visibilityPackage" value="" styleClass="visibilityMode"/> - <JRadioButton id="visibilityProtected" value="protected" styleClass="visibilityMode"/> - <JRadioButton id="visibilityPrivate" value="private" styleClass="visibilityMode"/> + <JRadioButton id="visibilityPublic" value="{Visibility.PUBLIC}" styleClass="visibilityMode"/> + <JRadioButton id="visibilityPackage" value="{Visibility.PACKAGE}" styleClass="visibilityMode"/> + <JRadioButton id="visibilityProtected" value="{Visibility.PROTECTED}" styleClass="visibilityMode"/> + <JRadioButton id="visibilityPrivate" value="{Visibility.PRIVATE}" styleClass="visibilityMode"/> </JPanel> </cell> </row> @@ -69,9 +71,11 @@ public void close() { handler.close(); } </cell> <cell> <JPanel id="aggregation"> - <JRadioButton id="aggregationAggregate" value="aggregate" styleClass="aggregationMode"/> - <JRadioButton id="aggregationCompose" value="compose" styleClass="aggregationMode"/> - <JRadioButton id="aggregationNone" value="none" styleClass="aggregationMode"/> + <JRadioButton id="aggregationAggregate" value="{AggregationMode.AGGREGATE}" + styleClass="aggregationMode"/> + <JRadioButton id="aggregationCompose" value="{AggregationMode.COMPOSE}" styleClass="aggregationMode"/> + <JRadioButton id="aggregationNone" value="{AggregationMode.NONE}" styleClass="aggregationMode"/> + <JSeparator constructorParams="JSeparator.VERTICAL"/> <JCheckBox id="bidi" constraints="BorderLayout.EAST"/> </JPanel> </cell> diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/AttributeContentUI.jcss b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/AttributeContentUI.jcss index d521a84..7d05087 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/AttributeContentUI.jcss +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/AttributeContentUI.jcss @@ -8,7 +8,7 @@ } #attributeName { - text:{getModel().getUserObject().getName()}; + text:{getModel().getName()}; _property:{"name"}; } @@ -17,7 +17,7 @@ } #attributeDefaultValue { - text:{getModel().getUserObject().getDefaultValue()}; + text:{getModel().getDefaultValue()}; _property:{"defaultValue"}; } @@ -26,7 +26,7 @@ } #attributeType { - selectedItem:{getModel().getUserObject().getType()}; + selectedItem:{getModel().getType()}; _property:{"type"}; } @@ -40,30 +40,42 @@ actionIcon:delete; } +#multiplicity { + selectedItem:{getModel().getMultiplicity()}; + _property:{"multiplicity"}; +} + +#aggregation { + border: {new javax.swing.border.TitledBorder(t("eugene.editor.aggregation"))}; + layout: {new GridLayout(1, 0)}; +} + +.aggregationMode { + buttonGroup:"aggregationMode"; + _property:{"aggregationMode"}; +} + +#aggregationMode { + selectedValue: {getModel().getAggregationMode()}; +} + #aggregationAggregate { text:"eugene.editor.aggregation.aggregate"; - selected:{"aggregate".equals(aggregationMode.getSelectedValue())}; + selected:{AggregationMode.AGGREGATE.equals(aggregationMode.getSelectedValue())}; } #aggregationCompose { text:"eugene.editor.aggregation.compose"; - selected:{"compose".equals(aggregationMode.getSelectedValue())}; + selected:{AggregationMode.COMPOSE.equals(aggregationMode.getSelectedValue())}; } #aggregationNone { text:"eugene.editor.aggregation.none"; - selected:{"none".equals(aggregationMode.getSelectedValue())}; -} - -#aggregation { - border: {new javax.swing.border.TitledBorder(t("eugene.editor.aggregation"))}; - layout: {new GridLayout(1, 0)}; -} - -.aggregationMode { - buttonGroup:"aggregationMode"; + selected:{AggregationMode.NONE.equals(aggregationMode.getSelectedValue())}; } #bidi { text:"eugene.editor.bidi"; + selected:{getModel().isBidi()}; + _property:{"bidi"}; } diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/AttributeContentUIHandler.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/AttributeContentUIHandler.java index 9571351..646e375 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/AttributeContentUIHandler.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/AttributeContentUIHandler.java @@ -4,7 +4,7 @@ import jaxx.runtime.SwingUtil; import org.nuiton.eugene.editor.application.ModelExtensionHelper; import org.nuiton.eugene.editor.application.ModelHelper; import org.nuiton.eugene.editor.application.ui.tree.node.AttributeNode; -import org.nuiton.eugene.models.object.ObjectModelAttribute; +import org.nuiton.eugene.models.object.xml.ObjectModelAttributeImpl; import java.util.ArrayList; import java.util.Arrays; @@ -16,7 +16,7 @@ import java.util.List; * * @author Tony Chemit - chemit@codelutin.com */ -public class AttributeContentUIHandler extends ContenUIHandler<AttributeNode, AttributeContentUI> { +public class AttributeContentUIHandler extends ContentUIHandler<ObjectModelAttributeImpl, AttributeNode, AttributeContentUI> { @Override public void beforeInit(AttributeContentUI ui) { @@ -34,36 +34,26 @@ public class AttributeContentUIHandler extends ContenUIHandler<AttributeNode, At @Override protected void open(AttributeContentUI ui, AttributeNode node) { - ObjectModelAttribute data = node.getUserObject(); + super.open(ui, node); - open(ui, node, data.getStereotypes(), data.getTagValues()); - ui.getVisibilityMode().setSelectedValue(data.getVisibility()); +// ui.getVisibilityMode().setSelectedValue(node.getVisibility()); ModelHelper modelHelper = getApplicationContext(ui).getModelHelper(); List<String> allClasses = new ArrayList<>(modelHelper.getAllClassesWithJava()); Collections.sort(allClasses); allClasses.add(0, null); - SwingUtil.fillComboBox(ui.getAttributeType(), allClasses, data.getType()); + SwingUtil.fillComboBox(ui.getAttributeType(), allClasses, node.getType()); List<Multiplicity> multiplicities = Arrays.asList(Multiplicity.values()); - SwingUtil.fillComboBox(ui.getMultiplicity(), multiplicities, Multiplicity.valueOf(data.getMinMultiplicity(), data.getMaxMultiplicity())); + SwingUtil.fillComboBox(ui.getMultiplicity(), multiplicities, node.getMultiplicity()); - ui.getAggregationMode().setSelectedValue("none"); - if (data.isAggregate()) { +// ui.getAggregationMode().setSelectedValue(node.getAggregationMode()); - ui.getAggregationMode().setSelectedValue("aggregate"); - } - if (data.isComposite()) { - ui.getAggregationMode().setSelectedValue("compose"); - } +// ui.getBidi().setSelected(node.isBidi()); - ObjectModelAttribute reverseAttribute = data.getReverseAttribute(); - - ui.getBidi().setSelected(reverseAttribute != null && reverseAttribute.isNavigable()); - - ui.getAttributeDefaultValue().setText(data.getDefaultValue()); + ui.getAttributeDefaultValue().setText(node.getDefaultValue()); } } diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ClassContentUI.jaxx b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ClassContentUI.jaxx index 3317648..688992c 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ClassContentUI.jaxx +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ClassContentUI.jaxx @@ -1,4 +1,5 @@ -<org.jdesktop.swingx.JXTitledPanel id="classMainContent" implements="ContentUI<ClassNode>" styleClass="top"> +<org.jdesktop.swingx.JXTitledPanel id="classMainContent" implements="ContentUI<ClassNode>" styleClass="top" + onKeyPressed="log.info(event)"> <style source="ContentUI.jcss"/> <import> @@ -36,7 +37,8 @@ public void close() { handler.close(); } <JLabel id="superClassLabel"/> </cell> <cell weightx="1"> - <JComboBox id="superClass" genericType="String"/> + <JComboBox id="superClass" genericType="String" + onItemStateChanged="if( event.getStateChange() == ItemEvent.SELECTED) { model.setSuperClass((String)superClass.getSelectedItem()); }"/> </cell> </row> <row> @@ -49,7 +51,7 @@ public void close() { handler.close(); } onItemStateChanged="addInterfaceFromClass.setEnabled(event.getStateChange() == ItemEvent.SELECTED)"/> <JToolBar id="interfacesHeaderActions" constraints="BorderLayout.EAST"> <JButton id="addInterfaceFromClass"/> - <JButton id="removeInterfaceFromClass"/> + <JButton id="removeInterfacesFromClass"/> </JToolBar> </JPanel> </JScrollPane> diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ClassContentUI.jcss b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ClassContentUI.jcss index 23a071c..dfd4433 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ClassContentUI.jcss +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ClassContentUI.jcss @@ -1,5 +1,4 @@ - #classMainContent { title:"eugene.editor.class"; } @@ -13,7 +12,7 @@ } #className { - text:{getModel().getUserObject().getName()}; + text:{getModel().getName()}; _property:{"name"}; } @@ -41,12 +40,16 @@ text:"eugene.editor.add.interface"; actionIcon:add; enabled:false; + _accelerator:{"ctrl INSERT"}; + _acceleratorComponent:{generalPane.getContentPane()}; } -#removeInterfaceFromClass { +#removeInterfacesFromClass { text:"eugene.editor.delete.interface"; actionIcon:delete; enabled:false; + _accelerator:{"ctrl DELETE"}; + _acceleratorComponent:{generalPane.getContentPane()}; } #interfaces { diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ClassContentUIHandler.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ClassContentUIHandler.java index f4792bd..bfa4399 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ClassContentUIHandler.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ClassContentUIHandler.java @@ -4,19 +4,25 @@ import jaxx.runtime.SwingUtil; import org.nuiton.eugene.editor.application.ModelExtensionHelper; import org.nuiton.eugene.editor.application.ModelHelper; import org.nuiton.eugene.editor.application.ui.tree.node.ClassNode; -import org.nuiton.eugene.models.object.ObjectModelClass; +import org.nuiton.eugene.models.object.xml.ObjectModelClassImpl; +import javax.swing.Action; +import javax.swing.JButton; +import javax.swing.JComponent; +import javax.swing.JRootPane; +import javax.swing.KeyStroke; import javax.swing.ListSelectionModel; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.Objects; /** * Created on 16/09/16. * * @author Tony Chemit - chemit@codelutin.com */ -public class ClassContentUIHandler extends ContenUIHandler<ClassNode, ClassContentUI> { +public class ClassContentUIHandler extends ContentUIHandler<ObjectModelClassImpl, ClassNode, ClassContentUI> { @Override public void beforeInit(ClassContentUI ui) { @@ -29,15 +35,14 @@ public class ClassContentUIHandler extends ContenUIHandler<ClassNode, ClassConte ModelExtensionHelper helper = getApplicationContext(ui).getModelExtensionHelper(); afterInit(ui, helper.getClassTagValues(), helper.getClassStereotypes()); - ui.getInterfaces().getSelectionModel().addListSelectionListener(e -> ui.getRemoveInterfaceFromClass().setEnabled(!((ListSelectionModel) e.getSource()).isSelectionEmpty())); + ui.getInterfaces().getSelectionModel().addListSelectionListener(e -> ui.getRemoveInterfacesFromClass().setEnabled(!((ListSelectionModel) e.getSource()).isSelectionEmpty())); } @Override protected void open(ClassContentUI ui, ClassNode node) { - ObjectModelClass data = node.getUserObject(); - open(ui, node, data.getStereotypes(), data.getTagValues()); + super.open(ui, node); ModelHelper modelHelper = getApplicationContext(ui).getModelHelper(); List<String> allClasses = new ArrayList<>(modelHelper.getAllClasses()); @@ -48,13 +53,36 @@ public class ClassContentUIHandler extends ContenUIHandler<ClassNode, ClassConte SwingUtil.fillComboBox(ui.getSuperClass(), allClasses, superClass); - addInterfaces(ui, data.getInterfaces(), ui.getInterfaces(), allClasses); + addInterfaces(ui, node.getInterfaces(), ui.getInterfaces(), allClasses); //TODO Supprimer toutes les classes qui héritent de celle ci allClasses.remove(superClass); SwingUtil.fillComboBox(ui.getInterfacesHeaderType(), allClasses, null); ui.getInterfacesHeaderType().setSelectedItem(null); + registerAction(ui, ui.getAddInterfaceFromClass()); + registerAction(ui, ui.getRemoveInterfacesFromClass()); + + } + + protected void registerAction(ClassContentUI ui, JButton editor) { + + JRootPane rootPane = ui.getRootPane(); + Objects.requireNonNull(rootPane); + + Action action = editor.getAction(); + Objects.requireNonNull(action); + + KeyStroke keyStroke = (KeyStroke) action.getValue(Action.ACCELERATOR_KEY); + Objects.requireNonNull(keyStroke); + + String actionKey = (String) action.getValue(Action.ACTION_COMMAND_KEY); + Objects.requireNonNull(actionKey); + + rootPane.getActionMap().put(actionKey, action); + rootPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(keyStroke, actionKey); + } + } diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ContentUI.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ContentUI.java index 29737dd..aaa3295 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ContentUI.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ContentUI.java @@ -3,6 +3,8 @@ package org.nuiton.eugene.editor.application.ui.content; import jaxx.runtime.JAXXObject; import org.nuiton.eugene.editor.application.ui.tree.node.NodeSupport; +import javax.swing.ActionMap; +import javax.swing.InputMap; import javax.swing.JComponent; import javax.swing.JPanel; @@ -26,4 +28,8 @@ public interface ContentUI<M extends NodeSupport> extends JAXXObject { JPanel getTagValues(); void close(); + + ActionMap getActionMap(); + + InputMap getInputMap(int condition); } diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ContentUI.jcss b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ContentUI.jcss index 162b820..8387121 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ContentUI.jcss +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ContentUI.jcss @@ -28,28 +28,33 @@ layout: {new GridLayout(1, 0)}; } +#visibilityMode { + selectedValue: {getModel().getVisibility()}; +} + .visibilityMode { buttonGroup:"visibilityMode"; + _property: {"visibility"}; } #visibilityPublic { text:"eugene.editor.visibility.public"; - selected:{"public".equals(getModel().getUserObject().getVisibility())}; + selected:{Visibility.PUBLIC.equals(getModel().getVisibility())}; } #visibilityPackage { text:"eugene.editor.visibility.package"; - selected:{"".equals(getModel().getUserObject().getVisibility())}; + selected:{Visibility.PACKAGE.equals(getModel().getVisibility())}; } #visibilityProtected { text:"eugene.editor.visibility.protected"; - selected:{"protected".equals(getModel().getUserObject().getVisibility())}; + selected:{Visibility.PROTECTED.equals(getModel().getVisibility())}; } #visibilityPrivate { text:"eugene.editor.visibility.private"; - selected:{"private".equals(getModel().getUserObject().getVisibility())}; + selected:{Visibility.PRIVATE.equals(getModel().getVisibility())}; } #noInterface { diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ContenUIHandler.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ContentUIHandler.java similarity index 80% rename from eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ContenUIHandler.java rename to eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ContentUIHandler.java index d4ba542..a7db6d9 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ContenUIHandler.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ContentUIHandler.java @@ -4,8 +4,9 @@ import jaxx.runtime.SwingUtil; import jaxx.runtime.spi.UIHandler; import org.nuiton.eugene.editor.application.EugeneEditorApplicationContext; import org.nuiton.eugene.editor.application.ui.tree.node.NodeSupport; -import org.nuiton.eugene.models.object.ObjectModelInterface; +import org.nuiton.eugene.models.stereotype.StereotypeAble; import org.nuiton.eugene.models.stereotype.StereotypeDefinition; +import org.nuiton.eugene.models.tagvalue.TagValueAble; import org.nuiton.eugene.models.tagvalue.TagValueDefinition; import javax.swing.JCheckBox; @@ -15,71 +16,20 @@ import javax.swing.JPanel; import javax.swing.JTextField; import java.awt.GridLayout; import java.util.Collection; -import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Set; -import java.util.stream.Collectors; /** * Created on 16/09/16. * * @author Tony Chemit - chemit@codelutin.com */ -public abstract class ContenUIHandler<M extends NodeSupport, U extends ContentUI<M>> implements UIHandler<U> { +public abstract class ContentUIHandler<X extends StereotypeAble & TagValueAble, M extends NodeSupport<X>, U extends ContentUI<M>> implements UIHandler<U> { - protected abstract void open(U ui, M data); - - protected void close() { - - } - - protected void afterInit(U ui, - Map<String, TagValueDefinition> availableTagValues, - Map<String, StereotypeDefinition> availableStereotypes) { - - Map<String, Object> $objectMap = ui.get$objectMap(); - if (!availableStereotypes.isEmpty()) { - - JPanel stereotypes = ui.getStereotypes(); - stereotypes.putClientProperty("stereotypes", availableStereotypes); - stereotypes.setLayout(new GridLayout(1, 0)); - stereotypes.removeAll(); - for (Map.Entry<String, StereotypeDefinition> entry : availableStereotypes.entrySet()) { - String stereotype = entry.getKey(); - JCheckBox b = new JCheckBox(); - b.setText(stereotype); - b.setToolTipText(entry.getValue().documentation()); - stereotypes.add(b); - $objectMap.put("stereotype-" + stereotype, b); - } - } - - if (!availableTagValues.isEmpty()) { - - JPanel tagValues = ui.getTagValues(); - tagValues.putClientProperty("tagValues", availableTagValues); - tagValues.setLayout(new GridLayout(0, 2)); - tagValues.removeAll(); - - for (Map.Entry<String, TagValueDefinition> entry : availableTagValues.entrySet()) { - - JTextField field = new JTextField(); - - String tagValue = entry.getKey(); - JLabel label = new JLabel(tagValue); - $objectMap.put("tagValue-" + tagValue, field); - label.setToolTipText(entry.getValue().documentation()); - label.setLabelFor(field); - - tagValues.add(label); - tagValues.add(field); - } - } - - } - - protected void open(U ui, M model, Set<String> stereotypes, Map<String, String> tagValues) { + protected void open(U ui, M model) { + Set<String> stereotypes = model.getStereotypes(); + Map<String, String> tagValues = model.getTagValues(); ui.setModel(model); @@ -127,24 +77,61 @@ public abstract class ContenUIHandler<M extends NodeSupport, U extends ContentUI objectById.setText(entry.getValue()); } } + } + + protected void close() { } - protected void addInterfaces(U ui, Collection<ObjectModelInterface> interfaces, JList interfacesPanel, List<String> allClasses) { + protected void afterInit(U ui, + Map<String, TagValueDefinition> availableTagValues, + Map<String, StereotypeDefinition> availableStereotypes) { - List<String> interfaceNames; + Map<String, Object> $objectMap = ui.get$objectMap(); + if (!availableStereotypes.isEmpty()) { - if (interfaces.isEmpty()) { - interfaceNames = Collections.emptyList(); - } else { + JPanel stereotypes = ui.getStereotypes(); + stereotypes.putClientProperty("stereotypes", availableStereotypes); + stereotypes.setLayout(new GridLayout(1, 0)); + stereotypes.removeAll(); + for (Map.Entry<String, StereotypeDefinition> entry : availableStereotypes.entrySet()) { + String stereotype = entry.getKey(); + JCheckBox b = new JCheckBox(); + b.setText(stereotype); + b.setToolTipText(entry.getValue().documentation()); + stereotypes.add(b); + $objectMap.put("stereotype-" + stereotype, b); + } + } - interfaceNames = interfaces.stream().map(ObjectModelInterface::getQualifiedName).collect(Collectors.toList()); - Collections.sort(interfaceNames); - interfaceNames.add(0, null); - allClasses.removeAll(interfaceNames); + if (!availableTagValues.isEmpty()) { + + JPanel tagValues = ui.getTagValues(); + tagValues.putClientProperty("tagValues", availableTagValues); + tagValues.setLayout(new GridLayout(0, 2)); + tagValues.removeAll(); + + for (Map.Entry<String, TagValueDefinition> entry : availableTagValues.entrySet()) { + + JTextField field = new JTextField(); + + String tagValue = entry.getKey(); + JLabel label = new JLabel(tagValue); + $objectMap.put("tagValue-" + tagValue, field); + label.setToolTipText(entry.getValue().documentation()); + label.setLabelFor(field); + + tagValues.add(label); + tagValues.add(field); + } } - SwingUtil.fillList(interfacesPanel, interfaceNames, null); + } + + protected void addInterfaces(U ui, Collection<String> interfaces, JList interfacesPanel, List<String> allClasses) { + + allClasses.removeAll(interfaces); + SwingUtil.fillList(interfacesPanel, interfaces, null); } diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/EnumerationContentUI.jaxx b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/EnumerationContentUI.jaxx index a045def..3e8f19e 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/EnumerationContentUI.jaxx +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/EnumerationContentUI.jaxx @@ -34,11 +34,11 @@ public void close() { handler.close(); } <JScrollPane id="literalsScrollPane" columnHeaderView="{literalsHeader}"> <JList id="literals" genericType="String"/> <JPanel id="literalsHeader" layout="{new BorderLayout()}"> - <JTextField id="literalsHeaderName" constraints="BorderLayout.WEST" - onKeyReleased="addLiteralFromEnumeration.setEnabled(!literalsHeaderName.getText().trim().isEmpty())"/> + <JTextField id="literalsHeaderName" constraints="BorderLayout.CENTER" + onKeyReleased="createLiteralFromEnumeration.setEnabled(!literalsHeaderName.getText().trim().isEmpty())"/> <JToolBar id="literalsHeaderActions" constraints="BorderLayout.EAST"> - <JButton id="addLiteralFromEnumeration"/> - <JButton id="removeLiteralFromEnumeration"/> + <JButton id="createLiteralFromEnumeration"/> + <JButton id="deleteLiteralsFromEnumeration"/> </JToolBar> </JPanel> </JScrollPane> diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/EnumerationContentUI.jcss b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/EnumerationContentUI.jcss index f0a9e13..2d7a82a 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/EnumerationContentUI.jcss +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/EnumerationContentUI.jcss @@ -9,7 +9,7 @@ } #enumerationName { - text:{getModel().getUserObject().getName()}; + text:{getModel().getName()}; _property:{"name"}; } @@ -23,13 +23,13 @@ actionIcon:delete; } -#addLiteralFromEnumeration { +#createLiteralFromEnumeration { text:"eugene.editor.add.literal"; actionIcon:add; enabled:false; } -#removeLiteralFromEnumeration { +#deleteLiteralsFromEnumeration { text:"eugene.editor.delete.literal"; actionIcon:delete; enabled:false; diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/EnumerationContentUIHandler.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/EnumerationContentUIHandler.java index a89461b..388e162 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/EnumerationContentUIHandler.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/EnumerationContentUIHandler.java @@ -2,7 +2,7 @@ package org.nuiton.eugene.editor.application.ui.content; import org.nuiton.eugene.editor.application.ModelExtensionHelper; import org.nuiton.eugene.editor.application.ui.tree.node.EnumerationNode; -import org.nuiton.eugene.models.object.ObjectModelEnumeration; +import org.nuiton.eugene.models.object.xml.ObjectModelEnumerationImpl; import javax.swing.DefaultListModel; import javax.swing.ListSelectionModel; @@ -12,7 +12,7 @@ import javax.swing.ListSelectionModel; * * @author Tony Chemit - chemit@codelutin.com */ -public class EnumerationContentUIHandler extends ContenUIHandler<EnumerationNode, EnumerationContentUI> { +public class EnumerationContentUIHandler extends ContentUIHandler<ObjectModelEnumerationImpl, EnumerationNode, EnumerationContentUI> { @Override public void beforeInit(EnumerationContentUI ui) { @@ -25,20 +25,19 @@ public class EnumerationContentUIHandler extends ContenUIHandler<EnumerationNode ModelExtensionHelper helper = getApplicationContext(ui).getModelExtensionHelper(); afterInit(ui, helper.getEnumerationTagValues(), helper.getEnumerationStereotypes()); ui.getLiterals().setModel(new DefaultListModel<>()); - ui.getLiterals().getSelectionModel().addListSelectionListener(e -> ui.getRemoveLiteralFromEnumeration().setEnabled(!((ListSelectionModel) e.getSource()).isSelectionEmpty())); - //ui.getLiteralsHeaderName().addPropertyChangeListener( e -> ui.getAddLiteralFromEnumeration().setEnabled(!Strings.isNullOrEmpty(((JTextField) e.getSource()).getText()))); + ui.getLiterals().getSelectionModel().addListSelectionListener(e -> ui.getDeleteLiteralsFromEnumeration().setEnabled(!((ListSelectionModel) e.getSource()).isSelectionEmpty())); } @Override protected void open(EnumerationContentUI ui, EnumerationNode node) { - ObjectModelEnumeration data = node.getUserObject(); - open(ui, node, data.getStereotypes(), data.getTagValues()); + + super.open(ui, node); DefaultListModel<String> listModel = (DefaultListModel<String>) ui.getLiterals().getModel(); listModel.clear(); - data.getLiterals().forEach(listModel::addElement); + node.getLiterals().forEach(listModel::addElement); } diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/InterfaceContentUI.jaxx b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/InterfaceContentUI.jaxx index 4f229c9..f72ea9f 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/InterfaceContentUI.jaxx +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/InterfaceContentUI.jaxx @@ -42,7 +42,7 @@ public void close() { handler.close(); } onItemStateChanged="addSuperClassFromInterface.setEnabled(event.getStateChange() == ItemEvent.SELECTED)"/> <JToolBar id="superClassesHeaderActions" constraints="BorderLayout.EAST"> <JButton id="addSuperClassFromInterface"/> - <JButton id="removeSuperClassFromInterface"/> + <JButton id="removeSuperClassesFromInterface"/> </JToolBar> </JPanel> </JScrollPane> diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/InterfaceContentUI.jcss b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/InterfaceContentUI.jcss index 407dbf8..7c13f4a 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/InterfaceContentUI.jcss +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/InterfaceContentUI.jcss @@ -9,7 +9,7 @@ } #interfaceName { - text:{getModel().getUserObject().getName()}; + text:{getModel().getName()}; _property:{"name"}; } @@ -39,7 +39,7 @@ enabled:false; } -#removeSuperClassFromInterface { +#removeSuperClassesFromInterface { text:"eugene.editor.delete.superClass"; actionIcon:delete; enabled:false; diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/InterfaceContentUIHandler.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/InterfaceContentUIHandler.java index 0c0d914..f2d6fd5 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/InterfaceContentUIHandler.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/InterfaceContentUIHandler.java @@ -4,7 +4,7 @@ import jaxx.runtime.SwingUtil; import org.nuiton.eugene.editor.application.ModelExtensionHelper; import org.nuiton.eugene.editor.application.ModelHelper; import org.nuiton.eugene.editor.application.ui.tree.node.InterfaceNode; -import org.nuiton.eugene.models.object.ObjectModelInterface; +import org.nuiton.eugene.models.object.xml.ObjectModelInterfaceImpl; import javax.swing.ListSelectionModel; import java.util.ArrayList; @@ -16,7 +16,7 @@ import java.util.List; * * @author Tony Chemit - chemit@codelutin.com */ -public class InterfaceContentUIHandler extends ContenUIHandler<InterfaceNode, InterfaceContentUI> { +public class InterfaceContentUIHandler extends ContentUIHandler<ObjectModelInterfaceImpl, InterfaceNode, InterfaceContentUI> { @Override public void beforeInit(InterfaceContentUI ui) { @@ -28,21 +28,20 @@ public class InterfaceContentUIHandler extends ContenUIHandler<InterfaceNode, In ModelExtensionHelper helper = getApplicationContext(ui).getModelExtensionHelper(); afterInit(ui, helper.getInterfaceTagValues(), helper.getInterfaceStereotypes()); -// ui.getSuperClasses().setModel(new DefaultListModel<>()); - ui.getSuperClasses().getSelectionModel().addListSelectionListener(e -> ui.getRemoveSuperClassFromInterface().setEnabled(!((ListSelectionModel) e.getSource()).isSelectionEmpty())); + ui.getSuperClasses().getSelectionModel().addListSelectionListener(e -> ui.getRemoveSuperClassesFromInterface().setEnabled(!((ListSelectionModel) e.getSource()).isSelectionEmpty())); } @Override protected void open(InterfaceContentUI ui, InterfaceNode node) { - ObjectModelInterface data = node.getUserObject(); - open(ui, node, data.getStereotypes(), data.getTagValues()); + + super.open(ui, node); ModelHelper modelHelper = getApplicationContext(ui).getModelHelper(); List<String> allInterfaces = new ArrayList<>(modelHelper.getAllInterfaces()); - addInterfaces(ui, data.getInterfaces(), ui.getSuperClasses(), allInterfaces); + addInterfaces(ui, node.getSuperClasses(), ui.getSuperClasses(), allInterfaces); //TODO Supprimer toutes les interfaces qui héritent de celle ci Collections.sort(allInterfaces); diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ModelContentUI.jcss b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ModelContentUI.jcss index 660a226..d0edf59 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ModelContentUI.jcss +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ModelContentUI.jcss @@ -9,7 +9,7 @@ } #modelName { - text:{getModel().getUserObject().getName()}; + text:{getModel().getName()}; _property:{"name"}; } diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ModelContentUIHandler.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ModelContentUIHandler.java index b884171..70b63dd 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ModelContentUIHandler.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ModelContentUIHandler.java @@ -2,14 +2,14 @@ package org.nuiton.eugene.editor.application.ui.content; import org.nuiton.eugene.editor.application.ModelExtensionHelper; import org.nuiton.eugene.editor.application.ui.tree.node.ModelNode; -import org.nuiton.eugene.models.object.ObjectModel; +import org.nuiton.eugene.models.object.xml.ObjectModelImpl; /** * Created on 16/09/16. * * @author Tony Chemit - chemit@codelutin.com */ -public class ModelContentUIHandler extends ContenUIHandler<ModelNode, ModelContentUI> { +public class ModelContentUIHandler extends ContentUIHandler<ObjectModelImpl, ModelNode, ModelContentUI> { @Override public void beforeInit(ModelContentUI ui) { @@ -24,11 +24,4 @@ public class ModelContentUIHandler extends ContenUIHandler<ModelNode, ModelConte } - @Override - protected void open(ModelContentUI ui, ModelNode node) { - - ObjectModel data = node.getUserObject(); - open(ui, node, data.getStereotypes(), data.getTagValues()); - - } } diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/Multiplicity.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/Multiplicity.java index 1466188..03fcec5 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/Multiplicity.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/Multiplicity.java @@ -24,11 +24,6 @@ public enum Multiplicity { this.text = text; } - @Override - public String toString() { - return text; - } - public static Multiplicity valueOf(int min, int max) { for (Multiplicity multiplicity : values()) { if (min == multiplicity.min && max == multiplicity.max) { @@ -37,4 +32,21 @@ public enum Multiplicity { } return null; } + + public boolean isMultiple() { + return max == -1; + } + + public int getMin() { + return min; + } + + public int getMax() { + return max; + } + + @Override + public String toString() { + return text; + } } diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/OperationContentUI.jaxx b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/OperationContentUI.jaxx index c53f7e6..1a4c87c 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/OperationContentUI.jaxx +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/OperationContentUI.jaxx @@ -34,19 +34,27 @@ public void close() { handler.close(); } <JLabel id="operationReturnTypeLabel"/> </cell> <cell> - <JComboBox id="operationReturnType" genericType="String" onActionPerformed="model.setReturnType((String)operationReturnType.getSelectedItem())"/> + <JComboBox id="operationReturnType" genericType="String" + onActionPerformed="model.setReturnType((String)operationReturnType.getSelectedItem())"/> </cell> </row> <row> <cell columns="2"> <JPanel id="visibility"> - <JRadioButton id="visibilityPublic" value="public" styleClass="visibilityMode"/> - <JRadioButton id="visibilityPackage" value="" styleClass="visibilityMode"/> - <JRadioButton id="visibilityProtected" value="protected" styleClass="visibilityMode"/> - <JRadioButton id="visibilityPrivate" value="private" styleClass="visibilityMode"/> + <JRadioButton id="visibilityPublic" value="{Visibility.PUBLIC}" styleClass="visibilityMode"/> + <JRadioButton id="visibilityPackage" value="{Visibility.PACKAGE}" styleClass="visibilityMode"/> + <JRadioButton id="visibilityProtected" value="{Visibility.PROTECTED}" styleClass="visibilityMode"/> + <JRadioButton id="visibilityPrivate" value="{Visibility.PRIVATE}" styleClass="visibilityMode"/> + <JSeparator constructorParams="JSeparator.VERTICAL"/> + <JCheckBox id="operationAbstract"/> </JPanel> </cell> </row> + <!--row> + <cell columns="2"> + <JCheckBox id="operationAbstract"/> + </cell> + </row--> </Table> </org.jdesktop.swingx.JXTaskPane> diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/OperationContentUI.jcss b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/OperationContentUI.jcss index 4e84c08..60f4390 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/OperationContentUI.jcss +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/OperationContentUI.jcss @@ -8,7 +8,7 @@ } #operationName { - text:{getModel().getUserObject().getName()}; + text:{getModel().getName()}; _property:{"name"}; } @@ -17,10 +17,16 @@ } #operationReturnType { - selectedItem:{getModel().getUserObject().getReturnType()}; + selectedItem:{getModel().getReturnType()}; _property:{"returnType"}; } +#operationAbstract { + text:"eugene.editor.operation.abstract"; + selected:{getModel().isAbstract()}; + _property:{"abstract"}; +} + #createOperationFromOperation { text:"eugene.editor.create.operation"; actionIcon:add; diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/OperationContentUIHandler.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/OperationContentUIHandler.java index 3c5bb69..a678cd1 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/OperationContentUIHandler.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/OperationContentUIHandler.java @@ -8,6 +8,7 @@ import org.nuiton.eugene.editor.application.ModelHelper; import org.nuiton.eugene.editor.application.ui.tree.node.OperationNode; import org.nuiton.eugene.models.object.ObjectModelOperation; import org.nuiton.eugene.models.object.ObjectModelParameter; +import org.nuiton.eugene.models.object.xml.ObjectModelOperationImpl; import javax.swing.JTable; import javax.swing.ListSelectionModel; @@ -21,7 +22,7 @@ import java.util.List; * * @author Tony Chemit - chemit@codelutin.com */ -public class OperationContentUIHandler extends ContenUIHandler<OperationNode, OperationContentUI> { +public class OperationContentUIHandler extends ContentUIHandler<ObjectModelOperationImpl, OperationNode, OperationContentUI> { @Override public void beforeInit(OperationContentUI ui) { @@ -41,8 +42,9 @@ public class OperationContentUIHandler extends ContenUIHandler<OperationNode, Op protected void open(OperationContentUI ui, OperationNode node) { ObjectModelOperation data = node.getUserObject(); - open(ui, node, data.getStereotypes(), data.getTagValues()); - ui.getVisibilityMode().setSelectedValue(data.getVisibility()); + super.open(ui, node); + + ui.getVisibilityMode().setSelectedValue(node.getVisibility()); Collection<ObjectModelParameter> parameters = data.getParameters(); JTable parametersPanel = ui.getParameters(); diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/PackageContentUI.jcss b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/PackageContentUI.jcss index 5d657fc..a885b7f 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/PackageContentUI.jcss +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/PackageContentUI.jcss @@ -7,7 +7,7 @@ } #packageName { - text:{getModel().getUserObject().getName()}; + text:{getModel().getName()}; _property:{"name"}; } diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/PackageContentUIHandler.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/PackageContentUIHandler.java index 962c4e0..e4f74fd 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/PackageContentUIHandler.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/PackageContentUIHandler.java @@ -2,14 +2,14 @@ package org.nuiton.eugene.editor.application.ui.content; import org.nuiton.eugene.editor.application.ModelExtensionHelper; import org.nuiton.eugene.editor.application.ui.tree.node.PackageNode; -import org.nuiton.eugene.models.object.ObjectModelPackage; +import org.nuiton.eugene.models.object.xml.ObjectModelPackageImpl; /** * Created on 16/09/16. * * @author Tony Chemit - chemit@codelutin.com */ -public class PackageContentUIHandler extends ContenUIHandler<PackageNode, PackageContentUI> { +public class PackageContentUIHandler extends ContentUIHandler<ObjectModelPackageImpl, PackageNode, PackageContentUI> { @Override public void beforeInit(PackageContentUI ui) { @@ -23,11 +23,4 @@ public class PackageContentUIHandler extends ContenUIHandler<PackageNode, Packag } - @Override - protected void open(PackageContentUI ui, PackageNode node) { - - ObjectModelPackage data = node.getUserObject(); - open(ui, node, data.getStereotypes(), data.getTagValues()); - - } } diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/Visibility.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/Visibility.java new file mode 100644 index 0000000..3c2d76a --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/Visibility.java @@ -0,0 +1,33 @@ +package org.nuiton.eugene.editor.application.ui.content; + +/** + * Created on 21/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public enum Visibility { + + PUBLIC("public"), + PACKAGE(""), + PROTECTED("protected"), + PRIVATE("private"); + + private final String model; + + Visibility(String model) { + this.model = model; + } + + public static Visibility fromModel(String model) { + for (Visibility visibility : values()) { + if (model.equals(visibility.model)) { + return visibility; + } + } + return null; + } + + public String toModel() { + return model; + } +} diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/AddInterfaceFromClassAction.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/AddInterfaceFromClassAction.java index 427feec..ad0ee7f 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/AddInterfaceFromClassAction.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/AddInterfaceFromClassAction.java @@ -1,8 +1,6 @@ package org.nuiton.eugene.editor.application.ui.content.actions; -import org.apache.commons.lang3.StringUtils; import org.nuiton.eugene.editor.application.ui.content.ClassContentUI; -import org.nuiton.eugene.models.object.xml.ObjectModelInterfaceImpl; import javax.swing.DefaultComboBoxModel; import javax.swing.DefaultListModel; @@ -22,14 +20,8 @@ public class AddInterfaceFromClassAction extends ContentActionSupport<ClassConte protected void execute(ClassContentUI ui) { String interfaceName = (String) ui.getInterfacesHeaderType().getSelectedItem(); - String[] split = interfaceName.split("\\."); - ObjectModelInterfaceImpl newInterface = new ObjectModelInterfaceImpl(); - newInterface.setName(split[split.length - 1]); - newInterface.setPackage(StringUtils.removeEnd(interfaceName, "." + newInterface.getName())); - newInterface.postInit(); - - ui.getModel().getUserObject().getInterfaces().add(newInterface); + ui.getModel().addInterface(interfaceName); ((DefaultListModel<String>) ui.getInterfaces().getModel()).addElement(interfaceName); ((DefaultComboBoxModel) ui.getInterfacesHeaderType().getModel()).removeElement(interfaceName); diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/AddLiteralFromEnumerationAction.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/AddLiteralFromEnumerationAction.java deleted file mode 100644 index fd45704..0000000 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/AddLiteralFromEnumerationAction.java +++ /dev/null @@ -1,32 +0,0 @@ -package org.nuiton.eugene.editor.application.ui.content.actions; - -import org.nuiton.eugene.editor.application.ui.content.EnumerationContentUI; - -import javax.swing.DefaultListModel; - -/** - * Created on 16/09/16. - * - * @author Tony Chemit - chemit@codelutin.com - */ -public class AddLiteralFromEnumerationAction extends ContentActionSupport<EnumerationContentUI> { - - public AddLiteralFromEnumerationAction(EnumerationContentUI ui) { - super(ui); - } - - @Override - protected void execute(EnumerationContentUI ui) { - - String text = ui.getLiteralsHeaderName().getText().trim(); - - ui.getModel().addLiteral(text); - - ((DefaultListModel<String>) ui.getLiterals().getModel()).addElement(text); - ui.getLiteralsHeaderName().setText(""); - //TODO Comprendre pk le binding ne fonctionne pas - ui.getAddLiteralFromEnumeration().setEnabled(false); - - } - -} diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/AddSuperClassFromInterfaceAction.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/AddSuperClassFromInterfaceAction.java index a39bfa6..5893d1f 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/AddSuperClassFromInterfaceAction.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/AddSuperClassFromInterfaceAction.java @@ -20,8 +20,8 @@ public class AddSuperClassFromInterfaceAction extends ContentActionSupport<Inter protected void execute(InterfaceContentUI ui) { String superClassName = (String) ui.getSuperClassesHeaderType().getSelectedItem(); - - ui.getModel().addInterface(superClassName); + + ui.getModel().addSuperClass(superClassName); ((DefaultListModel<String>) ui.getSuperClasses().getModel()).addElement(superClassName); ((DefaultComboBoxModel) ui.getSuperClassesHeaderType().getModel()).removeElement(superClassName); diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/ContentActionSupport.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/ContentActionSupport.java index 424f45a..0e4855a 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/ContentActionSupport.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/ContentActionSupport.java @@ -6,6 +6,8 @@ import org.nuiton.eugene.editor.application.ui.tree.EugeneEditorTree; import org.nuiton.eugene.editor.application.ui.tree.node.NodeSupport; import javax.swing.AbstractAction; +import javax.swing.tree.DefaultTreeModel; +import javax.swing.tree.TreePath; import java.awt.event.ActionEvent; /** @@ -41,7 +43,7 @@ public abstract class ContentActionSupport<U extends ContentUI<?>> extends Abstr } protected EugeneEditorTree getTree(U ui) { - return getMainUi(ui).getProjectNavigation(); + return getMainUi(ui).getProjectNavigation(); } protected NodeSupport getSelectedNode(NodeSupport currentNode) { @@ -52,4 +54,16 @@ public abstract class ContentActionSupport<U extends ContentUI<?>> extends Abstr } return newSelectedNode; } + + protected void removeNodeThenSelected(U ui, NodeSupport currentNode, NodeSupport newSelectedNode) { + + EugeneEditorTree tree = getTree(ui); + + DefaultTreeModel treeModel = tree.getModel(); + treeModel.removeNodeFromParent(currentNode); + + TreePath path = new TreePath(treeModel.getPathToRoot(newSelectedNode)); + tree.setSelectionPath(path); + + } } diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateAttributeFromAttributeAction.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateAttributeFromAttributeAction.java index a2df3ad..350b9c0 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateAttributeFromAttributeAction.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateAttributeFromAttributeAction.java @@ -3,7 +3,7 @@ package org.nuiton.eugene.editor.application.ui.content.actions; import org.nuiton.eugene.editor.application.ui.content.AttributeContentUI; import org.nuiton.eugene.editor.application.ui.tree.EugeneEditorTree; import org.nuiton.eugene.editor.application.ui.tree.node.AttributeNode; -import org.nuiton.eugene.editor.application.ui.tree.node.NodeSupport; +import org.nuiton.eugene.editor.application.ui.tree.node.ClassifierNodeSupport; import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.TreePath; @@ -28,7 +28,7 @@ public class CreateAttributeFromAttributeAction extends ContentActionSupport<Att protected void execute(AttributeContentUI ui) { AttributeNode currentNode = ui.getModel(); - NodeSupport parentNode = currentNode.getParent(); + ClassifierNodeSupport parentNode = (ClassifierNodeSupport) currentNode.getParent(); AttributeNode newNode = parentNode.addAttribute(); diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateAttributeFromClassAction.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateAttributeFromClassAction.java index 2273630..b356df7 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateAttributeFromClassAction.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateAttributeFromClassAction.java @@ -3,7 +3,7 @@ package org.nuiton.eugene.editor.application.ui.content.actions; import org.nuiton.eugene.editor.application.ui.content.ClassContentUI; import org.nuiton.eugene.editor.application.ui.tree.EugeneEditorTree; import org.nuiton.eugene.editor.application.ui.tree.node.AttributeNode; -import org.nuiton.eugene.editor.application.ui.tree.node.NodeSupport; +import org.nuiton.eugene.editor.application.ui.tree.node.ClassNode; import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.TreePath; @@ -27,7 +27,7 @@ public class CreateAttributeFromClassAction extends ContentActionSupport<ClassCo @Override protected void execute(ClassContentUI ui) { - NodeSupport currentNode = ui.getModel(); + ClassNode currentNode = ui.getModel(); AttributeNode newNode = currentNode.addAttribute(); EugeneEditorTree tree = getTree(ui); diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateAttributeFromInterfaceAction.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateAttributeFromInterfaceAction.java index f75fa25..01a28fd 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateAttributeFromInterfaceAction.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateAttributeFromInterfaceAction.java @@ -3,7 +3,7 @@ package org.nuiton.eugene.editor.application.ui.content.actions; import org.nuiton.eugene.editor.application.ui.content.InterfaceContentUI; import org.nuiton.eugene.editor.application.ui.tree.EugeneEditorTree; import org.nuiton.eugene.editor.application.ui.tree.node.AttributeNode; -import org.nuiton.eugene.editor.application.ui.tree.node.NodeSupport; +import org.nuiton.eugene.editor.application.ui.tree.node.InterfaceNode; import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.TreePath; @@ -27,7 +27,7 @@ public class CreateAttributeFromInterfaceAction extends ContentActionSupport<Int @Override protected void execute(InterfaceContentUI ui) { - NodeSupport currentNode = ui.getModel(); + InterfaceNode currentNode = ui.getModel(); AttributeNode newNode = currentNode.addAttribute(); EugeneEditorTree tree = getTree(ui); diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateLiteralFromEnumerationAction.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateLiteralFromEnumerationAction.java index 7ef273c..b202947 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateLiteralFromEnumerationAction.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateLiteralFromEnumerationAction.java @@ -2,6 +2,8 @@ package org.nuiton.eugene.editor.application.ui.content.actions; import org.nuiton.eugene.editor.application.ui.content.EnumerationContentUI; +import javax.swing.DefaultListModel; + /** * Created on 16/09/16. * @@ -16,6 +18,15 @@ public class CreateLiteralFromEnumerationAction extends ContentActionSupport<Enu @Override protected void execute(EnumerationContentUI ui) { + String text = ui.getLiteralsHeaderName().getText().trim(); + + ui.getModel().addLiteral(text); + + ((DefaultListModel<String>) ui.getLiterals().getModel()).addElement(text); + ui.getLiteralsHeaderName().setText(""); + //TODO Comprendre pk le binding ne fonctionne pas + ui.getCreateLiteralFromEnumeration().setEnabled(false); + } } diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateOperationFromOperationAction.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateOperationFromOperationAction.java index 882f9f4..dd5c2af 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateOperationFromOperationAction.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateOperationFromOperationAction.java @@ -2,7 +2,7 @@ package org.nuiton.eugene.editor.application.ui.content.actions; import org.nuiton.eugene.editor.application.ui.content.OperationContentUI; import org.nuiton.eugene.editor.application.ui.tree.EugeneEditorTree; -import org.nuiton.eugene.editor.application.ui.tree.node.NodeSupport; +import org.nuiton.eugene.editor.application.ui.tree.node.ClassifierNodeSupport; import org.nuiton.eugene.editor.application.ui.tree.node.OperationNode; import javax.swing.tree.DefaultTreeModel; @@ -28,7 +28,7 @@ public class CreateOperationFromOperationAction extends ContentActionSupport<Ope protected void execute(OperationContentUI ui) { OperationNode currentNode = ui.getModel(); - NodeSupport parentNode = currentNode.getParent(); + ClassifierNodeSupport parentNode = (ClassifierNodeSupport) currentNode.getParent(); OperationNode newNode = parentNode.addOperation(); diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreatePackageFromModelAction.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreatePackageFromModelAction.java index 26e8495..58d735c 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreatePackageFromModelAction.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreatePackageFromModelAction.java @@ -28,7 +28,7 @@ public class CreatePackageFromModelAction extends ContentActionSupport<ModelCont protected void execute(ModelContentUI ui) { ModelNode currentNode = ui.getModel(); - + PackageNode newNode = currentNode.addPackage(""); EugeneEditorTree tree = getTree(ui); diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateParameterFromOperationAction.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateParameterFromOperationAction.java index 32c0424..2c38ffe 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateParameterFromOperationAction.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/CreateParameterFromOperationAction.java @@ -26,6 +26,7 @@ public class CreateParameterFromOperationAction extends ContentActionSupport<Ope OperationNode currentNode = ui.getModel(); + //FIXME Utiliser un bean d'ui ObjectModelParameterImpl newData = currentNode.addParameter(); ((ParameterTableModel) ui.getParameters().getModel()).add(newData); diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/DeleteAttributeFromAttributeAction.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/DeleteAttributeFromAttributeAction.java index 61dc3db..62f38a7 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/DeleteAttributeFromAttributeAction.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/DeleteAttributeFromAttributeAction.java @@ -1,12 +1,10 @@ package org.nuiton.eugene.editor.application.ui.content.actions; import org.nuiton.eugene.editor.application.ui.content.AttributeContentUI; -import org.nuiton.eugene.editor.application.ui.tree.EugeneEditorTree; +import org.nuiton.eugene.editor.application.ui.tree.node.AttributeNode; +import org.nuiton.eugene.editor.application.ui.tree.node.ClassifierNodeSupport; import org.nuiton.eugene.editor.application.ui.tree.node.NodeSupport; -import javax.swing.tree.DefaultTreeModel; -import javax.swing.tree.TreePath; - /** * Created on 16/09/16. * @@ -26,19 +24,14 @@ public class DeleteAttributeFromAttributeAction extends ContentActionSupport<Att @Override protected void execute(AttributeContentUI ui) { - NodeSupport currentNode = ui.getModel(); - - currentNode.getParent().removeAttribute(ui.getModel().getName()); + AttributeNode currentNode = ui.getModel(); - EugeneEditorTree tree = getTree(ui); + ClassifierNodeSupport parent = (ClassifierNodeSupport) currentNode.getParent(); + parent.removeAttribute(ui.getModel().getName()); NodeSupport newSelectedNode = getSelectedNode(currentNode); - DefaultTreeModel treeModel = tree.getModel(); - treeModel.removeNodeFromParent(currentNode); - - TreePath path = new TreePath(treeModel.getPathToRoot(newSelectedNode)); - tree.setSelectionPath(path); + removeNodeThenSelected(ui, currentNode, newSelectedNode); } diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/DeleteClassFromClassAction.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/DeleteClassFromClassAction.java index 96e324e..3caf0fa 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/DeleteClassFromClassAction.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/DeleteClassFromClassAction.java @@ -1,13 +1,9 @@ package org.nuiton.eugene.editor.application.ui.content.actions; import org.nuiton.eugene.editor.application.ui.content.ClassContentUI; -import org.nuiton.eugene.editor.application.ui.tree.EugeneEditorTree; import org.nuiton.eugene.editor.application.ui.tree.node.ClassNode; import org.nuiton.eugene.editor.application.ui.tree.node.NodeSupport; -import javax.swing.tree.DefaultTreeModel; -import javax.swing.tree.TreePath; - /** * Created on 16/09/16. * @@ -31,15 +27,9 @@ public class DeleteClassFromClassAction extends ContentActionSupport<ClassConten currentNode.getRoot().removeClass(ui.getModel().getUserObject().getQualifiedName()); - EugeneEditorTree tree = getTree(ui); - NodeSupport newSelectedNode = getSelectedNode(currentNode); - DefaultTreeModel treeModel = tree.getModel(); - treeModel.removeNodeFromParent(currentNode); - - TreePath path = new TreePath(treeModel.getPathToRoot(newSelectedNode)); - tree.setSelectionPath(path); + removeNodeThenSelected(ui, currentNode, newSelectedNode); } diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/DeleteEnumerationFromEnumerationAction.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/DeleteEnumerationFromEnumerationAction.java index d8774c6..b99de40 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/DeleteEnumerationFromEnumerationAction.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/DeleteEnumerationFromEnumerationAction.java @@ -1,13 +1,9 @@ package org.nuiton.eugene.editor.application.ui.content.actions; import org.nuiton.eugene.editor.application.ui.content.EnumerationContentUI; -import org.nuiton.eugene.editor.application.ui.tree.EugeneEditorTree; import org.nuiton.eugene.editor.application.ui.tree.node.EnumerationNode; import org.nuiton.eugene.editor.application.ui.tree.node.NodeSupport; -import javax.swing.tree.DefaultTreeModel; -import javax.swing.tree.TreePath; - /** * Created on 16/09/16. * @@ -31,15 +27,9 @@ public class DeleteEnumerationFromEnumerationAction extends ContentActionSupport currentNode.getRoot().removeEnumeration(ui.getModel().getUserObject().getQualifiedName()); - EugeneEditorTree tree = getTree(ui); - NodeSupport newSelectedNode = getSelectedNode(currentNode); - DefaultTreeModel treeModel = tree.getModel(); - treeModel.removeNodeFromParent(currentNode); - - TreePath path = new TreePath(treeModel.getPathToRoot(newSelectedNode)); - tree.setSelectionPath(path); + removeNodeThenSelected(ui, currentNode, newSelectedNode); } diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/DeleteInterfaceFromInterfaceAction.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/DeleteInterfaceFromInterfaceAction.java index bb2fb40..aa6140f 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/DeleteInterfaceFromInterfaceAction.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/DeleteInterfaceFromInterfaceAction.java @@ -1,13 +1,9 @@ package org.nuiton.eugene.editor.application.ui.content.actions; import org.nuiton.eugene.editor.application.ui.content.InterfaceContentUI; -import org.nuiton.eugene.editor.application.ui.tree.EugeneEditorTree; import org.nuiton.eugene.editor.application.ui.tree.node.InterfaceNode; import org.nuiton.eugene.editor.application.ui.tree.node.NodeSupport; -import javax.swing.tree.DefaultTreeModel; -import javax.swing.tree.TreePath; - /** * Created on 16/09/16. * @@ -26,15 +22,9 @@ public class DeleteInterfaceFromInterfaceAction extends ContentActionSupport<Int currentNode.getRoot().removeInterface(currentNode.getUserObject().getQualifiedName()); - EugeneEditorTree tree = getTree(ui); - NodeSupport newSelectedNode = getSelectedNode(currentNode); - DefaultTreeModel treeModel = tree.getModel(); - treeModel.removeNodeFromParent(currentNode); - - TreePath path = new TreePath(treeModel.getPathToRoot(newSelectedNode)); - tree.setSelectionPath(path); + removeNodeThenSelected(ui, currentNode, newSelectedNode); } diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/RemoveLiteralFromEnumerationAction.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/DeleteLiteralsFromEnumerationAction.java similarity index 81% rename from eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/RemoveLiteralFromEnumerationAction.java rename to eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/DeleteLiteralsFromEnumerationAction.java index f223c0a..0049982 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/RemoveLiteralFromEnumerationAction.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/DeleteLiteralsFromEnumerationAction.java @@ -10,9 +10,9 @@ import javax.swing.DefaultListModel; * * @author Tony Chemit - chemit@codelutin.com */ -public class RemoveLiteralFromEnumerationAction extends ContentActionSupport<EnumerationContentUI> { +public class DeleteLiteralsFromEnumerationAction extends ContentActionSupport<EnumerationContentUI> { - public RemoveLiteralFromEnumerationAction(EnumerationContentUI ui) { + public DeleteLiteralsFromEnumerationAction(EnumerationContentUI ui) { super(ui); } diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/DeleteOperationFromOperationAction.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/DeleteOperationFromOperationAction.java index 522d36d..8af0415 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/DeleteOperationFromOperationAction.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/DeleteOperationFromOperationAction.java @@ -1,13 +1,10 @@ package org.nuiton.eugene.editor.application.ui.content.actions; import org.nuiton.eugene.editor.application.ui.content.OperationContentUI; -import org.nuiton.eugene.editor.application.ui.tree.EugeneEditorTree; +import org.nuiton.eugene.editor.application.ui.tree.node.ClassifierNodeSupport; import org.nuiton.eugene.editor.application.ui.tree.node.NodeSupport; import org.nuiton.eugene.editor.application.ui.tree.node.OperationNode; -import javax.swing.tree.DefaultTreeModel; -import javax.swing.tree.TreePath; - /** * Created on 16/09/16. * @@ -29,16 +26,12 @@ public class DeleteOperationFromOperationAction extends ContentActionSupport<Ope OperationNode currentNode = ui.getModel(); - currentNode.getParent().removeOperation(ui.getModel().getName()); - - EugeneEditorTree tree = getTree(ui); + ClassifierNodeSupport parentNode = (ClassifierNodeSupport) currentNode.getParent(); + parentNode.removeOperation(ui.getModel().getName()); NodeSupport newSelectedNode = getSelectedNode(currentNode); - DefaultTreeModel treeModel = tree.getModel(); - treeModel.removeNodeFromParent(currentNode); - - tree.setSelectionPath(new TreePath(treeModel.getPathToRoot(newSelectedNode))); + removeNodeThenSelected(ui, currentNode, newSelectedNode); } diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/DeletePackageFromPackageAction.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/DeletePackageFromPackageAction.java index 90cfb1a..338e64e 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/DeletePackageFromPackageAction.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/DeletePackageFromPackageAction.java @@ -1,13 +1,9 @@ package org.nuiton.eugene.editor.application.ui.content.actions; import org.nuiton.eugene.editor.application.ui.content.PackageContentUI; -import org.nuiton.eugene.editor.application.ui.tree.EugeneEditorTree; import org.nuiton.eugene.editor.application.ui.tree.node.NodeSupport; import org.nuiton.eugene.editor.application.ui.tree.node.PackageNode; -import javax.swing.tree.DefaultTreeModel; -import javax.swing.tree.TreePath; - /** * Created on 16/09/16. * @@ -30,14 +26,9 @@ public class DeletePackageFromPackageAction extends ContentActionSupport<Package PackageNode currentNode = ui.getModel(); currentNode.getRoot().removePackage(ui.getModel().getName()); - EugeneEditorTree tree = getTree(ui); - NodeSupport newSelectedNode = getSelectedNode(currentNode); - DefaultTreeModel treeModel = tree.getModel(); - treeModel.removeNodeFromParent(currentNode); - - tree.setSelectionPath(new TreePath(treeModel.getPathToRoot(newSelectedNode))); + removeNodeThenSelected(ui, currentNode, newSelectedNode); } diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/RemoveInterfaceFromClassAction.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/RemoveInterfacesFromClassAction.java similarity index 66% rename from eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/RemoveInterfaceFromClassAction.java rename to eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/RemoveInterfacesFromClassAction.java index 267a4bf..f2ef925 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/RemoveInterfaceFromClassAction.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/RemoveInterfacesFromClassAction.java @@ -1,7 +1,7 @@ package org.nuiton.eugene.editor.application.ui.content.actions; import org.nuiton.eugene.editor.application.ui.content.ClassContentUI; -import org.nuiton.eugene.editor.application.ui.tree.node.ModelNode; +import org.nuiton.eugene.editor.application.ui.tree.node.ClassNode; import javax.swing.DefaultListModel; @@ -10,22 +10,22 @@ import javax.swing.DefaultListModel; * * @author Tony Chemit - chemit@codelutin.com */ -public class RemoveInterfaceFromClassAction extends ContentActionSupport<ClassContentUI> { +public class RemoveInterfacesFromClassAction extends ContentActionSupport<ClassContentUI> { - public RemoveInterfaceFromClassAction(ClassContentUI ui) { + public RemoveInterfacesFromClassAction(ClassContentUI ui) { super(ui); } @Override protected void execute(ClassContentUI ui) { - ModelNode modelNode = ui.getModel().getRoot(); + ClassNode currentNode = ui.getModel(); DefaultListModel listModel = (DefaultListModel) ui.getInterfaces().getModel(); - + for (String interfaceName : ui.getInterfaces().getSelectedValuesList()) { - modelNode.removeInterface(interfaceName); + currentNode.removeInterface(interfaceName); listModel.removeElement(interfaceName); diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/RemoveSuperClassFromInterfaceAction.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/RemoveSuperClassesFromInterfaceAction.java similarity index 66% rename from eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/RemoveSuperClassFromInterfaceAction.java rename to eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/RemoveSuperClassesFromInterfaceAction.java index f042a3d..b165dbd 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/RemoveSuperClassFromInterfaceAction.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/actions/RemoveSuperClassesFromInterfaceAction.java @@ -1,7 +1,7 @@ package org.nuiton.eugene.editor.application.ui.content.actions; import org.nuiton.eugene.editor.application.ui.content.InterfaceContentUI; -import org.nuiton.eugene.editor.application.ui.tree.node.ModelNode; +import org.nuiton.eugene.editor.application.ui.tree.node.InterfaceNode; import javax.swing.DefaultListModel; import java.util.List; @@ -11,9 +11,9 @@ import java.util.List; * * @author Tony Chemit - chemit@codelutin.com */ -public class RemoveSuperClassFromInterfaceAction extends ContentActionSupport<InterfaceContentUI> { +public class RemoveSuperClassesFromInterfaceAction extends ContentActionSupport<InterfaceContentUI> { - public RemoveSuperClassFromInterfaceAction(InterfaceContentUI ui) { + public RemoveSuperClassesFromInterfaceAction(InterfaceContentUI ui) { super(ui); } @@ -22,11 +22,11 @@ public class RemoveSuperClassFromInterfaceAction extends ContentActionSupport<In List<String> interfaceNames = ui.getSuperClasses().getSelectedValuesList(); - ModelNode currentNode = ui.getModel().getRoot(); + InterfaceNode currentNode = ui.getModel(); for (String interfaceName : interfaceNames) { - currentNode.removeInterface(interfaceName); + currentNode.removeSuperClass(interfaceName); ((DefaultListModel) ui.getSuperClasses().getModel()).removeElement(interfaceName); ui.getSuperClassesHeaderType().addItem(interfaceName); diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/EugeneEditorTreeSelectionModel.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/EugeneEditorTreeSelectionModel.java index 29cfa94..776baa7 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/EugeneEditorTreeSelectionModel.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/EugeneEditorTreeSelectionModel.java @@ -4,6 +4,8 @@ import org.nuiton.eugene.editor.application.ui.ContentUIManager; import org.nuiton.eugene.editor.application.ui.EugeneEditorUI; import org.nuiton.eugene.editor.application.ui.content.ContentUI; import org.nuiton.eugene.editor.application.ui.tree.node.NodeSupport; +import org.nuiton.eugene.models.stereotype.StereotypeAble; +import org.nuiton.eugene.models.tagvalue.TagValueAble; import javax.swing.JComponent; import javax.swing.JLabel; @@ -79,7 +81,7 @@ public class EugeneEditorTreeSelectionModel extends DefaultTreeSelectionModel { } - protected <M, N extends NodeSupport<M>> void openNode(N node, ContentUIManager contentUIManager) { + protected <M extends StereotypeAble & TagValueAble, N extends NodeSupport<M>> void openNode(N node, ContentUIManager contentUIManager) { node.removePropertyChangeListener(reloadNodeChangeListener); node.addPropertyChangeListener(reloadNodeChangeListener); @@ -88,12 +90,16 @@ public class EugeneEditorTreeSelectionModel extends DefaultTreeSelectionModel { content.setContextValue(node, CLIENT_PROPERTY_NODE); - content.setLeftDecoration(new JLabel(node.getIcon())); + JLabel leftDecoration = new JLabel(node.getBigIcon()); + leftDecoration.setHorizontalAlignment(JLabel.CENTER); + leftDecoration.setSize(32,32); - content.open(node); + content.setLeftDecoration(leftDecoration); ui.getSplitpane2().setLeftComponent((JComponent) content); + content.open(node); + } } diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/AttributeNode.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/AttributeNode.java index 457cca4..e325fd1 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/AttributeNode.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/AttributeNode.java @@ -1,10 +1,11 @@ package org.nuiton.eugene.editor.application.ui.tree.node; -import com.google.common.collect.ImmutableSet; +import org.nuiton.eugene.editor.application.ui.content.AggregationMode; +import org.nuiton.eugene.editor.application.ui.content.Multiplicity; +import org.nuiton.eugene.editor.application.ui.content.Visibility; +import org.nuiton.eugene.models.object.ObjectModelAttribute; import org.nuiton.eugene.models.object.xml.ObjectModelAttributeImpl; -import java.util.Set; - import static org.nuiton.i18n.I18n.t; /** @@ -14,11 +15,16 @@ import static org.nuiton.i18n.I18n.t; */ public class AttributeNode extends NodeSupport<ObjectModelAttributeImpl> { + private static final String PROPERTY_NAME = "name"; private static final String PROPERTY_VISIBILITY = "visibility"; private static final String PROPERTY_TYPE = "type"; + private static final String PROPERTY_BIDI = "bidi"; + private static final String PROPERTY_AGGREGATION_MODE = "aggregationMode"; + private static final String PROPERTY_MULTIPLICITY = "multiplicity"; + private static final String PROPERTY_DEFAULT_VALUE = "defaultValue"; public AttributeNode(ObjectModelAttributeImpl objectModelAttribute) { - super(objectModelAttribute, PROPERTY_NAME, PROPERTY_TYPE, PROPERTY_VISIBILITY); + super(objectModelAttribute, PROPERTY_NAME); } @Override @@ -34,13 +40,13 @@ public class AttributeNode extends NodeSupport<ObjectModelAttributeImpl> { firePropertyChange(PROPERTY_NAME, oldValue, name); } - public String getVisibility() { - return getUserObject().getVisibility(); + public Visibility getVisibility() { + return Visibility.fromModel(getUserObject().getVisibility()); } - public void setVisibility(String visibility) { - String oldValue = getVisibility(); - getUserObject().setVisibility(visibility); + public void setVisibility(Visibility visibility) { + Visibility oldValue = getVisibility(); + getUserObject().setVisibility(visibility.toModel()); firePropertyChange(PROPERTY_VISIBILITY, oldValue, visibility); } @@ -60,12 +66,76 @@ public class AttributeNode extends NodeSupport<ObjectModelAttributeImpl> { } @Override - public Set<String> getReloadProperties() { - return ImmutableSet.of(PROPERTY_NAME, PROPERTY_MODIFIED); - } - - @Override public String toString() { return getName(); } + + public boolean isBidi() { + ObjectModelAttribute reverseAttribute = getUserObject().getReverseAttribute(); + return reverseAttribute != null && reverseAttribute.isNavigable(); + } + + public void setBidi(boolean bidi) { + boolean oldValue = isBidi(); + + ObjectModelAttributeImpl reverseAttribute = (ObjectModelAttributeImpl) getUserObject().getReverseAttribute(); + //TODO Traiter la cas où il n'y a pas de reverser attribute + if (reverseAttribute != null) { + reverseAttribute.setNavigable(bidi); + } + firePropertyChange(PROPERTY_BIDI, oldValue, bidi); + } + + public AggregationMode getAggregationMode() { + if (getUserObject().isComposite()) { + return AggregationMode.COMPOSE; + } + if (getUserObject().isAggregate()) { + return AggregationMode.AGGREGATE; + } + return AggregationMode.NONE; + } + + public void setAggregationMode(AggregationMode aggregationMode) { + AggregationMode oldValue = getAggregationMode(); + switch (aggregationMode) { + case NONE: + getUserObject().setComposite(false); + getUserObject().setAggregate(false); + break; + case AGGREGATE: + getUserObject().setComposite(false); + getUserObject().setAggregate(true); + break; + case COMPOSE: + getUserObject().setComposite(true); + getUserObject().setAggregate(false); + break; + } + firePropertyChange(PROPERTY_AGGREGATION_MODE, oldValue, aggregationMode); + } + + public String getDefaultValue() { + return getUserObject().getDefaultValue(); + } + + public void setDefaultValue(String defaultValue) { + if ("".equals(defaultValue)) { + defaultValue = null; + } + String oldValue = getDefaultValue(); + getUserObject().setDefaultValue(defaultValue); + firePropertyChange(PROPERTY_DEFAULT_VALUE, oldValue, defaultValue); + } + + public Multiplicity getMultiplicity() { + return Multiplicity.valueOf(getUserObject().getMinMultiplicity(), getUserObject().getMaxMultiplicity()); + } + + public void setMultiplicity(Multiplicity multiplicity) { + Multiplicity oldValue = getMultiplicity(); + getUserObject().setMinMultiplicity(multiplicity.getMin()); + getUserObject().setMaxMultiplicity(multiplicity.getMax()); + firePropertyChange(PROPERTY_MULTIPLICITY, oldValue, multiplicity); + } } diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/ClassNode.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/ClassNode.java index 1b0b4d5..f294ff7 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/ClassNode.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/ClassNode.java @@ -1,11 +1,15 @@ package org.nuiton.eugene.editor.application.ui.tree.node; -import com.google.common.collect.ImmutableSet; +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang3.StringUtils; import org.nuiton.eugene.models.object.ObjectModelClass; +import org.nuiton.eugene.models.object.ObjectModelInterface; import org.nuiton.eugene.models.object.xml.ObjectModelClassImpl; +import org.nuiton.eugene.models.object.xml.ObjectModelInterfaceImpl; import java.util.Collection; -import java.util.Set; +import java.util.List; +import java.util.stream.Collectors; import static org.nuiton.i18n.I18n.t; @@ -14,30 +18,23 @@ import static org.nuiton.i18n.I18n.t; * * @author Tony Chemit - chemit@codelutin.com */ -public class ClassNode extends NodeSupport<ObjectModelClassImpl> { +public class ClassNode extends ClassifierNodeSupport<ObjectModelClassImpl> { public static final String PROPERTY_SUPER_CLASS = "superClass"; + public static final String PROPERTY_INTERFACES = "interfaces"; public ClassNode(ObjectModelClassImpl objectModelClass) { - super(objectModelClass, PROPERTY_NAME); + super(objectModelClass, ClassifierNodeSupport.PROPERTY_NAME); } @Override - public String getName() { - return getUserObject().getName(); - } - - @Override - public void setName(String name) { - String oldValue = getName(); - getUserObject().setName(name); - getUserObject().postInit(); - firePropertyChange(PROPERTY_NAME, oldValue, name); + public String getCreateName() { + return t("eugene.editor.new.class"); } public String getSuperClass() { Collection<ObjectModelClass> superclasses = getUserObject().getSuperclasses(); - return superclasses.isEmpty() ? null : superclasses.iterator().next().getQualifiedName(); + return CollectionUtils.isEmpty(superclasses) ? null : superclasses.iterator().next().getQualifiedName(); } public void setSuperClass(String superClass) { @@ -49,23 +46,27 @@ public class ClassNode extends NodeSupport<ObjectModelClassImpl> { firePropertyChange(PROPERTY_SUPER_CLASS, oldValue, superClass); } - @Override - public String getCreateName() { - return t("eugene.editor.new.class"); + public List<String> getInterfaces() { + return getUserObject().getInterfaces().stream().map(ObjectModelInterface::getQualifiedName).collect(Collectors.toList()); } - @Override - public Set<String> getReloadProperties() { - return ImmutableSet.of(PROPERTY_NAME, PROPERTY_MODIFIED); - } + public void addInterface(String interfaceName) { + String[] split = interfaceName.split("\\."); - @Override - public String toString() { - return getName(); + ObjectModelInterfaceImpl newInterface = new ObjectModelInterfaceImpl(); + newInterface.setName(split[split.length - 1]); + newInterface.setPackage(StringUtils.removeEnd(interfaceName, "." + newInterface.getName())); + newInterface.postInit(); + + List<String> oldValue = getInterfaces(); + getUserObject().getInterfaces().add(newInterface); + firePropertyChange(PROPERTY_INTERFACES, oldValue, getInterfaces()); } - public String getPackageName() { - return getParent().getName(); + public void removeInterface(String interfaceName) { + List<String> oldValue = getInterfaces(); + getUserObject().removeInterface(interfaceName); + firePropertyChange(PROPERTY_INTERFACES, oldValue, getInterfaces()); } } diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/ClassifierNodeSupport.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/ClassifierNodeSupport.java new file mode 100644 index 0000000..9a18d3f --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/ClassifierNodeSupport.java @@ -0,0 +1,103 @@ +package org.nuiton.eugene.editor.application.ui.tree.node; + +import org.nuiton.eugene.models.object.ObjectModelAttribute; +import org.nuiton.eugene.models.object.ObjectModelOperation; +import org.nuiton.eugene.models.object.xml.ObjectModelAttributeImpl; +import org.nuiton.eugene.models.object.xml.ObjectModelClassifierImpl; +import org.nuiton.eugene.models.object.xml.ObjectModelOperationImpl; + +import java.util.ArrayList; +import java.util.Collection; + +/** + * Created on 21/09/16. + * + * @author Tony Chemit - chemit@codelutin.com + */ +public abstract class ClassifierNodeSupport<M extends ObjectModelClassifierImpl> extends NodeSupport<M> { + + static final String PROPERTY_NAME = "name"; + static final String PROPERTY_ATTRIBUTES = "attributes"; + static final String PROPERTY_OPERATIONS = "operations"; + + protected ClassifierNodeSupport(M userObject, String... reloadProperties) { + super(userObject, reloadProperties); + } + + @Override + public String getName() { + return getUserObject().getName(); + } + + @Override + public void setName(String name) { + String oldValue = getName(); + getUserObject().setName(name); + getUserObject().postInit(); + firePropertyChange(PROPERTY_NAME, oldValue, name); + } + + public Collection<ObjectModelAttribute> getAttributes() { + return getUserObject().getAttributes(); + } + + public void setAttributes(Collection<ObjectModelAttribute> attributes) { + // non utilisé mais nécessaire pour l'écoute sur la propriété stereotypes + } + + public AttributeNode addAttribute() { + Collection<ObjectModelAttribute> oldValue = new ArrayList<>(getAttributes()); + + ObjectModelAttributeImpl newData = new ObjectModelAttributeImpl(); + newData.setName(""); + + getUserObject().addAttribute(newData); + + AttributeNode node = new AttributeNode(newData); + node.setCreate(true); + firePropertyChange(PROPERTY_ATTRIBUTES, oldValue, getAttributes()); + return node; + } + + public void removeAttribute(String name) { + Collection<ObjectModelAttribute> oldValue = new ArrayList<>(getAttributes()); + getUserObject().removeAttribute(name); + firePropertyChange(PROPERTY_ATTRIBUTES, oldValue, getAttributes()); + } + + public Collection<ObjectModelOperation> getOperations() { + return getUserObject().getOperations(); + } + + public void setOperations(Collection<ObjectModelOperation> operations) { + // non utilisé mais nécessaire pour l'écoute sur la propriété stereotypes + } + + public OperationNode addOperation() { + Collection<ObjectModelOperation> oldValue = new ArrayList<>(getOperations()); + ObjectModelOperationImpl newData = new ObjectModelOperationImpl(); + newData.setName(""); + + getUserObject().addOperation(newData); + + OperationNode node = new OperationNode(newData); + node.setCreate(true); + firePropertyChange(PROPERTY_OPERATIONS, oldValue, getOperations()); + return node; + } + + public void removeOperation(String name) { + Collection<ObjectModelOperation> oldValue = new ArrayList<>(getOperations()); + getUserObject().removeOperation(name); + firePropertyChange(PROPERTY_OPERATIONS, oldValue, getOperations()); + } + + public String getPackageName() { + return getUserObject().getPackageName(); + } + + @Override + public String toString() { + return getName(); + } +} diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/EnumerationNode.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/EnumerationNode.java index 5b4fa1b..4a154ee 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/EnumerationNode.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/EnumerationNode.java @@ -1,10 +1,10 @@ package org.nuiton.eugene.editor.application.ui.tree.node; -import com.google.common.collect.ImmutableSet; import org.nuiton.eugene.models.object.xml.ObjectModelEnumerationImpl; import org.nuiton.eugene.models.object.xml.ObjectModelImplRef; -import java.util.Set; +import java.util.ArrayList; +import java.util.List; import static org.nuiton.i18n.I18n.t; @@ -15,6 +15,9 @@ import static org.nuiton.i18n.I18n.t; */ public class EnumerationNode extends NodeSupport<ObjectModelEnumerationImpl> { + private static final String PROPERTY_NAME = "name"; + private static final String PROPERTY_LITERALS = "literals"; + public EnumerationNode(ObjectModelEnumerationImpl objectModelEnumeration) { super(objectModelEnumeration, PROPERTY_NAME); } @@ -38,26 +41,29 @@ public class EnumerationNode extends NodeSupport<ObjectModelEnumerationImpl> { } @Override - public Set<String> getReloadProperties() { - return ImmutableSet.of(PROPERTY_NAME, PROPERTY_MODIFIED); - } - - @Override public String toString() { return getName(); } public String getPackageName() { - return getParent().getName(); + return getUserObject().getPackageName(); + } + + public List<String> getLiterals() { + return new ArrayList<>(getUserObject().getLiterals()); } public void addLiteral(String literal) { ObjectModelImplRef ref = new ObjectModelImplRef(); ref.setName(literal); + List<String> oldValue = getLiterals(); getUserObject().addLiteral(ref); + firePropertyChange(PROPERTY_LITERALS, oldValue, getLiterals()); } public void removeLiteral(String literal) { + List<String> oldValue = getLiterals(); getUserObject().removeLiteral(literal); + firePropertyChange(PROPERTY_LITERALS, oldValue, getLiterals()); } } diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/InterfaceNode.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/InterfaceNode.java index c2a5fca..1fe26d0 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/InterfaceNode.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/InterfaceNode.java @@ -1,10 +1,11 @@ package org.nuiton.eugene.editor.application.ui.tree.node; -import com.google.common.collect.ImmutableSet; import org.apache.commons.lang3.StringUtils; +import org.nuiton.eugene.models.object.ObjectModelInterface; import org.nuiton.eugene.models.object.xml.ObjectModelInterfaceImpl; -import java.util.Set; +import java.util.List; +import java.util.stream.Collectors; import static org.nuiton.i18n.I18n.t; @@ -13,23 +14,12 @@ import static org.nuiton.i18n.I18n.t; * * @author Tony Chemit - chemit@codelutin.com */ -public class InterfaceNode extends NodeSupport<ObjectModelInterfaceImpl> { +public class InterfaceNode extends ClassifierNodeSupport<ObjectModelInterfaceImpl> { - public InterfaceNode(ObjectModelInterfaceImpl objectModelInterface) { - super(objectModelInterface, PROPERTY_NAME); - } - - @Override - public String getName() { - return getUserObject().getName(); - } + private static final String PROPERTY_SUPER_CLASSSES = "superClasses"; - @Override - public void setName(String name) { - String oldValue = getName(); - getUserObject().setName(name); - getUserObject().postInit(); - firePropertyChange(PROPERTY_NAME, oldValue, name); + public InterfaceNode(ObjectModelInterfaceImpl objectModelInterface) { + super(objectModelInterface, ClassifierNodeSupport.PROPERTY_NAME); } @Override @@ -37,17 +27,13 @@ public class InterfaceNode extends NodeSupport<ObjectModelInterfaceImpl> { return t("eugene.editor.new.interface"); } - @Override - public Set<String> getReloadProperties() { - return ImmutableSet.of(PROPERTY_NAME, PROPERTY_MODIFIED); + public List<String> getSuperClasses() { + return getUserObject().getInterfaces().stream().map(ObjectModelInterface::getQualifiedName).collect(Collectors.toList()); } - @Override - public String toString() { - return getName(); - } + public void addSuperClass(String superClassName) { - public void addInterface(String superClassName) { + List<String> oldValue = getSuperClasses(); String[] split = superClassName.split("\\."); @@ -57,9 +43,13 @@ public class InterfaceNode extends NodeSupport<ObjectModelInterfaceImpl> { newInterface.postInit(); getUserObject().getInterfaces().add(newInterface); + firePropertyChange(PROPERTY_SUPER_CLASSSES, oldValue, getSuperClasses()); } - public String getPackageName() { - return getParent().getName(); + public void removeSuperClass(String superClassName) { + List<String> oldValue = getSuperClasses(); + getUserObject().removeInterface(superClassName); + firePropertyChange(PROPERTY_SUPER_CLASSSES, oldValue, getSuperClasses()); } + } diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/ModelNode.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/ModelNode.java index 337a404..73a749d 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/ModelNode.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/ModelNode.java @@ -1,6 +1,5 @@ package org.nuiton.eugene.editor.application.ui.tree.node; -import com.google.common.collect.ImmutableSet; import org.nuiton.eugene.models.object.ObjectModelClass; import org.nuiton.eugene.models.object.ObjectModelEnumeration; import org.nuiton.eugene.models.object.ObjectModelInterface; @@ -11,7 +10,7 @@ import org.nuiton.eugene.models.object.xml.ObjectModelImpl; import org.nuiton.eugene.models.object.xml.ObjectModelInterfaceImpl; import org.nuiton.eugene.models.object.xml.ObjectModelPackageImpl; -import java.util.Set; +import java.util.List; import java.util.stream.Collectors; import static org.nuiton.i18n.I18n.t; @@ -23,6 +22,7 @@ import static org.nuiton.i18n.I18n.t; */ public class ModelNode extends NodeSupport<ObjectModelImpl> { + private static final String PROPERTY_NAME = "name"; public static final String PROPERTY_CLASSES = "classes"; public static final String PROPERTY_INTERFACES = "interfaces"; public static final String PROPERTY_ENUMERATIONS = "enumerations"; @@ -50,11 +50,6 @@ public class ModelNode extends NodeSupport<ObjectModelImpl> { } @Override - public Set<String> getReloadProperties() { - return ImmutableSet.of(PROPERTY_NAME, PROPERTY_MODIFIED); - } - - @Override public String toString() { return getName(); } @@ -63,22 +58,31 @@ public class ModelNode extends NodeSupport<ObjectModelImpl> { super.add(packageNode); } + public List<String> getPackages() { + return getUserObject().getPackages().stream().map(ObjectModelPackage::getName).collect(Collectors.toList()); + } public PackageNode addPackage(String packageName) { ObjectModelPackageImpl newData = new ObjectModelPackageImpl(); newData.setName(""); + List<String> oldValue = getPackages(); getUserObject().addPackage(newData); - firePropertyChange(PROPERTY_PACKAGES, null, getUserObject().getPackages().stream().map(ObjectModelPackage::getName).collect(Collectors.toList())); + firePropertyChange(PROPERTY_PACKAGES, oldValue, getPackages()); PackageNode node = new PackageNode(newData); node.setCreate(true); return node; } public void removePackage(String name) { + List<String> oldValue = getPackages(); getUserObject().removePackage(name); - firePropertyChange(PROPERTY_PACKAGES, null, getUserObject().getPackages().stream().map(ObjectModelPackage::getName).collect(Collectors.toList())); + firePropertyChange(PROPERTY_PACKAGES, oldValue, getPackages()); + } + + public List<String> getClasses() { + return getUserObject().getClasses().stream().map(ObjectModelClass::getName).collect(Collectors.toList()); } public ClassNode addClass(String packageName) { @@ -87,16 +91,22 @@ public class ModelNode extends NodeSupport<ObjectModelImpl> { newData.setName(""); newData.setPackage(packageName); + List<String> oldValue = getClasses(); getUserObject().addClass(newData); - firePropertyChange(PROPERTY_CLASSES, null, getUserObject().getClasses().stream().map(ObjectModelClass::getName).collect(Collectors.toList())); + firePropertyChange(PROPERTY_CLASSES, oldValue, getClasses()); ClassNode node = new ClassNode(newData); node.setCreate(true); return node; } public void removeClass(String qualifiedName) { + List<String> oldValue = getClasses(); getUserObject().removeClass(qualifiedName); - firePropertyChange(PROPERTY_CLASSES, null, getUserObject().getClasses().stream().map(ObjectModelClass::getName).collect(Collectors.toList())); + firePropertyChange(PROPERTY_CLASSES, oldValue, getClasses()); + } + + public List<String> getInterfaces() { + return getUserObject().getInterfaces().stream().map(ObjectModelInterface::getName).collect(Collectors.toList()); } public InterfaceNode addInterface(String packageName) { @@ -105,16 +115,22 @@ public class ModelNode extends NodeSupport<ObjectModelImpl> { newData.setName(""); newData.setPackage(packageName); + List<String> oldValue = getInterfaces(); getUserObject().addInterface(newData); - firePropertyChange(PROPERTY_INTERFACES, null, getUserObject().getInterfaces().stream().map(ObjectModelInterface::getName).collect(Collectors.toList())); + firePropertyChange(PROPERTY_INTERFACES, oldValue, getInterfaces()); InterfaceNode node = new InterfaceNode(newData); node.setCreate(true); return node; } public void removeInterface(String qualifiedName) { + List<String> oldValue = getInterfaces(); getUserObject().removeInterface(qualifiedName); - firePropertyChange(PROPERTY_INTERFACES, null, getUserObject().getInterfaces().stream().map(ObjectModelInterface::getName).collect(Collectors.toList())); + firePropertyChange(PROPERTY_INTERFACES, oldValue, getInterfaces()); + } + + public List<String> getEnumerations() { + return getUserObject().getEnumerations().stream().map(ObjectModelEnumeration::getName).collect(Collectors.toList()); } public EnumerationNode addEnumeration(String packageName) { @@ -122,16 +138,18 @@ public class ModelNode extends NodeSupport<ObjectModelImpl> { newData.setName(""); newData.setPackage(packageName); + List<String> oldValue = getEnumerations(); getUserObject().addEnumeration(newData); - firePropertyChange(PROPERTY_ENUMERATIONS, null, getUserObject().getEnumerations().stream().map(ObjectModelEnumeration::getName).collect(Collectors.toList())); + firePropertyChange(PROPERTY_ENUMERATIONS, oldValue, getEnumerations()); EnumerationNode node = new EnumerationNode(newData); node.setCreate(true); return node; } public void removeEnumeration(String qualifiedName) { + List<String> oldValue = getEnumerations(); getUserObject().removeEnumeration(qualifiedName); - firePropertyChange(PROPERTY_ENUMERATIONS, null, getUserObject().getEnumerations().stream().map(ObjectModelEnumeration::getName).collect(Collectors.toList())); + firePropertyChange(PROPERTY_ENUMERATIONS, oldValue, getEnumerations()); } } diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/NodeSupport.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/NodeSupport.java index c22170f..986db74 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/NodeSupport.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/NodeSupport.java @@ -1,10 +1,12 @@ package org.nuiton.eugene.editor.application.ui.tree.node; +import com.google.common.collect.ImmutableSet; import jaxx.runtime.SwingUtil; import org.apache.commons.lang3.StringUtils; -import org.nuiton.eugene.models.object.xml.ObjectModelAttributeImpl; -import org.nuiton.eugene.models.object.xml.ObjectModelClassifierImpl; -import org.nuiton.eugene.models.object.xml.ObjectModelOperationImpl; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.eugene.models.stereotype.StereotypeAble; +import org.nuiton.eugene.models.tagvalue.TagValueAble; import org.nuiton.util.beans.BeanMonitor; import javax.swing.Icon; @@ -15,6 +17,9 @@ import javax.swing.tree.TreeNode; import java.beans.Introspector; import java.beans.PropertyChangeListener; import java.util.Enumeration; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; import java.util.Objects; import java.util.Set; @@ -23,25 +28,32 @@ import java.util.Set; * * @author Tony Chemit - chemit@codelutin.com */ -public abstract class NodeSupport<M> extends DefaultMutableTreeNode { +public abstract class NodeSupport<M extends StereotypeAble & TagValueAble> extends DefaultMutableTreeNode { + + /** Logger. */ + private static final Log log = LogFactory.getLog(NodeSupport.class); - public static final String PROPERTY_NAME = "name"; public static final String PROPERTY_MODIFIED = "modified"; public static final String PROPERTY_VALID = "valid"; public static final String PROPERTY_CREATE = "create"; + public static final String PROPERTY_STEREOTYPES = "stereotypes"; + public static final String PROPERTY_TAG_VALUES = "tagValues"; protected ImageIcon icon; + protected ImageIcon bigIcon; private boolean create; private boolean modified; private boolean valid; private final SwingPropertyChangeSupport pcs = new SwingPropertyChangeSupport(this); - private final BeanMonitor monitor = new BeanMonitor(); + private final BeanMonitor monitor; + private final Set<String> reloadProperties; - public NodeSupport(M userObject, String... monitorProperties) { + public NodeSupport(M userObject, String... reloadProperties) { super(userObject); + this.reloadProperties = ImmutableSet.<String>builder().add(reloadProperties).add(PROPERTY_MODIFIED).build(); + monitor = new BeanMonitor(true, PROPERTY_MODIFIED); monitor.setBean(this); - monitor.setProperties(monitorProperties); addPropertyChangeListener(evt -> { if (!Objects.equals(NodeSupport.PROPERTY_MODIFIED, evt.getPropertyName())) { setModified(monitor.wasModified()); @@ -61,13 +73,42 @@ public abstract class NodeSupport<M> extends DefaultMutableTreeNode { return icon; } + public Icon getBigIcon() { + if (bigIcon == null) { + bigIcon = SwingUtil.createIcon("type", Introspector.decapitalize(StringUtils.removeEnd(getClass().getSimpleName(), "Node") + "2x")); + } + return icon; + } + public abstract String getName(); public abstract void setName(String name); public abstract String getCreateName(); - public abstract Set<String> getReloadProperties(); + public Set<String> getReloadProperties() { + return reloadProperties; + } + + public Set<String> getStereotypes() { + return getUserObject().getStereotypes(); + } + + public void addStereotype(String stereotype) { + Set<String> oldValue = new HashSet<>(getStereotypes()); + getUserObject().addStereotype(stereotype); + firePropertyChange(PROPERTY_STEREOTYPES, oldValue, getStereotypes()); + } + + public Map<String, String> getTagValues() { + return getUserObject().getTagValues(); + } + + public void addTagValue(String tagValue, String value) { + Map<String, String> oldValue = new HashMap<>(getTagValues()); + getUserObject().addTagValue(tagValue, value); + firePropertyChange(PROPERTY_TAG_VALUES, oldValue, getTagValues()); + } public boolean isCreate() { return create; @@ -154,42 +195,4 @@ public abstract class NodeSupport<M> extends DefaultMutableTreeNode { protected void firePropertyChange(String propertyName, Object oldValue, Object newValue) { pcs.firePropertyChange(propertyName, oldValue, newValue); } - - public AttributeNode addAttribute() { - - ObjectModelAttributeImpl newData = new ObjectModelAttributeImpl(); - newData.setName(""); - - ObjectModelClassifierImpl classifier = (ObjectModelClassifierImpl) getUserObject(); - classifier.addAttribute(newData); - - AttributeNode node = new AttributeNode(newData); - node.setCreate(true); - return node; - } - - public void removeOperation(String name) { - - ObjectModelClassifierImpl classifier = (ObjectModelClassifierImpl) getUserObject(); - classifier.removeOperation(name); - - } - - public void removeAttribute(String name) { - ObjectModelClassifierImpl classifier = (ObjectModelClassifierImpl) getUserObject(); - classifier.removeAttribute(name); - } - - public OperationNode addOperation() { - - ObjectModelOperationImpl newData = new ObjectModelOperationImpl(); - newData.setName(""); - - ObjectModelClassifierImpl classifier = (ObjectModelClassifierImpl) getUserObject(); - classifier.addOperation(newData); - - OperationNode node = new OperationNode(newData); - node.setCreate(true); - return node; - } } diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/OperationNode.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/OperationNode.java index 49a6be2..e8ec815 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/OperationNode.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/OperationNode.java @@ -1,10 +1,12 @@ package org.nuiton.eugene.editor.application.ui.tree.node; -import com.google.common.collect.ImmutableSet; +import org.nuiton.eugene.editor.application.ui.content.Visibility; +import org.nuiton.eugene.models.object.ObjectModelParameter; import org.nuiton.eugene.models.object.xml.ObjectModelOperationImpl; import org.nuiton.eugene.models.object.xml.ObjectModelParameterImpl; -import java.util.Set; +import java.util.ArrayList; +import java.util.List; import static org.nuiton.i18n.I18n.t; @@ -15,12 +17,14 @@ import static org.nuiton.i18n.I18n.t; */ public class OperationNode extends NodeSupport<ObjectModelOperationImpl> { + private static final String PROPERTY_NAME = "name"; private static final String PROPERTY_VISIBILITY = "visibility"; private static final String PROPERTY_RETURN_TYPE = "returnType"; private static final String PROPERTY_ABSTRACT = "abstract"; + private static final String PROPERTY_PARAMETERS = "parameters"; public OperationNode(ObjectModelOperationImpl objectModelAttribute) { - super(objectModelAttribute, PROPERTY_NAME, PROPERTY_ABSTRACT, PROPERTY_RETURN_TYPE); + super(objectModelAttribute, PROPERTY_NAME); } @Override @@ -36,13 +40,13 @@ public class OperationNode extends NodeSupport<ObjectModelOperationImpl> { firePropertyChange(PROPERTY_NAME, oldValue, name); } - public String getVisibility() { - return getUserObject().getVisibility(); + public Visibility getVisibility() { + return Visibility.fromModel(getUserObject().getVisibility()); } - public void setVisibility(String visibility) { - String oldValue = getVisibility(); - getUserObject().setVisibility(visibility); + public void setVisibility(Visibility visibility) { + Visibility oldValue = getVisibility(); + getUserObject().setVisibility(visibility.toModel()); firePropertyChange(PROPERTY_VISIBILITY, oldValue, visibility); } @@ -74,24 +78,27 @@ public class OperationNode extends NodeSupport<ObjectModelOperationImpl> { } @Override - public Set<String> getReloadProperties() { - return ImmutableSet.of(PROPERTY_NAME, PROPERTY_MODIFIED); - } - - @Override public String toString() { return getName(); } - public void removeParameter(String name) { - getUserObject().removeParameter(name); + public List<ObjectModelParameter> getParameters() { + return new ArrayList<>(getUserObject().getParameters()); } public ObjectModelParameterImpl addParameter() { - + Object oldValue = getParameters(); ObjectModelParameterImpl newData = new ObjectModelParameterImpl(); newData.setName(""); getUserObject().addParameter(newData); + firePropertyChange(PROPERTY_PARAMETERS, oldValue, getParameters()); return newData; } + + public void removeParameter(String name) { + + Object oldValue = getParameters(); + getUserObject().removeParameter(name); + firePropertyChange(PROPERTY_PARAMETERS, oldValue, getParameters()); + } } diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/PackageNode.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/PackageNode.java index 457f305..ab556fc 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/PackageNode.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/PackageNode.java @@ -1,10 +1,7 @@ package org.nuiton.eugene.editor.application.ui.tree.node; -import com.google.common.collect.ImmutableSet; import org.nuiton.eugene.models.object.xml.ObjectModelPackageImpl; -import java.util.Set; - import static org.nuiton.i18n.I18n.t; /** @@ -14,6 +11,8 @@ import static org.nuiton.i18n.I18n.t; */ public class PackageNode extends NodeSupport<ObjectModelPackageImpl> { + private static final String PROPERTY_NAME = "name"; + public PackageNode(ObjectModelPackageImpl objectModelPackage) { super(objectModelPackage, PROPERTY_NAME); } @@ -37,11 +36,6 @@ public class PackageNode extends NodeSupport<ObjectModelPackageImpl> { } @Override - public Set<String> getReloadProperties() { - return ImmutableSet.of(PROPERTY_NAME, PROPERTY_MODIFIED); - } - - @Override public String toString() { return getName(); } diff --git a/eugene-editor-maven-plugin/src/main/resources/i18n/eugene-editor-maven-plugin_en_GB.properties b/eugene-editor-maven-plugin/src/main/resources/i18n/eugene-editor-maven-plugin_en_GB.properties index 6281c5d..c97d278 100644 --- a/eugene-editor-maven-plugin/src/main/resources/i18n/eugene-editor-maven-plugin_en_GB.properties +++ b/eugene-editor-maven-plugin/src/main/resources/i18n/eugene-editor-maven-plugin_en_GB.properties @@ -68,6 +68,7 @@ eugene.editor.new.model=New model eugene.editor.new.operation=New operation eugene.editor.new.package=New package eugene.editor.operation=Operation +eugene.editor.operation.abstract=Abstract eugene.editor.operation.name=Name eugene.editor.operation.returnType=Return type eugene.editor.package=Package @@ -81,14 +82,14 @@ eugene.editor.superClass=Super class eugene.editor.superClasses=Super classes eugene.editor.tagValues=Tag values eugene.editor.title.view.navigation=Navigation -eugene.editor.validator.attribute.mandatory.name= -eugene.editor.validator.attribute.mandatory.type= -eugene.editor.validator.enumeration.mandatory.name= -eugene.editor.validator.interface.mandatory.name= -eugene.editor.validator.model.mandatory.name= -eugene.editor.validator.operation.mandatory.name= -eugene.editor.validator.operation.mandatory.type= -eugene.editor.validator.package.mandatory.name= +eugene.editor.validator.attribute.mandatory.name=Name is mandatory. +eugene.editor.validator.attribute.mandatory.type=Type is mandatory. +eugene.editor.validator.enumeration.mandatory.name=Name is mandatory. +eugene.editor.validator.interface.mandatory.name=Name is mandatory. +eugene.editor.validator.model.mandatory.name=Name is mandatory. +eugene.editor.validator.operation.mandatory.name=Name is mandatory. +eugene.editor.validator.operation.mandatory.returnType=Return type is mandatory. +eugene.editor.validator.package.mandatory.name=Name is mandatory. eugene.editor.view.message=Messages eugene.editor.visibility=Visibility eugene.editor.visibility.package=package diff --git a/eugene-editor-maven-plugin/src/main/resources/i18n/eugene-editor-maven-plugin_fr_FR.properties b/eugene-editor-maven-plugin/src/main/resources/i18n/eugene-editor-maven-plugin_fr_FR.properties index 78aa015..d631246 100644 --- a/eugene-editor-maven-plugin/src/main/resources/i18n/eugene-editor-maven-plugin_fr_FR.properties +++ b/eugene-editor-maven-plugin/src/main/resources/i18n/eugene-editor-maven-plugin_fr_FR.properties @@ -20,7 +20,7 @@ eugene.editor.aggregation.aggregate=Aggrège eugene.editor.aggregation.compose=Compose eugene.editor.aggregation.none=Aucun eugene.editor.attribute=Attribut -eugene.editor.attribute.defaultValue=Valuer par défaut +eugene.editor.attribute.defaultValue=Valeur par défaut eugene.editor.attribute.name=Nom eugene.editor.attribute.type=Type eugene.editor.bidi=Bi directionnel @@ -68,6 +68,7 @@ eugene.editor.new.model=Nouveau modèle eugene.editor.new.operation=Nouvelle opération eugene.editor.new.package=Nouveau paquetage eugene.editor.operation=Opération +eugene.editor.operation.abstract=Abstrait eugene.editor.operation.name=Nom eugene.editor.operation.returnType=Type de retour eugene.editor.package=Paquetage @@ -81,14 +82,14 @@ eugene.editor.superClass=Classe parent eugene.editor.superClasses=Classes parent eugene.editor.tagValues=Tag values eugene.editor.title.view.navigation=Navigation -eugene.editor.validator.attribute.mandatory.name= -eugene.editor.validator.attribute.mandatory.type= -eugene.editor.validator.enumeration.mandatory.name= -eugene.editor.validator.interface.mandatory.name= -eugene.editor.validator.model.mandatory.name= -eugene.editor.validator.operation.mandatory.name= -eugene.editor.validator.operation.mandatory.type= -eugene.editor.validator.package.mandatory.name= +eugene.editor.validator.attribute.mandatory.name=Nom obligatoire. +eugene.editor.validator.attribute.mandatory.type=Type obligatoire. +eugene.editor.validator.enumeration.mandatory.name=Nom obligatoire. +eugene.editor.validator.interface.mandatory.name=Nom obligatoire. +eugene.editor.validator.model.mandatory.name=Nom obligatoire. +eugene.editor.validator.operation.mandatory.name=Nom obligatoire. +eugene.editor.validator.operation.mandatory.returnType=Type de retour obligatoire. +eugene.editor.validator.package.mandatory.name=Nom obligatoire. eugene.editor.view.message=Messages eugene.editor.visibility=Visibilité eugene.editor.visibility.package=paquetage diff --git a/eugene-editor-maven-plugin/src/main/resources/icons/action-redo.png b/eugene-editor-maven-plugin/src/main/resources/icons/action-redo.png new file mode 100644 index 0000000..8254518 Binary files /dev/null and b/eugene-editor-maven-plugin/src/main/resources/icons/action-redo.png differ diff --git a/eugene-editor-maven-plugin/src/main/resources/icons/action-rollback.png b/eugene-editor-maven-plugin/src/main/resources/icons/action-rollback.png new file mode 100644 index 0000000..4271001 Binary files /dev/null and b/eugene-editor-maven-plugin/src/main/resources/icons/action-rollback.png differ diff --git a/eugene-editor-maven-plugin/src/main/resources/icons/action-undo.png b/eugene-editor-maven-plugin/src/main/resources/icons/action-undo.png new file mode 100644 index 0000000..c237634 Binary files /dev/null and b/eugene-editor-maven-plugin/src/main/resources/icons/action-undo.png differ diff --git a/eugene-editor-maven-plugin/src/main/resources/icons/type-attribute2x.png b/eugene-editor-maven-plugin/src/main/resources/icons/type-attribute2x.png new file mode 100644 index 0000000..23a3f03 Binary files /dev/null and b/eugene-editor-maven-plugin/src/main/resources/icons/type-attribute2x.png differ diff --git a/eugene-editor-maven-plugin/src/main/resources/icons/type-class2x.png b/eugene-editor-maven-plugin/src/main/resources/icons/type-class2x.png new file mode 100644 index 0000000..c185028 Binary files /dev/null and b/eugene-editor-maven-plugin/src/main/resources/icons/type-class2x.png differ diff --git a/eugene-editor-maven-plugin/src/main/resources/icons/type-enumeration2x.png b/eugene-editor-maven-plugin/src/main/resources/icons/type-enumeration2x.png new file mode 100644 index 0000000..7945a77 Binary files /dev/null and b/eugene-editor-maven-plugin/src/main/resources/icons/type-enumeration2x.png differ diff --git a/eugene-editor-maven-plugin/src/main/resources/icons/type-field.png b/eugene-editor-maven-plugin/src/main/resources/icons/type-field.png new file mode 100644 index 0000000..7c91fcf Binary files /dev/null and b/eugene-editor-maven-plugin/src/main/resources/icons/type-field.png differ diff --git a/eugene-editor-maven-plugin/src/main/resources/icons/type-field2x.png b/eugene-editor-maven-plugin/src/main/resources/icons/type-field2x.png new file mode 100644 index 0000000..f55d6f6 Binary files /dev/null and b/eugene-editor-maven-plugin/src/main/resources/icons/type-field2x.png differ diff --git a/eugene-editor-maven-plugin/src/main/resources/icons/type-interface2x.png b/eugene-editor-maven-plugin/src/main/resources/icons/type-interface2x.png new file mode 100644 index 0000000..fdebfd6 Binary files /dev/null and b/eugene-editor-maven-plugin/src/main/resources/icons/type-interface2x.png differ diff --git a/eugene-editor-maven-plugin/src/main/resources/icons/type-model2x.png b/eugene-editor-maven-plugin/src/main/resources/icons/type-model2x.png new file mode 100644 index 0000000..696f6c6 Binary files /dev/null and b/eugene-editor-maven-plugin/src/main/resources/icons/type-model2x.png differ diff --git a/eugene-editor-maven-plugin/src/main/resources/icons/type-operation2x.png b/eugene-editor-maven-plugin/src/main/resources/icons/type-operation2x.png new file mode 100644 index 0000000..3921232 Binary files /dev/null and b/eugene-editor-maven-plugin/src/main/resources/icons/type-operation2x.png differ diff --git a/eugene-editor-maven-plugin/src/main/resources/icons/type-package2x.png b/eugene-editor-maven-plugin/src/main/resources/icons/type-package2x.png new file mode 100644 index 0000000..e85b674 Binary files /dev/null and b/eugene-editor-maven-plugin/src/main/resources/icons/type-package2x.png differ diff --git a/eugene-editor-maven-plugin/src/main/resources/icons/type-value.png b/eugene-editor-maven-plugin/src/main/resources/icons/type-value.png new file mode 100644 index 0000000..3b6ccb8 Binary files /dev/null and b/eugene-editor-maven-plugin/src/main/resources/icons/type-value.png differ diff --git a/eugene-editor-maven-plugin/src/main/resources/icons/type-value2x.png b/eugene-editor-maven-plugin/src/main/resources/icons/type-value2x.png new file mode 100644 index 0000000..32f913c Binary files /dev/null and b/eugene-editor-maven-plugin/src/main/resources/icons/type-value2x.png differ diff --git a/eugene-editor-maven-plugin/src/main/resources/icons/type-variable.png b/eugene-editor-maven-plugin/src/main/resources/icons/type-variable.png new file mode 100644 index 0000000..074107a Binary files /dev/null and b/eugene-editor-maven-plugin/src/main/resources/icons/type-variable.png differ diff --git a/eugene-editor-maven-plugin/src/main/resources/icons/type-variable2x.png b/eugene-editor-maven-plugin/src/main/resources/icons/type-variable2x.png new file mode 100644 index 0000000..9bff27e Binary files /dev/null and b/eugene-editor-maven-plugin/src/main/resources/icons/type-variable2x.png differ diff --git a/eugene-editor-maven-plugin/src/main/resources/org/nuiton/eugene/editor/application/ui/tree/node/OperationNode-error-validation.xml b/eugene-editor-maven-plugin/src/main/resources/org/nuiton/eugene/editor/application/ui/tree/node/OperationNode-error-validation.xml index f492323..f5e1960 100644 --- a/eugene-editor-maven-plugin/src/main/resources/org/nuiton/eugene/editor/application/ui/tree/node/OperationNode-error-validation.xml +++ b/eugene-editor-maven-plugin/src/main/resources/org/nuiton/eugene/editor/application/ui/tree/node/OperationNode-error-validation.xml @@ -36,7 +36,7 @@ <field name="returnType"> <field-validator type="requiredstring" short-circuit="true"> - <message>eugene.editor.validator.operation.mandatory.type</message> + <message>eugene.editor.validator.operation.mandatory.returnType</message> </field-validator> </field> diff --git a/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelAttributeImpl.java b/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelAttributeImpl.java index 417338b..d79032c 100644 --- a/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelAttributeImpl.java +++ b/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelAttributeImpl.java @@ -112,6 +112,14 @@ public class ObjectModelAttributeImpl extends ObjectModelParameterImpl addOrRemoveModifier(ObjectModelJavaModifier.TRANSIENT, isTransient); } + public void setAggregate(boolean isTransient) { + addOrRemoveModifier(ObjectModelUMLModifier.AGGREGATE, isTransient); + } + + public void setComposite(boolean isTransient) { + addOrRemoveModifier(ObjectModelUMLModifier.COMPOSITE, isTransient); + } + public void setStatic(boolean isStatic) { super.setStatic(isStatic); } diff --git a/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelClassifierImpl.java b/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelClassifierImpl.java index 965b61d..1a66f4c 100644 --- a/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelClassifierImpl.java +++ b/eugene/src/main/java/org/nuiton/eugene/models/object/xml/ObjectModelClassifierImpl.java @@ -302,4 +302,15 @@ public abstract class ObjectModelClassifierImpl extends ObjectModelElementImpl i } } } + + public void removeInterface(String interfaceName) { + Iterator<ObjectModelInterface> iterator = interfaces.iterator(); + while (iterator.hasNext()) { + ObjectModelInterface modelInterface = iterator.next(); + if (interfaceName.equals(modelInterface.getQualifiedName())) { + iterator.remove(); + break; + } + } + } } diff --git a/pom.xml b/pom.xml index c9727ca..ce482c2 100644 --- a/pom.xml +++ b/pom.xml @@ -141,7 +141,7 @@ <ciViewId>Eugene</ciViewId> <processorPluginVersion>1.3</processorPluginVersion> - <nuitonUtilsVersion>3.0-rc-15</nuitonUtilsVersion> + <nuitonUtilsVersion>3.0-SNAPSHOT</nuitonUtilsVersion> <nuitonI18nVersion>3.6.2</nuitonI18nVersion> <plantumlVersion>8047</plantumlVersion> <snakeyamlVersion>1.17</snakeyamlVersion> -- To stop receiving notification emails like this one, please contact nuiton.org SCM administrator <admin+scm@nuiton.org>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/editor in repository eugene. See https://gitlab.nuiton.org/nuiton/eugene.git commit b82259b4755eeadc0b4e028a09c0af4c42f0df1c Author: Tony CHEMIT <chemit@codelutin.com> Date: Mon Sep 26 12:29:09 2016 +0200 Rethink stereotypes and tag values API (See #4042) --- .../EugeneEditorApplicationContext.java | 10 +- .../editor/application/ModelExtensionHelper.java | 167 ++++++++++----------- .../editor/application/ui/ContentUIManager.java | 6 +- .../application/ui/content/ContentUIHandler.java | 28 ++-- .../ui/tree/EugeneEditorTreeSelectionModel.java | 6 +- .../application/ui/tree/node/NodeSupport.java | 6 +- .../eugene/editor/plugin/EugeneEditorMojo.java | 37 +++-- 7 files changed, 130 insertions(+), 130 deletions(-) diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/EugeneEditorApplicationContext.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/EugeneEditorApplicationContext.java index d23a2e9..26d8bc3 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/EugeneEditorApplicationContext.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/EugeneEditorApplicationContext.java @@ -1,9 +1,9 @@ package org.nuiton.eugene.editor.application; import org.nuiton.eugene.editor.application.config.EugeneEditorConfig; +import org.nuiton.eugene.models.extension.stereotype.provider.AggregateStereotypeMetadatasProvider; +import org.nuiton.eugene.models.extension.tagvalue.provider.AggregateTagValueMetadatasProvider; import org.nuiton.eugene.models.object.ObjectModel; -import org.nuiton.eugene.models.stereotype.AggregateStereotypeDefinitionProvider; -import org.nuiton.eugene.models.tagvalue.AggregateTagValueDefinitionProvider; import org.nuiton.i18n.I18n; import org.nuiton.i18n.init.DefaultI18nInitializer; @@ -27,15 +27,15 @@ public class EugeneEditorApplicationContext { public EugeneEditorApplicationContext(EugeneEditorConfig config, ClassLoader classLoader, - AggregateTagValueDefinitionProvider tagValueDefinitionProvider, - AggregateStereotypeDefinitionProvider stereotypeDefinitionProvider, + AggregateTagValueMetadatasProvider tagValueMetadatasProvider, + AggregateStereotypeMetadatasProvider stereotypeMetadatasProvider, ObjectModel objectModel) { I18n.init(new DefaultI18nInitializer("EugeneEditor-i18n"), Locale.FRANCE); this.config = config; this.classLoader = classLoader; - this.modelExtensionHelper = new ModelExtensionHelper(tagValueDefinitionProvider, stereotypeDefinitionProvider); + this.modelExtensionHelper = new ModelExtensionHelper(tagValueMetadatasProvider, stereotypeMetadatasProvider); this.modelHelper = new ModelHelper(objectModel); this.objectModel = objectModel; this.lock = new Object(); diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ModelExtensionHelper.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ModelExtensionHelper.java index a2451b5..ffab245 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ModelExtensionHelper.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ModelExtensionHelper.java @@ -1,5 +1,11 @@ package org.nuiton.eugene.editor.application; +import org.nuiton.eugene.models.extension.stereotype.StereotypeMetadata; +import org.nuiton.eugene.models.extension.stereotype.provider.AggregateStereotypeMetadatasProvider; +import org.nuiton.eugene.models.extension.stereotype.provider.StereotypeMetadatasProvider; +import org.nuiton.eugene.models.extension.tagvalue.TagValueMetadata; +import org.nuiton.eugene.models.extension.tagvalue.provider.AggregateTagValueMetadatasProvider; +import org.nuiton.eugene.models.extension.tagvalue.provider.TagValueMetadatasProvider; import org.nuiton.eugene.models.object.ObjectModel; import org.nuiton.eugene.models.object.ObjectModelAttribute; import org.nuiton.eugene.models.object.ObjectModelClassifier; @@ -7,14 +13,7 @@ import org.nuiton.eugene.models.object.ObjectModelEnumeration; import org.nuiton.eugene.models.object.ObjectModelInterface; import org.nuiton.eugene.models.object.ObjectModelOperation; import org.nuiton.eugene.models.object.ObjectModelPackage; -import org.nuiton.eugene.models.stereotype.AggregateStereotypeDefinitionProvider; -import org.nuiton.eugene.models.stereotype.StereotypeDefinition; -import org.nuiton.eugene.models.stereotype.StereotypeDefinitionProvider; -import org.nuiton.eugene.models.tagvalue.AggregateTagValueDefinitionProvider; -import org.nuiton.eugene.models.tagvalue.TagValueDefinition; -import org.nuiton.eugene.models.tagvalue.TagValueDefinitionProvider; - -import java.util.Arrays; + import java.util.Map; import java.util.Set; import java.util.TreeMap; @@ -27,132 +26,132 @@ import java.util.stream.Collectors; */ public class ModelExtensionHelper { - private final AggregateTagValueDefinitionProvider tagValueDefinitionProvider; - private final AggregateStereotypeDefinitionProvider stereotypeDefinitionProvider; - - private final Map<String, TagValueDefinition> modelTagValues; - private final Map<String, TagValueDefinition> packageTagValues; - private final Map<String, TagValueDefinition> classTagValues; - private final Map<String, TagValueDefinition> interfaceTagValues; - private final Map<String, TagValueDefinition> enumerationTagValues; - private final Map<String, TagValueDefinition> attributeTagValues; - private final Map<String, TagValueDefinition> operationTagValues; - - private final Map<String, StereotypeDefinition> modelStereotypes; - private final Map<String, StereotypeDefinition> packageStereotypes; - private final Map<String, StereotypeDefinition> classStereotypes; - private final Map<String, StereotypeDefinition> interfaceStereotypes; - private final Map<String, StereotypeDefinition> enumerationStereotypes; - private final Map<String, StereotypeDefinition> attributeStereotypes; - private final Map<String, StereotypeDefinition> operationStereotypes; - - public ModelExtensionHelper(AggregateTagValueDefinitionProvider tagValueDefinitionProvider, - AggregateStereotypeDefinitionProvider stereotypeDefinitionProvider) { - this.tagValueDefinitionProvider = tagValueDefinitionProvider; - this.stereotypeDefinitionProvider = stereotypeDefinitionProvider; - this.modelStereotypes = filterStereotypes(stereotypeDefinitionProvider, ObjectModel.class); - this.packageStereotypes = filterStereotypes(stereotypeDefinitionProvider, ObjectModelPackage.class); - this.classStereotypes = filterStereotypes(stereotypeDefinitionProvider, ObjectModelClassifier.class); - this.interfaceStereotypes = filterStereotypes(stereotypeDefinitionProvider, ObjectModelInterface.class); - this.enumerationStereotypes = filterStereotypes(stereotypeDefinitionProvider, ObjectModelEnumeration.class); - this.attributeStereotypes = filterStereotypes(stereotypeDefinitionProvider, ObjectModelAttribute.class); - this.operationStereotypes = filterStereotypes(stereotypeDefinitionProvider, ObjectModelOperation.class); - this.modelTagValues = filterTagValues(tagValueDefinitionProvider, ObjectModel.class); - this.packageTagValues = filterTagValues(tagValueDefinitionProvider, ObjectModelPackage.class); - this.classTagValues = filterTagValues(tagValueDefinitionProvider, ObjectModelClassifier.class); - this.interfaceTagValues = filterTagValues(tagValueDefinitionProvider, ObjectModelInterface.class); - this.enumerationTagValues = filterTagValues(tagValueDefinitionProvider, ObjectModelEnumeration.class); - this.attributeTagValues = filterTagValues(tagValueDefinitionProvider, ObjectModelAttribute.class); - this.operationTagValues = filterTagValues(tagValueDefinitionProvider, ObjectModelOperation.class); - - } - - public AggregateTagValueDefinitionProvider getTagValueDefinitionProvider() { - return tagValueDefinitionProvider; - } - - public AggregateStereotypeDefinitionProvider getStereotypeDefinitionProvider() { - return stereotypeDefinitionProvider; - } - - public Map<String, StereotypeDefinition> getModelStereotypes() { + private final AggregateTagValueMetadatasProvider tagValueMetadatasProvider; + private final AggregateStereotypeMetadatasProvider stereotypeMetadatasProvider; + + private final Map<String, TagValueMetadata> modelTagValues; + private final Map<String, TagValueMetadata> packageTagValues; + private final Map<String, TagValueMetadata> classTagValues; + private final Map<String, TagValueMetadata> interfaceTagValues; + private final Map<String, TagValueMetadata> enumerationTagValues; + private final Map<String, TagValueMetadata> attributeTagValues; + private final Map<String, TagValueMetadata> operationTagValues; + + private final Map<String, StereotypeMetadata> modelStereotypes; + private final Map<String, StereotypeMetadata> packageStereotypes; + private final Map<String, StereotypeMetadata> classStereotypes; + private final Map<String, StereotypeMetadata> interfaceStereotypes; + private final Map<String, StereotypeMetadata> enumerationStereotypes; + private final Map<String, StereotypeMetadata> attributeStereotypes; + private final Map<String, StereotypeMetadata> operationStereotypes; + + public ModelExtensionHelper(AggregateTagValueMetadatasProvider tagValueMetadatasProvider, + AggregateStereotypeMetadatasProvider stereotypeMetadatasProvider) { + this.tagValueMetadatasProvider = tagValueMetadatasProvider; + this.stereotypeMetadatasProvider = stereotypeMetadatasProvider; + this.modelStereotypes = filterStereotypes(stereotypeMetadatasProvider, ObjectModel.class); + this.packageStereotypes = filterStereotypes(stereotypeMetadatasProvider, ObjectModelPackage.class); + this.classStereotypes = filterStereotypes(stereotypeMetadatasProvider, ObjectModelClassifier.class); + this.interfaceStereotypes = filterStereotypes(stereotypeMetadatasProvider, ObjectModelInterface.class); + this.enumerationStereotypes = filterStereotypes(stereotypeMetadatasProvider, ObjectModelEnumeration.class); + this.attributeStereotypes = filterStereotypes(stereotypeMetadatasProvider, ObjectModelAttribute.class); + this.operationStereotypes = filterStereotypes(stereotypeMetadatasProvider, ObjectModelOperation.class); + this.modelTagValues = filterTagValues(tagValueMetadatasProvider, ObjectModel.class); + this.packageTagValues = filterTagValues(tagValueMetadatasProvider, ObjectModelPackage.class); + this.classTagValues = filterTagValues(tagValueMetadatasProvider, ObjectModelClassifier.class); + this.interfaceTagValues = filterTagValues(tagValueMetadatasProvider, ObjectModelInterface.class); + this.enumerationTagValues = filterTagValues(tagValueMetadatasProvider, ObjectModelEnumeration.class); + this.attributeTagValues = filterTagValues(tagValueMetadatasProvider, ObjectModelAttribute.class); + this.operationTagValues = filterTagValues(tagValueMetadatasProvider, ObjectModelOperation.class); + + } + + public AggregateTagValueMetadatasProvider getTagValueMetadatasProvider() { + return tagValueMetadatasProvider; + } + + public AggregateStereotypeMetadatasProvider getStereotypeMetadatasProvider() { + return stereotypeMetadatasProvider; + } + + public Map<String, StereotypeMetadata> getModelStereotypes() { return modelStereotypes; } - public Map<String, StereotypeDefinition> getPackageStereotypes() { + public Map<String, StereotypeMetadata> getPackageStereotypes() { return packageStereotypes; } - public Map<String, StereotypeDefinition> getClassStereotypes() { + public Map<String, StereotypeMetadata> getClassStereotypes() { return classStereotypes; } - public Map<String, StereotypeDefinition> getInterfaceStereotypes() { + public Map<String, StereotypeMetadata> getInterfaceStereotypes() { return interfaceStereotypes; } - public Map<String, StereotypeDefinition> getEnumerationStereotypes() { + public Map<String, StereotypeMetadata> getEnumerationStereotypes() { return enumerationStereotypes; } - public Map<String, StereotypeDefinition> getAttributeStereotypes() { + public Map<String, StereotypeMetadata> getAttributeStereotypes() { return attributeStereotypes; } - public Map<String, StereotypeDefinition> getOperationStereotypes() { + public Map<String, StereotypeMetadata> getOperationStereotypes() { return operationStereotypes; } - public Map<String, TagValueDefinition> getModelTagValues() { + public Map<String, TagValueMetadata> getModelTagValues() { return modelTagValues; } - public Map<String, TagValueDefinition> getPackageTagValues() { + public Map<String, TagValueMetadata> getPackageTagValues() { return packageTagValues; } - public Map<String, TagValueDefinition> getClassTagValues() { + public Map<String, TagValueMetadata> getClassTagValues() { return classTagValues; } - public Map<String, TagValueDefinition> getInterfaceTagValues() { + public Map<String, TagValueMetadata> getInterfaceTagValues() { return interfaceTagValues; } - public Map<String, TagValueDefinition> getEnumerationTagValues() { + public Map<String, TagValueMetadata> getEnumerationTagValues() { return enumerationTagValues; } - public Map<String, TagValueDefinition> getAttributeTagValues() { + public Map<String, TagValueMetadata> getAttributeTagValues() { return attributeTagValues; } - public Map<String, TagValueDefinition> getOperationTagValues() { + public Map<String, TagValueMetadata> getOperationTagValues() { return operationTagValues; } - protected <O> Map<String, StereotypeDefinition> filterStereotypes(AggregateStereotypeDefinitionProvider stereotypeDefinitionProvider, Class<O> type) { + protected <O> Map<String, StereotypeMetadata> filterStereotypes(AggregateStereotypeMetadatasProvider stereotypeMetadatasProvider, Class<O> type) { - Map<String, StereotypeDefinition> allDefinitions = new TreeMap<>(); - for (StereotypeDefinitionProvider definitionProvider : stereotypeDefinitionProvider) { + Map<String, StereotypeMetadata> allDefinitions = new TreeMap<>(); + for (StereotypeMetadatasProvider definitionProvider : stereotypeMetadatasProvider) { - Set<Map.Entry<String, StereotypeDefinition>> definitions = definitionProvider.getDefinition().entrySet().stream() - .filter(d -> Arrays.asList(d.getValue().target()).contains(type)) - .collect(Collectors.toSet()); - definitions.forEach(e -> allDefinitions.put(e.getKey(), e.getValue())); + Set<StereotypeMetadata> definitions = definitionProvider.getStereotypes().stream() + .filter(d -> d.getTargets().contains(type)) + .collect(Collectors.toSet()); + definitions.forEach(e -> allDefinitions.put(e.getName(), e)); } return allDefinitions; } - protected <O> Map<String, TagValueDefinition> filterTagValues(AggregateTagValueDefinitionProvider tagValueDefinitionProvider, Class<O> type) { + protected <O> Map<String, TagValueMetadata> filterTagValues(AggregateTagValueMetadatasProvider tagValueMetadatasProvider, Class<O> type) { - Map<String, TagValueDefinition> allDefinitions = new TreeMap<>(); - for (TagValueDefinitionProvider definitionProvider : tagValueDefinitionProvider) { + Map<String, TagValueMetadata> allDefinitions = new TreeMap<>(); + for (TagValueMetadatasProvider definitionProvider : tagValueMetadatasProvider) { - Set<Map.Entry<String, TagValueDefinition>> definitions = definitionProvider.getDefinition().entrySet().stream() - .filter(d -> Arrays.asList(d.getValue().target()).contains(type)) - .collect(Collectors.toSet()); - definitions.forEach(e -> allDefinitions.put(e.getKey(), e.getValue())); + Set<TagValueMetadata> definitions = definitionProvider.getTagValues().stream() + .filter(d -> d.getTargets().contains(type)) + .collect(Collectors.toSet()); + definitions.forEach(e -> allDefinitions.put(e.getName(), e)); } return allDefinitions; } diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/ContentUIManager.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/ContentUIManager.java index 7089661..69c0a08 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/ContentUIManager.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/ContentUIManager.java @@ -16,8 +16,8 @@ import org.nuiton.eugene.editor.application.ui.tree.node.ModelNode; import org.nuiton.eugene.editor.application.ui.tree.node.NodeSupport; import org.nuiton.eugene.editor.application.ui.tree.node.OperationNode; import org.nuiton.eugene.editor.application.ui.tree.node.PackageNode; -import org.nuiton.eugene.models.stereotype.StereotypeAble; -import org.nuiton.eugene.models.tagvalue.TagValueAble; +import org.nuiton.eugene.models.extension.stereotype.WithStereotypes; +import org.nuiton.eugene.models.extension.tagvalue.WithTagValues; import java.util.Collections; import java.util.Map; @@ -50,7 +50,7 @@ public class ContentUIManager { } - public <M extends StereotypeAble & TagValueAble, N extends NodeSupport<M>> ContentUI<N> getContent(N node) { + public <M extends WithStereotypes & WithTagValues, N extends NodeSupport<M>> ContentUI<N> getContent(N node) { Objects.requireNonNull(node); return contents.get(node.getClass().getName()); } diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ContentUIHandler.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ContentUIHandler.java index a7db6d9..48bd69f 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ContentUIHandler.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ContentUIHandler.java @@ -4,10 +4,10 @@ import jaxx.runtime.SwingUtil; import jaxx.runtime.spi.UIHandler; import org.nuiton.eugene.editor.application.EugeneEditorApplicationContext; import org.nuiton.eugene.editor.application.ui.tree.node.NodeSupport; -import org.nuiton.eugene.models.stereotype.StereotypeAble; -import org.nuiton.eugene.models.stereotype.StereotypeDefinition; -import org.nuiton.eugene.models.tagvalue.TagValueAble; -import org.nuiton.eugene.models.tagvalue.TagValueDefinition; +import org.nuiton.eugene.models.extension.stereotype.StereotypeMetadata; +import org.nuiton.eugene.models.extension.stereotype.WithStereotypes; +import org.nuiton.eugene.models.extension.tagvalue.TagValueMetadata; +import org.nuiton.eugene.models.extension.tagvalue.WithTagValues; import javax.swing.JCheckBox; import javax.swing.JLabel; @@ -20,12 +20,14 @@ import java.util.List; import java.util.Map; import java.util.Set; +import static org.nuiton.i18n.I18n.t; + /** * Created on 16/09/16. * * @author Tony Chemit - chemit@codelutin.com */ -public abstract class ContentUIHandler<X extends StereotypeAble & TagValueAble, M extends NodeSupport<X>, U extends ContentUI<M>> implements UIHandler<U> { +public abstract class ContentUIHandler<X extends WithStereotypes & WithTagValues, M extends NodeSupport<X>, U extends ContentUI<M>> implements UIHandler<U> { protected void open(U ui, M model) { Set<String> stereotypes = model.getStereotypes(); @@ -34,7 +36,7 @@ public abstract class ContentUIHandler<X extends StereotypeAble & TagValueAble, ui.setModel(model); JPanel stereotypesPanel = ui.getStereotypes(); - Map<String, StereotypeDefinition> stereotyps = (Map) stereotypesPanel.getClientProperty("stereotypes"); + Map<String, StereotypeMetadata> stereotyps = (Map) stereotypesPanel.getClientProperty("stereotypes"); if (stereotyps != null) { @@ -57,7 +59,7 @@ public abstract class ContentUIHandler<X extends StereotypeAble & TagValueAble, } JPanel tagValuesPanel = ui.getTagValues(); - Map<String, TagValueDefinition> tags = (Map) tagValuesPanel.getClientProperty("tagValues"); + Map<String, TagValueMetadata> tags = (Map) tagValuesPanel.getClientProperty("tagValues"); if (tags != null) { @@ -84,8 +86,8 @@ public abstract class ContentUIHandler<X extends StereotypeAble & TagValueAble, } protected void afterInit(U ui, - Map<String, TagValueDefinition> availableTagValues, - Map<String, StereotypeDefinition> availableStereotypes) { + Map<String, TagValueMetadata> availableTagValues, + Map<String, StereotypeMetadata> availableStereotypes) { Map<String, Object> $objectMap = ui.get$objectMap(); if (!availableStereotypes.isEmpty()) { @@ -94,11 +96,11 @@ public abstract class ContentUIHandler<X extends StereotypeAble & TagValueAble, stereotypes.putClientProperty("stereotypes", availableStereotypes); stereotypes.setLayout(new GridLayout(1, 0)); stereotypes.removeAll(); - for (Map.Entry<String, StereotypeDefinition> entry : availableStereotypes.entrySet()) { + for (Map.Entry<String, StereotypeMetadata> entry : availableStereotypes.entrySet()) { String stereotype = entry.getKey(); JCheckBox b = new JCheckBox(); b.setText(stereotype); - b.setToolTipText(entry.getValue().documentation()); + b.setToolTipText(t(entry.getValue().getI18nDocumentationKey())); stereotypes.add(b); $objectMap.put("stereotype-" + stereotype, b); } @@ -111,14 +113,14 @@ public abstract class ContentUIHandler<X extends StereotypeAble & TagValueAble, tagValues.setLayout(new GridLayout(0, 2)); tagValues.removeAll(); - for (Map.Entry<String, TagValueDefinition> entry : availableTagValues.entrySet()) { + for (Map.Entry<String, TagValueMetadata> entry : availableTagValues.entrySet()) { JTextField field = new JTextField(); String tagValue = entry.getKey(); JLabel label = new JLabel(tagValue); $objectMap.put("tagValue-" + tagValue, field); - label.setToolTipText(entry.getValue().documentation()); + label.setToolTipText(t(entry.getValue().getI18nDocumentationKey())); label.setLabelFor(field); tagValues.add(label); diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/EugeneEditorTreeSelectionModel.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/EugeneEditorTreeSelectionModel.java index 776baa7..df99538 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/EugeneEditorTreeSelectionModel.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/EugeneEditorTreeSelectionModel.java @@ -4,8 +4,8 @@ import org.nuiton.eugene.editor.application.ui.ContentUIManager; import org.nuiton.eugene.editor.application.ui.EugeneEditorUI; import org.nuiton.eugene.editor.application.ui.content.ContentUI; import org.nuiton.eugene.editor.application.ui.tree.node.NodeSupport; -import org.nuiton.eugene.models.stereotype.StereotypeAble; -import org.nuiton.eugene.models.tagvalue.TagValueAble; +import org.nuiton.eugene.models.extension.stereotype.WithStereotypes; +import org.nuiton.eugene.models.extension.tagvalue.WithTagValues; import javax.swing.JComponent; import javax.swing.JLabel; @@ -81,7 +81,7 @@ public class EugeneEditorTreeSelectionModel extends DefaultTreeSelectionModel { } - protected <M extends StereotypeAble & TagValueAble, N extends NodeSupport<M>> void openNode(N node, ContentUIManager contentUIManager) { + protected <M extends WithStereotypes & WithTagValues, N extends NodeSupport<M>> void openNode(N node, ContentUIManager contentUIManager) { node.removePropertyChangeListener(reloadNodeChangeListener); node.addPropertyChangeListener(reloadNodeChangeListener); diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/NodeSupport.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/NodeSupport.java index 986db74..22df377 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/NodeSupport.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/tree/node/NodeSupport.java @@ -5,8 +5,8 @@ import jaxx.runtime.SwingUtil; import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.nuiton.eugene.models.stereotype.StereotypeAble; -import org.nuiton.eugene.models.tagvalue.TagValueAble; +import org.nuiton.eugene.models.extension.stereotype.WithStereotypes; +import org.nuiton.eugene.models.extension.tagvalue.WithTagValues; import org.nuiton.util.beans.BeanMonitor; import javax.swing.Icon; @@ -28,7 +28,7 @@ import java.util.Set; * * @author Tony Chemit - chemit@codelutin.com */ -public abstract class NodeSupport<M extends StereotypeAble & TagValueAble> extends DefaultMutableTreeNode { +public abstract class NodeSupport<M extends WithStereotypes & WithTagValues> extends DefaultMutableTreeNode { /** Logger. */ private static final Log log = LogFactory.getLog(NodeSupport.class); diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/plugin/EugeneEditorMojo.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/plugin/EugeneEditorMojo.java index 74beda9..823c537 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/plugin/EugeneEditorMojo.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/plugin/EugeneEditorMojo.java @@ -10,20 +10,18 @@ import org.nuiton.eugene.ModelReader; import org.nuiton.eugene.editor.application.EugeneEditorApplicationContext; import org.nuiton.eugene.editor.application.config.EugeneEditorConfig; import org.nuiton.eugene.editor.application.ui.EugeneEditorUI; +import org.nuiton.eugene.models.extension.stereotype.provider.AggregateStereotypeMetadatasProvider; +import org.nuiton.eugene.models.extension.stereotype.provider.StereotypeMetadatasProvider; +import org.nuiton.eugene.models.extension.tagvalue.provider.AggregateTagValueMetadatasProvider; +import org.nuiton.eugene.models.extension.tagvalue.provider.TagValueMetadatasProvider; import org.nuiton.eugene.models.object.ObjectModel; import org.nuiton.eugene.models.object.reader.extension.LoadModelExtension; -import org.nuiton.eugene.models.stereotype.AggregateStereotypeDefinitionProvider; -import org.nuiton.eugene.models.stereotype.StereotypeDefinitionProvider; -import org.nuiton.eugene.models.stereotype.StereotypeDefinitionProviders; -import org.nuiton.eugene.models.tagvalue.AggregateTagValueDefinitionProvider; -import org.nuiton.eugene.models.tagvalue.TagValueDefinitionProvider; -import org.nuiton.eugene.models.tagvalue.TagValueDefinitionProviders; import org.nuiton.plugin.AbstractPlugin; import javax.swing.SwingUtilities; import java.io.File; import java.net.URLClassLoader; -import java.util.Map; +import java.util.Set; /** * Laucnh the editor on models detected in project. @@ -55,18 +53,19 @@ public class EugeneEditorMojo extends AbstractPlugin { /** * All available tag value providers introspects via plexus. */ - @Component(role = TagValueDefinitionProvider.class) - protected Map<String, TagValueDefinitionProvider> tagValueDefinitionProviders; + @Component(role = TagValueMetadatasProvider.class) + protected Set<TagValueMetadatasProvider> tagValueMetadatasProviders; /** * All available stereotype providers introspects via plexus. */ - @Component(role = StereotypeDefinitionProvider.class) - protected Map<String, StereotypeDefinitionProvider> stereotypeDefinitionProviders; + @Component(role = StereotypeMetadatasProvider.class) + protected Set<StereotypeMetadatasProvider> stereotypeMetadatasProviders; + @Component(hint = "xmlobjectmodel") protected ModelReader modelReader; protected ObjectModel model; - protected AggregateTagValueDefinitionProvider tagValueDefinitionProvider; - protected AggregateStereotypeDefinitionProvider stereotypeDefinitionProvider; + protected AggregateTagValueMetadatasProvider tagValueMetadatasProvider; + protected AggregateStereotypeMetadatasProvider stereotypeMetadatasProvider; protected ClassLoader contextClassLoader; protected URLClassLoader classLoader; /** @@ -91,12 +90,12 @@ public class EugeneEditorMojo extends AbstractPlugin { contextClassLoader = Thread.currentThread().getContextClassLoader(); classLoader = initClassLoader(getProject(), generatedSourceDirectory, true, false, false, true, true); - tagValueDefinitionProvider = TagValueDefinitionProviders.newProvider(tagValueDefinitionProviders.values(), verbose); - stereotypeDefinitionProvider = StereotypeDefinitionProviders.newProvider(stereotypeDefinitionProviders.values(), verbose); + tagValueMetadatasProvider = new AggregateTagValueMetadatasProvider(tagValueMetadatasProviders); + stereotypeMetadatasProvider = new AggregateStereotypeMetadatasProvider(stereotypeMetadatasProviders); modelReader.setVerbose(verbose); - modelReader.setTagValueDefinitionProvider(tagValueDefinitionProvider); - modelReader.setStereotypeDefinitionProvider(stereotypeDefinitionProvider); + modelReader.setTagValueMetadatasProvider(tagValueMetadatasProvider); + modelReader.setStereotypeMetadatasProvider(stereotypeMetadatasProvider); File[] files = generatedSourceDirectory.listFiles(f -> f.getName().endsWith(".objectmodel")); if (files != null) { @@ -132,8 +131,8 @@ public class EugeneEditorMojo extends AbstractPlugin { EugeneEditorApplicationContext applicationContext = new EugeneEditorApplicationContext( config, classLoader, - tagValueDefinitionProvider, - stereotypeDefinitionProvider, + tagValueMetadatasProvider, + stereotypeMetadatasProvider, model); JAXXInitialContext ctx = new JAXXInitialContext().add(applicationContext); -- To stop receiving notification emails like this one, please contact nuiton.org SCM administrator <admin+scm@nuiton.org>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/editor in repository eugene. See https://gitlab.nuiton.org/nuiton/eugene.git commit 0fe5926fa96b6b430a4fa60fd2f66d4da0a087d2 Author: Tony CHEMIT <chemit@codelutin.com> Date: Sun Oct 2 19:19:06 2016 +0200 use nuiton-config 3.0 + last stable of jaxx --- eugene-editor-maven-plugin/pom.xml | 46 ++++----- .../src/main/config/EugeneEditor.toml | 11 +++ .../config/EugeneEditorConfigOption.java | 103 --------------------- .../application/ui/content/ContentUIHandler.java | 6 +- .../eugene/editor/plugin/EugeneEditorMojo.java | 11 +-- pom.xml | 28 +++--- 6 files changed, 57 insertions(+), 148 deletions(-) diff --git a/eugene-editor-maven-plugin/pom.xml b/eugene-editor-maven-plugin/pom.xml index 27ecd26..8c2a888 100644 --- a/eugene-editor-maven-plugin/pom.xml +++ b/eugene-editor-maven-plugin/pom.xml @@ -246,14 +246,15 @@ <plugin> <artifactId>maven-plugin-plugin</artifactId> - <configuration> - <skipErrorNoDescriptorsFound>true</skipErrorNoDescriptorsFound> - </configuration> <executions> <execution> + <id>default-descriptor</id> + <phase>process-classes</phase> + </execution> + <execution> + <id>help-goal</id> <goals> <goal>helpmojo</goal> - <goal>descriptor</goal> </goals> </execution> </executions> @@ -265,17 +266,17 @@ <plugins> <!-- expose new plexus components --> - <plugin> - <groupId>org.codehaus.plexus</groupId> - <artifactId>plexus-component-metadata</artifactId> - <executions> - <execution> - <goals> - <goal>generate-metadata</goal> - </goals> - </execution> - </executions> - </plugin> + <!--<plugin>--> + <!--<groupId>org.codehaus.plexus</groupId>--> + <!--<artifactId>plexus-component-metadata</artifactId>--> + <!--<executions>--> + <!--<execution>--> + <!--<goals>--> + <!--<goal>generate-metadata</goal>--> + <!--</goals>--> + <!--</execution>--> + <!--</executions>--> + <!--</plugin>--> <plugin> <groupId>org.codehaus.mojo</groupId> @@ -296,9 +297,8 @@ </plugin> <plugin> - <groupId>${project.groupId}</groupId> - <artifactId>eugene-maven-plugin</artifactId> - <version>${project.version}</version> + <groupId>org.nuiton</groupId> + <artifactId>nuiton-config-maven-plugin</artifactId> <executions> <execution> <phase>generate-sources</phase> @@ -306,9 +306,11 @@ <configuration> <modelName>EugeneEditor</modelName> <packageName>org.nuiton.eugene.editor.application.config</packageName> + <!-- FIXME-tchemit error with m-plugin-p ! find out why. --> + <useNuitonI18n>false</useNuitonI18n> </configuration> <goals> - <goal>generate-config</goal> + <goal>generate</goal> </goals> </execution> </executions> @@ -476,7 +478,9 @@ <executions> <execution> <phase>compile</phase> - <goals><goal>run</goal></goals> + <goals> + <goal>run</goal> + </goals> <configuration> <sourceDirectory>${sourceDirectory}</sourceDirectory> <generatedSourceDirectory>${sourceDirectory}</generatedSourceDirectory> @@ -487,7 +491,7 @@ <dependency> <groupId>org.nuiton.topia</groupId> <artifactId>topia-templates</artifactId> - <version>3.1.3</version> + <version>3.2-SNAPSHOT</version> <scope>compile</scope> </dependency> </dependencies> diff --git a/eugene-editor-maven-plugin/src/main/config/EugeneEditor.toml b/eugene-editor-maven-plugin/src/main/config/EugeneEditor.toml new file mode 100644 index 0000000..229a083 --- /dev/null +++ b/eugene-editor-maven-plugin/src/main/config/EugeneEditor.toml @@ -0,0 +1,11 @@ +description = "eugene.editor.config" +[[options]] +name = "workingDirectory" +key = "eugene.editor.working.directory" +type = "file" +description = "eugene.editor.config.workingDirectory.description" +[[options]] +name = "modelExtensionFile" +key = "eugene.editor.modelExtensionFile" +type = "file" +description = "eugene.editor.config.modelExtensionFile.description" \ No newline at end of file diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/config/EugeneEditorConfigOption.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/config/EugeneEditorConfigOption.java deleted file mode 100644 index 2ce2930..0000000 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/config/EugeneEditorConfigOption.java +++ /dev/null @@ -1,103 +0,0 @@ -package org.nuiton.eugene.editor.application.config; - -import org.nuiton.config.ApplicationConfig; -import org.nuiton.config.ConfigOptionDef; - -import java.io.File; - -import static org.nuiton.i18n.I18n.n; - -/** - * Created on 15/09/16. - * - * @author Tony Chemit - chemit@codelutin.com - */ -public enum EugeneEditorConfigOption implements ConfigOptionDef { - - /** le nom du fichier de configuration (sans le prefix .) */ - CONFIG_FILE( - String.class, ApplicationConfig.CONFIG_FILE_NAME, - n("eugene.editor.config.configFileName.description"), - null - ), - /** le repertoire de stoquage local */ - WORKING_DIRECTORY( - File.class, "eugene.editor.working.directory", - n("eugene.editor.config.workingDirectory.description"), - null - ), - /** le repertoire de stoquage local */ - MODEL_EXTENSION_FILE( - File.class, "eugene.editor.modelExtensionFile", - n("eugene.editor.config.modelExtensionFile.description"), - null - ); - - - /** - * Clef qui represente l'option (c'est celle enregistrée dans le fichier de - * configuration). - */ - protected final String key; - - /** Clef i18n de description de l'option */ - protected final String description; - - /** Type de l'option */ - protected final Class<?> type; - - /** Valeur par défaut de l'option */ - protected String defaultValue; - - EugeneEditorConfigOption(Class<?> type, String key, String description, String defaultValue) { - this.key = key; - this.description = description; - this.type = type; - this.defaultValue = defaultValue; - } - - @Override - public String getKey() { - return key; - } - - @Override - public String getDescription() { - return description; - } - - @Override - public Class<?> getType() { - return type; - } - - @Override - public String getDefaultValue() { - return defaultValue; - } - - @Override - public void setDefaultValue(String defaultValue) { - this.defaultValue = defaultValue; - } - - @Override - public boolean isTransient() { - // pour le moment on ne sauvegarde rien - return true; - } - - @Override - public void setTransient(boolean b) { - } - - @Override - public boolean isFinal() { - return false; - } - - @Override - public void setFinal(boolean b) { - } - -} diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ContentUIHandler.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ContentUIHandler.java index 48bd69f..d77b240 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ContentUIHandler.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/application/ui/content/ContentUIHandler.java @@ -20,8 +20,6 @@ import java.util.List; import java.util.Map; import java.util.Set; -import static org.nuiton.i18n.I18n.t; - /** * Created on 16/09/16. * @@ -100,7 +98,7 @@ public abstract class ContentUIHandler<X extends WithStereotypes & WithTagValues String stereotype = entry.getKey(); JCheckBox b = new JCheckBox(); b.setText(stereotype); - b.setToolTipText(t(entry.getValue().getI18nDocumentationKey())); + b.setToolTipText(entry.getValue().getDescription()); stereotypes.add(b); $objectMap.put("stereotype-" + stereotype, b); } @@ -120,7 +118,7 @@ public abstract class ContentUIHandler<X extends WithStereotypes & WithTagValues String tagValue = entry.getKey(); JLabel label = new JLabel(tagValue); $objectMap.put("tagValue-" + tagValue, field); - label.setToolTipText(t(entry.getValue().getI18nDocumentationKey())); + label.setToolTipText(entry.getValue().getDescription()); label.setLabelFor(field); tagValues.add(label); diff --git a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/plugin/EugeneEditorMojo.java b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/plugin/EugeneEditorMojo.java index 823c537..c8237bd 100644 --- a/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/plugin/EugeneEditorMojo.java +++ b/eugene-editor-maven-plugin/src/main/java/org/nuiton/eugene/editor/plugin/EugeneEditorMojo.java @@ -64,8 +64,6 @@ public class EugeneEditorMojo extends AbstractPlugin { @Component(hint = "xmlobjectmodel") protected ModelReader modelReader; protected ObjectModel model; - protected AggregateTagValueMetadatasProvider tagValueMetadatasProvider; - protected AggregateStereotypeMetadatasProvider stereotypeMetadatasProvider; protected ClassLoader contextClassLoader; protected URLClassLoader classLoader; /** @@ -90,12 +88,7 @@ public class EugeneEditorMojo extends AbstractPlugin { contextClassLoader = Thread.currentThread().getContextClassLoader(); classLoader = initClassLoader(getProject(), generatedSourceDirectory, true, false, false, true, true); - tagValueMetadatasProvider = new AggregateTagValueMetadatasProvider(tagValueMetadatasProviders); - stereotypeMetadatasProvider = new AggregateStereotypeMetadatasProvider(stereotypeMetadatasProviders); - modelReader.setVerbose(verbose); - modelReader.setTagValueMetadatasProvider(tagValueMetadatasProvider); - modelReader.setStereotypeMetadatasProvider(stereotypeMetadatasProvider); File[] files = generatedSourceDirectory.listFiles(f -> f.getName().endsWith(".objectmodel")); if (files != null) { @@ -131,8 +124,8 @@ public class EugeneEditorMojo extends AbstractPlugin { EugeneEditorApplicationContext applicationContext = new EugeneEditorApplicationContext( config, classLoader, - tagValueMetadatasProvider, - stereotypeMetadatasProvider, + new AggregateTagValueMetadatasProvider(tagValueMetadatasProviders), + new AggregateStereotypeMetadatasProvider(stereotypeMetadatasProviders), model); JAXXInitialContext ctx = new JAXXInitialContext().add(applicationContext); diff --git a/pom.xml b/pom.xml index ce482c2..c81df99 100644 --- a/pom.xml +++ b/pom.xml @@ -22,7 +22,8 @@ <http://www.gnu.org/licenses/lgpl-3.0.html>. #L% --> -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> @@ -120,7 +121,6 @@ <modules> <module>eugene</module> - <module>eugene-config-templates</module> <module>eugene-java-templates</module> <module>eugene-plantuml-templates</module> <module>eugene-yaml-templates</module> @@ -141,8 +141,9 @@ <ciViewId>Eugene</ciViewId> <processorPluginVersion>1.3</processorPluginVersion> - <nuitonUtilsVersion>3.0-SNAPSHOT</nuitonUtilsVersion> + <nuitonUtilsVersion>3.0-rc-15</nuitonUtilsVersion> <nuitonI18nVersion>3.6.2</nuitonI18nVersion> + <nuitonConfigVersion>3.0</nuitonConfigVersion> <plantumlVersion>8047</plantumlVersion> <snakeyamlVersion>1.17</snakeyamlVersion> <antlr4Version>4.5</antlr4Version> @@ -154,11 +155,10 @@ <plexusPluginVersion>1.3.8</plexusPluginVersion> <doxiaVersion>1.6</doxiaVersion> <mavenVersion>3.3.9</mavenVersion> - <jaxxVersion>2.33-SNAPSHOT</jaxxVersion> + <jaxxVersion>2.33</jaxxVersion> <i18nVersion>3.6.2</i18nVersion> <swingXVersion>1.6.5-1</swingXVersion> - - <ciViewId>Eugene</ciViewId> + <javaVersion>1.7</javaVersion> <signatureArtifactId>java17</signatureArtifactId> <signatureVersion>1.0</signatureVersion> @@ -218,7 +218,7 @@ <dependency> <groupId>org.nuiton</groupId> <artifactId>nuiton-config</artifactId> - <version>3.0-rc-4</version> + <version>${nuitonConfigVersion}</version> </dependency> <dependency> @@ -587,8 +587,8 @@ </plugin> <plugin> - <groupId>org.nuiton.i18n</groupId> - <artifactId>i18n-maven-plugin</artifactId> + <groupId>org.nuiton.i18n</groupId> + <artifactId>i18n-maven-plugin</artifactId> <version>${i18nVersion}</version> </plugin> <plugin> @@ -597,6 +597,12 @@ <version>${jaxxVersion}</version> </plugin> + <plugin> + <groupId>org.nuiton</groupId> + <artifactId>nuiton-config-maven-plugin</artifactId> + <version>${nuitonConfigVersion}</version> + </plugin> + </plugins> </pluginManagement> <extensions> @@ -633,12 +639,12 @@ <tasks> <copy todir="target/site/xsd/v1" verbose="${maven.verbose}" failonerror="false" overwrite="true"> <fileset dir="${basedir}/eugene/src/main/resources/xsd"> - <include name="**/*.xsd" /> + <include name="**/*.xsd"/> </fileset> </copy> <copy todir="target/site/dtd/v1" verbose="${maven.verbose}" failonerror="false" overwrite="true"> <fileset dir="${basedir}/eugene/src/main/resources/dtd"> - <include name="**/*.dtd" /> + <include name="**/*.dtd"/> </fileset> </copy> </tasks> -- To stop receiving notification emails like this one, please contact nuiton.org SCM administrator <admin+scm@nuiton.org>.
participants (1)
-
nuiton.org scm