diff options
Diffstat (limited to 'plugins/org.eclipse.xtend.shared.ui/src/org/eclipse/xtend/shared/ui/wizards/example')
7 files changed, 122 insertions, 0 deletions
diff --git a/plugins/org.eclipse.xtend.shared.ui/src/org/eclipse/xtend/shared/ui/wizards/example/Checks.chk b/plugins/org.eclipse.xtend.shared.ui/src/org/eclipse/xtend/shared/ui/wizards/example/Checks.chk new file mode 100644 index 00000000..768814b2 --- /dev/null +++ b/plugins/org.eclipse.xtend.shared.ui/src/org/eclipse/xtend/shared/ui/wizards/example/Checks.chk @@ -0,0 +1,9 @@ +import metamodel; + +extension metamodel::Extensions; + +context Model ERROR "No entities defined" : + types.exists(e|Entity.isInstance(e)); + +context Entity ERROR "Duplicate entity "+name : + model().entities().select(e|e.name==name).size==1;
\ No newline at end of file diff --git a/plugins/org.eclipse.xtend.shared.ui/src/org/eclipse/xtend/shared/ui/wizards/example/Extensions.ext b/plugins/org.eclipse.xtend.shared.ui/src/org/eclipse/xtend/shared/ui/wizards/example/Extensions.ext new file mode 100644 index 00000000..95ecffc1 --- /dev/null +++ b/plugins/org.eclipse.xtend.shared.ui/src/org/eclipse/xtend/shared/ui/wizards/example/Extensions.ext @@ -0,0 +1,7 @@ +import metamodel; + +Model model(Type this) : + eContainer; + +List[Entity] entities(Model this) : + types.typeSelect(Entity);
\ No newline at end of file diff --git a/plugins/org.eclipse.xtend.shared.ui/src/org/eclipse/xtend/shared/ui/wizards/example/GeneratorExtensions.ext b/plugins/org.eclipse.xtend.shared.ui/src/org/eclipse/xtend/shared/ui/wizards/example/GeneratorExtensions.ext new file mode 100644 index 00000000..79db57c3 --- /dev/null +++ b/plugins/org.eclipse.xtend.shared.ui/src/org/eclipse/xtend/shared/ui/wizards/example/GeneratorExtensions.ext @@ -0,0 +1,10 @@ +import metamodel; + +extension metamodel::Extensions reexport; + +getter(Feature this) : + "get"+name.toFirstUpper(); + +setter(Feature this) : + "set"+name.toFirstUpper(); + diff --git a/plugins/org.eclipse.xtend.shared.ui/src/org/eclipse/xtend/shared/ui/wizards/example/Model.xmi b/plugins/org.eclipse.xtend.shared.ui/src/org/eclipse/xtend/shared/ui/wizards/example/Model.xmi new file mode 100644 index 00000000..da379a88 --- /dev/null +++ b/plugins/org.eclipse.xtend.shared.ui/src/org/eclipse/xtend/shared/ui/wizards/example/Model.xmi @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="ASCII"?> +<metamodel:Model xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:metamodel="http://www.example.org/metamodel" xsi:schemaLocation="http://www.example.org/metamodel metamodel/metamodel.ecore"> + <types xsi:type="metamodel:Datatype" name="String"/> + <types xsi:type="metamodel:Datatype" name="Integer"/> + <types xsi:type="metamodel:Entity" name="Person"> + <features name="name" type="//@types.0"/> + <features name="age" type="//@types.1"/> + <features name="address" type="//@types.3"/> + </types> + <types xsi:type="metamodel:Entity" name="Address"> + <features name="street" type="//@types.0"/> + <features name="zip" type="//@types.0"/> + <features name="city" type="//@types.0"/> + </types> +</metamodel:Model> diff --git a/plugins/org.eclipse.xtend.shared.ui/src/org/eclipse/xtend/shared/ui/wizards/example/Template.xpt b/plugins/org.eclipse.xtend.shared.ui/src/org/eclipse/xtend/shared/ui/wizards/example/Template.xpt new file mode 100644 index 00000000..6df7bca5 --- /dev/null +++ b/plugins/org.eclipse.xtend.shared.ui/src/org/eclipse/xtend/shared/ui/wizards/example/Template.xpt @@ -0,0 +1,25 @@ +«IMPORT metamodel» + +«EXTENSION template::GeneratorExtensions» + +«DEFINE main FOR Model» +«EXPAND javaClass FOREACH entities()» +«ENDDEFINE» + +«DEFINE javaClass FOR Entity» + «FILE name+".java"» + public class «name» { + «FOREACH features AS f» + private «f.type.name» «f.name»; + + public void «f.setter()»(«f.type.name» «f.name») { + this.«f.name» = «f.name»; + } + + public «f.type.name» «f.getter()»() { + return «f.name»; + } + «ENDFOREACH» + } + «ENDFILE» +«ENDDEFINE»
\ No newline at end of file diff --git a/plugins/org.eclipse.xtend.shared.ui/src/org/eclipse/xtend/shared/ui/wizards/example/generator.oaw b/plugins/org.eclipse.xtend.shared.ui/src/org/eclipse/xtend/shared/ui/wizards/example/generator.oaw new file mode 100644 index 00000000..564016ae --- /dev/null +++ b/plugins/org.eclipse.xtend.shared.ui/src/org/eclipse/xtend/shared/ui/wizards/example/generator.oaw @@ -0,0 +1,34 @@ +<?xml version="1.0"?> +<workflow> + <property name="model" value="PROJECTNAME/src/Model.xmi" /> + <property name="src-gen" value="src-gen" /> + + <!-- set up EMF for standalone execution --> + <bean class="org.eclipse.mwe.emf.StandaloneSetup" > + <platformUri value=".."/> + </bean> + + <!-- load model and store it in slot 'model' --> + <component class="org.eclipse.mwe.emf.Reader"> + <uri value="platform:/resource/${model}" /> + <modelSlot value="model" /> + </component> + + <!-- check model --> + <component class="org.eclipse.xtend.check.CheckComponent"> + <metaModel id="mm" + class="org.eclipse.m2t.type.emf.EmfRegistryMetaModel"/> + <checkFile value="metamodel::Checks" /> + <emfAllChildrenSlot value="model" /> + </component> + + <!-- generate code --> + <component class="org.eclipse.xtend.xpand2.Generator"> + <metaModel idRef="mm"/> + <expand + value="template::Template::main FOR model" /> + <outlet path="${src-gen}" > + <postprocessor class="org.eclipse.xtend.xpand2.output.JavaBeautifier" /> + </outlet> + </component> +</workflow> diff --git a/plugins/org.eclipse.xtend.shared.ui/src/org/eclipse/xtend/shared/ui/wizards/example/metamodel.ecore b/plugins/org.eclipse.xtend.shared.ui/src/org/eclipse/xtend/shared/ui/wizards/example/metamodel.ecore new file mode 100644 index 00000000..ea563857 --- /dev/null +++ b/plugins/org.eclipse.xtend.shared.ui/src/org/eclipse/xtend/shared/ui/wizards/example/metamodel.ecore @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ecore:EPackage xmi:version="2.0" + xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="metamodel" + nsURI="http://www.example.org/metamodel" nsPrefix="metamodel"> + <eClassifiers xsi:type="ecore:EClass" name="Model"> + <eStructuralFeatures xsi:type="ecore:EReference" name="types" upperBound="-1" + eType="#//Type" containment="true"/> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="Type" abstract="true"> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="Datatype" eSuperTypes="#//Type"/> + <eClassifiers xsi:type="ecore:EClass" name="Entity" eSuperTypes="#//Type"> + <eStructuralFeatures xsi:type="ecore:EReference" name="features" upperBound="-1" + eType="#//Feature" containment="true"/> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="Feature"> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> + <eStructuralFeatures xsi:type="ecore:EReference" name="type" eType="#//Type"/> + </eClassifiers> +</ecore:EPackage> |