Example #1
0
 private static void SetValuesFromSubFolder(IProjectObject parent, IXmlReadWriteWrapper writeElement, IFile value,
                                            IAssetManagerFolder ownFolder)
 {
     ownFolder = ownFolder.SubFolders.GetByName(value.Folder.Name);
     writeElement.SetAttributeValue(ELTSRCSUBDIRGUID, ownFolder.Guid.ToRQLString());
     SetFilename(parent, value, ownFolder, writeElement);
 }
Example #2
0
        private static void SetFromSameProject(IProjectObject parent, IXmlReadWriteWrapper element, IFile value)
        {
            var folderGuid     = element.GetGuid(ELTFOLDERGUID);
            var topLevelFolder = value.Folder;

            if (value.Folder.IsAssetManager)
            {
                var assetFolder = (IAssetManagerFolder)value.Folder;
                if (assetFolder.IsSubFolder)
                {
                    topLevelFolder = assetFolder.ParentFolder;
                }
            }

            if (topLevelFolder.Guid != folderGuid)
            {
                throw new SmartAPIException(parent.Session.ServerLogin,
                                            string.Format(
                                                "Cannot set sample file '{0}', because it isn't in the current folder branch '{1}/'",
                                                value, parent.Project.Folders.GetByGuid(folderGuid).Name));
            }

            //TODO at least cms 7.5 stores undefined as value, maybe "" is allowed, too, try this out
            element.SetAttributeValue(ELTSRCSUBDIRGUID,
                                      value.Folder.Guid == folderGuid ? "undefined" : value.Folder.Guid.ToRQLString());

            element.SetAttributeValue(ELTSRC, value.Name);
        }
Example #3
0
        private static void SetValuesFromDifferentProjects(IProjectObject parent, IXmlReadWriteWrapper element,
                                                           RedDotAttribute attribute, IFile value)
        {
            IFolder ownFolder;

            if (!parent.Project.Folders.TryGetByName(value.Folder.Name, out ownFolder))
            {
                throw new SmartAPIException(parent.Session.ServerLogin,
                                            string.Format("No such folder {0} in project {1} for setting of {2}",
                                                          value.Folder.Name, parent.Project, attribute.Description));
            }

            var ownFile = ownFolder.Files.GetByNamePattern(value.Name).SingleOrDefault();

            if (ownFile == null)
            {
                throw new SmartAPIException(parent.Session.ServerLogin,
                                            string.Format(
                                                "No such file {3} in folder {0} in project {1} for setting of {2}",
                                                value.Folder.Name, parent.Project, attribute.Description, value.Name));
            }

            element.SetAttributeValue(ELTFOLDERGUID, ownFolder.Guid.ToRQLString());
            element.SetAttributeValue(ELTXSLFILE, ownFile.Name);
        }
Example #4
0
 public static void EnsureValidProjectObject(IProjectObject parent)
 {
     if (parent == null)
     {
         throw new SmartAPIInternalException("Converter called with invalid project object");
     }
 }
 protected override IContentClassFolder GetFromGuid(IProjectObject parent, XmlElement element,
                                                    RedDotAttribute attribute, Guid guid)
 {
     return
         (parent.Project.ContentClassFolders.Union(parent.Project.ContentClassFolders.Broken)
          .First(folder => folder.Guid == guid));
 }
Example #6
0
        public virtual void WriteTo(IProjectObject parent, IXmlReadWriteWrapper element, RedDotAttribute attribute,
                                    T value)
        {
            if (parent == null)
            {
                throw new SmartAPIInternalException(string.Format("{0}.WriteTo must be called from a project object",
                                                                  GetType().Name));
            }

            CheckReadOnly(parent.Project, attribute);

            if (value == null)
            {
                element.SetAttributeValue(attribute.ElementName, null);
                return;
            }

            if (ConverterHelper.AreFromTheSameProject(parent, value))
            {
                element.SetAttributeValue(attribute.ElementName, value.Guid.ToRQLString());
            }
            else
            {
                T resolvedValue = GetFromName(parent, element, attribute, value);
                element.SetAttributeValue(attribute.ElementName,
                                          resolvedValue != null ? resolvedValue.Guid.ToRQLString() : null);
            }
        }
