/// <summary> /// Visits a payload element whose root is a WorkspaceInstance. /// </summary> /// <param name="payloadElement">The root node of payload element being visited.</param> /// <returns>The original element or a copy to replace it with</returns> public virtual ODataPayloadElement Visit(WorkspaceInstance payloadElement) { ExceptionUtilities.CheckArgumentNotNull(payloadElement, "payloadElement"); IList <ResourceCollectionInstance> replacedCollections = null; if (payloadElement.ResourceCollections != null) { replacedCollections = new List <ResourceCollectionInstance>(); foreach (ResourceCollectionInstance collection in payloadElement.ResourceCollections) { ExceptionUtilities.CheckObjectNotNull(collection, "Resource collection is null"); ResourceCollectionInstance replacedCollection = this.Visit(collection) as ResourceCollectionInstance; ExceptionUtilities.CheckObjectNotNull(replacedCollection, "Replaced resource collection was null or wrong type"); replacedCollections.Add(replacedCollection); } } if (!this.ShouldReplace(payloadElement.ResourceCollections, replacedCollections)) { return(payloadElement); } WorkspaceInstance replacedWorkspace = new WorkspaceInstance(replacedCollections.ToArray()); replacedWorkspace.Title = payloadElement.Title; return(payloadElement.ReplaceWith(replacedWorkspace)); }
/// <summary> /// Visits a payload element whose root is a ServiceDocumentInstance. /// </summary> /// <param name="payloadElement">The root node of payload element being visited.</param> /// <returns>The original element or a copy to replace it with</returns> public virtual ODataPayloadElement Visit(ServiceDocumentInstance payloadElement) { ExceptionUtilities.CheckArgumentNotNull(payloadElement, "payloadElement"); IList <WorkspaceInstance> replacedWorkspaces = null; if (payloadElement.Workspaces != null) { replacedWorkspaces = new List <WorkspaceInstance>(); foreach (WorkspaceInstance workspace in payloadElement.Workspaces) { ExceptionUtilities.CheckObjectNotNull(workspace, "Workspace is null"); WorkspaceInstance replacedWorkspace = this.Visit(workspace) as WorkspaceInstance; ExceptionUtilities.CheckObjectNotNull(replacedWorkspace, "Replaced workspace was null or wrong type"); replacedWorkspaces.Add(replacedWorkspace); } } if (!this.ShouldReplace(payloadElement.Workspaces, replacedWorkspaces)) { return(payloadElement); } return(payloadElement.ReplaceWith(new ServiceDocumentInstance(replacedWorkspaces.ToArray()))); }
/// <summary> /// Normalizes workspace specific atom metadata. /// </summary> /// <param name="payloadElement">The payload element to normalize.</param> public override void Visit(WorkspaceInstance payloadElement) { NormalizeTitleValue( payloadElement, payloadElement.Title, (value) => payloadElement.Title = value); base.Visit(payloadElement); }
/// <summary> /// Visits a payload element whose root is a WorkspaceInstance. /// </summary> /// <param name="payloadElement">The root node of the payload element being visited.</param> public override void Visit(WorkspaceInstance payloadElement) { base.Visit(payloadElement); foreach (var resourceCollection in payloadElement.ResourceCollections) { if (string.IsNullOrEmpty(resourceCollection.Name)) { // Resource collection names are mandatory in JSON Light. resourceCollection.Name = "ResourceCollection_" + Guid.NewGuid().ToString(); } } }
/// <summary> /// Visits a payload element whose root is a WorkspaceInstance. /// </summary> /// <param name="expected">The root node of payload element being visited.</param> public void Visit(WorkspaceInstance expected) { ExceptionUtilities.CheckArgumentNotNull(expected, "expected"); var observed = this.GetNextObservedElement <WorkspaceInstance>(); using (this.Assert.WithMessage("Workspace instance did not match expectation")) { this.CompareAnnotations(expected.Annotations, observed.Annotations); this.Assert.AreEqual(expected.Title, observed.Title, "Title did not match expectation"); this.CompareList <ResourceCollectionInstance>(expected.ResourceCollections, observed.ResourceCollections); } }
/// <summary> /// Visits the payload element /// </summary> /// <param name="payloadElement">The payload element to visit</param> public override void Visit(WorkspaceInstance payloadElement) { ExceptionUtilities.CheckArgumentNotNull(payloadElement, "payloadElement"); ExceptionUtilities.CheckObjectNotNull(this.currentXElement, "Current XElement is not defined"); XElement workspaceElement = CreateAtomPubElement(this.currentXElement, "workspace"); if (payloadElement.Title != null) { XElement title = CreateAtomElement(workspaceElement, "title"); title.Value = payloadElement.Title; } foreach (ResourceCollectionInstance collection in payloadElement.ResourceCollections) { this.VisitPayloadElement(collection, workspaceElement); } PostProcessXElement(payloadElement, workspaceElement); }
/// <summary> /// Visits a serviceDocument item. /// </summary> /// <param name="serviceDocument">The serviceDocument item to visit.</param> /// <returns>An ODataPayloadElement representing a service document enclosing the serviceDocument.</returns> protected override ODataPayloadElement VisitWorkspace(ODataServiceDocument serviceDocument) { ExceptionUtilities.CheckArgumentNotNull(serviceDocument, "serviceDocument"); ServiceDocumentInstance wrappingServiceDocumentInstance = (ServiceDocumentInstance)base.VisitWorkspace(serviceDocument); WorkspaceInstance workspaceInstance = wrappingServiceDocumentInstance.Workspaces.Single(); AtomWorkspaceMetadata atomMetadata = serviceDocument.GetAnnotation <AtomWorkspaceMetadata>(); if (atomMetadata != null) { if (atomMetadata.Title != null) { workspaceInstance.Title = atomMetadata.Title.Text; workspaceInstance.AtomTitle(atomMetadata.Title.Text, ToString(atomMetadata.Title.Kind)); } } return(wrappingServiceDocumentInstance); }
private void Dispose(bool disposing) { if (disposing) { WorkspaceInstance.Dispose(); } if (File.Exists(OutputAssembly)) { try { System.IO.File.Delete(OutputAssembly); } catch (UnauthorizedAccessException) { } } ClearDecisions(); }
/// <summary> /// Visits a serviceDocument. /// </summary> /// <param name="serviceDocument">The serviceDocument to visit.</param> protected override ODataPayloadElement VisitWorkspace(ODataServiceDocument serviceDocument) { ExceptionUtilities.CheckArgumentNotNull(serviceDocument, "serviceDocument"); WorkspaceInstance workspaceInstance = new WorkspaceInstance(); IEnumerable <ODataEntitySetInfo> collections = serviceDocument.EntitySets; if (collections != null) { foreach (ODataEntitySetInfo collection in collections) { ResourceCollectionInstance collectionInstance = (ResourceCollectionInstance)this.Visit(collection); workspaceInstance.ResourceCollections.Add(collectionInstance); } } // Since ODataLib only supports a single serviceDocument and does not have an OM representation of the service // document, wrap the single serviceDocument in a service document instance here. return(new ServiceDocumentInstance(workspaceInstance)); }
/// <summary> /// Visits a payload element whose root is a WorkspaceInstance. /// </summary> /// <param name="payloadElement">The root node of payload element being visited.</param> public void Visit(WorkspaceInstance payloadElement) { ExceptionUtilities.Assert(!this.isRootElement, "Json serialization does not allow a root element of type: {0}", payloadElement.ElementType.ToString()); this.writer.StartObjectScope(); this.writer.WriteName("EntitySets"); this.writer.StartArrayScope(); if (payloadElement.ResourceCollections != null) { foreach (ResourceCollectionInstance collection in payloadElement.ResourceCollections) { this.Recurse(collection); } } this.writer.EndScope(); this.writer.EndScope(); }
/// <summary> /// Removes the title property and ATOM metadata annotations from a <see cref="WorkspaceInstance"/>. /// </summary> /// <param name="payloadElement">The workspace instance to visit.</param> public override void Visit(WorkspaceInstance payloadElement) { payloadElement.Title = null; base.Visit(payloadElement); }
/// <summary> /// Visits a payload element whose root is a WorkspaceInstance. /// </summary> /// <param name="payloadElement">The root node of payload element being visited.</param> public void Visit(WorkspaceInstance payloadElement) { ExceptionUtilities.Assert(!this.isRootElement, "Json serialization does not allow a root element of type: {0}", payloadElement.ElementType.ToString()); this.writer.StartObjectScope(); this.writer.WriteName("EntitySets"); this.writer.StartArrayScope(); if (payloadElement.ResourceCollections != null) { foreach (ResourceCollectionInstance collection in payloadElement.ResourceCollections) { this.Recurse(collection); } } this.writer.EndScope(); this.writer.EndScope(); }
/// <summary> /// Visits the payload element /// </summary> /// <param name="payloadElement">The payload element to visit</param> public virtual void Visit(WorkspaceInstance payloadElement) { ExceptionUtilities.CheckArgumentNotNull(payloadElement, "payloadElement"); this.VisitEnumerable <ResourceCollectionInstance>(payloadElement.ResourceCollections); }
/// <summary> /// Removes the title property and ATOM metadata annotations from a <see cref="WorkspaceInstance"/>. /// </summary> /// <param name="payloadElement">The workspace instance to visit.</param> public override void Visit(WorkspaceInstance payloadElement) { payloadElement.Title = null; base.Visit(payloadElement); }
/// <summary> /// Visits a payload element whose root is a WorkspaceInstance. /// </summary> /// <param name="payloadElement">The root node of payload element being visited.</param> public void Visit(WorkspaceInstance payloadElement) { throw new TaupoNotSupportedException("Not implemented."); }
/// <summary> /// Visits a payload element whose root is a WorkspaceInstance. /// </summary> /// <param name="payloadElement">The root node of the payload element being visited.</param> public override void Visit(WorkspaceInstance payloadElement) { base.Visit(payloadElement); foreach (var resourceCollection in payloadElement.ResourceCollections) { if (string.IsNullOrEmpty(resourceCollection.Name)) { // Resource collection names are mandatory in JSON Light. resourceCollection.Name = "ResourceCollection_" + Guid.NewGuid().ToString(); } } }