blob: bae9d78141beed206c07fa17dd0304d831017b6e [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.netbeans.modules.profiler.snaptracer;
import org.netbeans.modules.profiler.snaptracer.impl.timeline.items.ContinuousXYItemDescriptor;
import org.netbeans.modules.profiler.snaptracer.impl.timeline.items.DiscreteXYItemDescriptor;
import org.netbeans.modules.profiler.snaptracer.impl.timeline.items.ValueItemDescriptor;
import java.awt.Color;
import org.netbeans.modules.profiler.snaptracer.impl.timeline.items.IconItemDescriptor;
/**
* ProbeItemDescriptor describes a TracerProbe item appearance in the UI.
* <p>
*
* Current version supports two general types of items: continuous and discrete.
* Continuous items consist of non-rectangular polyline or polygon segments
* connecting the values. The values define vertices of the segments.
* <p>
*
* Discrete items consist of rectangular segments either connected together or
* divided into bar segments. The values are located in the middle of the segments.
* <p>
*
* Each descriptor requires a common set of mandatory options:
* <ul>
* <li><code>name</code>: item name
* <li><code>description</code>: item description, may be <code>null</code>
* <li><code>formatter</code>: ItemValueFormatter instance which defines how the item values are presented in UI
* </ul>
* <p>
*
* The other options which may be set are:
* <ul>
* <li><code>dataFactor</code>: a multiplication factor for item values, useful when displaying multiple items in one graph
* <li<code>minValue</code>: minimum (initial) item value, typically set for zero-based metrics (heap size)
* <li><code>maxValue</code>: maximum (initial) item value, may be used for the initial graph scale
* </ul>
* <p>
*
* There's no need to define line width and/or line/fill colors, the framework
* guarantees that each item in a graph will be displayed by a different color.
* If needed, line width and/or line/fill colors may be customized by setting
* these options:
* <ul>
* <li><code>lineWidth</code>: width of the line, default is <code>2f</code>
* <li><code>lineColor</code>: color of the line, may be <code>null</code>
* <li><code>fillColor</code>: color of the filled area, may be <code>null</code>
* </ul>
* <p>
*
* <b>Note:</b> Use the predefined static methods to create instances of ProbeItemDescriptor.
* Custom instances of ProbeItemDescriptor are not supported and will cause a
* <code>RuntimeException</code>.
*
* @author Jiri Sedlacek
*/
public abstract class ProbeItemDescriptor {
// --- Public predefined constants -----------------------------------------
/**
* Minimum item value is undefined.
*/
public static final long MIN_VALUE_UNDEFINED = Long.MAX_VALUE;
/**
* Maximum item value is undefined.
*/
public static final long MAX_VALUE_UNDEFINED = Long.MIN_VALUE;
/**
* Value is undefined. For minimum/maximum value use MIN_VALUE_UNDEFINED or
* MAX_VALUE_UNDEFINED.
*/
public static final long VALUE_UNDEFINED = Long.MIN_VALUE - 1;
/**
* Default color.
*/
public static final Color DEFAULT_COLOR = new Color(0, 0, 0); // use == to identify this instance!
/**
* Default line width.
*/
public static final float DEFAULT_LINE_WIDTH = -1.0F;
// --- Private instance variables ------------------------------------------
private final String name;
private final String description;
// --- Protected constructor -----------------------------------------------
protected ProbeItemDescriptor(String name, String description) {
if (name == null)
throw new IllegalArgumentException("name cannot be null"); // NOI18N
// Custom ProbeItemDescriptor subclasses are currently not supported.
// May be supported in future versions together with custom Painters.
if (!(this instanceof ValueItemDescriptor))
throw new UnsupportedOperationException("Custom descriptor not supported. Use the predefined descriptors."); // NOI18N
this.name = name;
this.description = description;
}
// --- Common implementation -----------------------------------------------
/**
* Returns name of the item.
* @return name of the item
*/
public final String getName() { return name; }
/**
* Returns description of the item.
* @return description of the item
*/
public final String getDescription() { return description; }
// === Public factory methods ==============================================
// --- Icon items ----------------------------------------------------------
public static ProbeItemDescriptor iconItem(String name, String description,
ItemValueFormatter formatter) {
return new IconItemDescriptor(name, description, formatter, DEFAULT_COLOR);
}
// --- Continuous items ----------------------------------------------------
/**
* Creates descriptor for a continuous item created by line segments.
*
* @param name item name
* @param description item description or null
* @param formatter item formatter
* @return descriptor for a continuous item created by line segments
*/
public static ProbeItemDescriptor continuousLineItem(String name, String description,
ItemValueFormatter formatter) {
return continuousItem(name, description, formatter, 1d, 0, MAX_VALUE_UNDEFINED,
DEFAULT_LINE_WIDTH, DEFAULT_COLOR, null);
}
/**
* Creates descriptor for a continuous item created by line segments with custom dataFactor ad min/max values.
*
* @param name item name
* @param description item description or null
* @param formatter item formatter
* @param dataFactor multiplication factor
* @param minValue minimum (initial) item value
* @param maxValue maximum (initial) item value
* @return descriptor for a continuous item created by line segments
*/
public static ProbeItemDescriptor continuousLineItem(String name, String description,
ItemValueFormatter formatter,
double dataFactor,
long minValue, long maxValue) {
return continuousItem(name, description, formatter, dataFactor, minValue,
maxValue, DEFAULT_LINE_WIDTH, DEFAULT_COLOR, null);
}
/**
* Creates descriptor for a continuous item created by filled segments.
*
* @param name item name
* @param description item description or null
* @param formatter item formatter
* @return descriptor for a continuous item created by filled segments
*/
public static ProbeItemDescriptor continuousFillItem(String name, String description,
ItemValueFormatter formatter) {
return continuousItem(name, description, formatter, 1d, 0, MAX_VALUE_UNDEFINED,
DEFAULT_LINE_WIDTH, null, DEFAULT_COLOR);
}
/**
* Creates descriptor for a continuous item created by filled segments with custom dataFactor ad min/max values.
*
* @param name item name
* @param description item description or null
* @param formatter item formatter
* @param dataFactor multiplication factor
* @param minValue minimum (initial) item value
* @param maxValue maximum (initial) item value
* @return descriptor for a continuous item created by filled segments
*/
public static ProbeItemDescriptor continuousFillItem(String name, String description,
ItemValueFormatter formatter,
double dataFactor,
long minValue, long maxValue) {
return continuousItem(name, description, formatter, dataFactor, minValue,
maxValue, DEFAULT_LINE_WIDTH, null, DEFAULT_COLOR);
}
/**
* Creates descriptor for a continuous item created by line and filled segments.
*
* @param name item name
* @param description item description or null
* @param formatter item formatter
* @return descriptor for a continuous item created by line and filled segments
*/
public static ProbeItemDescriptor continuousLineFillItem(String name, String description,
ItemValueFormatter formatter) {
return continuousItem(name, description, formatter, 1d, 0, MAX_VALUE_UNDEFINED,
DEFAULT_LINE_WIDTH, DEFAULT_COLOR, DEFAULT_COLOR);
}
/**
* Creates descriptor for a continuous item created by line and filled segments with custom dataFactor ad min/max values.
*
* @param name item name
* @param description item description or null
* @param formatter item formatter
* @param dataFactor multiplication factor
* @param minValue minimum (initial) item value
* @param maxValue maximum (initial) item value
* @return descriptor for a continuous item created by line and filled segments
*/
public static ProbeItemDescriptor continuousLineFillItem(String name, String description,
ItemValueFormatter formatter,
double dataFactor,
long minValue, long maxValue) {
return continuousItem(name, description, formatter, dataFactor, minValue,
maxValue, DEFAULT_LINE_WIDTH, DEFAULT_COLOR, DEFAULT_COLOR);
}
/**
* Creates descriptor for a general continuous item with custom dataFactor ad min/max values, and custom line width and line/fill colors.
*
* @param name item name
* @param description item description or null
* @param formatter item formatter
* @param dataFactor multiplication factor
* @param minValue minimum (initial) item value
* @param maxValue maximum (initial) item value
* @param lineWidth line width
* @param lineColor line color or null
* @param fillColor fill color or null
* @return descriptor for a general continuous item
*/
public static ProbeItemDescriptor continuousItem(String name, String description,
ItemValueFormatter formatter,
double dataFactor, long minValue,
long maxValue, float lineWidth,
Color lineColor, Color fillColor) {
if (lineColor == null && fillColor == null)
throw new IllegalArgumentException("Either lineColor or fillColor must be defined"); // NOI18N
return new ContinuousXYItemDescriptor(name, description, formatter, dataFactor,
minValue, maxValue, lineWidth, lineColor,
fillColor);
}
// --- Discrete items ------------------------------------------------------
/**
* Creates descriptor for a discrete item created by line segments representing the outline.
*
* @param name item name
* @param description item description or null
* @param formatter item formatter
* @return descriptor for a discrete item created by line segments representing the outline
*/
public static ProbeItemDescriptor discreteLineItem(String name, String description,
ItemValueFormatter formatter) {
return discreteOutlineItem(name, description, formatter, 1d, 0, MAX_VALUE_UNDEFINED,
DEFAULT_LINE_WIDTH, DEFAULT_COLOR, null);
}
/**
* Creates descriptor for a discrete item created by line segments representing the outline with custom dataFactor ad min/max values.
*
* @param name item name
* @param description item description or null
* @param formatter item formatter
* @param dataFactor multiplication factor
* @param minValue minimum (initial) item value
* @param maxValue maximum (initial) item value
* @return descriptor for a discrete item created by line segments representing the outline
*/
public static ProbeItemDescriptor discreteLineItem(String name, String description,
ItemValueFormatter formatter,
double dataFactor,
long minValue, long maxValue) {
return discreteOutlineItem(name, description, formatter, dataFactor, minValue,
maxValue, DEFAULT_LINE_WIDTH, DEFAULT_COLOR, null);
}
/**
* Creates descriptor of a discrete item created by filled segments.
*
* @param name item name
* @param description item description or null
* @param formatter item formatter
* @return descriptor of a discrete item created by filled segments
*/
public static ProbeItemDescriptor discreteFillItem(String name, String description,
ItemValueFormatter formatter) {
return discreteOutlineItem(name, description, formatter, 1d, 0, MAX_VALUE_UNDEFINED,
DEFAULT_LINE_WIDTH, null, DEFAULT_COLOR);
}
/**
* Creates descriptor of a discrete item created by filled segments with custom dataFactor ad min/max values.
*
* @param name item name
* @param description item description or null
* @param formatter item formatter
* @param dataFactor multiplication factor
* @param minValue minimum (initial) item value
* @param maxValue maximum (initial) item value
* @return descriptor of a discrete item created by filled segments
*/
public static ProbeItemDescriptor discreteFillItem(String name, String description,
ItemValueFormatter formatter,
double dataFactor,
long minValue, long maxValue) {
return discreteOutlineItem(name, description, formatter, dataFactor, minValue,
maxValue, DEFAULT_LINE_WIDTH, null, DEFAULT_COLOR);
}
/**
* Creates descriptor for a discrete item created by line segments representing the outline and filled segments.
*
* @param name item name
* @param description item description or null
* @param formatter item formatter
* @return descriptor for a discrete item created by line segments representing the outline and filled segments
*/
public static ProbeItemDescriptor discreteLineFillItem(String name, String description,
ItemValueFormatter formatter) {
return discreteOutlineItem(name, description, formatter, 1d, 0, MAX_VALUE_UNDEFINED,
DEFAULT_LINE_WIDTH, DEFAULT_COLOR, DEFAULT_COLOR);
}
/**
* Creates descriptor for a discrete item created by line segments representing the outline and filled segments with custom dataFactor ad min/max values.
*
* @param name item name
* @param description item description or null
* @param formatter item formatter
* @param dataFactor multiplication factor
* @param minValue minimum (initial) item value
* @param maxValue maximum (initial) item value
* @return descriptor for a discrete item created by line segments representing the outline and filled segments
*/
public static ProbeItemDescriptor discreteLineFillItem(String name, String description,
ItemValueFormatter formatter,
double dataFactor,
long minValue, long maxValue) {
return discreteOutlineItem(name, description, formatter, dataFactor, minValue,
maxValue, DEFAULT_LINE_WIDTH, DEFAULT_COLOR, DEFAULT_COLOR);
}
/**
* Creates descriptor for a general discrete outlined item with custom dataFactor ad min/max values, and custom line width and line/fill colors.
*
* @param name item name
* @param description item description or null
* @param formatter item formatter
* @param dataFactor multiplication factor
* @param minValue minimum (initial) item value
* @param maxValue maximum (initial) item value
* @param lineWidth line width
* @param lineColor line color or null
* @param fillColor fill color or null
* @return descriptor for a general discrete outlined item
*/
public static ProbeItemDescriptor discreteOutlineItem(String name, String description,
ItemValueFormatter formatter,
double dataFactor, long minValue,
long maxValue, float lineWidth,
Color lineColor, Color fillColor) {
if (lineColor == null && fillColor == null)
throw new IllegalArgumentException("Either lineColor or fillColor must be defined"); // NOI18N
return discreteItem(name, description, formatter, dataFactor, minValue, maxValue,
lineWidth, lineColor, fillColor, 0, false, false, true);
}
/**
* Creates descriptor for a discrete item represented by a horizontal line segment, optionally filled, with custom dataFactor ad min/max values.
*
* @param name item name
* @param description item description or null
* @param formatter item formatter
* @param dataFactor multiplication factor
* @param minValue minimum (initial) item value
* @param maxValue maximum (initial) item value
* @param filled true if the segments are filled
* @param width width of/between the segments
* @param fixedWidth true if width defines segment width, false if width defines segments spacing
* @return descriptor for a discrete item represented by a horizontal line segment, optionally filled
*/
public static ProbeItemDescriptor discreteToplineItem(String name, String description,
ItemValueFormatter formatter,
double dataFactor, long minValue,
long maxValue, boolean filled,
int width, boolean fixedWidth) {
return discreteItem(name, description, formatter, dataFactor, minValue, maxValue,
DEFAULT_LINE_WIDTH, DEFAULT_COLOR, filled ? DEFAULT_COLOR : null,
width, fixedWidth, true, false);
}
/**
* Creates descriptor for a discrete item represented by a horizontal line segment, optionally filled, with custom dataFactor ad min/max values, and custom line width and line/fill colors.
*
* @param name item name
* @param description item description or null
* @param formatter item formatter
* @param dataFactor multiplication factor
* @param minValue minimum (initial) item value
* @param maxValue maximum (initial) item value
* @param lineWidth line width
* @param lineColor line color or null
* @param fillColor fill color or null
* @param width width width of/between the segments
* @param fixedWidth fixedWidth true if width defines segment width, false if width defines segments spacing
* @return descriptor for a discrete item represented by a horizontal line segment, optionally filled
*/
public static ProbeItemDescriptor discreteToplineItem(String name, String description,
ItemValueFormatter formatter,
double dataFactor, long minValue,
long maxValue, float lineWidth,
Color lineColor, Color fillColor,
int width, boolean fixedWidth) {
if (lineColor == null && fillColor == null)
throw new IllegalArgumentException("Either lineColor or fillColor must be defined"); // NOI18N
return discreteItem(name, description, formatter, dataFactor, minValue, maxValue,
lineWidth, lineColor, fillColor, width, fixedWidth, true, false);
}
/**
* Creates descriptor for a discrete item represented by vertical bars, with custom dataFactor ad min/max values
*
* @param name item name
* @param description item description or null
* @param formatter item formatter
* @param dataFactor multiplication factor
* @param minValue minimum (initial) item value
* @param maxValue maximum (initial) item value
* @param outlined true if the bars are outlined
* @param filled true if the bars are filled
* @param width width width of/between the bars
* @param fixedWidth fixedWidth true if width defines bar width, false if width defines bars spacing
* @return descriptor for a discrete item represented by vertical bars
*/
public static ProbeItemDescriptor discreteBarItem(String name, String description,
ItemValueFormatter formatter,
double dataFactor, long minValue,
long maxValue, boolean outlined,
boolean filled, int width,
boolean fixedWidth) {
if (!outlined && !filled)
throw new IllegalArgumentException("Either outlined or filled must be set"); // NOI18N
return discreteItem(name, description, formatter, dataFactor, minValue, maxValue,
DEFAULT_LINE_WIDTH, outlined ? DEFAULT_COLOR : null,
filled ? DEFAULT_COLOR : null, width, fixedWidth, false, !filled);
}
/**
* Creates descriptor for a discrete item represented by vertical bars, with custom dataFactor ad min/max values, and custom line width and line/fill colors.
*
* @param name item name
* @param description item description or null
* @param formatter item formatter
* @param dataFactor multiplication factor
* @param minValue minimum (initial) item value
* @param maxValue maximum (initial) item value
* @param lineWidth line width
* @param lineColor line color or null
* @param fillColor fill color or null
* @param width width width of/between the bars
* @param fixedWidth fixedWidth true if width defines bar width, false if width defines bars spacing
* @return descriptor for a discrete item represented by vertical bars
*/
public static ProbeItemDescriptor discreteBarItem(String name, String description,
ItemValueFormatter formatter,
double dataFactor, long minValue,
long maxValue, float lineWidth,
Color lineColor, Color fillColor,
int width, boolean fixedWidth) {
if (lineColor == null && fillColor == null)
throw new IllegalArgumentException("Either lineColor or fillColor must be defined"); // NOI18N
return discreteItem(name, description, formatter, dataFactor, minValue, maxValue,
lineWidth, lineColor, fillColor, width, fixedWidth, false, fillColor == null);
}
private static ProbeItemDescriptor discreteItem(String name, String description,
ItemValueFormatter formatter,
double dataFactor, long minValue,
long maxValue, float lineWidth,
Color lineColor, Color fillColor,
int width, boolean fixedWidth,
boolean topLineOnly,
boolean outlineOnly) {
return new DiscreteXYItemDescriptor(name, description, formatter, dataFactor,
minValue, maxValue, lineWidth, lineColor,
fillColor, width, fixedWidth, topLineOnly,
outlineOnly);
}
}