/*
* Created on Oct 5, 2004 by mschilli
*/
package alma.acs.commandcenter.app;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Properties;
import alma.acs.commandcenter.engine.RunModel;
import alma.acs.commandcenter.util.MiscUtils;
import alma.acs.commandcenter.util.VariableString;
import alma.acs.util.ACSPorts;
import alma.acs.util.AcsLocations;
import alma.entity.xmlbinding.acscommandcenterproject.AcsCommandCenterProject;
import alma.entity.xmlbinding.acscommandcenterproject.types.ModeType;
import alma.entity.xmlbinding.acscommandcenterproject.ContainerT;
/**
* Makes an AcsCommandCenterProject available as a RunModel.
*
* <p>
* Some methods may depending on a boolean flag return a runtime value stored in the
* application (e.g. most recently started manager, or cdb thats most likely to belong to
* the most recently started manager etc.) or return a value from the project. </p>
*
* @author mschilli
*/
public class ProjectRunModel implements RunModel {
////////////////////////////////////////////////////////
/// ---------- Logic of ProjectRunModel ------------ ///
////////////////////////////////////////////////////////
// --- construction ---
public ProjectRunModel(AcsCommandCenterProject project) {
setProject(project);
}
// --- project ---
protected AcsCommandCenterProject project;
public void setProject (AcsCommandCenterProject project) {
this.project = project;
}
public AcsCommandCenterProject getProject () {
return project;
}
public ModeType getMode() {
return project.getMode();
}
// --- thread safety for concurrent starts of containers ---
protected int selectedContainerIndex = 0; //default
public ProjectRunModel createViewOnContainer (int containerIndex) {
ProjectRunModel ret = new ProjectRunModel(project);
ret.selectedContainerIndex = containerIndex;
return ret;
}
// --- internal helpers (also API for Gui) ---
public String deriveIRfromCommonSettings() {
int basePort = deriveInstanceFromCommonSettings();
String port = ACSPorts.globalInstance(basePort).giveIRPort();
String host = deriveMgrHostfromCommonSettings();
String ret = AcsLocations.convertToInterfaceRepositoryLocation(host, port);
return ret;
}
public String deriveNSfromCommonSettings() {
int basePort = deriveInstanceFromCommonSettings();
String port = ACSPorts.globalInstance(basePort).giveNamingServicePort();
String host = deriveMgrHostfromCommonSettings();
String ret = AcsLocations.convertToNameServiceLocation(host, port);
return ret;
}
public String deriveCDBfromCommonSettings() {
int basePort = deriveInstanceFromCommonSettings();
String port = ACSPorts.globalInstance(basePort).giveCDBPort();
String host = deriveMgrHostfromCommonSettings();
String ret = AcsLocations.convertToCdbLocation(host, port);
return ret;
}
public String deriveMgrHostfromCommonSettings() {
String host;
if (ModeType.REMOTE.equals(project.getMode())
|| ModeType.REMOTE_NATIVE.equals(project.getMode())
|| ModeType.REMOTE_DAEMON.equals(project.getMode())) {
host = read(project.getRemoteHost());
} else {
host = ACSPorts.getIP();
}
return host;
}
public String deriveMgrPortfromCommonSettings() {
int basePort = deriveInstanceFromCommonSettings();
String port = ACSPorts.globalInstance(basePort).giveManagerPort();
return port;
}
// --- private helpers ---
protected int deriveInstanceFromCommonSettings() {
return MiscUtils.parseInt(read(project.getScriptBase()));
}
protected int selectedContainerIndex() {
return this.selectedContainerIndex;
}
protected ContainerT selectedContainer() {
int selectedContainerIndex = selectedContainerIndex();
return project.getContainers().getContainer(selectedContainerIndex);
}
// --- support for variables ---
protected String read (String stringWithVars) {
return new VariableString(stringWithVars, false).toString(getVariables());
}
protected Map<String, Object> variables = null;
public Map<String, Object> getVariables() {
if (variables == null) {
readDefaultVariables();
}
return variables;
}
/**
* The default allocation of the variables map is (an excerpt of) the System Properties.
*/
@SuppressWarnings("rawtypes") // JDK API not parameterized
public void readDefaultVariables() {
Map<String, Object> m = Collections.synchronizedMap(new HashMap<String, Object>());
for (Iterator it = System.getProperties().entrySet().iterator(); it.hasNext() ;) {
Map.Entry e = (Map.Entry) it.next();
String n = (String)e.getKey();
if (n.startsWith("java.") || n.startsWith("sun.") || n.startsWith("os.")
|| n.startsWith("file.") || n.startsWith("awt.") || n.startsWith("org.omg.")
|| n.startsWith("jacorb.") || n.startsWith("path.") || n.startsWith("line.")
|| n.startsWith("user.country") || n.startsWith("user.language") || n.startsWith("user.timezone")
|| n.startsWith("user.variant") || n.startsWith("deployment.") || n.startsWith("javaplugin.")
|| n.startsWith("jnlpx.") || n.startsWith("org.apache.")) {
// skip
} else {
m.put(n, e.getValue());
}
}
variables = m;
}
/**
* Use given properties table for variable resolution
*/
@SuppressWarnings("rawtypes")
public void readVariables (Properties p) {
Map m = Collections.synchronizedMap(new HashMap(p));
variables = m;
}
////////////////////////////////////////////////////////
/// ---- Implementation of interface RunModel ----- ///
////////////////////////////////////////////////////////
// ====== LOCAL JAVA SERVICES ========
public String getServicesLocalJavaRoot () {
return read(project.getServicesLocalJavaRoot());
}
public String getServicesLocalJavaPort () {
ACSPorts ports = ACSPorts.globalInstance(deriveInstanceFromCommonSettings());
return ports.giveCDBPort();
}
// ====== LOCAL JAVA MANAGER ========
public String getManagerLocalJavaPort () {
ACSPorts ports = ACSPorts.globalInstance(deriveInstanceFromCommonSettings());
return ports.giveManagerPort();
}
public String getManagerLocalJavaAgainstCDBHost () {
return read(project.getManagerLocalJavaAgainstCDBHost());
}
public String getManagerLocalJavaAgainstCDBPort () {
return this.getServicesLocalJavaPort();
}
// ====== LOCAL JAVA CONTAINER ========
public String getContainerLocalJavaPort () {
//TODO(msc): have this container port calculated by class ACSPorts
int selectedContainerIndex = selectedContainerIndex();
int scriptbase = deriveInstanceFromCommonSettings();
return String.valueOf(3000 + (scriptbase * 100) + 50 + (selectedContainerIndex * 2));
}
// ====== MANAGER + SERVICES ========
public String getScriptBase () {
return read(project.getScriptBase());
}
public String getRemoteHost () {
return read(project.getRemoteHost());
}
public String getRemoteAccount () {
return read(project.getRemoteAccount());
}
public String getRemotePassword () {
return read(project.getRemotePassword());
}
// ====== TOOLS ========
public String getToolAgainstManagerHost () {
String ret = (project.getToolRunAgainstDedicatedSettings()) ? read(project.getToolAgainstManagerHost()) : deriveMgrHostfromCommonSettings();
return ret;
}
public String getToolAgainstManagerPort () {
String ret = (project.getToolRunAgainstDedicatedSettings()) ? read(project.getToolAgainstManagerPort()) : deriveMgrPortfromCommonSettings();
return ret;
}
public String getToolAgainstInterfaceRepository () {
String ret = (project.getToolRunAgainstDedicatedSettings()) ? read(project.getToolAgainstInterfaceRepository()) : deriveIRfromCommonSettings();
return ret;
}
public String getToolAgainstNameService () {
String ret = (project.getToolRunAgainstDedicatedSettings()) ? read(project.getToolAgainstNameService()) : deriveNSfromCommonSettings();
return ret;
}
// ====== CONTAINER ========
public String getContainerName () {
return read(selectedContainer().getName());
}
public String getContainerType () {
return read(selectedContainer().getType());
}
public String[] getContainerTypeModifiers () {
String[] ss = selectedContainer().getTypeModifier();
for (int i=0; i<ss.length; i++)
ss[i] = read(ss[i]);
return ss;
}
public String getContainerHeapSize() { // new in Acs 8.1
return read (selectedContainer().getHeapSizeMB());
}
public String getContainerScriptBase () {
if (selectedContainer().getUseDedicatedSettings())
return read(selectedContainer().getScriptBase());
return read(project.getScriptBase());
}
public String getContainerRemoteHost () {
if (selectedContainer().getUseDedicatedSettings())
return read(selectedContainer().getRemoteHost());
return read(project.getRemoteHost());
}
public String getContainerRemoteAccount () {
if (selectedContainer().getUseDedicatedSettings())
return read(selectedContainer().getRemoteAccount());
return read(project.getRemoteAccount());
}
public String getContainerRemotePassword () {
if (selectedContainer().getUseDedicatedSettings())
return read(selectedContainer().getRemotePassword());
return read(project.getRemotePassword());
}
public String getContainerAgainstManagerHost () {
String ret = (project.getContainers().getRunAgainstDedicatedSettings()) ? read(project.getContainers().getAgainstManagerHost()) : deriveMgrHostfromCommonSettings();
return ret;
}
public String getContainerAgainstManagerPort () {
String ret = (project.getContainers().getRunAgainstDedicatedSettings()) ? read(project.getContainers().getAgainstManagerPort()) : deriveMgrPortfromCommonSettings();
return ret;
}
public String getContainerAgainstCDB () {
String ret = (project.getContainers().getRunAgainstDedicatedSettings()) ? read(project.getContainers().getAgainstCDB()) : deriveCDBfromCommonSettings();
return (ret == null) ? "" : ret;
}
public String getContainerAgainstInterfaceRepository () {
String ret = (project.getContainers().getRunAgainstDedicatedSettings()) ? read(project.getContainers().getAgainstInterfaceRepository()) : deriveIRfromCommonSettings();
return (ret == null) ? "" : ret;
}
}