Example #7
0
        public void WriteTo(IProjectObject parent, IXmlReadWriteWrapper element, RedDotAttribute attribute,
                            IContentClassElement value)
        {
            if (parent == null)
            {
                throw new SmartAPIInternalException(string.Format("{0}.WriteTo must be called from a project object",
                                                                  GetType().Name));
            }

            CheckReadOnly(parent.Project, attribute);

            if (value == null)
            {
                SetValuesToNull(element);
                return;
            }

            if (AreFromTheSameServer(parent, value))
            {
                SetValuesFromSameServer(element, value);
                return;
            }

            SetValuesFromOtherServer(parent, element, value);
        }
 public static void EnsureValueIsSupportedByServerVersion(IProjectObject obj, SpecialDataFieldFormat value)
 {
     var serverVersion = obj.Session.ServerVersion;
     switch (value)
     {
         case SpecialDataFieldFormat.DefaultUserDefined:
         case SpecialDataFieldFormat.DefaultHTML:
         case SpecialDataFieldFormat.DefaultImage:
             return;
         case SpecialDataFieldFormat.TextUserDefined:
         case SpecialDataFieldFormat.DateUserDefined:
         case SpecialDataFieldFormat.CurrencyUserDefined:
             var version = new Version(11, 0);
             if (serverVersion < version)
             {
                 throw new SmartAPIException(obj.Session.ServerLogin,
                                             string.Format(
                                                 "Cannot set {0} to value {1} for server versions older than {2}",
                                                 RedDotAttributeDescription.GetDescriptionForElement(
                                                     "eltcolumniotype"), value.ToString(), version));
             }
             return;
         default:
             throw new ArgumentException(string.Format("Unknown {0} value: {1}",
                                                       typeof (SpecialDataFieldFormat).Name, value));
     }
 }
Example #9
0
        public void WriteTo(IProjectObject parent, IXmlReadWriteWrapper element, RedDotAttribute attribute, string value)
        {
            if (string.IsNullOrEmpty(value))
            {
                element.SetAttributeValue(attribute.ElementName, null);
            }
            else
            {
                Guid guid = element.IsAttributeSet(parent, attribute.ElementName)
                                ? element.GetGuid(attribute.ElementName)
                                : Guid.Empty;

                var languageVariantName = element.GetAttributeValue("languagevariantid");
                var languageVariant     = parent.Project.LanguageVariants[languageVariantName];
                try
                {
                    Guid textGuid = parent.Project.SetTextContent(guid, languageVariant,
                                                                  ((int)Type).ToString(CultureInfo.InvariantCulture),
                                                                  value);

                    element.SetAttributeValue(attribute.ElementName, textGuid.ToRQLString());
                } catch (Exception e)
                {
                    throw new SmartAPIException(parent.Session.ServerLogin,
                                                string.Format("Could not set {0} text for {1} in language {2}",
                                                              Type.ToString().ToLower(), parent, languageVariantName), e);
                }
            }
        }
        public static void EnsureValueIsSupportedByServerVersion(IProjectObject obj, SpecialDataFieldFormat value)
        {
            var serverVersion = obj.Session.ServerVersion;

            switch (value)
            {
            case SpecialDataFieldFormat.DefaultUserDefined:
            case SpecialDataFieldFormat.DefaultHTML:
            case SpecialDataFieldFormat.DefaultImage:
                return;

            case SpecialDataFieldFormat.TextUserDefined:
            case SpecialDataFieldFormat.DateUserDefined:
            case SpecialDataFieldFormat.CurrencyUserDefined:
                var version = new Version(11, 0);
                if (serverVersion < version)
                {
                    throw new SmartAPIException(obj.Session.ServerLogin,
                                                string.Format(
                                                    "Cannot set {0} to value {1} for server versions older than {2}",
                                                    RedDotAttributeDescription.GetDescriptionForElement(
                                                        "eltcolumniotype"), value.ToString(), version));
                }
                return;

            default:
                throw new ArgumentException(string.Format("Unknown {0} value: {1}",
                                                          typeof(SpecialDataFieldFormat).Name, value));
            }
        }
