public override FieldList GetItemFields(ItemDefinition itemDefinition, VersionUri version, CallContext context)
        {
            var args = new GetItemFieldsArgs(itemDefinition, context);

            CorePipeline.Run("contactFacetDataProvider.getItemFields", args);
            return(args.FieldList);
        }
Beispiel #2
0
        public override VersionUriList GetItemVersions(ItemDefinition itemDefinition, CallContext context)
        {
            // TODO: Move to provider!
            // TODO: Use prefecthing like the old one?
            var result = Provider.GetItem(itemDefinition.ID.ToGuid());

            if (result != null && result.FieldValues != null)
            {
                var versions     = new VersionUriList();
                var versionsList = new List <VersionUri>();

                foreach (var fieldKey in result.FieldValues.Where(field => field.Version.HasValue && field.Language != null))
                {
                    if (versionsList.Any(ver => fieldKey.Matches(ver)))
                    {
                        continue;
                    }

                    var newVersionUri = new VersionUri(LanguageManager.GetLanguage(fieldKey.Language), new Version(fieldKey.Version.Value));

                    versionsList.Add(newVersionUri);
                }

                foreach (var version in versionsList)
                {
                    versions.Add(version);
                }

                return(versions);
            }

            return(null);
        }
Beispiel #3
0
        public virtual void AddVersion(ItemDefinition itemDefinition, VersionUri baseVersion, CallContext context)
        {
            if (DisableSerialization)
            {
                return;
            }

            Assert.ArgumentNotNull(itemDefinition, "itemDefinition");

            var sourceItem = GetSourceFromIdIfIncluded(itemDefinition);

            if (sourceItem == null)
            {
                return;                                 // not an included item
            }
            // we make a clone of the item so that we can insert a new version on it
            var versionAddProxy = new ProxyItem(sourceItem);

            // determine what the next version number should be in the current language
            // (highest number currently present + 1)
            var newVersionNumber = 1 + versionAddProxy.Versions
                                   .Where(v => v.Language.Equals(baseVersion.Language.CultureInfo))
                                   .Select(v => v.VersionNumber)
                                   .DefaultIfEmpty()
                                   .Max();

            IItemVersion newVersion;

            // if the base version is 0 or less, that means add a blank version (per SC DP behavior). If 1 or more we should copy all fields on that version into the new version.
            if (baseVersion.Version.Number > 0)
            {
                newVersion = versionAddProxy.Versions.FirstOrDefault(v => v.Language.Equals(baseVersion.Language.CultureInfo) && v.VersionNumber.Equals(baseVersion.Version.Number));

                // the new version may not exist if we are using language fallback and adding a new version. If that's the case we should create a blank version, as that's what Sitecore does.
                if (newVersion != null)
                {
                    newVersion = new ProxyItemVersion(newVersion)
                    {
                        VersionNumber = newVersionNumber
                    }
                }
                ;                                                                                                           // creating a new proxyversion essentially clones the existing version
                else
                {
                    newVersion = new ProxyItemVersion(baseVersion.Language.CultureInfo, newVersionNumber);
                }
            }
            else
            {
                newVersion = new ProxyItemVersion(baseVersion.Language.CultureInfo, newVersionNumber);
            }

            // inject the new version we created into the proxy item
            var newVersions = versionAddProxy.Versions.Concat(new[] { newVersion }).ToArray();

            versionAddProxy.Versions = newVersions;

            // flush to serialization data store
            SerializeItemIfIncluded(versionAddProxy, "Version Added");
        }
        public override int AddVersion([CanBeNull] ItemDefinition itemDefinition, [CanBeNull] VersionUri baseVersion, [CanBeNull] CallContext context)
        {
            if (itemDefinition == null || baseVersion == null || context == null)
            {
                return(base.AddVersion(itemDefinition, baseVersion, context));
            }

            var item = this.FindItem(itemDefinition.ID);

            if (item == null)
            {
                return(base.AddVersion(itemDefinition, baseVersion, context));
            }

            var version = item.AddVersion(baseVersion.Language, baseVersion.Version.Number);

            if (version == null)
            {
                return(-1);
            }

            item.File.Commit();

            return(version.Number);
        }
        public virtual FieldList GetFieldList(VersionUri version)
        {
            var result = new FieldList();

            result.SafeAdd(FieldIDs.DisplayName, DisplayName);
            return(result);
        }
Beispiel #6
0
        public bool RemoveVersion([NotNull] ID itemID, [NotNull] VersionUri versionUri)
        {
            Assert.ArgumentNotNull(itemID, "itemID");
            Assert.ArgumentNotNull(versionUri, "versionUri");

            var item = this.GetItem(itemID);

            if (item == null)
            {
                return(false);
            }

            var language = versionUri.Language;

            Assert.IsNotNull(language, "language");

            var version = versionUri.Version;

            Assert.IsNotNull(version, "version");

            var versions = item.Fields.Versioned[language];

            lock (this.SyncRoot)
            {
                if (!versions.Remove(version.Number))
                {
                    return(false);
                }

                this.Commit();
            }

            return(true);
        }
 public FieldList GetFieldList(VersionUri version)
 {
     return(new FieldList
     {
         { FieldIDs.Revision, Guid.NewGuid().ToString() }                 // New revision ensures republish of this item everytime, when using Smart publish.
     });
 }
Beispiel #8
0
        public void AddDataFromCategory(FieldList list, VersionUri version, Category category)
        {
            list.SafeAdd(FieldIds.Category.NameFieldId, category.Name);
            list.SafeAdd(FieldIds.Category.CategoryIdFieldId, category.CategoryId.ToString());
            list.SafeAdd(FieldIds.Category.ParentCatalogIdFieldId, category.ProductCatalog.ProductCatalogId.ToString());
            list.SafeAdd(FieldIds.Category.DisplayOnSiteFieldId, category.DisplayOnSite.ToSitecoreFormat());
            var description = category.GetDescription(version.Language.Name);

            list.SafeAdd(FieldIds.Category.DisplayNameFieldId, description.DisplayName);
            list.SafeAdd(FieldIds.Category.DescriptionFieldId, description.Description);
            list.SafeAdd(FieldIds.Category.ImageFieldId,
                         string.IsNullOrEmpty(category.ImageMediaId)
                                        ? string.Empty
                                        : string.Format("<image mediaid=\"{0}\" />", category.ImageMediaId));

            list.SafeAdd(FieldIDs.Created, category.CreatedOn.ToSitecoreFormat());
            list.SafeAdd(FieldIDs.CreatedBy, category.CreatedBy);
            list.SafeAdd(FieldIDs.Updated, category.ModifiedOn.ToSitecoreFormat());
            list.SafeAdd(FieldIDs.UpdatedBy, category.ModifiedBy);
            list.SafeAdd(FieldIDs.Revision, category.Guid.Derived(category.ModifiedOn).ToString());

            // Avoid adding product data to categories if the product data is not included.
            var includeProductData = _dataProviderSettings.IncludeProductData;

            if (includeProductData)
            {
                string productIdList = BuildListOfProductIds(category);
                list.SafeAdd(FieldIds.Category.ProductsInCategory, productIdList);
            }

            _dynamicCategoryTemplate.AddDynamicFieldValuesForCategory(category, list, version);
        }
