private void PrepareMigrationOfEntity(IDTableEntry entry, Func <int, Guid, string> sqlBuilder)
        {
            int    id  = GetIdFromKey(entry.Key);
            string sql = sqlBuilder(id, entry.ID.Guid);

            StoreSqlCommandForLaterExecution(sql);
        }
 public override void Add(IDTableEntry entry)
 {
     if (this.IsLocalProviderSet())
     {
         this.LocalProvider.Value.Add(entry);
     }
 }
    public FakeIDTableProviderTest()
    {
      this.behavior = Substitute.For<IDTableProvider>();
      this.provider = new FakeIDTableProvider();
      this.provider.LocalProvider.Value = this.behavior;

      var fixture = new Fixture();
      this.entry = fixture.Create<IDTableEntry>();
    }
示例#4
0
        internal static ID GetItemIdFromIDTableEntry(string prefix, string key)
        {
            IDTableEntry idTableEntry = IDTable.GetID(prefix, key);

            if (idTableEntry == null)
            {
                return(ID.Null);
            }
            return(idTableEntry.ID);
        }
        public FakeIDTableProviderTest()
        {
            this.behavior = Substitute.For <IDTableProvider>();
            this.provider = new FakeIDTableProvider();
            this.provider.LocalProvider.Value = this.behavior;

            var fixture = new Fixture();

            this.entry = fixture.Create <IDTableEntry>();
        }
示例#6
0
 public override Stream GetBlobStream(Guid blobId, CallContext context)
 {
     IDTableEntry[] idList = IDTable.GetKeys(ID_TABLE_PREFIX, new ID(blobId));
     if (idList.Length > 0)
     {
         IDTableEntry mappedID = idList[0];
         context.Abort();
         return(GetThumbnailStream(mappedID.Key));
     }
     return(null);
 }
示例#7
0
        private Guid FindIdTableGuid(string value, string idTableKey)
        {
            IDTableEntry idTableEntry = InMemoryIdTable.GetID(idTableKey, value);

            if (idTableEntry == null)
            {
                return(Guid.Empty);
            }

            return(idTableEntry.ID.Guid);
        }
示例#8
0
 public static IDTableEntry Add(string prefix, string key, ID id, ID parentID, string customData)
 {
     Error.AssertString(prefix, "prefix", false);
     Error.AssertString(key, "key", false);
     Error.AssertObject(id, "id");
     Error.AssertObject(parentID, "parentID");
     Error.AssertString(customData, "customData", true);
     IDTableProvider provider = GetProvider();
     var entry = new IDTableEntry(prefix, key, id, parentID, customData);
     provider.Add(entry);
     return entry;
 }
