ReuseTool Auxiliando o Processo de Instanciação Processo de Instanciação Aplicação Requisitos Análise de Domínio Intanciação/Design Codificação Testes Tempo Modelos Do Framework Outros Incrementos da Aplicação Composição { Modelos da Aplicação geram Incrementos da Aplicação relativos ao framework Design Final da Aplicação 2010 Frameworks 2 Cenário Framework Aplicação Modelo Código I 1. 2. 3. 4. 5. 6. 7. 8. package org.eclipse.gef.examples.shapes.mymodel /** * A crazy shape. * @author Toacy Oliveira */ public class CrazyShape extends Shape { /** A 16x16 pictogram of a crazy shape. */ private static final Image CRAZY_ICON = createImage("icons/crazy16.gif"); 9. private static final long serialVersionUID = 1; 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. public Image getIcon() { return CRAZY_ICON; } public String toString() { return "Crazy " + hashCode(); } public IFigure getFigure() { return new CrazyFigure ("Pop"); } public ConnectionAnchor getConnectionAnchor(IFigure iFigure) { 21. 22. } return new ChopboxAnchor(iFigure); 23. 24. 25. public boolean canConnect(Shape target) { return (super.canConnect(target)) && !(target instanceof RectangularShape); } 26. } Código II 1. 2. package org.eclipse.gef.examples.shapes.myfigures; public class CrazyFigure extends RoundedRectangle { 3. 4. 5. 6. 7. 8. 9. 10. public CrazyFigure(String name) { super(); ToolbarLayout layout = new ToolbarLayout(); setLayoutManager(layout); setBorder(new LineBorder(ColorConstants.black, 1)); setBackgroundColor(ColorConstants.red); setForegroundColor(ColorConstants.yellow); setOpaque(true); 11. 12. 13. 14. 15. Label l = new Label("Crazy!" + name); l.setForegroundColor(ColorConstants.red); l.setBackgroundColor(ColorConstants.blue); l.setFont(new Font(null, "Arial", 20, SWT.BOLD)); l.setBorder(new LineBorder(ColorConstants.black, 2)); 16. add(l); 17. } 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. public void paintFigure(Graphics graphics) { super.paintFigure(graphics); graphics.setForegroundColor(ColorConstants.orange); graphics.setLineStyle(Graphics.LINE_SOLID); graphics.setLineWidth(3); Rectangle r = getBounds(); graphics.drawLine(new Point(r.x + r.width / 2, r.y + r.height * 0.3), new Point(r.x + r.width / 2, r.y + r.height * 0.7)); // horizontal line graphics.drawLine(new Point(r.x + r.width * 0.3, r.y + r.height / 2), new Point(r.x + r.width * 0.7, r.y + r.height / 2)); 29. }; 30. } Hotspots • Configurando a Forma – Ícones – Aparência – Conexões • Alterando a Palette – Inserindo novo elemento na Palette Reuse Description Language A Solução RDL COOKBOOK ShapesProducts RECIPE main{ packA = NEW_PACKAGE(FrameworkModel,"org.reusetool.example.myshapeseditor"); LOOP ("Create another shape?") { // PREPARE Images EXTERNAL_TASK("Define 16x16 icon"); EXTERNAL_TASK("Define 24x24 icon"); // Define Shape SubClass shapeClass = CLASS_EXTENSION(Shape, packA,"?"); // Refine Abstract Methods m = METHOD_EXTENSION(Shape,shapeClass,addConnectionAnchor); ADD_CODE(shapeClass,m,"return new ChopboxAnchor(iFigure);"); m = METHOD_EXTENSION(Shape,shapeClass,getFigure); ADD_CODE(shapeClass,m,"return new IFIGURE_SUBCLASS);"); m = METHOD_EXTENSION(Shape,shapeClass,getIcon); ADD_CODE(shapeClass,m,"return createImage(\"NEW_SHAPE.gif\");"); // Configure Palette ADD_CODE(ShapesEditorPaletteFactory,createShapesDrawer, "component = new CombinedTemplateCreationEntry( \"NEW_SHAPE\", \"Create a NEW_SHAPE shape\", NEW_SHAPE.class, new SimpleFactory(NEW_SHAPE.class), ImageDescriptor.createFromFile(ShapesPlugin.class, \"icons/crazy16.gif\"), ImageDescriptor.createFromFile(ShapesPlugin.class, \"icons/crazy24.gif\")); componentsDrawer.add(component); • "); // Redefine Method to treat How Connections can be handled IF ("Add Feature - Restrict Connections?") THEN { m = METHOD_EXTENSION(Shape,shapeClass,canConnect); ADD_CODE(shapeClass,m,"Code that checks if the connection can be made."); } IF ("Add Feature - New Figure?") THEN{ // Define Shape SubClass figClass = CLASS_EXTENSION(Figure, packA,"?"); m = METHOD_EXTENSION(Figure,figClass,paintFigure); } } } END_COOKBOOK