Beispiel #9
0
        public override FieldList GetItemFields(ItemDefinition itemDefinition, VersionUri versionUri, Sitecore.Data.DataProviders.CallContext context)
        {
            if (!Templates.Contains(itemDefinition.TemplateID))
            {
                return(null);
            }

            var currentFields = context.CurrentResult as FieldList;
            var productCode   = currentFields != null ? currentFields[ActiveCommerce.TemplateFields.ProductCode] : null;

            if (productCode.IsNullOrEmpty())
            {
                return(null);
            }

            var book = Data.Elements("book").SingleOrDefault(x => x.Attribute("id").Value == productCode);

            if (book == null)
            {
                return(null);
            }

            var fields = new FieldList();

            fields.Add(FieldIDs.Author, book.Element("author").Value);
            fields.Add(FieldIDs.Genre, book.Element("genre").Value);
            var dateValue = DateTime.ParseExact(book.Element("publish_date").Value, "yyyy-MM-dd", CultureInfo.InvariantCulture);

            fields.Add(FieldIDs.PublishDate, Sitecore.DateUtil.ToIsoDate(dateValue));
            return(fields);
        }
        private FieldList GetItemFieldsInternal(ItemDefinition item, VersionUri version, CallContext context)
        {
            var            list           = new FieldList();
            ControllerType controllerType = null;

            if (item.ID == FolderId || ControllerType.GetAllNamespaces().ContainsKey(item.ID.ToGuid()) || ((controllerType = ControllerType.GetControllerType(item.ID)) != null))
            {
                list.Add(FieldIDs.Icon, Themes.MapTheme("SoftwareV2/16x16/elements.png"));
                if (controllerType != null)
                {
                    list.Add(FieldIDs.DisplayName, controllerType.Description);
                }
                AddStandardFields(list);
            }
            else
            {
                var action = ControllerAction.GetControllerAction(item.ID);
                if (action != null)
                {
                    AddActionFields(list, action);
                    AddStandardFields(list);
                }
            }
            return(list.Count == 0 ? base.GetItemFields(item, version, context) : list);
        }
Beispiel #11
0
        private FieldList GetFieldListForCategory(CategorySitecoreItem item, VersionUri version)
        {
            var fields = Cache.Lookup(item.Id, version);

            if (fields != null)
            {
                if (UseVerboseLogging)
                {
                    _log.Log <ContentNodeDataProvider>("cache hit");
                }
                Stats.Hit();
                return(fields);
            }
            if (UseVerboseLogging)
            {
                _log.Log <ContentNodeDataProvider>("cache hit");
            }
            Stats.Miss();

            PopulateCacheWithFieldListsForAllVersions(item);

            fields = _cache.Lookup(item.Id, version);
            if (fields != null)
            {
                return(fields);
            }

            return(item.GetFieldList(version));
        }
        public override FieldList GetItemFields(ItemDefinition itemDefinition, VersionUri versionUri, CallContext context)
        {
            if (itemDefinition.ID == FieldIds.SystemContent.UcommerceProductsMultilistWithSearch)
            {
                var fieldList = new FieldList
                {
                    { ID.Parse("{6BF5ED07-BC70-42F4-BB77-C017D340950E}"), "Ucommerce.Sitecore" },
                    { ID.Parse("{9FE6154A-A16E-4827-99F6-F51533C34EC8}"), "Ucommerce.Sitecore.SitecoreDataProvider.Impl.ProductsMultilistWithSearch" }
                };

                return(fieldList);
            }

            if (itemDefinition.ID == FieldIds.SystemContent.UcommerceCategoriesTreeList)
            {
                var fieldList = new FieldList
                {
                    { ID.Parse("{6BF5ED07-BC70-42F4-BB77-C017D340950E}"), "Ucommerce.Sitecore" },
                    { ID.Parse("{9FE6154A-A16E-4827-99F6-F51533C34EC8}"), "Ucommerce.Sitecore.SitecoreDataProvider.Impl.CategoriesTreelist" }
                };

                return(fieldList);
            }

            return(null);
        }
Beispiel #13
0
        // In this method we re-retrieve the item form the repository and populate the
        // Sitecore item fields we care about from this item. By breaking this out from
        // GetItemDefinition, we're able to keeps things flexible in terms of later updates.
        public override FieldList GetItemFields(ItemDefinition itemDefinition, VersionUri versionUri, CallContext context)
        {
            if (this.canProcessItem(itemDefinition.ID))
            {
                Trace.WriteLine(String.Format("GetItemFields({0}, {1}, {2})", itemDefinition, versionUri, context), "ProductDataProvider");

                var fields = new FieldList();

                var template = TemplateManager.GetTemplate(this.productTemplateId, this.ContentDatabase);
                if (template != null)
                {
                    var originalId = this.getExternalId(itemDefinition.ID);
                    if (originalId != Guid.Empty)
                    {
                        if (context.DataManager.DataSource.ItemExists(itemDefinition.ID))
                        {
                            ReflectionUtil.CallMethod(typeof(ItemCache), "RemoveItem", true, true, new Object[] { itemDefinition.ID });
                        }

                        var product = this.productRepository.Find(originalId);
                        if (product != null)
                        {
                            foreach (var dataField in template.GetFields().Where(ItemUtil.IsDataField))
                            {
                                fields.Add(dataField.ID, this.getFieldValue(dataField, product));
                            }
                        }
                    }
                }

                return(fields);
            }
            return(base.GetItemFields(itemDefinition, versionUri, context));
        }
        private int CopyVersion([NotNull] ItemDefinition item, [NotNull] VersionUri baseVersion)
        {
            if (!VersionExists(item, baseVersion))
            {
                return(-1);
            }

            var newVersion = GetLatestVersion(item, baseVersion.Language) + 1;

            VersionedFields[item.ID].AddRange(
                VersionedFields[item.ID].Where(
                    r => (r.Language == baseVersion.Language.ToString()) && (r.Version == baseVersion.Version.ToInt32()))
                .Select(
                    r =>
                    new FieldsRow
            {
                ItemID   = item.ID,
                Language = r.Language,
                Version  = newVersion,
                FieldID  = r.FieldID,
                Value    = r.Value
            }));

            return(newVersion);
        }
