
edu.nps.moves.siso.EBVReaderCsharp Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of dis-enums Show documentation
Show all versions of dis-enums Show documentation
An open source implementation of the Distributed Interactive Simulation (DIS) IEEE-1278 protocol
The newest version!
package edu.nps.moves.siso;
import java.io.*;
import java.util.*;
import javax.xml.bind.*;
import edu.nps.moves.siso.jaxb.*;
/**
* Reads the SISO EBV XML document and turns it into java enumeration objects.
* The SISO EBV document is available (as of this writing) at the SISO enum
* mailing list, http://discussions.sisostds.org/default.asp?action=10&fid=31
*
*
* @author DMcG, Jason Nelson
* Modified by Peter Smith to output C#
* Modified by Zvonko Bostjancic ([email protected]) to output better C#
*/
public class EBVReaderCsharp
{
/** Location of EBV document. This should match up with the schema available
* in the data directory. JAXB was used to generate the classes in
* edu.nps.moves.siso.jaxb, which is used to parse and databind the
* xml document--if the schema changes, you'll have to regenerate those
* classes.
*/
public static final String EBV_XML_DOCUMENT = "data/siso-std-010.xml";
public static final Hashtable sisoToObjectName = new Hashtable();
public static final Hashtable> sisoObjectValueNames = new Hashtable>();
public static final Hashtable sisoToNamespaces = new Hashtable();
private static void loadSisoObjectNames()
{
sisoToObjectName.put("pduheader.protocolversion", "Protocol Version");
sisoToObjectName.put("pduheader.pdutype", "Pdu Type");
sisoToObjectName.put("pduheader.protocolfamily", "Protocol Family");
sisoToObjectName.put("es.forceid", "Entity Force Id");
sisoToObjectName.put("es.type.kind", "Entity Kind");
sisoToObjectName.put("es.type.kind.1.domain", "Platform");
sisoToObjectName.put("es.type.kind.1.domain.1.cat", "Land Platform");
sisoToObjectName.put("es.type.kind.1.domain.2.cat", "Air Platform");
sisoToObjectName.put("es.type.kind.1.domain.3.cat", "Surface Platform");
sisoToObjectName.put("es.type.kind.1.domain.4.cat", "Subsufrace Platform");
sisoToObjectName.put("es.type.kind.1.domain.5.cat", "Space Platform");
sisoToObjectName.put("es.type.kind.2.domain", "Munition");
sisoToObjectName.put("es.type.kind.2.cat", "Munition Category");
sisoToObjectName.put("es.type.225.kind.3.subcat", "US Weapons for Life Forms");
sisoToObjectName.put("es.type.222.kind.3.suCommunicationTypebcat", "CIS Weapons for Life Forms");
sisoToObjectName.put("es.type.224.kind.3.subcat", "U.K. Weapons for Life Forms");
sisoToObjectName.put("es.type.71.kind.3.subcat", "French Weapons for Life Forms");
sisoToObjectName.put("es.type.78.kind.3.subcat", "German Weapons for Life Forms");
sisoToObjectName.put("es.type.kind.4.subcat", "Environmental Subcategory");
sisoToObjectName.put("es.type.kind.7.cat", "Radio Category");
sisoToObjectName.put("es.type.kind.7.version", "Radio Nomenclature Version");
sisoToObjectName.put("es.type.kind.7.nomenclature", "Radio Nomenclature");
sisoToObjectName.put("es.type.kind.8.domain.2.cat", "Expendable Air Category");
sisoToObjectName.put("es.type.kind.8.domain.3.cat", "Expendable Surface Category");
sisoToObjectName.put("es.type.kind.8.domain.4.cat", "Expendable Subsurface Category");
sisoToObjectName.put("es.type.kind.9.cat", "Sensor Emitter Category");
sisoToObjectName.put("es.appear.platform.land", "Land Platform Appearance");
sisoToObjectName.put("es.appear.platform.air", "Air Platform Appearance");
sisoToObjectName.put("es.appear.platform.surface", "Surface Platform Appearance");
sisoToObjectName.put("es.appear.platform.subsurface", "Subsurface Platform Appearance");
sisoToObjectName.put("es.appear.platform.space", "Space Platform Appearance");
sisoToObjectName.put("es.appear.munition", "Munition Appearance");
sisoToObjectName.put("es.appear.lifeform", "Life Form Appearance");
sisoToObjectName.put("es.appear.environmental", "Environmental Appearance");
sisoToObjectName.put("es.appear.cultural", "Cultural Appearance");
sisoToObjectName.put("es.appear.supplies", "Supplies Appearance");
sisoToObjectName.put("es.appear.radios", "Radios Appearance");
sisoToObjectName.put("es.appear.expendables", "Expandables Appearance");
sisoToObjectName.put("es.appear.sensoremitter", "Sensor Emitter Appearance");
sisoToObjectName.put("es.dra", "Dead Reckoning Algorithm");
sisoToObjectName.put("es.markingtext", "Entity Marking Text");
sisoToObjectName.put("es.markingtext.cctt.div", "Army Marking Division Corps Designation");
sisoToObjectName.put("es.markingtext.cctt.1cavunit", "Army Marking High Level Unit For 1st Cavalry");
sisoToObjectName.put("es.markingtext.cctt.1infunit", "Army Marking High Level Unit For 1st Infantry");
sisoToObjectName.put("es.markingtext.cctt.company", "Army Marking Company");
sisoToObjectName.put("es.markingtext.cctt.platoon", "Army Marking Platoon");
sisoToObjectName.put("es.markingtext.cctt.vehicle", "Army Marking Vehicle");
sisoToObjectName.put("es.markingtext.cctt.symbol1", "Army Marking Marking Codes");
sisoToObjectName.put("es.markingtext.cctt.symbol2", "Army Marking Platoon Codes");
sisoToObjectName.put("es.markingtext.chevron.symbol", "Digit Chevron Marking Codes");
sisoToObjectName.put("es.capabilities", "Entity Capabilities");
sisoToObjectName.put("es.vp.type", "Parameter Type Designator");
sisoToObjectName.put("es.vp.type.1.attached", "Attached Parts");
sisoToObjectName.put("es.vp.type.0.articulated.offset", "Articulated Part Offset");
sisoToObjectName.put("es.vp.type.0.articulated.index", "Articulated Part Index");
sisoToObjectName.put("warfare.burstdescriptor.warhead", "Warhead");
sisoToObjectName.put("warfare.burstdescriptor.fuse", "Fuse");
sisoToObjectName.put("warfare.detonationresult", "Detonation Result");
sisoToObjectName.put("log.servicerequest", "Service Request Type");
sisoToObjectName.put("log.repaircomplete.general", "General Repair Code");
sisoToObjectName.put("log.repaircomplete.drivetrain", "Drive Train Repair Code");
sisoToObjectName.put("log.repaircomplete.hull", "Hull Airframe Body Repair Code");
sisoToObjectName.put("log.repaircomplete.environment", "Interfaces With Environment Repair Code");
sisoToObjectName.put("log.repaircomplete.weapons", "Weapon Repair Code");
sisoToObjectName.put("log.repaircomplete.fuelsystem", "Fuel System Repair Code");
sisoToObjectName.put("log.repaircomplete.electronics", "Electronics Repair Code");
sisoToObjectName.put("log.repaircomplete.lifesupport", "Life Support Repair Code");
sisoToObjectName.put("log.repaircomplete.hydraulics", "Hydraulic Repair Code");
sisoToObjectName.put("log.repaircomplete.auxilary", "Auxilary Craft Repair Code");
sisoToObjectName.put("log.repairresponse", "Response Result Code");
sisoToObjectName.put("simman.datumid", "Datum Specification Record");
sisoToObjectName.put("simman.stop.reason", "Stop Freeze Reason");
sisoToObjectName.put("simman.stop.frozenbehavior", "Frozen Behavior");
sisoToObjectName.put("simman.ack.ackflag", "Acknowledge Flag");
sisoToObjectName.put("simman.ack.responseflag", "Response Flag");
sisoToObjectName.put("simman.actionrequest.actionid", "Action Id");
sisoToObjectName.put("simman.actionresponse.status", "Action Response Request Status");
sisoToObjectName.put("simman.eventreport.eventtype", "Event Type");
sisoToObjectName.put("simman.reliability.service", "Required Reliability Service");
sisoToObjectName.put("der.emission.name.electro", "Electromagnetic Emitters");
sisoToObjectName.put("der.emission.name.acoustic", "Acoustic Emitters");
sisoToObjectName.put("der.emission.name.other", "Other Emitters");
sisoToObjectName.put("der.emission.function", "Emission Function");
sisoToObjectName.put("der.emission.beamfunction", "Emission Beam Function");
sisoToObjectName.put("der.emission.stateupdate", "State Update Indicator");
sisoToObjectName.put("der.emission.hdtj", "High Density Track Or Jam");
sisoToObjectName.put("der.designator.codename", "Designator Code Name");
sisoToObjectName.put("der.designator.code", "Designator Code");
sisoToObjectName.put("der.iff.type", "System Type");
sisoToObjectName.put("der.iff.name", "System Name");
sisoToObjectName.put("der.iff.mode", "System Mode");
sisoToObjectName.put("der.iff.fop.status", "System Status");
sisoToObjectName.put("der.iff.infolayers", "Information Layers");
sisoToObjectName.put("der.iff.layerspecific", "Layer Specific Information");
sisoToObjectName.put("der.iff.type.1.changeoptions", "Type 1 Change Options");
sisoToObjectName.put("der.iff.type.1.fop.param1", "Type 1 Parameter 1 Mode 1 Code Status");
sisoToObjectName.put("der.iff.type.1.fop.param2", "Type 1 Parameter 2 Mode 2 Code Status");
sisoToObjectName.put("der.iff.type.1.fop.param3", "Type 1 Parameter 3 Mode 3 Code Status");
sisoToObjectName.put("der.iff.type.1.fop.param4", "Type 1 Parameter 4 Mode 4 Code Status");
sisoToObjectName.put("der.iff.type.1.fop.param5", "Type 1 Parameter 5 Mode C Code Status");
sisoToObjectName.put("der.iff.type.1.fop.param6", "Type 1 Parameter 6 Mode S Code Status");
sisoToObjectName.put("der.iff.type.1.fop.modifier", "Type 1 Modifier");
sisoToObjectName.put("der.iff.type.1.fop.altp4", "Type 1 Alternate Parameter 4");
sisoToObjectName.put("der.iff.type.1.sop.param1", "Type 1 Operational Parameter 1");
sisoToObjectName.put("der.iff.type.1.sop.param2", "Type 1 Operational Parameter 2");
sisoToObjectName.put("der.iff.type.2.changeoptions", "Type 2 Change Options");
sisoToObjectName.put("der.iff.type.2.fop.param1", "Type 2 Parameter 1 Mode 1 Interrogator Status");
sisoToObjectName.put("der.iff.type.2.fop.param2", "Type 2 Parameter 2 Mode 2 Interrogator Status");
sisoToObjectName.put("der.iff.type.2.fop.param3", "Type 2 Parameter 3 Mode 3 Interrogator Status");
sisoToObjectName.put("der.iff.type.2.fop.param4", "Type 2 Parameter 4 Mode 4 Interrogator Status");
sisoToObjectName.put("der.iff.type.2.fop.param5", "Type 2 Parameter 5 Mode C Interrogator Status");
sisoToObjectName.put("der.iff.type.2.fop.param6", "Type 2 Parameter 6 Mode S Code Status");
sisoToObjectName.put("der.iff.type.2.fop.modifier", "Type 2 Modifier");
sisoToObjectName.put("der.iff.type.2.fop.altp4", "Type 2 Alternate Parameter 4");
sisoToObjectName.put("der.iff.type.2.sop.param1", "Type 2 Operational Parameter 1");
sisoToObjectName.put("der.iff.type.2.sop.param2", "Type 2 Operational Parameter 2");
sisoToObjectName.put("der.iff.type.3.changeoptions", "Type 3 Change Options");
sisoToObjectName.put("der.iff.type.3.fop.param1", "Type 3 Parameter 1 Mode 1 Code Status");
sisoToObjectName.put("der.iff.type.3.fop.param2", "Type 3 Parameter 2 Mode 2 Code Status");
sisoToObjectName.put("der.iff.type.3.fop.param3", "Type 3 Parameter 3 Mode 3 Code Status");
sisoToObjectName.put("der.iff.type.3.fop.param4", "Type 3 Parameter 4 Mode 4 Code Status");
sisoToObjectName.put("der.iff.type.3.fop.param5", "Type 3 Parameter 5 Mode C Code Status");
sisoToObjectName.put("der.iff.type.3.fop.param6", "Type 3 Parameter 6 Mode 1 Code Status");
sisoToObjectName.put("der.iff.type.3.fop.modifier", "Type 3 Modifier");
sisoToObjectName.put("der.iff.type.3.fop.altp4", "Type 3 Alternate Parameter 4");
sisoToObjectName.put("der.iff.type.3.sop.param1", "Type 3 Operational Parameter 1");
sisoToObjectName.put("der.iff.type.3.sop.param2", "Type 3 Operational Parameter 2");
sisoToObjectName.put("der.iff.type.4.changeoptions", "Type 4 Change Options");
sisoToObjectName.put("der.iff.type.4.fop.param1", "Type 4 Parameter 1");
sisoToObjectName.put("der.iff.type.4.fop.param2", "Type 4 Parameter 2");
sisoToObjectName.put("der.iff.type.4.fop.param3", "Type 4 Parameter 3");
sisoToObjectName.put("der.iff.type.4.fop.param4", "Type 4 Parameter 4");
sisoToObjectName.put("der.iff.type.4.fop.param5", "Type 4 Parameter 5");
sisoToObjectName.put("der.iff.type.4.fop.param6", "Type 4 Parameter 6");
sisoToObjectName.put("der.iff.type.4.fop.modifier", "Type 4 Modifier");
sisoToObjectName.put("der.iff.type.4.fop.altp4", "Type 4 Alternate Parameter 4");
sisoToObjectName.put("der.iff.type.4.sop.param1", "Type 4 Operational Parameter 1");
sisoToObjectName.put("der.iff.type.4.sop.param2", "Type 4 Operational Parameter 2");
sisoToObjectName.put("der.iff.type.5.changeoptions", "Type 5 Change/Options");
sisoToObjectName.put("der.iff.type.5.fop.param1", "Type 5 Parameter 1 - RRB Response");
sisoToObjectName.put("der.iff.type.5.fop.param2", "Type 5 Parameter 2");
sisoToObjectName.put("der.iff.type.5.fop.param3", "Type 5 Parameter 3");
sisoToObjectName.put("der.iff.type.5.fop.param4", "Type 5 Parameter 4");
sisoToObjectName.put("der.iff.type.5.fop.param5", "Type 5 Parameter 5");
sisoToObjectName.put("der.iff.type.5.fop.param6", "Type 5 Parameter 6");
sisoToObjectName.put("der.iff.type.5.fop.modifier", "Type 5 Modifier");
sisoToObjectName.put("der.iff.type.5.fop.altp4", "Type 5 Alternate Parameter 4");
sisoToObjectName.put("der.iff.type.5.sop.param1", "Type 5 Operational Parameter 1");
sisoToObjectName.put("der.iff.type.5.sop.param2", "Type 5 Operational Parameter 2");
sisoToObjectName.put("der.ua.statechangeupdate", "State Change Update Indicator");
sisoToObjectName.put("der.ua.systemname", "System Name");
sisoToObjectName.put("der.ua.function", "Emitter Function");
sisoToObjectName.put("der.ua.activeparameterindex", "Active Emission Parameter Index");
sisoToObjectName.put("der.ua.scanpattern", "Scan Pattern");
sisoToObjectName.put("der.ua.passiveparameterindex", "Passive Parameter Index");
sisoToObjectName.put("der.ua.ppcfg", "Propulsion Plant Configuration");
sisoToObjectName.put("der.ua.apaparameterindex", "Additional Passive Activity Parameter Index");
sisoToObjectName.put("der.sees.power.helicopters", "Helicopter Engine Power");
sisoToObjectName.put("der.sees.power.tanks", "Tank Engine Power");
sisoToObjectName.put("der.sees.power.aircraft", "Aircraft Engine Power");
sisoToObjectName.put("radio.tx.mod.spreadspectrum", "Spread Spectrum");
sisoToObjectName.put("radio.tx.mod.major", "Major Modulation");
sisoToObjectName.put("radio.tx.mod.major.1.detail", "Detailed modulation for amplitude modulation");
sisoToObjectName.put("radio.tx.mod.major.2.detail", "Detailed modulation for amplitude and angle modulation");
sisoToObjectName.put("radio.tx.mod.major.3.detail", "Detailed modulation for angle modulation");
sisoToObjectName.put("radio.tx.mod.major.4.detail", "Detailed modulation for combination modulation");
sisoToObjectName.put("radio.tx.mod.major.5.detail", "Detailed modulation for pulse modulation");
sisoToObjectName.put("radio.tx.mod.major.6.detail", "Detailed modulation for unmodulated modulation");
sisoToObjectName.put("radio.tx.mod.major.7.detail", "Detailed Modulation for Carrier Phase Shift");
sisoToObjectName.put("radio.tx.mod.system", "Transmitter Modulation System Type");
sisoToObjectName.put("radio.tx.state", "Transmit State");
sisoToObjectName.put("radio.tx.inputsource", "Input Source");
sisoToObjectName.put("radio.tx.cryptosystem", "Crypto System");
sisoToObjectName.put("radio.tx.antennapatterntype", "Antenna Pattern Type");
sisoToObjectName.put("radio.tx.referencesystem", "Reference System");
sisoToObjectName.put("radio.tx.modparam.cctt", "CCTT SINCGARS Modulation Parameters");
sisoToObjectName.put("radio.tx.param.cctt.start", "Start of Message");
sisoToObjectName.put("radio.tx.param.cctt.clear", "Clear Channel");
sisoToObjectName.put("radio.tx.modparam.jtids", "JTIDS/MIDS Modulation Parameters");
sisoToObjectName.put("radio.tx.param.jtids.mode1", "Jtids Transmitting Terminal Primary Mode");
sisoToObjectName.put("radio.tx.param.jtids.mode2", "Jtids Transmitting Terminal Secondary Mode");
sisoToObjectName.put("radio.tx.param.jtids.sync", "Jtids Synchronization State");
sisoToObjectName.put("radio.tx.encoding", "Radio signal encoding");
sisoToObjectName.put("radio.tx.protocolid", "User Protocol Identification Number");
sisoToObjectName.put("radio.tx.tdltype", "TDL Type");
sisoToObjectName.put("radio.rx.state", "Receiver State");
sisoToObjectName.put("radio.ic.controltype", "Control Type");
sisoToObjectName.put("radio.ic.commtype", "Communications Type");
sisoToObjectName.put("radio.ic.command", "Command");
sisoToObjectName.put("radio.ic.transmitstate", "Transmit Line State");
sisoToObjectName.put("radio.ic.deststate", "Destination Line State Command");
sisoToObjectName.put("radio.ic.param.type", "Record type");
sisoToObjectName.put("radio.ic.paramrecords.dest", "Entity Destination record");
sisoToObjectName.put("radio.ic.paramrecords.groupdest", "Group Destination record");
sisoToObjectName.put("radio.ic.paramrecords.gassign", "Group Assignment record");
sisoToObjectName.put("entity.collision.type", "Entity Collision Type");
sisoToObjectName.put("entity.mine.appear", "Appearance");
sisoToObjectName.put("entity.mine.datafilter", "Data Filter");
sisoToObjectName.put("entity.mine.fusing", "Fusing");
sisoToObjectName.put("entity.mine.sensortype", "Sensor Types");
sisoToObjectName.put("entity.mine.sensortype.1.subcat", "Optical Sensor");
sisoToObjectName.put("entity.mine.sensortype.2.subcat", "Flir Sensor");
sisoToObjectName.put("entity.mine.sensortype.3.subcat", "Radar Sensor");
sisoToObjectName.put("entity.mine.sensortype.4.subcat", "Magnetic Sensor");
sisoToObjectName.put("entity.mine.sensortype.5.subcat", "Laser Sensor");
sisoToObjectName.put("entity.mine.sensortype.6.subcat", "Sonar Sensor");
sisoToObjectName.put("entity.mine.sensortype.7.subcat", "Physical Sensor");
sisoToObjectName.put("entity.mine.sensortype.8.subcat", "Multispectral Sensor");
sisoToObjectName.put("entity.mine.paintscheme", "Paint Scheme");
sisoToObjectName.put("entity.mine.protocolmode", "Protocol Mode");
sisoToObjectName.put("eman.aggregate.state", "Aggregate State");
sisoToObjectName.put("eman.aggregate.formation", "Aggregate Formation");
sisoToObjectName.put("eman.aggregate.type.kind", "Aggregate Kind");
sisoToObjectName.put("eman.aggregate.type.subcategory", "Aggregate Subcategory");
sisoToObjectName.put("eman.aggregate.type.specific", "Aggregate Specific");
sisoToObjectName.put("eman.ispartof.nature", "Part Of Nature");
sisoToObjectName.put("eman.ispartof.position", "Part Of Position");
sisoToObjectName.put("eman.ispartof.stationname", "Part Of Station Name");
sisoToObjectName.put("eman.isgroupof.category", "Group Of Grouped Entity Category");
sisoToObjectName.put("eman.isgroupof.reststatus", "Group Of Rest Status");
sisoToObjectName.put("eman.isgroupof.record1", "Grouped Entity Description Record 1");
sisoToObjectName.put("eman.isgroupof.record2", "Grouped Entity Description Record 2");
sisoToObjectName.put("eman.isgroupof.record3", "Grouped Entity Description Record 3");
sisoToObjectName.put("eman.isgroupof.record4", "Grouped Entity Description Record 4");
sisoToObjectName.put("eman.isgroupof.record5", "Grouped Entity Description Record 5");
sisoToObjectName.put("eman.isgroupof.record6", "Grouped Entity Description Record 6");
sisoToObjectName.put("eman.isgroupof.record7", "Grouped Entity Description Record 7");
sisoToObjectName.put("eman.isgroupof.record8", "Grouped Entity Description Record 8");
sisoToObjectName.put("eman.isgroupof.record9", "Grouped Entity Description Record 9");
sisoToObjectName.put("eman.tc.transfertype", "Transfer Type");
sisoToObjectName.put("env.obj.objecttype.kind", "Object Kind");
sisoToObjectName.put("env.obj.appear.general", "General Appearance");
sisoToObjectName.put("env.obj.appear.point.building", "Building Rubble Stationary Bridge and AVLB Appearance");
sisoToObjectName.put("env.obj.appear.point.breach", "Log crib, Abatis, Vehicle defilade, and Infantry fighting position");
sisoToObjectName.put("env.obj.appear.point.burst", "Air burst And Ground burst");
sisoToObjectName.put("env.obj.appear.point.crater", "Crater");
sisoToObjectName.put("env.obj.appear.point.bridge", "Ribbon Bridge");
sisoToObjectName.put("env.obj.appear.linear.tankditch", "Tank ditch, and Concertina Wire");
sisoToObjectName.put("env.obj.appear.linear.exhaust", "Exhaust smoke");
sisoToObjectName.put("env.obj.appear.linear.marker", "Minefield Lane Marker");
sisoToObjectName.put("env.obj.appear.linear.breach", "Breach");
sisoToObjectName.put("env.obj.appear.areal.minefield", "Minefield");
sisoToObjectName.put("env.obj.mod.point", "Point Object State PDU Modification Field");
sisoToObjectName.put("env.obj.mod.linear", "Linear Object State PDU Modification Field");
sisoToObjectName.put("env.obj.mod.areal", "Areal Object State PDU Modification Field");
sisoToObjectName.put("env.gridded.fieldnumber", "Field Number");
sisoToObjectName.put("env.gridded.coordinatesystem", "Coordinate System");
sisoToObjectName.put("env.gridded.constantgrid", "Constant Grid");
sisoToObjectName.put("env.gridded.sampletype", "Sample Type");
sisoToObjectName.put("env.gridded.datarepresentation", "Data Representation Type");
sisoToObjectName.put("env.process.modeltype", "Model Type");
sisoToObjectName.put("env.process.environmentstatus", "Environment Status");
sisoToObjectName.put("env.process.type.geometryrecord", "Environmental Process Types For Geometry Record");
sisoToObjectName.put("env.process.geom.point1", "Point Record 1");
sisoToObjectName.put("env.process.geom.point2", "Point Record 2");
sisoToObjectName.put("env.process.geom.line1", "Line Record 1");
sisoToObjectName.put("env.process.geom.line2", "Line Record 2");
sisoToObjectName.put("env.process.geom.boundingsphere", "Bounding Sphere Record");
sisoToObjectName.put("env.process.geom.sphere1", "Sphere Record 1");
sisoToObjectName.put("env.process.geom.sphere2", "Sphere Record 2");
sisoToObjectName.put("env.process.geom.ellipsoid1", "Ellipsoid Record 1");
sisoToObjectName.put("env.process.geom.ellipsoid2", "Ellipsoid Record 2");
sisoToObjectName.put("env.process.geom.cone1", "Cone Record 1");
sisoToObjectName.put("env.process.geom.cone2", "Cone Record 2");
sisoToObjectName.put("env.process.geom.rect1", "Rectangular Record 1");
sisoToObjectName.put("env.process.geom.rect2", "Rectangular Record 2");
sisoToObjectName.put("env.process.geom.gplume", "Gaussian Plume Record");
sisoToObjectName.put("env.process.geom.gpuff", "Gaussian Puff Record");
sisoToObjectName.put("env.process.geom.uniform", "Uniform Geometry Record");
sisoToObjectName.put("env.process.geom.rect3", "Rectangular Record 3");
sisoToObjectName.put("env.process.type.staterecord", "Environmental Process Types For State Record");
sisoToObjectName.put("env.process.state.combic", "COMBIC State");
sisoToObjectName.put("env.process.state.flare", "Flare State");
}
private static void loadSisoNamespaces()
{
sisoToNamespaces.put("es", "EntityState");
sisoToNamespaces.put("es.type", "EntityState.Type");
sisoToNamespaces.put("es.appear", "EntityState.Appearance");
sisoToNamespaces.put("es.markingtext", "EntityState.Marking");
sisoToNamespaces.put("warfare", "Warfare");
sisoToNamespaces.put("log", "Logistics");
sisoToNamespaces.put("simman", "SimulationManagement");
sisoToNamespaces.put("der", "DistributedEmission");
sisoToNamespaces.put("der.iff", "DistributedEmission.Iff");
sisoToNamespaces.put("der.ua", "DistributedEmission.UnderwaterAcoustic");
sisoToNamespaces.put("radio", "Radio");
sisoToNamespaces.put("radio.tx", "Radio.Transmitter");
sisoToNamespaces.put("radio.ic", "Radio.Intercom");
sisoToNamespaces.put("entity", "Entity.Information");
sisoToNamespaces.put("entity.mine", "Entity.Information.Minefield");
sisoToNamespaces.put("eman", "Entity.Management");
sisoToNamespaces.put("env.obj", "Environment.ObjectState");
sisoToNamespaces.put("env.gridded", "Environment.Gridded");
sisoToNamespaces.put("env.process", "Environment.Process");
}
private static void loadSisoObjectValueNames()
{
Hashtable protocolVersion = new Hashtable();
protocolVersion.put(1, "Version1");
protocolVersion.put(2, "Ieee1278_1993");
protocolVersion.put(3, "Version2ThirdDraft");
protocolVersion.put(4, "Version2FourthDraftRevised");
protocolVersion.put(5, "Ieee1278_1_1995");
protocolVersion.put(6, "Ieee1278_1A_1998");
Hashtable pduType = new Hashtable();
pduType.put(28, "IFF_ATC_NAVAIDS");
Hashtable platformLand = new Hashtable();
platformLand.put(2, "ArmoredFightingVehicle");
platformLand.put(3, "ArmoredUtilityVehicle");
platformLand.put(4, "SelfPropelledArtillery");
platformLand.put(5, "TowedArtillery");
platformLand.put(6, "SmallWheeledUtilityVehicle");
platformLand.put(7, "LargeWheeledUtilityVehicle");
platformLand.put(8, "SmallTrackedUtilityVehicle");
platformLand.put(9, "LargeTrackedUtilityVehicle");
Hashtable platformAir = new Hashtable();
platformAir.put(6, "ElectronicWarfare");
Hashtable platformSubsurface = new Hashtable();
platformSubsurface.put(1, "NuclearBallisticMissile");
platformSubsurface.put(2, "NuclearGuidedMissile");
platformSubsurface.put(3, "NuclearAttackTorpedo");
platformSubsurface.put(4, "ConventionalGuidedMissile");
platformSubsurface.put(5, "ConventionalAttackTorpedoPatrol");
platformSubsurface.put(6, "NuclearAuxiliary");
platformSubsurface.put(7, "ConventionalAuxiliary");
Hashtable munitionDomain = new Hashtable();
platformAir.put(12, "DirectedEnergyWeapon");
Hashtable dra = new Hashtable();
dra.put(1, "Static");
dra.put(2, "DRA_F_P_W");
dra.put(3, "DRA_R_P_W");
dra.put(4, "DRA_R_V_W");
dra.put(5, "DRA_F_W_V");
dra.put(6, "DRA_F_P_B");
dra.put(7, "DRA_R_P_B");
dra.put(8, "DRA_R_V_B");
dra.put(9, "DRA_F_V_B");
Hashtable am = new Hashtable();
am.put(1, "AFSK");
am.put(2, "AM");
am.put(3, "CW");
am.put(4, "DSB");
am.put(5, "ISB");
am.put(6, "LSB");
am.put(7, "SSBFull");
am.put(8, "SSBReduced");
am.put(9, "USB");
am.put(10, "VSB");
Hashtable am2 = new Hashtable();
am2.put(1, "FM");
am2.put(2, "FSK");
am2.put(3, "PM");
Hashtable tmts = new Hashtable();
tmts.put(7, "EPLRS");
tmts.put(8, "JTIDS_MIDS");
Hashtable tmcs = new Hashtable();
tmcs.put(2, "VINSON");
tmcs.put(3, "NarrowSpectrumSecureVoice");
tmcs.put(4, "WideSpectrumSecureVoice");
sisoObjectValueNames.put("pduheader.protocolversion", protocolVersion);
sisoObjectValueNames.put("pduheader.pdutype", pduType);
sisoObjectValueNames.put("es.type.kind.1.domain.1.cat", platformLand);
sisoObjectValueNames.put("es.type.kind.1.domain.2.cat", platformAir);
sisoObjectValueNames.put("es.type.kind.1.domain.4.cat", platformSubsurface);
sisoObjectValueNames.put("es.type.kind.2.domain", munitionDomain);
sisoObjectValueNames.put("es.dra", dra);
sisoObjectValueNames.put("radio.tx.mod.major.1.detail", am);
sisoObjectValueNames.put("radio.tx.mod.major.3.detail", am);
sisoObjectValueNames.put("radio.tx.mod.system", tmts);
sisoObjectValueNames.put("radio.tx.cryptosystem", tmcs);
}
public static void main(String args[])
{
loadSisoObjectNames();
loadSisoObjectValueNames();
loadSisoNamespaces();
try
{
// Parse the EBV XML document
JAXBContext context = JAXBContext.newInstance("edu.nps.moves.siso.jaxb");
Unmarshaller unmarshaller = context.createUnmarshaller();
Ebv data = (Ebv)unmarshaller.unmarshal(new FileInputStream("data/siso-std-010.xml"));
// Retrieve the enumerations
List genericList = data.getEnumOrBitmaskOrCet();
for (int idx = 0; idx < genericList.size(); idx++)
{
GenerictableT gen = genericList.get(idx);
EBVReaderCsharp reader = new EBVReaderCsharp();
String genName = gen.getName();
String cname = gen.getCname();
if (sisoToObjectName.containsKey(gen.getCname()))
{
genName = sisoToObjectName.get(gen.getCname());
}
String enumifiedName = enumifyString(genName);
// For each enumeration in the XML that we are interested in,
// generate a enumeration or struct
if(gen instanceof EnumT)
{
if(cname.equalsIgnoreCase("es.type.country"))
{
System.out.println("Writing country enumeration ...");
reader.writeCountryEnumeration("Country", (EnumT)gen);
}
else
{
System.out.println("Writing standard enumeration " + enumifiedName + " (" + gen.getName() + ") ...");
reader.writeEnumeration(enumifiedName, gen);
}
}
else if (gen instanceof BitmaskT)
{
BitmaskT bm = (BitmaskT)gen;
if (isStruct(bm))
{
//System.out.println("Writing struct " + enumifiedName + " (" + genName + ") ...");
//reader.writeStruct(enumifiedName, bm);
}
else
{
System.out.println("Writing flagged enumeration " + enumifiedName + " (" + genName + ") ...");
reader.writeEnumeration(enumifiedName, gen);
}
}
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
private static Boolean isStruct(BitmaskT bm)
{
List l = bm.getBitmaskrow();
for (int idx = 0; idx < l.size(); idx++)
{
BitmaskrowT row = l.get(idx);
if (row.getId2() != null &&
row.getId2().intValue() > 0 &&
row.getId2().intValue() > row.getId().intValue() &&
(row.isUnused() == null || !row.isUnused()))
{
return true;
}
}
return false;
}
private static String findNamespace(String cname)
{
if (cname != null)
{
// let's check if cname has its own namespace
if (sisoToNamespaces.containsKey(cname))
{
return sisoToNamespaces.get(cname);
}
else
{
// split cname
String[] splits = cname.split("\\.");
// check N, N-1, N-2, ... 3, 2, 1 element of cname
for (int i = splits.length - 1; i > 0; i--)
{
String shorterCname = "";
// join N, N-1, N-2, ... 3, 2, 1 element of cname
for (int j = 0; j < i; j++)
{
shorterCname += splits[j];
if (j < i - 1)
{
shorterCname += ".";
}
}
if (sisoToNamespaces.containsKey(shorterCname))
{
return sisoToNamespaces.get(shorterCname);
}
}
}
}
return "";
}
private void writeEnumeration(String enumerationName, T anEnumeration)
throws java.io.IOException
{
int usedCount = 1;
Set enumNamesUsed = new HashSet();
List l = new ArrayList();
String namespace = "OpenDis.Enumerations";
String additionalNamespace = findNamespace(anEnumeration.getCname());
String enumerationDirectory = "src/main/Csharp/disenum2/"; // default output directory
String baseType = "int"; // default base type is integer
Boolean lastEnumRowWritten = false;
Boolean firstUsed = false;
Boolean isEnum = anEnumeration instanceof EnumT;
Boolean isFlaggedEnum = anEnumeration instanceof BitmaskT;
// if additional namespace is specified, add it to the namespace
// declaration and folder name for the current enum
if (additionalNamespace != null &&
!additionalNamespace.trim().equals(""))
{
namespace += "." + additionalNamespace;
enumerationDirectory += additionalNamespace + "/";
}
// create directory for file (if it does not exist)
File outputDirectory = new File(enumerationDirectory);
if (!outputDirectory.exists())
{
outputDirectory.mkdirs();
}
// initialize file
File outputFile = new File(enumerationDirectory + enumerationName + ".cs");
outputFile.createNewFile();
PrintWriter pw = new PrintWriter(outputFile);
// determine the base data type for the enumeration
if (anEnumeration.getLength() != null)
{
int size = anEnumeration.getLength().intValue();
if (size == 8)
{
baseType = "byte";
}
else if (size == 16)
{
baseType = "ushort";
}
}
// write file headers
writeFileHeaders(pw, false);
// write namespace and enum declaration
writeEnumDeclaration(pw, namespace, enumerationName, anEnumeration, isFlaggedEnum, baseType);
// fill the list of entries
if (isEnum)
{
List rows = ((EnumT)anEnumeration).getEnumrow();
for (int r = 0; r < rows.size(); r++)
{
l.add(rows.get(r));
}
}
else if (isFlaggedEnum)
{
List rows = ((BitmaskT)anEnumeration).getBitmaskrow();
for (int r = 0; r < rows.size(); r++)
{
l.add(rows.get(r));
}
}
// now output the entries as enumeration items
for(int idx = 0; idx < l.size(); idx++)
{
GenericentryT er = l.get(idx);
int enumId, enumValue;
String enumValueName;
// if the entry is unused or deleted, skip
if ((er.isUnused() != null && er.isUnused()) ||
(er.isDeleted() != null && er.isDeleted()))
{
continue;
}
// mark first entry (for output formatting)
Boolean isFirst = firstUsed == false;
firstUsed = true;
// try getting the description
String description = (er.getDescription() == null ? "" : er.getDescription()).trim();
// Some entries in the EBV have missing descriptions. If that's the case, we just
// make up a description; we may get something on the wire with that enumerated
// value, and we want a valid enumeration object to match that, even if we don't
// have a good name or description for it.
if((description == null) || description.equals(""))
{
description = "Missing Description";
}
// add the period
if (!description.endsWith("."))
{
description += ". ";
}
if (isEnum)
{
// generate the name of the enumeration value
enumValueName = enumifyString(description);
// if the value is simple enumeration (not bit mask),
// its value is same as the id so get the ID
enumId = ((EnumrowT)er).getId();
enumValue = enumId;
}
else
{
// bit mask values have description for bit values,
// so get those strings, join them and set them as
// the description for the value.
List er2 = ((BitmaskrowT)er).getEnumrow();
if (!er2.isEmpty())
{
String whenZero = "";
String whenOne = "";
for (int erIdx = 0; erIdx < er2.size(); erIdx++)
{
if (er2.get(erIdx).getId() == 0)
{
whenZero = er2.get(erIdx).getDescription();
}
else if (er2.get(erIdx).getId() == 1)
{
whenOne = er2.get(erIdx).getDescription();
}
}
if (!whenZero.equals("") && !whenOne.equals(""))
{
description = "Set bit means '" + whenOne + "', reset bit means '" + whenZero + "'.";
}
}
// generate the name of the enumeration value
if (((BitmaskrowT)er).getName() != null)
{
enumValueName = enumifyString(((BitmaskrowT)er).getName());
}
else
{
enumValueName = enumifyString(description);
}
// get the enum ID and calculate the value
// value is 1 shifted to the left for N places,
// where N equals the enum ID
enumId = ((BitmaskrowT)er).getId().intValue();
// WARNING: hacks!!
if (anEnumeration.getCname().equals("der.iff.infolayers"))
{
// der.iff.infolayers has wrong IDS!!!!!
if (enumId == 12) enumId = 1;
if (enumId == 13) enumId = 2;
}
enumValue = 1 << enumId;
}
// check for name overrides
if (anEnumeration.getCname() != null &&
sisoObjectValueNames.containsKey(anEnumeration.getCname()) &&
sisoObjectValueNames.get(anEnumeration.getCname()).containsKey(enumId))
{
enumValueName = sisoObjectValueNames.get(anEnumeration.getCname()).get(enumId);
}
if (isEnum)
{
// if this is enum, read meta description from values
// (if any) and add them to description
List meta = ((EnumrowT)er).getMeta();
if (meta != null && !meta.isEmpty())
{
for (int mi = 0; mi < meta.size(); mi++)
{
if (meta.get(mi).getId() != null &&
(meta.get(mi).getId().equalsIgnoreCase("natoid") || meta.get(mi).getId().equalsIgnoreCase("commid")))
{
// fix for enumerations where description is provided as nato reporting name
description = meta.get(mi).getValue();
}
else
{
description += meta.get(mi).getId() + ": " + meta.get(mi).getValue() + ". ";
}
}
}
}
if (isEnum &&
((EnumrowT)er).getId2() != null)
{
int enumValueMax = ((EnumrowT)er).getId2().intValue();
// if there are some reserved enumeration values, don't
// process them
if (description.toLowerCase().contains("reserved"))
{
description += " (values from " + enumValue + " to " + enumValueMax + ").";
}
else
{
if (enumValueMax > enumValue)
{
// FIRST WE HANDLE SPECIAL CASES!
// first and second case: XBDE (HHC X BDE, where X = 1/2/3/4)
// third case: AttachedParts
if (anEnumeration.getCname().equals("es.markingtext.cctt.1cavunit") &&
enumValue == 51)
{
writeEnumValue(pw, "HHC_1_BDE", 51, "HHC 1 BDE", false, false, "");
writeEnumValue(pw, "HHC_2_BDE", 52, "HHC 2 BDE", false, false, "");
writeEnumValue(pw, "HHC_3_BDE", 53, "HHC 3 BDE", false, false, "");
writeEnumValue(pw, "HHC_4_BDE", 54, "HHC 4 BDE", false, false, "");
}
else if (anEnumeration.getCname().equals("es.markingtext.cctt.1infunit") &&
enumValue == 51)
{
writeEnumValue(pw, "HHC_1_BDE", 51, "HHC 1 BDE", false, false, "");
writeEnumValue(pw, "HHC_2_BDE", 52, "HHC 2 BDE", false, false, "");
writeEnumValue(pw, "HHC_3_BDE", 53, "HHC 3 BDE", false, false, "");
writeEnumValue(pw, "HHC_4_BDE", 54, "HHC 4 BDE", false, false, "");
}
else if (anEnumeration.getCname().equals("es.vp.type.1.attached") &&
(enumValue == 1 || enumValue == 512 || enumValue == 640 || enumValue == 768 || enumValue == 906))
{
for (int apidx = enumValue; apidx <= enumValueMax; apidx++)
{
String d = er.getDescription() + " (with id " + apidx + ").";
String n = enumifyString(er.getDescription()) + "_" + apidx;
Boolean last = apidx == enumValueMax && idx == l.size() - 1;
writeEnumValue(pw, n, apidx, d, last, false, "");
lastEnumRowWritten = last;
}
continue;
}
else
{
// default generation
String desc = er.getDescription();
String descriptionBeginning = "Value"; // default
char descFirst = 0;
// ranges are usually defined as "0-9" or "A-F"
// or even "Underlined 0-9"
// take the last three characters (the "range part")
descFirst = desc.charAt(desc.length() - 3);
// if something is before "range part", get it,
// enumify and add to the beginning of the description
if (desc.length() - 3 > 0)
{
descriptionBeginning = enumifyString(desc.substring(0, desc.length() - 3).trim());
}
// foreach value calculate its value
// and determine if it is the last value
for (int ei = enumValue; ei <= enumValueMax; ei++)
{
int val = descFirst + ei - enumValue;
Boolean isLast = enumValue == enumValueMax && idx == l.size() - 1;
try
{
// first we try to parse the integer value
Integer v = Integer.parseInt(String.valueOf((char)val));
description = descriptionBeginning + " " + v;
enumValueName = descriptionBeginning + "_" + v;
}
catch (Exception e)
{
// if integer parsing fails, we have the character range
description = descriptionBeginning + " " + (char)val;
enumValueName = String.valueOf((char)val);
}
// check if already used
if(enumNamesUsed.contains(enumValueName))
{
enumValueName = enumValueName + "_"; // eg M1_RIFLE to M1_RIFLE_22875
}
enumNamesUsed.add(enumValueName);
// write value
writeEnumValue(pw, enumValueName, ei, description, isLast, isFirst && ei == enumValue, "");
lastEnumRowWritten = isLast;
}
}
}
}
}
else
{
// If we've seen this enumeration name before, add some exra text
// onto the end to make it unique
if(enumNamesUsed.contains(enumValueName))
{
enumValueName = enumValueName + "_" + enumValue; // eg M1_RIFLE to M1_RIFLE_22875
usedCount++;
}
enumNamesUsed.add(enumValueName);
Boolean isLast = idx == l.size() - 1;
// write value
writeEnumValue(pw, enumValueName, enumValue, description, isLast, isFirst, "");
lastEnumRowWritten = isLast;
}
}
if (!lastEnumRowWritten)
{
pw.println();
pw.println(" }");
}
pw.println("}");
pw.flush();
pw.close();
// if there is no value added to enum, simply delete file
if (enumNamesUsed.isEmpty())
{
System.out.println(" -> Deleting empty enumeration for '" + enumerationName + "'");
outputFile.delete();
}
}
private static void writeEnumDeclaration(PrintWriter pw, String namespace, String enumerationName, T anEnumeration, Boolean isFlaggedEnum, String baseType) {
pw.println("namespace " + namespace);
pw.println("{");
pw.println(" /// ");
pw.println(" /// Enumeration values for " + enumerationName + " (" + anEnumeration.getCname() + ", " + anEnumeration.getName() + ", ");
pw.println(" /// section " + anEnumeration.getSource() + ")");
pw.println(" /// The enumeration values are generated from the SISO DIS XML EBV document (R35), which was");
pw.println(" /// obtained from http://discussions.sisostds.org/default.asp?action=10&fd=31");
pw.println(" /// ");
pw.println(" /// ");
pw.println(" /// Note that this has two ways to look up an enumerated instance from a value: a fast");
pw.println(" /// but brittle array lookup, and a slower and more garbage-intensive, but safer, method.");
pw.println(" /// if you want to minimize memory use, get rid of one or the other.");
pw.println(" /// ");
pw.println(" [SuppressMessage(\"Microsoft.Naming\", \"CA1702:CompoundWordsShouldBeCasedCorrectly\", Justification = \"Due to SISO standardized naming.\")]");
pw.println(" [SuppressMessage(\"Microsoft.Naming\", \"CA1704:IdentifiersShouldBeSpelledCorrectly\", Justification = \"Due to SISO standardized naming.\")]");
pw.println(" [SuppressMessage(\"Microsoft.Naming\", \"CA1707:IdentifiersShouldNotContainUnderscores\", Justification = \"Due to SISO standardized naming.\")]");
pw.println(" [SuppressMessage(\"Microsoft.Naming\", \"CA1709:IdentifiersShouldBeCasedCorrectly\", Justification = \"Due to SISO standardized naming.\")]");
pw.println(" [Serializable]");
if (isFlaggedEnum)
{
pw.println(" [Flags]");
}
pw.println(" public enum " + enumerationName + " : " + baseType);
pw.println(" {");
}
private static void writeFileHeaders(PrintWriter pw, Boolean includeOpenDisUtilitiesNamespace) {
pw.println("// Copyright 2008-2010. This work is licensed under the BSD license, available at");
pw.println("// http://www.movesinstitute.org/licenses");
pw.println("//");
pw.println("// @author DMcG, Jason Nelson");
pw.println("// Modified for use with C#:");
pw.println("// - Peter Smith (Naval Air Warfare Center - Training Systems Division)");
pw.println("// - Zvonko Bostjancic (Blubit d.o.o. - [email protected])");
pw.println();
pw.println("using System;");
pw.println("using System.ComponentModel;");
pw.println("using System.Diagnostics.CodeAnalysis;");
pw.println("using System.Reflection;");
if (includeOpenDisUtilitiesNamespace)
{
pw.println("using OpenDis.Utilities;");
}
pw.println();
}
private static void writeEnumValue(PrintWriter pw, String enumName, int enumValue, String description, Boolean isLast, Boolean isFirst, String additionalAttributes)
{
if (!isFirst)
{
pw.println(",");
pw.println();
}
description = description.replace("\"", "");
pw.println(" /// ");
pw.println(" /// " + description.trim());
pw.println(" /// ");
pw.println(" [SuppressMessage(\"Microsoft.Naming\", \"CA1702:CompoundWordsShouldBeCasedCorrectly\", Justification = \"Due to SISO standardized naming.\")]");
pw.println(" [SuppressMessage(\"Microsoft.Naming\", \"CA1704:IdentifiersShouldBeSpelledCorrectly\", Justification = \"Due to SISO standardized naming.\")]");
pw.println(" [SuppressMessage(\"Microsoft.Naming\", \"CA1707:IdentifiersShouldNotContainUnderscores\", Justification = \"Due to SISO standardized naming.\")]");
pw.println(" [SuppressMessage(\"Microsoft.Naming\", \"CA1709:IdentifiersShouldBeCasedCorrectly\", Justification = \"Due to SISO standardized naming.\")]");
pw.println(" [Description(\"" + description.trim() + "\")]");
pw.println(additionalAttributes);
pw.print(" " + enumName + " = " + enumValue);
if(isLast)
{
pw.println("");
pw.println(" }");
}
}
/** Special case of country enumeration--we also want the two character internet code
* for the country, eg "US", "UK", "FR", etc. The lookup algorithm for finding the
* country is not perfect.
*
* @param enumerationName
* @param enumerationFile
* @param anEnumeration
*/
private void writeCountryEnumeration(String enumerationName, EnumT anEnumeration)
throws java.io.IOException
{
String enumerationFile = "src/main/Csharp/disenum2/" + enumerationName + ".cs";
File outputFile = new File(enumerationFile);
outputFile.createNewFile();
PrintWriter pw = new PrintWriter(outputFile);
int maxValue = 0;
// Properties file containing the key (two character internet domain name for
// the country) and the value (text description of the country).
Properties internetCountries = new Properties();
FileInputStream fis = new FileInputStream(new File("data/countryCodes.properties"));
internetCountries.load(fis);
// write file headers
writeFileHeaders(pw, true);
// write namespace and enum declaration
writeEnumDeclaration(pw, "OpenDis.Enumerations", enumerationName, anEnumeration, false, "int");
List l = anEnumeration.getEnumrow();
for(int idx = 0; idx < l.size(); idx++)
{
EnumrowT er = l.get(idx);
// mark first entry (for output formatting)
Boolean isFirst = idx == 0;
Boolean isLast = idx == l.size() - 1;
String description = er.getDescription();
String enumValueName = enumifyString(description);
int enumValue = (int)er.getId();
String internetDomainCode = "Unknown";
Set entrySet = internetCountries.entrySet();
Iterator it = entrySet.iterator();
while(it.hasNext())
{
Map.Entry anEntry = (Map.Entry)it.next();
if(anEntry.getValue().equalsIgnoreCase(description))
{
internetDomainCode = anEntry.getKey();
break;
}
}
String additionalAttributes = " [InternetDomainCode(\"" + internetDomainCode + "\")]";
writeEnumValue(pw, enumValueName, enumValue, description, isLast, isFirst, additionalAttributes);
}
pw.println("} "); //End Namespace
pw.flush();
pw.close();
}
public static String camelCaseCapIgnoreUnderscores(String aString) {
StringBuffer stb = new StringBuffer();
if (aString.length() > 0){
stb.append(Character.toUpperCase(aString.charAt(0)));
boolean previousIsSpace = false;
for (int i = 1; i < aString.length(); i++)
{
boolean currentIsSpace = aString.charAt(i) == '_';
if (previousIsSpace)
{
stb.append(Character.toUpperCase(aString.charAt(i)));
}
else if (!currentIsSpace)
{
stb.append(aString.charAt(i));
}
previousIsSpace = currentIsSpace;
}
}
String newString = new String(stb);
//System.out.println(newString);
return newString;
}
/**
* Changes an input string like "Entity State PDU" into "ENTITY_STATE_PDU"
*
* @param text
* @return
*/
private static String enumifyString(String text)
{
if (text != null && !text.equals(""))
{
String enumValue = text.trim();
enumValue = enumValue.replace(" ", "_");
enumValue = enumValue.replace("-", "_");
enumValue = enumValue.replace("/", "_");
enumValue = enumValue.replace("(", "_");
enumValue = enumValue.replace(")", "_");
enumValue = enumValue.replace(",", "_");
enumValue = enumValue.replace("'", "_");
enumValue = enumValue.replace("\"", "_");
enumValue = enumValue.replace(".", "_");
enumValue = enumValue.replace(";", "_");
enumValue = enumValue.replace(":", "_");
enumValue = enumValue.replace("&", "_");
enumValue = enumValue.replace("{", "_");
enumValue = enumValue.replace("}", "_");
enumValue = enumValue.replace("#", "_");
enumValue = enumValue.replace("^", "Caret");
enumValue = enumValue.replace("<", "LowerThan");
enumValue = enumValue.replace(">", "GreaterThan");
// If it starts with a number, that's not a valid identifier.
// replace it with a leading character. Ack--there should be
// a better regexp to cover this, but getting back references
// working is not working for me.
enumValue = enumValue.replaceAll("^_", "");
enumValue = enumValue.replaceAll("^0", "_0");
enumValue = enumValue.replaceAll("^1", "_1");
enumValue = enumValue.replaceAll("^2", "_2");
enumValue = enumValue.replaceAll("^3", "_3");
enumValue = enumValue.replaceAll("^4", "_4");
enumValue = enumValue.replaceAll("^5", "_5");
enumValue = enumValue.replaceAll("^6", "_6");
enumValue = enumValue.replaceAll("^7", "_7");
enumValue = enumValue.replaceAll("^8", "_8");
enumValue = enumValue.replaceAll("^9", "_9");
// Finally, replace repeated instances of _ with a single underscore
enumValue = enumValue.replaceAll("(_+)", "_");
enumValue = camelCaseCapIgnoreUnderscores(enumValue);
return enumValue;
}
else
{
return "Unknown";
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy