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
Download

ReuseTool