Beispiel #15
0
        /// <summary>
        /// Get a list of all available versions in different languages.
        /// </summary>
        /// <param name="itemDefinition">Used to identify the particular item</param>
        /// <param name="context"></param>
        /// <returns></returns>
        public override VersionUriList GetItemVersions(ItemDefinition itemDefinition, CallContext context)
        {
            Item result = Items.FindOneById(itemDefinition.ID.ToGuid());

            if (result != null && result.FieldValues != null)
            {
                VersionUriList versions     = new VersionUriList();
                var            versionsList = new List <VersionUri>();
                foreach (FieldValueId fieldValueId in result.FieldValues.Keys.Where(fv => fv.Version.HasValue && fv.Language != null))
                {
                    if (versionsList.Where(ver => fieldValueId.Matches(ver)).Count() == 0)
                    {
                        VersionUri newVersionUri = new VersionUri(
                            Sitecore.Data.Managers.LanguageManager.GetLanguage(fieldValueId.Language),
                            new Sitecore.Data.Version(fieldValueId.Version.Value));
                        versionsList.Add(newVersionUri);
                    }
                }
                foreach (var version in versionsList)
                {
                    versions.Add(version);
                }
                return(versions);
            }
            return(null);
        }
Beispiel #16
0
        public FieldList GetFieldList(ID id, VersionUri version)
        {
            MakeSureWeAreReady();

            if (ItemIsContainedInDictionary(id))
            {
                var item = _sitecoreItems[id];

                if (UseVerboseLogging)
                {
                    _log.Log <ProductsDataProvider>(string.Format("ContentNodeDataProvider: GetFieldList() : {0} - {1} - {2}", id.Guid, item.GetType().Name, item.ItemDefinition.Name));
                }

                if (item is CatalogSitecoreItem)
                {
                    return(GetFieldListForCatalog(item as CatalogSitecoreItem, version));
                }

                if (item is CategorySitecoreItem)
                {
                    return(GetFieldListForCategory(item as CategorySitecoreItem, version));
                }

                return(_sitecoreItems[id].GetFieldList(version));
            }

            return(new FieldList());
        }
        /// <summary>
        /// Gets the fields of a specific item version.
        /// </summary>
        /// <param name="itemDefinition">The item.</param>
        /// <param name="versionUri">The version URI.</param>
        /// <param name="context">The context.</param>
        /// <returns>Sitecore.Data.FieldList.</returns>
        public override FieldList GetItemFields(ItemDefinition itemDefinition, VersionUri versionUri, CallContext context)
        {
            if (!_setupComplete)
            {
                return(base.GetItemFields(itemDefinition, versionUri, context));
            }

            var fields = new FieldList();

            var sectionInfo = SectionTable.FirstOrDefault(x => x.SectionId == itemDefinition.ID);

            if (sectionInfo != null)
            {
                GetStandardFields(fields,
                                  sectionInfo.SectionSortOrder >= 0
                        ? sectionInfo.SectionSortOrder
                        : (SectionTable.IndexOf(sectionInfo) + 100));

                return(fields);
            }

            var fieldInfo = FieldTable.FirstOrDefault(x => x.FieldId == itemDefinition.ID);

            if (fieldInfo != null)
            {
                GetStandardFields(fields,
                                  fieldInfo.FieldSortOrder >= 0 ? fieldInfo.FieldSortOrder : (FieldTable.IndexOf(fieldInfo) + 100));
                GetFieldFields(fieldInfo, fields);
                return(fields);
            }

            return(base.GetItemFields(itemDefinition, versionUri, context));
        }
        /// <summary>
        /// Gets the fields of a specific item version.
        /// </summary>
        /// <param name="itemDefinition">The item.</param>
        /// <param name="versionUri">The version URI.</param>
        /// <param name="context">The context.</param>
        /// <returns>Sitecore.Data.FieldList.</returns>
        public override FieldList GetItemFields(ItemDefinition itemDefinition, VersionUri versionUri, CallContext context)
        {
            if (!_setupComplete)
            {
                return(base.GetItemFields(itemDefinition, versionUri, context));
            }

            var fields = new FieldList();

            var sectionTable = SectionTable.ToList();//prevent "Collection was modified"
            var sectionInfo  = sectionTable.FirstOrDefault(x => x.SectionId == itemDefinition.ID);

            if (sectionInfo != null)
            {
                GetStandardFields(fields, sectionInfo.SectionSortOrder >= 0 ? sectionInfo.SectionSortOrder : 100);

                return(fields);
            }

            var fieldtable = FieldTable.ToList();//prevent "Collection was modified"
            var fieldInfo  = fieldtable.FirstOrDefault(x => x.FieldId == itemDefinition.ID);

            if (fieldInfo != null)
            {
                GetStandardFields(fields, fieldInfo.FieldSortOrder >= 0 ? fieldInfo.FieldSortOrder : 100);
                GetFieldFields(fieldInfo, fields);
                return(fields);
            }

            return(base.GetItemFields(itemDefinition, versionUri, context));
        }
        public override FieldList GetItemFields(ItemDefinition item, VersionUri version, CallContext context)
        {
            Assert.ArgumentNotNull(item, "item");
            Assert.ArgumentNotNull(version, "version");
            Assert.ArgumentNotNull(context, "context");

            var list = new FieldList();

            if (item.ID == FolderId || (ControllerType.GetControllerType(ParentId, item.ID) != null))
            {
                list.Add(FieldIDs.Icon, Themes.MapTheme("SoftwareV2/16x16/elements.png"));
            }
            else
            {
                var action = ControllerAction.GetControllerAction(ParentId, item.ID);
                if (action != null && HttpContext.Current != null)
                {
                    //VirtualPathData vpd;
                    //MvcActionHelper.GetRouteData(new HttpContextWrapper(HttpContext.Current), action.ActionName, action.ControllerType.ControllerName, null, false, out vpd);

                    //list.Add(LayoutFieldIDs.Path, vpd.VirtualPath);
                    list.Add(FieldIDs.Icon, Themes.MapTheme("SoftwareV2/16x16/element.png"));
                }
            }
            if (list.Count == 0)
            {
                return(base.GetItemFields(item, version, context));
            }

            return(list);
        }
        public override int AddVersion(ItemDefinition itemDefinition, VersionUri baseVersion, CallContext context)
        {
            var item = GetItem(itemDefinition.ID);

            if (item == null)
            {
                return(base.AddVersion(itemDefinition, baseVersion, context));
            }

            var language = item.GetOrCreateLanguage(baseVersion.Language.ToString());

            if (baseVersion.Version.Number > 0)
            {
                var current = language.GetOrCreateVersion(baseVersion.Version.Number);
                var clone   = current.Clone() as VersionModel;
                clone.Number++;
                language.Versions.Add(clone);
            }
            else
            {
                language.GetOrCreateVersion(1);
            }

            context.Abort();
            return(_repository.WriteItem(item) ? 1 : -1);
        }
        internal void AddDataFromCatalog(ProductCatalog catalog, FieldList list, VersionUri version)
        {
            if (catalog == null)
            {
                return;
            }

            list.SafeAdd(FieldIDs.Security, GetSecurityPermisionsFor(catalog));
            list.SafeAdd(FieldIds.Catalog.NameFieldId, catalog.Name);
            list.SafeAdd(FieldIds.Catalog.CatalogIdFieldId, catalog.ProductCatalogId.ToString());
            list.SafeAdd(FieldIds.Catalog.ShowPricesWithVatId, catalog.ShowPricesIncludingVAT.ToSitecoreFormat());
            list.SafeAdd(FieldIds.Catalog.DefaultPriceGroupId, catalog.PriceGroup.SitecoreId().ToString());
            list.SafeAdd(FieldIDs.Revision, catalog.Guid.Derived(catalog.ModifiedOn).ToString());

            var description = catalog.GetDescription(version.Language.Name);

            if (description != null)
            {
                list.SafeAdd(FieldIds.Catalog.DisplayNameFieldId, description.DisplayName);
            }

            var allowedPriceGroupIds = catalog.AllowedPriceGroups.ToList().Select(x => x.PriceGroupId).ToList();

            foreach (var priceGroupId in _priceGroupIdToFieldIdMap.Keys)
            {
                list.SafeAdd(_priceGroupIdToFieldIdMap[priceGroupId],
                             allowedPriceGroupIds.Contains(priceGroupId) ? true.ToSitecoreFormat() : false.ToSitecoreFormat());
            }
        }
