private void CreateParserForData(BusDataType dataType, string infoString, string dataString, System.Action <BusDataType> dataReadyCallback) { XMLQuickParser xmlParsing = new XMLQuickParser(infoString, dataString); if (dataType == BusDataType.Stops) { this.LoadDataIntoObjects <BusDataStop>(dataType, xmlParsing, "stops", this.busStops, dataReadyCallback); Debug.Log("Stops, lowest id: " + BusDataStop._lowestIdValue + " highest id: " + BusDataStop._highestIdValue); } else if (dataType == BusDataType.RouteStops) { this.LoadDataIntoObjects <BusRouteStopItemData>(dataType, xmlParsing, "routestops", this.busRouteStops, dataReadyCallback); } else { Debug.LogError("No loading algorithm specified for dataType: " + dataType); } }
private void LoadDataIntoObjects <T>(BusDataType busDataType, XMLQuickParser xmlData, string rootNodeName, List <T> dataArray, System.Action <BusDataType> dataReadyCallback) where T : BusDataBaseObject { int dataLength = 0; try { BusDataBaseObject dataObj = null; foreach (XmlNode node in xmlData.xmlDoc) { if (node.Name == rootNodeName) { foreach (XmlNode stopNode in node) { dataLength++; // Hmm... need to look up this error // dataObj = new T(); // Cannot create an instance of the variable type `T' because it does not have the new() constraint if (typeof(T) == typeof(BusDataStop)) { dataObj = new BusDataStop(); } else if (typeof(T) == typeof(BusRouteStopItemData)) { dataObj = new BusRouteStopItemData(); } else { Debug.LogWarning("No class defined for T: " + typeof(T).ToString()); dataObj = null; } foreach (XmlNode stopNodeElement in stopNode) { dataObj.ParseAndLoadDataElement(stopNodeElement.Name, stopNodeElement.InnerText); } dataObj.ParseAndLoadFinishedForObject(); dataArray.Add((T)dataObj); } } } if (dataObj != null) { dataObj.ParseAndLoadFinishedForClass(); } else { Debug.LogError("dataObj null on ParseAndLoadFinishedForClass"); } if (dataReadyCallback != null) { dataReadyCallback(busDataType); } } catch (System.Exception e) { Debug.LogError("Failed to parse data for type: " + BusDataType.Stops + " error: " + e.ToString()); } Debug.Log("Loaded data count: " + dataLength + " for type: " + typeof(T).ToString()); }