// **********************************************************************
//
// <copyright>
//
// BBN Technologies
// 10 Moulton Street
// Cambridge, MA 02138
// (617) 873-8000
//
// Copyright (C) BBNT Solutions LLC. All rights reserved.
//
// </copyright>
// **********************************************************************
//
// $Source: /cvs/distapps/openmap/src/corba/com/bbn/openmap/layer/specialist/SGraphic.java,v $
// $RCSfile: SGraphic.java,v $
// $Revision: 1.4 $
// $Date: 2004/10/14 18:05:36 $
// $Author: dietrick $
//
// **********************************************************************
package com.bbn.openmap.layer.specialist;
import java.util.Vector;
import com.bbn.openmap.corba.CSpecialist.CColor;
import com.bbn.openmap.corba.CSpecialist.CStipple;
import com.bbn.openmap.corba.CSpecialist.Comp;
import com.bbn.openmap.corba.CSpecialist.EComp;
import com.bbn.openmap.corba.CSpecialist.Graphic;
import com.bbn.openmap.corba.CSpecialist.UGraphic;
import com.bbn.openmap.corba.CSpecialist.UpdateGraphic;
import com.bbn.openmap.corba.CSpecialist.UpdateRecord;
import com.bbn.openmap.corba.CSpecialist.CColorPackage.EColor;
import com.bbn.openmap.corba.CSpecialist.CStipplePackage.EStipple;
import com.bbn.openmap.corba.CSpecialist.GraphicPackage.DeclutterType;
import com.bbn.openmap.corba.CSpecialist.GraphicPackage.EGraphic;
import com.bbn.openmap.corba.CSpecialist.GraphicPackage.GF_update;
import com.bbn.openmap.corba.CSpecialist.GraphicPackage.GraphicType;
import com.bbn.openmap.corba.CSpecialist.GraphicPackage.LineType;
import com.bbn.openmap.corba.CSpecialist.GraphicPackage.RenderType;
/**
* The SGraphic class is the base class for the specialist graphic
* objects - it holds attributes common to most all objects. Some
* attributes don't apply to some types of graphics.
*/
public abstract class SGraphic {
private static long gid = 0;
Vector graphicUpdateList_ = null;
protected com.bbn.openmap.corba.CSpecialist.GraphicPackage.EGraphic eg;
final private static EColor nullColor = new EColor(null, (short) 0, (short) 0, (short) 0);
final private static EStipple nullStipple = new EStipple(null, (short) 0, (short) 0, new byte[0]);
final private static EComp nullComp = new EComp(null, "");
// create a raw EGraphic
public static EGraphic createEGraphic() {
EGraphic eg = new EGraphic();
eg.graph = null;
eg.obj = nullComp;
eg.gType = GraphicType.GT_Raster;
eg.rType = RenderType.RT_LatLon;
eg.lType = com.bbn.openmap.corba.CSpecialist.GraphicPackage.LineType.LT_Unknown;
eg.dcType = DeclutterType.DC_None;
eg.lineWidth = 1;
eg.gID = Long.toString(gid++);
eg.color = nullColor;
eg.fillColor = nullColor;
eg.stipple = nullStipple;
eg.fillStipple = nullStipple;
return eg;
}
public SGraphic(Graphic g, GraphicType gType, RenderType rType,
LineType lType, DeclutterType dcType) {
eg = new EGraphic();
eg.graph = g;
eg.obj = nullComp;
eg.gType = gType;
eg.rType = rType;
eg.lType = lType;
eg.dcType = dcType;
eg.lineWidth = 1;
eg.gID = Long.toString(gid++);
eg.color = nullColor;
eg.fillColor = nullColor;
eg.stipple = nullStipple;
eg.fillStipple = nullStipple;
graphicUpdateList_ = new Vector();
}
/**
* construct an SGraphic without a reference to the actual CORBA
* object.
*/
public SGraphic(GraphicType gType, RenderType rType, LineType lType,
DeclutterType dcType) {
this(null, gType, rType, lType, dcType);
}
public java.lang.String gID() {
return eg.gID;
}
public void gID(java.lang.String gID) {
eg.gID = gID;
}
public GraphicType gType() {
return eg.gType;
}
public void object(Comp object) {
eg.obj = (object == null) ? nullComp : object.fill();
}
public Comp object() {
return eg.obj.comp;
}
public SComp sobject() {
return ((eg.obj.comp instanceof SComp) ? (SComp) eg.obj.comp : null);
}
public void lType(LineType lType) {
eg.lType = lType;
}
public LineType lType() {
return eg.lType;
}
public void rType(RenderType rType) {
eg.rType = rType;
}
public RenderType rType() {
return eg.rType;
}
public void color(CColor color) {
eg.color = (color == null) ? nullColor : color.fill();
}
public CColor color() {
return eg.color.color;
}
public SColor scolor() {
return ((eg.color.color instanceof SColor) ? (SColor) eg.color.color
: null);
}
public void fillColor(CColor fillColor) {
eg.fillColor = (fillColor == null) ? nullColor : fillColor.fill();
}
public CColor fillColor() {
return eg.fillColor.color;
}
public SColor sfillColor() {
return ((eg.fillColor.color instanceof SColor) ? (SColor) eg.fillColor.color
: null);
}
public void lineWidth(short lineWidth) {
eg.lineWidth = lineWidth;
}
public short lineWidth() {
return eg.lineWidth;
}
public void stipple(CStipple stipple) {
eg.stipple = (stipple == null) ? nullStipple : stipple.fill();
}
public CStipple stipple() {
return eg.stipple.stipple;
}
public SStipple sstipple() {
return ((eg.stipple.stipple instanceof SStipple) ? (SStipple) eg.stipple.stipple
: null);
}
public void fillStipple(CStipple fillStipple) {
eg.fillStipple = (fillStipple == null) ? nullStipple
: fillStipple.fill();
}
public CStipple fillStipple() {
return eg.fillStipple.stipple;
}
public SStipple sfillStipple() {
return ((eg.fillStipple.stipple instanceof SStipple) ? (SStipple) eg.fillStipple.stipple
: null);
}
public void dcType(DeclutterType dcType) {
eg.dcType = dcType;
}
public DeclutterType dcType() {
return eg.dcType;
}
public EGraphic gfill() {
return eg;
}
abstract public UGraphic ufill();
public void changeObject(Comp obj) {
object(obj);
GF_update gupdate = new GF_update();
gupdate.obj(eg.obj);
UpdateGraphic ug = new UpdateGraphic();
ug.gf_update(gupdate);
addGraphicChange(ug);
}
public void changeLType(LineType lType) {
eg.lType = lType;
GF_update gupdate = new GF_update();
gupdate.lType(lType);
UpdateGraphic ug = new UpdateGraphic();
ug.gf_update(gupdate);
addGraphicChange(ug);
}
public void changeRType(RenderType rType) {
eg.rType = rType;
GF_update gupdate = new GF_update();
gupdate.rType(rType);
UpdateGraphic ug = new UpdateGraphic();
ug.gf_update(gupdate);
addGraphicChange(ug);
}
public void changeColor(CColor color) {
color(color);
GF_update gupdate = new GF_update();
gupdate.color(eg.color);
UpdateGraphic ug = new UpdateGraphic();
ug.gf_update(gupdate);
addGraphicChange(ug);
}
public void changeFillColor(SColor fillColor) {
fillColor(fillColor);
GF_update gupdate = new GF_update();
gupdate.fillColor(eg.fillColor);
UpdateGraphic ug = new UpdateGraphic();
ug.gf_update(gupdate);
addGraphicChange(ug);
}
public void changeLineWidth(short lineWidth) {
eg.lineWidth = lineWidth;
GF_update gupdate = new GF_update();
gupdate.lineWidth(lineWidth);
UpdateGraphic ug = new UpdateGraphic();
ug.gf_update(gupdate);
addGraphicChange(ug);
}
public void changeStipple(SStipple stipple) {
stipple(stipple);
GF_update gupdate = new GF_update();
gupdate.stipple(eg.stipple);
UpdateGraphic ug = new UpdateGraphic();
ug.gf_update(gupdate);
addGraphicChange(ug);
}
public void changeFillStipple(SStipple fillStipple) {
fillStipple(fillStipple);
GF_update gupdate = new GF_update();
gupdate.fillStipple(eg.fillStipple);
UpdateGraphic ug = new UpdateGraphic();
ug.gf_update(gupdate);
addGraphicChange(ug);
}
public void changeDcType(DeclutterType dct) {
// dcType_ = dct;
// GF_update gupdate = new GF_update();
// gupdate.dcType(dct);
// UpdateGraphic ug = new UpdateGraphic();
// ug.gf_update(gupdate);
// addGraphicChange(ug);
}
/**
* <b>addGraphicChange </b> is called from within each graphic
* object type (SCirc, SBitmap, etc. to add it to the change list.
* Don't call this directly, the object will take care of it. It
* adds the change to the specific parameter of the object to a
* total list of changes that the object is tracking.
*/
protected void addGraphicChange(UpdateGraphic ug) {
graphicUpdateList_.addElement(ug);
}
/**
* <b>getGraphicUpdates </b> are called from within the graphic
* objects to get the list of updates that have been made to the
* object. The list is converted to an <b>UpdateRecord </b>. Call
* this method to obtain the <b>UpdateRecord </b> needed for the
* graphic updates as a result of a gesture action.
*/
public UpdateRecord getGraphicUpdates() {
UpdateRecord ur = new UpdateRecord();
ur.gID = eg.gID;
ur.objectUpdates = new UpdateGraphic[graphicUpdateList_.size()];
for (int i = 0; i < graphicUpdateList_.size(); i++)
ur.objectUpdates[i] = (UpdateGraphic) graphicUpdateList_.elementAt(i);
return ur;
}
}