示例#9
0
        public override Sitecore.Data.FieldList GetItemFields(ItemDefinition itemDefinition, VersionUri versionUri, CallContext context)
        {
            IDTableEntry[] idList = IDTable.GetKeys(ID_TABLE_PREFIX, itemDefinition.ID);
            if (idList.Length > 0)
            {
                IDTableEntry mappedID = idList[0];
                context.Abort();
                XmlNode   video = VideoData.SelectSingleNode("/response/videos/video[@key='" + mappedID.Key + "']");
                FieldList list  = new FieldList();
                list.Add(ID.Parse(DISPLAY_NAME_FIELD), video[BOTR_TITLE].InnerText);
                list.Add(ID.Parse(VIDEO_KEY_FIELD), mappedID.Key);
                list.Add(ID.Parse(STATUS_FIELD), video[BOTR_STATUS].InnerText);
                list.Add(ID.Parse(BLOB_FIELD), itemDefinition.ID.ToString());
                list.Add(ID.Parse(TITLE_FIELD), video[BOTR_TITLE].InnerText);
                list.Add(ID.Parse(DESCRIPTION_FIELD), video[BOTR_DESCRIPTION].InnerText);
                list.Add(ID.Parse(KEYWORDS_FIELD), video[BOTR_TAGS].InnerText);
                list.Add(ID.Parse(ALT_FIELD), video[BOTR_TITLE].InnerText);
                list.Add(ID.Parse(EXTENSION_FIELD), EXTENSION);
                list.Add(ID.Parse(MIME_TYPE_FIELD), MIME_TYPE);
                list.Add(ID.Parse(VIDEO_URL_FIELD), video[BOTR_LINK].InnerText);
                XmlNode custom = video[BOTR_CUSTOM];
                if (custom != null && custom[BOTR_CUSTOM_LINK] != null)
                {
                    list.Add(ID.Parse(VIDEO_CUSTOM_URL_FIELD), custom[BOTR_CUSTOM_LINK].InnerText);
                }

                double videoTimestamp = Double.Parse(video[BOTR_DATE].InnerText);
                string videoDate      = Sitecore.DateUtil.ToIsoDate(UnixDateTime.FromUnixTimestamp(videoTimestamp));
                list.Add(ID.Parse(CREATED_FIELD), videoDate);
                list.Add(ID.Parse(UPDATED_FIELD), videoDate);

                //BotR puts width/height data with conversion data. just need the aspect ratio, so grab the first one in the doc
                XmlDocument conversionData  = GetVideoConversionData(mappedID.Key);
                XmlNode     videoConversion = conversionData.SelectSingleNode("/response/conversions/conversion");
                if (videoConversion != null)
                {
                    string heightStr = videoConversion[BOTR_HEIGHT].InnerText;
                    string widthStr  = videoConversion[BOTR_WIDTH].InnerText;
                    double height    = 0;
                    double width     = 0;
                    Double.TryParse(heightStr, out height);
                    Double.TryParse(widthStr, out width);
                    if (height != 0 && width != 0)
                    {
                        int thumbHeight = (int)(THUMBNAIL_SIZE * (height / width));
                        list.Add(ID.Parse(WIDTH_FIELD), THUMBNAIL_SIZE.ToString());
                        list.Add(ID.Parse(HEIGHT_FIELD), thumbHeight.ToString());
                    }
                }
                return(list);
            }
            return(base.GetItemFields(itemDefinition, versionUri, context));
        }
示例#10
0
        public static IDTableEntry Add(string prefix, string key, ID id, ID parentID, string customData)
        {
            Error.AssertString(prefix, "prefix", false);
            Error.AssertString(key, "key", false);
            Error.AssertObject(id, "id");
            Error.AssertObject(parentID, "parentID");
            Error.AssertString(customData, "customData", true);
            IDTableProvider provider = GetProvider();
            var             entry    = new IDTableEntry(prefix, key, id, parentID, customData);

            provider.Add(entry);
            return(entry);
        }
示例#11
0
        public static Item GetItemByShortUrl(string filePath)
        {
            Assert.ArgumentNotNullOrEmpty(filePath, "filePath");

            IDTableEntry id = ShortUrlTable.GetID(Prefix, filePath);

            if (id != null && !ID.IsNullOrEmpty(id.ID))
            {
                return(Context.Database.GetItem(id.ID));
            }

            return(null);
        }
        private static string GetEncryptionKey([NotNull] Item targetIntegrationItem)
        {
            Assert.ArgumentNotNull(targetIntegrationItem, "targetIntegrationItem");

            IDTableEntry encryptionKeyEntry = IDTable.GetID(EncryptionKeyIDTableEntryPrefix, targetIntegrationItem.ID.ToShortID().ToString());

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

            return(encryptionKeyEntry.CustomData);
        }
