blob: 56c35ffa3bcc296138f637b4e8064822c1967014 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more contributor license
* agreements. See the NOTICE file distributed with this work for additional information regarding
* copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the License. You may obtain a
* copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
* or implied. See the License for the specific language governing permissions and limitations under
* the License.
*/
package org.apache.geode.sequence;
import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
import javax.swing.JLabel;
/**
* Created by IntelliJ IDEA. User: dsmith Date: Oct 29, 2010 Time: 3:45:07 PM To change this
* template use File | Settings | File Templates.
*/
public class LifelineState {
private final long startTime;
private final long endTime;
private final String stateName;
private int startY;
private int height;
private final Lifeline line;
private final Set<Arrow> inboundArrows = new HashSet<Arrow>();
private static final int ARC_SIZE = 10;
public int getStartY() {
return startY;
}
public int getHeight() {
return height;
}
public LifelineState(Lifeline line, String stateName, long startTime, long endTime) {
this.line = line;
this.stateName = stateName;
this.startTime = startTime;
this.endTime = endTime;
}
public void paint(Graphics2D g, StateColorMap colorMap) {
Rectangle bounds = g.getClipBounds();
if (startY > bounds.getMaxY() || startY + height < bounds.getMinY()) {
return;
}
int x = line.getX();
int width = line.getWidth();
Color color = colorMap.getColor(stateName);
g.setColor(color);
g.fillRoundRect(x, startY, width, height, ARC_SIZE, ARC_SIZE);
g.setColor(Color.BLACK);
}
public void highlight(Graphics2D g) {
Rectangle bounds = g.getClipBounds();
if (startY > bounds.getMaxY() || startY + height < bounds.getMinY()) {
return;
}
int x = line.getX();
int width = line.getWidth();
g.drawRoundRect(x, startY, width, height, ARC_SIZE, ARC_SIZE);
}
public void resize(double scale, long base) {
startY = (int) ((startTime - base) * scale);
height = (int) ((endTime - startTime) * scale);
}
public Component getPopup() {
return new JLabel("<html>Object: " + line.getDiagramName() + "<br>Member: " + line.getName()
+ "<br>State: " + stateName + "<br>Time:" + new Date(startTime) + "</html>");
}
public Lifeline getLine() {
return line;
}
public void addInboundArrow(Arrow arrow) {
inboundArrows.add(arrow);
}
public Set<Arrow> getInboundArrows() {
return inboundArrows;
}
@Override
public String toString() {
return line.getName() + "@" + startTime + ":" + stateName;
}
}