protected override void CopyFrom(Metadata other) { if (other == null) { throw new ArgumentNullException("other"); } base.CopyFrom(other); ComponentMetadata metadata = (ComponentMetadata)other; m_IOSpec = metadata.m_IOSpec.Clone(); m_configWrapper = metadata.m_configWrapper.Clone(); m_experimentLocationRoot = metadata.m_experimentLocationRoot; m_componentMetadataDefinition = metadata.m_componentMetadataDefinition; m_componentMetadataDefinitionID = metadata.m_componentMetadataDefinitionID; HasDeserializationError = metadata.HasDeserializationError; if (HasDeserializationError) { DeserializationErrorMessage = metadata.DeserializationErrorMessage; } m_tempConfigWrapper = metadata.m_tempConfigWrapper; m_tempIoSpec = metadata.m_tempIoSpec; m_tempLabel = metadata.m_tempLabel; }
/// <summary> /// Clones this instance. /// </summary> /// <returns></returns> public override Metadata Clone() { var clone = new ComponentMetadata(this); clone.CopyFrom(this); return(clone); }
/// <summary> /// Prevents a default instance of the <see cref="ComponentMetadata"/> class from being created. /// </summary> /// <param name="other">The other.</param> private ComponentMetadata(ComponentMetadata other) { m_experimentLocationRoot = other.m_experimentLocationRoot; m_IOSpec = other.m_IOSpec.Clone(); m_componentMetadataDefinition = other.m_componentMetadataDefinition; m_componentMetadataDefinitionID = other.m_componentMetadataDefinitionID; m_configWrapper = other.m_configWrapper.Clone(); m_tempConfigWrapper = other.m_tempConfigWrapper; m_tempIoSpec = other.m_tempIoSpec; m_tempLabel = other.m_tempLabel; }
/// <summary> /// Determines whether the specified <see cref="System.Object"/> is equal to this s_instance. /// </summary> /// <param name="obj">The <see cref="System.Object"/> to compare with this s_instance.</param> /// <returns> /// <c>true</c> if the specified <see cref="System.Object"/> is equal to this s_instance; otherwise, <c>false</c>. /// </returns> public override bool Equals(object obj) { ComponentMetadata other = obj as ComponentMetadata; if (other == null) { return(false); } bool isEqual = true; isEqual &= object.Equals(IOSpec, other.IOSpec); isEqual &= object.Equals(ComponentMetadataDefinitionID, other.ComponentMetadataDefinitionID); isEqual &= object.Equals(ConfigWrapper, other.ConfigWrapper); isEqual &= object.Equals(Label, other.Label); isEqual &= object.Equals(ComponentMetadataDefinition, other.ComponentMetadataDefinition); return(isEqual); }
/// <summary> /// Initializes a new instance of the <see cref="ComponentLoader"/> class. /// /// Note, that this component loader is constructed in the secondary App Domain via CreateInstanceAndUnwrap. /// (See LoadComponent method in the ComponentsLibrary). /// It is essential that this is done in another App Domain, so that the assembly can be unloaded, after /// experiment execution is completed. /// </summary> /// <param name="metadata">The metadata.</param> /// <param name="workspace">The workspace.</param> public ComponentLoader(ComponentMetadata metadata, IWorkspaceInternal workspace) { m_metadata = metadata; m_workspace = workspace; }
/// <summary> /// Clones this instance. /// </summary> /// <returns></returns> public override Metadata Clone() { var clone = new ComponentMetadata(this); clone.CopyFrom(this); return clone; }
/// <summary> /// Checks the output mappings format for illegal characters. /// In particular it assures that mappings do not contain Workspace Namespace_Delimiter character. /// </summary> /// <param name="componentMetadata">The component metadata.</param> /// <param name="errorMessage">The error message, if method returns false</param> /// <returns>true, if there are no errors, otherwise false.</returns> private static bool CheckOutputMappingFormat(ComponentMetadata componentMetadata, out string errorMessage) { bool noErrors = true; StringBuilder error = new StringBuilder(); //validate also if mappings do not contain illegal characters (in particular workspace namespace delimiter) foreach (IOItem item in componentMetadata.IOSpec.Output.Values) { if (item.MappedTo.Contains(TraceLab.Core.Workspaces.Workspace.NAMESPACE_DELIMITER)) { noErrors = false; error.AppendLine(String.Format("Output mapping '{0}' cannot contain character '{1}'", item.MappedTo, TraceLab.Core.Workspaces.Workspace.NAMESPACE_DELIMITER)); } } errorMessage = error.ToString(); return noErrors; }
/// <summary> /// Creates the workspace wrapper, which ensures that loading and storing of workspace items has been declared by the component. /// </summary> /// <param name="originalComponentMetadata">The component metadata.</param> /// <param name="workspaceInstance">The workspace instance.</param> /// <returns>created workspace wrapper</returns> public static WorkspaceWrapper CreateWorkspaceWrapper(ComponentMetadata componentMetadata, IWorkspaceInternal workspaceInstance) { return new WorkspaceWrapper(componentMetadata.IOSpec, workspaceInstance); }