Example #11
0
        public void WriteTo(IProjectObject parent, IXmlReadWriteWrapper element, RedDotAttribute attribute, IFile value)
        {
            if (parent == null)
            {
                throw new SmartAPIInternalException("Parent project object may not be null for SrcFileConverter");
            }

            if (value == null)
            {
                ClearFile(element);
                return;
            }

            if (ConverterHelper.AreFromTheSameProject(parent, value))
            {
                SetFromSameProject(parent, element, value);
            }
            else
            {
                if (value.Folder.IsAssetManager)
                {
                    SetValuesFromAssetManagerFolder(parent, element, value);
                }
                else
                {
                    var ownFolder = parent.Project.Folders.GetByName(value.Folder.Name);
                    SetValuesFromTopLevelFolder(parent, element, value, ownFolder);
                }
            }
        }
Example #12
0
        public T ReadFrom <T>(IProjectObject sourceProject, IXmlReadWriteWrapper element)
        {
            Type type = typeof(T);

            return(_converterInstance != null
                       ? GetCustomConversion <T>(sourceProject, element, type)
                       : GetDefaultConversion <T>(element, type));
        }
Example #13
0
 public static void CheckReadOnly <T>(IAttributeConverter <T> converter, IProjectObject po,
                                      RedDotAttribute attribute) where T : IProjectObject
 {
     if (converter.IsReadOnly || attribute.IsReadOnly)
     {
         throw new SmartAPIException(po.Session.ServerLogin,
                                     string.Format("Writing to attribute {0} is forbidden", attribute.Description));
     }
 }
        protected override ICategory GetFromGuid(IProjectObject parent, XmlElement element, RedDotAttribute attribute,
                                                 Guid guid)
        {
            //after a deletion of a category, references to it can still be present in the system and
            //thus we can't throw an exception but have to handle it like no category is assigned (RedDot seems to handle it that way).
            ICategory result;

            return(parent.Project.Categories.TryGetByGuid(guid, out result) ? result : null);
        }
Example #15
0
        private static void SetValuesFromTopLevelFolder(IProjectObject parent, IXmlReadWriteWrapper element, IFile value,
                                                        IFolder ownFolder)
        {
            var folderGuid = element.GetGuid(ELTFOLDERGUID);

            element.SetAttributeValue(ELTSRCSUBDIRGUID,
                                      ownFolder.Guid == folderGuid ? "undefined" : ownFolder.Guid.ToRQLString());

            SetFilename(parent, value, ownFolder, element);
        }
Example #16
0
        private T GetCustomConversion <T>(IProjectObject sourceProject, IXmlReadWriteWrapper element, Type type)
        {
            if (_targetType != type)
            {
                throw new SmartAPIInternalException(
                          string.Format("Converter type does not match Convert<T> call for element {0}", ElementName));
            }

            return(((IAttributeConverter <T>)_converterInstance).ConvertFrom(sourceProject, element.MergedElement, this));
        }
