internal override void ValidateMandatory(MyValidator validator) { base.ValidateMandatory(validator); if (LoadOnStart || validator.Simulation.LoadAllNodesData) { if (MyMemoryBlockSerializer.TempDataExists(this)) { validator.AddInfo(this, "Node will load data from temporal storage."); } else if (DataFolder != null && DataFolder != String.Empty) { validator.AddInfo(this, "Node will load data from user defined folder: " + DataFolder); } else if (validator.Simulation.LoadAllNodesData && !(String.IsNullOrEmpty(validator.Simulation.GlobalDataFolder))) { validator.AddInfo(this, "Node will load data from user defined folder: " + validator.Simulation.GlobalDataFolder + "\\" + MyMemoryBlockSerializer.GetNodeFolder(this)); } else if (validator.Simulation.LoadAllNodesData && (String.IsNullOrEmpty(validator.Simulation.GlobalDataFolder))) { validator.AddInfo(this, "Node will load data from temporal storage."); } else { validator.AddWarning(this, "LoadOnStart is active but no temporal data and no local or global data folder is set. Data will NOT be loaded."); } } validator.AssertInfo(!(SaveOnStop || validator.Simulation.SaveAllNodesData), this, "Node will save data to temporal storage before stop."); foreach (PropertyInfo pInfo in GetInfo().OwnedMemoryBlocks) { MyAbstractMemoryBlock mb = (pInfo.GetValue(this) as MyAbstractMemoryBlock); validator.AssertError(mb.Count >= 0, this, "Size of " + mb.Name + " memory block cannot be negative."); } List <PropertyInfo> inputBlocks = GetInfo().InputBlocks; for (int i = 0; i < inputBlocks.Count; i++) { PropertyInfo pInfo = inputBlocks[i]; if (GetAbstractInput(i) != pInfo.GetValue(this)) { validator.AddError(this, "Incompatible memory block for \"" + pInfo.Name + "\" (" + GetAbstractInput(i).GetType().GenericTypeArguments[0].Name + " != " + pInfo.PropertyType.GenericTypeArguments[0].Name + ")"); } } }