/*
* This file is part of Caliph & Emir.
*
* Caliph & Emir is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* Caliph & Emir is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Caliph & Emir; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* Copyright statement:
* --------------------
* (c) 2005 by Werner Klieber (werner@klieber.info)
* http://caliph-emir.sourceforge.net
*/
package at.wklieber.gui.data;
import at.wklieber.gui.IColorRectangle;
import at.wklieber.gui.IComponent;
import at.wklieber.gui.IShape;
import at.wklieber.tools.Console;
import at.wklieber.tools.MiscTools;
import javax.swing.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.util.List;
import java.util.Vector;
import java.util.logging.Logger;
/**
* - contains data of a IComponent class or one of its children.
* - it has the name of the Icomponent class
* - it can generate a new component out of the data (a kind of clone)
* - Icomponent use this data for serialization/deserialization
*/
public class IComponentData
implements DataInterface {
private static java.util.logging.Logger cat = java.util.logging.Logger.getLogger(IComponentData.class.getName());
private static Console console = Console.getReference();
private IComponentData() {
init();
}
// component is used to get the name of the comonent: rectangle, shape, ...
public IComponentData(IComponent iComponent) {
init();
this.componentName = iComponent.getClass().getName();
}
/**
* returns the name of the component java class name (.IRectangle, ...)
*/
public String getComponentName() {
return componentName;
}
private String componentName = ""; // the component this data describes, e.g "IColorRectangle"
// dot-list for shapes
private java.util.List dotList = null; // dot list for shape of Element "Point"
private Rectangle boundary = null; // the size of the sourounding box
private Color foreGround = null;
private Color backGround = null;
private Color fillColor = null; // solid color. used in IShape as shapecolor
private String name = ""; // the name of the component: filename, colorname, ...
private BufferedImage image = null;
private Rectangle imageSize = null;
public BufferedImage getImage() {
return image;
}
public void setImage(BufferedImage image) {
this.image = image;
}
public Rectangle getImageSize() {
return imageSize;
}
public void setImageSize(Rectangle imageSize) {
this.imageSize = imageSize;
}
public Color getForeGround() {
return foreGround;
}
public void setForeGround(Color foreGround) {
this.foreGround = foreGround;
}
public Color getBackGround() {
return backGround;
}
public void setBackGround(Color backGround) {
this.backGround = backGround;
}
public Rectangle getBoundary() {
return boundary;
}
public Color getFillColor() {
return fillColor;
}
public void setFillColor(Color fillColor) {
this.fillColor = fillColor;
}
public void setBoundary(Rectangle boundary) {
if (boundary == null) {
this.boundary = new Rectangle(0, 0, 0, 0);
} else {
this.boundary = boundary;
}
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
// returns the type of data for the internal to mpeg7 converter.
//This does not define the IComponent this record belongs to
// means that it is a icomponent dat instead of e.g. a textquery data
public int getId() {
return ICOMPONENT_DATA;
}
private void init() {
dotList = new Vector();
}
public void setDotList(List dotList) {
this.dotList = dotList;
}
public List getDotList() {
return dotList;
}
/**
* Creates a new component from the data in this class.
* Instance of the class is choosen from getComponentName
* DrawPanel is need, that the component can be drawn. If it is null, setDrawPanel have to be called manually
*/
public IComponent getIComponent(JPanel drawPanel1) {
IComponent returnValue = null;
try {
if (getComponentName().equalsIgnoreCase(IColorRectangle.class.getName())) {
Color drawColor = getForeGround();
Color backgroundColor = getBackGround();
IColorRectangle rect = new IColorRectangle(drawPanel1, drawColor, backgroundColor, drawColor.toString());
rect.setDoDnd(false);
rect.setMoveable(true);
rect.setResizeable(true);
rect.setDoDisplayPercentage(true);
returnValue = rect;
} else if (getComponentName().equalsIgnoreCase(IShape.class.getName())) {
Color drawColor = getFillColor();
Color backgroundColor = getBackGround();
IShape shape = new IShape(drawPanel1, drawColor, backgroundColor,
this.image, this.imageSize);
shape.setDoDnd(false);
shape.setMoveable(true);
shape.setResizeable(true);
returnValue = shape;
} else
returnValue = (IComponent) MiscTools.loadClassByName(getComponentName());
returnValue.setComponentData(this);
} catch (Exception e) {
cat.severe(e.toString());
}
return returnValue;
}
public String toString() {
String returnValue = "Id: \"" + getComponentName() + "\", ";
returnValue += " Boundary: \"" + getBoundary() + "\", ";
returnValue += " Foreground: \"" + getForeGround() + "\", ";
return "";
}
protected void finalize() throws Throwable {
super.finalize();
}
}