/* * Copyright (C) 2006-2016 DLR, Germany * * All rights reserved * * http://www.rcenvironment.de/ */ package de.rcenvironment.core.component.workflow.model.api; import java.io.Serializable; import java.util.UUID; import de.rcenvironment.core.component.model.spi.PropertiesChangeSupport; import de.rcenvironment.core.utils.common.StringUtils; /** * A Label within a {@link WorkflowDescription}. * * @author Sascha Zur * @author Marc Stammerjohann * @author Doreen Seider */ public class WorkflowLabel extends PropertiesChangeSupport implements Serializable, Comparable<WorkflowLabel> { /** Constant for the palate name entry. */ public static final String PALETTE_ENTRY_NAME = "Add Label"; /** Constant for default header font size. */ public static final int DEFAULT_HEADER_FONT_SIZE = 12; /** Constant for the default font size. */ public static final int DEFAULT_FONT_SIZE = 9; /** Constant for the default width. */ public static final int DEFAULT_WIDTH = 121; /** Constant for the default height. */ public static final int DEFAULT_HEIGHT = 61; /** Constant for label initial text. */ public static final String INITIAL_TEXT = "New label"; /** Constant for label alpha. */ public static final int DEFAULT_ALPHA = 128; /** Constant for label color. */ public static final int DEFAULT_COLOR_BLUE = 0x22; /** Constant for label color. */ public static final int DEFAULT_COLOR_GREEN = 0x92; /** Constant for label color. */ public static final int DEFAULT_COLOR_RED = 0x39; /** Constant for label color. */ public static final int DEFAULT_COLOR_BLACK = 0; /** Property that is fired when a label property changes. */ public static final String PROPERTY_CHANGE = "de.rcenvironment.rce.component.workflow.WorkflowLabelProperty"; /** Property that is fired when a label command property changes. */ public static final String COMMAND_CHANGE = "de.rcenvironment.rce.component.workflow.WorkflowLabelCommand"; private static final int INT_255 = 255; private static final long serialVersionUID = 3420597804308218542L; private static final int INITIAL_ZINDEX = -1; private String headerText; private String text; private int x; private int y; private int width; private int height; private int alpha = DEFAULT_ALPHA; private String identifier; private int[] colorBackground; private int[] colorHeader; private int[] colorText; private boolean hasBorder; private LabelPosition labelPosition; private TextAlignmentType textAlignmentType; private TextAlignmentType headerAlignmentType; private int headerTextSize; private int textSize; private int zIndex; public WorkflowLabel(String text) { this.text = text; this.headerText = ""; identifier = UUID.randomUUID().toString(); setColorBackground(new int[] { DEFAULT_COLOR_RED, DEFAULT_COLOR_GREEN, DEFAULT_COLOR_BLUE }); setColorHeader(new int[] { DEFAULT_COLOR_BLACK, DEFAULT_COLOR_BLACK, DEFAULT_COLOR_BLACK }); setColorText(new int[] { DEFAULT_COLOR_BLACK, DEFAULT_COLOR_BLACK, DEFAULT_COLOR_BLACK }); setLabelPosition(LabelPosition.CENTER); setTextAlignmentType(TextAlignmentType.LEFT); setHeaderAlignmentType(TextAlignmentType.CENTER); setHasBorder(false); setHeaderTextSize(DEFAULT_HEADER_FONT_SIZE); setTextSize(DEFAULT_FONT_SIZE); setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT); zIndex = INITIAL_ZINDEX; } public String getText() { return text; } public void setText(String text) { this.text = text; } /** * @param newX The new X location. * @param newY The new Y location. */ public void setLocation(int newX, int newY) { setX(newX); setY(newY); } public int getX() { return x; } public void setX(int x) { this.x = x; } public int getY() { return y; } public void setY(int y) { this.y = y; } public int getHeight() { return height; } public int getWidth() { return width; } public void setHeight(int height) { this.height = height; } public void setWidth(int width) { this.width = width; } /** * @param newHeight the new height * @param newWidth the new width */ public void setSize(int newWidth, int newHeight) { setWidth(newWidth); setHeight(newHeight); } public String getIdentifier() { return identifier; } public int getAlpha() { return alpha; } public int getAlphaDisplay() { return -alpha + INT_255; } /** * Enhanced setter. * * @param alpha new value */ public void setAlpha(int alpha) { this.alpha = INT_255 - alpha; } public void setIdentifier(String identifier) { this.identifier = identifier; } public int[] getColorBackground() { return colorBackground; } /** * Enhanced setter. * * @param color new value */ public void setColorBackground(int[] color) { this.colorBackground = color; } public int[] getColorText() { return colorText; } /** * Enhanced setter. * * @param colorText new value */ public void setColorText(int[] colorText) { this.colorText = colorText; } /** * @return <code>true</code> if {@link WorkflowLabel} has border, otherwise <code>false</code> */ public boolean hasBorder() { return hasBorder; } public void setHasBorder(boolean hasBorder) { this.hasBorder = hasBorder; } public LabelPosition getLabelPosition() { return labelPosition; } public void setLabelPosition(LabelPosition labelPosition) { this.labelPosition = labelPosition; } public TextAlignmentType getTextAlignmentType() { return textAlignmentType; } public void setTextAlignmentType(TextAlignmentType textAlignmentType) { this.textAlignmentType = textAlignmentType; } public TextAlignmentType getHeaderAlignmentType() { return headerAlignmentType; } public void setHeaderAlignmentType(TextAlignmentType headerAlignmentType) { this.headerAlignmentType = headerAlignmentType; } public int getTextSize() { return textSize; } public void setTextSize(int textSize) { this.textSize = textSize; } /** * Fires property change event. */ public void firePropertChangeEvent() { firePropertyChange(PROPERTY_CHANGE); } @Override public String toString() { return StringUtils.format("'%s' (x=%d, y=%d, height=%d, width=%d alpha=%d, color=%d %d %d, background=%d %d %d, border=%b," + " font size=%d)", text, x, y, height, width, alpha, colorText[0], colorText[1], colorText[2], colorBackground[0], colorBackground[1], colorBackground[2], hasBorder, textSize); } @Override public int compareTo(WorkflowLabel o) { return getIdentifier().compareTo(o.getIdentifier()); } /** * Contains label alignment type. * * @author Jascha Riedel */ public enum LabelPosition { /** Position. */ TOPLEFT, /** Position. */ TOPCENTER, /** Position. */ TOPRIGHT, /** Position. */ CENTERLEFT, /** Position. */ CENTER, /** Position. */ CENTERRIGHT, /** Position. */ BOTTOMLEFT, /** Position. */ BOTTOMCENTER, /** Position. */ BOTTOMRIGHT; } /** * * Contains text alignment type for maintext and header. * * @author Jascha Riedel */ public enum TextAlignmentType { /** Alignment. */ LEFT, /** Alignment. */ CENTER, /** Alignment. */ RIGHT; } public String getHeaderText() { return headerText; } public void setHeaderText(String headerText) { this.headerText = headerText; } public int[] getColorHeader() { return colorHeader; } public void setColorHeader(int[] colorHeader) { this.colorHeader = colorHeader; } public int getHeaderTextSize() { return headerTextSize; } public void setHeaderTextSize(int headerTextSize) { this.headerTextSize = headerTextSize; } public int getZIndex() { return zIndex; } public void setZIndex(int zindex) { this.zIndex = zindex; } }