示例#13
0
        public override void Execute(CommandContext context)
        {
            IEnumerable <Type> allGlassBasedModels = null;

            allGlassBasedModels = ReflectionHelper.GetAllTypesThatImplement <GlassBase>(
                new List <string>
            {
                "Projects.Common.Models",
                "Projects.Reboot.Models"
            }
                );
            Database database    = Factory.GetDatabase("master");
            Item     modelFolder = database.GetItem(RebootConstants.ModelRootId);

            foreach (var glassModel in allGlassBasedModels.Where(t => !t.IsAbstract))
            {
                Log.Info(string.Format("Adding model {0} to Sitecore", glassModel.FullName), context);
                string       displayName  = glassModel.Name;
                string       name         = ItemUtil.ProposeValidItemName(glassModel.FullName.Replace(".", "_"));
                string       prefix       = RebootConstants.ModelTemplateId.ToString();
                string       key          = name;
                IDTableEntry idTableEntry = IDTable.GetID(prefix, key);
                if (idTableEntry != null)
                {
                    continue;
                }
                Item model = modelFolder.Add(name, new TemplateID(RebootConstants.ModelTemplateId));
                if (model == null)
                {
                    continue;
                }
                using (new SecurityDisabler())
                {
                    model.Editing.BeginEdit();
                    try
                    {
                        model.Appearance.DisplayName = displayName;
                        model["Model Type"]          = glassModel.AssemblyQualifiedName;
                    }
                    catch (Exception ex)
                    {
                        Log.Error("An error occured while editing Model " + displayName, context);
                        model.Editing.CancelEdit();
                    }
                    finally
                    {
                        model.Editing.EndEdit();
                    }
                }
            }
        }
示例#14
0
        internal static ID GetItemIdFromIDTableEntry <T>(this T obj, string key) where T : class, IHasExternalId
        {
            if (obj == null)
            {
                return(ID.Null);
            }
            string       prefix       = obj.GetType().ToString();
            IDTableEntry idTableEntry = IDTable.GetID(prefix, key);

            if (idTableEntry == null)
            {
                return(ID.Null);
            }
            return(idTableEntry.ID);
        }
        public override void Add(IDTableEntry entry)
        {
            var idTableStringKey = new IdTableStringKey(entry.Prefix, entry.Key);

            if (!_idByKey.ContainsKey(idTableStringKey))
            {
                _idByKey[idTableStringKey] = entry;
            }

            var key = new IdTableIdKey(entry.Prefix, entry.ID.Guid);

            if (!_idById.ContainsKey(key))
            {
                _idById.Add(key, new List<IDTableEntry> {entry});
            }
        }
        private void FillTheCacheInitially()
        {
            using (DataProviderReader reader = Api.CreateReader("SELECT {0}ID{1}, {0}Prefix{1}, {0}Key{1}, {0}ParentID{1}, {0}CustomData{1} FROM {0}IDTable{1}"))
            {
                while (reader.Read())
                {
                    ID     id         = Api.GetId(0, reader);
                    string prefix     = Api.GetString(1, reader);
                    string key        = Api.GetString(2, reader);
                    ID     parentId   = Api.GetId(3, reader);
                    string customData = Api.GetString(4, reader);

                    var entry = new IDTableEntry(prefix, key, id, parentId, customData);
                    Cache.Add(GetCacheKey(prefix, key), entry);
                    DataCounters.PhysicalReads.Increment();
                }
            }
        }
示例#17
0
 public override ItemDefinition GetItemDefinition(ID itemId, CallContext context)
 {
     IDTableEntry[] idList = IDTable.GetKeys(ID_TABLE_PREFIX, itemId);
     if (idList.Length > 0)
     {
         IDTableEntry mappedID = idList[0];
         context.Abort();
         XmlNode video = VideoData.SelectSingleNode("/response/videos/video[@key='" + mappedID.Key + "']");
         if (video == null)
         {
             IDTable.RemoveID(ID_TABLE_PREFIX, mappedID.ID);
             return(null);
         }
         ItemDefinition videoItem = new ItemDefinition(itemId, mappedID.Key, ID.Parse(TEMPLATE), ID.Null);
         return(videoItem);
     }
     return(base.GetItemDefinition(itemId, context));
 }
