/*
* <copyright> Copyright 1997-2003 BBNT Solutions, LLC under
* sponsorship of the Defense Advanced Research Projects Agency
* (DARPA).
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the Cougaar Open Source License as
* published by DARPA on the Cougaar Open Source Website
* (www.cougaar.org).
*
* THE COUGAAR SOFTWARE AND ANY DERIVATIVE SUPPLIED BY LICENSOR IS
* PROVIDED 'AS IS' WITHOUT WARRANTIES OF ANY KIND, WHETHER EXPRESS OR
* IMPLIED, INCLUDING (BUT NOT LIMITED TO) ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, AND WITHOUT
* ANY WARRANTIES AS TO NON-INFRINGEMENT. IN NO EVENT SHALL COPYRIGHT
* HOLDER BE LIABLE FOR ANY DIRECT, SPECIAL, INDIRECT OR CONSEQUENTIAL
* DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE OF DATA OR PROFITS,
* TORTIOUS CONDUCT, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
* PERFORMANCE OF THE COUGAAR SOFTWARE. </copyright>
*/
package com.bbn.openmap.dataAccess.cgm;
import java.io.DataInputStream;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
public class Command implements Cloneable {
protected static Logger logger = Logger.getLogger("com.bbn.openmap.dataAccess.cgm.Command");
int args[];
int ElementClass;
int ElementId;
public Command(int ec, int eid, int l, DataInputStream in) throws IOException {
ElementClass = ec;
ElementId = eid;
if (l != 31) {
args = new int[l];
for (int i = 0; i < l; i++)
args[i] = in.read();
if (l % 2 != 0)
in.read();
} else {
l = read16(in);
args = new int[l];
for (int i = 0; i < l; i++)
args[i] = in.read();
if (l % 2 != 0)
in.read();
}
}
public int read16(DataInputStream in) throws IOException {
return (in.read() << 8) | in.read();
}
public String toString() {
return ElementClass + "," + ElementId + " (" + args.length + ")";
}
public String makeString() {
if (args.length <= 0)
return "";
char a[] = new char[args.length - 1];
for (int i = 0; i < a.length; i++)
a[i] = (char) args[i + 1];
return new String(a);
}
public String makeString(int k) {
char a[] = new char[args[k]];
for (int i = 0; i < a.length; i++)
a[i] = (char) args[k + i + 1];
return new String(a);
}
public int makeInt(int i) {
return (int) ((short) (args[2 * i] << 8) + args[2 * i + 1]);
}
public void paint(CGMDisplay d) {
}
public void scale(CGMDisplay d) {
}
public static Command read(DataInputStream in) throws IOException {
int k = in.read();
if (k == -1)
return null;
k = (k << 8) | in.read();
int ec = k >> 12;
int eid = (k >> 5) & 127;
int l = k & 31;
switch (ec) {
// Delimiter elements
case 0:
switch (eid) {
case 0:
// NOOP
break;
case 1:
return new BeginMetafile(ec, eid, l, in);
case 2:
return new EndMetafile(ec, eid, l, in);
case 3:
return new BeginPicture(ec, eid, l, in);
case 4:
return new BeginPictureBody(ec, eid, l, in);
case 5:
return new EndPicture(ec, eid, l, in);
case 6:
return new DummyCommand(ec, eid, l, in, "Begin Segment");
case 7:
return new DummyCommand(ec, eid, l, in, "End Segment");
case 8:
return new DummyCommand(ec, eid, l, in, "Begin Figure");
case 9:
return new DummyCommand(ec, eid, l, in, "End Figure");
case 13:
return new DummyCommand(ec, eid, l, in, "Being Protection Region");
case 14:
return new DummyCommand(ec, eid, l, in, "End Protection Region");
case 15:
return new DummyCommand(ec, eid, l, in, "Begin Compound Line");
case 16:
return new DummyCommand(ec, eid, l, in, "End Compound Line");
case 17:
return new DummyCommand(ec, eid, l, in, "Begin Compound Text Path");
case 18:
return new DummyCommand(ec, eid, l, in, "End Compound Text Path");
case 19:
return new DummyCommand(ec, eid, l, in, "Begin Tile Array");
case 20:
return new DummyCommand(ec, eid, l, in, "End Tile Array");
case 21:
return new DummyCommand(ec, eid, l, in, "Begin Application Structure");
case 22:
return new DummyCommand(ec, eid, l, in, "Begin Application Structure Body");
case 23:
return new DummyCommand(ec, eid, l, in, "End Application Structure");
default:
break;
}
break;
// Metafile descriptor elements
case 1:
switch (eid) {
case 1:
return new MetafileVersion(ec, eid, l, in);
case 2:
return new MetafileDescription(ec, eid, l, in);
case 3:
return new DummyCommand(ec, eid, l, in, "VDC Type");
case 4:
return new DummyCommand(ec, eid, l, in, "Integer Precision");
case 5:
return new DummyCommand(ec, eid, l, in, "Real Precision");
case 6:
return new DummyCommand(ec, eid, l, in, "Index Precision");
case 7:
return new DummyCommand(ec, eid, l, in, "Color Precision");
case 8:
return new DummyCommand(ec, eid, l, in, "Color Index Precision");
case 9:
return new DummyCommand(ec, eid, l, in, "Maximum Color Index");
case 10:
return new DummyCommand(ec, eid, l, in, "Color Value Extent");
case 11:
return new MetafileElementList(ec, eid, l, in);
case 12:
return new DummyCommand(ec, eid, l, in, "Metafile Defaults Replacement");
case 13:
return new FontList(ec, eid, l, in);
case 14:
return new DummyCommand(ec, eid, l, in, "Character Set List");
case 15:
return new DummyCommand(ec, eid, l, in, "Character Coding Announcer");
case 16:
return new DummyCommand(ec, eid, l, in, "Name Precision");
case 17:
return new DummyCommand(ec, eid, l, in, "Maximum VDC Extent");
case 18:
return new DummyCommand(ec, eid, l, in, "Segment Priority Extent");
case 19:
return new ColorModel(ec, eid, l, in);
case 20:
return new DummyCommand(ec, eid, l, in, "Color Calibration");
case 21:
return new DummyCommand(ec, eid, l, in, "Font Properties");
case 22:
return new DummyCommand(ec, eid, l, in, "Glyph Mapping");
case 23:
return new DummyCommand(ec, eid, l, in, "Symbol Library List");
case 24:
return new DummyCommand(ec, eid, l, in, "Picture Directory");
default:
break;
}
break;
// Picture Descriptor Elements
case 2:
switch (eid) {
case 1:
return new DummyCommand(ec, eid, l, in, "Scaling Mode");
case 2:
return new ColorSelectionMode(ec, eid, l, in);
case 3:
return new LineWidthMode(ec, eid, l, in);
case 4:
return new DummyCommand(ec, eid, l, in, "Marker Size Specification Mode");
case 5:
return new EdgeWidthMode(ec, eid, l, in);
case 6:
return new VDCExtent(ec, eid, l, in);
case 7:
return new DummyCommand(ec, eid, l, in, "Background Color");
case 8:
return new DummyCommand(ec, eid, l, in, "Device Viewport");
case 9:
return new DummyCommand(ec, eid, l, in, "Device Viewport Specification Mode");
case 10:
return new DummyCommand(ec, eid, l, in, "Device Viewport Mapping");
case 11:
return new DummyCommand(ec, eid, l, in, "Line Representation");
case 12:
return new DummyCommand(ec, eid, l, in, "Marker Representation");
case 13:
return new DummyCommand(ec, eid, l, in, "Text Representation");
case 14:
return new DummyCommand(ec, eid, l, in, "Fill Representation");
case 15:
return new DummyCommand(ec, eid, l, in, "Edge Representation");
case 16:
return new DummyCommand(ec, eid, l, in, "Interior Style Specification Mode");
case 17:
return new DummyCommand(ec, eid, l, in, "Line and Edge Type Definition");
case 18:
return new DummyCommand(ec, eid, l, in, "Hatch Style Definition");
case 19:
return new DummyCommand(ec, eid, l, in, "Geometric Pattern Definition");
case 20:
return new DummyCommand(ec, eid, l, in, "Application Structure Directory");
default:
break;
}
break;
// Control Elements
case 3:
switch (eid) {
case 1:
return new DummyCommand(ec, eid, l, in, "VDC Integer Precision");
case 2:
return new DummyCommand(ec, eid, l, in, "VDC Real Precision");
case 3:
return new DummyCommand(ec, eid, l, in, "Auxiliary Color");
case 4:
return new DummyCommand(ec, eid, l, in, "Transparency");
case 5:
return new DummyCommand(ec, eid, l, in, "Clip Rectangle");
case 6:
return new DummyCommand(ec, eid, l, in, "Clip Indicator");
case 7:
return new DummyCommand(ec, eid, l, in, "Line Clipping Mode");
case 8:
return new DummyCommand(ec, eid, l, in, "Marker Clipping Mode");
case 9:
return new DummyCommand(ec, eid, l, in, "Edge Clipping Mode");
case 10:
return new DummyCommand(ec, eid, l, in, "New Region");
case 11:
return new DummyCommand(ec, eid, l, in, "Save Primitive Context");
case 12:
return new DummyCommand(ec, eid, l, in, "Restore Primitive Context");
case 17:
return new DummyCommand(ec, eid, l, in, "Protection Region Indicator");
case 18:
return new DummyCommand(ec, eid, l, in, "Generalized Text Path Mode");
case 19:
return new DummyCommand(ec, eid, l, in, "Mitre Limit");
case 20:
return new DummyCommand(ec, eid, l, in, "Transparent Cell Color");
default:
break;
}
break;
// Graphical Primitive Elements
case 4:
switch (eid) {
case 1:
return new PolylineElement(ec, eid, l, in);
case 2:
return new DummyCommand(ec, eid, l, in, "Disjoint Polyline");
case 3:
return new DummyCommand(ec, eid, l, in, "Polymarker");
case 4:
return new TextElement(ec, eid, l, in);
case 5:
return new DummyCommand(ec, eid, l, in, "Text");
case 6:
return new DummyCommand(ec, eid, l, in, "Restricted Text");
case 7:
return new PolygonElement(ec, eid, l, in);
case 8:
return new DummyCommand(ec, eid, l, in, "Append Text");
case 9:
return new DummyCommand(ec, eid, l, in, "Cell Array");
case 10:
return new DummyCommand(ec, eid, l, in, "Generalized Drawing Primitive");
case 11:
return new RectangleElement(ec, eid, l, in);
case 12:
return new CircleElement(ec, eid, l, in);
case 13:
return new DummyCommand(ec, eid, l, in, "Circular Arc Point");
case 14:
return new DummyCommand(ec, eid, l, in, "Circular Arc 3 Point Close");
case 15:
return new CircularArcElement(ec, eid, l, in);
case 16:
return new CircularArcClosedElement(ec, eid, l, in);
case 17:
return new EllipseElement(ec, eid, l, in);
case 18:
return new EllipticalArcElement(ec, eid, l, in);
case 19:
return new EllipticalArcClosedElement(ec, eid, l, in);
case 20:
return new DummyCommand(ec, eid, l, in, "Circular Arc Center Reversed");
case 21:
return new DummyCommand(ec, eid, l, in, "Connecting Edge");
case 22:
return new DummyCommand(ec, eid, l, in, "Hyperbolic Arc");
case 23:
return new DummyCommand(ec, eid, l, in, "Parabolic Arc");
case 24:
return new DummyCommand(ec, eid, l, in, "Non-Uniform B-Spline");
case 25:
return new DummyCommand(ec, eid, l, in, "Non-Uniform Rational B-Spline");
case 26:
return new DummyCommand(ec, eid, l, in, "Polybezier");
case 27:
return new DummyCommand(ec, eid, l, in, "Polysymbol");
case 28:
return new DummyCommand(ec, eid, l, in, "Bitonal Tile");
case 29:
return new DummyCommand(ec, eid, l, in, "Tile");
default:
break;
}
break;
// Attribute Elements
case 5:
switch (eid) {
case 1:
return new DummyCommand(ec, eid, l, in, "Line Bundle Index");
case 2:
return new LineType(ec, eid, l, in);
case 3:
return new LineWidth(ec, eid, l, in);
case 4:
return new LineColor(ec, eid, l, in);
case 5:
return new DummyCommand(ec, eid, l, in, "Marker Bundle Index");
case 6:
return new DummyCommand(ec, eid, l, in, "Marker Type");
case 7:
return new DummyCommand(ec, eid, l, in, "Marker Size");
case 8:
return new DummyCommand(ec, eid, l, in, "Marker Color");
case 9:
return new DummyCommand(ec, eid, l, in, "Text Bundle Index");
case 10:
return new TextFontIndex(ec, eid, l, in);
case 11:
return new DummyCommand(ec, eid, l, in, "Text Precision");
case 12:
return new DummyCommand(ec, eid, l, in, "Character Expansion Factor");
case 13:
return new DummyCommand(ec, eid, l, in, "Character Spacing");
case 14:
return new TextColor(ec, eid, l, in);
case 15:
return new CharacterHeight(ec, eid, l, in);
case 16:
return new DummyCommand(ec, eid, l, in, "Character Orientation");
case 17:
return new DummyCommand(ec, eid, l, in, "Text Path");
case 18:
return new DummyCommand(ec, eid, l, in, "Text Alignment");
case 19:
return new DummyCommand(ec, eid, l, in, "Character Set Index");
case 20:
return new DummyCommand(ec, eid, l, in, "Alternate Character Set Index");
case 21:
return new DummyCommand(ec, eid, l, in, "Fill Bundle Index");
case 22:
return new InteriorStyle(ec, eid, l, in);
case 23:
return new FillColor(ec, eid, l, in);
case 24:
return new DummyCommand(ec, eid, l, in, "Hatch Index");
case 25:
return new DummyCommand(ec, eid, l, in, "Pattern Index");
case 26:
return new DummyCommand(ec, eid, l, in, "Edge Bundle Index");
case 27:
return new EdgeType(ec, eid, l, in);
case 28:
return new EdgeWidth(ec, eid, l, in);
case 29:
return new EdgeColor(ec, eid, l, in);
case 30:
return new EdgeVisibility(ec, eid, l, in);
case 31:
return new DummyCommand(ec, eid, l, in, "Fill Reference Point");
case 32:
return new DummyCommand(ec, eid, l, in, "Pattern Table");
case 33:
return new DummyCommand(ec, eid, l, in, "Pattern Size");
case 34:
return new ColorTable(ec, eid, l, in);
case 35:
return new DummyCommand(ec, eid, l, in, "Aspect Source Flags");
case 36:
return new DummyCommand(ec, eid, l, in, "Pick Indentifier");
case 37:
return new DummyCommand(ec, eid, l, in, "Line Cap");
case 38:
return new DummyCommand(ec, eid, l, in, "Line Join");
case 39:
return new DummyCommand(ec, eid, l, in, "Line Type Continuation");
case 40:
return new DummyCommand(ec, eid, l, in, "Line Type Initial Offset");
case 41:
return new DummyCommand(ec, eid, l, in, "Text Score Type");
case 42:
return new DummyCommand(ec, eid, l, in, "Restricted Text Type");
case 43:
return new DummyCommand(ec, eid, l, in, "Interpolated Interior");
case 44:
return new DummyCommand(ec, eid, l, in, "Edge Cap");
case 45:
return new DummyCommand(ec, eid, l, in, "Edge Join");
case 46:
return new DummyCommand(ec, eid, l, in, "Edge Type Continuation");
case 47:
return new DummyCommand(ec, eid, l, in, "Edge Type Initial Offset");
case 48:
return new DummyCommand(ec, eid, l, in, "Symbol Library Index");
case 49:
return new DummyCommand(ec, eid, l, in, "Symbol Color");
case 50:
return new DummyCommand(ec, eid, l, in, "Symbol Size");
case 51:
return new DummyCommand(ec, eid, l, in, "Symbol Orientation");
default:
break;
}
break;
// Escape Element
case 6:
break;
// External Elements
case 7:
break;
// Segment Control and Segment Attribute Elements
case 8:
break;
// Application Structure Descriptor Elements
case 9:
switch (eid) {
case 1:
return new ApplicationStructureAttribute(ec, eid, l, in);
default:
break;
}
break;
default:
break;
}
if (logger.isLoggable(Level.FINE)) {
logger.fine("Ignored Opcode: " + ec + "/" + eid);
}
return new Command(ec, eid, l, in);
}
public Object clone() {
try {
return super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return null;
}
}