Paradox Game Engine  v1.0.0 beta06
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Events Macros Pages
PackageMeta.cs
Go to the documentation of this file.
1 // Copyright (c) 2014 Silicon Studio Corp. (http://siliconstudio.co.jp)
2 // This file is distributed under GPL v3. See LICENSE.md for details.
3 using System;
4 using System.Collections.Generic;
5 using System.ComponentModel;
6 using System.Linq;
7 using SiliconStudio.Core;
8 
9 namespace SiliconStudio.Assets
10 {
11  /// <summary>
12  /// Metadata for a <see cref="Package"/> accessible from <see cref="Package.Meta"/>.
13  /// </summary>
14  [DataContract("PackageMeta")]
15  public sealed class PackageMeta
16  {
17  /// <summary>
18  /// Initializes a new instance of the <see cref="PackageMeta"/> class.
19  /// </summary>
20  public PackageMeta()
21  {
22  Authors = new List<string>();
23  Owners = new List<string>();
24  Dependencies = new PackageDependencyCollection();
25  }
26 
27  /// <summary>
28  /// Gets or sets the identifier name of this package.
29  /// </summary>
30  /// <value>The name.</value>
31  [DataMember(10)]
32  [DefaultValue(null)]
33  public string Name { get; set; }
34 
35  /// <summary>
36  /// Gets or sets the version of this package.
37  /// </summary>
38  /// <value>The version.</value>
39  [DataMember(20)]
40  [DefaultValue(null)]
41  public PackageVersion Version { get; set; }
42 
43  /// <summary>
44  /// Gets or sets the title.
45  /// </summary>
46  /// <value>The title.</value>
47  [DataMember(30)]
48  [DefaultValue(null)]
49  public string Title { get; set; }
50 
51  /// <summary>
52  /// Gets the authors.
53  /// </summary>
54  /// <value>The authors.</value>
55  [DataMember(40)]
56  public List<string> Authors { get; private set; }
57 
58  /// <summary>
59  /// Gets the owners.
60  /// </summary>
61  /// <value>The owners.</value>
62  [DataMember(50)]
63  public List<string> Owners { get; private set; }
64 
65  /// <summary>
66  /// Gets or sets the icon URL.
67  /// </summary>
68  /// <value>The icon URL.</value>
69  [DataMember(60)]
70  [DefaultValue(null)]
71  public Uri IconUrl { get; set; }
72 
73  /// <summary>
74  /// Gets or sets the license URL.
75  /// </summary>
76  /// <value>The license URL.</value>
77  [DataMember(70)]
78  [DefaultValue(null)]
79  public Uri LicenseUrl { get; set; }
80 
81  /// <summary>
82  /// Gets or sets the project URL.
83  /// </summary>
84  /// <value>The project URL.</value>
85  [DataMember(80)]
86  [DefaultValue(null)]
87  public Uri ProjectUrl { get; set; }
88 
89  /// <summary>
90  /// Gets or sets a value indicating whether it requires license acceptance.
91  /// </summary>
92  /// <value><c>true</c> if it requires license acceptance; otherwise, <c>false</c>.</value>
93  [DataMember(90)]
94  [DefaultValue(false)]
95  public bool RequireLicenseAcceptance { get; set; }
96 
97  /// <summary>
98  /// Gets or sets the description of this package.
99  /// </summary>
100  /// <value>The description.</value>
101  [DataMember(100)]
102  [DefaultValue(null)]
103  public string Description { get; set; }
104 
105  /// <summary>
106  /// Gets or sets the summary of this package.
107  /// </summary>
108  /// <value>The summary.</value>
109  [DataMember(110)]
110  [DefaultValue(null)]
111  public string Summary { get; set; }
112 
113  /// <summary>
114  /// Gets or sets the release notes of this package.
115  /// </summary>
116  /// <value>The release notes.</value>
117  [DataMember(120)]
118  [DefaultValue(null)]
119  public string ReleaseNotes { get; set; }
120 
121  /// <summary>
122  /// Gets or sets the language supported by this package.
123  /// </summary>
124  /// <value>The language.</value>
125  [DataMember(130)]
126  [DefaultValue(null)]
127  public string Language { get; set; }
128 
129  /// <summary>
130  /// Gets or sets the tags associated to this package.
131  /// </summary>
132  /// <value>The tags.</value>
133  [DataMember(140)]
134  [DefaultValue(null)]
135  public string Tags { get; set; }
136 
137  /// <summary>
138  /// Gets or sets the copyright.
139  /// </summary>
140  /// <value>The copyright.</value>
141  [DataMember(150)]
142  [DefaultValue(null)]
143  public string Copyright { get; set; }
144 
145  /// <summary>
146  /// Gets or sets the default namespace for this package.
147  /// </summary>
148  /// <value>The default namespace.</value>
149  [DataMember(155)]
150  [DefaultValue(null)]
151  public string RootNamespace { get; set; }
152 
153  /// <summary>
154  /// Gets the package dependencies.
155  /// </summary>
156  /// <value>The package dependencies.</value>
157  [DataMember(160)]
158  public PackageDependencyCollection Dependencies { get; private set; }
159 
160  /// <summary>
161  /// Gets the report abuse URL. Only valid for store packages.
162  /// </summary>
163  /// <value>The report abuse URL.</value>
164  [DataMemberIgnore]
165  public Uri ReportAbuseUrl { get; private set; }
166 
167  /// <summary>
168  /// Gets the download count. Only valid for store packages.
169  /// </summary>
170  /// <value>The download count.</value>
171  [DataMemberIgnore]
172  public int DownloadCount { get; private set; }
173 
174  /// <summary>
175  /// Gets a value indicating whether this instance is absolute latest version.
176  /// </summary>
177  /// <value><c>true</c> if this instance is absolute latest version; otherwise, <c>false</c>.</value>
178  [DataMemberIgnore]
179  public bool IsAbsoluteLatestVersion { get; private set; }
180 
181  /// <summary>
182  /// Gets a value indicating whether this instance is latest version.
183  /// </summary>
184  /// <value><c>true</c> if this instance is latest version; otherwise, <c>false</c>.</value>
185  [DataMemberIgnore]
186  public bool IsLatestVersion { get; private set; }
187 
188  /// <summary>
189  /// Gets a value indicating whether this <see cref="PackageMeta"/> is listed.
190  /// </summary>
191  /// <value><c>true</c> if listed; otherwise, <c>false</c>.</value>
192  [DataMemberIgnore]
193  public bool Listed { get; private set; }
194 
195  /// <summary>
196  /// Gets the published time.
197  /// </summary>
198  /// <value>The published.</value>
199  [DataMemberIgnore]
200  public DateTimeOffset? Published { get; private set; }
201 
202  /// <summary>
203  /// Copies local and store depdencies of this instance to the specified package
204  /// </summary>
205  /// <param name="packageMeta">The package meta.</param>
206  /// <exception cref="System.ArgumentNullException">packageMeta</exception>
207  public void CopyDependenciesTo(PackageMeta packageMeta)
208  {
209  if (packageMeta == null) throw new ArgumentNullException("packageMeta");
210  foreach (var packageDependency in Dependencies)
211  {
212  if (!packageMeta.Dependencies.Contains(packageDependency))
213  {
214  packageMeta.Dependencies.Add(packageDependency.Clone());
215  }
216  }
217  }
218 
219  /// <summary>
220  /// Creates a new <see cref="PackageMeta" /> with default values.
221  /// </summary>
222  /// <param name="packageName">Name of the package.</param>
223  /// <returns>PackageMeta.</returns>
224  /// <exception cref="System.ArgumentNullException">packageName</exception>
225  public static PackageMeta NewDefault(string packageName)
226  {
227  if (string.IsNullOrWhiteSpace(packageName)) throw new ArgumentNullException("packageName");
228 
229  var meta = new PackageMeta()
230  {
231  Name = packageName,
232  Version = new PackageVersion("1.0.0"),
233  Description = "Modify description of this package here",
234  };
235  meta.Authors.Add("Modify Author of this package here");
236 
237  return meta;
238  }
239 
240  /// <summary>
241  /// Initializes from a nuget package.
242  /// </summary>
243  /// <param name="metadata">The nuget metadata.</param>
244  private void InitializeFrom(NuGet.IPackageMetadata metadata)
245  {
246  Name = metadata.Id;
247  Version = new PackageVersion(metadata.Version.ToString());
248  Title = metadata.Title;
249  Authors.AddRange(metadata.Authors);
250  Owners.AddRange(metadata.Owners);
251  IconUrl = metadata.IconUrl;
252  LicenseUrl = metadata.LicenseUrl;
253  ProjectUrl = metadata.ProjectUrl;
254  RequireLicenseAcceptance = metadata.RequireLicenseAcceptance;
255  Description = metadata.Description;
256  Summary = metadata.Summary;
257  ReleaseNotes = metadata.ReleaseNotes;
258  Language = metadata.Language;
259  Tags = metadata.Tags;
260  Copyright = metadata.Copyright;
261 
262  var dependencySets = metadata.DependencySets.ToList();
263  if (dependencySets.Count > 1)
264  {
265  throw new InvalidOperationException("Metadata loaded from nuspec cannot have more than one group of dependency");
266  }
267 
268  // Load dependencies
269  Dependencies.Clear();
270  var dependencySet = dependencySets.FirstOrDefault();
271  if (dependencySet != null)
272  {
273  foreach (var dependency in dependencySet.Dependencies)
274  {
275  var packageDependency = new PackageDependency(dependency.Id, PackageVersionRange.FromVersionSpec(dependency.VersionSpec));
276  Dependencies.Add(packageDependency);
277  }
278  }
279 
280  var serverMetaData = metadata as NuGet.IServerPackageMetadata;
281  if (serverMetaData != null)
282  {
283  ReportAbuseUrl = serverMetaData.ReportAbuseUrl;
284  DownloadCount = serverMetaData.DownloadCount;
285  }
286 
287  var package = metadata as NuGet.IPackage;
288  if (package != null)
289  {
290  IsAbsoluteLatestVersion = package.IsAbsoluteLatestVersion;
291  IsLatestVersion = package.IsLatestVersion;
292  Listed = package.Listed;
293  Published = package.Published;
294  }
295  }
296 
297  internal static PackageMeta FromNuGet(NuGet.IPackageMetadata metadata)
298  {
299  var packageMeta = new PackageMeta();
300  packageMeta.InitializeFrom(metadata);
301  return packageMeta;
302  }
303 
304  internal NuGet.Manifest ToNugetManifest()
305  {
306  var manifestMeta = new NuGet.ManifestMetadata();
307  ToNugetManifest(manifestMeta);
308  return new NuGet.Manifest() { Metadata = manifestMeta };
309  }
310 
311  internal void ToNugetManifest(NuGet.ManifestMetadata manifestMeta)
312  {
313  manifestMeta.Id = this.Name;
314  manifestMeta.Version = this.Version.ToString();
315  manifestMeta.Title = this.Title.SafeTrim();
316  manifestMeta.Authors = string.Join(",", this.Authors);
317  manifestMeta.Owners = string.Join(",", Owners.Count == 0 ? Authors : Owners);
318  manifestMeta.Tags = String.IsNullOrEmpty(this.Tags) ? null : this.Tags.SafeTrim();
319  manifestMeta.LicenseUrl = ConvertUrlToStringSafe(this.LicenseUrl);
320  manifestMeta.ProjectUrl = ConvertUrlToStringSafe(this.ProjectUrl);
321  manifestMeta.IconUrl = ConvertUrlToStringSafe(this.IconUrl);
322  manifestMeta.RequireLicenseAcceptance = this.RequireLicenseAcceptance;
323  manifestMeta.DevelopmentDependency = false;
324  manifestMeta.Description = this.Description.SafeTrim();
325  manifestMeta.Copyright = this.Copyright.SafeTrim();
326  manifestMeta.Summary = this.Summary.SafeTrim();
327  manifestMeta.ReleaseNotes = this.ReleaseNotes.SafeTrim();
328  manifestMeta.Language = this.Language.SafeTrim();
329  manifestMeta.DependencySets = new List<NuGet.ManifestDependencySet>();
330  manifestMeta.FrameworkAssemblies = new List<NuGet.ManifestFrameworkAssembly>();
331  manifestMeta.ReferenceSets = new List<NuGet.ManifestReferenceSet>();
332 
333  var dependencySet = new NuGet.ManifestDependencySet();
334  foreach (var dependency in Dependencies)
335  {
336  if (manifestMeta.DependencySets.Count == 0)
337  manifestMeta.DependencySets.Add(dependencySet);
338 
339  dependencySet.Dependencies.Add(new NuGet.ManifestDependency() { Id = dependency.Name, Version = dependency.Version.ToString() });
340  }
341  }
342 
343  private static string ConvertUrlToStringSafe(Uri url)
344  {
345  if (url != null)
346  {
347  string originalString = url.OriginalString.SafeTrim();
348  if (!string.IsNullOrEmpty(originalString))
349  {
350  return originalString;
351  }
352  }
353 
354  return null;
355  }
356  }
357 }
Metadata for a Package accessible from Package.Meta.
Definition: PackageMeta.cs:15
PackageMeta()
Initializes a new instance of the PackageMeta class.
Definition: PackageMeta.cs:20
_In_ size_t _In_ const TexMetadata & metadata
Definition: DirectXTexP.h:116
void CopyDependenciesTo(PackageMeta packageMeta)
Copies local and store depdencies of this instance to the specified package
Definition: PackageMeta.cs:207
Android.Net.Uri Uri
Definition: HtmlElement.cs:8
A hybrid implementation of SemVer that supports semantic versioning as described at http://semver...
static PackageMeta NewDefault(string packageName)
Creates a new PackageMeta with default values.
Definition: PackageMeta.cs:225