示例#18
0
        public override void Add(IDTableEntry entry)
        {
            var idTableStringKey = new IdTableStringKey(entry.Prefix, entry.Key);

            if (!_idByKey.ContainsKey(idTableStringKey))
            {
                _idByKey[idTableStringKey] = entry;
            }

            var key = new IdTableIdKey(entry.Prefix, entry.ID.Guid);

            if (!_idById.ContainsKey(key))
            {
                _idById.Add(key, new List <IDTableEntry> {
                    entry
                });
            }
        }
示例#19
0
 public override bool DeleteItem(ItemDefinition itemDefinition, CallContext context)
 {
     IDTableEntry[] idList = IDTable.GetKeys(ID_TABLE_PREFIX, itemDefinition.ID);
     if (idList.Length > 0)
     {
         IDTableEntry mappedID = idList[0];
         context.Abort();
         XmlDocument response = CallApi("/videos/delete", new Dictionary <string, string> {
             { BOTR_VIDEO_KEY, mappedID.Key }
         });
         XmlNode status = response.SelectSingleNode("/response/status");
         if (status != null && status.InnerText.ToLower() == "ok")
         {
             Cache.Clear();
             return(true);
         }
         return(false);
     }
     return(false);
 }
示例#20
0
 public override IDList GetChildIDs(ItemDefinition itemDefinition, CallContext context)
 {
     if (itemDefinition.ID == ID.Parse(_parentItem))
     {
         context.Abort();
         XmlNodeList videos   = VideoData.SelectNodes("/response/videos/video");
         IDList      videoIDs = new IDList();
         foreach (XmlNode video in videos)
         {
             string       videoKey = video.Attributes["key"].Value;
             IDTableEntry mappedID = IDTable.GetID(ID_TABLE_PREFIX, videoKey);
             if (mappedID == null)
             {
                 mappedID = IDTable.GetNewID(ID_TABLE_PREFIX, videoKey, ID.Parse(_parentItem));
             }
             videoIDs.Add(mappedID.ID);
         }
         return(videoIDs);
     }
     return(base.GetChildIDs(itemDefinition, context));
 }
示例#21
0
        public static string ReadShortUrl(this Item item)
        {
            if (item != null && item.Parent != null && item.Parent.IsABucketFolder())
            {
                try
                {
                    IDTableEntry entry = ShortUrlTable.GetKeys(Prefix, item.ID).FirstOrDefault();
                    return(entry == null ? null : entry.Key);
                }
                catch (Exception exception)
                {
                    Log.Fatal(
                        string.Format("Short Url Manager: cannot read short url for item {0} {1} {2}", item.Uri,
                                      exception.Message,
                                      exception.StackTrace), new object());
                    return(null);
                }
            }

            return(null);
        }
示例#22
0
        internal IDTableEntry Add(string prefix, string key, ID id, ID parentId)
        {
            var idTableIdKey = new IdTableIdKey(prefix, id.Guid);

            var tableEntry = new IDTableEntry(prefix, key, id, parentId, "");

            if (!_idById.ContainsKey(idTableIdKey))
            {
                _idById.Add(idTableIdKey, new List <IDTableEntry> {
                    tableEntry
                });
            }

            var idTableStringKey = new IdTableStringKey(prefix, key);

            if (!_idByKey.ContainsKey(idTableStringKey))
            {
                _idByKey[idTableStringKey] = tableEntry;
            }

            return(IDTable.Add(prefix, key, id, parentId));
        }
