public void Process(JObject package, string registration, List<JObject> dependencies, List<string> targetFrameworks)
        {
            GalleryExportPackage export = new GalleryExportPackage
            {
                Package = package,
                Id = registration,
                Dependencies = dependencies,
                TargetFrameworks = targetFrameworks
            };

            _currentBatch.Add(export);

            if (_currentBatch.Count == _batchSize)
            {
                SubmitCurrentBatch();
                _currentBatch.Clear();
            }
        }
        static JObject CreateContent(string resourceUri, GalleryExportPackage export)
        {
            IDictionary<string, string> Lookup = new Dictionary<string, string>
            {
                { "Title", "title" },
                { "Version", "version" },
                { "Description", "description" },
                { "Summary", "summary" },
                { "Authors", "authors" },
                { "LicenseUrl", "licenseUrl" },
                { "ProjectUrl", "projectUrl" },
                { "IconUrl", "iconUrl" },
                { "RequireLicenseAcceptance", "requireLicenseAcceptance"},
                { "Language", "language" },
                { "ReleaseNotes", "releaseNotes"}
            };

            JObject obj = new JObject();

            obj.Add("url", resourceUri);

            obj.Add("@type", "Package");

            obj.Add("id", export.Id);

            foreach (JProperty property in export.Package.Properties())
            {
                if (property.Name == "Tags")
                {
                    char[] trimChar = { ',', ' ', '\t', '|', ';' };

                    IEnumerable<string> fields = property.Value.ToString()
                        .Split(trimChar)
                        .Select((w) => w.Trim(trimChar))
                        .Where((w) => w.Length > 0);

                    JArray tagArray = new JArray();
                    foreach (string field in fields)
                    {
                        tagArray.Add(field);
                    }
                    obj.Add("tag", tagArray);
                }
                else
                {
                    string name;
                    if (Lookup.TryGetValue(property.Name, out name))
                    {
                        obj.Add(name, property.Value);
                    }
                }
            }

            if (export.Dependencies != null)
            {
                string dependenciesUri = resourceUri + "#dependencies";

                JObject dependenciesObj = new JObject();

                dependenciesObj.Add("url", dependenciesUri);

                JArray dependencyGroups = new JArray();
                foreach (IGrouping<JToken, JObject> group in export.Dependencies.GroupBy(d => d["TargetFramework"]))
                {
                    string targetFramework = group.Key.ToString();

                    string dependencyGroupUri = dependenciesUri + "/group";

                    JObject dependencyGroup = new JObject();

                    if (targetFramework != "")
                    {
                        dependencyGroup.Add("targetFramework", targetFramework);
                        dependencyGroupUri = dependencyGroupUri + "/" + targetFramework.ToLowerInvariant();
                    }

                    dependencyGroup.Add("url", dependencyGroupUri);

                    JArray dependencyGroupDependencies = new JArray();

                    foreach (JObject value in group)
                    {
                        JObject dependencyGroupDependency = new JObject();

                        string id = value["Id"].ToString().ToLowerInvariant();

                        string dependencyGroupDependencyUri = dependencyGroupUri + "/" + id;

                        dependencyGroupDependency.Add("url", dependencyGroupDependencyUri);
                        dependencyGroupDependency.Add("id", id);
                        dependencyGroupDependency.Add("range", value["VersionSpec"].ToString());

                        dependencyGroupDependencies.Add(dependencyGroupDependency);
                    }

                    dependencyGroup.Add("dependency", dependencyGroupDependencies);

                    dependencyGroups.Add(dependencyGroup);
                }

                dependenciesObj.Add("group", dependencyGroups);

                obj.Add("dependencies", dependenciesObj);
            }

            if (export.TargetFrameworks != null)
            {
                JArray array = new JArray();
                foreach (string targetFramework in export.TargetFrameworks)
                {
                    array.Add(targetFramework);
                }
                obj.Add("targetFramework", array);
            }

            return obj;
        }
 public GalleryExportCatalogItem(GalleryExportPackage export)
 {
     _export = export;
     _identity = (export.Id + "." + export.Package["Version"]).ToLowerInvariant();
 }