Beispiel #22
0
        protected void AddDataFromCategory(int categoryId, FieldList list, VersionUri version)
        {
            var repository = ObjectFactory.Instance.Resolve <IRepository <Category> >();
            var category   = repository.Select(new SingleCategoryQuery(categoryId)).Single();

            AddDataFromCategory(list, version, category);
        }
Beispiel #23
0
        private void AddCommonFieldsForProduct(Product product, FieldList list, VersionUri version)
        {
            // Bucketable
            list.SafeAdd(new ID("{C9283D9E-7C29-4419-9C28-5A5C8FF53E84}"), true.ToSitecoreFormat());

            // Common
            list.SafeAdd(FieldIds.Product.SkuFieldId, product.Sku);
            list.SafeAdd(FieldIds.Product.ProductIdFieldId, product.ProductId.ToString());
            list.SafeAdd(FieldIds.Product.InternalNameFieldId, product.Name);
            list.SafeAdd(FieldIds.Product.DisplayOnSiteFieldId, product.DisplayOnSite.ToSitecoreFormat());
            list.SafeAdd(FieldIds.Product.AllowOrderingFieldId, product.AllowOrdering.ToSitecoreFormat());

            // Multi-lingual
            var description = product.ProductDescriptions.FirstOrDefault(x => x.CultureCode == version.Language.CultureInfo.Name);

            if (description != null && !string.IsNullOrEmpty(description.DisplayName))
            {
                list.SafeAdd(FieldIds.Product.DisplayNameFieldId, description.DisplayName);
            }

            if (description != null && !string.IsNullOrEmpty(description.ShortDescription))
            {
                list.SafeAdd(FieldIds.Product.ShortDescriptionFieldId, description.ShortDescription);
            }

            if (description != null && !string.IsNullOrEmpty(description.LongDescription))
            {
                list.SafeAdd(FieldIds.Product.LongDescriptionFieldId, description.LongDescription);
            }
        }
Beispiel #24
0
        public virtual FieldList GetItemFields(ItemDefinition itemDefinition, VersionUri versionUri, CallContext context)
        {
            // return null if not present, should return all shared fields as well as all fields in the version
            Assert.ArgumentNotNull(itemDefinition, "itemDefinition");
            Assert.ArgumentNotNull(versionUri, "versionUri");

            if (DisableSerialization || DisableTransparentSync || itemDefinition == ItemDefinition.Empty)
            {
                return(null);
            }

            var item = GetTargetFromId(itemDefinition.ID);

            if (item == null)
            {
                return(null);
            }

            var fields = new FieldList();

            foreach (var sharedField in item.SharedFields)
            {
                if (sharedField.BlobId.HasValue || sharedField.Value != null)
                {
                    fields.Add(new ID(sharedField.FieldId), sharedField.BlobId?.ToString() ?? sharedField.Value);
                }
            }

            var version = item.Versions.FirstOrDefault(v => v.VersionNumber == versionUri.Version.Number && v.Language.Name == versionUri.Language.Name);

            if (version == null)
            {
                return(fields);
            }

            foreach (var versionedField in version.Fields)
            {
                if (versionedField.BlobId.HasValue || versionedField.Value != null)
                {
                    fields.Add(new ID(versionedField.FieldId), versionedField.BlobId?.ToString() ?? versionedField.Value);
                }
            }

            var unversionedFields = item.UnversionedFields.FirstOrDefault(language => language.Language.Name == versionUri.Language.Name);

            if (unversionedFields != null)
            {
                foreach (var unversionedField in unversionedFields.Fields)
                {
                    fields.Add(new ID(unversionedField.FieldId), unversionedField.BlobId?.ToString() ?? unversionedField.Value);
                }
            }

            fields.Add(FieldIDs.UpdatedBy, TransparentSyncUpdatedByValue);
            fields.Add(FieldIDs.Revision, Guid.NewGuid().ToString());

            AddBlobsToCache(item);

            return(fields);
        }
Beispiel #25
0
 public override FieldList GetItemFields(ItemDefinition itemDefinition, VersionUri versionUri, CallContext context)
 {
     if (Items.Contains(itemDefinition.ID))
     {
         Log.Info(string.Format("GetItemFields called with itemDefinition id = {0}, name = {1}, version = {2}, language = {3} (BasicDataProvider)", itemDefinition.ID, itemDefinition.Name, versionUri.Version, versionUri.Language.Name), this);
     }
     return(null);
 }
 public override FieldList GetItemFields(ItemDefinition itemDefinition, VersionUri versionUri, CallContext context)
 {
     if (Items.Contains(itemDefinition.ID))
     {
         Log.Info(string.Format("GetItemFields called with itemDefinition id = {0}, name = {1}, version = {2}, language = {3} (BasicDataProvider)", itemDefinition.ID, itemDefinition.Name, versionUri.Version, versionUri.Language.Name), this);
     }
     return null;
 }
Beispiel #27
0
 public void ShouldGetNullItemFieldsIfNoItemFound(
     [Greedy] FakeDataProvider sut,
     ItemDefinition def,
     VersionUri versionUri,
     CallContext context)
 {
     sut.GetItemFields(def, versionUri, context).Should().BeNull();
 }
        public void AddDynamicFieldValuesForProduct(Product product, FieldList list, VersionUri version)
        {
            var properties = product.GetProperties().ToList();

            properties.Where(x => x.RenderForCulture(version.Language.CultureInfo.ToString()))
            .ToList()
            .ForEach(x => TemplateFieldHelper.AddDynamicFieldValuesForProduct(list, x, _productDefinitionFieldIdToFieldIdMap));
        }
        public void AddVersion(ItemDefinition itemDefinition, VersionUri baseVersion, CallContext context)
        {
            if (DisableSerialization) return;

            Assert.ArgumentNotNull(itemDefinition, "itemDefinition");

            SerializeItemIfIncluded(itemDefinition, "Version Added");
        }
 private bool VersionExists([NotNull] ItemDefinition item, [NotNull] VersionUri versionUri)
 {
     return
         (VersionedFields[item.ID].Any(
              r =>
              (r.ItemID == item.ID) && (r.Language == versionUri.Language.ToString()) &&
              (r.Version == versionUri.Version.ToInt32())));
 }