示例#23
0
        public override IDList GetChildIDs(ItemDefinition parentItem, CallContext context)
        {
            if (CanProcessParent(parentItem.ID))
            {
                context.Abort();

                var itemIdList = new IDList();

                foreach (
                    var externalItem in LoadChildren(parentItem).Where(a => a != null && !String.IsNullOrEmpty(a.Id)))
                {
                    var externalItemId = externalItem.Id;

                    IDTableEntry mappedId = InMemoryIdTable.GetID(IdTablePrefix, externalItemId);

                    if (mappedId == null)
                    {
                        Guid generatedGuid = GenerateId(externalItem);

                        if (generatedGuid == Guid.Empty)
                        {
                            mappedId = InMemoryIdTable.GetNewID(IdTablePrefix, externalItemId, parentItem.ID);
                        }
                        else
                        {
                            mappedId = InMemoryIdTable.Add(IdTablePrefix, externalItemId, new ID(generatedGuid), parentItem.ID);
                        }
                    }

                    itemIdList.Add(mappedId.ID);
                }

                context.DataManager.Database.Caches.DataCache.Clear();

                return(itemIdList);
            }

            return(base.GetChildIDs(parentItem, context));
        }
示例#24
0
 protected void OnItemSaved(object sender, System.EventArgs args)
 {
     if ((args != null))
     {
         Item item = Event.ExtractParameter(args, 0) as Item;
         Assert.IsNotNull(item, "No item in parameters");
         if (!item.TemplateID.Equals(RebootConstants.ModelTemplateId))
         {
             return;
         }
         ID parentID = item.ParentID;
         if (BucketManager.IsItemContainedWithinBucket(item))
         {
             parentID = item.GetParentBucketItemOrParent().ParentID;
         }
         string       prefix       = item.TemplateID.ToString();
         string       key          = item.Name;
         IDTableEntry idTableEntry = IDTable.GetID(prefix, key);
         if (idTableEntry == null)
         {
             IDTable.Add(prefix, key, item.ID, parentID);
         }
     }
 }
        public override IDTableEntry GetID(string prefix, string key)
        {
            var entry1 = Cache[GetCacheKey(prefix, key)] as IDTableEntry;

            if (entry1 != null)
            {
                return(entry1);
            }

            using (DataProviderReader reader = Api.CreateReader("SELECT {0}ID{1}, {0}ParentID{1}, {0}CustomData{1} FROM {0}IDTable{1} WHERE {0}Prefix{1} = {2}prefix{3} AND {0}Key{1} = {2}key{3}", (object)"prefix", (object)prefix, (object)"key", (object)key))
            {
                if (reader.Read())
                {
                    ID     id1     = Api.GetId(0, reader);
                    ID     id2     = Api.GetId(1, reader);
                    string @string = Api.GetString(2, reader);
                    var    entry2  = new IDTableEntry(prefix, key, id1, id2, @string);
                    Cache.Add(GetCacheKey(prefix, key), entry2);
                    DataCounters.PhysicalReads.Increment();
                    return(entry2);
                }
            }
            return(null);
        }
示例#26
0
 public static bool MoveItem(this IFileSystemRepository repo, IDTableEntry item, IDTableEntry parent)
 {
     return(repo.MoveItem(item.ID.ToString(), parent.ToString()));
 }