Example #17
0
        private void SetWithCustomConversion <T>(IProjectObject targetProject, IXmlReadWriteWrapper element, T value)
        {
            if (typeof(T) != _targetType)
            {
                throw new SmartAPIInternalException(
                          string.Format("Converter type {0} does not match Set<T> call for element {1} with type {2}",
                                        _targetType.Name, ElementName, typeof(T).Name));
            }

            ((IAttributeConverter <T>)_converterInstance).WriteTo(targetProject, element, this, value);
        }
        public override ICategory ConvertFrom(IProjectObject parent, XmlElement element, RedDotAttribute attribute)
        {
            var stringValue = element.GetAttributeValue(attribute.ElementName);

            if (string.IsNullOrEmpty(stringValue))
            {
                return(null);
            }

            return(stringValue == "-1" ? null : base.ConvertFrom(parent, element, attribute));
        }
        public void WriteTo(IProjectObject parent, IXmlReadWriteWrapper element, RedDotAttribute attribute,
                            EditorSettings value)
        {
            ConverterHelper.EnsureValidProjectObject(parent);

            var attributeValue = value == EditorSettings.NotSet
                                     ? null
                                     : ((int)value).ToString(CultureInfo.InvariantCulture);

            element.SetAttributeValue(attribute.ElementName, attributeValue);
        }
Example #20
0
        public ISystemLocale ConvertFrom(IProjectObject parent, XmlElement element, RedDotAttribute attribute)
        {
            string value = element.GetAttributeValue(attribute.ElementName);
            var    lcid  = element.IsAttributeSet(parent, attribute.ElementName) && !value.Contains("EmptyBuffer")
                           ? int.Parse(value)
                           : (int?)null;

            return(lcid == null
                       ? null
                       : ((IContentClassElement)parent).ContentClass.Project.Session.Locales[lcid.Value]);
        }
        protected override ICategory GetFromName(IProjectObject parent, IXmlReadWriteWrapper element,
                                                 RedDotAttribute attribute, ICategory value)
        {
            ICategory category;

            if (!parent.Project.Categories.TryGetByName(value.Name, out category))
            {
                throw new SmartAPIException(parent.Session.ServerLogin,
                                            string.Format("Cannot find category {0} in project {1}", value.Name, parent));
            }
            return(category);
        }
Example #22
0
        private static IAssetManagerFolder GetTopLevelFolder(IProjectObject parent, IAssetManagerFolder value)
        {
            var ownTopLevelFolder = parent.Project.Folders.GetByName(value.ParentFolder.Name) as IAssetManagerFolder;

            if (ownTopLevelFolder == null)
            {
                throw new SmartAPIException(parent.Session.ServerLogin,
                                            string.Format("No asset folder with name {0} found in project {1}",
                                                          value.ParentFolder.Name, parent.Project));
            }
            return(ownTopLevelFolder);
        }
Example #23
0
        private static void SetFilename(IProjectObject parent, IFile value, IXmlReadWriteWrapper element,
                                        IFolder ownFolder)
        {
            var ownFile = ownFolder.Files.GetByNamePattern(value.Name).SingleOrDefault();

            if (ownFile == null)
            {
                throw new SmartAPIException(parent.Session.ServerLogin,
                                            string.Format("No file with name {0} found in folder {1} of project {2}",
                                                          value.Name, ownFolder.Name, parent.Project));
            }
            element.SetAttributeValue(ELTSRC, value.Name);
        }
Example #24
0
        private static IFolder GetFolder(IProjectObject parent, XmlElement readElement)
        {
            Guid folderGuid;

            if (!readElement.TryGetGuid(ELTSRCSUBDIRGUID, out folderGuid))
            {
                folderGuid = readElement.GetGuid(ELTFOLDERGUID);
            }

            var folder = parent.Project.Folders.AllIncludingSubFolders.GetByGuid(folderGuid);

            return(folder);
        }
