protected override ResourceSaveOperation CreateSaveOperationForItem(IStorage storage, CatalogContext context, CatalogItem item, CancellationToken cancellationToken) { // This method decides what to do with the item. // If it's a RegistrationMakerCatalogItem and it already exists, then don't write content. var registrationMakerCatalogItem = item as RegistrationMakerCatalogItem; if (registrationMakerCatalogItem != null) { var content = item.CreateContent(Context); // note: always do this first var resourceUri = item.GetItemAddress(); var saveOperation = new ResourceSaveOperation(); saveOperation.ResourceUri = resourceUri; if (!registrationMakerCatalogItem.IsExistingItem && content != null) { saveOperation.SaveTask = storage.Save(resourceUri, content, cancellationToken); } else { Trace.WriteLine(string.Format("Resource {0} already exists. Skipping.", resourceUri), "Debug"); } return saveOperation; } return base.CreateSaveOperationForItem(storage, context, item, cancellationToken); }
public static async Task<Uri> AddToCatalog(CatalogItem catalogItem, string connectionString, string container, string catalogBaseAddress, CancellationToken cancellationToken) { StorageWriteLock writeLock = new StorageWriteLock(connectionString, container); await writeLock.AquireAsync(); Uri rootUri = null; Exception exception = null; try { Storage storage = CreateStorage(connectionString, container, catalogBaseAddress); AppendOnlyCatalogWriter writer = new AppendOnlyCatalogWriter(storage); writer.Add(catalogItem); await writer.Commit(null, cancellationToken); rootUri = writer.RootUri; } catch (Exception e) { exception = e; } await writeLock.ReleaseAsync(); if (exception != null) { throw exception; } return rootUri; }
public void Add(CatalogItem item) { if (!_open) { throw new ObjectDisposedException(GetType().Name); } _batch.Add(item); }
protected override Uri CreateCatalogPage(CatalogItem item) { // save the content to a non-temp location StorageContent content = item.CreateContent(Context); if (content != null) { var resourceUri = item.GetItemAddress(); Storage.Save(resourceUri, content, CancellationToken.None).Wait(); return resourceUri; } return null; }
protected virtual ResourceSaveOperation CreateSaveOperationForItem(IStorage storage, CatalogContext context, CatalogItem item, CancellationToken cancellationToken) { // This method decides what to do with the item. // Standard method of operation: if content == null, don't do a thing. Else, write content. var content = item.CreateContent(Context); // note: always do this first var resourceUri = item.GetItemAddress(); var operation = new ResourceSaveOperation(); operation.ResourceUri = resourceUri; if (content != null) { operation.SaveTask = storage.Save(resourceUri, content, cancellationToken); } return operation; }
protected virtual Uri CreateCatalogPage(CatalogItem item) { Uri tmpUri = GetTempUri("catalogpage", "ttl"); using (IGraph graph = item.CreateContentGraph(Context)) { if (_addons != null) { INode rdfTypePredicate = graph.CreateUriNode(Schema.Predicates.Type); Triple resource = graph.GetTriplesWithPredicateObject(rdfTypePredicate, graph.CreateUriNode(item.GetItemType())).First(); foreach (var addon in _addons) { addon.ApplyToGraph(graph, (IUriNode)resource.Subject); } } SaveGraph(graph, tmpUri, CancellationToken.None).Wait(); } return tmpUri; }