示例#27
0
        public override bool SaveItem(ItemDefinition itemDefinition, Sitecore.Data.Items.ItemChanges changes, CallContext context)
        {
            IDTableEntry[] idList = IDTable.GetKeys(ID_TABLE_PREFIX, itemDefinition.ID);
            if (idList.Length > 0 && changes.HasFieldsChanged)
            {
                IDTableEntry mappedID = idList[0];
                context.Abort();

                var values = new Dictionary <string, string>();
                values.Add(BOTR_VIDEO_KEY, mappedID.Key);

                FieldChangeList fieldChanges = changes.FieldChanges;
                lock (fieldChanges.SyncRoot)
                {
                    foreach (FieldChange change in fieldChanges)
                    {
                        if (change.FieldID == ID.Parse(DISPLAY_NAME_FIELD) || change.FieldID == ID.Parse(TITLE_FIELD) || change.FieldID == ID.Parse(ALT_FIELD))
                        {
                            values[BOTR_TITLE] = change.Value;
                        }
                        else if (change.FieldID == ID.Parse(DESCRIPTION_FIELD))
                        {
                            values[BOTR_DESCRIPTION] = change.Value;
                        }
                        else if (change.FieldID == ID.Parse(KEYWORDS_FIELD))
                        {
                            values[BOTR_TAGS] = change.Value;
                        }
                        else if (change.FieldID == ID.Parse(VIDEO_CUSTOM_URL_FIELD))
                        {
                            Sitecore.Links.UrlOptions options = Sitecore.Links.UrlOptions.DefaultOptions;
                            options.Site = Sitecore.Sites.SiteContextFactory.GetSiteContext(_vodeoLinkSite);
                            options.AlwaysIncludeServerUrl = false;
                            values[BOTR_CUSTOM + "." + BOTR_CUSTOM_LINK] = change.Value;
                            if (change.RemoveField || string.IsNullOrEmpty(change.Value))
                            {
                                values[BOTR_LINK] = string.Empty;
                            }
                            else
                            {
                                values[BOTR_LINK] = "http://" +
                                                    Sitecore.StringUtil.RemovePostfix('/', this._videoLinkHost) +
                                                    Sitecore.Links.LinkManager.GetItemUrl(context.DataManager.Database.GetItem(ID.Parse(change.Value)), options);
                            }
                        }
                        else if (change.FieldID == ID.Parse(CREATED_FIELD))
                        {
                            values[BOTR_DATE] = Sitecore.DateUtil.IsoDateToDateTime(change.Value).ToUnixTimestamp().ToString();
                        }
                    }

                    XmlDocument response = CallApi("/videos/update", values);
                    XmlNode     status   = response.SelectSingleNode("/response/status");
                    if (status != null && status.InnerText.ToLower() == "ok")
                    {
                        Cache.Clear();
                        return(true);
                    }
                }
                return(false);
            }
            return(false);
        }
示例#28
0
 /// <summary>
 ///     Read a file with decryption constants using an id table entry
 /// </summary>
 /// <param name="file"></param>
 /// <param name="game"></param>
 /// <param name="entry"></param>
 /// <param name="truth"></param>
 /// <param name="multiplier"></param>
 /// <param name="divisor"></param>
 /// <returns></returns>
 public static Span <byte> Read(Span <byte> file, string game, IDTableEntry entry, byte[] truth, ulong multiplier, ulong divisor) => Read(file, game, entry.CompressedSize, entry.DecompressedSize, entry.Flags, truth, multiplier, divisor);
