public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value) { AApiVersionedFieldsCTD.TypedValuePropertyDescriptor pd = (AApiVersionedFieldsCTD.TypedValuePropertyDescriptor)context.PropertyDescriptor; IResourceKeyCTD rkCTD = (IResourceKeyCTD)pd.GetValue(null); AApiVersionedFields owner = rkCTD.owner; string field = rkCTD.field; object component = rkCTD.component; IResourceKey rk = (IResourceKey)AApiVersionedFieldsCTD.GetFieldValue(owner, field).Value; if (typeof(IResourceKey).IsAssignableFrom(value.GetType())) { IResourceKey rkNew = (IResourceKey)value; rk.ResourceType = rkNew.ResourceType; rk.ResourceGroup = rkNew.ResourceGroup; rk.Instance = rkNew.Instance; return(rk); } if (value != null && value is string) { if (AResourceKey.TryParse((string)value, rk)) { return(rk); } else { throw new NotSupportedException("Invalid data: " + (string)value); } } return(base.ConvertFrom(context, culture, value)); }
public void PasteResourceKey(AResourceKey rk) { foreach (string s in new String[] { "ResourceType", "ResourceGroup", "Instance", }) { if (fields.Contains(s)) { values[s].Value = new Regex(rk[s].ToString("X")); } } }
public static void AddFiles(IPackage package, List <string> sourceFilePaths) { List <TGIN> addedResourceKeys = new List <TGIN>(); for (int sourceFilePathIndex = 0; sourceFilePathIndex < sourceFilePaths.Count; sourceFilePathIndex++) { string sourceInfoFilePath = sourceFilePaths[sourceFilePathIndex] + "." + SourceInfoFileExtension; TGIN targetResourceKeyTGIN = Path.GetFileName(sourceFilePaths[sourceFilePathIndex]); if (File.Exists(sourceInfoFilePath)) { try { SourceInfo sourceInfo = (SourceInfo)Tools.ReadXML <SourceInfo>(sourceInfoFilePath); targetResourceKeyTGIN = sourceInfo.ToTGIN(); } catch (Exception e) { Console.Error.Write("Failed to read source info file.\n" + sourceInfoFilePath + "\n" + e.ToString()); } } AResourceKey targetResourceKey = targetResourceKeyTGIN; MemoryStream sourceStream = new MemoryStream(); BinaryWriter sourceStreamWriter = new BinaryWriter(sourceStream); using (BinaryReader sourceFileReader = new BinaryReader(new FileStream(sourceFilePaths[sourceFilePathIndex], FileMode.Open, FileAccess.Read))) { sourceStreamWriter.Write(sourceFileReader.ReadBytes((int)sourceFileReader.BaseStream.Length)); sourceStreamWriter.Flush(); } IResourceIndexEntry targetPreviousEntry = package.Find(targetResourceKey.Equals); while (targetPreviousEntry != null) { package.DeleteResource(targetPreviousEntry); targetPreviousEntry = package.Find(targetResourceKey.Equals); } IResourceIndexEntry targetEntry = package.AddResource(targetResourceKey, sourceStream, false); if (targetEntry == null) { continue; } targetEntry.Compressed = 23106; addedResourceKeys.Add(targetResourceKeyTGIN); } GenerateNameMap(package, addedResourceKeys, null); }
public static void RemoveFiles(IPackage package, List <string> fileNames) { List <TGIN> removedResourceKeys = new List <TGIN>(); for (int fileNameIndex = 0; fileNameIndex < fileNames.Count; fileNameIndex++) { TGIN targetResourceKeyTGIN = fileNames[fileNameIndex]; AResourceKey targetResourceKey = targetResourceKeyTGIN; IResourceIndexEntry targetPreviousEntry = package.Find(targetResourceKey.Equals); while (targetPreviousEntry != null) { package.DeleteResource(targetPreviousEntry); targetPreviousEntry = package.Find(targetResourceKey.Equals); } removedResourceKeys.Add(targetResourceKeyTGIN); } GenerateNameMap(package, null, removedResourceKeys); }
/// <summary> /// Tests whether a string can be converted to an <see cref="IResourceKey"/> and, /// if so, sets <paramref name="result"/> to the converted value. /// </summary> /// <param name="value">A potential string representation of an <see cref="IResourceKey"/>.</param> /// <param name="result">The eqivalent <see cref="IResourceKey"/> value for <paramref name="value"/>.</param> /// <returns>True if <paramref name="value"/> has the format /// "0xHHHHHHHH-0xHHHHHHHH-0xHHHHHHHHHHHHHHHH"; otherwise false. /// </returns> public static bool TryParse(string value, out IResourceKey result) { result = new RK(); return(AResourceKey.TryParse(value, result)); }