Example #25
0
        public string ConvertFrom(IProjectObject parent, XmlElement element, RedDotAttribute attribute)
        {
            ILanguageVariant lang = parent.Project.LanguageVariants.Current;

            if (!element.IsAttributeSet(parent, attribute.ElementName))
            {
                return(string.Empty);
            }

            Guid guid = element.GetGuid(attribute.ElementName);

            return(parent.Project.GetTextContent(guid, lang, ((int)Type).ToString(CultureInfo.InvariantCulture)));
        }
        public EditorSettings ConvertFrom(IProjectObject parent, XmlElement element, RedDotAttribute attribute)
        {
            ConverterHelper.EnsureValidProjectObject(parent);

            if (!element.IsAttributeSet(parent, attribute.ElementName))
            {
                return(EditorSettings.NotSet);
            }

            var intValue = element.GetIntAttributeValue(attribute.ElementName);

            return((EditorSettings)(intValue ?? (int)EditorSettings.NotSet));
        }
        public IInfoAttribute ConvertFrom(IProjectObject parent, XmlElement element, RedDotAttribute attribute)
        {
            if (!element.IsAttributeSet(parent, attribute.ElementName))
            {
                return(null);
            }

// ReSharper disable PossibleInvalidOperationException
            var id = element.GetIntAttributeValue(attribute.ElementName).Value;

// ReSharper restore PossibleInvalidOperationException
            return(parent.Project.InfoAttributes[id]);
        }
Example #28
0
        public virtual T ConvertFrom(IProjectObject parent, XmlElement element, RedDotAttribute attribute)
        {
            if (parent == null)
            {
                throw new SmartAPIInternalException(string.Format(
                                                        "{0}.ConvertFrom must be called from a project object", GetType().Name));
            }

            Guid guid;

            return(element.TryGetGuid(attribute.ElementName, out guid)
                       ? GetFromGuid(parent, element, attribute, guid)
                       : null);
        }
        protected override ISyllable GetFromName(IProjectObject parent, IXmlReadWriteWrapper element,
                                                 RedDotAttribute attribute, ISyllable value)
        {
            ISyllable output;

            if (!parent.Project.Syllables.TryGetByName(value.Name, out output))
            {
                throw new SmartAPIException(parent.Session.ServerLogin,
                                            string.Format("Could not find a syllable with name {0} in project {1}",
                                                          value.Name, parent));
            }

            return(output);
        }
Example #30
0
        protected override IFolder GetFromName(IProjectObject parent, IXmlReadWriteWrapper element,
                                               RedDotAttribute attribute, IFolder value)
        {
            var folders = parent.Project.Folders.AllIncludingSubFolders;
            var folder  = folders.FirstOrDefault(folder1 => folder1.Name == value.Name);

            if (folder == null)
            {
                throw new SmartAPIException(parent.Session.ServerLogin,
                                            string.Format("Could not find a folder with name {0} in project {1}",
                                                          value.Name, parent.Project));
            }
            return(folder);
        }
        public override void WriteTo(IProjectObject parent, IXmlReadWriteWrapper element, RedDotAttribute attribute,
                                     ICategory value)
        {
            CheckReadOnly(parent.Project, attribute);

            if (value == ArbitraryCategory.INSTANCE)
            {
                element.SetAttributeValue(attribute.ElementName, ARBITRARY_CATEGORY_VALUE);
            }
            else
            {
                base.WriteTo(parent, element, attribute, value);
            }
        }
Example #32
0
        private void GenericRemove(IProjectObject[] entries, string type)
        {
            if (entries == null || entries.Length == 0)
            {
                return;
            }

            const string REMOVE_ENTRY =
                @"<ADMINISTRATION><USER guid=""{0}""><CLIPBOARDDATA action=""remove"" projectguid=""{1}"">{2}</CLIPBOARDDATA></USER></ADMINISTRATION>";

            var entryStr = string.Join("", entries.Select(x => SINGLE_ENTRY.RQLFormat(x, type)));

            var doc = Project.ExecuteRQL(REMOVE_ENTRY.RQLFormat(Session.CurrentUser, Project, entryStr));

            if (!doc.InnerText.Contains("ok"))
            {
                throw new SmartAPIException(Session.ServerLogin, "Error removing entries from clipboard");
            }

            InvalidateCache();
        }