/* * 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; } }