示例#1
0
        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);
            }
        }
示例#2
0
        /// <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());
            }
        }