示例#29
0
        internal IDTableEntry Add(string prefix, string key, ID id, ID parentId)
        {
            var idTableIdKey = new IdTableIdKey(prefix, id.Guid);

            var tableEntry = new IDTableEntry(prefix, key, id, parentId, "");

            if (!_idById.ContainsKey(idTableIdKey))
            {
                _idById.Add(idTableIdKey, new List<IDTableEntry> { tableEntry });
            }

            var idTableStringKey = new IdTableStringKey(prefix, key);

            if (!_idByKey.ContainsKey(idTableStringKey))
            {
                _idByKey[idTableStringKey] = tableEntry;
            }

            return IDTable.Add(prefix, key, id, parentId);
        }
        private void PrepareMigrationOfEntry(IDTableEntry entry)
        {
            if (entry.Key.StartsWith("{"))
            {
                PrepareMigrationOfStandardValuesItem(entry);
                _entriesToBeDeleted.Add(entry);
                return;
            }
            var nodetype = GetNodeTypeFromKey(entry.Key);

            switch (nodetype)
            {
            case "product":
            case "productVariant":
                PrepareMigrationOfEntity(entry, BuildSqlToUpgradeProduct);
                break;

            case "productCategory":
                PrepareMigrationOfEntity(entry, BuildSqlToUpgradeCategory);
                break;

            case "productCatalog":
                PrepareMigrationOfEntity(entry, BuildSqlToUpgradeCatalog);
                break;

            case "productCatalogGroup":
                PrepareMigrationOfEntity(entry, BuildSqlToUpgradeStore);
                break;

            case "currency":
                PrepareMigrationOfEntity(entry, BuildSqlToUpgradeCurrency);
                break;

            case "productDefinitionTemplate":
                _dictionaryOfTemplateIds.Add(GetIdFromKey(entry.Key), entry.ID.Guid);
                PrepareMigrationOfEntity(entry, BuildSqlToUpgradeProductDefinition);
                break;

            case "productDefinitionTemplateVariant":
                _dictionaryOfVariantTemplateIds.Add(GetIdFromKey(entry.Key), entry.ID.Guid);
                _entriesToBeDeleted.Add(entry);
                break;

            case "definitionTemplate":
                PrepareMigrationOfEntity(entry, BuildSqlToUpgradeCategoryDefinition);
                break;

            case "ProductDefinitionFieldTemplateField":
            case "ProductDefinitionFieldTemplateFieldForVariant":
                PrepareMigrationOfEntity(entry, BuildSqlToUpgradeProductDefinitionField);
                break;

            case "CategoryDefinitionDynamicFieldsField":
                PrepareMigrationOfEntity(entry, BuildSqlToUpgradeCategoryDefinitionField);
                break;

            default:
                _log.Log <MigrateIdTableValues>(string.Format("Skipping migration of entry with key: {0}", entry.Key));
                break;
            }
        }
示例#31
0
        internal static bool HasIDTableEntry(string prefix, string key)
        {
            IDTableEntry idTableEntry = IDTable.GetID(prefix, key);

            return(idTableEntry != null);
        }
 private void PrepareMigrationOfStandardValuesItem(IDTableEntry entry)
 {
     _dictionaryTemplateIdToStandardValueItemId.Add(entry.ParentID.Guid, entry.ID.Guid);
 }
示例#33
0
        public override IDList GetChildIDs(ItemDefinition itemDefinition, CallContext context)
        {
            if (this.CanProcessParent(itemDefinition.ID, context))
            {
                context.Abort();

                var idList   = new IDList();
                ID  parentId = itemDefinition.ID;

                var database   = context.DataManager.Database;
                var actualItem = database.GetItem(parentId);

                var values = this.DataProviderDamHelper.ProcessingParentFieldNames.ToDictionary(fieldName => fieldName, fieldName => actualItem[fieldName]);

                var keyList = this.DataProviderDamHelper.GetChildKeys(values);

                var keys = keyList as string[] ?? keyList.ToArray();
                if (!keys.Any())
                {
                    return(new IDList());
                }

                foreach (var key in keys)
                {
                    if (string.IsNullOrEmpty(key))
                    {
                        continue;
                    }

                    var keyString = key + "|" + parentId.ToShortID();

                    IDTableEntry idEntry = IDTable.GetID(this.IdTablePrefix,
                                                         keyString);
                    ID newID;
                    if (idEntry == null)
                    {
                        var itemName = this.DataProviderDamHelper.GetItemName(key);

                        if (itemName == "Undefined")
                        {
                            continue;
                        }

                        newID = ID.NewID;
                        IDTable.Add(this.IdTablePrefix,
                                    keyString,
                                    newID, parentId, ItemUtil.ProposeValidItemName(Path.GetFileNameWithoutExtension(itemName)));
                    }
                    else
                    {
                        newID = idEntry.ID;
                    }
                    idList.Add(newID);
                }

                context.DataManager.Database.Caches.DataCache.Clear();

                return(idList);
            }

            return(base.GetChildIDs(itemDefinition, context));
        }
示例#34
0
        public IDTableEntry GetNewID(string prefix, string key, ID parentId)
        {
            IDTableEntry newId = IDTable.GetNewID(prefix, key, parentId);

            return(newId);
        }