Combining Graphical and Textual

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

1 comments

Comments 1 - 1 of 1 previous next Post a comment

  • + artacademy artacademy 1 week ago
    no notes to any slides :( thats a pitty!
Post a comment
Embed Video
Edit your comment Cancel

3 Favorites & 1 Group

Combining Graphical and Textual - Presentation Transcript

  1. Combining Graphics and Text in Modeling Tools Jan Köhnlein (itemis) Jos Warmer (Ordina)
  2. public void assertSameStructure(EObject left, EObject right) { if(!isSameStructure(left, right)) { log.error(getErrorMessage()); Assert.fail(getErrorMessage()); } Text Graphics //logger.debug("" + counter + " elements compared"); } protected String getErrorMessage() { return errorMessage.toString(); } public boolean isSameStructure(EObject left, EObject right) { counter = 0; return internalIsSameStructure(left, right); } public boolean internalIsSameStructure(EObject left, EObject right) { ++counter; if (!isSameClass(left.eClass(), right.eClass())) { errorMessage.append("Classes are not equal: " + left + " != " + right).append('n'); return false; } List<EObject> leftChildren = getRelevantChildren(left); List<EObject> rightChildren = getRelevantChildren(right); if(leftChildren.size() != rightChildren.size()) { errorMessage.append("Number of children differs " + left + " " + right + " " + leftChildren.size() + " <> " + rightChildren.size()).append('n') return false; } for (int i = 0; i < leftChildren.size(); ++i) { if(!internalIsSameStructure(leftChildren.get(i), rightChildren.get(i))) { errorMessage.append("Children differ " + left + " " + right + " with children " + leftChildren.get(i) + " " + rightChildren.get(i)).append return false; } } return true; } protected boolean isSameClass(EClass left, EClass right) { return left.getName().equals(right.getName()) && left.getEPackage().getNsURI().equals(right.getEPackage().getNsURI()); } protected List<EObject> getRelevantChildren(EObject _this) { List<EObject> relevantChildren = new ArrayList<EObject>(_this.eContents()); for (Iterator<EObject> i = relevantChildren.iterator(); i.hasNext();) { EObject next = i.next(); if (!isRelevantChild(_this, next)) { i.remove();
  3. public void assertSameStructure(EObject left, EObject right) { if(!isSameStructure(left, right)) { log.error(getErrorMessage()); Assert.fail(getErrorMessage()); } Text Graphics //logger.debug("" + counter + " elements compared"); } protected String getErrorMessage() { return errorMessage.toString(); • } Detailed views public boolean isSameStructure(EObject left, EObject right) { counter = 0; return internalIsSameStructure(left, right); } public boolean internalIsSameStructure(EObject left, EObject right) { ++counter; if (!isSameClass(left.eClass(), right.eClass())) { errorMessage.append("Classes are not equal: " + left + " != " + right).append('n'); return false; } List<EObject> leftChildren = getRelevantChildren(left); List<EObject> rightChildren = getRelevantChildren(right); if(leftChildren.size() != rightChildren.size()) { errorMessage.append("Number of children differs " + left + " " + right + " " + leftChildren.size() + " <> " + rightChildren.size()).append('n') return false; } for (int i = 0; i < leftChildren.size(); ++i) { if(!internalIsSameStructure(leftChildren.get(i), rightChildren.get(i))) { errorMessage.append("Children differ " + left + " " + right + " with children " + leftChildren.get(i) + " " + rightChildren.get(i)).append return false; } } return true; } protected boolean isSameClass(EClass left, EClass right) { return left.getName().equals(right.getName()) && left.getEPackage().getNsURI().equals(right.getEPackage().getNsURI()); } protected List<EObject> getRelevantChildren(EObject _this) { List<EObject> relevantChildren = new ArrayList<EObject>(_this.eContents()); for (Iterator<EObject> i = relevantChildren.iterator(); i.hasNext();) { EObject next = i.next(); if (!isRelevantChild(_this, next)) { i.remove();
  4. public void assertSameStructure(EObject left, EObject right) { if(!isSameStructure(left, right)) { log.error(getErrorMessage()); Assert.fail(getErrorMessage()); } Text Graphics //logger.debug("" + counter + " elements compared"); } protected String getErrorMessage() { return errorMessage.toString(); • • } Detailed views public boolean isSameStructure(EObject left, EObject right) { High-level views counter = 0; return internalIsSameStructure(left, right); } public boolean internalIsSameStructure(EObject left, EObject right) { ++counter; if (!isSameClass(left.eClass(), right.eClass())) { errorMessage.append("Classes are not equal: " + left + " != " + right).append('n'); return false; } List<EObject> leftChildren = getRelevantChildren(left); List<EObject> rightChildren = getRelevantChildren(right); if(leftChildren.size() != rightChildren.size()) { errorMessage.append("Number of children differs " + left + " " + right + " " + leftChildren.size() + " <> " + rightChildren.size()).append('n') return false; } for (int i = 0; i < leftChildren.size(); ++i) { if(!internalIsSameStructure(leftChildren.get(i), rightChildren.get(i))) { errorMessage.append("Children differ " + left + " " + right + " with children " + leftChildren.get(i) + " " + rightChildren.get(i)).append return false; } } return true; } protected boolean isSameClass(EClass left, EClass right) { return left.getName().equals(right.getName()) && left.getEPackage().getNsURI().equals(right.getEPackage().getNsURI()); } protected List<EObject> getRelevantChildren(EObject _this) { List<EObject> relevantChildren = new ArrayList<EObject>(_this.eContents()); for (Iterator<EObject> i = relevantChildren.iterator(); i.hasNext();) { EObject next = i.next(); if (!isRelevantChild(_this, next)) { i.remove();
  5. public void assertSameStructure(EObject left, EObject right) { if(!isSameStructure(left, right)) { log.error(getErrorMessage()); Assert.fail(getErrorMessage()); } Text Graphics //logger.debug("" + counter + " elements compared"); } protected String getErrorMessage() { return errorMessage.toString(); • • } Detailed views public boolean isSameStructure(EObject left, EObject right) { High-level views • Very formal syntax counter = 0; return internalIsSameStructure(left, right); } public boolean internalIsSameStructure(EObject left, EObject right) { ++counter; if (!isSameClass(left.eClass(), right.eClass())) { errorMessage.append("Classes are not equal: " + left + " != " + right).append('n'); return false; } List<EObject> leftChildren = getRelevantChildren(left); List<EObject> rightChildren = getRelevantChildren(right); if(leftChildren.size() != rightChildren.size()) { errorMessage.append("Number of children differs " + left + " " + right + " " + leftChildren.size() + " <> " + rightChildren.size()).append('n') return false; } for (int i = 0; i < leftChildren.size(); ++i) { if(!internalIsSameStructure(leftChildren.get(i), rightChildren.get(i))) { errorMessage.append("Children differ " + left + " " + right + " with children " + leftChildren.get(i) + " " + rightChildren.get(i)).append return false; } } return true; } protected boolean isSameClass(EClass left, EClass right) { return left.getName().equals(right.getName()) && left.getEPackage().getNsURI().equals(right.getEPackage().getNsURI()); } protected List<EObject> getRelevantChildren(EObject _this) { List<EObject> relevantChildren = new ArrayList<EObject>(_this.eContents()); for (Iterator<EObject> i = relevantChildren.iterator(); i.hasNext();) { EObject next = i.next(); if (!isRelevantChild(_this, next)) { i.remove();
  6. public void assertSameStructure(EObject left, EObject right) { if(!isSameStructure(left, right)) { log.error(getErrorMessage()); Assert.fail(getErrorMessage()); } Text Graphics //logger.debug("" + counter + " elements compared"); } protected String getErrorMessage() { return errorMessage.toString(); • • } Detailed views public boolean isSameStructure(EObject left, EObject right) { High-level views } • Very formal syntax counter = 0; return internalIsSameStructure(left, right); • Suggests non-formalism public boolean internalIsSameStructure(EObject left, EObject right) { ++counter; if (!isSameClass(left.eClass(), right.eClass())) { errorMessage.append("Classes are not equal: " + left + " != " + right).append('n'); return false; } List<EObject> leftChildren = getRelevantChildren(left); List<EObject> rightChildren = getRelevantChildren(right); if(leftChildren.size() != rightChildren.size()) { errorMessage.append("Number of children differs " + left + " " + right + " " + leftChildren.size() + " <> " + rightChildren.size()).append('n') return false; } for (int i = 0; i < leftChildren.size(); ++i) { if(!internalIsSameStructure(leftChildren.get(i), rightChildren.get(i))) { errorMessage.append("Children differ " + left + " " + right + " with children " + leftChildren.get(i) + " " + rightChildren.get(i)).append return false; } } return true; } protected boolean isSameClass(EClass left, EClass right) { return left.getName().equals(right.getName()) && left.getEPackage().getNsURI().equals(right.getEPackage().getNsURI()); } protected List<EObject> getRelevantChildren(EObject _this) { List<EObject> relevantChildren = new ArrayList<EObject>(_this.eContents()); for (Iterator<EObject> i = relevantChildren.iterator(); i.hasNext();) { EObject next = i.next(); if (!isRelevantChild(_this, next)) { i.remove();
  7. public void assertSameStructure(EObject left, EObject right) { if(!isSameStructure(left, right)) { log.error(getErrorMessage()); Assert.fail(getErrorMessage()); } Text Graphics //logger.debug("" + counter + " elements compared"); } protected String getErrorMessage() { return errorMessage.toString(); • • } Detailed views public boolean isSameStructure(EObject left, EObject right) { High-level views } • Very formal syntax counter = 0; return internalIsSameStructure(left, right); • Suggests non-formalism • Standard text editor public boolean internalIsSameStructure(EObject left, EObject right) { ++counter; if (!isSameClass(left.eClass(), right.eClass())) { errorMessage.append("Classes are not equal: " + left + " != " + right).append('n'); return false; } List<EObject> leftChildren = getRelevantChildren(left); List<EObject> rightChildren = getRelevantChildren(right); if(leftChildren.size() != rightChildren.size()) { errorMessage.append("Number of children differs " + left + " " + right + " " + leftChildren.size() + " <> " + rightChildren.size()).append('n') return false; } for (int i = 0; i < leftChildren.size(); ++i) { if(!internalIsSameStructure(leftChildren.get(i), rightChildren.get(i))) { errorMessage.append("Children differ " + left + " " + right + " with children " + leftChildren.get(i) + " " + rightChildren.get(i)).append return false; } } return true; } protected boolean isSameClass(EClass left, EClass right) { return left.getName().equals(right.getName()) && left.getEPackage().getNsURI().equals(right.getEPackage().getNsURI()); } protected List<EObject> getRelevantChildren(EObject _this) { List<EObject> relevantChildren = new ArrayList<EObject>(_this.eContents()); for (Iterator<EObject> i = relevantChildren.iterator(); i.hasNext();) { EObject next = i.next(); if (!isRelevantChild(_this, next)) { i.remove();
  8. public void assertSameStructure(EObject left, EObject right) { if(!isSameStructure(left, right)) { log.error(getErrorMessage()); Assert.fail(getErrorMessage()); } Text Graphics //logger.debug("" + counter + " elements compared"); } protected String getErrorMessage() { return errorMessage.toString(); • • } Detailed views public boolean isSameStructure(EObject left, EObject right) { High-level views } • Very formal syntax counter = 0; return internalIsSameStructure(left, right); • Suggests non-formalism • ++counter; Standard text editor public boolean internalIsSameStructure(EObject left, EObject right) { • Custom editor if (!isSameClass(left.eClass(), right.eClass())) { errorMessage.append("Classes are not equal: " + left + " != " + right).append('n'); return false; } List<EObject> leftChildren = getRelevantChildren(left); List<EObject> rightChildren = getRelevantChildren(right); if(leftChildren.size() != rightChildren.size()) { errorMessage.append("Number of children differs " + left + " " + right + " " + leftChildren.size() + " <> " + rightChildren.size()).append('n') return false; } for (int i = 0; i < leftChildren.size(); ++i) { if(!internalIsSameStructure(leftChildren.get(i), rightChildren.get(i))) { errorMessage.append("Children differ " + left + " " + right + " with children " + leftChildren.get(i) + " " + rightChildren.get(i)).append return false; } } return true; } protected boolean isSameClass(EClass left, EClass right) { return left.getName().equals(right.getName()) && left.getEPackage().getNsURI().equals(right.getEPackage().getNsURI()); } protected List<EObject> getRelevantChildren(EObject _this) { List<EObject> relevantChildren = new ArrayList<EObject>(_this.eContents()); for (Iterator<EObject> i = relevantChildren.iterator(); i.hasNext();) { EObject next = i.next(); if (!isRelevantChild(_this, next)) { i.remove();
  9. public void assertSameStructure(EObject left, EObject right) { if(!isSameStructure(left, right)) { log.error(getErrorMessage()); Assert.fail(getErrorMessage()); } Text Graphics //logger.debug("" + counter + " elements compared"); } protected String getErrorMessage() { return errorMessage.toString(); • • } Detailed views public boolean isSameStructure(EObject left, EObject right) { High-level views } • Very formal syntax counter = 0; return internalIsSameStructure(left, right); • Suggests non-formalism • Standard text editor public boolean internalIsSameStructure(EObject left, EObject right) { • Custom editor • ++counter; Standard versioning / if (!isSameClass(left.eClass(), right.eClass())) { errorMessage.append("Classes are not equal: " + left + " != " + right).append('n'); return false; } multi-user support List<EObject> leftChildren = getRelevantChildren(left); List<EObject> rightChildren = getRelevantChildren(right); if(leftChildren.size() != rightChildren.size()) { errorMessage.append("Number of children differs " + left + " " + right + " " + leftChildren.size() + " <> " + rightChildren.size()).append('n') return false; } for (int i = 0; i < leftChildren.size(); ++i) { if(!internalIsSameStructure(leftChildren.get(i), rightChildren.get(i))) { errorMessage.append("Children differ " + left + " " + right + " with children " + leftChildren.get(i) + " " + rightChildren.get(i)).append return false; } } return true; } protected boolean isSameClass(EClass left, EClass right) { return left.getName().equals(right.getName()) && left.getEPackage().getNsURI().equals(right.getEPackage().getNsURI()); } protected List<EObject> getRelevantChildren(EObject _this) { List<EObject> relevantChildren = new ArrayList<EObject>(_this.eContents()); for (Iterator<EObject> i = relevantChildren.iterator(); i.hasNext();) { EObject next = i.next(); if (!isRelevantChild(_this, next)) { i.remove();
  10. public void assertSameStructure(EObject left, EObject right) { if(!isSameStructure(left, right)) { log.error(getErrorMessage()); Assert.fail(getErrorMessage()); } Text Graphics //logger.debug("" + counter + " elements compared"); } protected String getErrorMessage() { return errorMessage.toString(); • • } Detailed views public boolean isSameStructure(EObject left, EObject right) { High-level views } • Very formal syntax counter = 0; return internalIsSameStructure(left, right); • Suggests non-formalism • Standard text editor public boolean internalIsSameStructure(EObject left, EObject right) { • Custom editor • • ++counter; Standard versioning / if (!isSameClass(left.eClass(), right.eClass())) { Custom versioning / errorMessage.append("Classes are not equal: " + left + " != " + right).append('n'); return false; } multi-user support List<EObject> leftChildren = getRelevantChildren(left); multi-user support List<EObject> rightChildren = getRelevantChildren(right); if(leftChildren.size() != rightChildren.size()) { errorMessage.append("Number of children differs " + left + " " + right + " " + leftChildren.size() + " <> " + rightChildren.size()).append('n') return false; } for (int i = 0; i < leftChildren.size(); ++i) { if(!internalIsSameStructure(leftChildren.get(i), rightChildren.get(i))) { errorMessage.append("Children differ " + left + " " + right + " with children " + leftChildren.get(i) + " " + rightChildren.get(i)).append return false; } } return true; } protected boolean isSameClass(EClass left, EClass right) { return left.getName().equals(right.getName()) && left.getEPackage().getNsURI().equals(right.getEPackage().getNsURI()); } protected List<EObject> getRelevantChildren(EObject _this) { List<EObject> relevantChildren = new ArrayList<EObject>(_this.eContents()); for (Iterator<EObject> i = relevantChildren.iterator(); i.hasNext();) { EObject next = i.next(); if (!isRelevantChild(_this, next)) { i.remove();
  11. public void assertSameStructure(EObject left, EObject right) { if(!isSameStructure(left, right)) { log.error(getErrorMessage()); Assert.fail(getErrorMessage()); } Text Graphics //logger.debug("" + counter + " elements compared"); } protected String getErrorMessage() { return errorMessage.toString(); • • } Detailed views public boolean isSameStructure(EObject left, EObject right) { High-level views } • Very formal syntax counter = 0; return internalIsSameStructure(left, right); • Suggests non-formalism • Standard text editor public boolean internalIsSameStructure(EObject left, EObject right) { • Custom editor • • ++counter; Standard versioning / if (!isSameClass(left.eClass(), right.eClass())) { Custom versioning / errorMessage.append("Classes are not equal: " + left + " != " + right).append('n'); return false; } multi-user support List<EObject> leftChildren = getRelevantChildren(left); multi-user support • Editing with keyboard List<EObject> rightChildren = getRelevantChildren(right); if(leftChildren.size() != rightChildren.size()) { errorMessage.append("Number of children differs " + left + " " + right + " " + leftChildren.size() + " <> " + rightChildren.size()).append('n') return false; } for (int i = 0; i < leftChildren.size(); ++i) { if(!internalIsSameStructure(leftChildren.get(i), rightChildren.get(i))) { errorMessage.append("Children differ " + left + " " + right + " with children " + leftChildren.get(i) + " " + rightChildren.get(i)).append return false; } } return true; } protected boolean isSameClass(EClass left, EClass right) { return left.getName().equals(right.getName()) && left.getEPackage().getNsURI().equals(right.getEPackage().getNsURI()); } protected List<EObject> getRelevantChildren(EObject _this) { List<EObject> relevantChildren = new ArrayList<EObject>(_this.eContents()); for (Iterator<EObject> i = relevantChildren.iterator(); i.hasNext();) { EObject next = i.next(); if (!isRelevantChild(_this, next)) { i.remove();
  12. public void assertSameStructure(EObject left, EObject right) { if(!isSameStructure(left, right)) { log.error(getErrorMessage()); Assert.fail(getErrorMessage()); } Text Graphics //logger.debug("" + counter + " elements compared"); } protected String getErrorMessage() { return errorMessage.toString(); • • } Detailed views public boolean isSameStructure(EObject left, EObject right) { High-level views } • Very formal syntax counter = 0; return internalIsSameStructure(left, right); • Suggests non-formalism • Standard text editor public boolean internalIsSameStructure(EObject left, EObject right) { • Custom editor • • ++counter; Standard versioning / if (!isSameClass(left.eClass(), right.eClass())) { Custom versioning / errorMessage.append("Classes are not equal: " + left + " != " + right).append('n'); return false; } multi-user support List<EObject> leftChildren = getRelevantChildren(left); multi-user support • Editing with keyboard List<EObject> rightChildren = getRelevantChildren(right); if(leftChildren.size() != rightChildren.size()) { • Editing with mouse errorMessage.append("Number of children differs " + left + " " + right + " " + leftChildren.size() + " <> " + rightChildren.size()).append('n') return false; } for (int i = 0; i < leftChildren.size(); ++i) { if(!internalIsSameStructure(leftChildren.get(i), rightChildren.get(i))) { errorMessage.append("Children differ " + left + " " + right + " with children " + leftChildren.get(i) + " " + rightChildren.get(i)).append return false; } } return true; } protected boolean isSameClass(EClass left, EClass right) { return left.getName().equals(right.getName()) && left.getEPackage().getNsURI().equals(right.getEPackage().getNsURI()); } protected List<EObject> getRelevantChildren(EObject _this) { List<EObject> relevantChildren = new ArrayList<EObject>(_this.eContents()); for (Iterator<EObject> i = relevantChildren.iterator(); i.hasNext();) { EObject next = i.next(); if (!isRelevantChild(_this, next)) { i.remove();
  13. public void assertSameStructure(EObject left, EObject right) { if(!isSameStructure(left, right)) { log.error(getErrorMessage()); Assert.fail(getErrorMessage()); } Text Graphics //logger.debug("" + counter + " elements compared"); } protected String getErrorMessage() { return errorMessage.toString(); • • } Detailed views public boolean isSameStructure(EObject left, EObject right) { High-level views } • Very formal syntax counter = 0; return internalIsSameStructure(left, right); • Suggests non-formalism • Standard text editor public boolean internalIsSameStructure(EObject left, EObject right) { • Custom editor • • ++counter; Standard versioning / if (!isSameClass(left.eClass(), right.eClass())) { Custom versioning / errorMessage.append("Classes are not equal: " + left + " != " + right).append('n'); return false; } multi-user support List<EObject> leftChildren = getRelevantChildren(left); multi-user support • Editing with keyboard List<EObject> rightChildren = getRelevantChildren(right); if(leftChildren.size() != rightChildren.size()) { • Editing with mouse errorMessage.append("Number of children differs " + left + " " + right + " " + leftChildren.size() + " <> " + rightChildren.size()).append('n') return false; } for (int i = 0; i < leftChildren.size(); ++i) { if(!internalIsSameStructure(leftChildren.get(i), rightChildren.get(i))) { errorMessage.append("Children differ " + left + " " + right + " with children " + leftChildren.get(i) + " " + rightChildren.get(i)).append return false; } } Why not have both? return true; } protected boolean isSameClass(EClass left, EClass right) { return left.getName().equals(right.getName()) && left.getEPackage().getNsURI().equals(right.getEPackage().getNsURI()); } protected List<EObject> getRelevantChildren(EObject _this) { List<EObject> relevantChildren = new ArrayList<EObject>(_this.eContents()); for (Iterator<EObject> i = relevantChildren.iterator(); i.hasNext();) { EObject next = i.next(); if (!isRelevantChild(_this, next)) { i.remove();
  14. Xtext vs GMF
  15. Xtext
  16. Xtext G ra m m ar
  17. Xtext G ra m m ar
  18. Xtext ar m m ra G Runtime Superclass Subclass Class Ecore model LL(*) Parser Text editor
  19. Xtext ar m m ra G Semantic Metamodel Runtime Superclass Subclass Class Ecore model LL(*) Parser Text editor
  20. Superclass GMF Subclass Ecore model Class
  21. Superclass GMF Subclass Ecore model Class Graph Model
  22. Superclass GMF Subclass Ecore model Class Graph Tool Model Model
  23. Superclass GMF Subclass Ecore model Class Graph Map Tool Model Model Model
  24. Superclass GMF Subclass Ecore model Class Graph Map Tool Model Model Model GMF Generator Model
  25. Superclass GMF Subclass Ecore model Class Graph Map Tool Model Model Model GMF Generator Model
  26. Runtime Models and Synchronization
  27. Xtext EObject element eAdapters NodeAdapter node children AbstractNode offset: int length: int CompositeNode LeafNode text: String parent
  28. Xtext GMF EObject element EObject element eAdapters NodeAdapter View node children AbstractNode Node Edge offset: int length: int layoutConstraints bendpoints CompositeNode LeafNode Bounds Bendpoints text: String x: int parent y: int width: int height: int
  29. GMF ResourceSet GMFResource DiagramResource Canonical EditPolicy
  30. GMF ResourceSet GMFResource DiagramResource Canonical Canonical EditPolicy EditPolicy
  31. GMF ResourceSet GMFResource DiagramResource Canonical Canonical EditPolicy EditPolicy
  32. Xtext
  33. Xtext Textual Model Serializer Parser Node Model Ecore Model Instance
  34. Xtext XtextResource Textual Model Serializer Parser Node Model Ecore Model Instance
  35. Xtext XtextResource Textual Model Serializer Parser Node Model Ecore Model Instance getContents()
  36. Xtext load(), save() XtextResource Textual Model Serializer Parser Node Model Ecore Model Instance getContents()
  37. Xtext load(), save() XtextResource Textual Model Serializer Parser Node Model Ecore Model Instance FragmentProvider getContents() getURIFragment() getEObject()
  38. ResourceSet XtextResource DiagramResource
  39. diagram change ResourceSet XtextResource DiagramResource
  40. ResourceSet XtextResource DiagramResource
  41. reparse() w/ errors ResourceSet XtextResource DiagramResource
  42. ResourceSet XtextResource DiagramResource
  43. ResourceSet XtextResource DiagramResource Canonical EditPolicy
  44. ResourceSet XtextResource DiagramResource Canonical EditPolicy
  45. ResourceSet XtextResource DiagramResource Canonical EditPolicy
  46. Fi e l od a M xtu le l Te ResourceSet ResourceSet XtextResource XtextResource DiagramResource
  47. Fi e l od a M xtu le l Te ResourceSet ResourceSet XtextResource XtextResource DiagramResource
  48. Fi e l od a M xtu le l Te ResourceSet ResourceSet XtextResource XtextResource DiagramResource
  49. Fi e l od a M xtu le l Te ResourceSet ResourceSet XtextResource save() XtextResource DiagramResource
  50. Fi e l od a M xtu le l Te ResourceSet ResourceSet XtextResource reload() XtextResource DiagramResource
  51. Fi e l od a M xtu le l Te ResourceSet ResourceSet XtextResource reload() XtextResource DiagramResource
  52. Fi e l od a M xtu le l Te ResourceSet ResourceSet XtextResource XtextResource DiagramResource
  53. Fi e l od a M xtu le l Te ResourceSet ResourceSet XtextResource XtextResource DiagramResource
  54. Alignment
  55. grammar org.xtext.cg2009.Entities with org.eclipse.xtext.common.Terminals generate entities "http://www.xtext.org/cg2009/Entities" Model : {Model} (entities += Entity)*; Entity returns Entity: 'entity' (name=ID)? ('extends' superType=[Entity])? '{' (properties+=Property)* '}'; Property: SimpleProperty | ReferenceProperty; SimpleProperty: 'property' (name=ID)? ':' type=('String'|'Number'|'Bool'); ReferenceProperty : (name=ID)? 'refs' ('one' | many?='many')? type=[Entity];
  56. grammar org.xtext.cg2009.Entities with org.eclipse.xtext.common.Terminals Avoid empty generate entities "http://www.xtext.org/cg2009/Entities" models Model : {Model} (entities += Entity)*; Entity returns Entity: 'entity' (name=ID)? ('extends' superType=[Entity])? '{' (properties+=Property)* '}'; Property: SimpleProperty | ReferenceProperty; SimpleProperty: 'property' (name=ID)? ':' type=('String'|'Number'|'Bool'); ReferenceProperty : (name=ID)? 'refs' ('one' | many?='many')? type=[Entity];
  57. grammar org.xtext.cg2009.Entities with org.eclipse.xtext.common.Terminals Avoid empty generate entities "http://www.xtext.org/cg2009/Entities" models Model : {Model} (entities += Entity)*; Entity returns Entity: 'entity' (name=ID)? ('extends' superType=[Entity])? '{' (properties+=Property)* '}'; Property: Cover mandatory SimpleProperty | ReferenceProperty; properties in SimpleProperty: validation 'property' (name=ID)? ':' type=('String'|'Number'|'Bool'); ReferenceProperty : (name=ID)? 'refs' ('one' | many?='many')? type=[Entity];
  58. grammar org.xtext.cg2009.Entities with org.eclipse.xtext.common.Terminals Avoid empty generate entities "http://www.xtext.org/cg2009/Entities" Carefully select models Model : containment or cross {Model} (entities += Entity)*; references Entity returns Entity: 'entity' (name=ID)? ('extends' superType=[Entity])? '{' (properties+=Property)* '}'; Property: Cover mandatory SimpleProperty | ReferenceProperty; properties in SimpleProperty: validation 'property' (name=ID)? ':' type=('String'|'Number'|'Bool'); ReferenceProperty : (name=ID)? 'refs' ('one' | many?='many')? type=[Entity];
  59. Xtext
  60. Xtext Implement a Formatter
  61. Xtext Implement a Formatter Implement a FragmentProvider
  62. Xtext Implement a Formatter Implement a FragmentProvider Implement a JavaValidator
  63. GMF
  64. GMF Initialize mandatory properties
  65. GMF Initialize mandatory properties Avoid Phantom Nodes
  66. Add a transaction on GMF load Initialize mandatory properties Avoid Phantom Nodes
  67. Glue Code
  68. Glue Code • Prevent conflicting modifications
  69. Glue Code • Prevent conflicting modifications • Navigate • diagram ➜ text
  70. Glue Code • Prevent conflicting modifications • Navigate • diagram ➜ text • text ➜ diagram (needs index)
  71. Glue Code • Prevent conflicting modifications • Navigate • diagram ➜ text • text ➜ diagram (needs index) • Parser wrapper
  72. Glue Code • Prevent conflicting modifications • Navigate • diagram ➜ text • text ➜ diagram (needs index) • Parser wrapper • Popup editor
  73. Demo Time

+ schwurbelschwurbel, 1 month ago

custom

341 views, 3 favs, 0 embeds more stats

Combining Graphics and Text in Modeling Tools
with more

More info about this document

© All Rights Reserved

Go to text version

  • Total Views 341
    • 341 on SlideShare
    • 0 from embeds
  • Comments 1
  • Favorites 3
  • Downloads 19
Most viewed embeds

more

All embeds

less

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

Cancel
File a copyright complaint
Having problems? Go to our helpdesk?

Categories

Groups / Events