diff --git a/README.md b/README.md index be64f0b..ecf741a 100755 --- a/README.md +++ b/README.md @@ -4,13 +4,22 @@

- Domain-Specific Language Implementation for Conceptual Modelling of Relational Databases + Domain-Specific Language (DSL) Implementation for Conceptual Modelling of Relational Databases

-![](https://img.shields.io/github/last-commit/ProjetoDSL/ERDSL?style=for-the-badge) +![](https://img.shields.io/github/last-commit/ProjetoDSL/ERDSL?style=flat-square) +![](https://img.shields.io/badge/Eclipse%20IDE->=2020‑03-blue?style=flat-square) +![](https://img.shields.io/badge/Xtext->=2.17.0-blue?style=flat-square) +![GitHub language count](https://img.shields.io/github/languages/count/ProjetoDSL/ERDSL?color=blue&style=flat-square) +![GitHub top language](https://img.shields.io/github/languages/top/ProjetoDSL/ERDSL?color=blue&style=flat-square) +![Lines of code](https://img.shields.io/tokei/lines/github.com/ProjetoDSL/ERDSL?color=blue&style=flat-square) +![License](https://img.shields.io/github/license/ProjetoDSL/ERDSL?color=blue&style=flat-square) -![](https://img.shields.io/badge/Eclipse%20IDE-2020‑06-yellow) ![](https://img.shields.io/badge/Xtext-2.21.0-blue) +--- + + +ToolOverview --- @@ -18,65 +27,60 @@ gif2 -## Requirements (for development and/or use) ## - -+ Openjdk version "11.0.7" 2020-04-14 - -+ OpenJDK Runtime Environment (build 11.0.7+10-post-Ubuntu-3ubuntu1) +--- -+ OpenJDK 64-Bit Server VM (build 11.0.7+10-post-Ubuntu-3ubuntu1, mixed mode, sharing) -+ Eclipse IDE 2020-03 or newer. +### Recommended Requirements (for development and/or use) ## -+ Xtext 2.17.0 or newer. ++ Openjdk "11.0.7" version or newer; ++ Eclipse IDE 2020-03 version or newer; ++ Xtext 2.17.0 version or newer. --- -## Project Building +### Project Building 1. You can fork the repository, creating your local copy. Forking a repository allows you to freely experiment changes without affecting the original project. -2. Alternatively, you can clone this project directly with a simple command: +1. Alternatively, you can clone this project directly with a simple command: - ```bash + ```zsh $ git clone https://github.com/ProjetoDSL/ERDSL.git ``` -3. To build the project, you need to start the Eclipse IDE and open the directory containing the project. - -4. There will be 5 more subprojects, the majority of the implementation manually made being contained in the subdirectories. +1. To build the project, you need to start the Eclipse IDE and open the directory containing the project. - > /org.xtext.unipampa.erdsl/src/org/xtext/unipampa/erdsl +1. This project is composed of 5 related subprojects. Most of the DSL implementation is in the **org.xtext.unipampa.erdsl** project. This one contains the implementation of grammar, generators and scoping/validations. - > /org.xtext.unipampa.erdsl/src/org/xtext/unipampa/erdsl/generator - > /org.xtext.unipampa.erdsl/src/org/xtext/unipampa/erdsl/scoping +1. The other subprojects are related to testing, UI and IDE modifications. - > /org.xtext.unipampa.erdsl/src/org/xtext/unipampa/erdsl/validation -5. If you want to change some aspect of the grammar of the language, go to: +1. If you want to change any aspect of the language's grammar, go to: > /org.xtext.unipampa.erdsl/src/org/xtext/unipampa/erdsl/ErDsl.xtext - 5.1.After changes or additions, rigth click *ErDsl.xtext* file. + 5.1.After changes, rigth click *ErDsl.xtext* file. 5.2. In the context menu select *Run As* **>>** *Generate Xtext Artifacts*. -6. If you want to change any aspect of the generator responsible for the transformation between the models, go to: +1. If you want to change any aspect of the generators responsible for the transformation between the models, go to: - > /org.xtext.unipampa.erdsl/src/org/xtext/unipampa/erdsl/generator/ErDslGenerator.xtend + > /org.xtext.unipampa.erdsl/src/org/xtext/unipampa/erdsl/generator/ + +1. There are currently 5 implemented generators: A main generator that dispatches the described models to subgenerators. These subgenerators are responsible for creating the supported files (conceptual diagram, textual logical model and SQL for PostgreSQL and MySQL DBMS). -7. To generate the language plugin go to the top bar menu: +1. To generate the language plugin go to the top bar menu: - 7.1. Click in *File* **>>** *Export* . + 1. Click in *File* **>>** *Export* . - 7.2. Type "plugin" in the wizard. + 1. Type "plugin" in the wizard. - 7.3. Select *Deployable plugins and fragments*. + 1. Select *Deployable plugins and fragments*. - 7.4. For the options that appear, generate at least the plug-in for: + 1. For the options that appear, generate at least the plug-in for: > org.xtext.unipampa.erdsl @@ -87,15 +91,16 @@ --- -## Using the Generated Plugin + +### Using the Tool 1. Move the set of generated plugins in your Eclipse's plugin folder (/eclipse/plugins). 2. Open the Eclipse IDE with a new workspace. -3. Start a empty java project. +3. Start a ERtext project. -4. Create a file with the .erdsl extension in *src* directory +4. You can create more than one file with the .erdsl extension in the *src* directory. Anyway, the project wizard automatically creates an empty template file. 5. If asked by IDE if you want to change the view mode to the xtext context, accept. @@ -103,7 +108,7 @@ 7. When you finish your model, see if the IDE validates it and then save. -8. Look at the *src-gen* directory and see the generated .html file, the result of transforming the conceptual model into a logical model. +8. Look in the * src-gen * directory to see the generated files: it is possible to generate a .png diagram representing the conceptual model made (and a .puml file with the description using PlantUML's DSL), a .html file as a logical description , and two SQL files for different DBMSs --- diff --git a/ToolOverview.png b/ToolOverview.png new file mode 100644 index 0000000..f393c2a Binary files /dev/null and b/ToolOverview.png differ diff --git a/org.xtext.unipampa.erdsl.ide/.project b/org.xtext.unipampa.erdsl.ide/.project index 9bcd9d1..78d07e0 100644 --- a/org.xtext.unipampa.erdsl.ide/.project +++ b/org.xtext.unipampa.erdsl.ide/.project @@ -31,4 +31,15 @@ org.eclipse.jdt.core.javanature org.eclipse.pde.PluginNature + + + 1636089992886 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + diff --git a/org.xtext.unipampa.erdsl.ide/bin/org/xtext/unipampa/erdsl/ide/.ErDslIdeModule.xtendbin b/org.xtext.unipampa.erdsl.ide/bin/org/xtext/unipampa/erdsl/ide/.ErDslIdeModule.xtendbin index 23fabf8..5ee5794 100644 Binary files a/org.xtext.unipampa.erdsl.ide/bin/org/xtext/unipampa/erdsl/ide/.ErDslIdeModule.xtendbin and b/org.xtext.unipampa.erdsl.ide/bin/org/xtext/unipampa/erdsl/ide/.ErDslIdeModule.xtendbin differ diff --git a/org.xtext.unipampa.erdsl.ide/bin/org/xtext/unipampa/erdsl/ide/.ErDslIdeSetup.xtendbin b/org.xtext.unipampa.erdsl.ide/bin/org/xtext/unipampa/erdsl/ide/.ErDslIdeSetup.xtendbin index c536360..679b046 100644 Binary files a/org.xtext.unipampa.erdsl.ide/bin/org/xtext/unipampa/erdsl/ide/.ErDslIdeSetup.xtendbin and b/org.xtext.unipampa.erdsl.ide/bin/org/xtext/unipampa/erdsl/ide/.ErDslIdeSetup.xtendbin differ diff --git a/org.xtext.unipampa.erdsl.ide/bin/org/xtext/unipampa/erdsl/ide/ErDslIdeModule.xtend b/org.xtext.unipampa.erdsl.ide/bin/org/xtext/unipampa/erdsl/ide/ErDslIdeModule.xtend new file mode 100644 index 0000000..a18bb9c --- /dev/null +++ b/org.xtext.unipampa.erdsl.ide/bin/org/xtext/unipampa/erdsl/ide/ErDslIdeModule.xtend @@ -0,0 +1,11 @@ +/* + * generated by Xtext 2.25.0 + */ +package org.xtext.unipampa.erdsl.ide + + +/** + * Use this class to register ide components. + */ +class ErDslIdeModule extends AbstractErDslIdeModule { +} diff --git a/org.xtext.unipampa.erdsl.ide/bin/org/xtext/unipampa/erdsl/ide/ErDslIdeSetup.xtend b/org.xtext.unipampa.erdsl.ide/bin/org/xtext/unipampa/erdsl/ide/ErDslIdeSetup.xtend new file mode 100644 index 0000000..88cfa76 --- /dev/null +++ b/org.xtext.unipampa.erdsl.ide/bin/org/xtext/unipampa/erdsl/ide/ErDslIdeSetup.xtend @@ -0,0 +1,20 @@ +/* + * generated by Xtext 2.25.0 + */ +package org.xtext.unipampa.erdsl.ide + +import com.google.inject.Guice +import org.eclipse.xtext.util.Modules2 +import org.xtext.unipampa.erdsl.ErDslRuntimeModule +import org.xtext.unipampa.erdsl.ErDslStandaloneSetup + +/** + * Initialization support for running Xtext languages as language servers. + */ +class ErDslIdeSetup extends ErDslStandaloneSetup { + + override createInjector() { + Guice.createInjector(Modules2.mixin(new ErDslRuntimeModule, new ErDslIdeModule)) + } + +} diff --git a/org.xtext.unipampa.erdsl.ide/xtend-gen/org/xtext/unipampa/erdsl/ide/.ErDslIdeModule.xtendbin b/org.xtext.unipampa.erdsl.ide/xtend-gen/org/xtext/unipampa/erdsl/ide/.ErDslIdeModule.xtendbin index 23fabf8..5ee5794 100644 Binary files a/org.xtext.unipampa.erdsl.ide/xtend-gen/org/xtext/unipampa/erdsl/ide/.ErDslIdeModule.xtendbin and b/org.xtext.unipampa.erdsl.ide/xtend-gen/org/xtext/unipampa/erdsl/ide/.ErDslIdeModule.xtendbin differ diff --git a/org.xtext.unipampa.erdsl.ide/xtend-gen/org/xtext/unipampa/erdsl/ide/.ErDslIdeSetup.xtendbin b/org.xtext.unipampa.erdsl.ide/xtend-gen/org/xtext/unipampa/erdsl/ide/.ErDslIdeSetup.xtendbin index c536360..679b046 100644 Binary files a/org.xtext.unipampa.erdsl.ide/xtend-gen/org/xtext/unipampa/erdsl/ide/.ErDslIdeSetup.xtendbin and b/org.xtext.unipampa.erdsl.ide/xtend-gen/org/xtext/unipampa/erdsl/ide/.ErDslIdeSetup.xtendbin differ diff --git a/org.xtext.unipampa.erdsl.tests/.project b/org.xtext.unipampa.erdsl.tests/.project index cbb1726..999b2e1 100644 --- a/org.xtext.unipampa.erdsl.tests/.project +++ b/org.xtext.unipampa.erdsl.tests/.project @@ -31,4 +31,15 @@ org.eclipse.jdt.core.javanature org.eclipse.pde.PluginNature + + + 1636089992892 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + diff --git a/org.xtext.unipampa.erdsl.tests/test-bin/org/xtext/unipampa/erdsl/tests/.ErDslParsingTest.xtendbin b/org.xtext.unipampa.erdsl.tests/test-bin/org/xtext/unipampa/erdsl/tests/.ErDslParsingTest.xtendbin index 2293f93..eafce86 100644 Binary files a/org.xtext.unipampa.erdsl.tests/test-bin/org/xtext/unipampa/erdsl/tests/.ErDslParsingTest.xtendbin and b/org.xtext.unipampa.erdsl.tests/test-bin/org/xtext/unipampa/erdsl/tests/.ErDslParsingTest.xtendbin differ diff --git a/org.xtext.unipampa.erdsl.tests/xtend-gen/org/xtext/unipampa/erdsl/tests/.ErDslParsingTest.xtendbin b/org.xtext.unipampa.erdsl.tests/xtend-gen/org/xtext/unipampa/erdsl/tests/.ErDslParsingTest.xtendbin index 2293f93..eafce86 100644 Binary files a/org.xtext.unipampa.erdsl.tests/xtend-gen/org/xtext/unipampa/erdsl/tests/.ErDslParsingTest.xtendbin and b/org.xtext.unipampa.erdsl.tests/xtend-gen/org/xtext/unipampa/erdsl/tests/.ErDslParsingTest.xtendbin differ diff --git a/org.xtext.unipampa.erdsl.ui.tests/.project b/org.xtext.unipampa.erdsl.ui.tests/.project index 66c7766..5b0ed84 100644 --- a/org.xtext.unipampa.erdsl.ui.tests/.project +++ b/org.xtext.unipampa.erdsl.ui.tests/.project @@ -31,4 +31,15 @@ org.eclipse.jdt.core.javanature org.eclipse.pde.PluginNature + + + 1636089992903 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + diff --git a/org.xtext.unipampa.erdsl.ui.tests/test-bin/org/xtext/unipampa/erdsl/ui/tests/ErDslUiInjectorProvider.class b/org.xtext.unipampa.erdsl.ui.tests/test-bin/org/xtext/unipampa/erdsl/ui/tests/ErDslUiInjectorProvider.class deleted file mode 100644 index a8d191c..0000000 Binary files a/org.xtext.unipampa.erdsl.ui.tests/test-bin/org/xtext/unipampa/erdsl/ui/tests/ErDslUiInjectorProvider.class and /dev/null differ diff --git a/org.xtext.unipampa.erdsl.ui/.project b/org.xtext.unipampa.erdsl.ui/.project index 0cde272..f77232a 100644 --- a/org.xtext.unipampa.erdsl.ui/.project +++ b/org.xtext.unipampa.erdsl.ui/.project @@ -31,4 +31,15 @@ org.eclipse.jdt.core.javanature org.eclipse.pde.PluginNature + + + 1636089992898 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + diff --git a/org.xtext.unipampa.erdsl.ui/META-INF/MANIFEST.MF b/org.xtext.unipampa.erdsl.ui/META-INF/MANIFEST.MF index 2ea0103..930cda2 100644 --- a/org.xtext.unipampa.erdsl.ui/META-INF/MANIFEST.MF +++ b/org.xtext.unipampa.erdsl.ui/META-INF/MANIFEST.MF @@ -23,7 +23,8 @@ Require-Bundle: org.xtext.unipampa.erdsl, org.eclipse.core.resources, org.eclipse.pde.core, org.eclipse.ui.forms -Import-Package: org.apache.log4j +Import-Package: org.apache.log4j, + org.eclipse.xtext.ui.codemining;resolution:=optional Bundle-RequiredExecutionEnvironment: JavaSE-11 Export-Package: org.xtext.unipampa.erdsl.ui.contentassist, org.xtext.unipampa.erdsl.ui.internal, diff --git a/org.xtext.unipampa.erdsl.ui/bin/org/xtext/unipampa/erdsl/ui/.ErDslUiModule.xtendbin b/org.xtext.unipampa.erdsl.ui/bin/org/xtext/unipampa/erdsl/ui/.ErDslUiModule.xtendbin index 8a560f3..95ef221 100644 Binary files a/org.xtext.unipampa.erdsl.ui/bin/org/xtext/unipampa/erdsl/ui/.ErDslUiModule.xtendbin and b/org.xtext.unipampa.erdsl.ui/bin/org/xtext/unipampa/erdsl/ui/.ErDslUiModule.xtendbin differ diff --git a/org.xtext.unipampa.erdsl.ui/bin/org/xtext/unipampa/erdsl/ui/codemining/.ErDslCodeMiningProvider.java._trace b/org.xtext.unipampa.erdsl.ui/bin/org/xtext/unipampa/erdsl/ui/codemining/.ErDslCodeMiningProvider.java._trace new file mode 100644 index 0000000..6add2ba Binary files /dev/null and b/org.xtext.unipampa.erdsl.ui/bin/org/xtext/unipampa/erdsl/ui/codemining/.ErDslCodeMiningProvider.java._trace differ diff --git a/org.xtext.unipampa.erdsl.ui/bin/org/xtext/unipampa/erdsl/ui/codemining/.ErDslCodeMiningProvider.xtendbin b/org.xtext.unipampa.erdsl.ui/bin/org/xtext/unipampa/erdsl/ui/codemining/.ErDslCodeMiningProvider.xtendbin new file mode 100644 index 0000000..0baa2a8 Binary files /dev/null and b/org.xtext.unipampa.erdsl.ui/bin/org/xtext/unipampa/erdsl/ui/codemining/.ErDslCodeMiningProvider.xtendbin differ diff --git a/org.xtext.unipampa.erdsl.ui/bin/org/xtext/unipampa/erdsl/ui/codemining/ErDslCodeMiningProvider.class b/org.xtext.unipampa.erdsl.ui/bin/org/xtext/unipampa/erdsl/ui/codemining/ErDslCodeMiningProvider.class new file mode 100644 index 0000000..dc7f7fb Binary files /dev/null and b/org.xtext.unipampa.erdsl.ui/bin/org/xtext/unipampa/erdsl/ui/codemining/ErDslCodeMiningProvider.class differ diff --git a/org.xtext.unipampa.erdsl.ui/bin/org/xtext/unipampa/erdsl/ui/codemining/ErDslCodeMiningProvider.xtend b/org.xtext.unipampa.erdsl.ui/bin/org/xtext/unipampa/erdsl/ui/codemining/ErDslCodeMiningProvider.xtend new file mode 100644 index 0000000..0947911 --- /dev/null +++ b/org.xtext.unipampa.erdsl.ui/bin/org/xtext/unipampa/erdsl/ui/codemining/ErDslCodeMiningProvider.xtend @@ -0,0 +1,38 @@ +package org.xtext.unipampa.erdsl.ui.codemining + +import org.eclipse.jface.text.BadLocationException +import org.eclipse.jface.text.IDocument +import org.eclipse.jface.text.codemining.ICodeMining +import org.eclipse.xtext.resource.XtextResource +import org.eclipse.xtext.ui.codemining.AbstractXtextCodeMiningProvider +import org.eclipse.xtext.util.CancelIndicator +import org.eclipse.xtext.util.IAcceptor +import org.xtext.unipampa.erdsl.erDsl.Entity +import org.xtext.unipampa.erdsl.erDsl.ERModel + +class ErDslCodeMiningProvider extends AbstractXtextCodeMiningProvider { + override void createCodeMinings(IDocument document, XtextResource resource, CancelIndicator indicator, + IAcceptor acceptor) throws BadLocationException { + + // TODO: implement me + // use acceptor.accept(super.createNewLineHeaderCodeMining(...)) to add a new code mining to the final list + + +// val modeloER = resource.contents.get(0) as ERModel +// var ent = 0 +// var rel = 0 +// +// for (e : modeloER.entities) { +// ent = ent + 1 +// } +// +// for (e : modeloER.relations) { +// rel = rel + 1 +// } +// +// acceptor.accept(createNewLineHeaderCodeMining(0, document, " There are ["+ ent.toString +"] modeled entity(ies) and ["+ rel.toString +"] relationship(s) ")) +// +// ent = 0 +// rel = 0 + } +} diff --git a/org.xtext.unipampa.erdsl.ui/bin/org/xtext/unipampa/erdsl/ui/contentassist/.ErDslProposalProvider.xtendbin b/org.xtext.unipampa.erdsl.ui/bin/org/xtext/unipampa/erdsl/ui/contentassist/.ErDslProposalProvider.xtendbin index db28ca6..2e86137 100644 Binary files a/org.xtext.unipampa.erdsl.ui/bin/org/xtext/unipampa/erdsl/ui/contentassist/.ErDslProposalProvider.xtendbin and b/org.xtext.unipampa.erdsl.ui/bin/org/xtext/unipampa/erdsl/ui/contentassist/.ErDslProposalProvider.xtendbin differ diff --git a/org.xtext.unipampa.erdsl.ui/bin/org/xtext/unipampa/erdsl/ui/labeling/.ErDslDescriptionLabelProvider.xtendbin b/org.xtext.unipampa.erdsl.ui/bin/org/xtext/unipampa/erdsl/ui/labeling/.ErDslDescriptionLabelProvider.xtendbin index 9d24f9c..199066b 100644 Binary files a/org.xtext.unipampa.erdsl.ui/bin/org/xtext/unipampa/erdsl/ui/labeling/.ErDslDescriptionLabelProvider.xtendbin and b/org.xtext.unipampa.erdsl.ui/bin/org/xtext/unipampa/erdsl/ui/labeling/.ErDslDescriptionLabelProvider.xtendbin differ diff --git a/org.xtext.unipampa.erdsl.ui/bin/org/xtext/unipampa/erdsl/ui/labeling/.ErDslLabelProvider.xtendbin b/org.xtext.unipampa.erdsl.ui/bin/org/xtext/unipampa/erdsl/ui/labeling/.ErDslLabelProvider.xtendbin index 6741e20..041cc9c 100644 Binary files a/org.xtext.unipampa.erdsl.ui/bin/org/xtext/unipampa/erdsl/ui/labeling/.ErDslLabelProvider.xtendbin and b/org.xtext.unipampa.erdsl.ui/bin/org/xtext/unipampa/erdsl/ui/labeling/.ErDslLabelProvider.xtendbin differ diff --git a/org.xtext.unipampa.erdsl.ui/bin/org/xtext/unipampa/erdsl/ui/outline/.ErDslOutlineTreeProvider.xtendbin b/org.xtext.unipampa.erdsl.ui/bin/org/xtext/unipampa/erdsl/ui/outline/.ErDslOutlineTreeProvider.xtendbin index bcf4708..cebe365 100644 Binary files a/org.xtext.unipampa.erdsl.ui/bin/org/xtext/unipampa/erdsl/ui/outline/.ErDslOutlineTreeProvider.xtendbin and b/org.xtext.unipampa.erdsl.ui/bin/org/xtext/unipampa/erdsl/ui/outline/.ErDslOutlineTreeProvider.xtendbin differ diff --git a/org.xtext.unipampa.erdsl.ui/bin/org/xtext/unipampa/erdsl/ui/quickfix/.ErDslQuickfixProvider.xtendbin b/org.xtext.unipampa.erdsl.ui/bin/org/xtext/unipampa/erdsl/ui/quickfix/.ErDslQuickfixProvider.xtendbin index 8543f56..c1d8215 100644 Binary files a/org.xtext.unipampa.erdsl.ui/bin/org/xtext/unipampa/erdsl/ui/quickfix/.ErDslQuickfixProvider.xtendbin and b/org.xtext.unipampa.erdsl.ui/bin/org/xtext/unipampa/erdsl/ui/quickfix/.ErDslQuickfixProvider.xtendbin differ diff --git a/org.xtext.unipampa.erdsl.ui/bin/org/xtext/unipampa/erdsl/ui/wizard/.ERtextFile.java._trace b/org.xtext.unipampa.erdsl.ui/bin/org/xtext/unipampa/erdsl/ui/wizard/.ERtextFile.java._trace index 3fd4bc4..0fc6725 100644 Binary files a/org.xtext.unipampa.erdsl.ui/bin/org/xtext/unipampa/erdsl/ui/wizard/.ERtextFile.java._trace and b/org.xtext.unipampa.erdsl.ui/bin/org/xtext/unipampa/erdsl/ui/wizard/.ERtextFile.java._trace differ diff --git a/org.xtext.unipampa.erdsl.ui/bin/org/xtext/unipampa/erdsl/ui/wizard/.ERtextProject.java._trace b/org.xtext.unipampa.erdsl.ui/bin/org/xtext/unipampa/erdsl/ui/wizard/.ERtextProject.java._trace index 9d0fab0..05aa063 100644 Binary files a/org.xtext.unipampa.erdsl.ui/bin/org/xtext/unipampa/erdsl/ui/wizard/.ERtextProject.java._trace and b/org.xtext.unipampa.erdsl.ui/bin/org/xtext/unipampa/erdsl/ui/wizard/.ERtextProject.java._trace differ diff --git a/org.xtext.unipampa.erdsl.ui/bin/org/xtext/unipampa/erdsl/ui/wizard/.ErDslFileTemplateProvider.xtendbin b/org.xtext.unipampa.erdsl.ui/bin/org/xtext/unipampa/erdsl/ui/wizard/.ErDslFileTemplateProvider.xtendbin index c5c9c84..1e2d641 100644 Binary files a/org.xtext.unipampa.erdsl.ui/bin/org/xtext/unipampa/erdsl/ui/wizard/.ErDslFileTemplateProvider.xtendbin and b/org.xtext.unipampa.erdsl.ui/bin/org/xtext/unipampa/erdsl/ui/wizard/.ErDslFileTemplateProvider.xtendbin differ diff --git a/org.xtext.unipampa.erdsl.ui/bin/org/xtext/unipampa/erdsl/ui/wizard/.ErDslProjectTemplateProvider.xtendbin b/org.xtext.unipampa.erdsl.ui/bin/org/xtext/unipampa/erdsl/ui/wizard/.ErDslProjectTemplateProvider.xtendbin index 33d1e09..68a6d26 100644 Binary files a/org.xtext.unipampa.erdsl.ui/bin/org/xtext/unipampa/erdsl/ui/wizard/.ErDslProjectTemplateProvider.xtendbin and b/org.xtext.unipampa.erdsl.ui/bin/org/xtext/unipampa/erdsl/ui/wizard/.ErDslProjectTemplateProvider.xtendbin differ diff --git a/org.xtext.unipampa.erdsl.ui/bin/org/xtext/unipampa/erdsl/ui/wizard/ERtextFile.class b/org.xtext.unipampa.erdsl.ui/bin/org/xtext/unipampa/erdsl/ui/wizard/ERtextFile.class index e3f24fe..241befa 100644 Binary files a/org.xtext.unipampa.erdsl.ui/bin/org/xtext/unipampa/erdsl/ui/wizard/ERtextFile.class and b/org.xtext.unipampa.erdsl.ui/bin/org/xtext/unipampa/erdsl/ui/wizard/ERtextFile.class differ diff --git a/org.xtext.unipampa.erdsl.ui/bin/org/xtext/unipampa/erdsl/ui/wizard/ERtextProject.class b/org.xtext.unipampa.erdsl.ui/bin/org/xtext/unipampa/erdsl/ui/wizard/ERtextProject.class index 1cd85a0..0563164 100644 Binary files a/org.xtext.unipampa.erdsl.ui/bin/org/xtext/unipampa/erdsl/ui/wizard/ERtextProject.class and b/org.xtext.unipampa.erdsl.ui/bin/org/xtext/unipampa/erdsl/ui/wizard/ERtextProject.class differ diff --git a/org.xtext.unipampa.erdsl.ui/bin/org/xtext/unipampa/erdsl/ui/wizard/ErDslFileTemplateProvider.xtend b/org.xtext.unipampa.erdsl.ui/bin/org/xtext/unipampa/erdsl/ui/wizard/ErDslFileTemplateProvider.xtend index e61a7b2..e69039b 100644 --- a/org.xtext.unipampa.erdsl.ui/bin/org/xtext/unipampa/erdsl/ui/wizard/ErDslFileTemplateProvider.xtend +++ b/org.xtext.unipampa.erdsl.ui/bin/org/xtext/unipampa/erdsl/ui/wizard/ErDslFileTemplateProvider.xtend @@ -24,143 +24,40 @@ class ErDslFileTemplateProvider implements IFileTemplateProvider { // val helloName = combo("Hello Name:", #["Xtext", "World", "Foo", "Bar"], "The name to say 'Hello' to") @FileTemplate(label="ERDSL Template", icon="file_template.png", description="Create a template file for ERDSl.") final class ERtextFile { - val modelName = combo("Template:", #["Hospital_Veterinario", "Empresa_Generica"], "The logical example model") + val modelName = combo("Template:", #["Empty Model"], "The empty model") override generateFiles(IFileGenerator generator) { generator.generate('''«folder»/«name».erdsl''', ''' - «IF modelName.toString.equalsIgnoreCase("Hospital_Veterinario")» + «IF modelName.toString.equalsIgnoreCase("Empty Model")» /* - * This is an example model - */ - - Generate All; - - Domain Hospital_Veterinario; - - Entities { - - Pessoa { - idPessoa int isIdentifier, - telefoneS int, - nome string - } - - Veterinario is total/disjoint Pessoa { - nrVet int, - dtAdmissao datetime, - salario money - } - - Cliente is total/disjoint Pessoa { - cpf int, - email string - } - - Animal { - idAnimal int isIdentifier, - idade int, - porte string, - nome string - } - - Enfermidade { - idEnfermidade int isIdentifier, - nome string, - descricao string - } - - Tratamento { - idTratamento int isIdentifier, - dtInicio datetime, - dtFim datetime - } - - Receita { - idReceita int isIdentifier, - remedio string - } - - }; - - Relationships { - Assistente [Veterinario (0:1) relates (0:N) Veterinario] - Dono [Cliente (1:1) relates (1:N) Animal] - Reponsavel [Veterinario (1:N) relates (0:N) Tratamento] - Possui [Tratamento (1:1) relates (1:1) Receita] - AnimalDoente [Animal (0:N) relates (1:N) Enfermidade] - TratAnimal [AnimalDoente (1:N) relates (1:1) Tratamento] - - }; - - «ELSEIF modelName.toString.equalsIgnoreCase("Empresa_Generica")» - /* - * This is an example model + * The template to demonstrate an overview of the grammar. + * This does not necessarily displays a semantically correct model regarding to the real world. */ Generate All; - Domain Empresa_Generica; + Domain Name; Entities { - - Empregado { - idEmpregado int isIdentifier, - salario money - } - - Contador is total/disjoint Empregado { - crc int - } - - Motorista is total/disjoint Empregado { - cnh int, - veiculo string - } - - Engenheiro is total/disjoint Empregado { - crea int, - areaAtuacao string + Entity1 { + attribute1 int isIdentifier, + attribute2 file + } + + /* The generalization type can be: + * [1] total/disjoint, [2] total/overlapped, [3] partial/disjoint OR [4] partial/overlapped + * + * An entity that specializes another should NOT HAVE an IDENTIFIER attribute, as it inherits from the generalized entity. + */ + Entity2 is total/disjoint Entity1 { + attribute3 string, + attribute4 datetime } - - Departamento { - idDept int isIdentifier, - sigla string - } - - Tipo { - idTipo int isIdentifier, - descricao string - } - - Projeto { - idProjeto int isIdentifier, - descricao string - } - - Materiais { - idMaterial int isIdentifier, - descricao string, - validade string - } - - Fornecedor { - idFornecedor int isIdentifier, - cnpj int, - nomeFantasia string, - telefone int - } - }; Relationships { - Supervisiona [Empregado (0:1) relates (1:N) Empregado] - Desenvolve [Empregado (1:N) relates (0:N) Projeto] - Lotado [Empregado (1:N) relates (0:1) Departamento] - Tem [Departamento (1:1) relates (1:1) Tipo] - Controla [Departamento (1:N) relates (0:N) Projeto] - Fornecimento [Materiais (0:N) relates (1:N) Fornecedor] - ProjFornec [Projeto (1:N) relates (1:N) Fornecimento] + Relationship1 [Entity1 (1:N) relates (1:N) Entity2] {attribute5 int} + Relationship2 [Entity2 (1:N) relates (1:N) Entity1] }; - «ENDIF» ''') } diff --git a/org.xtext.unipampa.erdsl.ui/bin/org/xtext/unipampa/erdsl/ui/wizard/ErDslProjectTemplateProvider.xtend b/org.xtext.unipampa.erdsl.ui/bin/org/xtext/unipampa/erdsl/ui/wizard/ErDslProjectTemplateProvider.xtend index b207547..1ea9cb0 100644 --- a/org.xtext.unipampa.erdsl.ui/bin/org/xtext/unipampa/erdsl/ui/wizard/ErDslProjectTemplateProvider.xtend +++ b/org.xtext.unipampa.erdsl.ui/bin/org/xtext/unipampa/erdsl/ui/wizard/ErDslProjectTemplateProvider.xtend @@ -25,13 +25,13 @@ class ErDslProjectTemplateProvider implements IProjectTemplateProvider { } } -@ProjectTemplate(label="org.project.ertext.template", icon="project_template.png", description="

ERtext TEMPLATE

-

This is a parameterized template for ERtext. You can set a parameter to modify the content in the generated file and a parameter +@ProjectTemplate(label="org.project.ertext.template", icon="project_template.png", description="

ERtext Project Template

+

This is a parameterized project template for ERtext. You can set a parameter to modify the content in the generated file and a parameter to set the package the file is created in.

") final class ERtextProject { val advanced = check("Advanced:", false) val advancedGroup = group("Properties") - val name = combo("Name:", #["Xtext", "World", "Foo", "Bar"], "The name to say 'Hello' to", advancedGroup) + val name = combo("Name:", #["Xtext"], "Xtext:", advancedGroup) val path = text("Package:", "ERtext", "The package path to place the files in", advancedGroup) override protected updateVariables() { @@ -58,67 +58,36 @@ final class ERtextProject { projectNatures += #[XtextProjectHelper.NATURE_ID] builderIds += #[JavaCore.BUILDER_ID, XtextProjectHelper.BUILDER_ID] folders += "src" - addFile('''src/Blank_Model.erdsl''', ''' + addFile('''src/TemplateModel.erdsl''', ''' /* - * Hello new user! - * - * This is an example model - */ - + * The template to demonstrate an overview of the grammar. + * This does not necessarily displays a semantically correct model regarding to the real world. + */ + Generate All; - Domain The_Employees_Sample_Schema; + Domain Name; Entities { - - Person { - person_no int isIdentifier, - gender boolean - } - - Employee is total/overlapped Person { - emp_no int isIdentifier, - birth_dt datetime, - first_name string, - last_name string, - hire_dt datetime - } - - Dependent is total/overlapped Person { - dependent_no int isIdentifier, - first_name string, - last_name string - } - - Salary { - salary_no int isIdentifier, - salary money, - from_dt datetime, - to_dt datetime - } - - Departament { - dept_no int isIdentifier, - name string, - goals_description string + Entity1 { + attribute1 int isIdentifier, + attribute2 file } - - Title { - title_no int isIdentifier, - name string, - description string, - from_dt datetime, - to_dt datetime + + /* The generalization type can be: + * [1] total/disjoint, [2] total/overlapped, [3] partial/disjoint OR [4] partial/overlapped + * + * An entity that specializes another should NOT HAVE an IDENTIFIER attribute, as it inherits from the generalized entity. + */ + Entity2 is total/disjoint Entity1 { + attribute3 string, + attribute4 datetime } - }; Relationships { - Dept_manager [Employee (1:N) relates (1:N) Departament] {from_dt datetime, to_dt datetime} - Dept_emp [Employee (1:N) relates (1:N) Departament] {from_dt datetime, to_dt datetime} - Payment [Salary (1:N) relates (1:1) Employee] - JobTitle [Title (1:N) relates (1:1) Employee] - Dependency [Employee (1:1) relates (1:N) Dependent] + Relationship1 [Entity1 (1:N) relates (1:N) Entity2] {attribute5 int} + Relationship2 [Entity2 (1:N) relates (1:N) Entity1] }; ''') ]) diff --git a/org.xtext.unipampa.erdsl.ui/bin/org/xtext/unipampa/erdsl/ui/wizard/messages.properties b/org.xtext.unipampa.erdsl.ui/bin/org/xtext/unipampa/erdsl/ui/wizard/messages.properties index 5916d6a..869a50d 100644 --- a/org.xtext.unipampa.erdsl.ui/bin/org/xtext/unipampa/erdsl/ui/wizard/messages.properties +++ b/org.xtext.unipampa.erdsl.ui/bin/org/xtext/unipampa/erdsl/ui/wizard/messages.properties @@ -1,4 +1,4 @@ ERtextFile_Label=ERDSL Template ERtextFile_Description=Create a template file for ERDSl. ERtextProject_Label=org.project.ertext.template -ERtextProject_Description=

ERtext TEMPLATE

This is a parameterized template for ERtext. You can set a parameter to modify the content in the generated file and a parameter to set the package the file is created in.

+ERtextProject_Description=

ERtext Project Template

This is a parameterized project template for ERtext. You can set a parameter to modify the content in the generated file and a parameter to set the package the file is created in.

diff --git a/org.xtext.unipampa.erdsl.ui/plugin.xml b/org.xtext.unipampa.erdsl.ui/plugin.xml index 3500fc4..76ac1bc 100644 --- a/org.xtext.unipampa.erdsl.ui/plugin.xml +++ b/org.xtext.unipampa.erdsl.ui/plugin.xml @@ -532,4 +532,22 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/org.xtext.unipampa.erdsl.ui/src/org/xtext/unipampa/erdsl/ui/codemining/ErDslCodeMiningProvider.xtend b/org.xtext.unipampa.erdsl.ui/src/org/xtext/unipampa/erdsl/ui/codemining/ErDslCodeMiningProvider.xtend new file mode 100644 index 0000000..0947911 --- /dev/null +++ b/org.xtext.unipampa.erdsl.ui/src/org/xtext/unipampa/erdsl/ui/codemining/ErDslCodeMiningProvider.xtend @@ -0,0 +1,38 @@ +package org.xtext.unipampa.erdsl.ui.codemining + +import org.eclipse.jface.text.BadLocationException +import org.eclipse.jface.text.IDocument +import org.eclipse.jface.text.codemining.ICodeMining +import org.eclipse.xtext.resource.XtextResource +import org.eclipse.xtext.ui.codemining.AbstractXtextCodeMiningProvider +import org.eclipse.xtext.util.CancelIndicator +import org.eclipse.xtext.util.IAcceptor +import org.xtext.unipampa.erdsl.erDsl.Entity +import org.xtext.unipampa.erdsl.erDsl.ERModel + +class ErDslCodeMiningProvider extends AbstractXtextCodeMiningProvider { + override void createCodeMinings(IDocument document, XtextResource resource, CancelIndicator indicator, + IAcceptor acceptor) throws BadLocationException { + + // TODO: implement me + // use acceptor.accept(super.createNewLineHeaderCodeMining(...)) to add a new code mining to the final list + + +// val modeloER = resource.contents.get(0) as ERModel +// var ent = 0 +// var rel = 0 +// +// for (e : modeloER.entities) { +// ent = ent + 1 +// } +// +// for (e : modeloER.relations) { +// rel = rel + 1 +// } +// +// acceptor.accept(createNewLineHeaderCodeMining(0, document, " There are ["+ ent.toString +"] modeled entity(ies) and ["+ rel.toString +"] relationship(s) ")) +// +// ent = 0 +// rel = 0 + } +} diff --git a/org.xtext.unipampa.erdsl.ui/src/org/xtext/unipampa/erdsl/ui/wizard/ErDslFileTemplateProvider.xtend b/org.xtext.unipampa.erdsl.ui/src/org/xtext/unipampa/erdsl/ui/wizard/ErDslFileTemplateProvider.xtend index e61a7b2..e69039b 100644 --- a/org.xtext.unipampa.erdsl.ui/src/org/xtext/unipampa/erdsl/ui/wizard/ErDslFileTemplateProvider.xtend +++ b/org.xtext.unipampa.erdsl.ui/src/org/xtext/unipampa/erdsl/ui/wizard/ErDslFileTemplateProvider.xtend @@ -24,143 +24,40 @@ class ErDslFileTemplateProvider implements IFileTemplateProvider { // val helloName = combo("Hello Name:", #["Xtext", "World", "Foo", "Bar"], "The name to say 'Hello' to") @FileTemplate(label="ERDSL Template", icon="file_template.png", description="Create a template file for ERDSl.") final class ERtextFile { - val modelName = combo("Template:", #["Hospital_Veterinario", "Empresa_Generica"], "The logical example model") + val modelName = combo("Template:", #["Empty Model"], "The empty model") override generateFiles(IFileGenerator generator) { generator.generate('''«folder»/«name».erdsl''', ''' - «IF modelName.toString.equalsIgnoreCase("Hospital_Veterinario")» + «IF modelName.toString.equalsIgnoreCase("Empty Model")» /* - * This is an example model - */ - - Generate All; - - Domain Hospital_Veterinario; - - Entities { - - Pessoa { - idPessoa int isIdentifier, - telefoneS int, - nome string - } - - Veterinario is total/disjoint Pessoa { - nrVet int, - dtAdmissao datetime, - salario money - } - - Cliente is total/disjoint Pessoa { - cpf int, - email string - } - - Animal { - idAnimal int isIdentifier, - idade int, - porte string, - nome string - } - - Enfermidade { - idEnfermidade int isIdentifier, - nome string, - descricao string - } - - Tratamento { - idTratamento int isIdentifier, - dtInicio datetime, - dtFim datetime - } - - Receita { - idReceita int isIdentifier, - remedio string - } - - }; - - Relationships { - Assistente [Veterinario (0:1) relates (0:N) Veterinario] - Dono [Cliente (1:1) relates (1:N) Animal] - Reponsavel [Veterinario (1:N) relates (0:N) Tratamento] - Possui [Tratamento (1:1) relates (1:1) Receita] - AnimalDoente [Animal (0:N) relates (1:N) Enfermidade] - TratAnimal [AnimalDoente (1:N) relates (1:1) Tratamento] - - }; - - «ELSEIF modelName.toString.equalsIgnoreCase("Empresa_Generica")» - /* - * This is an example model + * The template to demonstrate an overview of the grammar. + * This does not necessarily displays a semantically correct model regarding to the real world. */ Generate All; - Domain Empresa_Generica; + Domain Name; Entities { - - Empregado { - idEmpregado int isIdentifier, - salario money - } - - Contador is total/disjoint Empregado { - crc int - } - - Motorista is total/disjoint Empregado { - cnh int, - veiculo string - } - - Engenheiro is total/disjoint Empregado { - crea int, - areaAtuacao string + Entity1 { + attribute1 int isIdentifier, + attribute2 file + } + + /* The generalization type can be: + * [1] total/disjoint, [2] total/overlapped, [3] partial/disjoint OR [4] partial/overlapped + * + * An entity that specializes another should NOT HAVE an IDENTIFIER attribute, as it inherits from the generalized entity. + */ + Entity2 is total/disjoint Entity1 { + attribute3 string, + attribute4 datetime } - - Departamento { - idDept int isIdentifier, - sigla string - } - - Tipo { - idTipo int isIdentifier, - descricao string - } - - Projeto { - idProjeto int isIdentifier, - descricao string - } - - Materiais { - idMaterial int isIdentifier, - descricao string, - validade string - } - - Fornecedor { - idFornecedor int isIdentifier, - cnpj int, - nomeFantasia string, - telefone int - } - }; Relationships { - Supervisiona [Empregado (0:1) relates (1:N) Empregado] - Desenvolve [Empregado (1:N) relates (0:N) Projeto] - Lotado [Empregado (1:N) relates (0:1) Departamento] - Tem [Departamento (1:1) relates (1:1) Tipo] - Controla [Departamento (1:N) relates (0:N) Projeto] - Fornecimento [Materiais (0:N) relates (1:N) Fornecedor] - ProjFornec [Projeto (1:N) relates (1:N) Fornecimento] + Relationship1 [Entity1 (1:N) relates (1:N) Entity2] {attribute5 int} + Relationship2 [Entity2 (1:N) relates (1:N) Entity1] }; - «ENDIF» ''') } diff --git a/org.xtext.unipampa.erdsl.ui/src/org/xtext/unipampa/erdsl/ui/wizard/ErDslProjectTemplateProvider.xtend b/org.xtext.unipampa.erdsl.ui/src/org/xtext/unipampa/erdsl/ui/wizard/ErDslProjectTemplateProvider.xtend index b207547..1ea9cb0 100644 --- a/org.xtext.unipampa.erdsl.ui/src/org/xtext/unipampa/erdsl/ui/wizard/ErDslProjectTemplateProvider.xtend +++ b/org.xtext.unipampa.erdsl.ui/src/org/xtext/unipampa/erdsl/ui/wizard/ErDslProjectTemplateProvider.xtend @@ -25,13 +25,13 @@ class ErDslProjectTemplateProvider implements IProjectTemplateProvider { } } -@ProjectTemplate(label="org.project.ertext.template", icon="project_template.png", description="

ERtext TEMPLATE

-

This is a parameterized template for ERtext. You can set a parameter to modify the content in the generated file and a parameter +@ProjectTemplate(label="org.project.ertext.template", icon="project_template.png", description="

ERtext Project Template

+

This is a parameterized project template for ERtext. You can set a parameter to modify the content in the generated file and a parameter to set the package the file is created in.

") final class ERtextProject { val advanced = check("Advanced:", false) val advancedGroup = group("Properties") - val name = combo("Name:", #["Xtext", "World", "Foo", "Bar"], "The name to say 'Hello' to", advancedGroup) + val name = combo("Name:", #["Xtext"], "Xtext:", advancedGroup) val path = text("Package:", "ERtext", "The package path to place the files in", advancedGroup) override protected updateVariables() { @@ -58,67 +58,36 @@ final class ERtextProject { projectNatures += #[XtextProjectHelper.NATURE_ID] builderIds += #[JavaCore.BUILDER_ID, XtextProjectHelper.BUILDER_ID] folders += "src" - addFile('''src/Blank_Model.erdsl''', ''' + addFile('''src/TemplateModel.erdsl''', ''' /* - * Hello new user! - * - * This is an example model - */ - + * The template to demonstrate an overview of the grammar. + * This does not necessarily displays a semantically correct model regarding to the real world. + */ + Generate All; - Domain The_Employees_Sample_Schema; + Domain Name; Entities { - - Person { - person_no int isIdentifier, - gender boolean - } - - Employee is total/overlapped Person { - emp_no int isIdentifier, - birth_dt datetime, - first_name string, - last_name string, - hire_dt datetime - } - - Dependent is total/overlapped Person { - dependent_no int isIdentifier, - first_name string, - last_name string - } - - Salary { - salary_no int isIdentifier, - salary money, - from_dt datetime, - to_dt datetime - } - - Departament { - dept_no int isIdentifier, - name string, - goals_description string + Entity1 { + attribute1 int isIdentifier, + attribute2 file } - - Title { - title_no int isIdentifier, - name string, - description string, - from_dt datetime, - to_dt datetime + + /* The generalization type can be: + * [1] total/disjoint, [2] total/overlapped, [3] partial/disjoint OR [4] partial/overlapped + * + * An entity that specializes another should NOT HAVE an IDENTIFIER attribute, as it inherits from the generalized entity. + */ + Entity2 is total/disjoint Entity1 { + attribute3 string, + attribute4 datetime } - }; Relationships { - Dept_manager [Employee (1:N) relates (1:N) Departament] {from_dt datetime, to_dt datetime} - Dept_emp [Employee (1:N) relates (1:N) Departament] {from_dt datetime, to_dt datetime} - Payment [Salary (1:N) relates (1:1) Employee] - JobTitle [Title (1:N) relates (1:1) Employee] - Dependency [Employee (1:1) relates (1:N) Dependent] + Relationship1 [Entity1 (1:N) relates (1:N) Entity2] {attribute5 int} + Relationship2 [Entity2 (1:N) relates (1:N) Entity1] }; ''') ]) diff --git a/org.xtext.unipampa.erdsl.ui/src/org/xtext/unipampa/erdsl/ui/wizard/messages.properties b/org.xtext.unipampa.erdsl.ui/src/org/xtext/unipampa/erdsl/ui/wizard/messages.properties index 5916d6a..869a50d 100644 --- a/org.xtext.unipampa.erdsl.ui/src/org/xtext/unipampa/erdsl/ui/wizard/messages.properties +++ b/org.xtext.unipampa.erdsl.ui/src/org/xtext/unipampa/erdsl/ui/wizard/messages.properties @@ -1,4 +1,4 @@ ERtextFile_Label=ERDSL Template ERtextFile_Description=Create a template file for ERDSl. ERtextProject_Label=org.project.ertext.template -ERtextProject_Description=

ERtext TEMPLATE

This is a parameterized template for ERtext. You can set a parameter to modify the content in the generated file and a parameter to set the package the file is created in.

+ERtextProject_Description=

ERtext Project Template

This is a parameterized project template for ERtext. You can set a parameter to modify the content in the generated file and a parameter to set the package the file is created in.

diff --git a/org.xtext.unipampa.erdsl.ui/xtend-gen/org/xtext/unipampa/erdsl/ui/.ErDslUiModule.xtendbin b/org.xtext.unipampa.erdsl.ui/xtend-gen/org/xtext/unipampa/erdsl/ui/.ErDslUiModule.xtendbin index 8a560f3..95ef221 100644 Binary files a/org.xtext.unipampa.erdsl.ui/xtend-gen/org/xtext/unipampa/erdsl/ui/.ErDslUiModule.xtendbin and b/org.xtext.unipampa.erdsl.ui/xtend-gen/org/xtext/unipampa/erdsl/ui/.ErDslUiModule.xtendbin differ diff --git a/org.xtext.unipampa.erdsl.ui/xtend-gen/org/xtext/unipampa/erdsl/ui/codemining/.ErDslCodeMiningProvider.java._trace b/org.xtext.unipampa.erdsl.ui/xtend-gen/org/xtext/unipampa/erdsl/ui/codemining/.ErDslCodeMiningProvider.java._trace new file mode 100644 index 0000000..6add2ba Binary files /dev/null and b/org.xtext.unipampa.erdsl.ui/xtend-gen/org/xtext/unipampa/erdsl/ui/codemining/.ErDslCodeMiningProvider.java._trace differ diff --git a/org.xtext.unipampa.erdsl.ui/xtend-gen/org/xtext/unipampa/erdsl/ui/codemining/.ErDslCodeMiningProvider.xtendbin b/org.xtext.unipampa.erdsl.ui/xtend-gen/org/xtext/unipampa/erdsl/ui/codemining/.ErDslCodeMiningProvider.xtendbin new file mode 100644 index 0000000..0baa2a8 Binary files /dev/null and b/org.xtext.unipampa.erdsl.ui/xtend-gen/org/xtext/unipampa/erdsl/ui/codemining/.ErDslCodeMiningProvider.xtendbin differ diff --git a/org.xtext.unipampa.erdsl.ui/xtend-gen/org/xtext/unipampa/erdsl/ui/codemining/ErDslCodeMiningProvider.java b/org.xtext.unipampa.erdsl.ui/xtend-gen/org/xtext/unipampa/erdsl/ui/codemining/ErDslCodeMiningProvider.java new file mode 100644 index 0000000..e0f8727 --- /dev/null +++ b/org.xtext.unipampa.erdsl.ui/xtend-gen/org/xtext/unipampa/erdsl/ui/codemining/ErDslCodeMiningProvider.java @@ -0,0 +1,16 @@ +package org.xtext.unipampa.erdsl.ui.codemining; + +import org.eclipse.jface.text.BadLocationException; +import org.eclipse.jface.text.IDocument; +import org.eclipse.jface.text.codemining.ICodeMining; +import org.eclipse.xtext.resource.XtextResource; +import org.eclipse.xtext.ui.codemining.AbstractXtextCodeMiningProvider; +import org.eclipse.xtext.util.CancelIndicator; +import org.eclipse.xtext.util.IAcceptor; + +@SuppressWarnings("all") +public class ErDslCodeMiningProvider extends AbstractXtextCodeMiningProvider { + @Override + public void createCodeMinings(final IDocument document, final XtextResource resource, final CancelIndicator indicator, final IAcceptor acceptor) throws BadLocationException { + } +} diff --git a/org.xtext.unipampa.erdsl.ui/xtend-gen/org/xtext/unipampa/erdsl/ui/contentassist/.ErDslProposalProvider.xtendbin b/org.xtext.unipampa.erdsl.ui/xtend-gen/org/xtext/unipampa/erdsl/ui/contentassist/.ErDslProposalProvider.xtendbin index db28ca6..2e86137 100644 Binary files a/org.xtext.unipampa.erdsl.ui/xtend-gen/org/xtext/unipampa/erdsl/ui/contentassist/.ErDslProposalProvider.xtendbin and b/org.xtext.unipampa.erdsl.ui/xtend-gen/org/xtext/unipampa/erdsl/ui/contentassist/.ErDslProposalProvider.xtendbin differ diff --git a/org.xtext.unipampa.erdsl.ui/xtend-gen/org/xtext/unipampa/erdsl/ui/labeling/.ErDslDescriptionLabelProvider.xtendbin b/org.xtext.unipampa.erdsl.ui/xtend-gen/org/xtext/unipampa/erdsl/ui/labeling/.ErDslDescriptionLabelProvider.xtendbin index 9d24f9c..199066b 100644 Binary files a/org.xtext.unipampa.erdsl.ui/xtend-gen/org/xtext/unipampa/erdsl/ui/labeling/.ErDslDescriptionLabelProvider.xtendbin and b/org.xtext.unipampa.erdsl.ui/xtend-gen/org/xtext/unipampa/erdsl/ui/labeling/.ErDslDescriptionLabelProvider.xtendbin differ diff --git a/org.xtext.unipampa.erdsl.ui/xtend-gen/org/xtext/unipampa/erdsl/ui/labeling/.ErDslLabelProvider.xtendbin b/org.xtext.unipampa.erdsl.ui/xtend-gen/org/xtext/unipampa/erdsl/ui/labeling/.ErDslLabelProvider.xtendbin index 6741e20..041cc9c 100644 Binary files a/org.xtext.unipampa.erdsl.ui/xtend-gen/org/xtext/unipampa/erdsl/ui/labeling/.ErDslLabelProvider.xtendbin and b/org.xtext.unipampa.erdsl.ui/xtend-gen/org/xtext/unipampa/erdsl/ui/labeling/.ErDslLabelProvider.xtendbin differ diff --git a/org.xtext.unipampa.erdsl.ui/xtend-gen/org/xtext/unipampa/erdsl/ui/outline/.ErDslOutlineTreeProvider.xtendbin b/org.xtext.unipampa.erdsl.ui/xtend-gen/org/xtext/unipampa/erdsl/ui/outline/.ErDslOutlineTreeProvider.xtendbin index bcf4708..cebe365 100644 Binary files a/org.xtext.unipampa.erdsl.ui/xtend-gen/org/xtext/unipampa/erdsl/ui/outline/.ErDslOutlineTreeProvider.xtendbin and b/org.xtext.unipampa.erdsl.ui/xtend-gen/org/xtext/unipampa/erdsl/ui/outline/.ErDslOutlineTreeProvider.xtendbin differ diff --git a/org.xtext.unipampa.erdsl.ui/xtend-gen/org/xtext/unipampa/erdsl/ui/quickfix/.ErDslQuickfixProvider.xtendbin b/org.xtext.unipampa.erdsl.ui/xtend-gen/org/xtext/unipampa/erdsl/ui/quickfix/.ErDslQuickfixProvider.xtendbin index 8543f56..c1d8215 100644 Binary files a/org.xtext.unipampa.erdsl.ui/xtend-gen/org/xtext/unipampa/erdsl/ui/quickfix/.ErDslQuickfixProvider.xtendbin and b/org.xtext.unipampa.erdsl.ui/xtend-gen/org/xtext/unipampa/erdsl/ui/quickfix/.ErDslQuickfixProvider.xtendbin differ diff --git a/org.xtext.unipampa.erdsl.ui/xtend-gen/org/xtext/unipampa/erdsl/ui/wizard/.ERtextFile.java._trace b/org.xtext.unipampa.erdsl.ui/xtend-gen/org/xtext/unipampa/erdsl/ui/wizard/.ERtextFile.java._trace index 3fd4bc4..0fc6725 100644 Binary files a/org.xtext.unipampa.erdsl.ui/xtend-gen/org/xtext/unipampa/erdsl/ui/wizard/.ERtextFile.java._trace and b/org.xtext.unipampa.erdsl.ui/xtend-gen/org/xtext/unipampa/erdsl/ui/wizard/.ERtextFile.java._trace differ diff --git a/org.xtext.unipampa.erdsl.ui/xtend-gen/org/xtext/unipampa/erdsl/ui/wizard/.ERtextProject.java._trace b/org.xtext.unipampa.erdsl.ui/xtend-gen/org/xtext/unipampa/erdsl/ui/wizard/.ERtextProject.java._trace index 9d0fab0..05aa063 100644 Binary files a/org.xtext.unipampa.erdsl.ui/xtend-gen/org/xtext/unipampa/erdsl/ui/wizard/.ERtextProject.java._trace and b/org.xtext.unipampa.erdsl.ui/xtend-gen/org/xtext/unipampa/erdsl/ui/wizard/.ERtextProject.java._trace differ diff --git a/org.xtext.unipampa.erdsl.ui/xtend-gen/org/xtext/unipampa/erdsl/ui/wizard/.ErDslFileTemplateProvider.xtendbin b/org.xtext.unipampa.erdsl.ui/xtend-gen/org/xtext/unipampa/erdsl/ui/wizard/.ErDslFileTemplateProvider.xtendbin index c5c9c84..1e2d641 100644 Binary files a/org.xtext.unipampa.erdsl.ui/xtend-gen/org/xtext/unipampa/erdsl/ui/wizard/.ErDslFileTemplateProvider.xtendbin and b/org.xtext.unipampa.erdsl.ui/xtend-gen/org/xtext/unipampa/erdsl/ui/wizard/.ErDslFileTemplateProvider.xtendbin differ diff --git a/org.xtext.unipampa.erdsl.ui/xtend-gen/org/xtext/unipampa/erdsl/ui/wizard/.ErDslProjectTemplateProvider.xtendbin b/org.xtext.unipampa.erdsl.ui/xtend-gen/org/xtext/unipampa/erdsl/ui/wizard/.ErDslProjectTemplateProvider.xtendbin index 33d1e09..68a6d26 100644 Binary files a/org.xtext.unipampa.erdsl.ui/xtend-gen/org/xtext/unipampa/erdsl/ui/wizard/.ErDslProjectTemplateProvider.xtendbin and b/org.xtext.unipampa.erdsl.ui/xtend-gen/org/xtext/unipampa/erdsl/ui/wizard/.ErDslProjectTemplateProvider.xtendbin differ diff --git a/org.xtext.unipampa.erdsl.ui/xtend-gen/org/xtext/unipampa/erdsl/ui/wizard/ERtextFile.java b/org.xtext.unipampa.erdsl.ui/xtend-gen/org/xtext/unipampa/erdsl/ui/wizard/ERtextFile.java index e7ef711..40e7ed8 100644 --- a/org.xtext.unipampa.erdsl.ui/xtend-gen/org/xtext/unipampa/erdsl/ui/wizard/ERtextFile.java +++ b/org.xtext.unipampa.erdsl.ui/xtend-gen/org/xtext/unipampa/erdsl/ui/wizard/ERtextFile.java @@ -12,7 +12,7 @@ @FileTemplate(label = "ERDSL Template", icon = "file_template.png", description = "Create a template file for ERDSl.") @SuppressWarnings("all") public final class ERtextFile extends AbstractFileTemplate { - private final StringSelectionTemplateVariable modelName = this.combo("Template:", new String[] { "Hospital_Veterinario", "Empresa_Generica" }, "The logical example model"); + private final StringSelectionTemplateVariable modelName = this.combo("Template:", new String[] { "Empty Model" }, "The empty model"); @Override public void generateFiles(final IFileGenerator generator) { @@ -25,352 +25,79 @@ public void generateFiles(final IFileGenerator generator) { _builder.append(".erdsl"); StringConcatenation _builder_1 = new StringConcatenation(); { - boolean _equalsIgnoreCase = this.modelName.toString().equalsIgnoreCase("Hospital_Veterinario"); + boolean _equalsIgnoreCase = this.modelName.toString().equalsIgnoreCase("Empty Model"); if (_equalsIgnoreCase) { _builder_1.append("/*"); _builder_1.newLine(); - _builder_1.append("* This is an example model"); + _builder_1.append("* The template to demonstrate an overview of the grammar. "); + _builder_1.newLine(); + _builder_1.append("* This does not necessarily displays a semantically correct model regarding to the real world."); _builder_1.newLine(); _builder_1.append("*/"); _builder_1.newLine(); - _builder_1.append(" "); _builder_1.newLine(); _builder_1.append("Generate All;"); _builder_1.newLine(); _builder_1.newLine(); - _builder_1.append("Domain Hospital_Veterinario;"); + _builder_1.append("Domain Name;"); _builder_1.newLine(); _builder_1.newLine(); _builder_1.append("Entities {"); _builder_1.newLine(); _builder_1.append("\t"); + _builder_1.append("Entity1 {"); _builder_1.newLine(); - _builder_1.append("\t"); - _builder_1.append("Pessoa {"); - _builder_1.newLine(); - _builder_1.append("\t\t"); - _builder_1.append("idPessoa int isIdentifier,"); - _builder_1.newLine(); - _builder_1.append("\t\t"); - _builder_1.append("telefoneS int, "); - _builder_1.newLine(); - _builder_1.append("\t\t"); - _builder_1.append("nome string"); - _builder_1.newLine(); - _builder_1.append("\t"); - _builder_1.append("}"); - _builder_1.newLine(); - _builder_1.append("\t"); - _builder_1.newLine(); - _builder_1.append("\t"); - _builder_1.append("Veterinario is total/disjoint Pessoa {"); - _builder_1.newLine(); - _builder_1.append("\t\t"); - _builder_1.append("nrVet int,"); - _builder_1.newLine(); - _builder_1.append("\t\t"); - _builder_1.append("dtAdmissao datetime,"); - _builder_1.newLine(); - _builder_1.append("\t\t"); - _builder_1.append("salario money"); - _builder_1.newLine(); - _builder_1.append("\t"); - _builder_1.append("}"); - _builder_1.newLine(); - _builder_1.append("\t"); - _builder_1.newLine(); - _builder_1.append("\t"); - _builder_1.append("Cliente is total/disjoint Pessoa {"); - _builder_1.newLine(); - _builder_1.append("\t\t"); - _builder_1.append("cpf int, "); - _builder_1.newLine(); - _builder_1.append("\t\t"); - _builder_1.append("email string"); - _builder_1.newLine(); - _builder_1.append("\t"); - _builder_1.append("}"); - _builder_1.newLine(); - _builder_1.append("\t"); - _builder_1.newLine(); - _builder_1.append("\t"); - _builder_1.append("Animal {"); - _builder_1.newLine(); - _builder_1.append("\t\t"); - _builder_1.append("idAnimal int isIdentifier,"); - _builder_1.newLine(); - _builder_1.append("\t\t"); - _builder_1.append("idade int, "); - _builder_1.newLine(); - _builder_1.append("\t\t"); - _builder_1.append("porte string,"); - _builder_1.newLine(); - _builder_1.append("\t\t"); - _builder_1.append("nome string"); - _builder_1.newLine(); - _builder_1.append("\t"); - _builder_1.append("}"); - _builder_1.newLine(); - _builder_1.append("\t"); - _builder_1.newLine(); - _builder_1.append("\t"); - _builder_1.append("Enfermidade {"); - _builder_1.newLine(); - _builder_1.append("\t\t"); - _builder_1.append("idEnfermidade int isIdentifier,"); - _builder_1.newLine(); - _builder_1.append("\t\t"); - _builder_1.append("nome string,"); + _builder_1.append(" \t"); + _builder_1.append("attribute1 int isIdentifier,"); _builder_1.newLine(); - _builder_1.append("\t\t"); - _builder_1.append("descricao string"); + _builder_1.append(" "); + _builder_1.append("attribute2 file"); _builder_1.newLine(); _builder_1.append("\t"); _builder_1.append("}"); _builder_1.newLine(); - _builder_1.append("\t"); + _builder_1.append(" "); _builder_1.newLine(); - _builder_1.append("\t"); - _builder_1.append("Tratamento {"); + _builder_1.append(" "); + _builder_1.append("/* The generalization type can be:"); _builder_1.newLine(); - _builder_1.append("\t\t"); - _builder_1.append("idTratamento int isIdentifier,"); + _builder_1.append(" "); + _builder_1.append("* [1] total/disjoint, [2] total/overlapped, [3] partial/disjoint OR [4] partial/overlapped"); _builder_1.newLine(); - _builder_1.append("\t\t"); - _builder_1.append("dtInicio datetime,"); + _builder_1.append(" "); + _builder_1.append("* "); _builder_1.newLine(); - _builder_1.append("\t\t"); - _builder_1.append("dtFim datetime"); + _builder_1.append(" "); + _builder_1.append("* \tAn entity that specializes another should NOT HAVE an IDENTIFIER attribute, as it inherits from the generalized entity."); _builder_1.newLine(); - _builder_1.append("\t"); - _builder_1.append("}"); - _builder_1.newLine(); - _builder_1.append("\t"); + _builder_1.append(" "); + _builder_1.append("*/"); _builder_1.newLine(); _builder_1.append("\t"); - _builder_1.append("Receita {"); + _builder_1.append("Entity2 is total/disjoint Entity1 {"); _builder_1.newLine(); - _builder_1.append("\t\t"); - _builder_1.append("idReceita int isIdentifier,"); + _builder_1.append(" \t"); + _builder_1.append("attribute3 string,"); _builder_1.newLine(); _builder_1.append("\t\t"); - _builder_1.append("remedio string"); + _builder_1.append("attribute4 datetime"); _builder_1.newLine(); _builder_1.append("\t"); _builder_1.append("}"); _builder_1.newLine(); - _builder_1.append("\t "); - _builder_1.newLine(); _builder_1.append("};"); _builder_1.newLine(); _builder_1.newLine(); _builder_1.append("Relationships {"); _builder_1.newLine(); - _builder_1.append("\t"); - _builder_1.append("Assistente [Veterinario (0:1) relates (0:N) Veterinario]"); - _builder_1.newLine(); - _builder_1.append("\t"); - _builder_1.append("Dono \t \t [Cliente (1:1) relates (1:N) Animal]\t\t"); - _builder_1.newLine(); - _builder_1.append("\t"); - _builder_1.append("Reponsavel [Veterinario (1:N) relates (0:N) Tratamento]"); - _builder_1.newLine(); - _builder_1.append("\t"); - _builder_1.append("Possui \t [Tratamento (1:1) relates (1:1) Receita]"); - _builder_1.newLine(); - _builder_1.append("\t"); - _builder_1.append("AnimalDoente [Animal (0:N) relates (1:N) Enfermidade]"); - _builder_1.newLine(); - _builder_1.append("\t"); - _builder_1.append("TratAnimal [AnimalDoente (1:N) relates (1:1) Tratamento]"); + _builder_1.append("\t\t"); + _builder_1.append("Relationship1 [Entity1 (1:N) relates (1:N) Entity2] {attribute5 int}"); _builder_1.newLine(); - _builder_1.append("\t"); + _builder_1.append("\t\t"); + _builder_1.append("Relationship2 [Entity2 (1:N) relates (1:N) Entity1]\t"); _builder_1.newLine(); _builder_1.append("};"); _builder_1.newLine(); - _builder_1.newLine(); - } else { - boolean _equalsIgnoreCase_1 = this.modelName.toString().equalsIgnoreCase("Empresa_Generica"); - if (_equalsIgnoreCase_1) { - _builder_1.append("/*"); - _builder_1.newLine(); - _builder_1.append("* This is an example model"); - _builder_1.newLine(); - _builder_1.append("*/"); - _builder_1.newLine(); - _builder_1.newLine(); - _builder_1.append("Generate All;"); - _builder_1.newLine(); - _builder_1.newLine(); - _builder_1.append("Domain Empresa_Generica;"); - _builder_1.newLine(); - _builder_1.newLine(); - _builder_1.append("Entities {"); - _builder_1.newLine(); - _builder_1.append("\t"); - _builder_1.newLine(); - _builder_1.append("\t"); - _builder_1.append("Empregado {"); - _builder_1.newLine(); - _builder_1.append("\t\t"); - _builder_1.append("idEmpregado int isIdentifier,"); - _builder_1.newLine(); - _builder_1.append("\t\t"); - _builder_1.append("salario money\t"); - _builder_1.newLine(); - _builder_1.append("\t"); - _builder_1.append("}"); - _builder_1.newLine(); - _builder_1.append("\t"); - _builder_1.newLine(); - _builder_1.append("\t"); - _builder_1.append("Contador is total/disjoint Empregado {"); - _builder_1.newLine(); - _builder_1.append("\t\t"); - _builder_1.append("crc int"); - _builder_1.newLine(); - _builder_1.append("\t"); - _builder_1.append("}"); - _builder_1.newLine(); - _builder_1.append("\t"); - _builder_1.newLine(); - _builder_1.append("\t"); - _builder_1.append("Motorista is total/disjoint Empregado {"); - _builder_1.newLine(); - _builder_1.append("\t\t"); - _builder_1.append("cnh int, "); - _builder_1.newLine(); - _builder_1.append("\t\t"); - _builder_1.append("veiculo string"); - _builder_1.newLine(); - _builder_1.append("\t"); - _builder_1.append("}"); - _builder_1.newLine(); - _builder_1.append("\t"); - _builder_1.newLine(); - _builder_1.append("\t"); - _builder_1.append("Engenheiro is total/disjoint Empregado {"); - _builder_1.newLine(); - _builder_1.append("\t\t\t"); - _builder_1.append("crea int, "); - _builder_1.newLine(); - _builder_1.append("\t\t\t"); - _builder_1.append("areaAtuacao string"); - _builder_1.newLine(); - _builder_1.append("\t"); - _builder_1.append("}"); - _builder_1.newLine(); - _builder_1.append("\t"); - _builder_1.newLine(); - _builder_1.append("\t"); - _builder_1.append("Departamento {"); - _builder_1.newLine(); - _builder_1.append("\t\t"); - _builder_1.append("idDept int isIdentifier,"); - _builder_1.newLine(); - _builder_1.append("\t\t"); - _builder_1.append("sigla string"); - _builder_1.newLine(); - _builder_1.append("\t"); - _builder_1.append("}"); - _builder_1.newLine(); - _builder_1.append("\t"); - _builder_1.newLine(); - _builder_1.append("\t"); - _builder_1.append("Tipo {"); - _builder_1.newLine(); - _builder_1.append("\t\t"); - _builder_1.append("idTipo int isIdentifier,"); - _builder_1.newLine(); - _builder_1.append("\t\t"); - _builder_1.append("descricao string"); - _builder_1.newLine(); - _builder_1.append("\t"); - _builder_1.append("}"); - _builder_1.newLine(); - _builder_1.append("\t"); - _builder_1.newLine(); - _builder_1.append("\t"); - _builder_1.append("Projeto\t{"); - _builder_1.newLine(); - _builder_1.append("\t\t"); - _builder_1.append("idProjeto int isIdentifier,"); - _builder_1.newLine(); - _builder_1.append("\t\t"); - _builder_1.append("descricao string"); - _builder_1.newLine(); - _builder_1.append("\t"); - _builder_1.append("}"); - _builder_1.newLine(); - _builder_1.append("\t"); - _builder_1.newLine(); - _builder_1.append("\t"); - _builder_1.append("Materiais {"); - _builder_1.newLine(); - _builder_1.append("\t\t"); - _builder_1.append("idMaterial int isIdentifier,"); - _builder_1.newLine(); - _builder_1.append("\t\t"); - _builder_1.append("descricao string,"); - _builder_1.newLine(); - _builder_1.append("\t\t"); - _builder_1.append("validade string"); - _builder_1.newLine(); - _builder_1.append("\t"); - _builder_1.append("}"); - _builder_1.newLine(); - _builder_1.append("\t"); - _builder_1.newLine(); - _builder_1.append("\t"); - _builder_1.append("Fornecedor {"); - _builder_1.newLine(); - _builder_1.append("\t\t"); - _builder_1.append("idFornecedor int isIdentifier,"); - _builder_1.newLine(); - _builder_1.append("\t\t"); - _builder_1.append("cnpj int, "); - _builder_1.newLine(); - _builder_1.append("\t\t"); - _builder_1.append("nomeFantasia string,"); - _builder_1.newLine(); - _builder_1.append("\t\t"); - _builder_1.append("telefone int"); - _builder_1.newLine(); - _builder_1.append("\t"); - _builder_1.append("}"); - _builder_1.newLine(); - _builder_1.append("\t"); - _builder_1.newLine(); - _builder_1.append("};"); - _builder_1.newLine(); - _builder_1.newLine(); - _builder_1.append("Relationships {"); - _builder_1.newLine(); - _builder_1.append("\t"); - _builder_1.append("Supervisiona [Empregado (0:1) relates (1:N) Empregado]"); - _builder_1.newLine(); - _builder_1.append("\t"); - _builder_1.append("Desenvolve \t [Empregado (1:N) relates (0:N) Projeto]"); - _builder_1.newLine(); - _builder_1.append("\t"); - _builder_1.append("Lotado \t\t [Empregado (1:N) relates (0:1) Departamento]"); - _builder_1.newLine(); - _builder_1.append("\t"); - _builder_1.append("Tem \t\t [Departamento (1:1) relates (1:1) Tipo]"); - _builder_1.newLine(); - _builder_1.append("\t"); - _builder_1.append("Controla\t [Departamento (1:N) relates (0:N) Projeto]"); - _builder_1.newLine(); - _builder_1.append("\t"); - _builder_1.append("Fornecimento [Materiais (0:N) relates (1:N) Fornecedor]"); - _builder_1.newLine(); - _builder_1.append("\t"); - _builder_1.append("ProjFornec\t [Projeto (1:N) relates (1:N) Fornecimento] "); - _builder_1.newLine(); - _builder_1.append("};"); - _builder_1.newLine(); - _builder_1.newLine(); - } } } generator.generate(_builder, _builder_1); diff --git a/org.xtext.unipampa.erdsl.ui/xtend-gen/org/xtext/unipampa/erdsl/ui/wizard/ERtextProject.java b/org.xtext.unipampa.erdsl.ui/xtend-gen/org/xtext/unipampa/erdsl/ui/wizard/ERtextProject.java index 8d99a8b..3eef538 100644 --- a/org.xtext.unipampa.erdsl.ui/xtend-gen/org/xtext/unipampa/erdsl/ui/wizard/ERtextProject.java +++ b/org.xtext.unipampa.erdsl.ui/xtend-gen/org/xtext/unipampa/erdsl/ui/wizard/ERtextProject.java @@ -23,14 +23,14 @@ import org.eclipse.xtext.xbase.lib.ObjectExtensions; import org.eclipse.xtext.xbase.lib.Procedures.Procedure1; -@ProjectTemplate(label = "org.project.ertext.template", icon = "project_template.png", description = "

ERtext TEMPLATE

\n

This is a parameterized template for ERtext. You can set a parameter to modify the content in the generated file and a parameter \nto set the package the file is created in.

") +@ProjectTemplate(label = "org.project.ertext.template", icon = "project_template.png", description = "

ERtext Project Template

\n

This is a parameterized project template for ERtext. You can set a parameter to modify the content in the generated file and a parameter \nto set the package the file is created in.

") @SuppressWarnings("all") public final class ERtextProject extends AbstractProjectTemplate { private final BooleanTemplateVariable advanced = this.check("Advanced:", false); private final GroupTemplateVariable advancedGroup = this.group("Properties"); - private final StringSelectionTemplateVariable name = this.combo("Name:", new String[] { "Xtext", "World", "Foo", "Bar" }, "The name to say \'Hello\' to", this.advancedGroup); + private final StringSelectionTemplateVariable name = this.combo("Name:", new String[] { "Xtext" }, "Xtext:", this.advancedGroup); private final StringTemplateVariable path = this.text("Package:", "ERtext", "The package path to place the files in", this.advancedGroup); @@ -71,166 +71,76 @@ public void generateProjects(final IProjectGenerator generator) { List _folders = it.getFolders(); _folders.add("src"); StringConcatenation _builder = new StringConcatenation(); - _builder.append("src/Blank_Model.erdsl"); + _builder.append("src/TemplateModel.erdsl"); StringConcatenation _builder_1 = new StringConcatenation(); _builder_1.append("/*"); _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("* Hello new user!"); + _builder_1.append("* The template to demonstrate an overview of the grammar. "); _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("*"); + _builder_1.append("* This does not necessarily displays a semantically correct model regarding to the real world."); _builder_1.newLine(); - _builder_1.append(" "); - _builder_1.append("* This is an example model"); - _builder_1.newLine(); - _builder_1.append(" "); _builder_1.append("*/"); _builder_1.newLine(); _builder_1.newLine(); _builder_1.append("Generate All;"); _builder_1.newLine(); _builder_1.newLine(); - _builder_1.append("Domain The_Employees_Sample_Schema;"); + _builder_1.append("Domain Name;"); _builder_1.newLine(); _builder_1.newLine(); _builder_1.append("Entities {"); _builder_1.newLine(); _builder_1.append("\t"); + _builder_1.append("Entity1 {"); _builder_1.newLine(); - _builder_1.append("\t"); - _builder_1.append("Person {"); - _builder_1.newLine(); - _builder_1.append("\t\t"); - _builder_1.append("person_no int isIdentifier,"); - _builder_1.newLine(); - _builder_1.append("\t\t"); - _builder_1.append("gender boolean"); - _builder_1.newLine(); - _builder_1.append("\t"); - _builder_1.append("}"); - _builder_1.newLine(); - _builder_1.append("\t"); - _builder_1.newLine(); - _builder_1.append("\t"); - _builder_1.append("Employee is total/overlapped Person {"); - _builder_1.newLine(); - _builder_1.append("\t "); - _builder_1.append("emp_no int isIdentifier,"); - _builder_1.newLine(); - _builder_1.append("\t "); - _builder_1.append("birth_dt datetime,"); - _builder_1.newLine(); - _builder_1.append("\t "); - _builder_1.append("first_name string,"); - _builder_1.newLine(); - _builder_1.append("\t "); - _builder_1.append("last_name string,"); - _builder_1.newLine(); - _builder_1.append("\t "); - _builder_1.append("hire_dt datetime\t"); - _builder_1.newLine(); - _builder_1.append("\t"); - _builder_1.append("}"); - _builder_1.newLine(); - _builder_1.append("\t"); - _builder_1.newLine(); - _builder_1.append("\t"); - _builder_1.append("Dependent is total/overlapped Person {"); - _builder_1.newLine(); - _builder_1.append("\t\t"); - _builder_1.append("dependent_no int isIdentifier,"); - _builder_1.newLine(); - _builder_1.append("\t\t"); - _builder_1.append("first_name string,"); - _builder_1.newLine(); - _builder_1.append("\t\t"); - _builder_1.append("last_name string"); - _builder_1.newLine(); - _builder_1.append("\t"); - _builder_1.append("}"); - _builder_1.newLine(); - _builder_1.append("\t"); - _builder_1.newLine(); - _builder_1.append("\t"); - _builder_1.append("Salary {"); - _builder_1.newLine(); - _builder_1.append("\t\t"); - _builder_1.append("salary_no int isIdentifier,"); - _builder_1.newLine(); - _builder_1.append("\t\t"); - _builder_1.append("salary money,"); + _builder_1.append(" \t"); + _builder_1.append("attribute1 int isIdentifier,"); _builder_1.newLine(); - _builder_1.append("\t\t"); - _builder_1.append("from_dt datetime,"); - _builder_1.newLine(); - _builder_1.append("\t\t"); - _builder_1.append("to_dt datetime"); + _builder_1.append(" "); + _builder_1.append("attribute2 file"); _builder_1.newLine(); _builder_1.append("\t"); _builder_1.append("}"); _builder_1.newLine(); - _builder_1.append("\t"); + _builder_1.append(" "); _builder_1.newLine(); - _builder_1.append("\t"); - _builder_1.append("Departament {"); + _builder_1.append(" "); + _builder_1.append("/* The generalization type can be:"); _builder_1.newLine(); - _builder_1.append("\t\t"); - _builder_1.append("dept_no int isIdentifier,"); + _builder_1.append(" "); + _builder_1.append("* [1] total/disjoint, [2] total/overlapped, [3] partial/disjoint OR [4] partial/overlapped"); _builder_1.newLine(); - _builder_1.append("\t\t"); - _builder_1.append("name string, "); + _builder_1.append(" "); + _builder_1.append("* "); _builder_1.newLine(); - _builder_1.append("\t\t"); - _builder_1.append("goals_description string"); + _builder_1.append(" "); + _builder_1.append("* \tAn entity that specializes another should NOT HAVE an IDENTIFIER attribute, as it inherits from the generalized entity."); _builder_1.newLine(); - _builder_1.append("\t"); - _builder_1.append("}"); - _builder_1.newLine(); - _builder_1.append("\t"); + _builder_1.append(" "); + _builder_1.append("*/"); _builder_1.newLine(); _builder_1.append("\t"); - _builder_1.append("Title\t {"); + _builder_1.append("Entity2 is total/disjoint Entity1 {"); _builder_1.newLine(); - _builder_1.append("\t\t"); - _builder_1.append("title_no int isIdentifier,"); + _builder_1.append(" \t"); + _builder_1.append("attribute3 string,"); _builder_1.newLine(); _builder_1.append("\t\t"); - _builder_1.append("name string,"); - _builder_1.newLine(); - _builder_1.append("\t\t"); - _builder_1.append("description string,"); - _builder_1.newLine(); - _builder_1.append("\t\t"); - _builder_1.append("from_dt datetime,"); - _builder_1.newLine(); - _builder_1.append("\t\t"); - _builder_1.append("to_dt datetime\t\t"); + _builder_1.append("attribute4 datetime"); _builder_1.newLine(); _builder_1.append("\t"); _builder_1.append("}"); _builder_1.newLine(); - _builder_1.append("\t\t"); - _builder_1.newLine(); _builder_1.append("};"); _builder_1.newLine(); _builder_1.newLine(); _builder_1.append("Relationships {"); _builder_1.newLine(); - _builder_1.append("\t"); - _builder_1.append("Dept_manager [Employee (1:N) relates (1:N) Departament] {from_dt datetime, to_dt datetime}"); - _builder_1.newLine(); - _builder_1.append("\t"); - _builder_1.append("Dept_emp\t [Employee (1:N) relates (1:N) Departament] {from_dt datetime, to_dt datetime}"); - _builder_1.newLine(); - _builder_1.append("\t"); - _builder_1.append("Payment \t [Salary (1:N) relates (1:1) Employee]"); - _builder_1.newLine(); - _builder_1.append("\t"); - _builder_1.append("JobTitle\t [Title (1:N) relates (1:1) Employee]"); + _builder_1.append("\t\t"); + _builder_1.append("Relationship1 [Entity1 (1:N) relates (1:N) Entity2] {attribute5 int}"); _builder_1.newLine(); - _builder_1.append("\t"); - _builder_1.append("Dependency\t [Employee (1:1) relates (1:N) Dependent]"); + _builder_1.append("\t\t"); + _builder_1.append("Relationship2 [Entity2 (1:N) relates (1:N) Entity1]\t"); _builder_1.newLine(); _builder_1.append("};"); _builder_1.newLine(); diff --git a/org.xtext.unipampa.erdsl/.project b/org.xtext.unipampa.erdsl/.project index 4c6ee4b..a92bd7e 100644 --- a/org.xtext.unipampa.erdsl/.project +++ b/org.xtext.unipampa.erdsl/.project @@ -31,4 +31,15 @@ org.eclipse.jdt.core.javanature org.eclipse.pde.PluginNature + + + 1636089992882 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + diff --git a/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/.ErDslRuntimeModule.xtendbin b/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/.ErDslRuntimeModule.xtendbin index f438000..ac2a19d 100644 Binary files a/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/.ErDslRuntimeModule.xtendbin and b/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/.ErDslRuntimeModule.xtendbin differ diff --git a/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/.ErDslStandaloneSetup.xtendbin b/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/.ErDslStandaloneSetup.xtendbin index c4349e2..816d075 100644 Binary files a/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/.ErDslStandaloneSetup.xtendbin and b/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/.ErDslStandaloneSetup.xtendbin differ diff --git a/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/GenerateErDsl.mwe2 b/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/GenerateErDsl.mwe2 index b5f09fb..03aebed 100644 --- a/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/GenerateErDsl.mwe2 +++ b/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/GenerateErDsl.mwe2 @@ -60,6 +60,7 @@ Workflow { junitSupport = { junitVersion = "5" } +// fragment = org.eclipse.xtext.xtext.generator.ui.codemining.CodeMiningFragment {} } } } \ No newline at end of file diff --git a/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/erDsl/impl/EntityImpl.class b/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/erDsl/impl/EntityImpl.class index c76bd7b..90448d0 100644 Binary files a/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/erDsl/impl/EntityImpl.class and b/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/erDsl/impl/EntityImpl.class differ diff --git a/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/erDsl/impl/RelationImpl.class b/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/erDsl/impl/RelationImpl.class index 84b3539..384d915 100644 Binary files a/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/erDsl/impl/RelationImpl.class and b/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/erDsl/impl/RelationImpl.class differ diff --git a/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/generator/.ErDslGenerator.xtendbin b/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/generator/.ErDslGenerator.xtendbin index f7316fc..e8cc5a5 100644 Binary files a/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/generator/.ErDslGenerator.xtendbin and b/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/generator/.ErDslGenerator.xtendbin differ diff --git a/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/generator/.HtmlFileGenerator.java._trace b/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/generator/.HtmlFileGenerator.java._trace index 5da63db..36a3872 100644 Binary files a/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/generator/.HtmlFileGenerator.java._trace and b/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/generator/.HtmlFileGenerator.java._trace differ diff --git a/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/generator/.HtmlFileGenerator.xtendbin b/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/generator/.HtmlFileGenerator.xtendbin index 92f0abb..c46326d 100644 Binary files a/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/generator/.HtmlFileGenerator.xtendbin and b/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/generator/.HtmlFileGenerator.xtendbin differ diff --git a/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/generator/.MysqlFileGenerator.java._trace b/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/generator/.MysqlFileGenerator.java._trace index 1458a24..27791b7 100644 Binary files a/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/generator/.MysqlFileGenerator.java._trace and b/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/generator/.MysqlFileGenerator.java._trace differ diff --git a/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/generator/.MysqlFileGenerator.xtendbin b/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/generator/.MysqlFileGenerator.xtendbin index 368eb40..8190493 100644 Binary files a/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/generator/.MysqlFileGenerator.xtendbin and b/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/generator/.MysqlFileGenerator.xtendbin differ diff --git a/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/generator/.PlantUmlFileGenerator.java._trace b/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/generator/.PlantUmlFileGenerator.java._trace index edcf40e..93b464f 100644 Binary files a/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/generator/.PlantUmlFileGenerator.java._trace and b/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/generator/.PlantUmlFileGenerator.java._trace differ diff --git a/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/generator/.PlantUmlFileGenerator.xtendbin b/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/generator/.PlantUmlFileGenerator.xtendbin index d26d56c..e6be5e0 100644 Binary files a/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/generator/.PlantUmlFileGenerator.xtendbin and b/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/generator/.PlantUmlFileGenerator.xtendbin differ diff --git a/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/generator/.PostgresqlFileGenerator.java._trace b/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/generator/.PostgresqlFileGenerator.java._trace index 7b1ad0c..de4cb1d 100644 Binary files a/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/generator/.PostgresqlFileGenerator.java._trace and b/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/generator/.PostgresqlFileGenerator.java._trace differ diff --git a/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/generator/.PostgresqlFileGenerator.xtendbin b/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/generator/.PostgresqlFileGenerator.xtendbin index 58c48f5..9a323f2 100644 Binary files a/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/generator/.PostgresqlFileGenerator.xtendbin and b/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/generator/.PostgresqlFileGenerator.xtendbin differ diff --git a/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/generator/HtmlFileGenerator.class b/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/generator/HtmlFileGenerator.class index 71014a5..3c70c9d 100644 Binary files a/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/generator/HtmlFileGenerator.class and b/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/generator/HtmlFileGenerator.class differ diff --git a/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/generator/HtmlFileGenerator.xtend b/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/generator/HtmlFileGenerator.xtend index e97d656..4616f14 100644 --- a/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/generator/HtmlFileGenerator.xtend +++ b/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/generator/HtmlFileGenerator.xtend @@ -17,7 +17,7 @@ class HtmlFileGenerator extends AbstractGenerator { try { - fsa.generateFile('Logical_Textual_Scheme.html', CreateLogical(modeloER)) + fsa.generateFile(modeloER.domain.name.toLowerCase+'_Logical.html', CreateLogical(modeloER)) } catch (Exception e) { @@ -249,7 +249,7 @@ class HtmlFileGenerator extends AbstractGenerator { «IF aux.is === null» «IF !relation.leftEnding.target.toString.equalsIgnoreCase(relation.rightEnding.target.toString)» «html_ListPKtoFK(aux)» - «ELSE» + «ELSEIF relation.leftEnding.target.toString.equalsIgnoreCase(relation.rightEnding.target.toString)» «html_ListPKtoFK_SelfRelationship(aux, relation.name.toLowerCase)» «ENDIF» «ELSEIF aux.is !== null» @@ -317,9 +317,16 @@ class HtmlFileGenerator extends AbstractGenerator { «FOR entity : m.entities» «IF relation.leftEnding.target.toString.equalsIgnoreCase(entity.name) && !(relation.leftEnding.target.toString.equalsIgnoreCase(relation.rightEnding.target.toString))» - «FOR attribute : entity.attributes.filter[isIsKey] SEPARATOR " | "» - «html_AttributeStyleForInheritedPK(attribute)»_fk - «ENDFOR» + «IF entity.is !== null» + «FOR attribute : entity.is.attributes.filter[isIsKey] SEPARATOR " | "» + «html_AttributeStyleForInheritedPK(attribute)»_fk + «ENDFOR» + «ELSE» + «FOR attribute : entity.attributes.filter[isIsKey] SEPARATOR " | "» + «html_AttributeStyleForInheritedPK(attribute)»_fk + «ENDFOR» + «ENDIF» + «ENDIF» «ENDFOR» @@ -338,15 +345,27 @@ class HtmlFileGenerator extends AbstractGenerator { * */» «IF relation.leftEnding.target.toString.equalsIgnoreCase(entity.name) && (relation.leftEnding.target.toString.equalsIgnoreCase(relation.rightEnding.target.toString))» - «FOR attribute : entity.attributes.filter[isKey] SEPARATOR " | "» - «html_AttributeStyleForInheritedPK(attribute)»_fk_1 - «ENDFOR» + «IF entity.is !== null» + «FOR attribute : entity.is.attributes.filter[isKey] SEPARATOR " | "» + «html_AttributeStyleForInheritedPK(attribute)»_fk_1 + «ENDFOR» + «ELSE» + «FOR attribute : entity.attributes.filter[isKey] SEPARATOR " | "» + «html_AttributeStyleForInheritedPK(attribute)»_fk_1 + «ENDFOR» + «ENDIF» «ENDIF» «IF relation.rightEnding.target.toString.equalsIgnoreCase(entity.name) && (relation.rightEnding.target.toString.equalsIgnoreCase(relation.leftEnding.target.toString))» - «FOR attribute : entity.attributes.filter[isIsKey] BEFORE " | " SEPARATOR " | "» - «html_AttributeStyleForInheritedPK(attribute)»_fk_2 - «ENDFOR» + «IF entity.is !== null» + «FOR attribute : entity.is.attributes.filter[isIsKey] BEFORE " | " SEPARATOR " | "» + «html_AttributeStyleForInheritedPK(attribute)»_fk_2 + «ENDFOR» + «ELSE» + «FOR attribute : entity.attributes.filter[isIsKey] BEFORE " | " SEPARATOR " | "» + «html_AttributeStyleForInheritedPK(attribute)»_fk_2 + «ENDFOR» + «ENDIF» «ENDIF» «ENDFOR» @@ -439,21 +458,65 @@ class HtmlFileGenerator extends AbstractGenerator { ''' def private html_ListPKtoFK_Alt (Entity e) ''' - «FOR att : e.attributes.filter[isIsKey] SEPARATOR " , "» - «att.name.toLowerCase»_fk - «ENDFOR» + «IF e.is !== null» + «FOR att : e.is.attributes.filter[isIsKey] SEPARATOR " , "» + «att.name.toLowerCase»_fk + «ENDFOR» + «ELSE» + «FOR att : e.attributes.filter[isIsKey] SEPARATOR " , "» + «att.name.toLowerCase»_fk + «ENDFOR» + «ENDIF» + ''' + + def private html_ListPKtoFK_Alt (Entity e, String r) ''' + «IF e.is !== null» + «FOR att : e.is.attributes.filter[isIsKey] SEPARATOR " , "» + «att.name.toLowerCase»_fk + «ENDFOR» + «ELSE» + «FOR att : e.attributes.filter[isIsKey] SEPARATOR " , "» + «att.name.toLowerCase»_fk + «ENDFOR» + «ENDIF» ''' def private html_ListPKtoFK_SelfRelationship (Entity e, String r) ''' - «FOR att : e.attributes.filter[isIsKey] BEFORE " | " SEPARATOR " | "» - «att.name.toLowerCase+"_"+r»_fk + «IF e.is !== null» + «FOR att : e.is.attributes.filter[isIsKey] BEFORE " | " SEPARATOR " | "» + «att.name.toLowerCase+"_"+r»_fk «ENDFOR» + «ELSE» + «FOR att : e.attributes.filter[isIsKey] BEFORE " | " SEPARATOR " | "» + «att.name.toLowerCase+"_"+r»_fk + «ENDFOR» + «ENDIF» + + ''' def private html_ListPKtoFK_SelfRelationship_Alt (Entity e, String r) ''' - «FOR att : e.attributes.filter[isIsKey] SEPARATOR " , "» - «att.name.toLowerCase+"_"+r»_fk - «ENDFOR» + «IF e.is !== null» + «FOR att : e.is.attributes.filter[isIsKey] SEPARATOR " , "» + «att.name.toLowerCase+"_"+r»_fk + «ENDFOR» + «ELSE» + «FOR att : e.attributes.filter[isIsKey] SEPARATOR " , "» + «att.name.toLowerCase+"_"+r»_fk + «ENDFOR» + «ENDIF» + ''' + + def private html_ListPKtoFK_SelfRelationship_Alt (Entity e, int i) ''' + «IF e.is !== null» + «FOR att : e.is.attributes.filter[isIsKey] SEPARATOR " , "» + «att.name.toLowerCase»_fk_«i» + «ENDFOR» + «ELSE» + «FOR att : e.attributes.filter[isIsKey] SEPARATOR " , "» + «att.name.toLowerCase»_fk_«i» + «ENDFOR» + «ENDIF» ''' def private html_RelationshipsMapping(ERModel m) ''' @@ -502,7 +565,7 @@ class HtmlFileGenerator extends AbstractGenerator { (relation.rightEnding.cardinality.equalsIgnoreCase('(0:1)') || relation.rightEnding.cardinality.equalsIgnoreCase('(1:1)')))» «html_BinaryRelationshipNameStyle(relation.name, relation.leftEnding.target.toString, relation.rightEnding.target.toString, relation.leftEnding.cardinality, relation.rightEnding.cardinality)» - +
Attribute ( «FOR aux : m.entities» «IF relation.leftEnding.target.toString.equalsIgnoreCase(aux.name)» @@ -539,7 +602,7 @@ class HtmlFileGenerator extends AbstractGenerator { (relation.rightEnding.cardinality.equalsIgnoreCase('(0:N)') || relation.rightEnding.cardinality.equalsIgnoreCase('(1:N)'))))» «html_BinaryRelationshipNameStyle(relation.name, relation.leftEnding.target.toString, relation.rightEnding.target.toString, relation.leftEnding.cardinality, relation.rightEnding.cardinality)» - +
Attribute ( «FOR aux : m.entities» «IF relation.leftEnding.target.toString.equalsIgnoreCase(aux.name)» @@ -566,7 +629,7 @@ class HtmlFileGenerator extends AbstractGenerator { (relation.rightEnding.cardinality.equalsIgnoreCase('(0:1)') || relation.rightEnding.cardinality.equalsIgnoreCase('(1:1)'))))» «html_BinaryRelationshipNameStyle(relation.name, relation.leftEnding.target.toString, relation.rightEnding.target.toString, relation.leftEnding.cardinality, relation.rightEnding.cardinality)» - +
Attribute ( «FOR aux : m.entities» «IF relation.rightEnding.target.toString.equalsIgnoreCase(aux.name)» @@ -604,17 +667,25 @@ class HtmlFileGenerator extends AbstractGenerator { (relation.rightEnding.cardinality.equalsIgnoreCase('(0:N)') || relation.rightEnding.cardinality.equalsIgnoreCase('(1:N)')))» «html_BinaryRelationshipNameStyle(relation.name, relation.leftEnding.target.toString, relation.rightEnding.target.toString, relation.leftEnding.cardinality, relation.rightEnding.cardinality)» - +
Attribute ( - «html_ListPKtoFK_Alt(relation.leftEnding.target as Entity)» + «IF relation.leftEnding.target.toString.equalsIgnoreCase(relation.rightEnding.target.toString)» + «html_ListPKtoFK_SelfRelationship_Alt(relation.leftEnding.target as Entity, 1)» + «ELSE» + «html_ListPKtoFK_Alt(relation.leftEnding.target as Entity)» + «ENDIF» ) in «html_EntityNameTag(relation.name)» references «html_EntityNameTag(relation.leftEnding.target.toString)»

Attribute ( - «html_ListPKtoFK_Alt(relation.rightEnding.target as Entity)» + «IF relation.leftEnding.target.toString.equalsIgnoreCase(relation.rightEnding.target.toString)» + «html_ListPKtoFK_SelfRelationship_Alt(relation.rightEnding.target as Entity, 2)» + «ELSE» + «html_ListPKtoFK_Alt(relation.rightEnding.target as Entity)» + «ENDIF» ) in «html_EntityNameTag(relation.name)» references «html_EntityNameTag(relation.rightEnding.target.toString)»
@@ -631,7 +702,7 @@ class HtmlFileGenerator extends AbstractGenerator { «IF relation.name.nullOrEmpty» _Unnamed_ «ELSEIF !relation.name.nullOrEmpty»«relation.name.toUpperCase»«ENDIF» «relation.leftEnding.target.toString.toUpperCase+" "+relation.leftEnding.cardinality.toString.toUpperCase» relates «relation.rightEnding.cardinality.toUpperCase+" "+ relation.rightEnding.target.toString.toUpperCase» -
+


«html_Ternary_Relationships_Attributes(m, relation)» «ENDFOR» ''' diff --git a/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/generator/MysqlFileGenerator.class b/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/generator/MysqlFileGenerator.class index 2c3ff0c..8c1ceac 100644 Binary files a/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/generator/MysqlFileGenerator.class and b/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/generator/MysqlFileGenerator.class differ diff --git a/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/generator/MysqlFileGenerator.xtend b/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/generator/MysqlFileGenerator.xtend index b391f00..63124f5 100644 --- a/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/generator/MysqlFileGenerator.xtend +++ b/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/generator/MysqlFileGenerator.xtend @@ -9,7 +9,7 @@ import org.xtext.unipampa.erdsl.erDsl.Entity import org.xtext.unipampa.erdsl.erDsl.Relation import org.xtext.unipampa.erdsl.erDsl.Attribute import java.util.ArrayList - +import java.util.HashMap /** * @@ -27,29 +27,28 @@ class MysqlFileGenerator extends AbstractGenerator { var primaryKeys = new ArrayList() var inheritedPrimaryKeys = new ArrayList() var primaryKeys_NtoN = new ArrayList + var primaryKeys_Ternary = new ArrayList + var mapTernary = new HashMap(); + var StringBuilder sc_AlterTbl_1to1 = new StringBuilder var StringBuilder sc_AlterTbl_1toN = new StringBuilder var StringBuilder sc_AlterTbl_NtoN = new StringBuilder - var StringBuilder sc_AlterTbl_Ternary = new StringBuilder + var StringBuilder sc_AlterTbl_Ternary = new StringBuilder override doGenerate(Resource input, IFileSystemAccess2 fsa, IGeneratorContext context) { val modeloER = input.contents.get(0) as ERModel try { - fsa.generateFile('MySQL_DDL.sql', mysql_CreateModel(modeloER)) + fsa.generateFile(modeloER.domain.name.toLowerCase+'_My.sql', mysql_CreateModel(modeloER)) } catch (Exception e) { println(e.stackTrace.toString) } } def private mysql_CreateModel(ERModel modeloER) ''' - -- #################################################### - -- # MySQL Template # - -- #################################################### - -- # Generated by ERtext # - -- #################################################### + -- MySQL Template generated by ERtext «mysql_DomainMapper(modeloER)» @@ -71,13 +70,14 @@ class MysqlFileGenerator extends AbstractGenerator { ''' def private mysql_DomainMapper (ERModel m) ''' - -- Database: «m.domain.name.toString.toUpperCase» + -- Database: «m.domain.name.toString.toUpperCase»; + -- CREATE DATABASE «m.domain.name.toString.toUpperCase»; + -- USE «m.domain.name.toString.toUpperCase»; -- DROP DATABASE «m.domain.name.toString.toUpperCase»; - -- CREATE DATABASE IF NOT EXISTS «m.domain.name.toString.toUpperCase»» - --DROP TABLE IF EXISTS - -- «FOR e : m.entities SEPARATOR ", "»public."«e.name.toLowerCase»"«ENDFOR»«FOR r : m.relations.filter[((leftEnding.cardinality.equalsIgnoreCase('(0:N)') || leftEnding.cardinality.equalsIgnoreCase('(1:N)')) && (rightEnding.cardinality.equalsIgnoreCase('(0:N)') || rightEnding.cardinality.equalsIgnoreCase('(1:N)')))] BEFORE ", " SEPARATOR ", "»public."«r.name.toLowerCase»"«ENDFOR» - -- CASCADE; +««« -- DROP TABLE IF EXISTS +««« -- «FOR e : m.entities SEPARATOR ", "»«e.name.toLowerCase»«ENDFOR»«FOR r : m.relations.filter[((leftEnding.cardinality.equalsIgnoreCase('(0:N)') || leftEnding.cardinality.equalsIgnoreCase('(1:N)')) && (rightEnding.cardinality.equalsIgnoreCase('(0:N)') || rightEnding.cardinality.equalsIgnoreCase('(1:N)')))] BEFORE ", " SEPARATOR ", "»«r.name.toLowerCase»«ENDFOR» +««« -- CASCADE; ''' def private mysql_SimpleEntitiesMapper(ERModel m) ''' @@ -144,7 +144,7 @@ class MysqlFileGenerator extends AbstractGenerator { «ELSEIF a.type.toString.equalsIgnoreCase("money")»«a.name.toLowerCase» NUMERIC NOT NULL, «ELSEIF a.type.toString.equalsIgnoreCase("double")»«a.name.toLowerCase» FLOAT NOT NULL, «ELSEIF a.type.toString.equalsIgnoreCase("boolean")»«a.name.toLowerCase» BIT NOT NULL, - «ELSEIF a.type.toString.equalsIgnoreCase("file")»«a.name.toLowerCase» BLOB NOT NULL, + «ELSEIF a.type.toString.equalsIgnoreCase("file")»«a.name.toLowerCase» BINARY NOT NULL, «ENDIF» ''' @@ -154,8 +154,8 @@ class MysqlFileGenerator extends AbstractGenerator { «ELSEIF a.type.toString.equalsIgnoreCase("datetime")» DATE NOT NULL, «ELSEIF a.type.toString.equalsIgnoreCase("money")» NUMERIC NOT NULL, «ELSEIF a.type.toString.equalsIgnoreCase("double")» FLOAT NOT NULL, - «ELSEIF a.type.toString.equalsIgnoreCase("boolean")» BIT NOT NULL, - «ELSEIF a.type.toString.equalsIgnoreCase("file")» BLOB NOT NULL, + «ELSEIF a.type.toString.equalsIgnoreCase("boolean")» BOOLEAN NOT NULL, + «ELSEIF a.type.toString.equalsIgnoreCase("file")» BINARY NOT NULL, «ENDIF» ''' @@ -392,56 +392,141 @@ class MysqlFileGenerator extends AbstractGenerator { ''' def private mysql_TernaryEntitiesMapper(ERModel model) ''' - -- ####################################################### - -- #TODO: auto-generated method stub for Ternary Entities# - -- ####################################################### + «FOR r : model.relations.filter[i|i.leftEnding.target instanceof Relation && i.rightEnding.target instanceof Entity]» + «var auxRel = r.leftEnding.target as Relation» + «var auxEnt = r.rightEnding.target as Entity» + «var auxLeftEntity = auxRel.leftEnding.target as Entity» + «var auxRightEntity = auxRel.rightEnding.target as Entity» +««« -- CASO 1 +««« -- Relação: «r.name.toString.toUpperCase» +««« -- Esquerda é relação: «auxRel.name.toUpperCase» +««« -- Direita é entidade: «auxEnt.name.toUpperCase» + -- Table: «r.name.toUpperCase» + -- DROP TABLE «r.name.toUpperCase»; + CREATE TABLE IF NOT EXISTS «r.name.toLowerCase» ( +««« Pega os atributos PK da entidade + «FOR att : auxEnt.attributes.filter[isIsKey]» «auxEnt.name.toLowerCase+"_"+mysql_AttTypeChecker(att)» + «ENDFOR» + «FOR att : auxLeftEntity.attributes.filter[isIsKey]» «auxLeftEntity.name.toLowerCase+"_"+mysql_AttTypeChecker(att)» + «ENDFOR» + «FOR att : auxRightEntity.attributes.filter[isIsKey]» «auxRightEntity.name.toLowerCase+"_"+mysql_AttTypeChecker(att)» + «ENDFOR» +««« lista os atributos do relacionamento caso existam, se tiver alguma pk então adiciona no array de pks + «IF r.attributes !== null» + «FOR att : r.attributes» «mysql_AttTypeChecker(att)»«IF att.isIsKey»«{this.primaryKeys_Ternary.add(att.name.toLowerCase); null}»«ENDIF» + «ENDFOR» + «ENDIF» +««« adiciona as PKS da entidade na lista de CONSTRAINT PK do Ternário + «{this.mapTernary.put(auxEnt.name, new ArrayList); null}» + «FOR att : auxEnt.attributes.filter[isIsKey]»«{this.primaryKeys_Ternary.add(auxEnt.name.toLowerCase+"_"+att.name.toString); null}» + «{this.mapTernary.get(auxEnt.name).add(att.name.toString.toLowerCase); null}» + «ENDFOR» +««« Lado ESQUERDO da relação N para N + «{this.mapTernary.put(auxLeftEntity.name, new ArrayList); null}» + «FOR att : auxLeftEntity.attributes.filter[isIsKey]»«{this.primaryKeys_Ternary.add(auxLeftEntity.name.toLowerCase+"_"+att.name.toString.toLowerCase); null}» + «{this.mapTernary.get(auxLeftEntity.name).add(auxLeftEntity.name.toLowerCase+"_"+att.name.toString.toLowerCase); null}» + «ENDFOR» +««« Lado DIREITO da relação N para N + «{this.mapTernary.put(auxRightEntity.name, new ArrayList); null}» + «FOR att : auxRightEntity.attributes.filter[isIsKey]»«{this.primaryKeys_Ternary.add(auxRightEntity.name.toLowerCase+"_"+att.name.toString.toLowerCase); null}» + «{this.mapTernary.get(auxRightEntity.name).add(auxRightEntity.name.toLowerCase+"_"+att.name.toString.toLowerCase); null}» + «ENDFOR» + CONSTRAINT pk_«r.name.toLowerCase» PRIMARY KEY («FOR pk : primaryKeys_Ternary SEPARATOR ", "»«pk.toString»«ENDFOR») «{this.primaryKeys_Ternary.clear; null}» + «{this.sc_AlterTbl_1toN.append(mysql_AlterTable_Ternary_RefMapper(r.name, auxEnt.name, auxRel.name, auxLeftEntity.name, auxRightEntity.name, mapTernary)); null}»«{this.mapTernary.clear; null}» + ); + + «ENDFOR» + «FOR r : model.relations.filter[i|i.leftEnding.target instanceof Entity && i.rightEnding.target instanceof Relation]» + «var auxEnt = r.leftEnding.target as Entity» + «var auxRel = r.rightEnding.target as Relation» + «var auxLeftEntity = auxRel.leftEnding.target as Entity» + «var auxRightEntity = auxRel.rightEnding.target as Entity» + -- Table: «r.name.toUpperCase» + -- DROP TABLE «r.name.toUpperCase»; + CREATE TABLE IF NOT EXISTS «r.name.toLowerCase» ( +««« Pega os atributos PK da entidade + «FOR att : auxEnt.attributes.filter[isIsKey]» «auxEnt.name.toLowerCase+"_"+mysql_AttTypeChecker(att)» + «ENDFOR» + «FOR att : auxLeftEntity.attributes.filter[isIsKey]» «auxLeftEntity.name.toLowerCase+"_"+mysql_AttTypeChecker(att)» + «ENDFOR» + «FOR att : auxRightEntity.attributes.filter[isIsKey]» «auxRightEntity.name.toLowerCase+"_"+mysql_AttTypeChecker(att)» + «ENDFOR» +««« lista os atributos do relacionamento caso existam, se tiver alguma pk então adiciona no array de pks + «IF r.attributes !== null» + «FOR att : r.attributes» «mysql_AttTypeChecker(att)»«IF att.isIsKey»«{this.primaryKeys_Ternary.add(att.name.toLowerCase); null}»«ENDIF» + «ENDFOR» + «ENDIF» +««« adiciona as PKS da entidade na lista de CONSTRAINT PK do Ternário + «{this.mapTernary.put(auxEnt.name, new ArrayList); null}» + «FOR att : auxEnt.attributes.filter[isIsKey]»«{this.primaryKeys_Ternary.add(auxEnt.name.toLowerCase+"_"+att.name.toString); null}» + «{this.mapTernary.get(auxEnt.name).add(att.name.toString.toLowerCase); null}» + «ENDFOR» +««« Lado ESQUERDO da relação N para N + «{this.mapTernary.put(auxLeftEntity.name, new ArrayList); null}» + «FOR att : auxLeftEntity.attributes.filter[isIsKey]»«{this.primaryKeys_Ternary.add(auxLeftEntity.name.toLowerCase+"_"+att.name.toString.toLowerCase); null}» + «{this.mapTernary.get(auxLeftEntity.name).add(auxLeftEntity.name.toLowerCase+"_"+att.name.toString.toLowerCase); null}» + «ENDFOR» +««« Lado DIREITO da relação N para N + «{this.mapTernary.put(auxRightEntity.name, new ArrayList); null}» + «FOR att : auxRightEntity.attributes.filter[isIsKey]»«{this.primaryKeys_Ternary.add(auxRightEntity.name.toLowerCase+"_"+att.name.toString.toLowerCase); null}» + «{this.mapTernary.get(auxRightEntity.name).add(auxRightEntity.name.toLowerCase+"_"+att.name.toString.toLowerCase); null}» + «ENDFOR» + CONSTRAINT pk_«r.name.toLowerCase» PRIMARY KEY («FOR pk : primaryKeys_Ternary SEPARATOR ", "»«pk.toString»«ENDFOR») «{this.primaryKeys_Ternary.clear; null}» + «{this.sc_AlterTbl_1toN.append(mysql_AlterTable_Ternary_RefMapper(r.name, auxEnt.name, auxRel.name, auxLeftEntity.name, auxRightEntity.name, mapTernary)); null}»«{this.mapTernary.clear; null}» + ); + «ENDFOR» ''' def private mysql_GeneralizationRefMapper(ERModel m) ''' - «FOR e : m.entities.filter[is !== null]» -- GENERALIZATION - ALTER TABLE ONLY public.«e.name.toLowerCase» ADD CONSTRAINT fk_gen_«e.name.toLowerCase+"_"+e.is.toString.toLowerCase» FOREIGN KEY («FOR a : e.is.attributes.filter[isIsKey] SEPARATOR ", "»«a.name.toString»«ENDFOR») REFERENCES public.«e.is.toString.toLowerCase» («FOR a : e.is.attributes.filter[isIsKey] SEPARATOR ", "»«a.name.toString»«ENDFOR»); - + ALTER TABLE «e.name.toLowerCase» ADD CONSTRAINT fk_gen_«e.name.toLowerCase+"_"+e.is.toString.toLowerCase» FOREIGN KEY («FOR a : e.is.attributes.filter[isIsKey] SEPARATOR ", "»«a.name.toString»«ENDFOR») REFERENCES «e.is.toString.toLowerCase» («FOR a : e.is.attributes.filter[isIsKey] SEPARATOR ", "»«a.name.toString»«ENDFOR»); «ENDFOR» ''' def private mysql_AlterTable_1to1_1toN_RefMapper(Entity alterTbl, Entity refTbl, Relation r, Boolean selfRelWithGen, Boolean selfRelNoGen, Boolean relWithOneGen, Boolean relNoGen, String cardinalityRel) ''' «IF selfRelWithGen» -- «cardinalityRel»: Self-relation WITH generalization - ALTER TABLE ONLY public.«alterTbl.name.toLowerCase» ADD CONSTRAINT fk_«r.name.toLowerCase» FOREIGN KEY («FOR a : refTbl.attributes.filter[isIsKey] SEPARATOR ", "»«r.name.toLowerCase+"_"+a.name.toLowerCase»«ENDFOR») REFERENCES public.«alterTbl.name.toLowerCase» («FOR a : refTbl.attributes.filter[isIsKey] SEPARATOR ", "»«a.name.toLowerCase»«ENDFOR»); + ALTER TABLE «alterTbl.name.toLowerCase» ADD CONSTRAINT fk_«r.name.toLowerCase» FOREIGN KEY («FOR a : refTbl.attributes.filter[isIsKey] SEPARATOR ", "»«r.name.toLowerCase+"_"+a.name.toLowerCase»«ENDFOR») REFERENCES «alterTbl.name.toLowerCase» («FOR a : refTbl.attributes.filter[isIsKey] SEPARATOR ", "»«a.name.toLowerCase»«ENDFOR»); «ELSEIF selfRelNoGen» -- «cardinalityRel»: Self-relation WITHOUT generalization - ALTER TABLE ONLY public.«alterTbl.name.toLowerCase» ADD CONSTRAINT fk_«r.name.toLowerCase» FOREIGN KEY («FOR a : alterTbl.attributes.filter[isIsKey] SEPARATOR ", "»«r.name.toLowerCase+"_"+a.name.toLowerCase»«ENDFOR») REFERENCES public.«refTbl.name.toLowerCase» («FOR a : alterTbl.attributes.filter[isIsKey] SEPARATOR ", "»«a.name.toLowerCase»«ENDFOR»); + ALTER TABLE «alterTbl.name.toLowerCase» ADD CONSTRAINT fk_«r.name.toLowerCase» FOREIGN KEY («FOR a : alterTbl.attributes.filter[isIsKey] SEPARATOR ", "»«r.name.toLowerCase+"_"+a.name.toLowerCase»«ENDFOR») REFERENCES «refTbl.name.toLowerCase» («FOR a : alterTbl.attributes.filter[isIsKey] SEPARATOR ", "»«a.name.toLowerCase»«ENDFOR»); «ELSEIF relWithOneGen» -- «cardinalityRel»: Relationship with ONE ENTITY that HAS GENERALIZATION - ALTER TABLE ONLY public.«alterTbl.name.toLowerCase» ADD CONSTRAINT fk_«r.name.toLowerCase» FOREIGN KEY («FOR a : refTbl.is.attributes.filter[isIsKey] SEPARATOR ", "»«r.name.toLowerCase+"_"+a.name.toLowerCase»«ENDFOR») REFERENCES public.«refTbl.name.toLowerCase» («FOR a : refTbl.is.attributes.filter[isIsKey] SEPARATOR ", "»«a.name.toLowerCase»«ENDFOR»); + ALTER TABLE «alterTbl.name.toLowerCase» ADD CONSTRAINT fk_«r.name.toLowerCase» FOREIGN KEY («FOR a : refTbl.is.attributes.filter[isIsKey] SEPARATOR ", "»«r.name.toLowerCase+"_"+a.name.toLowerCase»«ENDFOR») REFERENCES «refTbl.name.toLowerCase» («FOR a : refTbl.is.attributes.filter[isIsKey] SEPARATOR ", "»«a.name.toLowerCase»«ENDFOR»); «ELSEIF relNoGen» -- «cardinalityRel»: Relationship in which BOTH ENTITIES have NO GENERALIZATION - ALTER TABLE ONLY public.«alterTbl.name.toLowerCase» ADD CONSTRAINT fk_«r.name.toLowerCase» FOREIGN KEY («FOR a : refTbl.attributes.filter[isIsKey] SEPARATOR ", "»«r.name.toLowerCase+"_"+a.name.toLowerCase»«ENDFOR») REFERENCES public.«refTbl.name.toLowerCase» («FOR a : refTbl.attributes.filter[isIsKey] SEPARATOR ", "»«a.name.toLowerCase»«ENDFOR»); + ALTER TABLE «alterTbl.name.toLowerCase» ADD CONSTRAINT fk_«r.name.toLowerCase» FOREIGN KEY («FOR a : refTbl.attributes.filter[isIsKey] SEPARATOR ", "»«r.name.toLowerCase+"_"+a.name.toLowerCase»«ENDFOR») REFERENCES «refTbl.name.toLowerCase» («FOR a : refTbl.attributes.filter[isIsKey] SEPARATOR ", "»«a.name.toLowerCase»«ENDFOR»); «ENDIF» - ''' def private mysql_AlterTable_NtoN_RefMapper(Entity leftEnt, Entity rightEnt, Relation r, Boolean selfRelWithGen, Boolean selfRelNoGen, Boolean relWithOneGen, Boolean relNoGen, String cardinalityRel) ''' «IF selfRelWithGen» -- «cardinalityRel»: Self-relation WITH generalization - ALTER TABLE ONLY public.«r.name.toLowerCase» ADD CONSTRAINT fk_«r.name.toLowerCase+"_"+leftEnt.name.toLowerCase»_1 FOREIGN KEY («FOR a : leftEnt.is.attributes.filter[isIsKey] SEPARATOR ", "»«leftEnt.name.toLowerCase+"_"+a.name.toLowerCase+"_1"»«ENDFOR») REFERENCES public.«leftEnt.name.toLowerCase» («FOR a : leftEnt.is.attributes.filter[isIsKey] SEPARATOR ", "»«a.name.toLowerCase»«ENDFOR»); - - ALTER TABLE ONLY public.«r.name.toLowerCase» ADD CONSTRAINT fk_«r.name.toLowerCase+"_"+rightEnt.name.toLowerCase»_2 FOREIGN KEY («FOR a : rightEnt.is.attributes.filter[isIsKey] SEPARATOR ", "»«rightEnt.name.toLowerCase+"_"+a.name.toLowerCase+"_2"»«ENDFOR») REFERENCES public.«rightEnt.name.toLowerCase» («FOR a : rightEnt.is.attributes.filter[isIsKey] SEPARATOR ", "»«a.name.toLowerCase»«ENDFOR»); + ALTER TABLE «r.name.toLowerCase» ADD CONSTRAINT fk_«r.name.toLowerCase+"_"+leftEnt.name.toLowerCase»_1 FOREIGN KEY («FOR a : leftEnt.is.attributes.filter[isIsKey] SEPARATOR ", "»«leftEnt.name.toLowerCase+"_"+a.name.toLowerCase+"_1"»«ENDFOR») REFERENCES «leftEnt.name.toLowerCase» («FOR a : leftEnt.is.attributes.filter[isIsKey] SEPARATOR ", "»«a.name.toLowerCase»«ENDFOR»); + ALTER TABLE «r.name.toLowerCase» ADD CONSTRAINT fk_«r.name.toLowerCase+"_"+rightEnt.name.toLowerCase»_2 FOREIGN KEY («FOR a : rightEnt.is.attributes.filter[isIsKey] SEPARATOR ", "»«rightEnt.name.toLowerCase+"_"+a.name.toLowerCase+"_2"»«ENDFOR») REFERENCES «rightEnt.name.toLowerCase» («FOR a : rightEnt.is.attributes.filter[isIsKey] SEPARATOR ", "»«a.name.toLowerCase»«ENDFOR»); «ELSEIF selfRelNoGen» -- «cardinalityRel»: Self-relation WITHOUT generalization - ALTER TABLE ONLY public.«r.name.toLowerCase» ADD CONSTRAINT fk_«r.name.toLowerCase+"_"+leftEnt.name.toLowerCase»_1 FOREIGN KEY («FOR a : leftEnt.attributes.filter[isIsKey] SEPARATOR ", "»«leftEnt.name.toLowerCase+"_"+a.name.toLowerCase+"_1"»«ENDFOR») REFERENCES public.«leftEnt.name.toLowerCase» («FOR a : leftEnt.attributes.filter[isIsKey] SEPARATOR ", "»«a.name.toLowerCase»«ENDFOR»); - - ALTER TABLE ONLY public.«r.name.toLowerCase» ADD CONSTRAINT fk_«r.name.toLowerCase+"_"+rightEnt.name.toLowerCase»_2 FOREIGN KEY («FOR a : rightEnt.attributes.filter[isIsKey] SEPARATOR ", "»«rightEnt.name.toLowerCase+"_"+a.name.toLowerCase+"_2"»«ENDFOR») REFERENCES public.«rightEnt.name.toLowerCase» («FOR a : rightEnt.attributes.filter[isIsKey] SEPARATOR ", "»«a.name.toLowerCase»«ENDFOR»); + ALTER TABLE «r.name.toLowerCase» ADD CONSTRAINT fk_«r.name.toLowerCase+"_"+leftEnt.name.toLowerCase»_1 FOREIGN KEY («FOR a : leftEnt.attributes.filter[isIsKey] SEPARATOR ", "»«leftEnt.name.toLowerCase+"_"+a.name.toLowerCase+"_1"»«ENDFOR») REFERENCES «leftEnt.name.toLowerCase» («FOR a : leftEnt.attributes.filter[isIsKey] SEPARATOR ", "»«a.name.toLowerCase»«ENDFOR»); + ALTER TABLE «r.name.toLowerCase» ADD CONSTRAINT fk_«r.name.toLowerCase+"_"+rightEnt.name.toLowerCase»_2 FOREIGN KEY («FOR a : rightEnt.attributes.filter[isIsKey] SEPARATOR ", "»«rightEnt.name.toLowerCase+"_"+a.name.toLowerCase+"_2"»«ENDFOR») REFERENCES «rightEnt.name.toLowerCase» («FOR a : rightEnt.attributes.filter[isIsKey] SEPARATOR ", "»«a.name.toLowerCase»«ENDFOR»); «ELSEIF relWithOneGen» -- «cardinalityRel»: Relationship with ONE ENTITY that HAS GENERALIZATION - ALTER TABLE ONLY public.«r.name.toLowerCase» ADD CONSTRAINT fk_«r.name.toLowerCase+"_"+leftEnt.name.toLowerCase» FOREIGN KEY («FOR a : leftEnt.is.attributes.filter[isIsKey] SEPARATOR ", "»«leftEnt.name.toLowerCase+"_"+a.name.toLowerCase»«ENDFOR») REFERENCES public.«leftEnt.name.toLowerCase» («FOR a : leftEnt.is.attributes.filter[isIsKey] SEPARATOR ", "»«a.name.toLowerCase»«ENDFOR»); + ALTER TABLE «r.name.toLowerCase» ADD CONSTRAINT fk_«r.name.toLowerCase+"_"+leftEnt.name.toLowerCase» FOREIGN KEY («FOR a : leftEnt.is.attributes.filter[isIsKey] SEPARATOR ", "»«leftEnt.name.toLowerCase+"_"+a.name.toLowerCase»«ENDFOR») REFERENCES «leftEnt.name.toLowerCase» («FOR a : leftEnt.is.attributes.filter[isIsKey] SEPARATOR ", "»«a.name.toLowerCase»«ENDFOR»); «ELSEIF relNoGen» -- «cardinalityRel»: Relationship in which BOTH ENTITIES have NO GENERALIZATION - ALTER TABLE ONLY public.«r.name.toLowerCase» ADD CONSTRAINT fk_«r.name.toLowerCase+"_"+leftEnt.name.toLowerCase» FOREIGN KEY («FOR a : leftEnt.attributes.filter[isIsKey] SEPARATOR ", "»«leftEnt.name.toLowerCase+"_"+a.name.toLowerCase»«ENDFOR») REFERENCES public.«leftEnt.name.toLowerCase» («FOR a : leftEnt.attributes.filter[isIsKey] SEPARATOR ", "»«a.name.toLowerCase»«ENDFOR»); + ALTER TABLE «r.name.toLowerCase» ADD CONSTRAINT fk_«r.name.toLowerCase+"_"+leftEnt.name.toLowerCase» FOREIGN KEY («FOR a : leftEnt.attributes.filter[isIsKey] SEPARATOR ", "»«leftEnt.name.toLowerCase+"_"+a.name.toLowerCase»«ENDFOR») REFERENCES «leftEnt.name.toLowerCase» («FOR a : leftEnt.attributes.filter[isIsKey] SEPARATOR ", "»«a.name.toLowerCase»«ENDFOR»); «ENDIF» - ''' -} \ No newline at end of file + def private mysql_AlterTable_Ternary_RefMapper(String tabelaTernaria, String tabelaEntidade, String nomeRelacaoNN, String leftNN, String rightNN, HashMap keysMap) ''' +««« MAPA DO «tabelaEntidade.toUpperCase»: «FOR e : mapTernary.get(tabelaEntidade) SEPARATOR ", "»«e.toString»«ENDFOR» +««« MAPA DO «leftNN.toUpperCase»: «FOR e : mapTernary.get(leftNN) SEPARATOR ", "»«e.toString»«ENDFOR» +««« MAPA DO «rightNN.toUpperCase»: «FOR e : mapTernary.get(rightNN) SEPARATOR ", "»«e.toString»«ENDFOR» + -- [Ternary Relationship] + ALTER TABLE «tabelaTernaria» ADD CONSTRAINT fk_«tabelaTernaria+"_"+tabelaEntidade.toLowerCase» FOREIGN KEY («FOR e : this.mapTernary.get(tabelaEntidade) SEPARATOR ", "»«tabelaEntidade.toString.toLowerCase+"_"+e.toString»«ENDFOR») REFERENCES «tabelaEntidade» («FOR e : this.mapTernary.get(tabelaEntidade) SEPARATOR ", "»«e.toString»«ENDFOR»); + ALTER TABLE «tabelaTernaria» ADD CONSTRAINT fk_«tabelaTernaria+"_"+nomeRelacaoNN.toLowerCase» FOREIGN KEY («FOR e : this.mapTernary.get(leftNN) SEPARATOR ", "»«e.toString»«ENDFOR», «FOR e : this.mapTernary.get(rightNN) SEPARATOR ", "»«e.toString»«ENDFOR») REFERENCES «nomeRelacaoNN» («FOR e : this.mapTernary.get(leftNN) SEPARATOR ", "»«e.toString»«ENDFOR», «FOR e : this.mapTernary.get(rightNN) SEPARATOR ", "»«e.toString»«ENDFOR»); + ''' +} + + + diff --git a/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/generator/PlantUmlFileGenerator.class b/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/generator/PlantUmlFileGenerator.class index d510432..c2037c3 100644 Binary files a/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/generator/PlantUmlFileGenerator.class and b/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/generator/PlantUmlFileGenerator.class differ diff --git a/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/generator/PlantUmlFileGenerator.xtend b/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/generator/PlantUmlFileGenerator.xtend index 4e57294..1a8c84c 100644 --- a/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/generator/PlantUmlFileGenerator.xtend +++ b/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/generator/PlantUmlFileGenerator.xtend @@ -28,15 +28,15 @@ class PlantUmlFileGenerator extends AbstractGenerator { new SourceStringReader(plantUML).generateImage(out) - (fsa as IFileSystemAccessExtension3).generateFile("Diagram_(Conceptual_Model).png", + (fsa as IFileSystemAccessExtension3).generateFile(modeloER.domain.name.toLowerCase+"_Diagram.png", new ByteArrayInputStream(out.toByteArray)) - fsa.generateFile("Diagram_DescriptorGenerated.puml", plantUML) + fsa.generateFile(modeloER.domain.name.toLowerCase+"_DiagramDesc_Gen.puml", plantUML) } else { - fsa.generateFile("Diagram_ParcialDescriptorGenerated.puml", plantUML) + fsa.generateFile(modeloER.domain.name.toLowerCase+"_DiagramDesc_PartialGen.puml", plantUML) } } @@ -109,11 +109,11 @@ class PlantUmlFileGenerator extends AbstractGenerator { «IF !(leftEnding.target instanceof Entity) || !(rightEnding.target instanceof Entity)» «IF leftEnding.target instanceof Relation» «leftEnding.target.toString.toLowerCase»_dmd --«defineRightCardinalitySymbolUML(rightEnding.cardinality.toString)» «rightEnding.target.toString.toLowerCase» - note "Ternary\n Entity" as N_«leftEnding.target.toString.toLowerCase»_dmd + note "Ternary\n Relationship" as N_«leftEnding.target.toString.toLowerCase»_dmd N_«leftEnding.target.toString.toLowerCase»_dmd .. «leftEnding.target.toString.toLowerCase»_dmd «ELSEIF rightEnding.target instanceof Relation» «leftEnding.target.toString.toLowerCase» «defineLeftCardinalitySymbolUML(leftEnding.cardinality.toString)»-- «rightEnding.target.toString.toLowerCase»_dmd - note "Ternary\n Entity" as N_«rightEnding.target.toString.toLowerCase»_dmd + note "Ternary\n Relationship" as N_«rightEnding.target.toString.toLowerCase»_dmd N_«rightEnding.target.toString.toLowerCase»_dmd .. «rightEnding.target.toString.toLowerCase»_dmd «ENDIF» «ENDIF» diff --git a/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/generator/PostgresqlFileGenerator.class b/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/generator/PostgresqlFileGenerator.class index f1e5cfd..301b89c 100644 Binary files a/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/generator/PostgresqlFileGenerator.class and b/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/generator/PostgresqlFileGenerator.class differ diff --git a/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/generator/PostgresqlFileGenerator.xtend b/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/generator/PostgresqlFileGenerator.xtend index 1183ae1..77c7350 100644 --- a/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/generator/PostgresqlFileGenerator.xtend +++ b/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/generator/PostgresqlFileGenerator.xtend @@ -9,7 +9,7 @@ import org.xtext.unipampa.erdsl.erDsl.Entity import org.xtext.unipampa.erdsl.erDsl.Relation import org.xtext.unipampa.erdsl.erDsl.Attribute import java.util.ArrayList - +import java.util.HashMap /** * @@ -27,6 +27,9 @@ class PostgresqlFileGenerator extends AbstractGenerator { var primaryKeys = new ArrayList() var inheritedPrimaryKeys = new ArrayList() var primaryKeys_NtoN = new ArrayList + var primaryKeys_Ternary = new ArrayList + var mapTernary = new HashMap(); + var StringBuilder sc_AlterTbl_1to1 = new StringBuilder var StringBuilder sc_AlterTbl_1toN = new StringBuilder @@ -38,7 +41,7 @@ class PostgresqlFileGenerator extends AbstractGenerator { val modeloER = input.contents.get(0) as ERModel try { - fsa.generateFile('PgSQL_DDL.sql', pgsql_CreateModel(modeloER)) + fsa.generateFile(modeloER.domain.name.toLowerCase+'_Postgre.sql', pgsql_CreateModel(modeloER)) } catch (Exception e) { println(e.stackTrace.toString) } @@ -46,11 +49,7 @@ class PostgresqlFileGenerator extends AbstractGenerator { def private pgsql_CreateModel(ERModel modeloER) ''' - -- #################################################### - -- # PostGreSQL Template # - -- #################################################### - -- # Generated by ERtext # - -- #################################################### + -- PostGreSQL Template generated by ERtext «pgsql_DomainMapper(modeloER)» @@ -72,15 +71,15 @@ class PostgresqlFileGenerator extends AbstractGenerator { ''' def private pgsql_DomainMapper (ERModel m) ''' - -- Database: «m.domain.name.toString.toUpperCase» - -- DROP DATABASE «m.domain.name.toString.toUpperCase»; - -- CREATE DATABASE «m.domain.name.toString.toUpperCase»» + -- Database: «m.domain.name.toString.toUpperCase»; + -- CREATE DATABASE «m.domain.name.toString.toUpperCase»; -- WITH OWNER = postgres -- ENCODING = 'UTF8' -- TABLESPACE = pg_default -- CONNECTION LIMIT = -1; + -- DROP DATABASE «m.domain.name.toString.toUpperCase»; - --DROP TABLE IF EXISTS + -- DROP TABLE IF EXISTS -- «FOR e : m.entities SEPARATOR ", "»public."«e.name.toLowerCase»"«ENDFOR»«FOR r : m.relations.filter[((leftEnding.cardinality.equalsIgnoreCase('(0:N)') || leftEnding.cardinality.equalsIgnoreCase('(1:N)')) && (rightEnding.cardinality.equalsIgnoreCase('(0:N)') || rightEnding.cardinality.equalsIgnoreCase('(1:N)')))] BEFORE ", " SEPARATOR ", "»public."«r.name.toLowerCase»"«ENDFOR» -- CASCADE; ''' @@ -397,17 +396,105 @@ class PostgresqlFileGenerator extends AbstractGenerator { ''' def private pgsql_TernaryEntitiesMapper(ERModel model) ''' - -- ####################################################### - -- #TODO: auto-generated method stub for Ternary Entities# - -- ####################################################### + «FOR r : model.relations.filter[i|i.leftEnding.target instanceof Relation && i.rightEnding.target instanceof Entity]» + «var auxRel = r.leftEnding.target as Relation» + «var auxEnt = r.rightEnding.target as Entity» + «var auxLeftEntity = auxRel.leftEnding.target as Entity» + «var auxRightEntity = auxRel.rightEnding.target as Entity» +««« -- CASO 1 +««« -- Relação: «r.name.toString.toUpperCase» +««« -- Esquerda é relação: «auxRel.name.toUpperCase» +««« -- Direita é entidade: «auxEnt.name.toUpperCase» + -- Table: «r.name.toUpperCase» + -- DROP TABLE «r.name.toUpperCase»; + CREATE TABLE IF NOT EXISTS «r.name.toLowerCase» ( +««« Pega os atributos PK da entidade + «FOR att : auxEnt.attributes.filter[isIsKey]» «auxEnt.name.toLowerCase+"_"+pgsql_AttTypeChecker(att)» + «ENDFOR» + «FOR att : auxLeftEntity.attributes.filter[isIsKey]» «auxLeftEntity.name.toLowerCase+"_"+pgsql_AttTypeChecker(att)» + «ENDFOR» + «FOR att : auxRightEntity.attributes.filter[isIsKey]» «auxRightEntity.name.toLowerCase+"_"+pgsql_AttTypeChecker(att)» + «ENDFOR» +««« lista os atributos do relacionamento caso existam, se tiver alguma pk então adiciona no array de pks + «IF r.attributes !== null» + «FOR att : r.attributes» «pgsql_AttTypeChecker(att)»«IF att.isIsKey»«{this.primaryKeys_Ternary.add(att.name.toLowerCase); null}»«ENDIF» + «ENDFOR» + «ENDIF» +««« adiciona as PKS da entidade na lista de CONSTRAINT PK do Ternário + «{this.mapTernary.put(auxEnt.name, new ArrayList); null}» + «FOR att : auxEnt.attributes.filter[isIsKey]»«{this.primaryKeys_Ternary.add(auxEnt.name.toLowerCase+"_"+att.name.toString); null}» + «{this.mapTernary.get(auxEnt.name).add(att.name.toString.toLowerCase); null}» + «ENDFOR» +««« Lado ESQUERDO da relação N para N + «{this.mapTernary.put(auxLeftEntity.name, new ArrayList); null}» + «FOR att : auxLeftEntity.attributes.filter[isIsKey]»«{this.primaryKeys_Ternary.add(auxLeftEntity.name.toLowerCase+"_"+att.name.toString.toLowerCase); null}» + «{this.mapTernary.get(auxLeftEntity.name).add(auxLeftEntity.name.toLowerCase+"_"+att.name.toString.toLowerCase); null}» + «ENDFOR» +««« Lado DIREITO da relação N para N + «{this.mapTernary.put(auxRightEntity.name, new ArrayList); null}» + «FOR att : auxRightEntity.attributes.filter[isIsKey]»«{this.primaryKeys_Ternary.add(auxRightEntity.name.toLowerCase+"_"+att.name.toString.toLowerCase); null}» + «{this.mapTernary.get(auxRightEntity.name).add(auxRightEntity.name.toLowerCase+"_"+att.name.toString.toLowerCase); null}» + «ENDFOR» +««« -- MAPA DO «auxEnt.name.toUpperCase»: «FOR element : mapTernary.get(auxEnt.name) SEPARATOR ", "»«element.toString»«ENDFOR» +««« -- MAPA DO «auxLeftEntity.name.toUpperCase»: «FOR element : mapTernary.get(auxLeftEntity.name) SEPARATOR ", "»«element.toString»«ENDFOR» +««« -- MAPA DO «auxRightEntity.name.toUpperCase»: «FOR element : mapTernary.get(auxRightEntity.name) SEPARATOR ", "»«element.toString»«ENDFOR» + CONSTRAINT pk_«r.name.toLowerCase» PRIMARY KEY («FOR pk : primaryKeys_Ternary SEPARATOR ", "»«pk.toString»«ENDFOR») «{this.primaryKeys_Ternary.clear; null}» + «{this.sc_AlterTbl_1toN.append(pgsql_AlterTable_Ternary_RefMapper(r.name, auxEnt.name, auxRel.name, auxLeftEntity.name, auxRightEntity.name, mapTernary)); null}»«{this.mapTernary.clear; null}» + ); + + «ENDFOR» + «FOR r : model.relations.filter[i|i.leftEnding.target instanceof Entity && i.rightEnding.target instanceof Relation]» + «var auxEnt = r.leftEnding.target as Entity» + «var auxRel = r.rightEnding.target as Relation» + «var auxLeftEntity = auxRel.leftEnding.target as Entity» + «var auxRightEntity = auxRel.rightEnding.target as Entity» +««« -- CASO 2 +««« -- Relação: «r.name.toString.toUpperCase» +««« -- Esquerda é entidade: «auxRel.name.toUpperCase» +««« -- Direita é relação: «auxEnt.name.toUpperCase» + -- Table: «r.name.toUpperCase» + -- DROP TABLE «r.name.toUpperCase»; + CREATE TABLE IF NOT EXISTS «r.name.toLowerCase» ( +««« Pega os atributos PK da entidade + «FOR att : auxEnt.attributes.filter[isIsKey]» «auxEnt.name.toLowerCase+"_"+pgsql_AttTypeChecker(att)» + «ENDFOR» + «FOR att : auxLeftEntity.attributes.filter[isIsKey]» «auxLeftEntity.name.toLowerCase+"_"+pgsql_AttTypeChecker(att)» + «ENDFOR» + «FOR att : auxRightEntity.attributes.filter[isIsKey]» «auxRightEntity.name.toLowerCase+"_"+pgsql_AttTypeChecker(att)» + «ENDFOR» +««« lista os atributos do relacionamento caso existam, se tiver alguma pk então adiciona no array de pks + «IF r.attributes !== null» + «FOR att : r.attributes» «pgsql_AttTypeChecker(att)»«IF att.isIsKey»«{this.primaryKeys_Ternary.add(att.name.toLowerCase); null}»«ENDIF» + «ENDFOR» + «ENDIF» +««« adiciona as PKS da entidade na lista de CONSTRAINT PK do Ternário + «{this.mapTernary.put(auxEnt.name, new ArrayList); null}» + «FOR att : auxEnt.attributes.filter[isIsKey]»«{this.primaryKeys_Ternary.add(auxEnt.name.toLowerCase+"_"+att.name.toString); null}» + «{this.mapTernary.get(auxEnt.name).add(att.name.toString.toLowerCase); null}» + «ENDFOR» +««« Lado ESQUERDO da relação N para N + «{this.mapTernary.put(auxLeftEntity.name, new ArrayList); null}» + «FOR att : auxLeftEntity.attributes.filter[isIsKey]»«{this.primaryKeys_Ternary.add(auxLeftEntity.name.toLowerCase+"_"+att.name.toString.toLowerCase); null}» + «{this.mapTernary.get(auxLeftEntity.name).add(auxLeftEntity.name.toLowerCase+"_"+att.name.toString.toLowerCase); null}» + «ENDFOR» +««« Lado DIREITO da relação N para N + «{this.mapTernary.put(auxRightEntity.name, new ArrayList); null}» + «FOR att : auxRightEntity.attributes.filter[isIsKey]»«{this.primaryKeys_Ternary.add(auxRightEntity.name.toLowerCase+"_"+att.name.toString.toLowerCase); null}» + «{this.mapTernary.get(auxRightEntity.name).add(auxRightEntity.name.toLowerCase+"_"+att.name.toString.toLowerCase); null}» + «ENDFOR» +««« -- MAPA DO «auxEnt.name.toUpperCase»: «FOR element : mapTernary.get(auxEnt.name) SEPARATOR ", "»«element.toString»«ENDFOR» +««« -- MAPA DO «auxLeftEntity.name.toUpperCase»: «FOR element : mapTernary.get(auxLeftEntity.name) SEPARATOR ", "»«element.toString»«ENDFOR» +««« -- MAPA DO «auxRightEntity.name.toUpperCase»: «FOR element : mapTernary.get(auxRightEntity.name) SEPARATOR ", "»«element.toString»«ENDFOR» + CONSTRAINT pk_«r.name.toLowerCase» PRIMARY KEY («FOR pk : primaryKeys_Ternary SEPARATOR ", "»«pk.toString»«ENDFOR») «{this.primaryKeys_Ternary.clear; null}» + «{this.sc_AlterTbl_1toN.append(pgsql_AlterTable_Ternary_RefMapper(r.name, auxEnt.name, auxRel.name, auxLeftEntity.name, auxRightEntity.name, mapTernary)); null}»«{this.mapTernary.clear; null}» + ); + «ENDFOR» ''' def private pgsql_GeneralizationRefMapper(ERModel m) ''' - «FOR e : m.entities.filter[is !== null]» -- GENERALIZATION ALTER TABLE ONLY public.«e.name.toLowerCase» ADD CONSTRAINT fk_gen_«e.name.toLowerCase+"_"+e.is.toString.toLowerCase» FOREIGN KEY («FOR a : e.is.attributes.filter[isIsKey] SEPARATOR ", "»«a.name.toString»«ENDFOR») REFERENCES public.«e.is.toString.toLowerCase» («FOR a : e.is.attributes.filter[isIsKey] SEPARATOR ", "»«a.name.toString»«ENDFOR»); - «ENDFOR» ''' @@ -425,19 +512,16 @@ class PostgresqlFileGenerator extends AbstractGenerator { -- «cardinalityRel»: Relationship in which BOTH ENTITIES have NO GENERALIZATION ALTER TABLE ONLY public.«alterTbl.name.toLowerCase» ADD CONSTRAINT fk_«r.name.toLowerCase» FOREIGN KEY («FOR a : refTbl.attributes.filter[isIsKey] SEPARATOR ", "»«r.name.toLowerCase+"_"+a.name.toLowerCase»«ENDFOR») REFERENCES public.«refTbl.name.toLowerCase» («FOR a : refTbl.attributes.filter[isIsKey] SEPARATOR ", "»«a.name.toLowerCase»«ENDFOR»); «ENDIF» - ''' def private pgsql_AlterTable_NtoN_RefMapper(Entity leftEnt, Entity rightEnt, Relation r, Boolean selfRelWithGen, Boolean selfRelNoGen, Boolean relWithOneGen, Boolean relNoGen, String cardinalityRel) ''' «IF selfRelWithGen» -- «cardinalityRel»: Self-relation WITH generalization ALTER TABLE ONLY public.«r.name.toLowerCase» ADD CONSTRAINT fk_«r.name.toLowerCase+"_"+leftEnt.name.toLowerCase»_1 FOREIGN KEY («FOR a : leftEnt.is.attributes.filter[isIsKey] SEPARATOR ", "»«leftEnt.name.toLowerCase+"_"+a.name.toLowerCase+"_1"»«ENDFOR») REFERENCES public.«leftEnt.name.toLowerCase» («FOR a : leftEnt.is.attributes.filter[isIsKey] SEPARATOR ", "»«a.name.toLowerCase»«ENDFOR»); - ALTER TABLE ONLY public.«r.name.toLowerCase» ADD CONSTRAINT fk_«r.name.toLowerCase+"_"+rightEnt.name.toLowerCase»_2 FOREIGN KEY («FOR a : rightEnt.is.attributes.filter[isIsKey] SEPARATOR ", "»«rightEnt.name.toLowerCase+"_"+a.name.toLowerCase+"_2"»«ENDFOR») REFERENCES public.«rightEnt.name.toLowerCase» («FOR a : rightEnt.is.attributes.filter[isIsKey] SEPARATOR ", "»«a.name.toLowerCase»«ENDFOR»); «ELSEIF selfRelNoGen» -- «cardinalityRel»: Self-relation WITHOUT generalization ALTER TABLE ONLY public.«r.name.toLowerCase» ADD CONSTRAINT fk_«r.name.toLowerCase+"_"+leftEnt.name.toLowerCase»_1 FOREIGN KEY («FOR a : leftEnt.attributes.filter[isIsKey] SEPARATOR ", "»«leftEnt.name.toLowerCase+"_"+a.name.toLowerCase+"_1"»«ENDFOR») REFERENCES public.«leftEnt.name.toLowerCase» («FOR a : leftEnt.attributes.filter[isIsKey] SEPARATOR ", "»«a.name.toLowerCase»«ENDFOR»); - ALTER TABLE ONLY public.«r.name.toLowerCase» ADD CONSTRAINT fk_«r.name.toLowerCase+"_"+rightEnt.name.toLowerCase»_2 FOREIGN KEY («FOR a : rightEnt.attributes.filter[isIsKey] SEPARATOR ", "»«rightEnt.name.toLowerCase+"_"+a.name.toLowerCase+"_2"»«ENDFOR») REFERENCES public.«rightEnt.name.toLowerCase» («FOR a : rightEnt.attributes.filter[isIsKey] SEPARATOR ", "»«a.name.toLowerCase»«ENDFOR»); «ELSEIF relWithOneGen» -- «cardinalityRel»: Relationship with ONE ENTITY that HAS GENERALIZATION @@ -446,9 +530,16 @@ class PostgresqlFileGenerator extends AbstractGenerator { -- «cardinalityRel»: Relationship in which BOTH ENTITIES have NO GENERALIZATION ALTER TABLE ONLY public.«r.name.toLowerCase» ADD CONSTRAINT fk_«r.name.toLowerCase+"_"+leftEnt.name.toLowerCase» FOREIGN KEY («FOR a : leftEnt.attributes.filter[isIsKey] SEPARATOR ", "»«leftEnt.name.toLowerCase+"_"+a.name.toLowerCase»«ENDFOR») REFERENCES public.«leftEnt.name.toLowerCase» («FOR a : leftEnt.attributes.filter[isIsKey] SEPARATOR ", "»«a.name.toLowerCase»«ENDFOR»); «ENDIF» - ''' + def private pgsql_AlterTable_Ternary_RefMapper(String tabelaTernaria, String tabelaEntidade, String nomeRelacaoNN, String leftNN, String rightNN, HashMap keysMap) ''' +««« MAPA DO «tabelaEntidade.toUpperCase»: «FOR e : mapTernary.get(tabelaEntidade) SEPARATOR ", "»«e.toString»«ENDFOR» +««« MAPA DO «leftNN.toUpperCase»: «FOR e : mapTernary.get(leftNN) SEPARATOR ", "»«e.toString»«ENDFOR» +««« MAPA DO «rightNN.toUpperCase»: «FOR e : mapTernary.get(rightNN) SEPARATOR ", "»«e.toString»«ENDFOR» + -- [Ternary Relationship] + ALTER TABLE ONLY public.«tabelaTernaria» ADD CONSTRAINT fk_«tabelaTernaria+"_"+tabelaEntidade.toLowerCase» FOREIGN KEY («FOR e : this.mapTernary.get(tabelaEntidade) SEPARATOR ", "»«tabelaEntidade.toString.toLowerCase+"_"+e.toString»«ENDFOR») REFERENCES public.«tabelaEntidade» («FOR e : this.mapTernary.get(tabelaEntidade) SEPARATOR ", "»«e.toString»«ENDFOR»); + ALTER TABLE ONLY public.«tabelaTernaria» ADD CONSTRAINT fk_«tabelaTernaria+"_"+nomeRelacaoNN.toLowerCase» FOREIGN KEY («FOR e : this.mapTernary.get(leftNN) SEPARATOR ", "»«e.toString»«ENDFOR», «FOR e : this.mapTernary.get(rightNN) SEPARATOR ", "»«e.toString»«ENDFOR») REFERENCES public.«nomeRelacaoNN» («FOR e : this.mapTernary.get(leftNN) SEPARATOR ", "»«e.toString»«ENDFOR», «FOR e : this.mapTernary.get(rightNN) SEPARATOR ", "»«e.toString»«ENDFOR»); + ''' } diff --git a/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/scoping/.ErDslScopeProvider.java._trace b/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/scoping/.ErDslScopeProvider.java._trace index 178299a..127c18d 100644 Binary files a/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/scoping/.ErDslScopeProvider.java._trace and b/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/scoping/.ErDslScopeProvider.java._trace differ diff --git a/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/scoping/.ErDslScopeProvider.xtendbin b/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/scoping/.ErDslScopeProvider.xtendbin index d99f9a1..440641e 100644 Binary files a/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/scoping/.ErDslScopeProvider.xtendbin and b/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/scoping/.ErDslScopeProvider.xtendbin differ diff --git a/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/scoping/ErDslScopeProvider.class b/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/scoping/ErDslScopeProvider.class index d7d8878..b7dc64e 100644 Binary files a/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/scoping/ErDslScopeProvider.class and b/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/scoping/ErDslScopeProvider.class differ diff --git a/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/scoping/ErDslScopeProvider.xtend b/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/scoping/ErDslScopeProvider.xtend index 5c5b231..fc4a8b0 100644 --- a/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/scoping/ErDslScopeProvider.xtend +++ b/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/scoping/ErDslScopeProvider.xtend @@ -20,25 +20,31 @@ import org.xtext.unipampa.erdsl.erDsl.Relation class ErDslScopeProvider extends AbstractErDslScopeProvider { - override IScope getScope(EObject context, EReference reference) { - if (context instanceof Entity) { - if (true) { +// override IScope getScope(EObject context, EReference reference) { +// if (context instanceof Entity) { +// if (true) { // println("ENTIDADE\n CONTEXTO = " + context.name.toString) // println(" REFERENCIA = " + reference.name.toString) - } - return Scopes.scopeFor((context.eContainer as ERModel).entities.filter[x|x != context]) - } else if (context instanceof Relation) { - if (true) { +// } +// return Scopes.scopeFor((context.eContainer as ERModel).entities.filter[x|x != context]) +// } else if (context instanceof Relation) { +// if (true) { // println("RELAÇÃO\n CONTEXTO = " + context.name.toString) // println(" REFERENCIA = " + reference.name.toString) - } +// } // println("ENTIDADES: "+Scopes.scopeFor((context.eContainer as ERModel).entities)); // println("RELAÇÕES: "+Scopes.scopeFor((context.eContainer as ERModel).relations)); // return Scopes.scopeFor((context.eContainer as ERModel).relations.filter[x|x != context]) +// } +// return super.getScope(context, reference) +// } + + override IScope getScope(EObject context, EReference reference) { + if (context instanceof Entity) { + return Scopes.scopeFor((context.eContainer as ERModel).entities.filter[x|x != context]) } - return super.getScope(context, reference) + return super.getScope(context, reference) } - } diff --git a/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/validation/.ErDslValidator.xtendbin b/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/validation/.ErDslValidator.xtendbin index 5f8c65c..128aecd 100644 Binary files a/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/validation/.ErDslValidator.xtendbin and b/org.xtext.unipampa.erdsl/bin/org/xtext/unipampa/erdsl/validation/.ErDslValidator.xtendbin differ diff --git a/org.xtext.unipampa.erdsl/src-gen/org/xtext/unipampa/erdsl/erDsl/impl/EntityImpl.java b/org.xtext.unipampa.erdsl/src-gen/org/xtext/unipampa/erdsl/erDsl/impl/EntityImpl.java index 430b3da..842ec49 100644 --- a/org.xtext.unipampa.erdsl/src-gen/org/xtext/unipampa/erdsl/erDsl/impl/EntityImpl.java +++ b/org.xtext.unipampa.erdsl/src-gen/org/xtext/unipampa/erdsl/erDsl/impl/EntityImpl.java @@ -364,6 +364,7 @@ public String toString() // result.append(generalization); // result.append(')'); // return result.toString(); + return name; } diff --git a/org.xtext.unipampa.erdsl/src-gen/org/xtext/unipampa/erdsl/erDsl/impl/RelationImpl.java b/org.xtext.unipampa.erdsl/src-gen/org/xtext/unipampa/erdsl/erDsl/impl/RelationImpl.java index 7debfc6..1080792 100644 --- a/org.xtext.unipampa.erdsl/src-gen/org/xtext/unipampa/erdsl/erDsl/impl/RelationImpl.java +++ b/org.xtext.unipampa.erdsl/src-gen/org/xtext/unipampa/erdsl/erDsl/impl/RelationImpl.java @@ -387,6 +387,7 @@ public String toString() // result.append(name); // result.append(')'); // return result.toString(); + return name; } diff --git a/org.xtext.unipampa.erdsl/src/org/xtext/unipampa/erdsl/GenerateErDsl.mwe2 b/org.xtext.unipampa.erdsl/src/org/xtext/unipampa/erdsl/GenerateErDsl.mwe2 index b5f09fb..03aebed 100644 --- a/org.xtext.unipampa.erdsl/src/org/xtext/unipampa/erdsl/GenerateErDsl.mwe2 +++ b/org.xtext.unipampa.erdsl/src/org/xtext/unipampa/erdsl/GenerateErDsl.mwe2 @@ -60,6 +60,7 @@ Workflow { junitSupport = { junitVersion = "5" } +// fragment = org.eclipse.xtext.xtext.generator.ui.codemining.CodeMiningFragment {} } } } \ No newline at end of file diff --git a/org.xtext.unipampa.erdsl/src/org/xtext/unipampa/erdsl/generator/HtmlFileGenerator.xtend b/org.xtext.unipampa.erdsl/src/org/xtext/unipampa/erdsl/generator/HtmlFileGenerator.xtend index e97d656..4616f14 100644 --- a/org.xtext.unipampa.erdsl/src/org/xtext/unipampa/erdsl/generator/HtmlFileGenerator.xtend +++ b/org.xtext.unipampa.erdsl/src/org/xtext/unipampa/erdsl/generator/HtmlFileGenerator.xtend @@ -17,7 +17,7 @@ class HtmlFileGenerator extends AbstractGenerator { try { - fsa.generateFile('Logical_Textual_Scheme.html', CreateLogical(modeloER)) + fsa.generateFile(modeloER.domain.name.toLowerCase+'_Logical.html', CreateLogical(modeloER)) } catch (Exception e) { @@ -249,7 +249,7 @@ class HtmlFileGenerator extends AbstractGenerator { «IF aux.is === null» «IF !relation.leftEnding.target.toString.equalsIgnoreCase(relation.rightEnding.target.toString)» «html_ListPKtoFK(aux)» - «ELSE» + «ELSEIF relation.leftEnding.target.toString.equalsIgnoreCase(relation.rightEnding.target.toString)» «html_ListPKtoFK_SelfRelationship(aux, relation.name.toLowerCase)» «ENDIF» «ELSEIF aux.is !== null» @@ -317,9 +317,16 @@ class HtmlFileGenerator extends AbstractGenerator { «FOR entity : m.entities» «IF relation.leftEnding.target.toString.equalsIgnoreCase(entity.name) && !(relation.leftEnding.target.toString.equalsIgnoreCase(relation.rightEnding.target.toString))» - «FOR attribute : entity.attributes.filter[isIsKey] SEPARATOR " | "» - «html_AttributeStyleForInheritedPK(attribute)»_fk - «ENDFOR» + «IF entity.is !== null» + «FOR attribute : entity.is.attributes.filter[isIsKey] SEPARATOR " | "» + «html_AttributeStyleForInheritedPK(attribute)»_fk + «ENDFOR» + «ELSE» + «FOR attribute : entity.attributes.filter[isIsKey] SEPARATOR " | "» + «html_AttributeStyleForInheritedPK(attribute)»_fk + «ENDFOR» + «ENDIF» + «ENDIF» «ENDFOR» @@ -338,15 +345,27 @@ class HtmlFileGenerator extends AbstractGenerator { * */» «IF relation.leftEnding.target.toString.equalsIgnoreCase(entity.name) && (relation.leftEnding.target.toString.equalsIgnoreCase(relation.rightEnding.target.toString))» - «FOR attribute : entity.attributes.filter[isKey] SEPARATOR " | "» - «html_AttributeStyleForInheritedPK(attribute)»_fk_1 - «ENDFOR» + «IF entity.is !== null» + «FOR attribute : entity.is.attributes.filter[isKey] SEPARATOR " | "» + «html_AttributeStyleForInheritedPK(attribute)»_fk_1 + «ENDFOR» + «ELSE» + «FOR attribute : entity.attributes.filter[isKey] SEPARATOR " | "» + «html_AttributeStyleForInheritedPK(attribute)»_fk_1 + «ENDFOR» + «ENDIF» «ENDIF» «IF relation.rightEnding.target.toString.equalsIgnoreCase(entity.name) && (relation.rightEnding.target.toString.equalsIgnoreCase(relation.leftEnding.target.toString))» - «FOR attribute : entity.attributes.filter[isIsKey] BEFORE " | " SEPARATOR " | "» - «html_AttributeStyleForInheritedPK(attribute)»_fk_2 - «ENDFOR» + «IF entity.is !== null» + «FOR attribute : entity.is.attributes.filter[isIsKey] BEFORE " | " SEPARATOR " | "» + «html_AttributeStyleForInheritedPK(attribute)»_fk_2 + «ENDFOR» + «ELSE» + «FOR attribute : entity.attributes.filter[isIsKey] BEFORE " | " SEPARATOR " | "» + «html_AttributeStyleForInheritedPK(attribute)»_fk_2 + «ENDFOR» + «ENDIF» «ENDIF» «ENDFOR» @@ -439,21 +458,65 @@ class HtmlFileGenerator extends AbstractGenerator { ''' def private html_ListPKtoFK_Alt (Entity e) ''' - «FOR att : e.attributes.filter[isIsKey] SEPARATOR " , "» - «att.name.toLowerCase»_fk - «ENDFOR» + «IF e.is !== null» + «FOR att : e.is.attributes.filter[isIsKey] SEPARATOR " , "» + «att.name.toLowerCase»_fk + «ENDFOR» + «ELSE» + «FOR att : e.attributes.filter[isIsKey] SEPARATOR " , "» + «att.name.toLowerCase»_fk + «ENDFOR» + «ENDIF» + ''' + + def private html_ListPKtoFK_Alt (Entity e, String r) ''' + «IF e.is !== null» + «FOR att : e.is.attributes.filter[isIsKey] SEPARATOR " , "» + «att.name.toLowerCase»_fk + «ENDFOR» + «ELSE» + «FOR att : e.attributes.filter[isIsKey] SEPARATOR " , "» + «att.name.toLowerCase»_fk + «ENDFOR» + «ENDIF» ''' def private html_ListPKtoFK_SelfRelationship (Entity e, String r) ''' - «FOR att : e.attributes.filter[isIsKey] BEFORE " | " SEPARATOR " | "» - «att.name.toLowerCase+"_"+r»_fk + «IF e.is !== null» + «FOR att : e.is.attributes.filter[isIsKey] BEFORE " | " SEPARATOR " | "» + «att.name.toLowerCase+"_"+r»_fk «ENDFOR» + «ELSE» + «FOR att : e.attributes.filter[isIsKey] BEFORE " | " SEPARATOR " | "» + «att.name.toLowerCase+"_"+r»_fk + «ENDFOR» + «ENDIF» + + ''' def private html_ListPKtoFK_SelfRelationship_Alt (Entity e, String r) ''' - «FOR att : e.attributes.filter[isIsKey] SEPARATOR " , "» - «att.name.toLowerCase+"_"+r»_fk - «ENDFOR» + «IF e.is !== null» + «FOR att : e.is.attributes.filter[isIsKey] SEPARATOR " , "» + «att.name.toLowerCase+"_"+r»_fk + «ENDFOR» + «ELSE» + «FOR att : e.attributes.filter[isIsKey] SEPARATOR " , "» + «att.name.toLowerCase+"_"+r»_fk + «ENDFOR» + «ENDIF» + ''' + + def private html_ListPKtoFK_SelfRelationship_Alt (Entity e, int i) ''' + «IF e.is !== null» + «FOR att : e.is.attributes.filter[isIsKey] SEPARATOR " , "» + «att.name.toLowerCase»_fk_«i» + «ENDFOR» + «ELSE» + «FOR att : e.attributes.filter[isIsKey] SEPARATOR " , "» + «att.name.toLowerCase»_fk_«i» + «ENDFOR» + «ENDIF» ''' def private html_RelationshipsMapping(ERModel m) ''' @@ -502,7 +565,7 @@ class HtmlFileGenerator extends AbstractGenerator { (relation.rightEnding.cardinality.equalsIgnoreCase('(0:1)') || relation.rightEnding.cardinality.equalsIgnoreCase('(1:1)')))» «html_BinaryRelationshipNameStyle(relation.name, relation.leftEnding.target.toString, relation.rightEnding.target.toString, relation.leftEnding.cardinality, relation.rightEnding.cardinality)» - +
Attribute ( «FOR aux : m.entities» «IF relation.leftEnding.target.toString.equalsIgnoreCase(aux.name)» @@ -539,7 +602,7 @@ class HtmlFileGenerator extends AbstractGenerator { (relation.rightEnding.cardinality.equalsIgnoreCase('(0:N)') || relation.rightEnding.cardinality.equalsIgnoreCase('(1:N)'))))» «html_BinaryRelationshipNameStyle(relation.name, relation.leftEnding.target.toString, relation.rightEnding.target.toString, relation.leftEnding.cardinality, relation.rightEnding.cardinality)» - +
Attribute ( «FOR aux : m.entities» «IF relation.leftEnding.target.toString.equalsIgnoreCase(aux.name)» @@ -566,7 +629,7 @@ class HtmlFileGenerator extends AbstractGenerator { (relation.rightEnding.cardinality.equalsIgnoreCase('(0:1)') || relation.rightEnding.cardinality.equalsIgnoreCase('(1:1)'))))» «html_BinaryRelationshipNameStyle(relation.name, relation.leftEnding.target.toString, relation.rightEnding.target.toString, relation.leftEnding.cardinality, relation.rightEnding.cardinality)» - +
Attribute ( «FOR aux : m.entities» «IF relation.rightEnding.target.toString.equalsIgnoreCase(aux.name)» @@ -604,17 +667,25 @@ class HtmlFileGenerator extends AbstractGenerator { (relation.rightEnding.cardinality.equalsIgnoreCase('(0:N)') || relation.rightEnding.cardinality.equalsIgnoreCase('(1:N)')))» «html_BinaryRelationshipNameStyle(relation.name, relation.leftEnding.target.toString, relation.rightEnding.target.toString, relation.leftEnding.cardinality, relation.rightEnding.cardinality)» - +
Attribute ( - «html_ListPKtoFK_Alt(relation.leftEnding.target as Entity)» + «IF relation.leftEnding.target.toString.equalsIgnoreCase(relation.rightEnding.target.toString)» + «html_ListPKtoFK_SelfRelationship_Alt(relation.leftEnding.target as Entity, 1)» + «ELSE» + «html_ListPKtoFK_Alt(relation.leftEnding.target as Entity)» + «ENDIF» ) in «html_EntityNameTag(relation.name)» references «html_EntityNameTag(relation.leftEnding.target.toString)»

Attribute ( - «html_ListPKtoFK_Alt(relation.rightEnding.target as Entity)» + «IF relation.leftEnding.target.toString.equalsIgnoreCase(relation.rightEnding.target.toString)» + «html_ListPKtoFK_SelfRelationship_Alt(relation.rightEnding.target as Entity, 2)» + «ELSE» + «html_ListPKtoFK_Alt(relation.rightEnding.target as Entity)» + «ENDIF» ) in «html_EntityNameTag(relation.name)» references «html_EntityNameTag(relation.rightEnding.target.toString)»
@@ -631,7 +702,7 @@ class HtmlFileGenerator extends AbstractGenerator { «IF relation.name.nullOrEmpty» _Unnamed_ «ELSEIF !relation.name.nullOrEmpty»«relation.name.toUpperCase»«ENDIF» «relation.leftEnding.target.toString.toUpperCase+" "+relation.leftEnding.cardinality.toString.toUpperCase» relates «relation.rightEnding.cardinality.toUpperCase+" "+ relation.rightEnding.target.toString.toUpperCase» -
+


«html_Ternary_Relationships_Attributes(m, relation)» «ENDFOR» ''' diff --git a/org.xtext.unipampa.erdsl/src/org/xtext/unipampa/erdsl/generator/MysqlFileGenerator.xtend b/org.xtext.unipampa.erdsl/src/org/xtext/unipampa/erdsl/generator/MysqlFileGenerator.xtend index b391f00..63124f5 100644 --- a/org.xtext.unipampa.erdsl/src/org/xtext/unipampa/erdsl/generator/MysqlFileGenerator.xtend +++ b/org.xtext.unipampa.erdsl/src/org/xtext/unipampa/erdsl/generator/MysqlFileGenerator.xtend @@ -9,7 +9,7 @@ import org.xtext.unipampa.erdsl.erDsl.Entity import org.xtext.unipampa.erdsl.erDsl.Relation import org.xtext.unipampa.erdsl.erDsl.Attribute import java.util.ArrayList - +import java.util.HashMap /** * @@ -27,29 +27,28 @@ class MysqlFileGenerator extends AbstractGenerator { var primaryKeys = new ArrayList() var inheritedPrimaryKeys = new ArrayList() var primaryKeys_NtoN = new ArrayList + var primaryKeys_Ternary = new ArrayList + var mapTernary = new HashMap(); + var StringBuilder sc_AlterTbl_1to1 = new StringBuilder var StringBuilder sc_AlterTbl_1toN = new StringBuilder var StringBuilder sc_AlterTbl_NtoN = new StringBuilder - var StringBuilder sc_AlterTbl_Ternary = new StringBuilder + var StringBuilder sc_AlterTbl_Ternary = new StringBuilder override doGenerate(Resource input, IFileSystemAccess2 fsa, IGeneratorContext context) { val modeloER = input.contents.get(0) as ERModel try { - fsa.generateFile('MySQL_DDL.sql', mysql_CreateModel(modeloER)) + fsa.generateFile(modeloER.domain.name.toLowerCase+'_My.sql', mysql_CreateModel(modeloER)) } catch (Exception e) { println(e.stackTrace.toString) } } def private mysql_CreateModel(ERModel modeloER) ''' - -- #################################################### - -- # MySQL Template # - -- #################################################### - -- # Generated by ERtext # - -- #################################################### + -- MySQL Template generated by ERtext «mysql_DomainMapper(modeloER)» @@ -71,13 +70,14 @@ class MysqlFileGenerator extends AbstractGenerator { ''' def private mysql_DomainMapper (ERModel m) ''' - -- Database: «m.domain.name.toString.toUpperCase» + -- Database: «m.domain.name.toString.toUpperCase»; + -- CREATE DATABASE «m.domain.name.toString.toUpperCase»; + -- USE «m.domain.name.toString.toUpperCase»; -- DROP DATABASE «m.domain.name.toString.toUpperCase»; - -- CREATE DATABASE IF NOT EXISTS «m.domain.name.toString.toUpperCase»» - --DROP TABLE IF EXISTS - -- «FOR e : m.entities SEPARATOR ", "»public."«e.name.toLowerCase»"«ENDFOR»«FOR r : m.relations.filter[((leftEnding.cardinality.equalsIgnoreCase('(0:N)') || leftEnding.cardinality.equalsIgnoreCase('(1:N)')) && (rightEnding.cardinality.equalsIgnoreCase('(0:N)') || rightEnding.cardinality.equalsIgnoreCase('(1:N)')))] BEFORE ", " SEPARATOR ", "»public."«r.name.toLowerCase»"«ENDFOR» - -- CASCADE; +««« -- DROP TABLE IF EXISTS +««« -- «FOR e : m.entities SEPARATOR ", "»«e.name.toLowerCase»«ENDFOR»«FOR r : m.relations.filter[((leftEnding.cardinality.equalsIgnoreCase('(0:N)') || leftEnding.cardinality.equalsIgnoreCase('(1:N)')) && (rightEnding.cardinality.equalsIgnoreCase('(0:N)') || rightEnding.cardinality.equalsIgnoreCase('(1:N)')))] BEFORE ", " SEPARATOR ", "»«r.name.toLowerCase»«ENDFOR» +««« -- CASCADE; ''' def private mysql_SimpleEntitiesMapper(ERModel m) ''' @@ -144,7 +144,7 @@ class MysqlFileGenerator extends AbstractGenerator { «ELSEIF a.type.toString.equalsIgnoreCase("money")»«a.name.toLowerCase» NUMERIC NOT NULL, «ELSEIF a.type.toString.equalsIgnoreCase("double")»«a.name.toLowerCase» FLOAT NOT NULL, «ELSEIF a.type.toString.equalsIgnoreCase("boolean")»«a.name.toLowerCase» BIT NOT NULL, - «ELSEIF a.type.toString.equalsIgnoreCase("file")»«a.name.toLowerCase» BLOB NOT NULL, + «ELSEIF a.type.toString.equalsIgnoreCase("file")»«a.name.toLowerCase» BINARY NOT NULL, «ENDIF» ''' @@ -154,8 +154,8 @@ class MysqlFileGenerator extends AbstractGenerator { «ELSEIF a.type.toString.equalsIgnoreCase("datetime")» DATE NOT NULL, «ELSEIF a.type.toString.equalsIgnoreCase("money")» NUMERIC NOT NULL, «ELSEIF a.type.toString.equalsIgnoreCase("double")» FLOAT NOT NULL, - «ELSEIF a.type.toString.equalsIgnoreCase("boolean")» BIT NOT NULL, - «ELSEIF a.type.toString.equalsIgnoreCase("file")» BLOB NOT NULL, + «ELSEIF a.type.toString.equalsIgnoreCase("boolean")» BOOLEAN NOT NULL, + «ELSEIF a.type.toString.equalsIgnoreCase("file")» BINARY NOT NULL, «ENDIF» ''' @@ -392,56 +392,141 @@ class MysqlFileGenerator extends AbstractGenerator { ''' def private mysql_TernaryEntitiesMapper(ERModel model) ''' - -- ####################################################### - -- #TODO: auto-generated method stub for Ternary Entities# - -- ####################################################### + «FOR r : model.relations.filter[i|i.leftEnding.target instanceof Relation && i.rightEnding.target instanceof Entity]» + «var auxRel = r.leftEnding.target as Relation» + «var auxEnt = r.rightEnding.target as Entity» + «var auxLeftEntity = auxRel.leftEnding.target as Entity» + «var auxRightEntity = auxRel.rightEnding.target as Entity» +««« -- CASO 1 +««« -- Relação: «r.name.toString.toUpperCase» +««« -- Esquerda é relação: «auxRel.name.toUpperCase» +««« -- Direita é entidade: «auxEnt.name.toUpperCase» + -- Table: «r.name.toUpperCase» + -- DROP TABLE «r.name.toUpperCase»; + CREATE TABLE IF NOT EXISTS «r.name.toLowerCase» ( +««« Pega os atributos PK da entidade + «FOR att : auxEnt.attributes.filter[isIsKey]» «auxEnt.name.toLowerCase+"_"+mysql_AttTypeChecker(att)» + «ENDFOR» + «FOR att : auxLeftEntity.attributes.filter[isIsKey]» «auxLeftEntity.name.toLowerCase+"_"+mysql_AttTypeChecker(att)» + «ENDFOR» + «FOR att : auxRightEntity.attributes.filter[isIsKey]» «auxRightEntity.name.toLowerCase+"_"+mysql_AttTypeChecker(att)» + «ENDFOR» +««« lista os atributos do relacionamento caso existam, se tiver alguma pk então adiciona no array de pks + «IF r.attributes !== null» + «FOR att : r.attributes» «mysql_AttTypeChecker(att)»«IF att.isIsKey»«{this.primaryKeys_Ternary.add(att.name.toLowerCase); null}»«ENDIF» + «ENDFOR» + «ENDIF» +««« adiciona as PKS da entidade na lista de CONSTRAINT PK do Ternário + «{this.mapTernary.put(auxEnt.name, new ArrayList); null}» + «FOR att : auxEnt.attributes.filter[isIsKey]»«{this.primaryKeys_Ternary.add(auxEnt.name.toLowerCase+"_"+att.name.toString); null}» + «{this.mapTernary.get(auxEnt.name).add(att.name.toString.toLowerCase); null}» + «ENDFOR» +««« Lado ESQUERDO da relação N para N + «{this.mapTernary.put(auxLeftEntity.name, new ArrayList); null}» + «FOR att : auxLeftEntity.attributes.filter[isIsKey]»«{this.primaryKeys_Ternary.add(auxLeftEntity.name.toLowerCase+"_"+att.name.toString.toLowerCase); null}» + «{this.mapTernary.get(auxLeftEntity.name).add(auxLeftEntity.name.toLowerCase+"_"+att.name.toString.toLowerCase); null}» + «ENDFOR» +««« Lado DIREITO da relação N para N + «{this.mapTernary.put(auxRightEntity.name, new ArrayList); null}» + «FOR att : auxRightEntity.attributes.filter[isIsKey]»«{this.primaryKeys_Ternary.add(auxRightEntity.name.toLowerCase+"_"+att.name.toString.toLowerCase); null}» + «{this.mapTernary.get(auxRightEntity.name).add(auxRightEntity.name.toLowerCase+"_"+att.name.toString.toLowerCase); null}» + «ENDFOR» + CONSTRAINT pk_«r.name.toLowerCase» PRIMARY KEY («FOR pk : primaryKeys_Ternary SEPARATOR ", "»«pk.toString»«ENDFOR») «{this.primaryKeys_Ternary.clear; null}» + «{this.sc_AlterTbl_1toN.append(mysql_AlterTable_Ternary_RefMapper(r.name, auxEnt.name, auxRel.name, auxLeftEntity.name, auxRightEntity.name, mapTernary)); null}»«{this.mapTernary.clear; null}» + ); + + «ENDFOR» + «FOR r : model.relations.filter[i|i.leftEnding.target instanceof Entity && i.rightEnding.target instanceof Relation]» + «var auxEnt = r.leftEnding.target as Entity» + «var auxRel = r.rightEnding.target as Relation» + «var auxLeftEntity = auxRel.leftEnding.target as Entity» + «var auxRightEntity = auxRel.rightEnding.target as Entity» + -- Table: «r.name.toUpperCase» + -- DROP TABLE «r.name.toUpperCase»; + CREATE TABLE IF NOT EXISTS «r.name.toLowerCase» ( +««« Pega os atributos PK da entidade + «FOR att : auxEnt.attributes.filter[isIsKey]» «auxEnt.name.toLowerCase+"_"+mysql_AttTypeChecker(att)» + «ENDFOR» + «FOR att : auxLeftEntity.attributes.filter[isIsKey]» «auxLeftEntity.name.toLowerCase+"_"+mysql_AttTypeChecker(att)» + «ENDFOR» + «FOR att : auxRightEntity.attributes.filter[isIsKey]» «auxRightEntity.name.toLowerCase+"_"+mysql_AttTypeChecker(att)» + «ENDFOR» +««« lista os atributos do relacionamento caso existam, se tiver alguma pk então adiciona no array de pks + «IF r.attributes !== null» + «FOR att : r.attributes» «mysql_AttTypeChecker(att)»«IF att.isIsKey»«{this.primaryKeys_Ternary.add(att.name.toLowerCase); null}»«ENDIF» + «ENDFOR» + «ENDIF» +««« adiciona as PKS da entidade na lista de CONSTRAINT PK do Ternário + «{this.mapTernary.put(auxEnt.name, new ArrayList); null}» + «FOR att : auxEnt.attributes.filter[isIsKey]»«{this.primaryKeys_Ternary.add(auxEnt.name.toLowerCase+"_"+att.name.toString); null}» + «{this.mapTernary.get(auxEnt.name).add(att.name.toString.toLowerCase); null}» + «ENDFOR» +««« Lado ESQUERDO da relação N para N + «{this.mapTernary.put(auxLeftEntity.name, new ArrayList); null}» + «FOR att : auxLeftEntity.attributes.filter[isIsKey]»«{this.primaryKeys_Ternary.add(auxLeftEntity.name.toLowerCase+"_"+att.name.toString.toLowerCase); null}» + «{this.mapTernary.get(auxLeftEntity.name).add(auxLeftEntity.name.toLowerCase+"_"+att.name.toString.toLowerCase); null}» + «ENDFOR» +««« Lado DIREITO da relação N para N + «{this.mapTernary.put(auxRightEntity.name, new ArrayList); null}» + «FOR att : auxRightEntity.attributes.filter[isIsKey]»«{this.primaryKeys_Ternary.add(auxRightEntity.name.toLowerCase+"_"+att.name.toString.toLowerCase); null}» + «{this.mapTernary.get(auxRightEntity.name).add(auxRightEntity.name.toLowerCase+"_"+att.name.toString.toLowerCase); null}» + «ENDFOR» + CONSTRAINT pk_«r.name.toLowerCase» PRIMARY KEY («FOR pk : primaryKeys_Ternary SEPARATOR ", "»«pk.toString»«ENDFOR») «{this.primaryKeys_Ternary.clear; null}» + «{this.sc_AlterTbl_1toN.append(mysql_AlterTable_Ternary_RefMapper(r.name, auxEnt.name, auxRel.name, auxLeftEntity.name, auxRightEntity.name, mapTernary)); null}»«{this.mapTernary.clear; null}» + ); + «ENDFOR» ''' def private mysql_GeneralizationRefMapper(ERModel m) ''' - «FOR e : m.entities.filter[is !== null]» -- GENERALIZATION - ALTER TABLE ONLY public.«e.name.toLowerCase» ADD CONSTRAINT fk_gen_«e.name.toLowerCase+"_"+e.is.toString.toLowerCase» FOREIGN KEY («FOR a : e.is.attributes.filter[isIsKey] SEPARATOR ", "»«a.name.toString»«ENDFOR») REFERENCES public.«e.is.toString.toLowerCase» («FOR a : e.is.attributes.filter[isIsKey] SEPARATOR ", "»«a.name.toString»«ENDFOR»); - + ALTER TABLE «e.name.toLowerCase» ADD CONSTRAINT fk_gen_«e.name.toLowerCase+"_"+e.is.toString.toLowerCase» FOREIGN KEY («FOR a : e.is.attributes.filter[isIsKey] SEPARATOR ", "»«a.name.toString»«ENDFOR») REFERENCES «e.is.toString.toLowerCase» («FOR a : e.is.attributes.filter[isIsKey] SEPARATOR ", "»«a.name.toString»«ENDFOR»); «ENDFOR» ''' def private mysql_AlterTable_1to1_1toN_RefMapper(Entity alterTbl, Entity refTbl, Relation r, Boolean selfRelWithGen, Boolean selfRelNoGen, Boolean relWithOneGen, Boolean relNoGen, String cardinalityRel) ''' «IF selfRelWithGen» -- «cardinalityRel»: Self-relation WITH generalization - ALTER TABLE ONLY public.«alterTbl.name.toLowerCase» ADD CONSTRAINT fk_«r.name.toLowerCase» FOREIGN KEY («FOR a : refTbl.attributes.filter[isIsKey] SEPARATOR ", "»«r.name.toLowerCase+"_"+a.name.toLowerCase»«ENDFOR») REFERENCES public.«alterTbl.name.toLowerCase» («FOR a : refTbl.attributes.filter[isIsKey] SEPARATOR ", "»«a.name.toLowerCase»«ENDFOR»); + ALTER TABLE «alterTbl.name.toLowerCase» ADD CONSTRAINT fk_«r.name.toLowerCase» FOREIGN KEY («FOR a : refTbl.attributes.filter[isIsKey] SEPARATOR ", "»«r.name.toLowerCase+"_"+a.name.toLowerCase»«ENDFOR») REFERENCES «alterTbl.name.toLowerCase» («FOR a : refTbl.attributes.filter[isIsKey] SEPARATOR ", "»«a.name.toLowerCase»«ENDFOR»); «ELSEIF selfRelNoGen» -- «cardinalityRel»: Self-relation WITHOUT generalization - ALTER TABLE ONLY public.«alterTbl.name.toLowerCase» ADD CONSTRAINT fk_«r.name.toLowerCase» FOREIGN KEY («FOR a : alterTbl.attributes.filter[isIsKey] SEPARATOR ", "»«r.name.toLowerCase+"_"+a.name.toLowerCase»«ENDFOR») REFERENCES public.«refTbl.name.toLowerCase» («FOR a : alterTbl.attributes.filter[isIsKey] SEPARATOR ", "»«a.name.toLowerCase»«ENDFOR»); + ALTER TABLE «alterTbl.name.toLowerCase» ADD CONSTRAINT fk_«r.name.toLowerCase» FOREIGN KEY («FOR a : alterTbl.attributes.filter[isIsKey] SEPARATOR ", "»«r.name.toLowerCase+"_"+a.name.toLowerCase»«ENDFOR») REFERENCES «refTbl.name.toLowerCase» («FOR a : alterTbl.attributes.filter[isIsKey] SEPARATOR ", "»«a.name.toLowerCase»«ENDFOR»); «ELSEIF relWithOneGen» -- «cardinalityRel»: Relationship with ONE ENTITY that HAS GENERALIZATION - ALTER TABLE ONLY public.«alterTbl.name.toLowerCase» ADD CONSTRAINT fk_«r.name.toLowerCase» FOREIGN KEY («FOR a : refTbl.is.attributes.filter[isIsKey] SEPARATOR ", "»«r.name.toLowerCase+"_"+a.name.toLowerCase»«ENDFOR») REFERENCES public.«refTbl.name.toLowerCase» («FOR a : refTbl.is.attributes.filter[isIsKey] SEPARATOR ", "»«a.name.toLowerCase»«ENDFOR»); + ALTER TABLE «alterTbl.name.toLowerCase» ADD CONSTRAINT fk_«r.name.toLowerCase» FOREIGN KEY («FOR a : refTbl.is.attributes.filter[isIsKey] SEPARATOR ", "»«r.name.toLowerCase+"_"+a.name.toLowerCase»«ENDFOR») REFERENCES «refTbl.name.toLowerCase» («FOR a : refTbl.is.attributes.filter[isIsKey] SEPARATOR ", "»«a.name.toLowerCase»«ENDFOR»); «ELSEIF relNoGen» -- «cardinalityRel»: Relationship in which BOTH ENTITIES have NO GENERALIZATION - ALTER TABLE ONLY public.«alterTbl.name.toLowerCase» ADD CONSTRAINT fk_«r.name.toLowerCase» FOREIGN KEY («FOR a : refTbl.attributes.filter[isIsKey] SEPARATOR ", "»«r.name.toLowerCase+"_"+a.name.toLowerCase»«ENDFOR») REFERENCES public.«refTbl.name.toLowerCase» («FOR a : refTbl.attributes.filter[isIsKey] SEPARATOR ", "»«a.name.toLowerCase»«ENDFOR»); + ALTER TABLE «alterTbl.name.toLowerCase» ADD CONSTRAINT fk_«r.name.toLowerCase» FOREIGN KEY («FOR a : refTbl.attributes.filter[isIsKey] SEPARATOR ", "»«r.name.toLowerCase+"_"+a.name.toLowerCase»«ENDFOR») REFERENCES «refTbl.name.toLowerCase» («FOR a : refTbl.attributes.filter[isIsKey] SEPARATOR ", "»«a.name.toLowerCase»«ENDFOR»); «ENDIF» - ''' def private mysql_AlterTable_NtoN_RefMapper(Entity leftEnt, Entity rightEnt, Relation r, Boolean selfRelWithGen, Boolean selfRelNoGen, Boolean relWithOneGen, Boolean relNoGen, String cardinalityRel) ''' «IF selfRelWithGen» -- «cardinalityRel»: Self-relation WITH generalization - ALTER TABLE ONLY public.«r.name.toLowerCase» ADD CONSTRAINT fk_«r.name.toLowerCase+"_"+leftEnt.name.toLowerCase»_1 FOREIGN KEY («FOR a : leftEnt.is.attributes.filter[isIsKey] SEPARATOR ", "»«leftEnt.name.toLowerCase+"_"+a.name.toLowerCase+"_1"»«ENDFOR») REFERENCES public.«leftEnt.name.toLowerCase» («FOR a : leftEnt.is.attributes.filter[isIsKey] SEPARATOR ", "»«a.name.toLowerCase»«ENDFOR»); - - ALTER TABLE ONLY public.«r.name.toLowerCase» ADD CONSTRAINT fk_«r.name.toLowerCase+"_"+rightEnt.name.toLowerCase»_2 FOREIGN KEY («FOR a : rightEnt.is.attributes.filter[isIsKey] SEPARATOR ", "»«rightEnt.name.toLowerCase+"_"+a.name.toLowerCase+"_2"»«ENDFOR») REFERENCES public.«rightEnt.name.toLowerCase» («FOR a : rightEnt.is.attributes.filter[isIsKey] SEPARATOR ", "»«a.name.toLowerCase»«ENDFOR»); + ALTER TABLE «r.name.toLowerCase» ADD CONSTRAINT fk_«r.name.toLowerCase+"_"+leftEnt.name.toLowerCase»_1 FOREIGN KEY («FOR a : leftEnt.is.attributes.filter[isIsKey] SEPARATOR ", "»«leftEnt.name.toLowerCase+"_"+a.name.toLowerCase+"_1"»«ENDFOR») REFERENCES «leftEnt.name.toLowerCase» («FOR a : leftEnt.is.attributes.filter[isIsKey] SEPARATOR ", "»«a.name.toLowerCase»«ENDFOR»); + ALTER TABLE «r.name.toLowerCase» ADD CONSTRAINT fk_«r.name.toLowerCase+"_"+rightEnt.name.toLowerCase»_2 FOREIGN KEY («FOR a : rightEnt.is.attributes.filter[isIsKey] SEPARATOR ", "»«rightEnt.name.toLowerCase+"_"+a.name.toLowerCase+"_2"»«ENDFOR») REFERENCES «rightEnt.name.toLowerCase» («FOR a : rightEnt.is.attributes.filter[isIsKey] SEPARATOR ", "»«a.name.toLowerCase»«ENDFOR»); «ELSEIF selfRelNoGen» -- «cardinalityRel»: Self-relation WITHOUT generalization - ALTER TABLE ONLY public.«r.name.toLowerCase» ADD CONSTRAINT fk_«r.name.toLowerCase+"_"+leftEnt.name.toLowerCase»_1 FOREIGN KEY («FOR a : leftEnt.attributes.filter[isIsKey] SEPARATOR ", "»«leftEnt.name.toLowerCase+"_"+a.name.toLowerCase+"_1"»«ENDFOR») REFERENCES public.«leftEnt.name.toLowerCase» («FOR a : leftEnt.attributes.filter[isIsKey] SEPARATOR ", "»«a.name.toLowerCase»«ENDFOR»); - - ALTER TABLE ONLY public.«r.name.toLowerCase» ADD CONSTRAINT fk_«r.name.toLowerCase+"_"+rightEnt.name.toLowerCase»_2 FOREIGN KEY («FOR a : rightEnt.attributes.filter[isIsKey] SEPARATOR ", "»«rightEnt.name.toLowerCase+"_"+a.name.toLowerCase+"_2"»«ENDFOR») REFERENCES public.«rightEnt.name.toLowerCase» («FOR a : rightEnt.attributes.filter[isIsKey] SEPARATOR ", "»«a.name.toLowerCase»«ENDFOR»); + ALTER TABLE «r.name.toLowerCase» ADD CONSTRAINT fk_«r.name.toLowerCase+"_"+leftEnt.name.toLowerCase»_1 FOREIGN KEY («FOR a : leftEnt.attributes.filter[isIsKey] SEPARATOR ", "»«leftEnt.name.toLowerCase+"_"+a.name.toLowerCase+"_1"»«ENDFOR») REFERENCES «leftEnt.name.toLowerCase» («FOR a : leftEnt.attributes.filter[isIsKey] SEPARATOR ", "»«a.name.toLowerCase»«ENDFOR»); + ALTER TABLE «r.name.toLowerCase» ADD CONSTRAINT fk_«r.name.toLowerCase+"_"+rightEnt.name.toLowerCase»_2 FOREIGN KEY («FOR a : rightEnt.attributes.filter[isIsKey] SEPARATOR ", "»«rightEnt.name.toLowerCase+"_"+a.name.toLowerCase+"_2"»«ENDFOR») REFERENCES «rightEnt.name.toLowerCase» («FOR a : rightEnt.attributes.filter[isIsKey] SEPARATOR ", "»«a.name.toLowerCase»«ENDFOR»); «ELSEIF relWithOneGen» -- «cardinalityRel»: Relationship with ONE ENTITY that HAS GENERALIZATION - ALTER TABLE ONLY public.«r.name.toLowerCase» ADD CONSTRAINT fk_«r.name.toLowerCase+"_"+leftEnt.name.toLowerCase» FOREIGN KEY («FOR a : leftEnt.is.attributes.filter[isIsKey] SEPARATOR ", "»«leftEnt.name.toLowerCase+"_"+a.name.toLowerCase»«ENDFOR») REFERENCES public.«leftEnt.name.toLowerCase» («FOR a : leftEnt.is.attributes.filter[isIsKey] SEPARATOR ", "»«a.name.toLowerCase»«ENDFOR»); + ALTER TABLE «r.name.toLowerCase» ADD CONSTRAINT fk_«r.name.toLowerCase+"_"+leftEnt.name.toLowerCase» FOREIGN KEY («FOR a : leftEnt.is.attributes.filter[isIsKey] SEPARATOR ", "»«leftEnt.name.toLowerCase+"_"+a.name.toLowerCase»«ENDFOR») REFERENCES «leftEnt.name.toLowerCase» («FOR a : leftEnt.is.attributes.filter[isIsKey] SEPARATOR ", "»«a.name.toLowerCase»«ENDFOR»); «ELSEIF relNoGen» -- «cardinalityRel»: Relationship in which BOTH ENTITIES have NO GENERALIZATION - ALTER TABLE ONLY public.«r.name.toLowerCase» ADD CONSTRAINT fk_«r.name.toLowerCase+"_"+leftEnt.name.toLowerCase» FOREIGN KEY («FOR a : leftEnt.attributes.filter[isIsKey] SEPARATOR ", "»«leftEnt.name.toLowerCase+"_"+a.name.toLowerCase»«ENDFOR») REFERENCES public.«leftEnt.name.toLowerCase» («FOR a : leftEnt.attributes.filter[isIsKey] SEPARATOR ", "»«a.name.toLowerCase»«ENDFOR»); + ALTER TABLE «r.name.toLowerCase» ADD CONSTRAINT fk_«r.name.toLowerCase+"_"+leftEnt.name.toLowerCase» FOREIGN KEY («FOR a : leftEnt.attributes.filter[isIsKey] SEPARATOR ", "»«leftEnt.name.toLowerCase+"_"+a.name.toLowerCase»«ENDFOR») REFERENCES «leftEnt.name.toLowerCase» («FOR a : leftEnt.attributes.filter[isIsKey] SEPARATOR ", "»«a.name.toLowerCase»«ENDFOR»); «ENDIF» - ''' -} \ No newline at end of file + def private mysql_AlterTable_Ternary_RefMapper(String tabelaTernaria, String tabelaEntidade, String nomeRelacaoNN, String leftNN, String rightNN, HashMap keysMap) ''' +««« MAPA DO «tabelaEntidade.toUpperCase»: «FOR e : mapTernary.get(tabelaEntidade) SEPARATOR ", "»«e.toString»«ENDFOR» +««« MAPA DO «leftNN.toUpperCase»: «FOR e : mapTernary.get(leftNN) SEPARATOR ", "»«e.toString»«ENDFOR» +««« MAPA DO «rightNN.toUpperCase»: «FOR e : mapTernary.get(rightNN) SEPARATOR ", "»«e.toString»«ENDFOR» + -- [Ternary Relationship] + ALTER TABLE «tabelaTernaria» ADD CONSTRAINT fk_«tabelaTernaria+"_"+tabelaEntidade.toLowerCase» FOREIGN KEY («FOR e : this.mapTernary.get(tabelaEntidade) SEPARATOR ", "»«tabelaEntidade.toString.toLowerCase+"_"+e.toString»«ENDFOR») REFERENCES «tabelaEntidade» («FOR e : this.mapTernary.get(tabelaEntidade) SEPARATOR ", "»«e.toString»«ENDFOR»); + ALTER TABLE «tabelaTernaria» ADD CONSTRAINT fk_«tabelaTernaria+"_"+nomeRelacaoNN.toLowerCase» FOREIGN KEY («FOR e : this.mapTernary.get(leftNN) SEPARATOR ", "»«e.toString»«ENDFOR», «FOR e : this.mapTernary.get(rightNN) SEPARATOR ", "»«e.toString»«ENDFOR») REFERENCES «nomeRelacaoNN» («FOR e : this.mapTernary.get(leftNN) SEPARATOR ", "»«e.toString»«ENDFOR», «FOR e : this.mapTernary.get(rightNN) SEPARATOR ", "»«e.toString»«ENDFOR»); + ''' +} + + + diff --git a/org.xtext.unipampa.erdsl/src/org/xtext/unipampa/erdsl/generator/PlantUmlFileGenerator.xtend b/org.xtext.unipampa.erdsl/src/org/xtext/unipampa/erdsl/generator/PlantUmlFileGenerator.xtend index 4e57294..1a8c84c 100644 --- a/org.xtext.unipampa.erdsl/src/org/xtext/unipampa/erdsl/generator/PlantUmlFileGenerator.xtend +++ b/org.xtext.unipampa.erdsl/src/org/xtext/unipampa/erdsl/generator/PlantUmlFileGenerator.xtend @@ -28,15 +28,15 @@ class PlantUmlFileGenerator extends AbstractGenerator { new SourceStringReader(plantUML).generateImage(out) - (fsa as IFileSystemAccessExtension3).generateFile("Diagram_(Conceptual_Model).png", + (fsa as IFileSystemAccessExtension3).generateFile(modeloER.domain.name.toLowerCase+"_Diagram.png", new ByteArrayInputStream(out.toByteArray)) - fsa.generateFile("Diagram_DescriptorGenerated.puml", plantUML) + fsa.generateFile(modeloER.domain.name.toLowerCase+"_DiagramDesc_Gen.puml", plantUML) } else { - fsa.generateFile("Diagram_ParcialDescriptorGenerated.puml", plantUML) + fsa.generateFile(modeloER.domain.name.toLowerCase+"_DiagramDesc_PartialGen.puml", plantUML) } } @@ -109,11 +109,11 @@ class PlantUmlFileGenerator extends AbstractGenerator { «IF !(leftEnding.target instanceof Entity) || !(rightEnding.target instanceof Entity)» «IF leftEnding.target instanceof Relation» «leftEnding.target.toString.toLowerCase»_dmd --«defineRightCardinalitySymbolUML(rightEnding.cardinality.toString)» «rightEnding.target.toString.toLowerCase» - note "Ternary\n Entity" as N_«leftEnding.target.toString.toLowerCase»_dmd + note "Ternary\n Relationship" as N_«leftEnding.target.toString.toLowerCase»_dmd N_«leftEnding.target.toString.toLowerCase»_dmd .. «leftEnding.target.toString.toLowerCase»_dmd «ELSEIF rightEnding.target instanceof Relation» «leftEnding.target.toString.toLowerCase» «defineLeftCardinalitySymbolUML(leftEnding.cardinality.toString)»-- «rightEnding.target.toString.toLowerCase»_dmd - note "Ternary\n Entity" as N_«rightEnding.target.toString.toLowerCase»_dmd + note "Ternary\n Relationship" as N_«rightEnding.target.toString.toLowerCase»_dmd N_«rightEnding.target.toString.toLowerCase»_dmd .. «rightEnding.target.toString.toLowerCase»_dmd «ENDIF» «ENDIF» diff --git a/org.xtext.unipampa.erdsl/src/org/xtext/unipampa/erdsl/generator/PostgresqlFileGenerator.xtend b/org.xtext.unipampa.erdsl/src/org/xtext/unipampa/erdsl/generator/PostgresqlFileGenerator.xtend index 1183ae1..77c7350 100644 --- a/org.xtext.unipampa.erdsl/src/org/xtext/unipampa/erdsl/generator/PostgresqlFileGenerator.xtend +++ b/org.xtext.unipampa.erdsl/src/org/xtext/unipampa/erdsl/generator/PostgresqlFileGenerator.xtend @@ -9,7 +9,7 @@ import org.xtext.unipampa.erdsl.erDsl.Entity import org.xtext.unipampa.erdsl.erDsl.Relation import org.xtext.unipampa.erdsl.erDsl.Attribute import java.util.ArrayList - +import java.util.HashMap /** * @@ -27,6 +27,9 @@ class PostgresqlFileGenerator extends AbstractGenerator { var primaryKeys = new ArrayList() var inheritedPrimaryKeys = new ArrayList() var primaryKeys_NtoN = new ArrayList + var primaryKeys_Ternary = new ArrayList + var mapTernary = new HashMap(); + var StringBuilder sc_AlterTbl_1to1 = new StringBuilder var StringBuilder sc_AlterTbl_1toN = new StringBuilder @@ -38,7 +41,7 @@ class PostgresqlFileGenerator extends AbstractGenerator { val modeloER = input.contents.get(0) as ERModel try { - fsa.generateFile('PgSQL_DDL.sql', pgsql_CreateModel(modeloER)) + fsa.generateFile(modeloER.domain.name.toLowerCase+'_Postgre.sql', pgsql_CreateModel(modeloER)) } catch (Exception e) { println(e.stackTrace.toString) } @@ -46,11 +49,7 @@ class PostgresqlFileGenerator extends AbstractGenerator { def private pgsql_CreateModel(ERModel modeloER) ''' - -- #################################################### - -- # PostGreSQL Template # - -- #################################################### - -- # Generated by ERtext # - -- #################################################### + -- PostGreSQL Template generated by ERtext «pgsql_DomainMapper(modeloER)» @@ -72,15 +71,15 @@ class PostgresqlFileGenerator extends AbstractGenerator { ''' def private pgsql_DomainMapper (ERModel m) ''' - -- Database: «m.domain.name.toString.toUpperCase» - -- DROP DATABASE «m.domain.name.toString.toUpperCase»; - -- CREATE DATABASE «m.domain.name.toString.toUpperCase»» + -- Database: «m.domain.name.toString.toUpperCase»; + -- CREATE DATABASE «m.domain.name.toString.toUpperCase»; -- WITH OWNER = postgres -- ENCODING = 'UTF8' -- TABLESPACE = pg_default -- CONNECTION LIMIT = -1; + -- DROP DATABASE «m.domain.name.toString.toUpperCase»; - --DROP TABLE IF EXISTS + -- DROP TABLE IF EXISTS -- «FOR e : m.entities SEPARATOR ", "»public."«e.name.toLowerCase»"«ENDFOR»«FOR r : m.relations.filter[((leftEnding.cardinality.equalsIgnoreCase('(0:N)') || leftEnding.cardinality.equalsIgnoreCase('(1:N)')) && (rightEnding.cardinality.equalsIgnoreCase('(0:N)') || rightEnding.cardinality.equalsIgnoreCase('(1:N)')))] BEFORE ", " SEPARATOR ", "»public."«r.name.toLowerCase»"«ENDFOR» -- CASCADE; ''' @@ -397,17 +396,105 @@ class PostgresqlFileGenerator extends AbstractGenerator { ''' def private pgsql_TernaryEntitiesMapper(ERModel model) ''' - -- ####################################################### - -- #TODO: auto-generated method stub for Ternary Entities# - -- ####################################################### + «FOR r : model.relations.filter[i|i.leftEnding.target instanceof Relation && i.rightEnding.target instanceof Entity]» + «var auxRel = r.leftEnding.target as Relation» + «var auxEnt = r.rightEnding.target as Entity» + «var auxLeftEntity = auxRel.leftEnding.target as Entity» + «var auxRightEntity = auxRel.rightEnding.target as Entity» +««« -- CASO 1 +««« -- Relação: «r.name.toString.toUpperCase» +««« -- Esquerda é relação: «auxRel.name.toUpperCase» +««« -- Direita é entidade: «auxEnt.name.toUpperCase» + -- Table: «r.name.toUpperCase» + -- DROP TABLE «r.name.toUpperCase»; + CREATE TABLE IF NOT EXISTS «r.name.toLowerCase» ( +««« Pega os atributos PK da entidade + «FOR att : auxEnt.attributes.filter[isIsKey]» «auxEnt.name.toLowerCase+"_"+pgsql_AttTypeChecker(att)» + «ENDFOR» + «FOR att : auxLeftEntity.attributes.filter[isIsKey]» «auxLeftEntity.name.toLowerCase+"_"+pgsql_AttTypeChecker(att)» + «ENDFOR» + «FOR att : auxRightEntity.attributes.filter[isIsKey]» «auxRightEntity.name.toLowerCase+"_"+pgsql_AttTypeChecker(att)» + «ENDFOR» +««« lista os atributos do relacionamento caso existam, se tiver alguma pk então adiciona no array de pks + «IF r.attributes !== null» + «FOR att : r.attributes» «pgsql_AttTypeChecker(att)»«IF att.isIsKey»«{this.primaryKeys_Ternary.add(att.name.toLowerCase); null}»«ENDIF» + «ENDFOR» + «ENDIF» +««« adiciona as PKS da entidade na lista de CONSTRAINT PK do Ternário + «{this.mapTernary.put(auxEnt.name, new ArrayList); null}» + «FOR att : auxEnt.attributes.filter[isIsKey]»«{this.primaryKeys_Ternary.add(auxEnt.name.toLowerCase+"_"+att.name.toString); null}» + «{this.mapTernary.get(auxEnt.name).add(att.name.toString.toLowerCase); null}» + «ENDFOR» +««« Lado ESQUERDO da relação N para N + «{this.mapTernary.put(auxLeftEntity.name, new ArrayList); null}» + «FOR att : auxLeftEntity.attributes.filter[isIsKey]»«{this.primaryKeys_Ternary.add(auxLeftEntity.name.toLowerCase+"_"+att.name.toString.toLowerCase); null}» + «{this.mapTernary.get(auxLeftEntity.name).add(auxLeftEntity.name.toLowerCase+"_"+att.name.toString.toLowerCase); null}» + «ENDFOR» +««« Lado DIREITO da relação N para N + «{this.mapTernary.put(auxRightEntity.name, new ArrayList); null}» + «FOR att : auxRightEntity.attributes.filter[isIsKey]»«{this.primaryKeys_Ternary.add(auxRightEntity.name.toLowerCase+"_"+att.name.toString.toLowerCase); null}» + «{this.mapTernary.get(auxRightEntity.name).add(auxRightEntity.name.toLowerCase+"_"+att.name.toString.toLowerCase); null}» + «ENDFOR» +««« -- MAPA DO «auxEnt.name.toUpperCase»: «FOR element : mapTernary.get(auxEnt.name) SEPARATOR ", "»«element.toString»«ENDFOR» +««« -- MAPA DO «auxLeftEntity.name.toUpperCase»: «FOR element : mapTernary.get(auxLeftEntity.name) SEPARATOR ", "»«element.toString»«ENDFOR» +««« -- MAPA DO «auxRightEntity.name.toUpperCase»: «FOR element : mapTernary.get(auxRightEntity.name) SEPARATOR ", "»«element.toString»«ENDFOR» + CONSTRAINT pk_«r.name.toLowerCase» PRIMARY KEY («FOR pk : primaryKeys_Ternary SEPARATOR ", "»«pk.toString»«ENDFOR») «{this.primaryKeys_Ternary.clear; null}» + «{this.sc_AlterTbl_1toN.append(pgsql_AlterTable_Ternary_RefMapper(r.name, auxEnt.name, auxRel.name, auxLeftEntity.name, auxRightEntity.name, mapTernary)); null}»«{this.mapTernary.clear; null}» + ); + + «ENDFOR» + «FOR r : model.relations.filter[i|i.leftEnding.target instanceof Entity && i.rightEnding.target instanceof Relation]» + «var auxEnt = r.leftEnding.target as Entity» + «var auxRel = r.rightEnding.target as Relation» + «var auxLeftEntity = auxRel.leftEnding.target as Entity» + «var auxRightEntity = auxRel.rightEnding.target as Entity» +««« -- CASO 2 +««« -- Relação: «r.name.toString.toUpperCase» +««« -- Esquerda é entidade: «auxRel.name.toUpperCase» +««« -- Direita é relação: «auxEnt.name.toUpperCase» + -- Table: «r.name.toUpperCase» + -- DROP TABLE «r.name.toUpperCase»; + CREATE TABLE IF NOT EXISTS «r.name.toLowerCase» ( +««« Pega os atributos PK da entidade + «FOR att : auxEnt.attributes.filter[isIsKey]» «auxEnt.name.toLowerCase+"_"+pgsql_AttTypeChecker(att)» + «ENDFOR» + «FOR att : auxLeftEntity.attributes.filter[isIsKey]» «auxLeftEntity.name.toLowerCase+"_"+pgsql_AttTypeChecker(att)» + «ENDFOR» + «FOR att : auxRightEntity.attributes.filter[isIsKey]» «auxRightEntity.name.toLowerCase+"_"+pgsql_AttTypeChecker(att)» + «ENDFOR» +««« lista os atributos do relacionamento caso existam, se tiver alguma pk então adiciona no array de pks + «IF r.attributes !== null» + «FOR att : r.attributes» «pgsql_AttTypeChecker(att)»«IF att.isIsKey»«{this.primaryKeys_Ternary.add(att.name.toLowerCase); null}»«ENDIF» + «ENDFOR» + «ENDIF» +««« adiciona as PKS da entidade na lista de CONSTRAINT PK do Ternário + «{this.mapTernary.put(auxEnt.name, new ArrayList); null}» + «FOR att : auxEnt.attributes.filter[isIsKey]»«{this.primaryKeys_Ternary.add(auxEnt.name.toLowerCase+"_"+att.name.toString); null}» + «{this.mapTernary.get(auxEnt.name).add(att.name.toString.toLowerCase); null}» + «ENDFOR» +««« Lado ESQUERDO da relação N para N + «{this.mapTernary.put(auxLeftEntity.name, new ArrayList); null}» + «FOR att : auxLeftEntity.attributes.filter[isIsKey]»«{this.primaryKeys_Ternary.add(auxLeftEntity.name.toLowerCase+"_"+att.name.toString.toLowerCase); null}» + «{this.mapTernary.get(auxLeftEntity.name).add(auxLeftEntity.name.toLowerCase+"_"+att.name.toString.toLowerCase); null}» + «ENDFOR» +««« Lado DIREITO da relação N para N + «{this.mapTernary.put(auxRightEntity.name, new ArrayList); null}» + «FOR att : auxRightEntity.attributes.filter[isIsKey]»«{this.primaryKeys_Ternary.add(auxRightEntity.name.toLowerCase+"_"+att.name.toString.toLowerCase); null}» + «{this.mapTernary.get(auxRightEntity.name).add(auxRightEntity.name.toLowerCase+"_"+att.name.toString.toLowerCase); null}» + «ENDFOR» +««« -- MAPA DO «auxEnt.name.toUpperCase»: «FOR element : mapTernary.get(auxEnt.name) SEPARATOR ", "»«element.toString»«ENDFOR» +««« -- MAPA DO «auxLeftEntity.name.toUpperCase»: «FOR element : mapTernary.get(auxLeftEntity.name) SEPARATOR ", "»«element.toString»«ENDFOR» +««« -- MAPA DO «auxRightEntity.name.toUpperCase»: «FOR element : mapTernary.get(auxRightEntity.name) SEPARATOR ", "»«element.toString»«ENDFOR» + CONSTRAINT pk_«r.name.toLowerCase» PRIMARY KEY («FOR pk : primaryKeys_Ternary SEPARATOR ", "»«pk.toString»«ENDFOR») «{this.primaryKeys_Ternary.clear; null}» + «{this.sc_AlterTbl_1toN.append(pgsql_AlterTable_Ternary_RefMapper(r.name, auxEnt.name, auxRel.name, auxLeftEntity.name, auxRightEntity.name, mapTernary)); null}»«{this.mapTernary.clear; null}» + ); + «ENDFOR» ''' def private pgsql_GeneralizationRefMapper(ERModel m) ''' - «FOR e : m.entities.filter[is !== null]» -- GENERALIZATION ALTER TABLE ONLY public.«e.name.toLowerCase» ADD CONSTRAINT fk_gen_«e.name.toLowerCase+"_"+e.is.toString.toLowerCase» FOREIGN KEY («FOR a : e.is.attributes.filter[isIsKey] SEPARATOR ", "»«a.name.toString»«ENDFOR») REFERENCES public.«e.is.toString.toLowerCase» («FOR a : e.is.attributes.filter[isIsKey] SEPARATOR ", "»«a.name.toString»«ENDFOR»); - «ENDFOR» ''' @@ -425,19 +512,16 @@ class PostgresqlFileGenerator extends AbstractGenerator { -- «cardinalityRel»: Relationship in which BOTH ENTITIES have NO GENERALIZATION ALTER TABLE ONLY public.«alterTbl.name.toLowerCase» ADD CONSTRAINT fk_«r.name.toLowerCase» FOREIGN KEY («FOR a : refTbl.attributes.filter[isIsKey] SEPARATOR ", "»«r.name.toLowerCase+"_"+a.name.toLowerCase»«ENDFOR») REFERENCES public.«refTbl.name.toLowerCase» («FOR a : refTbl.attributes.filter[isIsKey] SEPARATOR ", "»«a.name.toLowerCase»«ENDFOR»); «ENDIF» - ''' def private pgsql_AlterTable_NtoN_RefMapper(Entity leftEnt, Entity rightEnt, Relation r, Boolean selfRelWithGen, Boolean selfRelNoGen, Boolean relWithOneGen, Boolean relNoGen, String cardinalityRel) ''' «IF selfRelWithGen» -- «cardinalityRel»: Self-relation WITH generalization ALTER TABLE ONLY public.«r.name.toLowerCase» ADD CONSTRAINT fk_«r.name.toLowerCase+"_"+leftEnt.name.toLowerCase»_1 FOREIGN KEY («FOR a : leftEnt.is.attributes.filter[isIsKey] SEPARATOR ", "»«leftEnt.name.toLowerCase+"_"+a.name.toLowerCase+"_1"»«ENDFOR») REFERENCES public.«leftEnt.name.toLowerCase» («FOR a : leftEnt.is.attributes.filter[isIsKey] SEPARATOR ", "»«a.name.toLowerCase»«ENDFOR»); - ALTER TABLE ONLY public.«r.name.toLowerCase» ADD CONSTRAINT fk_«r.name.toLowerCase+"_"+rightEnt.name.toLowerCase»_2 FOREIGN KEY («FOR a : rightEnt.is.attributes.filter[isIsKey] SEPARATOR ", "»«rightEnt.name.toLowerCase+"_"+a.name.toLowerCase+"_2"»«ENDFOR») REFERENCES public.«rightEnt.name.toLowerCase» («FOR a : rightEnt.is.attributes.filter[isIsKey] SEPARATOR ", "»«a.name.toLowerCase»«ENDFOR»); «ELSEIF selfRelNoGen» -- «cardinalityRel»: Self-relation WITHOUT generalization ALTER TABLE ONLY public.«r.name.toLowerCase» ADD CONSTRAINT fk_«r.name.toLowerCase+"_"+leftEnt.name.toLowerCase»_1 FOREIGN KEY («FOR a : leftEnt.attributes.filter[isIsKey] SEPARATOR ", "»«leftEnt.name.toLowerCase+"_"+a.name.toLowerCase+"_1"»«ENDFOR») REFERENCES public.«leftEnt.name.toLowerCase» («FOR a : leftEnt.attributes.filter[isIsKey] SEPARATOR ", "»«a.name.toLowerCase»«ENDFOR»); - ALTER TABLE ONLY public.«r.name.toLowerCase» ADD CONSTRAINT fk_«r.name.toLowerCase+"_"+rightEnt.name.toLowerCase»_2 FOREIGN KEY («FOR a : rightEnt.attributes.filter[isIsKey] SEPARATOR ", "»«rightEnt.name.toLowerCase+"_"+a.name.toLowerCase+"_2"»«ENDFOR») REFERENCES public.«rightEnt.name.toLowerCase» («FOR a : rightEnt.attributes.filter[isIsKey] SEPARATOR ", "»«a.name.toLowerCase»«ENDFOR»); «ELSEIF relWithOneGen» -- «cardinalityRel»: Relationship with ONE ENTITY that HAS GENERALIZATION @@ -446,9 +530,16 @@ class PostgresqlFileGenerator extends AbstractGenerator { -- «cardinalityRel»: Relationship in which BOTH ENTITIES have NO GENERALIZATION ALTER TABLE ONLY public.«r.name.toLowerCase» ADD CONSTRAINT fk_«r.name.toLowerCase+"_"+leftEnt.name.toLowerCase» FOREIGN KEY («FOR a : leftEnt.attributes.filter[isIsKey] SEPARATOR ", "»«leftEnt.name.toLowerCase+"_"+a.name.toLowerCase»«ENDFOR») REFERENCES public.«leftEnt.name.toLowerCase» («FOR a : leftEnt.attributes.filter[isIsKey] SEPARATOR ", "»«a.name.toLowerCase»«ENDFOR»); «ENDIF» - ''' + def private pgsql_AlterTable_Ternary_RefMapper(String tabelaTernaria, String tabelaEntidade, String nomeRelacaoNN, String leftNN, String rightNN, HashMap keysMap) ''' +««« MAPA DO «tabelaEntidade.toUpperCase»: «FOR e : mapTernary.get(tabelaEntidade) SEPARATOR ", "»«e.toString»«ENDFOR» +««« MAPA DO «leftNN.toUpperCase»: «FOR e : mapTernary.get(leftNN) SEPARATOR ", "»«e.toString»«ENDFOR» +««« MAPA DO «rightNN.toUpperCase»: «FOR e : mapTernary.get(rightNN) SEPARATOR ", "»«e.toString»«ENDFOR» + -- [Ternary Relationship] + ALTER TABLE ONLY public.«tabelaTernaria» ADD CONSTRAINT fk_«tabelaTernaria+"_"+tabelaEntidade.toLowerCase» FOREIGN KEY («FOR e : this.mapTernary.get(tabelaEntidade) SEPARATOR ", "»«tabelaEntidade.toString.toLowerCase+"_"+e.toString»«ENDFOR») REFERENCES public.«tabelaEntidade» («FOR e : this.mapTernary.get(tabelaEntidade) SEPARATOR ", "»«e.toString»«ENDFOR»); + ALTER TABLE ONLY public.«tabelaTernaria» ADD CONSTRAINT fk_«tabelaTernaria+"_"+nomeRelacaoNN.toLowerCase» FOREIGN KEY («FOR e : this.mapTernary.get(leftNN) SEPARATOR ", "»«e.toString»«ENDFOR», «FOR e : this.mapTernary.get(rightNN) SEPARATOR ", "»«e.toString»«ENDFOR») REFERENCES public.«nomeRelacaoNN» («FOR e : this.mapTernary.get(leftNN) SEPARATOR ", "»«e.toString»«ENDFOR», «FOR e : this.mapTernary.get(rightNN) SEPARATOR ", "»«e.toString»«ENDFOR»); + ''' } diff --git a/org.xtext.unipampa.erdsl/src/org/xtext/unipampa/erdsl/scoping/ErDslScopeProvider.xtend b/org.xtext.unipampa.erdsl/src/org/xtext/unipampa/erdsl/scoping/ErDslScopeProvider.xtend index 5c5b231..fc4a8b0 100644 --- a/org.xtext.unipampa.erdsl/src/org/xtext/unipampa/erdsl/scoping/ErDslScopeProvider.xtend +++ b/org.xtext.unipampa.erdsl/src/org/xtext/unipampa/erdsl/scoping/ErDslScopeProvider.xtend @@ -20,25 +20,31 @@ import org.xtext.unipampa.erdsl.erDsl.Relation class ErDslScopeProvider extends AbstractErDslScopeProvider { - override IScope getScope(EObject context, EReference reference) { - if (context instanceof Entity) { - if (true) { +// override IScope getScope(EObject context, EReference reference) { +// if (context instanceof Entity) { +// if (true) { // println("ENTIDADE\n CONTEXTO = " + context.name.toString) // println(" REFERENCIA = " + reference.name.toString) - } - return Scopes.scopeFor((context.eContainer as ERModel).entities.filter[x|x != context]) - } else if (context instanceof Relation) { - if (true) { +// } +// return Scopes.scopeFor((context.eContainer as ERModel).entities.filter[x|x != context]) +// } else if (context instanceof Relation) { +// if (true) { // println("RELAÇÃO\n CONTEXTO = " + context.name.toString) // println(" REFERENCIA = " + reference.name.toString) - } +// } // println("ENTIDADES: "+Scopes.scopeFor((context.eContainer as ERModel).entities)); // println("RELAÇÕES: "+Scopes.scopeFor((context.eContainer as ERModel).relations)); // return Scopes.scopeFor((context.eContainer as ERModel).relations.filter[x|x != context]) +// } +// return super.getScope(context, reference) +// } + + override IScope getScope(EObject context, EReference reference) { + if (context instanceof Entity) { + return Scopes.scopeFor((context.eContainer as ERModel).entities.filter[x|x != context]) } - return super.getScope(context, reference) + return super.getScope(context, reference) } - } diff --git a/org.xtext.unipampa.erdsl/xtend-gen/org/xtext/unipampa/erdsl/.ErDslRuntimeModule.xtendbin b/org.xtext.unipampa.erdsl/xtend-gen/org/xtext/unipampa/erdsl/.ErDslRuntimeModule.xtendbin index f438000..ac2a19d 100644 Binary files a/org.xtext.unipampa.erdsl/xtend-gen/org/xtext/unipampa/erdsl/.ErDslRuntimeModule.xtendbin and b/org.xtext.unipampa.erdsl/xtend-gen/org/xtext/unipampa/erdsl/.ErDslRuntimeModule.xtendbin differ diff --git a/org.xtext.unipampa.erdsl/xtend-gen/org/xtext/unipampa/erdsl/.ErDslStandaloneSetup.xtendbin b/org.xtext.unipampa.erdsl/xtend-gen/org/xtext/unipampa/erdsl/.ErDslStandaloneSetup.xtendbin index c4349e2..816d075 100644 Binary files a/org.xtext.unipampa.erdsl/xtend-gen/org/xtext/unipampa/erdsl/.ErDslStandaloneSetup.xtendbin and b/org.xtext.unipampa.erdsl/xtend-gen/org/xtext/unipampa/erdsl/.ErDslStandaloneSetup.xtendbin differ diff --git a/org.xtext.unipampa.erdsl/xtend-gen/org/xtext/unipampa/erdsl/generator/.ErDslGenerator.xtendbin b/org.xtext.unipampa.erdsl/xtend-gen/org/xtext/unipampa/erdsl/generator/.ErDslGenerator.xtendbin index f7316fc..e8cc5a5 100644 Binary files a/org.xtext.unipampa.erdsl/xtend-gen/org/xtext/unipampa/erdsl/generator/.ErDslGenerator.xtendbin and b/org.xtext.unipampa.erdsl/xtend-gen/org/xtext/unipampa/erdsl/generator/.ErDslGenerator.xtendbin differ diff --git a/org.xtext.unipampa.erdsl/xtend-gen/org/xtext/unipampa/erdsl/generator/.HtmlFileGenerator.java._trace b/org.xtext.unipampa.erdsl/xtend-gen/org/xtext/unipampa/erdsl/generator/.HtmlFileGenerator.java._trace index 5da63db..36a3872 100644 Binary files a/org.xtext.unipampa.erdsl/xtend-gen/org/xtext/unipampa/erdsl/generator/.HtmlFileGenerator.java._trace and b/org.xtext.unipampa.erdsl/xtend-gen/org/xtext/unipampa/erdsl/generator/.HtmlFileGenerator.java._trace differ diff --git a/org.xtext.unipampa.erdsl/xtend-gen/org/xtext/unipampa/erdsl/generator/.HtmlFileGenerator.xtendbin b/org.xtext.unipampa.erdsl/xtend-gen/org/xtext/unipampa/erdsl/generator/.HtmlFileGenerator.xtendbin index 92f0abb..c46326d 100644 Binary files a/org.xtext.unipampa.erdsl/xtend-gen/org/xtext/unipampa/erdsl/generator/.HtmlFileGenerator.xtendbin and b/org.xtext.unipampa.erdsl/xtend-gen/org/xtext/unipampa/erdsl/generator/.HtmlFileGenerator.xtendbin differ diff --git a/org.xtext.unipampa.erdsl/xtend-gen/org/xtext/unipampa/erdsl/generator/.MysqlFileGenerator.java._trace b/org.xtext.unipampa.erdsl/xtend-gen/org/xtext/unipampa/erdsl/generator/.MysqlFileGenerator.java._trace index 1458a24..27791b7 100644 Binary files a/org.xtext.unipampa.erdsl/xtend-gen/org/xtext/unipampa/erdsl/generator/.MysqlFileGenerator.java._trace and b/org.xtext.unipampa.erdsl/xtend-gen/org/xtext/unipampa/erdsl/generator/.MysqlFileGenerator.java._trace differ diff --git a/org.xtext.unipampa.erdsl/xtend-gen/org/xtext/unipampa/erdsl/generator/.MysqlFileGenerator.xtendbin b/org.xtext.unipampa.erdsl/xtend-gen/org/xtext/unipampa/erdsl/generator/.MysqlFileGenerator.xtendbin index 368eb40..8190493 100644 Binary files a/org.xtext.unipampa.erdsl/xtend-gen/org/xtext/unipampa/erdsl/generator/.MysqlFileGenerator.xtendbin and b/org.xtext.unipampa.erdsl/xtend-gen/org/xtext/unipampa/erdsl/generator/.MysqlFileGenerator.xtendbin differ diff --git a/org.xtext.unipampa.erdsl/xtend-gen/org/xtext/unipampa/erdsl/generator/.PlantUmlFileGenerator.java._trace b/org.xtext.unipampa.erdsl/xtend-gen/org/xtext/unipampa/erdsl/generator/.PlantUmlFileGenerator.java._trace index edcf40e..93b464f 100644 Binary files a/org.xtext.unipampa.erdsl/xtend-gen/org/xtext/unipampa/erdsl/generator/.PlantUmlFileGenerator.java._trace and b/org.xtext.unipampa.erdsl/xtend-gen/org/xtext/unipampa/erdsl/generator/.PlantUmlFileGenerator.java._trace differ diff --git a/org.xtext.unipampa.erdsl/xtend-gen/org/xtext/unipampa/erdsl/generator/.PlantUmlFileGenerator.xtendbin b/org.xtext.unipampa.erdsl/xtend-gen/org/xtext/unipampa/erdsl/generator/.PlantUmlFileGenerator.xtendbin index d26d56c..e6be5e0 100644 Binary files a/org.xtext.unipampa.erdsl/xtend-gen/org/xtext/unipampa/erdsl/generator/.PlantUmlFileGenerator.xtendbin and b/org.xtext.unipampa.erdsl/xtend-gen/org/xtext/unipampa/erdsl/generator/.PlantUmlFileGenerator.xtendbin differ diff --git a/org.xtext.unipampa.erdsl/xtend-gen/org/xtext/unipampa/erdsl/generator/.PostgresqlFileGenerator.java._trace b/org.xtext.unipampa.erdsl/xtend-gen/org/xtext/unipampa/erdsl/generator/.PostgresqlFileGenerator.java._trace index 7b1ad0c..de4cb1d 100644 Binary files a/org.xtext.unipampa.erdsl/xtend-gen/org/xtext/unipampa/erdsl/generator/.PostgresqlFileGenerator.java._trace and b/org.xtext.unipampa.erdsl/xtend-gen/org/xtext/unipampa/erdsl/generator/.PostgresqlFileGenerator.java._trace differ diff --git a/org.xtext.unipampa.erdsl/xtend-gen/org/xtext/unipampa/erdsl/generator/.PostgresqlFileGenerator.xtendbin b/org.xtext.unipampa.erdsl/xtend-gen/org/xtext/unipampa/erdsl/generator/.PostgresqlFileGenerator.xtendbin index 58c48f5..9a323f2 100644 Binary files a/org.xtext.unipampa.erdsl/xtend-gen/org/xtext/unipampa/erdsl/generator/.PostgresqlFileGenerator.xtendbin and b/org.xtext.unipampa.erdsl/xtend-gen/org/xtext/unipampa/erdsl/generator/.PostgresqlFileGenerator.xtendbin differ diff --git a/org.xtext.unipampa.erdsl/xtend-gen/org/xtext/unipampa/erdsl/generator/HtmlFileGenerator.java b/org.xtext.unipampa.erdsl/xtend-gen/org/xtext/unipampa/erdsl/generator/HtmlFileGenerator.java index de3a67c..647dd9f 100644 --- a/org.xtext.unipampa.erdsl/xtend-gen/org/xtext/unipampa/erdsl/generator/HtmlFileGenerator.java +++ b/org.xtext.unipampa.erdsl/xtend-gen/org/xtext/unipampa/erdsl/generator/HtmlFileGenerator.java @@ -26,7 +26,9 @@ public void doGenerate(final Resource input, final IFileSystemAccess2 fsa, final EObject _get = input.getContents().get(0); final ERModel modeloER = ((ERModel) _get); try { - fsa.generateFile("Logical_Textual_Scheme.html", this.CreateLogical(modeloER)); + String _lowerCase = modeloER.getDomain().getName().toLowerCase(); + String _plus = (_lowerCase + "_Logical.html"); + fsa.generateFile(_plus, this.CreateLogical(modeloER)); } catch (final Throwable _t) { if (_t instanceof Exception) { final Exception e = (Exception)_t; @@ -645,9 +647,12 @@ private CharSequence html_1ToN_RefCheck(final ERModel m, final Entity e) { _builder.append(_html_ListPKtoFK); _builder.newLineIfNotEmpty(); } else { - CharSequence _html_ListPKtoFK_SelfRelationship = this.html_ListPKtoFK_SelfRelationship(aux, relation.getName().toLowerCase()); - _builder.append(_html_ListPKtoFK_SelfRelationship); - _builder.newLineIfNotEmpty(); + boolean _equalsIgnoreCase_3 = relation.getLeftEnding().getTarget().toString().equalsIgnoreCase(relation.getRightEnding().getTarget().toString()); + if (_equalsIgnoreCase_3) { + CharSequence _html_ListPKtoFK_SelfRelationship = this.html_ListPKtoFK_SelfRelationship(aux, relation.getName().toLowerCase()); + _builder.append(_html_ListPKtoFK_SelfRelationship); + _builder.newLineIfNotEmpty(); + } } } } else { @@ -655,14 +660,14 @@ private CharSequence html_1ToN_RefCheck(final ERModel m, final Entity e) { boolean _tripleNotEquals = (_is_1 != null); if (_tripleNotEquals) { { - boolean _equalsIgnoreCase_3 = relation.getLeftEnding().getTarget().toString().equalsIgnoreCase(relation.getRightEnding().getTarget().toString()); - if (_equalsIgnoreCase_3) { + boolean _equalsIgnoreCase_4 = relation.getLeftEnding().getTarget().toString().equalsIgnoreCase(relation.getRightEnding().getTarget().toString()); + if (_equalsIgnoreCase_4) { CharSequence _html_ListPKtoFK_SelfRelationship_1 = this.html_ListPKtoFK_SelfRelationship(aux, relation.getName().toLowerCase()); _builder.append(_html_ListPKtoFK_SelfRelationship_1); _builder.newLineIfNotEmpty(); } else { - boolean _equalsIgnoreCase_4 = relation.getLeftEnding().getTarget().toString().equalsIgnoreCase(relation.getRightEnding().getTarget().toString()); - boolean _not_1 = (!_equalsIgnoreCase_4); + boolean _equalsIgnoreCase_5 = relation.getLeftEnding().getTarget().toString().equalsIgnoreCase(relation.getRightEnding().getTarget().toString()); + boolean _not_1 = (!_equalsIgnoreCase_5); if (_not_1) { Object _xblockexpression = null; { @@ -691,21 +696,21 @@ private CharSequence html_1ToN_RefCheck(final ERModel m, final Entity e) { if (((relation.getLeftEnding().getCardinality().equalsIgnoreCase("(0:N)") || relation.getLeftEnding().getCardinality().equalsIgnoreCase("(1:N)")) && (relation.getRightEnding().getCardinality().equalsIgnoreCase("(0:1)") || relation.getRightEnding().getCardinality().equalsIgnoreCase("(1:1)")))) { _builder.newLine(); { - boolean _equalsIgnoreCase_5 = relation.getLeftEnding().getTarget().toString().equalsIgnoreCase(e.getName()); - if (_equalsIgnoreCase_5) { + boolean _equalsIgnoreCase_6 = relation.getLeftEnding().getTarget().toString().equalsIgnoreCase(e.getName()); + if (_equalsIgnoreCase_6) { { EList _entities_1 = m.getEntities(); for(final Entity aux_1 : _entities_1) { { - boolean _equalsIgnoreCase_6 = relation.getRightEnding().getTarget().toString().equalsIgnoreCase(aux_1.getName()); - if (_equalsIgnoreCase_6) { + boolean _equalsIgnoreCase_7 = relation.getRightEnding().getTarget().toString().equalsIgnoreCase(aux_1.getName()); + if (_equalsIgnoreCase_7) { { Entity _is_2 = aux_1.getIs(); boolean _tripleEquals_1 = (_is_2 == null); if (_tripleEquals_1) { { - boolean _equalsIgnoreCase_7 = relation.getLeftEnding().getTarget().toString().equalsIgnoreCase(relation.getRightEnding().getTarget().toString()); - boolean _not_2 = (!_equalsIgnoreCase_7); + boolean _equalsIgnoreCase_8 = relation.getLeftEnding().getTarget().toString().equalsIgnoreCase(relation.getRightEnding().getTarget().toString()); + boolean _not_2 = (!_equalsIgnoreCase_8); if (_not_2) { CharSequence _html_ListPKtoFK_2 = this.html_ListPKtoFK(aux_1); _builder.append(_html_ListPKtoFK_2); @@ -721,8 +726,8 @@ private CharSequence html_1ToN_RefCheck(final ERModel m, final Entity e) { boolean _tripleNotEquals_1 = (_is_3 != null); if (_tripleNotEquals_1) { { - boolean _equalsIgnoreCase_8 = relation.getRightEnding().getTarget().toString().equalsIgnoreCase(relation.getLeftEnding().getTarget().toString()); - if (_equalsIgnoreCase_8) { + boolean _equalsIgnoreCase_9 = relation.getRightEnding().getTarget().toString().equalsIgnoreCase(relation.getLeftEnding().getTarget().toString()); + if (_equalsIgnoreCase_9) { _builder.newLine(); _builder.newLine(); _builder.newLine(); @@ -730,8 +735,8 @@ private CharSequence html_1ToN_RefCheck(final ERModel m, final Entity e) { _builder.append(_html_ListPKtoFK_SelfRelationship_3); _builder.newLineIfNotEmpty(); } else { - boolean _equalsIgnoreCase_9 = relation.getRightEnding().getTarget().toString().equalsIgnoreCase(relation.getLeftEnding().getTarget().toString()); - boolean _not_3 = (!_equalsIgnoreCase_9); + boolean _equalsIgnoreCase_10 = relation.getRightEnding().getTarget().toString().equalsIgnoreCase(relation.getLeftEnding().getTarget().toString()); + boolean _not_3 = (!_equalsIgnoreCase_10); if (_not_3) { Object _xblockexpression_1 = null; { @@ -812,23 +817,49 @@ private CharSequence html_NtoN_EntityCreation(final ERModel m) { { if ((relation.getLeftEnding().getTarget().toString().equalsIgnoreCase(entity.getName()) && (!relation.getLeftEnding().getTarget().toString().equalsIgnoreCase(relation.getRightEnding().getTarget().toString())))) { { - final Function1 _function = (Attribute it) -> { - return Boolean.valueOf(it.isIsKey()); - }; - Iterable _filter = IterableExtensions.filter(entity.getAttributes(), _function); - boolean _hasElements = false; - for(final Attribute attribute : _filter) { - if (!_hasElements) { - _hasElements = true; - } else { - _builder.appendImmediate(" | ", ""); + Entity _is = entity.getIs(); + boolean _tripleNotEquals = (_is != null); + if (_tripleNotEquals) { + { + final Function1 _function = (Attribute it) -> { + return Boolean.valueOf(it.isIsKey()); + }; + Iterable _filter = IterableExtensions.filter(entity.getIs().getAttributes(), _function); + boolean _hasElements = false; + for(final Attribute attribute : _filter) { + if (!_hasElements) { + _hasElements = true; + } else { + _builder.appendImmediate(" | ", ""); + } + CharSequence _html_AttributeStyleForInheritedPK = this.html_AttributeStyleForInheritedPK(attribute); + _builder.append(_html_AttributeStyleForInheritedPK); + _builder.append("_fk"); + _builder.newLineIfNotEmpty(); + } + } + } else { + { + final Function1 _function_1 = (Attribute it) -> { + return Boolean.valueOf(it.isIsKey()); + }; + Iterable _filter_1 = IterableExtensions.filter(entity.getAttributes(), _function_1); + boolean _hasElements_1 = false; + for(final Attribute attribute_1 : _filter_1) { + if (!_hasElements_1) { + _hasElements_1 = true; + } else { + _builder.appendImmediate(" | ", ""); + } + CharSequence _html_AttributeStyleForInheritedPK_1 = this.html_AttributeStyleForInheritedPK(attribute_1); + _builder.append(_html_AttributeStyleForInheritedPK_1); + _builder.append("_fk"); + _builder.newLineIfNotEmpty(); + } } - CharSequence _html_AttributeStyleForInheritedPK = this.html_AttributeStyleForInheritedPK(attribute); - _builder.append(_html_AttributeStyleForInheritedPK); - _builder.append("_fk"); - _builder.newLineIfNotEmpty(); } } + _builder.newLine(); } } } @@ -840,20 +871,20 @@ private CharSequence html_NtoN_EntityCreation(final ERModel m) { { if ((relation.getRightEnding().getTarget().toString().equalsIgnoreCase(entity_1.getName()) && (!relation.getLeftEnding().getTarget().toString().equalsIgnoreCase(relation.getRightEnding().getTarget().toString())))) { { - final Function1 _function_1 = (Attribute it) -> { + final Function1 _function_2 = (Attribute it) -> { return Boolean.valueOf(it.isIsKey()); }; - Iterable _filter_1 = IterableExtensions.filter(entity_1.getAttributes(), _function_1); - boolean _hasElements_1 = false; - for(final Attribute attribute_1 : _filter_1) { - if (!_hasElements_1) { - _hasElements_1 = true; + Iterable _filter_2 = IterableExtensions.filter(entity_1.getAttributes(), _function_2); + boolean _hasElements_2 = false; + for(final Attribute attribute_2 : _filter_2) { + if (!_hasElements_2) { + _hasElements_2 = true; _builder.append(" | "); } else { _builder.appendImmediate(" | ", ""); } - CharSequence _html_AttributeStyleForInheritedPK_1 = this.html_AttributeStyleForInheritedPK(attribute_1); - _builder.append(_html_AttributeStyleForInheritedPK_1); + CharSequence _html_AttributeStyleForInheritedPK_2 = this.html_AttributeStyleForInheritedPK(attribute_2); + _builder.append(_html_AttributeStyleForInheritedPK_2); _builder.append("_fk"); _builder.newLineIfNotEmpty(); } @@ -871,21 +902,46 @@ private CharSequence html_NtoN_EntityCreation(final ERModel m) { { if ((relation.getLeftEnding().getTarget().toString().equalsIgnoreCase(entity_2.getName()) && relation.getLeftEnding().getTarget().toString().equalsIgnoreCase(relation.getRightEnding().getTarget().toString()))) { { - final Function1 _function_2 = (Attribute it) -> { - return Boolean.valueOf(it.isIsKey()); - }; - Iterable _filter_2 = IterableExtensions.filter(entity_2.getAttributes(), _function_2); - boolean _hasElements_2 = false; - for(final Attribute attribute_2 : _filter_2) { - if (!_hasElements_2) { - _hasElements_2 = true; - } else { - _builder.appendImmediate(" | ", ""); + Entity _is_1 = entity_2.getIs(); + boolean _tripleNotEquals_1 = (_is_1 != null); + if (_tripleNotEquals_1) { + { + final Function1 _function_3 = (Attribute it) -> { + return Boolean.valueOf(it.isIsKey()); + }; + Iterable _filter_3 = IterableExtensions.filter(entity_2.getIs().getAttributes(), _function_3); + boolean _hasElements_3 = false; + for(final Attribute attribute_3 : _filter_3) { + if (!_hasElements_3) { + _hasElements_3 = true; + } else { + _builder.appendImmediate(" | ", ""); + } + CharSequence _html_AttributeStyleForInheritedPK_3 = this.html_AttributeStyleForInheritedPK(attribute_3); + _builder.append(_html_AttributeStyleForInheritedPK_3); + _builder.append("_fk_1 "); + _builder.newLineIfNotEmpty(); + } + } + } else { + { + final Function1 _function_4 = (Attribute it) -> { + return Boolean.valueOf(it.isIsKey()); + }; + Iterable _filter_4 = IterableExtensions.filter(entity_2.getAttributes(), _function_4); + boolean _hasElements_4 = false; + for(final Attribute attribute_4 : _filter_4) { + if (!_hasElements_4) { + _hasElements_4 = true; + } else { + _builder.appendImmediate(" | ", ""); + } + CharSequence _html_AttributeStyleForInheritedPK_4 = this.html_AttributeStyleForInheritedPK(attribute_4); + _builder.append(_html_AttributeStyleForInheritedPK_4); + _builder.append("_fk_1 "); + _builder.newLineIfNotEmpty(); + } } - CharSequence _html_AttributeStyleForInheritedPK_2 = this.html_AttributeStyleForInheritedPK(attribute_2); - _builder.append(_html_AttributeStyleForInheritedPK_2); - _builder.append("_fk_1 "); - _builder.newLineIfNotEmpty(); } } } @@ -894,22 +950,48 @@ private CharSequence html_NtoN_EntityCreation(final ERModel m) { { if ((relation.getRightEnding().getTarget().toString().equalsIgnoreCase(entity_2.getName()) && relation.getRightEnding().getTarget().toString().equalsIgnoreCase(relation.getLeftEnding().getTarget().toString()))) { { - final Function1 _function_3 = (Attribute it) -> { - return Boolean.valueOf(it.isIsKey()); - }; - Iterable _filter_3 = IterableExtensions.filter(entity_2.getAttributes(), _function_3); - boolean _hasElements_3 = false; - for(final Attribute attribute_3 : _filter_3) { - if (!_hasElements_3) { - _hasElements_3 = true; - _builder.append(" | "); - } else { - _builder.appendImmediate(" | ", ""); + Entity _is_2 = entity_2.getIs(); + boolean _tripleNotEquals_2 = (_is_2 != null); + if (_tripleNotEquals_2) { + { + final Function1 _function_5 = (Attribute it) -> { + return Boolean.valueOf(it.isIsKey()); + }; + Iterable _filter_5 = IterableExtensions.filter(entity_2.getIs().getAttributes(), _function_5); + boolean _hasElements_5 = false; + for(final Attribute attribute_5 : _filter_5) { + if (!_hasElements_5) { + _hasElements_5 = true; + _builder.append(" | "); + } else { + _builder.appendImmediate(" | ", ""); + } + CharSequence _html_AttributeStyleForInheritedPK_5 = this.html_AttributeStyleForInheritedPK(attribute_5); + _builder.append(_html_AttributeStyleForInheritedPK_5); + _builder.append("_fk_2"); + _builder.newLineIfNotEmpty(); + } + } + } else { + { + final Function1 _function_6 = (Attribute it) -> { + return Boolean.valueOf(it.isIsKey()); + }; + Iterable _filter_6 = IterableExtensions.filter(entity_2.getAttributes(), _function_6); + boolean _hasElements_6 = false; + for(final Attribute attribute_6 : _filter_6) { + if (!_hasElements_6) { + _hasElements_6 = true; + _builder.append(" | "); + } else { + _builder.appendImmediate(" | ", ""); + } + CharSequence _html_AttributeStyleForInheritedPK_6 = this.html_AttributeStyleForInheritedPK(attribute_6); + _builder.append(_html_AttributeStyleForInheritedPK_6); + _builder.append("_fk_2"); + _builder.newLineIfNotEmpty(); + } } - CharSequence _html_AttributeStyleForInheritedPK_3 = this.html_AttributeStyleForInheritedPK(attribute_3); - _builder.append(_html_AttributeStyleForInheritedPK_3); - _builder.append("_fk_2"); - _builder.newLineIfNotEmpty(); } } } @@ -920,37 +1002,37 @@ private CharSequence html_NtoN_EntityCreation(final ERModel m) { _builder.append("\t\t\t"); _builder.newLine(); { - final Function1 _function_4 = (Attribute i) -> { + final Function1 _function_7 = (Attribute i) -> { return Boolean.valueOf(((!StringExtensions.isNullOrEmpty(i.getName())) && i.isIsKey())); }; - Iterable _filter_4 = IterableExtensions.filter(relation.getAttributes(), _function_4); - boolean _hasElements_4 = false; - for(final Attribute attribute_4 : _filter_4) { - if (!_hasElements_4) { - _hasElements_4 = true; + Iterable _filter_7 = IterableExtensions.filter(relation.getAttributes(), _function_7); + boolean _hasElements_7 = false; + for(final Attribute attribute_7 : _filter_7) { + if (!_hasElements_7) { + _hasElements_7 = true; _builder.append(" | "); } else { _builder.appendImmediate(" | ", ""); } - CharSequence _html_AttributeStyleForPK = this.html_AttributeStyleForPK(attribute_4); + CharSequence _html_AttributeStyleForPK = this.html_AttributeStyleForPK(attribute_7); _builder.append(_html_AttributeStyleForPK); _builder.newLineIfNotEmpty(); } } { - final Function1 _function_5 = (Attribute i) -> { + final Function1 _function_8 = (Attribute i) -> { return Boolean.valueOf(((!StringExtensions.isNullOrEmpty(i.getName())) && (!i.isIsKey()))); }; - Iterable _filter_5 = IterableExtensions.filter(relation.getAttributes(), _function_5); - boolean _hasElements_5 = false; - for(final Attribute attribute_5 : _filter_5) { - if (!_hasElements_5) { - _hasElements_5 = true; + Iterable _filter_8 = IterableExtensions.filter(relation.getAttributes(), _function_8); + boolean _hasElements_8 = false; + for(final Attribute attribute_8 : _filter_8) { + if (!_hasElements_8) { + _hasElements_8 = true; _builder.append(" | "); } else { _builder.appendImmediate(" | ", ""); } - String _lowerCase = attribute_5.getName().toLowerCase(); + String _lowerCase = attribute_8.getName().toLowerCase(); _builder.append(_lowerCase); _builder.newLineIfNotEmpty(); } @@ -1188,22 +1270,98 @@ private CharSequence html_ListPKtoFK(final Entity e) { private CharSequence html_ListPKtoFK_Alt(final Entity e) { StringConcatenation _builder = new StringConcatenation(); { - final Function1 _function = (Attribute it) -> { - return Boolean.valueOf(it.isIsKey()); - }; - Iterable _filter = IterableExtensions.filter(e.getAttributes(), _function); - boolean _hasElements = false; - for(final Attribute att : _filter) { - if (!_hasElements) { - _hasElements = true; - } else { - _builder.appendImmediate(" , ", ""); + Entity _is = e.getIs(); + boolean _tripleNotEquals = (_is != null); + if (_tripleNotEquals) { + { + final Function1 _function = (Attribute it) -> { + return Boolean.valueOf(it.isIsKey()); + }; + Iterable _filter = IterableExtensions.filter(e.getIs().getAttributes(), _function); + boolean _hasElements = false; + for(final Attribute att : _filter) { + if (!_hasElements) { + _hasElements = true; + } else { + _builder.appendImmediate(" , ", ""); + } + _builder.append(""); + String _lowerCase = att.getName().toLowerCase(); + _builder.append(_lowerCase); + _builder.append("_fk"); + _builder.newLineIfNotEmpty(); + } + } + } else { + { + final Function1 _function_1 = (Attribute it) -> { + return Boolean.valueOf(it.isIsKey()); + }; + Iterable _filter_1 = IterableExtensions.filter(e.getAttributes(), _function_1); + boolean _hasElements_1 = false; + for(final Attribute att_1 : _filter_1) { + if (!_hasElements_1) { + _hasElements_1 = true; + } else { + _builder.appendImmediate(" , ", ""); + } + _builder.append(""); + String _lowerCase_1 = att_1.getName().toLowerCase(); + _builder.append(_lowerCase_1); + _builder.append("_fk"); + _builder.newLineIfNotEmpty(); + } + } + } + } + return _builder; + } + + private CharSequence html_ListPKtoFK_Alt(final Entity e, final String r) { + StringConcatenation _builder = new StringConcatenation(); + { + Entity _is = e.getIs(); + boolean _tripleNotEquals = (_is != null); + if (_tripleNotEquals) { + { + final Function1 _function = (Attribute it) -> { + return Boolean.valueOf(it.isIsKey()); + }; + Iterable _filter = IterableExtensions.filter(e.getIs().getAttributes(), _function); + boolean _hasElements = false; + for(final Attribute att : _filter) { + if (!_hasElements) { + _hasElements = true; + } else { + _builder.appendImmediate(" , ", ""); + } + _builder.append(""); + String _lowerCase = att.getName().toLowerCase(); + _builder.append(_lowerCase); + _builder.append("_fk"); + _builder.newLineIfNotEmpty(); + } + } + } else { + { + final Function1 _function_1 = (Attribute it) -> { + return Boolean.valueOf(it.isIsKey()); + }; + Iterable _filter_1 = IterableExtensions.filter(e.getAttributes(), _function_1); + boolean _hasElements_1 = false; + for(final Attribute att_1 : _filter_1) { + if (!_hasElements_1) { + _hasElements_1 = true; + } else { + _builder.appendImmediate(" , ", ""); + } + _builder.append(""); + String _lowerCase_1 = att_1.getName().toLowerCase(); + _builder.append(_lowerCase_1); + _builder.append("_fk"); + _builder.newLineIfNotEmpty(); + } } - _builder.append(""); - String _lowerCase = att.getName().toLowerCase(); - _builder.append(_lowerCase); - _builder.append("_fk"); - _builder.newLineIfNotEmpty(); } } return _builder; @@ -1212,51 +1370,164 @@ private CharSequence html_ListPKtoFK_Alt(final Entity e) { private CharSequence html_ListPKtoFK_SelfRelationship(final Entity e, final String r) { StringConcatenation _builder = new StringConcatenation(); { - final Function1 _function = (Attribute it) -> { - return Boolean.valueOf(it.isIsKey()); - }; - Iterable _filter = IterableExtensions.filter(e.getAttributes(), _function); - boolean _hasElements = false; - for(final Attribute att : _filter) { - if (!_hasElements) { - _hasElements = true; - _builder.append(" | "); - } else { - _builder.appendImmediate(" | ", ""); + Entity _is = e.getIs(); + boolean _tripleNotEquals = (_is != null); + if (_tripleNotEquals) { + { + final Function1 _function = (Attribute it) -> { + return Boolean.valueOf(it.isIsKey()); + }; + Iterable _filter = IterableExtensions.filter(e.getIs().getAttributes(), _function); + boolean _hasElements = false; + for(final Attribute att : _filter) { + if (!_hasElements) { + _hasElements = true; + _builder.append(" | "); + } else { + _builder.appendImmediate(" | ", ""); + } + _builder.append(" "); + String _lowerCase = att.getName().toLowerCase(); + String _plus = (_lowerCase + "_"); + String _plus_1 = (_plus + r); + _builder.append(_plus_1); + _builder.append("_fk"); + _builder.newLineIfNotEmpty(); + } + } + } else { + { + final Function1 _function_1 = (Attribute it) -> { + return Boolean.valueOf(it.isIsKey()); + }; + Iterable _filter_1 = IterableExtensions.filter(e.getAttributes(), _function_1); + boolean _hasElements_1 = false; + for(final Attribute att_1 : _filter_1) { + if (!_hasElements_1) { + _hasElements_1 = true; + _builder.append(" | "); + } else { + _builder.appendImmediate(" | ", ""); + } + _builder.append(" "); + String _lowerCase_1 = att_1.getName().toLowerCase(); + String _plus_2 = (_lowerCase_1 + "_"); + String _plus_3 = (_plus_2 + r); + _builder.append(_plus_3); + _builder.append("_fk"); + _builder.newLineIfNotEmpty(); + } } - _builder.append(" "); - String _lowerCase = att.getName().toLowerCase(); - String _plus = (_lowerCase + "_"); - String _plus_1 = (_plus + r); - _builder.append(_plus_1); - _builder.append("_fk"); - _builder.newLineIfNotEmpty(); } } + _builder.newLine(); + _builder.newLine(); return _builder; } private CharSequence html_ListPKtoFK_SelfRelationship_Alt(final Entity e, final String r) { StringConcatenation _builder = new StringConcatenation(); { - final Function1 _function = (Attribute it) -> { - return Boolean.valueOf(it.isIsKey()); - }; - Iterable _filter = IterableExtensions.filter(e.getAttributes(), _function); - boolean _hasElements = false; - for(final Attribute att : _filter) { - if (!_hasElements) { - _hasElements = true; - } else { - _builder.appendImmediate(" , ", ""); + Entity _is = e.getIs(); + boolean _tripleNotEquals = (_is != null); + if (_tripleNotEquals) { + { + final Function1 _function = (Attribute it) -> { + return Boolean.valueOf(it.isIsKey()); + }; + Iterable _filter = IterableExtensions.filter(e.getIs().getAttributes(), _function); + boolean _hasElements = false; + for(final Attribute att : _filter) { + if (!_hasElements) { + _hasElements = true; + } else { + _builder.appendImmediate(" , ", ""); + } + _builder.append(""); + String _lowerCase = att.getName().toLowerCase(); + String _plus = (_lowerCase + "_"); + String _plus_1 = (_plus + r); + _builder.append(_plus_1); + _builder.append("_fk"); + _builder.newLineIfNotEmpty(); + } + } + } else { + { + final Function1 _function_1 = (Attribute it) -> { + return Boolean.valueOf(it.isIsKey()); + }; + Iterable _filter_1 = IterableExtensions.filter(e.getAttributes(), _function_1); + boolean _hasElements_1 = false; + for(final Attribute att_1 : _filter_1) { + if (!_hasElements_1) { + _hasElements_1 = true; + } else { + _builder.appendImmediate(" , ", ""); + } + _builder.append(""); + String _lowerCase_1 = att_1.getName().toLowerCase(); + String _plus_2 = (_lowerCase_1 + "_"); + String _plus_3 = (_plus_2 + r); + _builder.append(_plus_3); + _builder.append("_fk"); + _builder.newLineIfNotEmpty(); + } + } + } + } + return _builder; + } + + private CharSequence html_ListPKtoFK_SelfRelationship_Alt(final Entity e, final int i) { + StringConcatenation _builder = new StringConcatenation(); + { + Entity _is = e.getIs(); + boolean _tripleNotEquals = (_is != null); + if (_tripleNotEquals) { + { + final Function1 _function = (Attribute it) -> { + return Boolean.valueOf(it.isIsKey()); + }; + Iterable _filter = IterableExtensions.filter(e.getIs().getAttributes(), _function); + boolean _hasElements = false; + for(final Attribute att : _filter) { + if (!_hasElements) { + _hasElements = true; + } else { + _builder.appendImmediate(" , ", ""); + } + _builder.append(""); + String _lowerCase = att.getName().toLowerCase(); + _builder.append(_lowerCase); + _builder.append("_fk_"); + _builder.append(i); + _builder.append(""); + _builder.newLineIfNotEmpty(); + } + } + } else { + { + final Function1 _function_1 = (Attribute it) -> { + return Boolean.valueOf(it.isIsKey()); + }; + Iterable _filter_1 = IterableExtensions.filter(e.getAttributes(), _function_1); + boolean _hasElements_1 = false; + for(final Attribute att_1 : _filter_1) { + if (!_hasElements_1) { + _hasElements_1 = true; + } else { + _builder.appendImmediate(" , ", ""); + } + _builder.append(""); + String _lowerCase_1 = att_1.getName().toLowerCase(); + _builder.append(_lowerCase_1); + _builder.append("_fk_"); + _builder.append(i); + _builder.append(""); + _builder.newLineIfNotEmpty(); + } } - _builder.append(""); - String _lowerCase = att.getName().toLowerCase(); - String _plus = (_lowerCase + "_"); - String _plus_1 = (_plus + r); - _builder.append(_plus_1); - _builder.append("_fk"); - _builder.newLineIfNotEmpty(); } } return _builder; @@ -1401,6 +1672,8 @@ private CharSequence html_1To1_Relationships(final ERModel m) { CharSequence _html_BinaryRelationshipNameStyle = this.html_BinaryRelationshipNameStyle(relation.getName(), relation.getLeftEnding().getTarget().toString(), relation.getRightEnding().getTarget().toString(), relation.getLeftEnding().getCardinality(), relation.getRightEnding().getCardinality()); _builder.append(_html_BinaryRelationshipNameStyle, "\t"); _builder.newLineIfNotEmpty(); + _builder.append("\t"); + _builder.append("
"); _builder.newLine(); _builder.append("\t"); _builder.append("Attribute ( "); @@ -1517,7 +1790,7 @@ private CharSequence html_1ToN_Relationships(final ERModel m) { CharSequence _html_BinaryRelationshipNameStyle = this.html_BinaryRelationshipNameStyle(relation.getName(), relation.getLeftEnding().getTarget().toString(), relation.getRightEnding().getTarget().toString(), relation.getLeftEnding().getCardinality(), relation.getRightEnding().getCardinality()); _builder.append(_html_BinaryRelationshipNameStyle); _builder.newLineIfNotEmpty(); - _builder.append("\t"); + _builder.append("
"); _builder.newLine(); _builder.append("Attribute ( "); _builder.newLine(); @@ -1602,6 +1875,7 @@ private CharSequence html_1ToN_Relationships(final ERModel m) { CharSequence _html_BinaryRelationshipNameStyle_1 = this.html_BinaryRelationshipNameStyle(relation.getName(), relation.getLeftEnding().getTarget().toString(), relation.getRightEnding().getTarget().toString(), relation.getLeftEnding().getCardinality(), relation.getRightEnding().getCardinality()); _builder.append(_html_BinaryRelationshipNameStyle_1); _builder.newLineIfNotEmpty(); + _builder.append("
"); _builder.newLine(); _builder.append("Attribute ("); _builder.newLine(); @@ -1710,14 +1984,25 @@ private CharSequence html_NToN_Relationships(final ERModel m) { CharSequence _html_BinaryRelationshipNameStyle = this.html_BinaryRelationshipNameStyle(relation.getName(), relation.getLeftEnding().getTarget().toString(), relation.getRightEnding().getTarget().toString(), relation.getLeftEnding().getCardinality(), relation.getRightEnding().getCardinality()); _builder.append(_html_BinaryRelationshipNameStyle); _builder.newLineIfNotEmpty(); + _builder.append("
"); _builder.newLine(); _builder.append("Attribute ( "); _builder.newLine(); _builder.newLine(); - EObject _target = relation.getLeftEnding().getTarget(); - CharSequence _html_ListPKtoFK_Alt = this.html_ListPKtoFK_Alt(((Entity) _target)); - _builder.append(_html_ListPKtoFK_Alt); - _builder.newLineIfNotEmpty(); + { + boolean _equalsIgnoreCase = relation.getLeftEnding().getTarget().toString().equalsIgnoreCase(relation.getRightEnding().getTarget().toString()); + if (_equalsIgnoreCase) { + EObject _target = relation.getLeftEnding().getTarget(); + CharSequence _html_ListPKtoFK_SelfRelationship_Alt = this.html_ListPKtoFK_SelfRelationship_Alt(((Entity) _target), 1); + _builder.append(_html_ListPKtoFK_SelfRelationship_Alt); + _builder.newLineIfNotEmpty(); + } else { + EObject _target_1 = relation.getLeftEnding().getTarget(); + CharSequence _html_ListPKtoFK_Alt = this.html_ListPKtoFK_Alt(((Entity) _target_1)); + _builder.append(_html_ListPKtoFK_Alt); + _builder.newLineIfNotEmpty(); + } + } _builder.newLine(); _builder.append(") in "); CharSequence _html_EntityNameTag = this.html_EntityNameTag(relation.getName()); @@ -1732,11 +2017,20 @@ private CharSequence html_NToN_Relationships(final ERModel m) { _builder.append("Attribute ( "); _builder.newLine(); _builder.newLine(); - EObject _target_1 = relation.getRightEnding().getTarget(); - CharSequence _html_ListPKtoFK_Alt_1 = this.html_ListPKtoFK_Alt(((Entity) _target_1)); - _builder.append(_html_ListPKtoFK_Alt_1); - _builder.append("\t\t\t"); - _builder.newLineIfNotEmpty(); + { + boolean _equalsIgnoreCase_1 = relation.getLeftEnding().getTarget().toString().equalsIgnoreCase(relation.getRightEnding().getTarget().toString()); + if (_equalsIgnoreCase_1) { + EObject _target_2 = relation.getRightEnding().getTarget(); + CharSequence _html_ListPKtoFK_SelfRelationship_Alt_1 = this.html_ListPKtoFK_SelfRelationship_Alt(((Entity) _target_2), 2); + _builder.append(_html_ListPKtoFK_SelfRelationship_Alt_1); + _builder.newLineIfNotEmpty(); + } else { + EObject _target_3 = relation.getRightEnding().getTarget(); + CharSequence _html_ListPKtoFK_Alt_1 = this.html_ListPKtoFK_Alt(((Entity) _target_3)); + _builder.append(_html_ListPKtoFK_Alt_1); + _builder.newLineIfNotEmpty(); + } + } _builder.append("\t\t\t"); _builder.newLine(); _builder.append(") in "); @@ -1802,7 +2096,7 @@ private CharSequence html_Ternary_Relationships(final ERModel m) { String _plus_3 = (_plus_2 + _upperCase_4); _builder.append(_plus_3); _builder.newLineIfNotEmpty(); - _builder.append("

\t"); + _builder.append("


"); _builder.newLine(); CharSequence _html_Ternary_Relationships_Attributes = this.html_Ternary_Relationships_Attributes(m, relation); _builder.append(_html_Ternary_Relationships_Attributes); diff --git a/org.xtext.unipampa.erdsl/xtend-gen/org/xtext/unipampa/erdsl/generator/MysqlFileGenerator.java b/org.xtext.unipampa.erdsl/xtend-gen/org/xtext/unipampa/erdsl/generator/MysqlFileGenerator.java index 174ed82..9801e4c 100644 --- a/org.xtext.unipampa.erdsl/xtend-gen/org/xtext/unipampa/erdsl/generator/MysqlFileGenerator.java +++ b/org.xtext.unipampa.erdsl/xtend-gen/org/xtext/unipampa/erdsl/generator/MysqlFileGenerator.java @@ -1,6 +1,7 @@ package org.xtext.unipampa.erdsl.generator; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.ecore.EObject; @@ -39,6 +40,10 @@ public class MysqlFileGenerator extends AbstractGenerator { private ArrayList primaryKeys_NtoN = new ArrayList(); + private ArrayList primaryKeys_Ternary = new ArrayList(); + + private HashMap mapTernary = new HashMap(); + private StringBuilder sc_AlterTbl_1to1 = new StringBuilder(); private StringBuilder sc_AlterTbl_1toN = new StringBuilder(); @@ -52,7 +57,9 @@ public void doGenerate(final Resource input, final IFileSystemAccess2 fsa, final EObject _get = input.getContents().get(0); final ERModel modeloER = ((ERModel) _get); try { - fsa.generateFile("MySQL_DDL.sql", this.mysql_CreateModel(modeloER)); + String _lowerCase = modeloER.getDomain().getName().toLowerCase(); + String _plus = (_lowerCase + "_My.sql"); + fsa.generateFile(_plus, this.mysql_CreateModel(modeloER)); } catch (final Throwable _t) { if (_t instanceof Exception) { final Exception e = (Exception)_t; @@ -65,15 +72,7 @@ public void doGenerate(final Resource input, final IFileSystemAccess2 fsa, final private CharSequence mysql_CreateModel(final ERModel modeloER) { StringConcatenation _builder = new StringConcatenation(); - _builder.append("-- ####################################################"); - _builder.newLine(); - _builder.append("-- #\t\t\t\t\tMySQL Template \t\t\t \t #"); - _builder.newLine(); - _builder.append("-- ####################################################"); - _builder.newLine(); - _builder.append("-- #\t\t\t\tGenerated by ERtext \t\t\t #"); - _builder.newLine(); - _builder.append("-- ####################################################"); + _builder.append("-- MySQL Template generated by ERtext\t\t "); _builder.newLine(); _builder.newLine(); CharSequence _mysql_DomainMapper = this.mysql_DomainMapper(modeloER); @@ -124,58 +123,23 @@ private CharSequence mysql_DomainMapper(final ERModel m) { _builder.append("-- Database: "); String _upperCase = m.getDomain().getName().toString().toUpperCase(); _builder.append(_upperCase); + _builder.append(";"); _builder.newLineIfNotEmpty(); - _builder.append("-- DROP DATABASE "); + _builder.append("-- CREATE DATABASE "); String _upperCase_1 = m.getDomain().getName().toString().toUpperCase(); _builder.append(_upperCase_1); _builder.append(";"); _builder.newLineIfNotEmpty(); - _builder.append("-- CREATE DATABASE IF NOT EXISTS "); + _builder.append("-- USE "); String _upperCase_2 = m.getDomain().getName().toString().toUpperCase(); _builder.append(_upperCase_2); - _builder.append("»"); + _builder.append(";"); _builder.newLineIfNotEmpty(); - _builder.newLine(); - _builder.append("--DROP TABLE IF EXISTS "); - _builder.newLine(); - _builder.append("-- "); - { - EList _entities = m.getEntities(); - boolean _hasElements = false; - for(final Entity e : _entities) { - if (!_hasElements) { - _hasElements = true; - } else { - _builder.appendImmediate(", ", ""); - } - _builder.append("public.\""); - String _lowerCase = e.getName().toLowerCase(); - _builder.append(_lowerCase); - _builder.append("\""); - } - } - { - final Function1 _function = (Relation it) -> { - return Boolean.valueOf(((it.getLeftEnding().getCardinality().equalsIgnoreCase("(0:N)") || it.getLeftEnding().getCardinality().equalsIgnoreCase("(1:N)")) && (it.getRightEnding().getCardinality().equalsIgnoreCase("(0:N)") || it.getRightEnding().getCardinality().equalsIgnoreCase("(1:N)")))); - }; - Iterable _filter = IterableExtensions.filter(m.getRelations(), _function); - boolean _hasElements_1 = false; - for(final Relation r : _filter) { - if (!_hasElements_1) { - _hasElements_1 = true; - _builder.append(", "); - } else { - _builder.appendImmediate(", ", ""); - } - _builder.append("public.\""); - String _lowerCase_1 = r.getName().toLowerCase(); - _builder.append(_lowerCase_1); - _builder.append("\""); - } - } - _builder.append(" "); + _builder.append("-- DROP DATABASE "); + String _upperCase_3 = m.getDomain().getName().toString().toUpperCase(); + _builder.append(_upperCase_3); + _builder.append(";"); _builder.newLineIfNotEmpty(); - _builder.append("-- CASCADE;"); _builder.newLine(); return _builder; } @@ -414,7 +378,7 @@ private CharSequence mysql_AttTypeChecker(final Attribute a) { if (_equalsIgnoreCase_6) { String _lowerCase_6 = a.getName().toLowerCase(); _builder.append(_lowerCase_6); - _builder.append(" BLOB NOT NULL,"); + _builder.append(" BINARY NOT NULL,"); _builder.newLineIfNotEmpty(); } } @@ -457,12 +421,12 @@ private CharSequence mysql_AttTypeChecker_Unnamed(final Attribute a) { } else { boolean _equalsIgnoreCase_5 = a.getType().toString().equalsIgnoreCase("boolean"); if (_equalsIgnoreCase_5) { - _builder.append(" BIT NOT NULL,"); + _builder.append(" BOOLEAN NOT NULL,"); _builder.newLineIfNotEmpty(); } else { boolean _equalsIgnoreCase_6 = a.getType().toString().equalsIgnoreCase("file"); if (_equalsIgnoreCase_6) { - _builder.append(" BLOB NOT NULL,"); + _builder.append(" BINARY NOT NULL,"); _builder.newLineIfNotEmpty(); } } @@ -1327,18 +1291,535 @@ private CharSequence mysql_NToN_DerivedEntitiesMapper(final ERModel m) { private CharSequence mysql_TernaryEntitiesMapper(final ERModel model) { StringConcatenation _builder = new StringConcatenation(); - _builder.append("-- #######################################################"); - _builder.newLine(); - _builder.append("-- #TODO: auto-generated method stub for Ternary Entities#"); - _builder.newLine(); - _builder.append("-- #######################################################"); - _builder.newLine(); + { + final Function1 _function = (Relation i) -> { + return Boolean.valueOf(((i.getLeftEnding().getTarget() instanceof Relation) && (i.getRightEnding().getTarget() instanceof Entity))); + }; + Iterable _filter = IterableExtensions.filter(model.getRelations(), _function); + for(final Relation r : _filter) { + EObject _target = r.getLeftEnding().getTarget(); + Relation auxRel = ((Relation) _target); + _builder.newLineIfNotEmpty(); + EObject _target_1 = r.getRightEnding().getTarget(); + Entity auxEnt = ((Entity) _target_1); + _builder.newLineIfNotEmpty(); + EObject _target_2 = auxRel.getLeftEnding().getTarget(); + Entity auxLeftEntity = ((Entity) _target_2); + _builder.newLineIfNotEmpty(); + EObject _target_3 = auxRel.getRightEnding().getTarget(); + Entity auxRightEntity = ((Entity) _target_3); + _builder.append("\t\t\t"); + _builder.newLineIfNotEmpty(); + _builder.append("-- Table: "); + String _upperCase = r.getName().toUpperCase(); + _builder.append(_upperCase); + _builder.newLineIfNotEmpty(); + _builder.append("-- DROP TABLE "); + String _upperCase_1 = r.getName().toUpperCase(); + _builder.append(_upperCase_1); + _builder.append(";\t"); + _builder.newLineIfNotEmpty(); + _builder.append("CREATE TABLE IF NOT EXISTS "); + String _lowerCase = r.getName().toLowerCase(); + _builder.append(_lowerCase); + _builder.append(" ("); + _builder.newLineIfNotEmpty(); + { + final Function1 _function_1 = (Attribute it) -> { + return Boolean.valueOf(it.isIsKey()); + }; + Iterable _filter_1 = IterableExtensions.filter(auxEnt.getAttributes(), _function_1); + for(final Attribute att : _filter_1) { + _builder.append("\t"); + String _lowerCase_1 = auxEnt.getName().toLowerCase(); + String _plus = (_lowerCase_1 + "_"); + CharSequence _mysql_AttTypeChecker = this.mysql_AttTypeChecker(att); + String _plus_1 = (_plus + _mysql_AttTypeChecker); + _builder.append(_plus_1); + _builder.newLineIfNotEmpty(); + } + } + { + final Function1 _function_2 = (Attribute it) -> { + return Boolean.valueOf(it.isIsKey()); + }; + Iterable _filter_2 = IterableExtensions.filter(auxLeftEntity.getAttributes(), _function_2); + for(final Attribute att_1 : _filter_2) { + _builder.append("\t"); + String _lowerCase_2 = auxLeftEntity.getName().toLowerCase(); + String _plus_2 = (_lowerCase_2 + "_"); + CharSequence _mysql_AttTypeChecker_1 = this.mysql_AttTypeChecker(att_1); + String _plus_3 = (_plus_2 + _mysql_AttTypeChecker_1); + _builder.append(_plus_3); + _builder.newLineIfNotEmpty(); + } + } + { + final Function1 _function_3 = (Attribute it) -> { + return Boolean.valueOf(it.isIsKey()); + }; + Iterable _filter_3 = IterableExtensions.filter(auxRightEntity.getAttributes(), _function_3); + for(final Attribute att_2 : _filter_3) { + _builder.append("\t"); + String _lowerCase_3 = auxRightEntity.getName().toLowerCase(); + String _plus_4 = (_lowerCase_3 + "_"); + CharSequence _mysql_AttTypeChecker_2 = this.mysql_AttTypeChecker(att_2); + String _plus_5 = (_plus_4 + _mysql_AttTypeChecker_2); + _builder.append(_plus_5); + _builder.newLineIfNotEmpty(); + } + } + { + EList _attributes = r.getAttributes(); + boolean _tripleNotEquals = (_attributes != null); + if (_tripleNotEquals) { + { + EList _attributes_1 = r.getAttributes(); + for(final Attribute att_3 : _attributes_1) { + _builder.append("\t"); + CharSequence _mysql_AttTypeChecker_3 = this.mysql_AttTypeChecker(att_3); + _builder.append(_mysql_AttTypeChecker_3); + { + boolean _isIsKey = att_3.isIsKey(); + if (_isIsKey) { + Object _xblockexpression = null; + { + this.primaryKeys_Ternary.add(att_3.getName().toLowerCase()); + _xblockexpression = null; + } + _builder.append(_xblockexpression); + } + } + _builder.newLineIfNotEmpty(); + } + } + } + } + Object _xblockexpression_1 = null; + { + String _name = auxEnt.getName(); + ArrayList _arrayList = new ArrayList(); + this.mapTernary.put(_name, _arrayList); + _xblockexpression_1 = null; + } + _builder.append(_xblockexpression_1); + _builder.newLineIfNotEmpty(); + { + final Function1 _function_4 = (Attribute it) -> { + return Boolean.valueOf(it.isIsKey()); + }; + Iterable _filter_4 = IterableExtensions.filter(auxEnt.getAttributes(), _function_4); + for(final Attribute att_4 : _filter_4) { + Object _xblockexpression_2 = null; + { + String _lowerCase_4 = auxEnt.getName().toLowerCase(); + String _plus_6 = (_lowerCase_4 + "_"); + String _string = att_4.getName().toString(); + String _plus_7 = (_plus_6 + _string); + this.primaryKeys_Ternary.add(_plus_7); + _xblockexpression_2 = null; + } + _builder.append(_xblockexpression_2); + _builder.newLineIfNotEmpty(); + Object _xblockexpression_3 = null; + { + this.mapTernary.get(auxEnt.getName()).add(att_4.getName().toString().toLowerCase()); + _xblockexpression_3 = null; + } + _builder.append(_xblockexpression_3); + _builder.newLineIfNotEmpty(); + } + } + Object _xblockexpression_4 = null; + { + String _name = auxLeftEntity.getName(); + ArrayList _arrayList = new ArrayList(); + this.mapTernary.put(_name, _arrayList); + _xblockexpression_4 = null; + } + _builder.append(_xblockexpression_4); + _builder.newLineIfNotEmpty(); + { + final Function1 _function_5 = (Attribute it) -> { + return Boolean.valueOf(it.isIsKey()); + }; + Iterable _filter_5 = IterableExtensions.filter(auxLeftEntity.getAttributes(), _function_5); + for(final Attribute att_5 : _filter_5) { + Object _xblockexpression_5 = null; + { + String _lowerCase_4 = auxLeftEntity.getName().toLowerCase(); + String _plus_6 = (_lowerCase_4 + "_"); + String _lowerCase_5 = att_5.getName().toString().toLowerCase(); + String _plus_7 = (_plus_6 + _lowerCase_5); + this.primaryKeys_Ternary.add(_plus_7); + _xblockexpression_5 = null; + } + _builder.append(_xblockexpression_5); + _builder.newLineIfNotEmpty(); + Object _xblockexpression_6 = null; + { + ArrayList _get = this.mapTernary.get(auxLeftEntity.getName()); + String _lowerCase_4 = auxLeftEntity.getName().toLowerCase(); + String _plus_6 = (_lowerCase_4 + "_"); + String _lowerCase_5 = att_5.getName().toString().toLowerCase(); + String _plus_7 = (_plus_6 + _lowerCase_5); + _get.add(_plus_7); + _xblockexpression_6 = null; + } + _builder.append(_xblockexpression_6); + _builder.newLineIfNotEmpty(); + } + } + Object _xblockexpression_7 = null; + { + String _name = auxRightEntity.getName(); + ArrayList _arrayList = new ArrayList(); + this.mapTernary.put(_name, _arrayList); + _xblockexpression_7 = null; + } + _builder.append(_xblockexpression_7); + _builder.newLineIfNotEmpty(); + { + final Function1 _function_6 = (Attribute it) -> { + return Boolean.valueOf(it.isIsKey()); + }; + Iterable _filter_6 = IterableExtensions.filter(auxRightEntity.getAttributes(), _function_6); + for(final Attribute att_6 : _filter_6) { + Object _xblockexpression_8 = null; + { + String _lowerCase_4 = auxRightEntity.getName().toLowerCase(); + String _plus_6 = (_lowerCase_4 + "_"); + String _lowerCase_5 = att_6.getName().toString().toLowerCase(); + String _plus_7 = (_plus_6 + _lowerCase_5); + this.primaryKeys_Ternary.add(_plus_7); + _xblockexpression_8 = null; + } + _builder.append(_xblockexpression_8); + _builder.newLineIfNotEmpty(); + Object _xblockexpression_9 = null; + { + ArrayList _get = this.mapTernary.get(auxRightEntity.getName()); + String _lowerCase_4 = auxRightEntity.getName().toLowerCase(); + String _plus_6 = (_lowerCase_4 + "_"); + String _lowerCase_5 = att_6.getName().toString().toLowerCase(); + String _plus_7 = (_plus_6 + _lowerCase_5); + _get.add(_plus_7); + _xblockexpression_9 = null; + } + _builder.append(_xblockexpression_9); + _builder.newLineIfNotEmpty(); + } + } + _builder.append("\t"); + _builder.append("CONSTRAINT pk_"); + String _lowerCase_4 = r.getName().toLowerCase(); + _builder.append(_lowerCase_4, "\t"); + _builder.append(" PRIMARY KEY ("); + { + boolean _hasElements = false; + for(final Object pk : this.primaryKeys_Ternary) { + if (!_hasElements) { + _hasElements = true; + } else { + _builder.appendImmediate(", ", "\t"); + } + String _string = pk.toString(); + _builder.append(_string, "\t"); + } + } + _builder.append(") "); + Object _xblockexpression_10 = null; + { + this.primaryKeys_Ternary.clear(); + _xblockexpression_10 = null; + } + _builder.append(_xblockexpression_10, "\t"); + _builder.newLineIfNotEmpty(); + _builder.append("\t"); + Object _xblockexpression_11 = null; + { + this.sc_AlterTbl_1toN.append(this.mysql_AlterTable_Ternary_RefMapper(r.getName(), auxEnt.getName(), auxRel.getName(), auxLeftEntity.getName(), auxRightEntity.getName(), this.mapTernary)); + _xblockexpression_11 = null; + } + _builder.append(_xblockexpression_11, "\t"); + Object _xblockexpression_12 = null; + { + this.mapTernary.clear(); + _xblockexpression_12 = null; + } + _builder.append(_xblockexpression_12, "\t"); + _builder.newLineIfNotEmpty(); + _builder.append(");"); + _builder.newLine(); + _builder.newLine(); + } + } + { + final Function1 _function_7 = (Relation i) -> { + return Boolean.valueOf(((i.getLeftEnding().getTarget() instanceof Entity) && (i.getRightEnding().getTarget() instanceof Relation))); + }; + Iterable _filter_7 = IterableExtensions.filter(model.getRelations(), _function_7); + for(final Relation r_1 : _filter_7) { + EObject _target_4 = r_1.getLeftEnding().getTarget(); + Entity auxEnt_1 = ((Entity) _target_4); + _builder.newLineIfNotEmpty(); + EObject _target_5 = r_1.getRightEnding().getTarget(); + Relation auxRel_1 = ((Relation) _target_5); + _builder.newLineIfNotEmpty(); + EObject _target_6 = auxRel_1.getLeftEnding().getTarget(); + Entity auxLeftEntity_1 = ((Entity) _target_6); + _builder.newLineIfNotEmpty(); + EObject _target_7 = auxRel_1.getRightEnding().getTarget(); + Entity auxRightEntity_1 = ((Entity) _target_7); + _builder.newLineIfNotEmpty(); + _builder.append("-- Table: "); + String _upperCase_2 = r_1.getName().toUpperCase(); + _builder.append(_upperCase_2); + _builder.newLineIfNotEmpty(); + _builder.append("-- DROP TABLE "); + String _upperCase_3 = r_1.getName().toUpperCase(); + _builder.append(_upperCase_3); + _builder.append(";\t"); + _builder.newLineIfNotEmpty(); + _builder.append("CREATE TABLE IF NOT EXISTS "); + String _lowerCase_5 = r_1.getName().toLowerCase(); + _builder.append(_lowerCase_5); + _builder.append(" ("); + _builder.newLineIfNotEmpty(); + { + final Function1 _function_8 = (Attribute it) -> { + return Boolean.valueOf(it.isIsKey()); + }; + Iterable _filter_8 = IterableExtensions.filter(auxEnt_1.getAttributes(), _function_8); + for(final Attribute att_7 : _filter_8) { + _builder.append("\t"); + String _lowerCase_6 = auxEnt_1.getName().toLowerCase(); + String _plus_6 = (_lowerCase_6 + "_"); + CharSequence _mysql_AttTypeChecker_4 = this.mysql_AttTypeChecker(att_7); + String _plus_7 = (_plus_6 + _mysql_AttTypeChecker_4); + _builder.append(_plus_7); + _builder.newLineIfNotEmpty(); + } + } + { + final Function1 _function_9 = (Attribute it) -> { + return Boolean.valueOf(it.isIsKey()); + }; + Iterable _filter_9 = IterableExtensions.filter(auxLeftEntity_1.getAttributes(), _function_9); + for(final Attribute att_8 : _filter_9) { + _builder.append("\t"); + String _lowerCase_7 = auxLeftEntity_1.getName().toLowerCase(); + String _plus_8 = (_lowerCase_7 + "_"); + CharSequence _mysql_AttTypeChecker_5 = this.mysql_AttTypeChecker(att_8); + String _plus_9 = (_plus_8 + _mysql_AttTypeChecker_5); + _builder.append(_plus_9); + _builder.newLineIfNotEmpty(); + } + } + { + final Function1 _function_10 = (Attribute it) -> { + return Boolean.valueOf(it.isIsKey()); + }; + Iterable _filter_10 = IterableExtensions.filter(auxRightEntity_1.getAttributes(), _function_10); + for(final Attribute att_9 : _filter_10) { + _builder.append("\t"); + String _lowerCase_8 = auxRightEntity_1.getName().toLowerCase(); + String _plus_10 = (_lowerCase_8 + "_"); + CharSequence _mysql_AttTypeChecker_6 = this.mysql_AttTypeChecker(att_9); + String _plus_11 = (_plus_10 + _mysql_AttTypeChecker_6); + _builder.append(_plus_11); + _builder.newLineIfNotEmpty(); + } + } + { + EList _attributes_2 = r_1.getAttributes(); + boolean _tripleNotEquals_1 = (_attributes_2 != null); + if (_tripleNotEquals_1) { + { + EList _attributes_3 = r_1.getAttributes(); + for(final Attribute att_10 : _attributes_3) { + _builder.append("\t"); + CharSequence _mysql_AttTypeChecker_7 = this.mysql_AttTypeChecker(att_10); + _builder.append(_mysql_AttTypeChecker_7); + { + boolean _isIsKey_1 = att_10.isIsKey(); + if (_isIsKey_1) { + Object _xblockexpression_13 = null; + { + this.primaryKeys_Ternary.add(att_10.getName().toLowerCase()); + _xblockexpression_13 = null; + } + _builder.append(_xblockexpression_13); + } + } + _builder.newLineIfNotEmpty(); + } + } + } + } + Object _xblockexpression_14 = null; + { + String _name = auxEnt_1.getName(); + ArrayList _arrayList = new ArrayList(); + this.mapTernary.put(_name, _arrayList); + _xblockexpression_14 = null; + } + _builder.append(_xblockexpression_14); + _builder.newLineIfNotEmpty(); + { + final Function1 _function_11 = (Attribute it) -> { + return Boolean.valueOf(it.isIsKey()); + }; + Iterable _filter_11 = IterableExtensions.filter(auxEnt_1.getAttributes(), _function_11); + for(final Attribute att_11 : _filter_11) { + Object _xblockexpression_15 = null; + { + String _lowerCase_9 = auxEnt_1.getName().toLowerCase(); + String _plus_12 = (_lowerCase_9 + "_"); + String _string_1 = att_11.getName().toString(); + String _plus_13 = (_plus_12 + _string_1); + this.primaryKeys_Ternary.add(_plus_13); + _xblockexpression_15 = null; + } + _builder.append(_xblockexpression_15); + _builder.newLineIfNotEmpty(); + Object _xblockexpression_16 = null; + { + this.mapTernary.get(auxEnt_1.getName()).add(att_11.getName().toString().toLowerCase()); + _xblockexpression_16 = null; + } + _builder.append(_xblockexpression_16); + _builder.newLineIfNotEmpty(); + } + } + Object _xblockexpression_17 = null; + { + String _name = auxLeftEntity_1.getName(); + ArrayList _arrayList = new ArrayList(); + this.mapTernary.put(_name, _arrayList); + _xblockexpression_17 = null; + } + _builder.append(_xblockexpression_17); + _builder.newLineIfNotEmpty(); + { + final Function1 _function_12 = (Attribute it) -> { + return Boolean.valueOf(it.isIsKey()); + }; + Iterable _filter_12 = IterableExtensions.filter(auxLeftEntity_1.getAttributes(), _function_12); + for(final Attribute att_12 : _filter_12) { + Object _xblockexpression_18 = null; + { + String _lowerCase_9 = auxLeftEntity_1.getName().toLowerCase(); + String _plus_12 = (_lowerCase_9 + "_"); + String _lowerCase_10 = att_12.getName().toString().toLowerCase(); + String _plus_13 = (_plus_12 + _lowerCase_10); + this.primaryKeys_Ternary.add(_plus_13); + _xblockexpression_18 = null; + } + _builder.append(_xblockexpression_18); + _builder.newLineIfNotEmpty(); + Object _xblockexpression_19 = null; + { + ArrayList _get = this.mapTernary.get(auxLeftEntity_1.getName()); + String _lowerCase_9 = auxLeftEntity_1.getName().toLowerCase(); + String _plus_12 = (_lowerCase_9 + "_"); + String _lowerCase_10 = att_12.getName().toString().toLowerCase(); + String _plus_13 = (_plus_12 + _lowerCase_10); + _get.add(_plus_13); + _xblockexpression_19 = null; + } + _builder.append(_xblockexpression_19); + _builder.newLineIfNotEmpty(); + } + } + Object _xblockexpression_20 = null; + { + String _name = auxRightEntity_1.getName(); + ArrayList _arrayList = new ArrayList(); + this.mapTernary.put(_name, _arrayList); + _xblockexpression_20 = null; + } + _builder.append(_xblockexpression_20); + _builder.newLineIfNotEmpty(); + { + final Function1 _function_13 = (Attribute it) -> { + return Boolean.valueOf(it.isIsKey()); + }; + Iterable _filter_13 = IterableExtensions.filter(auxRightEntity_1.getAttributes(), _function_13); + for(final Attribute att_13 : _filter_13) { + Object _xblockexpression_21 = null; + { + String _lowerCase_9 = auxRightEntity_1.getName().toLowerCase(); + String _plus_12 = (_lowerCase_9 + "_"); + String _lowerCase_10 = att_13.getName().toString().toLowerCase(); + String _plus_13 = (_plus_12 + _lowerCase_10); + this.primaryKeys_Ternary.add(_plus_13); + _xblockexpression_21 = null; + } + _builder.append(_xblockexpression_21); + _builder.newLineIfNotEmpty(); + Object _xblockexpression_22 = null; + { + ArrayList _get = this.mapTernary.get(auxRightEntity_1.getName()); + String _lowerCase_9 = auxRightEntity_1.getName().toLowerCase(); + String _plus_12 = (_lowerCase_9 + "_"); + String _lowerCase_10 = att_13.getName().toString().toLowerCase(); + String _plus_13 = (_plus_12 + _lowerCase_10); + _get.add(_plus_13); + _xblockexpression_22 = null; + } + _builder.append(_xblockexpression_22); + _builder.newLineIfNotEmpty(); + } + } + _builder.append("\t"); + _builder.append("CONSTRAINT pk_"); + String _lowerCase_9 = r_1.getName().toLowerCase(); + _builder.append(_lowerCase_9, "\t"); + _builder.append(" PRIMARY KEY ("); + { + boolean _hasElements_1 = false; + for(final Object pk_1 : this.primaryKeys_Ternary) { + if (!_hasElements_1) { + _hasElements_1 = true; + } else { + _builder.appendImmediate(", ", "\t"); + } + String _string_1 = pk_1.toString(); + _builder.append(_string_1, "\t"); + } + } + _builder.append(") "); + Object _xblockexpression_23 = null; + { + this.primaryKeys_Ternary.clear(); + _xblockexpression_23 = null; + } + _builder.append(_xblockexpression_23, "\t"); + _builder.newLineIfNotEmpty(); + _builder.append("\t"); + Object _xblockexpression_24 = null; + { + this.sc_AlterTbl_1toN.append(this.mysql_AlterTable_Ternary_RefMapper(r_1.getName(), auxEnt_1.getName(), auxRel_1.getName(), auxLeftEntity_1.getName(), auxRightEntity_1.getName(), this.mapTernary)); + _xblockexpression_24 = null; + } + _builder.append(_xblockexpression_24, "\t"); + Object _xblockexpression_25 = null; + { + this.mapTernary.clear(); + _xblockexpression_25 = null; + } + _builder.append(_xblockexpression_25, "\t"); + _builder.newLineIfNotEmpty(); + _builder.append(");"); + _builder.newLine(); + } + } return _builder; } private CharSequence mysql_GeneralizationRefMapper(final ERModel m) { StringConcatenation _builder = new StringConcatenation(); - _builder.newLine(); { final Function1 _function = (Entity it) -> { Entity _is = it.getIs(); @@ -1348,7 +1829,7 @@ private CharSequence mysql_GeneralizationRefMapper(final ERModel m) { for(final Entity e : _filter) { _builder.append("-- GENERALIZATION"); _builder.newLine(); - _builder.append("ALTER TABLE ONLY public."); + _builder.append("ALTER TABLE "); String _lowerCase = e.getName().toLowerCase(); _builder.append(_lowerCase); _builder.append(" ADD CONSTRAINT fk_gen_"); @@ -1374,7 +1855,7 @@ private CharSequence mysql_GeneralizationRefMapper(final ERModel m) { _builder.append(_string); } } - _builder.append(") REFERENCES public."); + _builder.append(") REFERENCES "); String _lowerCase_3 = e.getIs().toString().toLowerCase(); _builder.append(_lowerCase_3); _builder.append(" ("); @@ -1396,8 +1877,6 @@ private CharSequence mysql_GeneralizationRefMapper(final ERModel m) { } _builder.append(");"); _builder.newLineIfNotEmpty(); - _builder.append("\t\t"); - _builder.newLine(); } } return _builder; @@ -1411,7 +1890,7 @@ private CharSequence mysql_AlterTable_1to1_1toN_RefMapper(final Entity alterTbl, _builder.append(cardinalityRel); _builder.append(": Self-relation WITH generalization"); _builder.newLineIfNotEmpty(); - _builder.append("ALTER TABLE ONLY public."); + _builder.append("ALTER TABLE "); String _lowerCase = alterTbl.getName().toLowerCase(); _builder.append(_lowerCase); _builder.append(" ADD CONSTRAINT fk_"); @@ -1437,7 +1916,7 @@ private CharSequence mysql_AlterTable_1to1_1toN_RefMapper(final Entity alterTbl, _builder.append(_plus_1); } } - _builder.append(") REFERENCES public."); + _builder.append(") REFERENCES "); String _lowerCase_4 = alterTbl.getName().toLowerCase(); _builder.append(_lowerCase_4); _builder.append(" ("); @@ -1465,7 +1944,7 @@ private CharSequence mysql_AlterTable_1to1_1toN_RefMapper(final Entity alterTbl, _builder.append(cardinalityRel); _builder.append(": Self-relation WITHOUT generalization"); _builder.newLineIfNotEmpty(); - _builder.append("ALTER TABLE ONLY public."); + _builder.append("ALTER TABLE "); String _lowerCase_6 = alterTbl.getName().toLowerCase(); _builder.append(_lowerCase_6); _builder.append(" ADD CONSTRAINT fk_"); @@ -1491,7 +1970,7 @@ private CharSequence mysql_AlterTable_1to1_1toN_RefMapper(final Entity alterTbl, _builder.append(_plus_3); } } - _builder.append(") REFERENCES public."); + _builder.append(") REFERENCES "); String _lowerCase_10 = refTbl.getName().toLowerCase(); _builder.append(_lowerCase_10); _builder.append(" ("); @@ -1519,7 +1998,7 @@ private CharSequence mysql_AlterTable_1to1_1toN_RefMapper(final Entity alterTbl, _builder.append(cardinalityRel); _builder.append(": Relationship with ONE ENTITY that HAS GENERALIZATION"); _builder.newLineIfNotEmpty(); - _builder.append("ALTER TABLE ONLY public."); + _builder.append("ALTER TABLE "); String _lowerCase_12 = alterTbl.getName().toLowerCase(); _builder.append(_lowerCase_12); _builder.append(" ADD CONSTRAINT fk_"); @@ -1545,7 +2024,7 @@ private CharSequence mysql_AlterTable_1to1_1toN_RefMapper(final Entity alterTbl, _builder.append(_plus_5); } } - _builder.append(") REFERENCES public."); + _builder.append(") REFERENCES "); String _lowerCase_16 = refTbl.getName().toLowerCase(); _builder.append(_lowerCase_16); _builder.append(" ("); @@ -1573,7 +2052,7 @@ private CharSequence mysql_AlterTable_1to1_1toN_RefMapper(final Entity alterTbl, _builder.append(cardinalityRel); _builder.append(": Relationship in which BOTH ENTITIES have NO GENERALIZATION"); _builder.newLineIfNotEmpty(); - _builder.append("ALTER TABLE ONLY public."); + _builder.append("ALTER TABLE "); String _lowerCase_18 = alterTbl.getName().toLowerCase(); _builder.append(_lowerCase_18); _builder.append(" ADD CONSTRAINT fk_"); @@ -1599,7 +2078,7 @@ private CharSequence mysql_AlterTable_1to1_1toN_RefMapper(final Entity alterTbl, _builder.append(_plus_7); } } - _builder.append(") REFERENCES public."); + _builder.append(") REFERENCES "); String _lowerCase_22 = refTbl.getName().toLowerCase(); _builder.append(_lowerCase_22); _builder.append(" ("); @@ -1626,7 +2105,6 @@ private CharSequence mysql_AlterTable_1to1_1toN_RefMapper(final Entity alterTbl, } } } - _builder.newLine(); return _builder; } @@ -1638,7 +2116,7 @@ private CharSequence mysql_AlterTable_NtoN_RefMapper(final Entity leftEnt, final _builder.append(cardinalityRel); _builder.append(": Self-relation WITH generalization"); _builder.newLineIfNotEmpty(); - _builder.append("ALTER TABLE ONLY public."); + _builder.append("ALTER TABLE "); String _lowerCase = r.getName().toLowerCase(); _builder.append(_lowerCase); _builder.append(" ADD CONSTRAINT fk_"); @@ -1668,7 +2146,7 @@ private CharSequence mysql_AlterTable_NtoN_RefMapper(final Entity leftEnt, final _builder.append(_plus_4); } } - _builder.append(") REFERENCES public."); + _builder.append(") REFERENCES "); String _lowerCase_5 = leftEnt.getName().toLowerCase(); _builder.append(_lowerCase_5); _builder.append(" ("); @@ -1690,8 +2168,7 @@ private CharSequence mysql_AlterTable_NtoN_RefMapper(final Entity leftEnt, final } _builder.append(");"); _builder.newLineIfNotEmpty(); - _builder.newLine(); - _builder.append("ALTER TABLE ONLY public."); + _builder.append("ALTER TABLE "); String _lowerCase_7 = r.getName().toLowerCase(); _builder.append(_lowerCase_7); _builder.append(" ADD CONSTRAINT fk_"); @@ -1721,7 +2198,7 @@ private CharSequence mysql_AlterTable_NtoN_RefMapper(final Entity leftEnt, final _builder.append(_plus_9); } } - _builder.append(") REFERENCES public."); + _builder.append(") REFERENCES "); String _lowerCase_12 = rightEnt.getName().toLowerCase(); _builder.append(_lowerCase_12); _builder.append(" ("); @@ -1749,7 +2226,7 @@ private CharSequence mysql_AlterTable_NtoN_RefMapper(final Entity leftEnt, final _builder.append(cardinalityRel); _builder.append(": Self-relation WITHOUT generalization"); _builder.newLineIfNotEmpty(); - _builder.append("ALTER TABLE ONLY public."); + _builder.append("ALTER TABLE "); String _lowerCase_14 = r.getName().toLowerCase(); _builder.append(_lowerCase_14); _builder.append(" ADD CONSTRAINT fk_"); @@ -1779,7 +2256,7 @@ private CharSequence mysql_AlterTable_NtoN_RefMapper(final Entity leftEnt, final _builder.append(_plus_14); } } - _builder.append(") REFERENCES public."); + _builder.append(") REFERENCES "); String _lowerCase_19 = leftEnt.getName().toLowerCase(); _builder.append(_lowerCase_19); _builder.append(" ("); @@ -1801,8 +2278,7 @@ private CharSequence mysql_AlterTable_NtoN_RefMapper(final Entity leftEnt, final } _builder.append(");"); _builder.newLineIfNotEmpty(); - _builder.newLine(); - _builder.append("ALTER TABLE ONLY public."); + _builder.append("ALTER TABLE "); String _lowerCase_21 = r.getName().toLowerCase(); _builder.append(_lowerCase_21); _builder.append(" ADD CONSTRAINT fk_"); @@ -1832,7 +2308,7 @@ private CharSequence mysql_AlterTable_NtoN_RefMapper(final Entity leftEnt, final _builder.append(_plus_19); } } - _builder.append(") REFERENCES public."); + _builder.append(") REFERENCES "); String _lowerCase_26 = rightEnt.getName().toLowerCase(); _builder.append(_lowerCase_26); _builder.append(" ("); @@ -1860,7 +2336,7 @@ private CharSequence mysql_AlterTable_NtoN_RefMapper(final Entity leftEnt, final _builder.append(cardinalityRel); _builder.append(": Relationship with ONE ENTITY that HAS GENERALIZATION"); _builder.newLineIfNotEmpty(); - _builder.append("ALTER TABLE ONLY public."); + _builder.append("ALTER TABLE "); String _lowerCase_28 = r.getName().toLowerCase(); _builder.append(_lowerCase_28); _builder.append(" ADD CONSTRAINT fk_"); @@ -1889,7 +2365,7 @@ private CharSequence mysql_AlterTable_NtoN_RefMapper(final Entity leftEnt, final _builder.append(_plus_23); } } - _builder.append(") REFERENCES public."); + _builder.append(") REFERENCES "); String _lowerCase_33 = leftEnt.getName().toLowerCase(); _builder.append(_lowerCase_33); _builder.append(" ("); @@ -1917,7 +2393,7 @@ private CharSequence mysql_AlterTable_NtoN_RefMapper(final Entity leftEnt, final _builder.append(cardinalityRel); _builder.append(": Relationship in which BOTH ENTITIES have NO GENERALIZATION"); _builder.newLineIfNotEmpty(); - _builder.append("ALTER TABLE ONLY public."); + _builder.append("ALTER TABLE "); String _lowerCase_35 = r.getName().toLowerCase(); _builder.append(_lowerCase_35); _builder.append(" ADD CONSTRAINT fk_"); @@ -1946,7 +2422,7 @@ private CharSequence mysql_AlterTable_NtoN_RefMapper(final Entity leftEnt, final _builder.append(_plus_27); } } - _builder.append(") REFERENCES public."); + _builder.append(") REFERENCES "); String _lowerCase_40 = leftEnt.getName().toLowerCase(); _builder.append(_lowerCase_40); _builder.append(" ("); @@ -1973,7 +2449,120 @@ private CharSequence mysql_AlterTable_NtoN_RefMapper(final Entity leftEnt, final } } } + return _builder; + } + + private CharSequence mysql_AlterTable_Ternary_RefMapper(final String tabelaTernaria, final String tabelaEntidade, final String nomeRelacaoNN, final String leftNN, final String rightNN, final HashMap keysMap) { + StringConcatenation _builder = new StringConcatenation(); + _builder.append("-- [Ternary Relationship]"); _builder.newLine(); + _builder.append("ALTER TABLE "); + _builder.append(tabelaTernaria); + _builder.append(" ADD CONSTRAINT fk_"); + String _lowerCase = tabelaEntidade.toLowerCase(); + String _plus = ((tabelaTernaria + "_") + _lowerCase); + _builder.append(_plus); + _builder.append(" FOREIGN KEY ("); + { + ArrayList _get = this.mapTernary.get(tabelaEntidade); + boolean _hasElements = false; + for(final Object e : _get) { + if (!_hasElements) { + _hasElements = true; + } else { + _builder.appendImmediate(", ", ""); + } + String _lowerCase_1 = tabelaEntidade.toString().toLowerCase(); + String _plus_1 = (_lowerCase_1 + "_"); + String _string = e.toString(); + String _plus_2 = (_plus_1 + _string); + _builder.append(_plus_2); + } + } + _builder.append(") REFERENCES "); + _builder.append(tabelaEntidade); + _builder.append(" ("); + { + ArrayList _get_1 = this.mapTernary.get(tabelaEntidade); + boolean _hasElements_1 = false; + for(final Object e_1 : _get_1) { + if (!_hasElements_1) { + _hasElements_1 = true; + } else { + _builder.appendImmediate(", ", ""); + } + String _string_1 = e_1.toString(); + _builder.append(_string_1); + } + } + _builder.append(");"); + _builder.newLineIfNotEmpty(); + _builder.append("ALTER TABLE "); + _builder.append(tabelaTernaria); + _builder.append(" ADD CONSTRAINT fk_"); + String _lowerCase_2 = nomeRelacaoNN.toLowerCase(); + String _plus_3 = ((tabelaTernaria + "_") + _lowerCase_2); + _builder.append(_plus_3); + _builder.append(" FOREIGN KEY ("); + { + ArrayList _get_2 = this.mapTernary.get(leftNN); + boolean _hasElements_2 = false; + for(final Object e_2 : _get_2) { + if (!_hasElements_2) { + _hasElements_2 = true; + } else { + _builder.appendImmediate(", ", ""); + } + String _string_2 = e_2.toString(); + _builder.append(_string_2); + } + } + _builder.append(", "); + { + ArrayList _get_3 = this.mapTernary.get(rightNN); + boolean _hasElements_3 = false; + for(final Object e_3 : _get_3) { + if (!_hasElements_3) { + _hasElements_3 = true; + } else { + _builder.appendImmediate(", ", ""); + } + String _string_3 = e_3.toString(); + _builder.append(_string_3); + } + } + _builder.append(") REFERENCES "); + _builder.append(nomeRelacaoNN); + _builder.append(" ("); + { + ArrayList _get_4 = this.mapTernary.get(leftNN); + boolean _hasElements_4 = false; + for(final Object e_4 : _get_4) { + if (!_hasElements_4) { + _hasElements_4 = true; + } else { + _builder.appendImmediate(", ", ""); + } + String _string_4 = e_4.toString(); + _builder.append(_string_4); + } + } + _builder.append(", "); + { + ArrayList _get_5 = this.mapTernary.get(rightNN); + boolean _hasElements_5 = false; + for(final Object e_5 : _get_5) { + if (!_hasElements_5) { + _hasElements_5 = true; + } else { + _builder.appendImmediate(", ", ""); + } + String _string_5 = e_5.toString(); + _builder.append(_string_5); + } + } + _builder.append(");"); + _builder.newLineIfNotEmpty(); return _builder; } } diff --git a/org.xtext.unipampa.erdsl/xtend-gen/org/xtext/unipampa/erdsl/generator/PlantUmlFileGenerator.java b/org.xtext.unipampa.erdsl/xtend-gen/org/xtext/unipampa/erdsl/generator/PlantUmlFileGenerator.java index 3454c88..a6c6597 100644 --- a/org.xtext.unipampa.erdsl/xtend-gen/org/xtext/unipampa/erdsl/generator/PlantUmlFileGenerator.java +++ b/org.xtext.unipampa.erdsl/xtend-gen/org/xtext/unipampa/erdsl/generator/PlantUmlFileGenerator.java @@ -36,12 +36,18 @@ public void doGenerate(final Resource input, final IFileSystemAccess2 fsa, final if ((fsa instanceof IFileSystemAccessExtension3)) { final ByteArrayOutputStream out = new ByteArrayOutputStream(); new SourceStringReader(plantUML).generateImage(out); + String _lowerCase = modeloER.getDomain().getName().toLowerCase(); + String _plus = (_lowerCase + "_Diagram.png"); byte[] _byteArray = out.toByteArray(); ByteArrayInputStream _byteArrayInputStream = new ByteArrayInputStream(_byteArray); - ((IFileSystemAccessExtension3) fsa).generateFile("Diagram_(Conceptual_Model).png", _byteArrayInputStream); - fsa.generateFile("Diagram_DescriptorGenerated.puml", plantUML); + ((IFileSystemAccessExtension3) fsa).generateFile(_plus, _byteArrayInputStream); + String _lowerCase_1 = modeloER.getDomain().getName().toLowerCase(); + String _plus_1 = (_lowerCase_1 + "_DiagramDesc_Gen.puml"); + fsa.generateFile(_plus_1, plantUML); } else { - fsa.generateFile("Diagram_ParcialDescriptorGenerated.puml", plantUML); + String _lowerCase_2 = modeloER.getDomain().getName().toLowerCase(); + String _plus_2 = (_lowerCase_2 + "_DiagramDesc_PartialGen.puml"); + fsa.generateFile(_plus_2, plantUML); } } } @@ -213,7 +219,7 @@ private CharSequence _plotToPlantUML(final Relation it) { String _lowerCase_6 = it.getRightEnding().getTarget().toString().toLowerCase(); _builder.append(_lowerCase_6); _builder.newLineIfNotEmpty(); - _builder.append("note \"Ternary\\n Entity\" as N_"); + _builder.append("note \"Ternary\\n Relationship\" as N_"); String _lowerCase_7 = it.getLeftEnding().getTarget().toString().toLowerCase(); _builder.append(_lowerCase_7); _builder.append("_dmd"); @@ -239,7 +245,7 @@ private CharSequence _plotToPlantUML(final Relation it) { _builder.append(_lowerCase_11); _builder.append("_dmd"); _builder.newLineIfNotEmpty(); - _builder.append("note \"Ternary\\n Entity\" as N_"); + _builder.append("note \"Ternary\\n Relationship\" as N_"); String _lowerCase_12 = it.getRightEnding().getTarget().toString().toLowerCase(); _builder.append(_lowerCase_12); _builder.append("_dmd"); diff --git a/org.xtext.unipampa.erdsl/xtend-gen/org/xtext/unipampa/erdsl/generator/PostgresqlFileGenerator.java b/org.xtext.unipampa.erdsl/xtend-gen/org/xtext/unipampa/erdsl/generator/PostgresqlFileGenerator.java index e5598cf..9587c5f 100644 --- a/org.xtext.unipampa.erdsl/xtend-gen/org/xtext/unipampa/erdsl/generator/PostgresqlFileGenerator.java +++ b/org.xtext.unipampa.erdsl/xtend-gen/org/xtext/unipampa/erdsl/generator/PostgresqlFileGenerator.java @@ -1,6 +1,7 @@ package org.xtext.unipampa.erdsl.generator; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.ecore.EObject; @@ -39,6 +40,10 @@ public class PostgresqlFileGenerator extends AbstractGenerator { private ArrayList primaryKeys_NtoN = new ArrayList(); + private ArrayList primaryKeys_Ternary = new ArrayList(); + + private HashMap mapTernary = new HashMap(); + private StringBuilder sc_AlterTbl_1to1 = new StringBuilder(); private StringBuilder sc_AlterTbl_1toN = new StringBuilder(); @@ -52,7 +57,9 @@ public void doGenerate(final Resource input, final IFileSystemAccess2 fsa, final EObject _get = input.getContents().get(0); final ERModel modeloER = ((ERModel) _get); try { - fsa.generateFile("PgSQL_DDL.sql", this.pgsql_CreateModel(modeloER)); + String _lowerCase = modeloER.getDomain().getName().toLowerCase(); + String _plus = (_lowerCase + "_Postgre.sql"); + fsa.generateFile(_plus, this.pgsql_CreateModel(modeloER)); } catch (final Throwable _t) { if (_t instanceof Exception) { final Exception e = (Exception)_t; @@ -65,15 +72,7 @@ public void doGenerate(final Resource input, final IFileSystemAccess2 fsa, final private CharSequence pgsql_CreateModel(final ERModel modeloER) { StringConcatenation _builder = new StringConcatenation(); - _builder.append("-- ####################################################"); - _builder.newLine(); - _builder.append("-- #\t\t\t\tPostGreSQL Template \t\t\t #"); - _builder.newLine(); - _builder.append("-- ####################################################"); - _builder.newLine(); - _builder.append("-- #\t\t\t\tGenerated by ERtext \t\t\t #"); - _builder.newLine(); - _builder.append("-- ####################################################"); + _builder.append("-- PostGreSQL Template generated by ERtext"); _builder.newLine(); _builder.newLine(); CharSequence _pgsql_DomainMapper = this.pgsql_DomainMapper(modeloER); @@ -124,17 +123,13 @@ private CharSequence pgsql_DomainMapper(final ERModel m) { _builder.append("-- Database: "); String _upperCase = m.getDomain().getName().toString().toUpperCase(); _builder.append(_upperCase); + _builder.append(";"); _builder.newLineIfNotEmpty(); - _builder.append("-- DROP DATABASE "); + _builder.append("-- CREATE DATABASE "); String _upperCase_1 = m.getDomain().getName().toString().toUpperCase(); _builder.append(_upperCase_1); _builder.append(";"); _builder.newLineIfNotEmpty(); - _builder.append("-- CREATE DATABASE "); - String _upperCase_2 = m.getDomain().getName().toString().toUpperCase(); - _builder.append(_upperCase_2); - _builder.append("»"); - _builder.newLineIfNotEmpty(); _builder.append("-- WITH OWNER = postgres"); _builder.newLine(); _builder.append("-- ENCODING = \'UTF8\'"); @@ -143,8 +138,13 @@ private CharSequence pgsql_DomainMapper(final ERModel m) { _builder.newLine(); _builder.append("-- CONNECTION LIMIT = -1;"); _builder.newLine(); + _builder.append("-- DROP DATABASE "); + String _upperCase_2 = m.getDomain().getName().toString().toUpperCase(); + _builder.append(_upperCase_2); + _builder.append(";"); + _builder.newLineIfNotEmpty(); _builder.newLine(); - _builder.append("--DROP TABLE IF EXISTS "); + _builder.append("-- DROP TABLE IF EXISTS "); _builder.newLine(); _builder.append("-- "); { @@ -1335,18 +1335,534 @@ private CharSequence pgsql_NToN_DerivedEntitiesMapper(final ERModel m) { private CharSequence pgsql_TernaryEntitiesMapper(final ERModel model) { StringConcatenation _builder = new StringConcatenation(); - _builder.append("-- #######################################################"); - _builder.newLine(); - _builder.append("-- #TODO: auto-generated method stub for Ternary Entities#"); - _builder.newLine(); - _builder.append("-- #######################################################"); - _builder.newLine(); + { + final Function1 _function = (Relation i) -> { + return Boolean.valueOf(((i.getLeftEnding().getTarget() instanceof Relation) && (i.getRightEnding().getTarget() instanceof Entity))); + }; + Iterable _filter = IterableExtensions.filter(model.getRelations(), _function); + for(final Relation r : _filter) { + EObject _target = r.getLeftEnding().getTarget(); + Relation auxRel = ((Relation) _target); + _builder.newLineIfNotEmpty(); + EObject _target_1 = r.getRightEnding().getTarget(); + Entity auxEnt = ((Entity) _target_1); + _builder.newLineIfNotEmpty(); + EObject _target_2 = auxRel.getLeftEnding().getTarget(); + Entity auxLeftEntity = ((Entity) _target_2); + _builder.newLineIfNotEmpty(); + EObject _target_3 = auxRel.getRightEnding().getTarget(); + Entity auxRightEntity = ((Entity) _target_3); + _builder.newLineIfNotEmpty(); + _builder.append("-- Table: "); + String _upperCase = r.getName().toUpperCase(); + _builder.append(_upperCase); + _builder.newLineIfNotEmpty(); + _builder.append("-- DROP TABLE "); + String _upperCase_1 = r.getName().toUpperCase(); + _builder.append(_upperCase_1); + _builder.append(";\t"); + _builder.newLineIfNotEmpty(); + _builder.append("CREATE TABLE IF NOT EXISTS "); + String _lowerCase = r.getName().toLowerCase(); + _builder.append(_lowerCase); + _builder.append(" ("); + _builder.newLineIfNotEmpty(); + { + final Function1 _function_1 = (Attribute it) -> { + return Boolean.valueOf(it.isIsKey()); + }; + Iterable _filter_1 = IterableExtensions.filter(auxEnt.getAttributes(), _function_1); + for(final Attribute att : _filter_1) { + _builder.append("\t"); + String _lowerCase_1 = auxEnt.getName().toLowerCase(); + String _plus = (_lowerCase_1 + "_"); + CharSequence _pgsql_AttTypeChecker = this.pgsql_AttTypeChecker(att); + String _plus_1 = (_plus + _pgsql_AttTypeChecker); + _builder.append(_plus_1); + _builder.newLineIfNotEmpty(); + } + } + { + final Function1 _function_2 = (Attribute it) -> { + return Boolean.valueOf(it.isIsKey()); + }; + Iterable _filter_2 = IterableExtensions.filter(auxLeftEntity.getAttributes(), _function_2); + for(final Attribute att_1 : _filter_2) { + _builder.append("\t"); + String _lowerCase_2 = auxLeftEntity.getName().toLowerCase(); + String _plus_2 = (_lowerCase_2 + "_"); + CharSequence _pgsql_AttTypeChecker_1 = this.pgsql_AttTypeChecker(att_1); + String _plus_3 = (_plus_2 + _pgsql_AttTypeChecker_1); + _builder.append(_plus_3); + _builder.newLineIfNotEmpty(); + } + } + { + final Function1 _function_3 = (Attribute it) -> { + return Boolean.valueOf(it.isIsKey()); + }; + Iterable _filter_3 = IterableExtensions.filter(auxRightEntity.getAttributes(), _function_3); + for(final Attribute att_2 : _filter_3) { + _builder.append("\t"); + String _lowerCase_3 = auxRightEntity.getName().toLowerCase(); + String _plus_4 = (_lowerCase_3 + "_"); + CharSequence _pgsql_AttTypeChecker_2 = this.pgsql_AttTypeChecker(att_2); + String _plus_5 = (_plus_4 + _pgsql_AttTypeChecker_2); + _builder.append(_plus_5); + _builder.newLineIfNotEmpty(); + } + } + { + EList _attributes = r.getAttributes(); + boolean _tripleNotEquals = (_attributes != null); + if (_tripleNotEquals) { + { + EList _attributes_1 = r.getAttributes(); + for(final Attribute att_3 : _attributes_1) { + _builder.append("\t"); + CharSequence _pgsql_AttTypeChecker_3 = this.pgsql_AttTypeChecker(att_3); + _builder.append(_pgsql_AttTypeChecker_3); + { + boolean _isIsKey = att_3.isIsKey(); + if (_isIsKey) { + Object _xblockexpression = null; + { + this.primaryKeys_Ternary.add(att_3.getName().toLowerCase()); + _xblockexpression = null; + } + _builder.append(_xblockexpression); + } + } + _builder.newLineIfNotEmpty(); + } + } + } + } + Object _xblockexpression_1 = null; + { + String _name = auxEnt.getName(); + ArrayList _arrayList = new ArrayList(); + this.mapTernary.put(_name, _arrayList); + _xblockexpression_1 = null; + } + _builder.append(_xblockexpression_1); + _builder.newLineIfNotEmpty(); + { + final Function1 _function_4 = (Attribute it) -> { + return Boolean.valueOf(it.isIsKey()); + }; + Iterable _filter_4 = IterableExtensions.filter(auxEnt.getAttributes(), _function_4); + for(final Attribute att_4 : _filter_4) { + Object _xblockexpression_2 = null; + { + String _lowerCase_4 = auxEnt.getName().toLowerCase(); + String _plus_6 = (_lowerCase_4 + "_"); + String _string = att_4.getName().toString(); + String _plus_7 = (_plus_6 + _string); + this.primaryKeys_Ternary.add(_plus_7); + _xblockexpression_2 = null; + } + _builder.append(_xblockexpression_2); + _builder.newLineIfNotEmpty(); + Object _xblockexpression_3 = null; + { + this.mapTernary.get(auxEnt.getName()).add(att_4.getName().toString().toLowerCase()); + _xblockexpression_3 = null; + } + _builder.append(_xblockexpression_3); + _builder.newLineIfNotEmpty(); + } + } + Object _xblockexpression_4 = null; + { + String _name = auxLeftEntity.getName(); + ArrayList _arrayList = new ArrayList(); + this.mapTernary.put(_name, _arrayList); + _xblockexpression_4 = null; + } + _builder.append(_xblockexpression_4); + _builder.newLineIfNotEmpty(); + { + final Function1 _function_5 = (Attribute it) -> { + return Boolean.valueOf(it.isIsKey()); + }; + Iterable _filter_5 = IterableExtensions.filter(auxLeftEntity.getAttributes(), _function_5); + for(final Attribute att_5 : _filter_5) { + Object _xblockexpression_5 = null; + { + String _lowerCase_4 = auxLeftEntity.getName().toLowerCase(); + String _plus_6 = (_lowerCase_4 + "_"); + String _lowerCase_5 = att_5.getName().toString().toLowerCase(); + String _plus_7 = (_plus_6 + _lowerCase_5); + this.primaryKeys_Ternary.add(_plus_7); + _xblockexpression_5 = null; + } + _builder.append(_xblockexpression_5); + _builder.newLineIfNotEmpty(); + Object _xblockexpression_6 = null; + { + ArrayList _get = this.mapTernary.get(auxLeftEntity.getName()); + String _lowerCase_4 = auxLeftEntity.getName().toLowerCase(); + String _plus_6 = (_lowerCase_4 + "_"); + String _lowerCase_5 = att_5.getName().toString().toLowerCase(); + String _plus_7 = (_plus_6 + _lowerCase_5); + _get.add(_plus_7); + _xblockexpression_6 = null; + } + _builder.append(_xblockexpression_6); + _builder.newLineIfNotEmpty(); + } + } + Object _xblockexpression_7 = null; + { + String _name = auxRightEntity.getName(); + ArrayList _arrayList = new ArrayList(); + this.mapTernary.put(_name, _arrayList); + _xblockexpression_7 = null; + } + _builder.append(_xblockexpression_7); + _builder.newLineIfNotEmpty(); + { + final Function1 _function_6 = (Attribute it) -> { + return Boolean.valueOf(it.isIsKey()); + }; + Iterable _filter_6 = IterableExtensions.filter(auxRightEntity.getAttributes(), _function_6); + for(final Attribute att_6 : _filter_6) { + Object _xblockexpression_8 = null; + { + String _lowerCase_4 = auxRightEntity.getName().toLowerCase(); + String _plus_6 = (_lowerCase_4 + "_"); + String _lowerCase_5 = att_6.getName().toString().toLowerCase(); + String _plus_7 = (_plus_6 + _lowerCase_5); + this.primaryKeys_Ternary.add(_plus_7); + _xblockexpression_8 = null; + } + _builder.append(_xblockexpression_8); + _builder.newLineIfNotEmpty(); + Object _xblockexpression_9 = null; + { + ArrayList _get = this.mapTernary.get(auxRightEntity.getName()); + String _lowerCase_4 = auxRightEntity.getName().toLowerCase(); + String _plus_6 = (_lowerCase_4 + "_"); + String _lowerCase_5 = att_6.getName().toString().toLowerCase(); + String _plus_7 = (_plus_6 + _lowerCase_5); + _get.add(_plus_7); + _xblockexpression_9 = null; + } + _builder.append(_xblockexpression_9); + _builder.newLineIfNotEmpty(); + } + } + _builder.append("\t"); + _builder.append("CONSTRAINT pk_"); + String _lowerCase_4 = r.getName().toLowerCase(); + _builder.append(_lowerCase_4, "\t"); + _builder.append(" PRIMARY KEY ("); + { + boolean _hasElements = false; + for(final Object pk : this.primaryKeys_Ternary) { + if (!_hasElements) { + _hasElements = true; + } else { + _builder.appendImmediate(", ", "\t"); + } + String _string = pk.toString(); + _builder.append(_string, "\t"); + } + } + _builder.append(") "); + Object _xblockexpression_10 = null; + { + this.primaryKeys_Ternary.clear(); + _xblockexpression_10 = null; + } + _builder.append(_xblockexpression_10, "\t"); + _builder.newLineIfNotEmpty(); + _builder.append("\t"); + Object _xblockexpression_11 = null; + { + this.sc_AlterTbl_1toN.append(this.pgsql_AlterTable_Ternary_RefMapper(r.getName(), auxEnt.getName(), auxRel.getName(), auxLeftEntity.getName(), auxRightEntity.getName(), this.mapTernary)); + _xblockexpression_11 = null; + } + _builder.append(_xblockexpression_11, "\t"); + Object _xblockexpression_12 = null; + { + this.mapTernary.clear(); + _xblockexpression_12 = null; + } + _builder.append(_xblockexpression_12, "\t"); + _builder.newLineIfNotEmpty(); + _builder.append(");"); + _builder.newLine(); + _builder.newLine(); + } + } + { + final Function1 _function_7 = (Relation i) -> { + return Boolean.valueOf(((i.getLeftEnding().getTarget() instanceof Entity) && (i.getRightEnding().getTarget() instanceof Relation))); + }; + Iterable _filter_7 = IterableExtensions.filter(model.getRelations(), _function_7); + for(final Relation r_1 : _filter_7) { + EObject _target_4 = r_1.getLeftEnding().getTarget(); + Entity auxEnt_1 = ((Entity) _target_4); + _builder.newLineIfNotEmpty(); + EObject _target_5 = r_1.getRightEnding().getTarget(); + Relation auxRel_1 = ((Relation) _target_5); + _builder.newLineIfNotEmpty(); + EObject _target_6 = auxRel_1.getLeftEnding().getTarget(); + Entity auxLeftEntity_1 = ((Entity) _target_6); + _builder.newLineIfNotEmpty(); + EObject _target_7 = auxRel_1.getRightEnding().getTarget(); + Entity auxRightEntity_1 = ((Entity) _target_7); + _builder.newLineIfNotEmpty(); + _builder.append("-- Table: "); + String _upperCase_2 = r_1.getName().toUpperCase(); + _builder.append(_upperCase_2); + _builder.newLineIfNotEmpty(); + _builder.append("-- DROP TABLE "); + String _upperCase_3 = r_1.getName().toUpperCase(); + _builder.append(_upperCase_3); + _builder.append(";\t"); + _builder.newLineIfNotEmpty(); + _builder.append("CREATE TABLE IF NOT EXISTS "); + String _lowerCase_5 = r_1.getName().toLowerCase(); + _builder.append(_lowerCase_5); + _builder.append(" ("); + _builder.newLineIfNotEmpty(); + { + final Function1 _function_8 = (Attribute it) -> { + return Boolean.valueOf(it.isIsKey()); + }; + Iterable _filter_8 = IterableExtensions.filter(auxEnt_1.getAttributes(), _function_8); + for(final Attribute att_7 : _filter_8) { + _builder.append("\t"); + String _lowerCase_6 = auxEnt_1.getName().toLowerCase(); + String _plus_6 = (_lowerCase_6 + "_"); + CharSequence _pgsql_AttTypeChecker_4 = this.pgsql_AttTypeChecker(att_7); + String _plus_7 = (_plus_6 + _pgsql_AttTypeChecker_4); + _builder.append(_plus_7); + _builder.newLineIfNotEmpty(); + } + } + { + final Function1 _function_9 = (Attribute it) -> { + return Boolean.valueOf(it.isIsKey()); + }; + Iterable _filter_9 = IterableExtensions.filter(auxLeftEntity_1.getAttributes(), _function_9); + for(final Attribute att_8 : _filter_9) { + _builder.append("\t"); + String _lowerCase_7 = auxLeftEntity_1.getName().toLowerCase(); + String _plus_8 = (_lowerCase_7 + "_"); + CharSequence _pgsql_AttTypeChecker_5 = this.pgsql_AttTypeChecker(att_8); + String _plus_9 = (_plus_8 + _pgsql_AttTypeChecker_5); + _builder.append(_plus_9); + _builder.newLineIfNotEmpty(); + } + } + { + final Function1 _function_10 = (Attribute it) -> { + return Boolean.valueOf(it.isIsKey()); + }; + Iterable _filter_10 = IterableExtensions.filter(auxRightEntity_1.getAttributes(), _function_10); + for(final Attribute att_9 : _filter_10) { + _builder.append("\t"); + String _lowerCase_8 = auxRightEntity_1.getName().toLowerCase(); + String _plus_10 = (_lowerCase_8 + "_"); + CharSequence _pgsql_AttTypeChecker_6 = this.pgsql_AttTypeChecker(att_9); + String _plus_11 = (_plus_10 + _pgsql_AttTypeChecker_6); + _builder.append(_plus_11); + _builder.newLineIfNotEmpty(); + } + } + { + EList _attributes_2 = r_1.getAttributes(); + boolean _tripleNotEquals_1 = (_attributes_2 != null); + if (_tripleNotEquals_1) { + { + EList _attributes_3 = r_1.getAttributes(); + for(final Attribute att_10 : _attributes_3) { + _builder.append("\t"); + CharSequence _pgsql_AttTypeChecker_7 = this.pgsql_AttTypeChecker(att_10); + _builder.append(_pgsql_AttTypeChecker_7); + { + boolean _isIsKey_1 = att_10.isIsKey(); + if (_isIsKey_1) { + Object _xblockexpression_13 = null; + { + this.primaryKeys_Ternary.add(att_10.getName().toLowerCase()); + _xblockexpression_13 = null; + } + _builder.append(_xblockexpression_13); + } + } + _builder.newLineIfNotEmpty(); + } + } + } + } + Object _xblockexpression_14 = null; + { + String _name = auxEnt_1.getName(); + ArrayList _arrayList = new ArrayList(); + this.mapTernary.put(_name, _arrayList); + _xblockexpression_14 = null; + } + _builder.append(_xblockexpression_14); + _builder.newLineIfNotEmpty(); + { + final Function1 _function_11 = (Attribute it) -> { + return Boolean.valueOf(it.isIsKey()); + }; + Iterable _filter_11 = IterableExtensions.filter(auxEnt_1.getAttributes(), _function_11); + for(final Attribute att_11 : _filter_11) { + Object _xblockexpression_15 = null; + { + String _lowerCase_9 = auxEnt_1.getName().toLowerCase(); + String _plus_12 = (_lowerCase_9 + "_"); + String _string_1 = att_11.getName().toString(); + String _plus_13 = (_plus_12 + _string_1); + this.primaryKeys_Ternary.add(_plus_13); + _xblockexpression_15 = null; + } + _builder.append(_xblockexpression_15); + _builder.newLineIfNotEmpty(); + Object _xblockexpression_16 = null; + { + this.mapTernary.get(auxEnt_1.getName()).add(att_11.getName().toString().toLowerCase()); + _xblockexpression_16 = null; + } + _builder.append(_xblockexpression_16); + _builder.newLineIfNotEmpty(); + } + } + Object _xblockexpression_17 = null; + { + String _name = auxLeftEntity_1.getName(); + ArrayList _arrayList = new ArrayList(); + this.mapTernary.put(_name, _arrayList); + _xblockexpression_17 = null; + } + _builder.append(_xblockexpression_17); + _builder.newLineIfNotEmpty(); + { + final Function1 _function_12 = (Attribute it) -> { + return Boolean.valueOf(it.isIsKey()); + }; + Iterable _filter_12 = IterableExtensions.filter(auxLeftEntity_1.getAttributes(), _function_12); + for(final Attribute att_12 : _filter_12) { + Object _xblockexpression_18 = null; + { + String _lowerCase_9 = auxLeftEntity_1.getName().toLowerCase(); + String _plus_12 = (_lowerCase_9 + "_"); + String _lowerCase_10 = att_12.getName().toString().toLowerCase(); + String _plus_13 = (_plus_12 + _lowerCase_10); + this.primaryKeys_Ternary.add(_plus_13); + _xblockexpression_18 = null; + } + _builder.append(_xblockexpression_18); + _builder.newLineIfNotEmpty(); + Object _xblockexpression_19 = null; + { + ArrayList _get = this.mapTernary.get(auxLeftEntity_1.getName()); + String _lowerCase_9 = auxLeftEntity_1.getName().toLowerCase(); + String _plus_12 = (_lowerCase_9 + "_"); + String _lowerCase_10 = att_12.getName().toString().toLowerCase(); + String _plus_13 = (_plus_12 + _lowerCase_10); + _get.add(_plus_13); + _xblockexpression_19 = null; + } + _builder.append(_xblockexpression_19); + _builder.newLineIfNotEmpty(); + } + } + Object _xblockexpression_20 = null; + { + String _name = auxRightEntity_1.getName(); + ArrayList _arrayList = new ArrayList(); + this.mapTernary.put(_name, _arrayList); + _xblockexpression_20 = null; + } + _builder.append(_xblockexpression_20); + _builder.newLineIfNotEmpty(); + { + final Function1 _function_13 = (Attribute it) -> { + return Boolean.valueOf(it.isIsKey()); + }; + Iterable _filter_13 = IterableExtensions.filter(auxRightEntity_1.getAttributes(), _function_13); + for(final Attribute att_13 : _filter_13) { + Object _xblockexpression_21 = null; + { + String _lowerCase_9 = auxRightEntity_1.getName().toLowerCase(); + String _plus_12 = (_lowerCase_9 + "_"); + String _lowerCase_10 = att_13.getName().toString().toLowerCase(); + String _plus_13 = (_plus_12 + _lowerCase_10); + this.primaryKeys_Ternary.add(_plus_13); + _xblockexpression_21 = null; + } + _builder.append(_xblockexpression_21); + _builder.newLineIfNotEmpty(); + Object _xblockexpression_22 = null; + { + ArrayList _get = this.mapTernary.get(auxRightEntity_1.getName()); + String _lowerCase_9 = auxRightEntity_1.getName().toLowerCase(); + String _plus_12 = (_lowerCase_9 + "_"); + String _lowerCase_10 = att_13.getName().toString().toLowerCase(); + String _plus_13 = (_plus_12 + _lowerCase_10); + _get.add(_plus_13); + _xblockexpression_22 = null; + } + _builder.append(_xblockexpression_22); + _builder.newLineIfNotEmpty(); + } + } + _builder.append("\t"); + _builder.append("CONSTRAINT pk_"); + String _lowerCase_9 = r_1.getName().toLowerCase(); + _builder.append(_lowerCase_9, "\t"); + _builder.append(" PRIMARY KEY ("); + { + boolean _hasElements_1 = false; + for(final Object pk_1 : this.primaryKeys_Ternary) { + if (!_hasElements_1) { + _hasElements_1 = true; + } else { + _builder.appendImmediate(", ", "\t"); + } + String _string_1 = pk_1.toString(); + _builder.append(_string_1, "\t"); + } + } + _builder.append(") "); + Object _xblockexpression_23 = null; + { + this.primaryKeys_Ternary.clear(); + _xblockexpression_23 = null; + } + _builder.append(_xblockexpression_23, "\t"); + _builder.newLineIfNotEmpty(); + _builder.append("\t"); + Object _xblockexpression_24 = null; + { + this.sc_AlterTbl_1toN.append(this.pgsql_AlterTable_Ternary_RefMapper(r_1.getName(), auxEnt_1.getName(), auxRel_1.getName(), auxLeftEntity_1.getName(), auxRightEntity_1.getName(), this.mapTernary)); + _xblockexpression_24 = null; + } + _builder.append(_xblockexpression_24, "\t"); + Object _xblockexpression_25 = null; + { + this.mapTernary.clear(); + _xblockexpression_25 = null; + } + _builder.append(_xblockexpression_25, "\t"); + _builder.newLineIfNotEmpty(); + _builder.append(");"); + _builder.newLine(); + } + } return _builder; } private CharSequence pgsql_GeneralizationRefMapper(final ERModel m) { StringConcatenation _builder = new StringConcatenation(); - _builder.newLine(); { final Function1 _function = (Entity it) -> { Entity _is = it.getIs(); @@ -1404,8 +1920,6 @@ private CharSequence pgsql_GeneralizationRefMapper(final ERModel m) { } _builder.append(");"); _builder.newLineIfNotEmpty(); - _builder.append("\t\t"); - _builder.newLine(); } } return _builder; @@ -1634,7 +2148,6 @@ private CharSequence pgsql_AlterTable_1to1_1toN_RefMapper(final Entity alterTbl, } } } - _builder.newLine(); return _builder; } @@ -1698,7 +2211,6 @@ private CharSequence pgsql_AlterTable_NtoN_RefMapper(final Entity leftEnt, final } _builder.append(");"); _builder.newLineIfNotEmpty(); - _builder.newLine(); _builder.append("ALTER TABLE ONLY public."); String _lowerCase_7 = r.getName().toLowerCase(); _builder.append(_lowerCase_7); @@ -1809,7 +2321,6 @@ private CharSequence pgsql_AlterTable_NtoN_RefMapper(final Entity leftEnt, final } _builder.append(");"); _builder.newLineIfNotEmpty(); - _builder.newLine(); _builder.append("ALTER TABLE ONLY public."); String _lowerCase_21 = r.getName().toLowerCase(); _builder.append(_lowerCase_21); @@ -1981,7 +2492,120 @@ private CharSequence pgsql_AlterTable_NtoN_RefMapper(final Entity leftEnt, final } } } + return _builder; + } + + private CharSequence pgsql_AlterTable_Ternary_RefMapper(final String tabelaTernaria, final String tabelaEntidade, final String nomeRelacaoNN, final String leftNN, final String rightNN, final HashMap keysMap) { + StringConcatenation _builder = new StringConcatenation(); + _builder.append("-- [Ternary Relationship]"); _builder.newLine(); + _builder.append("ALTER TABLE ONLY public."); + _builder.append(tabelaTernaria); + _builder.append(" ADD CONSTRAINT fk_"); + String _lowerCase = tabelaEntidade.toLowerCase(); + String _plus = ((tabelaTernaria + "_") + _lowerCase); + _builder.append(_plus); + _builder.append(" FOREIGN KEY ("); + { + ArrayList _get = this.mapTernary.get(tabelaEntidade); + boolean _hasElements = false; + for(final Object e : _get) { + if (!_hasElements) { + _hasElements = true; + } else { + _builder.appendImmediate(", ", ""); + } + String _lowerCase_1 = tabelaEntidade.toString().toLowerCase(); + String _plus_1 = (_lowerCase_1 + "_"); + String _string = e.toString(); + String _plus_2 = (_plus_1 + _string); + _builder.append(_plus_2); + } + } + _builder.append(") REFERENCES public."); + _builder.append(tabelaEntidade); + _builder.append(" ("); + { + ArrayList _get_1 = this.mapTernary.get(tabelaEntidade); + boolean _hasElements_1 = false; + for(final Object e_1 : _get_1) { + if (!_hasElements_1) { + _hasElements_1 = true; + } else { + _builder.appendImmediate(", ", ""); + } + String _string_1 = e_1.toString(); + _builder.append(_string_1); + } + } + _builder.append(");"); + _builder.newLineIfNotEmpty(); + _builder.append("ALTER TABLE ONLY public."); + _builder.append(tabelaTernaria); + _builder.append(" ADD CONSTRAINT fk_"); + String _lowerCase_2 = nomeRelacaoNN.toLowerCase(); + String _plus_3 = ((tabelaTernaria + "_") + _lowerCase_2); + _builder.append(_plus_3); + _builder.append(" FOREIGN KEY ("); + { + ArrayList _get_2 = this.mapTernary.get(leftNN); + boolean _hasElements_2 = false; + for(final Object e_2 : _get_2) { + if (!_hasElements_2) { + _hasElements_2 = true; + } else { + _builder.appendImmediate(", ", ""); + } + String _string_2 = e_2.toString(); + _builder.append(_string_2); + } + } + _builder.append(", "); + { + ArrayList _get_3 = this.mapTernary.get(rightNN); + boolean _hasElements_3 = false; + for(final Object e_3 : _get_3) { + if (!_hasElements_3) { + _hasElements_3 = true; + } else { + _builder.appendImmediate(", ", ""); + } + String _string_3 = e_3.toString(); + _builder.append(_string_3); + } + } + _builder.append(") REFERENCES public."); + _builder.append(nomeRelacaoNN); + _builder.append(" ("); + { + ArrayList _get_4 = this.mapTernary.get(leftNN); + boolean _hasElements_4 = false; + for(final Object e_4 : _get_4) { + if (!_hasElements_4) { + _hasElements_4 = true; + } else { + _builder.appendImmediate(", ", ""); + } + String _string_4 = e_4.toString(); + _builder.append(_string_4); + } + } + _builder.append(", "); + { + ArrayList _get_5 = this.mapTernary.get(rightNN); + boolean _hasElements_5 = false; + for(final Object e_5 : _get_5) { + if (!_hasElements_5) { + _hasElements_5 = true; + } else { + _builder.appendImmediate(", ", ""); + } + String _string_5 = e_5.toString(); + _builder.append(_string_5); + } + } + _builder.append(");"); + _builder.newLineIfNotEmpty(); return _builder; } } diff --git a/org.xtext.unipampa.erdsl/xtend-gen/org/xtext/unipampa/erdsl/scoping/.ErDslScopeProvider.java._trace b/org.xtext.unipampa.erdsl/xtend-gen/org/xtext/unipampa/erdsl/scoping/.ErDslScopeProvider.java._trace index 178299a..127c18d 100644 Binary files a/org.xtext.unipampa.erdsl/xtend-gen/org/xtext/unipampa/erdsl/scoping/.ErDslScopeProvider.java._trace and b/org.xtext.unipampa.erdsl/xtend-gen/org/xtext/unipampa/erdsl/scoping/.ErDslScopeProvider.java._trace differ diff --git a/org.xtext.unipampa.erdsl/xtend-gen/org/xtext/unipampa/erdsl/scoping/.ErDslScopeProvider.xtendbin b/org.xtext.unipampa.erdsl/xtend-gen/org/xtext/unipampa/erdsl/scoping/.ErDslScopeProvider.xtendbin index d99f9a1..440641e 100644 Binary files a/org.xtext.unipampa.erdsl/xtend-gen/org/xtext/unipampa/erdsl/scoping/.ErDslScopeProvider.xtendbin and b/org.xtext.unipampa.erdsl/xtend-gen/org/xtext/unipampa/erdsl/scoping/.ErDslScopeProvider.xtendbin differ diff --git a/org.xtext.unipampa.erdsl/xtend-gen/org/xtext/unipampa/erdsl/scoping/ErDslScopeProvider.java b/org.xtext.unipampa.erdsl/xtend-gen/org/xtext/unipampa/erdsl/scoping/ErDslScopeProvider.java index d9bae9a..b42a5c9 100644 --- a/org.xtext.unipampa.erdsl/xtend-gen/org/xtext/unipampa/erdsl/scoping/ErDslScopeProvider.java +++ b/org.xtext.unipampa.erdsl/xtend-gen/org/xtext/unipampa/erdsl/scoping/ErDslScopeProvider.java @@ -12,7 +12,6 @@ import org.eclipse.xtext.xbase.lib.IterableExtensions; import org.xtext.unipampa.erdsl.erDsl.ERModel; import org.xtext.unipampa.erdsl.erDsl.Entity; -import org.xtext.unipampa.erdsl.erDsl.Relation; /** * This class contains custom scoping description. @@ -25,18 +24,11 @@ public class ErDslScopeProvider extends AbstractErDslScopeProvider { @Override public IScope getScope(final EObject context, final EReference reference) { if ((context instanceof Entity)) { - if (true) { - } EObject _eContainer = ((Entity)context).eContainer(); final Function1 _function = (Entity x) -> { return Boolean.valueOf((!Objects.equal(x, context))); }; return Scopes.scopeFor(IterableExtensions.filter(((ERModel) _eContainer).getEntities(), _function)); - } else { - if ((context instanceof Relation)) { - if (true) { - } - } } return super.getScope(context, reference); } diff --git a/org.xtext.unipampa.erdsl/xtend-gen/org/xtext/unipampa/erdsl/validation/.ErDslValidator.xtendbin b/org.xtext.unipampa.erdsl/xtend-gen/org/xtext/unipampa/erdsl/validation/.ErDslValidator.xtendbin index 5f8c65c..128aecd 100644 Binary files a/org.xtext.unipampa.erdsl/xtend-gen/org/xtext/unipampa/erdsl/validation/.ErDslValidator.xtendbin and b/org.xtext.unipampa.erdsl/xtend-gen/org/xtext/unipampa/erdsl/validation/.ErDslValidator.xtendbin differ