/*
* Licensed Materials - Property of Rogue Wave Software, Inc.
* © Copyright Rogue Wave Software, Inc. 2014, 2017
* © Copyright IBM Corp. 2009, 2014
* © Copyright ILOG 1996, 2009
* All Rights Reserved.
*
* Note to U.S. Government Users Restricted Rights:
* The Software and Documentation were developed at private expense and
* are "Commercial Items" as that term is defined at 48 CFR 2.101,
* consisting of "Commercial Computer Software" and
* "Commercial Computer Software Documentation", as such terms are
* used in 48 CFR 12.212 or 48 CFR 227.7202-1 through 227.7202-4,
* as applicable.
*/
package main;
import java.util.Random;
import ilog.views.maps.defense.symbology.app6a.IlvApp6aSymbol;
import ilog.views.sdm.model.IlvDefaultSDMModel;
import ilog.views.sdm.model.IlvDefaultSDMNode;
import ilog.views.sdm.model.IlvSDMNode;
/**
* Specific SDM Model that simulates a battle field composed of hiearchical
* armies.
*/
public class BattleField extends IlvDefaultSDMModel {
Random r = new Random(123);
final static String affiliations[] = { IlvApp6aSymbol.AFFILIATION_FRIEND, IlvApp6aSymbol.AFFILIATION_HOSTILE,
IlvApp6aSymbol.AFFILIATION_NEUTRAL, IlvApp6aSymbol.AFFILIATION_UNKNOWN };
final static String mobilities[] = { "MO", "MQ", "MS", "MY", //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$//$NON-NLS-4$
};
final static String functions[] = { "UCFHS-", "UCFHL-", "UCFHM-", "UCFHH-" //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$//$NON-NLS-4$
};
final static String units[] = { "EWAL-", "EWDLS", "EWDMS", "EWDHS" //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$//$NON-NLS-4$
};
/**
* Creates a new <code>BattleField</code> structure .
*/
public BattleField() {
buildModel();
}
/**
*
*/
private void buildModel() {
setAdjusting(true);
for (int aff = 0; aff < affiliations.length; aff++) {
double dxa = r.nextDouble() * 10;
double dya = r.nextDouble() * 10;
IlvDefaultSDMNode army = makeGroup("Army " + affiliations[aff], affiliations[aff], "UCFH--", "-K", null); //$NON-NLS-1$ //$NON-NLS-2$//$NON-NLS-3$
for (int func = 0; func < functions.length; func++) {
double dxf = r.nextDouble() * 4;
double dyf = r.nextDouble() * 4;
IlvDefaultSDMNode division = makeGroup("Division " + functions[func], affiliations[aff], functions[func], "-I", //$NON-NLS-1$ //$NON-NLS-2$
army);
for (int mob = 0; mob < mobilities.length; mob++) {
double dxm = r.nextDouble() * 1;
double dym = r.nextDouble() * 1;
IlvDefaultSDMNode regiment = makeGroup("Regiment " + mobilities[mob], affiliations[aff], functions[func], //$NON-NLS-1$
"-G", division); //$NON-NLS-1$
for (int j = 1; j < 9; j++) {
double dx = r.nextDouble() * 0.25;
double dy = r.nextDouble() * 0.25;
// JV-3867
IlvApp6aSymbol s = new IlvApp6aSymbol("SFGPUCFHS---CUS-", Math.toRadians(-7 + dx + dxm + dxf + dxa), //$NON-NLS-1$
Math.toRadians(45 - 7 + dy + dym + dyf + dya));
s.setIDAffiliation(affiliations[aff]);
s.setIDFunction(units[func]);
s.setIDSizeMobility(mobilities[mob]);
// use IlvApp6aSymbol.MODIFIER_UNIQUE_DESIGNATION rather than name
// to have it show on the symbol
s.setProperty("name", units[func] + mobilities[mob] + "(" + j + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
addObject(s, regiment, null);
}
}
}
}
// we indicate the map builder that it is not necessary to ask for saving
// this data.
// make sure group is at the right place.
setAdjusting(false);
}
private IlvDefaultSDMNode makeGroup(String name, String aff, String func, String mobility, IlvSDMNode parent) {
// IlvDefaultSDMNode grp = (IlvDefaultSDMNode)
// engine.getModel().createNode("group");
IlvApp6aSymbol grp = new IlvApp6aSymbol("group", "SFGPUCFHS---CUS-", 0, 0); //$NON-NLS-1$//$NON-NLS-2$
grp.setIDAffiliation(aff);
grp.setIDFunction(func);
grp.setIDSizeMobility(mobility);
// uncomment to show name on the symbol:
// engine.getModel().setObjectProperty(grp,
// IlvApp6aSymbol.MODIFIER_UNIQUE_DESIGNATION, name);
setObjectProperty(grp, "name", name); //$NON-NLS-1$
addObject(grp, parent, null);
return grp;
}
}