Beispiel #31
0
 private void AddVersionedFieldValues(ID itemId, VersionUri version, FieldList fieldList)
 {
     if (_versionedFields.ContainsKey(itemId.Guid))
     {
         var values = _versionedFields[itemId.Guid];
         var key    = version.Language.CultureInfo.Name + ";" + version.Version.Number;
         AddFieldValue(fieldList, values, key);
     }
 }
        public void AddFieldValues(ITreeNodeContent node, FieldList list, VersionUri version)
        {
            var store = ProductCatalogGroup.Get(int.Parse(node.ItemId));

            if (store != null)
            {
                _baseProductCatalogGroupTemplate.AddBaseFieldValues(store, list, version);
            }
        }
Beispiel #33
0
        public bool Matches(VersionUri versionUri)
        {
            var versionUriLanguage = versionUri.Language != null ? versionUri.Language.Name : null;
            var versionUriVersion = versionUri.Version != null ? versionUri.Version.Number : null as int?;

            var matchesLanguage = string.IsNullOrWhiteSpace(Language) || Language.Equals(versionUriLanguage);
            var matchesVersion = !Version.HasValue || Version.Equals(versionUriVersion);

            return matchesLanguage && matchesVersion;
        }
Beispiel #34
0
		public static SyncVersion GetVersion(this SyncItem item, VersionUri uri)
		{
			string versionString = uri.Version.Number.ToString(CultureInfo.InvariantCulture);

			var language = uri.Language;

			if (language.Equals(Language.Invariant)) language = LanguageManager.DefaultLanguage;

			return item.Versions.FirstOrDefault(x => x.Language.Equals(language.Name, StringComparison.OrdinalIgnoreCase) && x.Version == versionString);
		}
        public override int AddVersion(ItemDefinition itemDefinition, VersionUri baseVersion, CallContext context)
        {
            var baseVersionResult = base.AddVersion(itemDefinition, baseVersion, context);

            if (baseVersionResult < 1) return baseVersionResult; // no version created for some reason

            foreach (var provider in _unicornDataProviders)
                provider.AddVersion(itemDefinition, baseVersion, context);

            return baseVersionResult;
        }
		public override FieldList GetItemFields(ItemDefinition item, VersionUri version, CallContext context)
		{
			Assert.ArgumentNotNull(item, "item");
			Assert.ArgumentNotNull(version, "version");
			Assert.ArgumentNotNull(context, "context");

			var action = ControllerAction.GetControllerAction(ParentId, item.ID);
			if (action == null)
			{
				return base.GetItemFields(item, version, context);
			}

			FieldList list = new FieldList();
			var template = context.DataManager.Database.GetTemplate(BaseTemplateId);
			list.Add(template.GetField("Namespace").ID, typeof(MvcActionLoader).Namespace);
			list.Add(template.GetField("Tag").ID, typeof(MvcActionLoader).Name);
			list.Add(template.GetField("TagPrefix").ID, "mvc");
			list.Add(template.GetField("Assembly").ID, typeof(MvcActionLoader).Assembly.GetName().Name);
			list.Add(FieldIDs.Icon, Themes.MapTheme("SoftwareV2/16x16/element_selection.png"));
			return list;
		}
        public override FieldList GetItemFields(ItemDefinition itemDefinition, VersionUri versionUri, CallContext context)
        {
            var fields = new FieldList();

            if (itemDefinition == ItemDefinition.Empty)
            {
                return fields;
            }

            var database = GetDatabase(context);
            var syncItem = database.GetItem(itemDefinition.ID.ToString(), versionUri.Language.Name);

            if (syncItem == null)
            {
                return fields;
            }

            foreach (var syncField in syncItem.SharedFields)
            {
                fields.Add(ID.Parse(syncField.FieldID), syncField.FieldValue);
            }

            var syncVersion = syncItem.GetLatestVersions().Where(v => v.Language.Equals(versionUri.Language.Name, StringComparison.OrdinalIgnoreCase)).FirstOrDefault();

            if (syncVersion == null)
            {
                return fields;
            }

            foreach (var syncField in syncVersion.Fields)
            {
                fields.Add(ID.Parse(syncField.FieldID), syncField.FieldValue);
            }

            return fields;
        }
 public override FieldList GetItemFields(ItemDefinition itemDefinition, VersionUri versionUri, CallContext context)
 {
     if (Items.ContainsKey(itemDefinition.ID))
     {
         FieldList itemFields = new FieldList();
         foreach (KeyValuePair<ID,string> field in Items[itemDefinition.ID].Fields)
         {
             itemFields.Add(field.Key, field.Value);
         }
         return itemFields;
     }
     return null;
 }
        /// <summary>
        /// Save changes that were made to an item to the database.
        /// </summary>
        /// <param name="itemDefinition">Used to identify the particular item</param>
        /// <param name="changes">A holder object that keeps track of the changes</param>
        /// <param name="context"></param>
        /// <returns></returns>
        public override bool SaveItem(ItemDefinition itemDefinition, Sitecore.Data.Items.ItemChanges changes, CallContext context)
        {
            Item current = Items.FindOneById(itemDefinition.ID.ToGuid());
            if (current == null)
            {
                return false;
            }

            if (changes.HasPropertiesChanged)
            {
                current.Name = StringUtil.GetString(changes.GetPropertyValue("name"), itemDefinition.Name);

                ID templateId = MainUtil.GetObject(changes.GetPropertyValue("templateid"), itemDefinition.TemplateID) as ID;
                current.TemplateID = templateId != ID.Null ? templateId.ToGuid() : Guid.Empty;

                ID branchId = MainUtil.GetObject(changes.GetPropertyValue("branchid"), itemDefinition.BranchId) as ID;
                current.BranchID = branchId != ID.Null ? branchId.ToGuid() : Guid.Empty;
            }
            if (changes.HasFieldsChanged)
            {
                foreach (Sitecore.Data.Items.FieldChange change in changes.FieldChanges)
                {
                    VersionUri fieldVersionUri = new VersionUri(
                        change.Definition == null || change.Definition.IsShared ? null : change.Language,
                        change.Definition == null || change.Definition.IsUnversioned ? null : change.Version);
                    var matchingFields = current.FieldValues.Where(fv => fv.Key.Matches(fieldVersionUri) && fv.Key.FieldId.Equals(change.FieldID.ToGuid()));

                    if (change.RemoveField)
                    {
                        if(matchingFields.Count() > 0)
                        {
                            current.FieldValues.Remove(matchingFields.First().Key);
                        }
                    }
                    else
                    {
                        if (matchingFields.Count() > 0)
                        {
                            current.FieldValues[matchingFields.First().Key] = change.Value;
                        }
                        else
                        {
                            current.FieldValues.Add(new FieldValueId()
                                {
                                    FieldId = change.FieldID.ToGuid(),
                                    Language = fieldVersionUri.Language != null ? fieldVersionUri.Language.Name : null,
                                    Version = fieldVersionUri.Version != null ? fieldVersionUri.Version.Number : null as int?
                                }, change.Value);
                        }
                    }
                }

                Items.Save(current, SafeMode);
            }
            return true;
        }
        /// <summary>
        /// Gets the fields of a specific item version.
        /// </summary>
        /// <param name="itemDefinition">The item.</param>
        /// <param name="versionUri">The version URI.</param>
        /// <param name="context">The context.</param>
        /// <returns>Sitecore.Data.FieldList.</returns>
        public override FieldList GetItemFields(ItemDefinition itemDefinition, VersionUri versionUri, CallContext context)
        {
            if (!_setupComplete)
                return base.GetItemFields(itemDefinition, versionUri, context);

            var fields = new FieldList();

            var sectionInfo = SectionTable.FirstOrDefault(x => x.SectionId == itemDefinition.ID);
            if (sectionInfo != null)
            {
                GetStandardFields(fields,
                    sectionInfo.SectionSortOrder >= 0
                        ? sectionInfo.SectionSortOrder
                        : (SectionTable.IndexOf(sectionInfo) + 100));

                return fields;
            }

            var fieldInfo = FieldTable.FirstOrDefault(x => x.FieldId == itemDefinition.ID);
            if (fieldInfo != null)
            {
                GetStandardFields(fields,
                    fieldInfo.FieldSortOrder >= 0 ? fieldInfo.FieldSortOrder : (FieldTable.IndexOf(fieldInfo) + 100));
                GetFieldFields(fieldInfo, fields);
                return fields;
            }

            return base.GetItemFields(itemDefinition, versionUri, context);
        }
        public void AddVersion(ItemDefinition itemDefinition, VersionUri baseVersion, CallContext context)
        {
            if (DisableSerialization) return;

            Assert.ArgumentNotNull(itemDefinition, "itemDefinition");

            var sourceItem = GetSourceFromIdIfIncluded(itemDefinition);

            if (sourceItem == null) return; // not an included item

            // we make a clone of the item so that we can insert a new version on it
            var versionAddProxy = new ProxyItem(sourceItem);

            // determine what the next version number should be in the current language
            // (highest number currently present + 1)
            var newVersionNumber = 1 + versionAddProxy.Versions
                .Where(v => v.Language.Equals(baseVersion.Language.CultureInfo))
                .Select(v => v.VersionNumber)
                .DefaultIfEmpty()
                .Max();

            IItemVersion newVersion;

            // if the base version is 0 or less, that means add a blank version (per SC DP behavior). If 1 or more we should copy all fields on that version into the new version.
            if (baseVersion.Version.Number > 0)
            {
                newVersion = versionAddProxy.Versions.First(v => v.Language.Equals(baseVersion.Language.CultureInfo) && v.VersionNumber.Equals(baseVersion.Version.Number));
                newVersion = new ProxyItemVersion(newVersion) { VersionNumber = newVersionNumber }; // creating a new proxyversion essentially clones the existing version
            }
            else newVersion = new ProxyItemVersion(baseVersion.Language.CultureInfo, newVersionNumber);

            // inject the new version we created into the proxy item
            var newVersions = versionAddProxy.Versions.Concat(new[] { newVersion }).ToArray();
            versionAddProxy.Versions = newVersions;

            // flush to serialization data store
            SerializeItemIfIncluded(versionAddProxy, "Version Added");
        }
        /// <summary>
        /// Creates a new version for a content item in a particular language.
        /// </summary>
        /// <param name="itemDefinition">Used to identify the particular item</param>
        /// <param name="baseVersion">The version to copy off of</param>
        /// <param name="context"></param>
        /// <returns></returns>
        public override int AddVersion(ItemDefinition itemDefinition, VersionUri baseVersion, CallContext context)
        {
            Item current = Items.FindOneById(itemDefinition.ID.ToGuid());
            if (current == null)
            {
                return -1;
            }

            int num = -1;

            if (baseVersion.Version != null && baseVersion.Version.Number > 0)
            {
                // copy version
                var currentFieldValues = current.FieldValues.Where(fv => fv.Key.Matches(baseVersion)).ToList();
                int? maxVersionNumber = currentFieldValues.Max(fv => fv.Key.Version);
                num = maxVersionNumber.HasValue && maxVersionNumber > 0 ? maxVersionNumber.Value + 1 : -1;

                if(num > 0)
                {
                    foreach (KeyValuePair<FieldValueId, string> fieldValue in currentFieldValues)
                    {
                        current.FieldValues.Add(new FieldValueId()
                            {
                                FieldId = fieldValue.Key.FieldId,
                                Language = fieldValue.Key.Language,
                                Version = num
                            }, fieldValue.Value);
                    }
                }
            }
            if (num == -1)
            {
                num = 1;

                // add blank version
                current.FieldValues.Add(new FieldValueId()
                    {
                        FieldId = FieldIDs.Created.ToGuid(),
                        Language = baseVersion.Language.Name,
                        Version = num
                    }, string.Empty);
            }

            Items.Save(current, SafeMode);

            return num;
        }
    public void ShouldGetItemFields([Greedy] FakeDataProvider sut, DbTemplate template, DbItem item, DbField field, Language language, Version version,
      CallContext context)
    {
      template.Fields.Add(field);
      item.Fields.Add(field); // ?
      item.TemplateID = template.ID;

      sut.DataStorage.GetFakeTemplate(template.ID).Returns(template);
      sut.DataStorage.GetFakeItem(item.ID).Returns(item);

      var def = new ItemDefinition(item.ID, item.Name, item.TemplateID, item.BranchId);
      var versionUri = new VersionUri(language, version);

      sut.GetItemFields(def, versionUri, context).Should().HaveCount(1);
    }
		public override bool RemoveVersion(ItemDefinition itemDefinition, VersionUri version, CallContext context)
		{
			Assert.ArgumentNotNull(itemDefinition, "itemDefinition");

			if (!ShouldExecuteProvider(itemDefinition.ID)) return false;

			context.Abort();
			base.RemoveVersion(itemDefinition, version, context);

			return true;
		}
		public override int AddVersion(ItemDefinition itemDefinition, VersionUri baseVersion, CallContext context)
		{
			Assert.ArgumentNotNull(itemDefinition, "itemDefinition");

			if (!ShouldExecuteProvider(itemDefinition.ID)) return -1;

			context.Abort();
			return base.AddVersion(itemDefinition, baseVersion, context);
		}
        public override FieldList GetItemFields(ItemDefinition itemDefinition, VersionUri versionUri, CallContext context)
        {
            foreach (var provider in UnicornDataProviders)
            {
                var providerResult = provider.GetItemFields(itemDefinition, versionUri, context);
                if (providerResult != null) return providerResult;
            }

            return base.GetItemFields(itemDefinition, versionUri, context);
        }
        public override bool RemoveVersion(ItemDefinition itemDefinition, VersionUri version, CallContext context)
        {
            if (!base.RemoveVersion(itemDefinition, version, context)) return false;

            foreach (var provider in _unicornDataProviders)
                provider.RemoveVersion(itemDefinition, version, context);

            return true;
        }
        /// <summary>
        /// Get a list of all available versions in different languages.
        /// </summary>
        /// <param name="itemDefinition">Used to identify the particular item</param>
        /// <param name="context"></param>
        /// <returns></returns>
        public override VersionUriList GetItemVersions(ItemDefinition itemDefinition, CallContext context)
        {
            if (ItemsById.ContainsKey(itemDefinition.ID)
                && ItemsById[itemDefinition.ID].Versions != null)
            {
                List<VersionUri> versionsList = new List<VersionUri>();
                foreach (SyncVersion version in ItemsById[itemDefinition.ID].Versions)
                {
                    VersionUri newVersionUri = new VersionUri(
                            Sitecore.Data.Managers.LanguageManager.GetLanguage(version.Language),
                            new Sitecore.Data.Version(version.Version));
                    versionsList.Add(newVersionUri);
                }

                VersionUriList versions = new VersionUriList();
                foreach (VersionUri version in versionsList)
                {
                    versions.Add(version);
                }

                return versions;
            }
            return null;
        }
        public virtual FieldList GetItemFields(ItemDefinition itemDefinition, VersionUri versionUri, CallContext context)
        {
            // return null if not present, should return all shared fields as well as all fields in the version
            Assert.ArgumentNotNull(itemDefinition, "itemDefinition");
            Assert.ArgumentNotNull(versionUri, "versionUri");

            if (DisableSerialization || DisableTransparentSync || itemDefinition == ItemDefinition.Empty) return null;

            var item = GetTargetFromId(itemDefinition.ID);

            if (item == null) return null;

            var fields = new FieldList();

            foreach (var sharedField in item.SharedFields)
            {
                fields.Add(new ID(sharedField.FieldId), sharedField.BlobId.HasValue ? sharedField.BlobId.ToString() : sharedField.Value);
            }

            var version = item.Versions.FirstOrDefault(v => v.VersionNumber == versionUri.Version.Number && v.Language.Name == versionUri.Language.Name);

            if (version == null) return fields;

            foreach (var versionedField in version.Fields)
            {
                fields.Add(new ID(versionedField.FieldId), versionedField.BlobId.HasValue ? versionedField.BlobId.ToString() : versionedField.Value);
            }

            fields.Add(FieldIDs.UpdatedBy, TransparentSyncUpdatedByValue);
            fields.Add(FieldIDs.Revision, Guid.NewGuid().ToString());

            AddBlobsToCache(item);

            return fields;
        }
        /// <summary>
        /// Get a list of all the item's fields and their values.
        /// </summary>
        /// <param name="itemDefinition">Used to identify the particular item</param>
        /// <param name="versionUri">The language and version of the item to get field values for</param>
        /// <param name="context"></param>
        /// <returns></returns>
        public override FieldList GetItemFields(ItemDefinition itemDefinition, VersionUri versionUri, CallContext context)
        {
            Language language = versionUri.Language;
            if (Language.Invariant.Equals(language))
            {
                language = Sitecore.Data.Managers.LanguageManager.DefaultLanguage;
            }
            if (ItemsById.ContainsKey(itemDefinition.ID))
            {
                FieldList fields = new FieldList();
                foreach (SyncField sharedField in ItemsById[itemDefinition.ID].SharedFields)
                {
                    fields.Add(ParseId(sharedField.FieldID), sharedField.FieldValue);
                }

                if (ItemsById[itemDefinition.ID].Versions != null)
                {
                    foreach (SyncVersion version in ItemsById[itemDefinition.ID].Versions)
                    {
                        if (language.Name.Equals(version.Language)
                            && versionUri.Version.Number.ToString().Equals(version.Version))
                        {
                            foreach (SyncField fieldValue in version.Fields)
                            {
                                fields.Add(ParseId(fieldValue.FieldID), fieldValue.FieldValue);
                            }
                            break;
                        }
                    }
                }

                return fields;
            }
            return null;
        }
 /// <summary>
 /// Get a list of all available versions in different languages.
 /// </summary>
 /// <param name="itemDefinition">Used to identify the particular item</param>
 /// <param name="context"></param>
 /// <returns></returns>
 public override VersionUriList GetItemVersions(ItemDefinition itemDefinition, CallContext context)
 {
     Item result = Items.FindOneById(itemDefinition.ID.ToGuid());
     if (result != null && result.FieldValues != null)
     {
         VersionUriList versions = new VersionUriList();
         var versionsList = new List<VersionUri>();
         foreach (FieldValueId fieldValueId in result.FieldValues.Keys.Where(fv => fv.Version.HasValue && fv.Language != null))
         {
             if (versionsList.Where(ver => fieldValueId.Matches(ver)).Count() == 0)
             {
                 VersionUri newVersionUri = new VersionUri(
                     Sitecore.Data.Managers.LanguageManager.GetLanguage(fieldValueId.Language),
                     new Sitecore.Data.Version(fieldValueId.Version.Value));
                 versionsList.Add(newVersionUri);
             }
         }
         foreach (var version in versionsList)
         {
             versions.Add(version);
         }
         return versions;
     }
     return null;
 }
		public override FieldList GetItemFields(ItemDefinition itemDefinition, VersionUri versionUri, CallContext context)
		{
			Assert.ArgumentNotNull(itemDefinition, "itemDefinition");
			Assert.ArgumentNotNull(versionUri, "versionUri");

			if (itemDefinition == ItemDefinition.Empty) return null;

			var syncItem = SerializedDatabase.GetItem(itemDefinition.ID);

			if (syncItem == null) return null;

			var fields = new FieldList();

			foreach (var sharedField in syncItem.SharedFields)
			{
				fields.Add(sharedField.GetSitecoreId(), sharedField.FieldValue);
			}

			var syncVersion = syncItem.GetVersion(versionUri);

			if (syncVersion == null) return fields;

			foreach (var versionedField in syncVersion.Fields)
			{
				fields.Add(versionedField.GetSitecoreId(), versionedField.FieldValue);
			}

			return fields;
		}
 /// <summary>
 /// Get a list of all the item's fields and their values.
 /// </summary>
 /// <param name="itemDefinition">Used to identify the particular item</param>
 /// <param name="versionUri">The language and version of the item to get field values for</param>
 /// <param name="context"></param>
 /// <returns></returns>
 public override FieldList GetItemFields(ItemDefinition itemDefinition, VersionUri versionUri, CallContext context)
 {
     Item result = Items.FindOneById(itemDefinition.ID.ToGuid());
     if (result != null && result.FieldValues != null)
     {
         FieldList fields = new FieldList();
         foreach (KeyValuePair<FieldValueId, string> fieldValue in result.FieldValues.Where(fv => fv.Key.Matches(versionUri)))
         {
             fields.Add(new ID(fieldValue.Key.FieldId), fieldValue.Value);
         }
         return fields;
     }
     return null;
 }
		public override int AddVersion(ItemDefinition itemDefinition, VersionUri baseVersion, CallContext context)
		{
			Assert.ArgumentNotNull(itemDefinition, "itemDefinition");
			Assert.ArgumentNotNull(baseVersion, "baseVersion");

			var existingItem = SerializedDatabase.GetItem(itemDefinition.ID);

			if (existingItem == null) return -1; // item may have been in another data provider, cede control

			int newVersionNumber;

			if (baseVersion.Version.Number > 0)
			{
				var baseSyncVersion = existingItem.GetVersion(baseVersion);

				Assert.IsNotNull(baseSyncVersion, "Base version {0}#{1} did not exist on {2}!", baseVersion.Language.Name,
								baseVersion.Version.Number, itemDefinition.ID);

				var newSyncVersion = baseSyncVersion.Clone();

				// the new version will be the max of the base version + 1, OR the highest existing version number in the current language + 1
				newVersionNumber = Math.Max(baseVersion.Version.Number + 1, existingItem.Versions
																							.Where(x => x.Language == baseVersion.Language.Name)
																							.Max(x => int.Parse(x.Version)) + 1);

				newSyncVersion.Version = newVersionNumber.ToString(CultureInfo.InvariantCulture);

				existingItem.Versions.Add(newSyncVersion);
			}
			else
			{
				newVersionNumber = 1;
				existingItem.AddVersion(baseVersion.Language.Name, newVersionNumber.ToString(CultureInfo.InvariantCulture), ID.NewID.ToString());
			}

			SerializedDatabase.SaveItem(existingItem);

			return newVersionNumber;
		}
 public void ShouldGetNullItemFieldsIfNoItemFound([Greedy]FakeDataProvider sut, ItemDefinition def, VersionUri versionUri, CallContext context)
 {
   sut.GetItemFields(def, versionUri, context).Should().BeNull();
 }
		public override bool RemoveVersion(ItemDefinition itemDefinition, VersionUri version, CallContext context)
		{
			Assert.ArgumentNotNull(itemDefinition, "itemDefinition");
			Assert.ArgumentNotNull(version, "version");

			var existingItem = SerializedDatabase.GetItem(itemDefinition.ID);

			Assert.IsNotNull(existingItem, "Existing item {0} did not exist in the serialization store!", itemDefinition.ID);

			var syncVersion = existingItem.GetVersion(version);

			Assert.IsNotNull(syncVersion, "Version to remove {0}#{1} did not exist on {2}!", version.Language.Name, version.Version.Number, itemDefinition.ID);

			existingItem.Versions.Remove(syncVersion);

			SerializedDatabase.SaveItem(existingItem);

			return true;
		}
		public override FieldList GetItemFields(ItemDefinition item, VersionUri version, CallContext context)
		{
			Assert.ArgumentNotNull(item, "item");
			Assert.ArgumentNotNull(version, "version");
			Assert.ArgumentNotNull(context, "context");

			var list = new FieldList();
			if (item.ID == FolderId || (ControllerType.GetControllerType(ParentId, item.ID) != null))
			{
				list.Add(FieldIDs.Icon, Themes.MapTheme("SoftwareV2/16x16/elements.png"));
			}
			else
			{
				var action = ControllerAction.GetControllerAction(ParentId, item.ID);
				if (action != null && HttpContext.Current != null)
				{
					//VirtualPathData vpd;
					//MvcActionHelper.GetRouteData(new HttpContextWrapper(HttpContext.Current), action.ActionName, action.ControllerType.ControllerName, null, false, out vpd);

					//list.Add(LayoutFieldIDs.Path, vpd.VirtualPath);
					list.Add(FieldIDs.Icon, Themes.MapTheme("SoftwareV2/16x16/element.png"));
				}
			}
			if (list.Count == 0)
				return base.GetItemFields(item, version, context);

			return list;
		}
		public override FieldList GetItemFields(ItemDefinition itemDefinition, VersionUri versionUri, CallContext context)
		{
			Assert.ArgumentNotNull(itemDefinition, "itemDefinition");

			if (!ShouldExecuteProvider(itemDefinition.ID)) return null;

			context.Abort();
			return base.GetItemFields(itemDefinition, versionUri, context);
		}
        /// <summary>
        /// Creates a new version for a content item in a particular language.
        /// </summary>
        /// <param name="itemDefinition">Used to identify the particular item</param>
        /// <param name="baseVersion">The version to copy off of</param>
        /// <param name="context"></param>
        /// <returns></returns>
        public override int AddVersion(ItemDefinition itemDefinition, VersionUri baseVersion, CallContext context)
        {
            if (! ItemsById.ContainsKey(itemDefinition.ID))
            {
                return -1;
            }
            SyncItem current = ItemsById[itemDefinition.ID];

            int num = -1;

            Language baseVersionLanguage = baseVersion.Language;
            if (Language.Invariant.Equals(baseVersionLanguage))
            {
                baseVersionLanguage = Sitecore.Data.Managers.LanguageManager.DefaultLanguage;
            }

            if (baseVersion.Version != null && baseVersion.Version.Number > 0)
            {
                // copy version
                SyncVersion matchingVersion = (current.Versions ?? new List<SyncVersion>())
                    .OrderByDescending(vr => int.Parse(vr.Version))
                    .FirstOrDefault(vr => vr.Language.Equals(baseVersionLanguage.Name));

                int? maxVersionNumber = matchingVersion != null ? int.Parse(matchingVersion.Version) : null as int?;
                num = maxVersionNumber.HasValue && maxVersionNumber > 0 ? maxVersionNumber.Value + 1 : -1;

                if (num > 0)
                {
                    SyncVersion newVersion = current.AddVersion(matchingVersion.Language, num.ToString(), matchingVersion.Revision);
                    
                    var currentFieldValues = matchingVersion.Fields;

                    foreach (var fieldValue in currentFieldValues)
                    {
                        newVersion.AddField(fieldValue.FieldID, fieldValue.FieldName, fieldValue.FieldKey, fieldValue.FieldValue, true);
                    }
                }
            }
            if (num == -1)
            {
                num = 1;

                // add blank version
                current.AddVersion(baseVersionLanguage.Name, num.ToString(), Guid.NewGuid().ToString());
            }

            return num;
        }
        public void RemoveVersion(ItemDefinition itemDefinition, VersionUri version, CallContext context)
        {
            if (DisableSerialization) return;

            Assert.ArgumentNotNull(itemDefinition, "itemDefinition");

            var sourceItem = GetSourceFromIdIfIncluded(itemDefinition);

            if (sourceItem == null) return; // predicate excluded item

            // create a clone of the item to remove the version from
            var versionRemovingProxy = new ProxyItem(sourceItem);

            // exclude the removed version
            versionRemovingProxy.Versions = versionRemovingProxy.Versions.Where(v => !v.Language.Equals(version.Language.CultureInfo) || !v.VersionNumber.Equals(version.Version.Number));

            SerializeItemIfIncluded(versionRemovingProxy, "Version Removed");
        }