private void createSpecies(XPathNavigator navLocal, XmlDocument document, XPathNavigator navGlobal) { // Set up component values String cType = "Species"; String cName = navLocal.SelectSingleNode("Name").Value; String cDescription = String.Empty; // Create component createComponent(VSGConfiguration, document, cType, cName, cDescription); // Create links #region links // Scenario createLink(VSGConfiguration, document, navGlobal.SelectSingleNode("/Scenario").GetAttribute("name", navGlobal.NamespaceURI), navGlobal.SelectSingleNode("/Scenario").GetAttribute("name", navGlobal.NamespaceURI), cName, "Scenario", String.Empty); // SpeciesType createLink(VSGConfiguration, document, navGlobal.SelectSingleNode("/Scenario").GetAttribute("name", navGlobal.NamespaceURI), navGlobal.SelectSingleNode("/Scenario").GetAttribute("name", navGlobal.NamespaceURI), cName, "SpeciesType", String.Empty); String speciesBase = (navLocal.SelectSingleNode("Base") == null) ? String.Empty : navLocal.SelectSingleNode("Base").Value; if (navGlobal.SelectSingleNode(String.Format("/Scenario/Species[Name='{0}']", speciesBase)) != null) { createLink(VSGConfiguration, document, navGlobal.SelectSingleNode("/Scenario").GetAttribute("name", navGlobal.NamespaceURI), cName, speciesBase, "SpeciesType", String.Empty); speciesBase = "ExistingSpecies"; } // SpeciesDMCanOwn String canDMOwn = (navLocal.SelectSingleNode("CanOwn") == null) ? String.Empty : navLocal.SelectSingleNode("CanOwn").Value; if (canDMOwn != String.Empty) { String[] dms = canDMOwn.Split(','); foreach (String dm in dms) { String dmName = dm.Trim(); if (navGlobal.SelectSingleNode(String.Format("/Scenario/DecisionMaker[Identifier='{0}']", dmName)) != null) { createLink(VSGConfiguration, document, cName, cName, dmName, "SpeciesDMCanOwn", String.Empty); } } } XPathNodeIterator itCapacities = navLocal.Select("SubplatformCapacity"); while (itCapacities.MoveNext()) { String subplatformSpeciesName = itCapacities.Current.SelectSingleNode("SpeciesName").Value; int subplatformSpeciesCount = Int32.Parse(itCapacities.Current.SelectSingleNode("Count").Value); String dynamicLinkName = GetDynamicLinkType("SpeciesSubplatformCapacity", cName); createLink(VSGConfiguration, document, cName, cName, subplatformSpeciesName, dynamicLinkName, String.Empty); String linkID = GetLinkID(cName, subplatformSpeciesName, dynamicLinkName); createParameter(VSGConfiguration, document, linkID, eParamParentType.Link.ToString(), "Capacity.Count", subplatformSpeciesCount.ToString(), ""); } #endregion // Create parameters #region parameters createParameter(VSGConfiguration, document, cName, "Component", "Species.IsWeapon", (navLocal.SelectSingleNode("IsWeapon") == null) ? String.Empty : navLocal.SelectSingleNode("IsWeapon").Value, String.Empty); createParameter(VSGConfiguration, document, cName, "Component", "Species.RemoveOnDestruction", (navLocal.SelectSingleNode("RemoveOnDestruction") == null) ? String.Empty : navLocal.SelectSingleNode("RemoveOnDestruction").Value, String.Empty); createParameter(VSGConfiguration, document, cName, "Component", "Species.DefaultClassification", (navLocal.SelectSingleNode("DefaultClassification") == null) ? String.Empty : navLocal.SelectSingleNode("DefaultClassification").Value, String.Empty); if (navLocal.SelectSingleNode("ClassificationDisplayRules") != null) { String rules = navLocal.SelectSingleNode("ClassificationDisplayRules").OuterXml; ClassificationDisplayRules CDRs = new ClassificationDisplayRules(); int i = rules.IndexOf("\r\n"); int start = rules.IndexOf(">",i-1); int end = rules.IndexOf("<", i); while (i >= 0) { start = rules.IndexOf(">", i-1); end = rules.IndexOf("<", start); if (end - start > 1) { rules = rules.Remove(start + 1, end - start-1); } i = rules.IndexOf("\r\n"); } CDRs.Rules = ClassificationDisplayRules.FromXML(rules); createParameter(VSGConfiguration, document, cName, "Component", "Species.ClassificationDisplayRules", CDRs.ToXML(), String.Empty); } createParameter(VSGConfiguration, document, cName, "Component", "Species.CollisionRadius", (navLocal.SelectSingleNode("Size") == null) ? String.Empty : navLocal.SelectSingleNode("Size").Value, String.Empty); createParameter(VSGConfiguration, document, cName, "Component", "Species.LaunchedByOwner", (navLocal.SelectSingleNode("LaunchedByOwner") == null) ? String.Empty : navLocal.SelectSingleNode("LaunchedByOwner").Value, String.Empty); switch (speciesBase) { case "LandObject": createParameter(VSGConfiguration, document, cName, "Component", "Species.LandObject", "true", String.Empty); createParameter(VSGConfiguration, document, cName, "Component", "Species.AirObject", "false", String.Empty); createParameter(VSGConfiguration, document, cName, "Component", "Species.SeaObject", "false", String.Empty); createParameter(VSGConfiguration, document, cName, "Component", "Species.ExistingSpecies", "false", String.Empty); break; case "AirObject": createParameter(VSGConfiguration, document, cName, "Component", "Species.LandObject", "false", String.Empty); createParameter(VSGConfiguration, document, cName, "Component", "Species.AirObject", "true", String.Empty); createParameter(VSGConfiguration, document, cName, "Component", "Species.SeaObject", "false", String.Empty); createParameter(VSGConfiguration, document, cName, "Component", "Species.ExistingSpecies", "false", String.Empty); break; case "SeaObject": createParameter(VSGConfiguration, document, cName, "Component", "Species.LandObject", "false", String.Empty); createParameter(VSGConfiguration, document, cName, "Component", "Species.AirObject", "false", String.Empty); createParameter(VSGConfiguration, document, cName, "Component", "Species.SeaObject", "true", String.Empty); createParameter(VSGConfiguration, document, cName, "Component", "Species.ExistingSpecies", "false", String.Empty); break; case "ExistingSpecies": createParameter(VSGConfiguration, document, cName, "Component", "Species.LandObject", "false", String.Empty); createParameter(VSGConfiguration, document, cName, "Component", "Species.AirObject", "false", String.Empty); createParameter(VSGConfiguration, document, cName, "Component", "Species.SeaObject", "false", String.Empty); createParameter(VSGConfiguration, document, cName, "Component", "Species.ExistingSpecies", "true", String.Empty); break; default: createParameter(VSGConfiguration, document, cName, "Component", "Species.LandObject", "false", String.Empty); createParameter(VSGConfiguration, document, cName, "Component", "Species.AirObject", "false", String.Empty); createParameter(VSGConfiguration, document, cName, "Component", "Species.SeaObject", "false", String.Empty); createParameter(VSGConfiguration, document, cName, "Component", "Species.ExistingSpecies", "false", String.Empty); break; } // Name States // Because of the State to State links we need to create the names first. Then create them. XPathNodeIterator itStates = navLocal.Select("FullyFunctional | DefineState"); while (itStates.MoveNext()) { if (itStates.Current.SelectSingleNode("State") != null) { String stateName = itStates.Current.SelectSingleNode("State").Value; //itStates.Current.SelectSingleNode("State").SetValue(cName + AME.Tools.ImportTool.Delimitter + stateName); itStates.Current.CreateAttribute(String.Empty, "name", itStates.Current.NamespaceURI, cName + AME.Tools.ImportTool.Delimitter + stateName); } else //itStates.Current.AppendChildElement(String.Empty, "State", String.Empty, cName + AME.Tools.ImportTool.Delimitter + "FullyFunctional"); itStates.Current.CreateAttribute(String.Empty, "name", String.Empty, cName + AME.Tools.ImportTool.Delimitter + "FullyFunctional"); } // Create States itStates = navLocal.Select("FullyFunctional | DefineState"); Boolean isDeadState = false; while (itStates.MoveNext()) { String stateName = itStates.Current.GetAttribute("name", itStates.Current.NamespaceURI); if (stateName.ToLower().Equals(cName.ToLower() + AME.Tools.ImportTool.Delimitter + "Dead".ToLower())) isDeadState = true; } if (!isDeadState) { String name = cName + AME.Tools.ImportTool.Delimitter + "Dead"; XmlElement deadState = document.CreateElement("DefineState"); XmlAttribute deadStateName = document.CreateAttribute("name"); deadStateName.InnerXml = name; deadState.Attributes.Append(deadStateName); XmlElement state = document.CreateElement("State"); state.InnerXml = name; deadState.AppendChild(state); navLocal.AppendChild(deadState.CreateNavigator()); } itStates = navLocal.Select("FullyFunctional | DefineState"); while (itStates.MoveNext()) { createState(itStates.Current, document, navGlobal); } #endregion }
private void UpdateRuleInAME(ClassificationDisplayRules rules) { if (controller == null || componentId < 0) return; try { controller.UpdateParameters(componentId, parameterCategory + "." + parameterName, rules.ToXML(), eParamParentType.Component); } catch (Exception ex) { MessageBox.Show(ex.Message, "Error updating parameter. Check the format of the parameter and any other constraints"); } }