public IComponentName GetName(IDependencyProviderConfig config)
        {
            switch (config.Type)
            {
            case "Local":
                return(new ComponentName(GetFieldValue(DependencyProviderValidSettingName.ComponentName)));

            case "BuildResultJSON":
            case "BuildResult":
                return(new ComponentName(
                           GetFieldValue(DependencyProviderValidSettingName.TeamProjectName),
                           GetFieldValue(DependencyProviderValidSettingName.BuildDefinition)));

            case "FileShare":
                return(new ComponentName(GetFieldValue(DependencyProviderValidSettingName.ComponentName)));

            case "SourceControl":
            case "SourceControlCopy":
                return
                    (new ComponentName(GetFieldValue(DependencyProviderValidSettingName.ServerRootPath)));

            case "BinaryRepository":
                return(new ComponentName(GetFieldValue(DependencyProviderValidSettingName.ComponentName)));

            case "Subversion":
                return(new ComponentName(GetFieldValue(DependencyProviderValidSettingName.SubversionRootPath)));

            default:
                throw new DependencyServiceException(
                          string.Format(
                              "Unsupported dependency type \"{0}\" found. Please check component {1}!", config.Type, Name));
            }
        }
        public ComponentType GetType(IDependencyProviderConfig config)
        {
            switch (config.Type)
            {
            case "Local":
                return(ComponentType.Local);

            case "BuildResultJSON":
                return(ComponentType.VNextBuildResult);

            case "BuildResult":
                return(ComponentType.BuildResult);

            case "FileShare":
                return(ComponentType.FileShare);

            case "SourceControl":
                return(ComponentType.SourceControl);

            case "SourceControlCopy":
                return(ComponentType.SourceControlCopy);

            case "BinaryRepository":
                return(ComponentType.BinaryRepository);

            case "Subversion":
                return(ComponentType.Subversion);

            default:
                throw new DependencyServiceException(string.Format("Unsupported dependency type \"{0}\" found. Please check component {1}!", config.Type, Name));
            }
        }
        /// <summary>
        /// Constructor which creates a new Component object with a name, version type and a list with predecessor and successor components.
        /// </summary>
        /// <param name="config">The deserialized config</param>
        public Component(IDependencyProviderConfig config)
        {
            if (config == null)
            {
                throw new InvalidComponentException("Component for dependency graph was initialized with an invalid component description (Config was null)");
            }

            InitializeFieldsFromConfig(config);
        }
        public IComponentVersion GetVersion(IDependencyProviderConfig config)
        {
            switch (config.Type)
            {
            case "Local":
                return(new ComponentVersion(GetFieldValue(DependencyProviderValidSettingName.VersionNumber)));

            case "BuildResultJSON":
                return(new ComponentVersion(
                           buildNumber: GetFieldValue(DependencyProviderValidSettingName.BuildNumber),
                           acceptedBuildStatus: GetBuildStatusOrQuality(DependencyProviderValidSettingName.BuildStatus),
                           acceptedBuildQuality: null,
                           acceptedBuildTags: GetBuildStatusOrQuality(DependencyProviderValidSettingName.BuildTags)
                           ));

            case "BuildResult":
                return(new ComponentVersion(
                           buildNumber: GetFieldValue(DependencyProviderValidSettingName.BuildNumber),
                           acceptedBuildStatus: GetBuildStatusOrQuality(DependencyProviderValidSettingName.BuildStatus),
                           acceptedBuildQuality: GetBuildStatusOrQuality(DependencyProviderValidSettingName.BuildQuality),
                           acceptedBuildTags: null));

            case "FileShare":
                return(new ComponentVersion(GetFieldValue(DependencyProviderValidSettingName.VersionNumber)));

            case "SourceControl":
            case "SourceControlCopy":
                var versionSpec = GetFieldValue(DependencyProviderValidSettingName.VersionSpec);
                if (string.IsNullOrWhiteSpace(versionSpec))
                {
                    // Version spec is not set probably because it is an already downloaded component
                    versionSpec = string.Format(
                        "W{0};{1}",
                        GetFieldValue(DependencyProviderValidSettingName.WorkspaceName),
                        GetFieldValue(DependencyProviderValidSettingName.WorkspaceOwner));
                }
                var version = VersionSpec.Parse(
                    versionSpec, GetFieldValue(DependencyProviderValidSettingName.WorkspaceOwner)).
                              First();
                return(new ComponentVersion(version));

            case "BinaryRepository":
                return(new ComponentVersion(GetFieldValue(DependencyProviderValidSettingName.VersionNumber)));

            case "Subversion":
                return(new ComponentVersion(GetFieldValue(DependencyProviderValidSettingName.VersionSpec)));

            default:
                throw new DependencyServiceException(
                          string.Format(
                              "Unsupported dependency type \"{0}\" found. Please check component {1}!", config.Type, Name));
            }
        }
        private void InitializeFieldsFromConfig(IDependencyProviderConfig config)
        {
            _fields = new Dictionary <string, string>(StringComparer.InvariantCultureIgnoreCase);

            foreach (var setting in config.Settings.SettingsList)
            {
                _fields.Add(setting.Name.ToString(), setting.Value);
            }

            Name    = GetName(config);
            Version = GetVersion(config);
            Type    = GetType(config);
        }
 /// <summary>
 /// Constructor which creates a new Component object with a name, version type and a list with predecessor and successor components.
 /// </summary>
 /// <param name="effectiveVersion">Effective version to override</param>
 /// <param name="config">The deserialized config</param>
 /// <param name="predecessors">List of predecessor components</param>
 /// <param name="successors">List of successor components</param>
 public Component(IComponentVersion effectiveVersion, IDependencyProviderConfig config, List <IDependency> predecessors, List <IDependency> successors)
     : this(config, predecessors, successors)
 {
     // Override version here
     Version = effectiveVersion;
 }
 /// <summary>
 /// Constructor which creates a new Component object with a name, version type and a list with predecessor and successor components.
 /// </summary>
 /// <param name="config">The deserialized config</param>
 /// <param name="predecessors">List of predecessor components</param>
 /// <param name="successors">List of successor components</param>
 public Component(IDependencyProviderConfig config, List <IDependency> predecessors, List <IDependency> successors)
     : this(config)
 {
     _predecessors = predecessors;
     _successors   = successors;
 }