private static void Main() { try { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); // 1. Initiate Variables && dlls AppDomain.CurrentDomain.AssemblyResolve += (sender, args) => { string resourceName = new AssemblyName(args.Name).Name + ".dll"; string resource = Array.Find(Assembly.GetExecutingAssembly().GetManifestResourceNames(), element => element.EndsWith(resourceName)); using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resource)) { Byte[] assemblyData = new Byte[stream.Length]; stream.Read(assemblyData, 0, assemblyData.Length); return(Assembly.Load(assemblyData)); } }; Application.Run(new MainForm()); } catch (Exception ex) { ErrorProtocol.TriggerError(ex); } }
/// <summary> /// Deserialize a 2sxc data xml stream to the memory. The data will also be checked for /// errors. /// </summary> /// <param name="dataStream">Data stream</param> private void ValidateAndImportToMemory(Stream dataStream) { try { if (languages == null || languages.Count() == 0) { languages = new string[] { string.Empty }; } if (contentType == null) { ErrorProtocol.AppendError(ImportErrorCode.InvalidContentType); return; } Document = XDocument.Load(dataStream); dataStream.Position = 0; if (Document == null) { ErrorProtocol.AppendError(ImportErrorCode.InvalidDocument); return; } var documentRoot = Document.Element(DocumentNodeNames.Root + contentType.Name.RemoveSpecialCharacters()); if (documentRoot == null) { ErrorProtocol.AppendError(ImportErrorCode.InvalidRoot); return; } DocumentElements = documentRoot.Elements(DocumentNodeNames.Entity); var documentElementNumber = 0; var documentElementLanguagesAll = DocumentElements.GroupBy(element => element.Element(DocumentNodeNames.EntityGuid).Value) .Select(group => group.Select(element => element.Element(DocumentNodeNames.EntityLanguage).Value)).ToList(); var documentElementLanguagesCount = documentElementLanguagesAll.Select(item => item.Count()); if (documentElementLanguagesCount.Any(count => count != 1)) { // It is an all language import, so check if all languages are specified for all entities foreach (var documentElementLanguages in documentElementLanguagesAll) { if (languages.Except(documentElementLanguages).Any()) { ErrorProtocol.AppendError(ImportErrorCode.MissingElementLanguage, "Langs=" + string.Join(", ", languages)); return; } } } var entityGuidManager = new EntityGuidManager(); foreach (var documentElement in DocumentElements) { documentElementNumber++; var documentElementLanguage = documentElement.GetChildElementValue(DocumentNodeNames.EntityLanguage); if (!languages.Any(language => language == documentElementLanguage)) { // DNN does not support the language ErrorProtocol.AppendError(ImportErrorCode.InvalidLanguage, "Lang=" + documentElementLanguage, documentElementNumber); continue; } var entityGuid = entityGuidManager.GetGuid(documentElement, documentLanguageFallback); var entity = GetEntity(entityGuid); if (entity == null) { entity = AppendEntity(entityGuid); } var attributes = contentType.GetAttributes(); foreach (var attribute in attributes) { var valueName = attribute.StaticName; var value = documentElement.GetChildElementValue(valueName); if (value == null || value.IsValueDefault()) { continue; } var valueType = attribute.Type; var valueReferenceLanguage = value.GetValueReferenceLanguage(); if (valueReferenceLanguage == null) { // It is not a value reference.. it is a normal text try { entity.AppendAttributeValue(valueName, value, valueType, documentElementLanguage, false, resourceReference.IsResolve()); } catch (FormatException) { ErrorProtocol.AppendError(ImportErrorCode.InvalidValueFormat, valueName + ":" + valueType + "=" + value, documentElementNumber); } continue; } var valueReferenceProtection = value.GetValueReferenceProtection(); if (valueReferenceProtection != "rw" && valueReferenceProtection != "ro") { ErrorProtocol.AppendError(ImportErrorCode.InvalidValueReferenceProtection, value, documentElementNumber); continue; } var valueReadOnly = valueReferenceProtection == "ro"; var entityValue = entity.GetAttributeValue(valueName, valueReferenceLanguage); if (entityValue != null) { entityValue.AppendLanguageReference(documentElementLanguage, valueReadOnly); continue; } // We do not have the value referenced in memory, so search for the // value in the database var dbEntity = contentType.GetEntity(entityGuid); if (dbEntity == null) { ErrorProtocol.AppendError(ImportErrorCode.InvalidValueReference, value, documentElementNumber); continue; } var dbEntityValue = dbEntity.GetAttributeValue(attribute, valueReferenceLanguage); if (dbEntityValue == null) { ErrorProtocol.AppendError(ImportErrorCode.InvalidValueReference, value, documentElementNumber); continue; } entity.AppendAttributeValue(valueName, dbEntityValue.Value, valueType, valueReferenceLanguage, dbEntityValue.IsLanguageReadOnly(valueReferenceLanguage), resourceReference.IsResolve()) .AppendLanguageReference(documentElementLanguage, valueReadOnly); } } } catch (Exception exception) { ErrorProtocol.AppendError(ImportErrorCode.Unknown, exception.ToString()); } }