1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
|
package com.c2kernel.lifecycle.instance.gui.view;
import java.awt.Color;
import java.awt.FontMetrics;
import java.awt.Graphics2D;
import java.awt.Paint;
import java.awt.Polygon;
import com.c2kernel.common.GTimeStamp;
import com.c2kernel.graph.model.GraphPoint;
import com.c2kernel.graph.model.Vertex;
import com.c2kernel.graph.view.VertexRenderer;
import com.c2kernel.lifecycle.instance.Activity;
import com.c2kernel.lifecycle.instance.stateMachine.States;
import com.c2kernel.utils.DateUtility;
import com.c2kernel.utils.Language;
public class ActivityRenderer implements VertexRenderer
{
private Paint mActivePaint = new Color(100, 255, 100);
private Paint mActiveCompPaint = new Color(100, 255, 255);
private Paint mInactivePaint = new Color(255, 255, 255);
private Paint mInactiveCompPaint = new Color(200, 200, 255);
private Paint mErrorPaint = new Color(255, 50, 0);
private Paint mTextPaint = Color.black;
public void draw(Graphics2D g2d, Vertex vertex)
{
Activity activity = (Activity) vertex;
boolean active = activity.getActive();
boolean hasError = !activity.verify();
boolean isComposite = activity.getIsComposite();
GraphPoint centrePoint = activity.getCentrePoint();
String description = activity.getDescription();
String[] linesOfText = new String[3];
linesOfText[0] = "(" + activity.getType() + ")";
linesOfText[1] = activity.getName();
if (hasError)
linesOfText[2] = Language.translate(activity.getErrors());
else
{
int cs = activity.getCurrentState();
if (cs == States.WAITING && activity.getActive())
linesOfText[2] =
Language.translate(States.getStateName(cs))
+ (((Boolean) activity.getProperties().get("Show time")).booleanValue()
? " " + getWaitTime(activity.getActiveDate())
: "");
else if (cs == States.STARTED)
linesOfText[2] =
Language.translate(States.getStateName(cs))
+ (((Boolean) activity.getProperties().get("Show time")).booleanValue()
? " " + getWaitTime(activity.getStartDate())
: "");
else
linesOfText[2] = Language.translate(States.getStateName(cs));
}
FontMetrics metrics = g2d.getFontMetrics();
int lineWidth = 0;
int lineHeight = metrics.getHeight();
int linesHeight = lineHeight * linesOfText.length;
int linesStartY = centrePoint.y - linesHeight / 2 + lineHeight * 2 / 3;
int x = 0;
int y = 0;
int i = 0;
GraphPoint[] outline = vertex.getOutlinePoints();
Paint actColour;
if (hasError)
actColour = mErrorPaint;
else if (active)
if (isComposite)
actColour = mActiveCompPaint;
else
actColour = mActivePaint;
else if (isComposite)
actColour = mInactiveCompPaint;
else
actColour = mInactivePaint;
g2d.setPaint(actColour);
//g2d.fill3DRect( centrePoint.x - mSize.width / 2, centrePoint.y - mSize.height / 2, mSize.width, mSize.height, true );
g2d.fill(graphPointsToPolygon(outline));
g2d.setPaint(mTextPaint);
for (i = 0; i < linesOfText.length; i++)
{
lineWidth = metrics.stringWidth(linesOfText[i]);
x = centrePoint.x - lineWidth / 2;
y = linesStartY + i * lineHeight;
g2d.drawString(linesOfText[i], x, y);
}
}
private Polygon graphPointsToPolygon(GraphPoint[] points)
{
Polygon polygon = new Polygon();
int i = 0;
for (i = 0; i < points.length; i++)
{
polygon.addPoint(points[i].x, points[i].y);
}
return polygon;
}
private String getWaitTime(GTimeStamp date)
{
GTimeStamp now = new GTimeStamp();
DateUtility.setToNow(now);
long diff = DateUtility.diff(now, date);
long secondes = diff % 60;
long minutes = (diff / 60) % 60;
long hours = (diff / 3600) % 24;
long days = (diff / 3600 / 24);
if (days > 0)
return days + " " + Language.translate("d") + " " + hours + " " + Language.translate("h");
if (hours > 0)
return hours + " " + Language.translate("h") + " " + minutes + " " + Language.translate("min");
if (minutes > 0)
return minutes + " " + Language.translate("min");
return secondes + " " + Language.translate("sec");
}
}
|