diff --git a/src/Umbraco.Core/Configuration/UmbracoVersion.cs b/src/Umbraco.Core/Configuration/UmbracoVersion.cs
index 762d3da59c..8c2fe08dfd 100644
--- a/src/Umbraco.Core/Configuration/UmbracoVersion.cs
+++ b/src/Umbraco.Core/Configuration/UmbracoVersion.cs
@@ -24,7 +24,7 @@ namespace Umbraco.Core.Configuration
/// Gets the version comment (like beta or RC).
///
/// The version comment.
- public static string CurrentComment { get { return ""; } }
+ public static string CurrentComment { get { return "beta"; } }
// Get the version of the umbraco.dll by looking at a class in that dll
// Had to do it like this due to medium trust issues, see: http://haacked.com/archive/2010/11/04/assembly-location-and-medium-trust.aspx
diff --git a/src/Umbraco.Web.UI.Client/src/common/services/util.service.js b/src/Umbraco.Web.UI.Client/src/common/services/util.service.js
index 9fbf2947af..30815027b0 100644
--- a/src/Umbraco.Web.UI.Client/src/common/services/util.service.js
+++ b/src/Umbraco.Web.UI.Client/src/common/services/util.service.js
@@ -1,4 +1,62 @@
/*Contains multiple services for various helper tasks */
+function versionHelper() {
+
+ return {
+
+ //see: https://gist.github.com/TheDistantSea/8021359
+ versionCompare: function(v1, v2, options) {
+ var lexicographical = options && options.lexicographical,
+ zeroExtend = options && options.zeroExtend,
+ v1parts = v1.split('.'),
+ v2parts = v2.split('.');
+
+ function isValidPart(x) {
+ return (lexicographical ? /^\d+[A-Za-z]*$/ : /^\d+$/).test(x);
+ }
+
+ if (!v1parts.every(isValidPart) || !v2parts.every(isValidPart)) {
+ return NaN;
+ }
+
+ if (zeroExtend) {
+ while (v1parts.length < v2parts.length) {
+ v1parts.push("0");
+ }
+ while (v2parts.length < v1parts.length) {
+ v2parts.push("0");
+ }
+ }
+
+ if (!lexicographical) {
+ v1parts = v1parts.map(Number);
+ v2parts = v2parts.map(Number);
+ }
+
+ for (var i = 0; i < v1parts.length; ++i) {
+ if (v2parts.length === i) {
+ return 1;
+ }
+
+ if (v1parts[i] === v2parts[i]) {
+ continue;
+ }
+ else if (v1parts[i] > v2parts[i]) {
+ return 1;
+ }
+ else {
+ return -1;
+ }
+ }
+
+ if (v1parts.length !== v2parts.length) {
+ return -1;
+ }
+
+ return 0;
+ }
+ };
+}
+angular.module('umbraco.services').factory('versionHelper', versionHelper);
function packageHelper(assetsService, treeService, eventsService, $templateCache) {
diff --git a/src/Umbraco.Web.UI.Client/src/views/packager/views/install-local.controller.js b/src/Umbraco.Web.UI.Client/src/views/packager/views/install-local.controller.js
index 94f02ed9c6..5c1bf8584c 100644
--- a/src/Umbraco.Web.UI.Client/src/views/packager/views/install-local.controller.js
+++ b/src/Umbraco.Web.UI.Client/src/views/packager/views/install-local.controller.js
@@ -1,7 +1,7 @@
(function () {
"use strict";
- function PackagesInstallLocalController($scope, $route, $location, Upload, umbRequestHelper, packageResource, $cookieStore) {
+ function PackagesInstallLocalController($scope, $route, $location, Upload, umbRequestHelper, packageResource, $cookieStore, versionHelper) {
var vm = this;
vm.state = "upload";
@@ -59,6 +59,28 @@
loadPackage();
vm.localPackage = data;
+ vm.localPackage.allowed = true;
+
+ //now we need to determine if this package is compatible to be installed
+ if (vm.localPackage.umbracoVersion) {
+ //0 if the versions are equal
+ //a negative integer iff v1 < v2
+ //a positive integer iff v1 > v2
+
+ //ensure we aren't comparing the pre-release value
+ var versionNumber = Umbraco.Sys.ServerVariables.application.version.split("-")[0];
+
+ var compare = versionHelper.versionCompare(
+ versionNumber,
+ vm.localPackage.umbracoVersion);
+ if (compare < 0) {
+ //this is not compatible!
+ vm.localPackage.allowed = false;
+ vm.installState.status =
+ "This package cannot be installed, it requires a minimum Umbraco version of " +
+ vm.localPackage.umbracoVersion;
+ }
+ }
}
}).error(function (evt, status, headers, config) {
@@ -111,17 +133,21 @@
return packageResource.cleanUp(pack);
},
installError)
- .then(installComplete, installError);
- }
+ .then(function (result) {
- function installComplete() {
- var url = window.location.href + "?installed=" + vm.localPackage.packageGuid;
- $cookieStore.put("umbPackageInstallId", vm.localPackage.packageGuid);
- window.location.reload(true);
+ if (result.postInstallationPath) {
+ window.location.href = url;
+ }
+ else {
+ var url = window.location.href + "?installed=" + vm.localPackage.packageGuid;
+ window.location.reload(true);
+ }
+
+ }, installError);
}
function installError() {
-
+ //TODO: Need to do something about this?
}
}
diff --git a/src/Umbraco.Web.UI.Client/src/views/packager/views/install-local.html b/src/Umbraco.Web.UI.Client/src/views/packager/views/install-local.html
index 9beb4aae2d..75a8101ace 100644
--- a/src/Umbraco.Web.UI.Client/src/views/packager/views/install-local.html
+++ b/src/Umbraco.Web.UI.Client/src/views/packager/views/install-local.html
@@ -87,7 +87,7 @@
{{ vm.localPackage.readme }}
-
+
-
-
-
-
+
+
+
diff --git a/src/Umbraco.Web.UI/config/trees.config b/src/Umbraco.Web.UI/config/trees.config
index 456a72cecb..81c0c03bc8 100644
--- a/src/Umbraco.Web.UI/config/trees.config
+++ b/src/Umbraco.Web.UI/config/trees.config
@@ -17,7 +17,8 @@
-
+
+
@@ -40,5 +41,5 @@
-
+
\ No newline at end of file
diff --git a/src/Umbraco.Web/Editors/PackageInstallController.cs b/src/Umbraco.Web/Editors/PackageInstallController.cs
index b31e87edb4..b8ffbe3572 100644
--- a/src/Umbraco.Web/Editors/PackageInstallController.cs
+++ b/src/Umbraco.Web/Editors/PackageInstallController.cs
@@ -278,6 +278,17 @@ namespace Umbraco.Web.Editors
var ins = new global::umbraco.cms.businesslogic.packager.Installer(Security.CurrentUser.Id);
//this will load in all the metadata too
var tempDir = ins.Import(packageTempFileName);
+
+ //now we need to check for version comparison
+ if (ins.RequirementsType == RequirementsType.Strict)
+ {
+ var packageMinVersion = new System.Version(ins.RequirementsMajor, ins.RequirementsMinor, ins.RequirementsPatch);
+ if (UmbracoVersion.Current < packageMinVersion)
+ {
+ throw new HttpResponseException(Request.CreateNotificationValidationErrorResponse("This package cannot be installed, it requires a minimum Umbraco version of " + packageMinVersion));
+ }
+ }
+
model.TemporaryDirectoryPath = Path.Combine(SystemDirectories.Data, tempDir);
model.Id = ins.CreateManifest(
IOHelper.MapPath(model.TemporaryDirectoryPath),
@@ -300,9 +311,13 @@ namespace Umbraco.Web.Editors
model.ContainsStyleSheetConflicts = ins.ContainsStyleSheeConflicts;
model.ContainsTemplateConflicts = ins.ContainsTemplateConflicts;
model.ContainsUnsecureFiles = ins.ContainsUnsecureFiles;
-
model.Url = ins.Url;
model.Version = ins.Version;
+
+ model.UmbracoVersion = ins.RequirementsType == RequirementsType.Strict
+ ? string.Format("{0}.{1}.{2}", ins.RequirementsMajor, ins.RequirementsMinor, ins.RequirementsPatch)
+ : string.Empty;
+
//TODO: We need to add the 'strict' requirement to the installer
}
finally
@@ -405,7 +420,7 @@ namespace Umbraco.Web.Editors
///
///
[HttpPost]
- public PackageInstallModel CleanUp(PackageInstallModel model)
+ public PackageInstallResult CleanUp(PackageInstallModel model)
{
var ins = new global::umbraco.cms.businesslogic.packager.Installer(Security.CurrentUser.Id);
ins.LoadConfig(IOHelper.MapPath(model.TemporaryDirectoryPath));
@@ -420,7 +435,15 @@ namespace Umbraco.Web.Editors
global::umbraco.BusinessLogic.Actions.Action.ReRegisterActionsAndHandlers();
- return model;
+ return new PackageInstallResult
+ {
+ Id = model.Id,
+ ZipFilePath = model.ZipFilePath,
+ PackageGuid = model.PackageGuid,
+ RepositoryGuid = model.RepositoryGuid,
+ TemporaryDirectoryPath = model.TemporaryDirectoryPath,
+
+ };
}
diff --git a/src/Umbraco.Web/Models/LocalPackageInstallModel.cs b/src/Umbraco.Web/Models/LocalPackageInstallModel.cs
index 4f076675f4..20cf359ae1 100644
--- a/src/Umbraco.Web/Models/LocalPackageInstallModel.cs
+++ b/src/Umbraco.Web/Models/LocalPackageInstallModel.cs
@@ -17,10 +17,16 @@ namespace Umbraco.Web.Models
}
public List
UploadedFiles { get; private set; }
-
+
[DataMember(Name = "notifications")]
public List Notifications { get; private set; }
+ ///
+ /// The minimum umbraco version that this package is pinned to
+ ///
+ [DataMember(Name = "umbracoVersion")]
+ public string UmbracoVersion { get; set; }
+
[DataMember(Name = "name")]
public string Name { get; set; }
diff --git a/src/Umbraco.Web/Models/PackageInstallResult.cs b/src/Umbraco.Web/Models/PackageInstallResult.cs
new file mode 100644
index 0000000000..bffc1240cf
--- /dev/null
+++ b/src/Umbraco.Web/Models/PackageInstallResult.cs
@@ -0,0 +1,14 @@
+using System;
+using System.Runtime.Serialization;
+
+namespace Umbraco.Web.Models
+{
+ ///
+ /// Model that is returned when a package is totally finished installing
+ ///
+ public class PackageInstallResult : PackageInstallModel
+ {
+ [DataMember(Name = "postInstallationPath")]
+ public Guid PostInstallationPath { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/src/Umbraco.Web/Trees/DataTypeTreeController.cs b/src/Umbraco.Web/Trees/DataTypeTreeController.cs
index 67da0cf355..35ae7cabfd 100644
--- a/src/Umbraco.Web/Trees/DataTypeTreeController.cs
+++ b/src/Umbraco.Web/Trees/DataTypeTreeController.cs
@@ -19,7 +19,7 @@ using Constants = Umbraco.Core.Constants;
namespace Umbraco.Web.Trees
{
[UmbracoTreeAuthorize(Constants.Trees.DataTypes)]
- [Tree(Constants.Applications.Developer, Constants.Trees.DataTypes)]
+ [Tree(Constants.Applications.Developer, Constants.Trees.DataTypes, null, sortOrder:1)]
[PluginController("UmbracoTrees")]
[CoreTree]
public class DataTypeTreeController : TreeController
diff --git a/src/Umbraco.Web/Trees/PackagesTreeController.cs b/src/Umbraco.Web/Trees/PackagesTreeController.cs
index 5e39a2b278..b2df155112 100644
--- a/src/Umbraco.Web/Trees/PackagesTreeController.cs
+++ b/src/Umbraco.Web/Trees/PackagesTreeController.cs
@@ -21,7 +21,7 @@ using Umbraco.Core.Services;
namespace Umbraco.Web.Trees
{
[UmbracoTreeAuthorize(Constants.Trees.Packages)]
- [Tree(Constants.Applications.Developer, Constants.Trees.Packages, null, sortOrder: 3)]
+ [Tree(Constants.Applications.Developer, Constants.Trees.Packages, null, sortOrder: 0)]
[PluginController("UmbracoTrees")]
[CoreTree]
[LegacyBaseTree(typeof(loadPackager))]
diff --git a/src/Umbraco.Web/Umbraco.Web.csproj b/src/Umbraco.Web/Umbraco.Web.csproj
index 6a093bc55c..16414d505b 100644
--- a/src/Umbraco.Web/Umbraco.Web.csproj
+++ b/src/Umbraco.Web/Umbraco.Web.csproj
@@ -345,6 +345,7 @@
+
diff --git a/src/umbraco.cms/businesslogic/Packager/Installer.cs b/src/umbraco.cms/businesslogic/Packager/Installer.cs
index 0225dd94a8..fc3da251fd 100644
--- a/src/umbraco.cms/businesslogic/Packager/Installer.cs
+++ b/src/umbraco.cms/businesslogic/Packager/Installer.cs
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
+using System.ComponentModel;
using System.Globalization;
using System.IO;
using System.Xml;
@@ -21,6 +22,12 @@ using umbraco.interfaces;
namespace umbraco.cms.businesslogic.packager
{
+ public enum RequirementsType
+ {
+ Strict,
+ Legacy
+ }
+
///
/// The packager is a component which enables sharing of both data and functionality components between different umbraco installations.
///
@@ -88,6 +95,10 @@ namespace umbraco.cms.businesslogic.packager
public int RequirementsMinor { get; private set; }
public int RequirementsPatch { get; private set; }
+ public RequirementsType RequirementsType { get; private set; }
+
+ public string IconUrl { get; private set; }
+
///
/// The xmldocument, describing the contents of a package.
///
@@ -98,16 +109,16 @@ namespace umbraco.cms.businesslogic.packager
///
public Installer()
{
- initialize();
+ Initialize();
}
public Installer(int currentUserId)
{
- initialize();
+ Initialize();
_currentUserId = currentUserId;
}
- private void initialize()
+ private void Initialize()
{
ContainsBinaryFileErrors = false;
ContainsTemplateConflicts = false;
@@ -116,40 +127,50 @@ namespace umbraco.cms.businesslogic.packager
ContainsStyleSheeConflicts = false;
}
+ [Obsolete("Use the ctor with all parameters")]
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ public Installer(string name, string version, string url, string license, string licenseUrl, string author, string authorUrl, int requirementsMajor, int requirementsMinor, int requirementsPatch, string readme, string control)
+ {
+ }
+
///
/// Constructor
///
- /// The name of the package
- /// The version of the package
- /// The url to a descriptionpage
- /// The license under which the package is released (preferably GPL ;))
- /// The url to a licensedescription
- /// The original author of the package
- /// The url to the Authors website
- /// Umbraco version major
- /// Umbraco version minor
- /// Umbraco version patch
- /// The readme text
- /// The name of the usercontrol used to configure the package after install
- public Installer(string Name, string Version, string Url, string License, string LicenseUrl, string Author, string AuthorUrl, int RequirementsMajor, int RequirementsMinor, int RequirementsPatch, string Readme, string Control)
+ /// The name of the package
+ /// The version of the package
+ /// The url to a descriptionpage
+ /// The license under which the package is released (preferably GPL ;))
+ /// The url to a licensedescription
+ /// The original author of the package
+ /// The url to the Authors website
+ /// Umbraco version major
+ /// Umbraco version minor
+ /// Umbraco version patch
+ /// The readme text
+ /// The name of the usercontrol used to configure the package after install
+ ///
+ ///
+ public Installer(string name, string version, string url, string license, string licenseUrl, string author, string authorUrl, int requirementsMajor, int requirementsMinor, int requirementsPatch, string readme, string control, RequirementsType requirementsType, string iconUrl)
{
ContainsBinaryFileErrors = false;
ContainsTemplateConflicts = false;
ContainsUnsecureFiles = false;
ContainsMacroConflict = false;
ContainsStyleSheeConflicts = false;
- this.Name = Name;
- this.Version = Version;
- this.Url = Url;
- this.License = License;
- this.LicenseUrl = LicenseUrl;
- this.RequirementsMajor = RequirementsMajor;
- this.RequirementsMinor = RequirementsMinor;
- this.RequirementsPatch = RequirementsPatch;
- this.Author = Author;
- this.AuthorUrl = AuthorUrl;
- ReadMe = Readme;
- this.Control = Control;
+ this.Name = name;
+ this.Version = version;
+ this.Url = url;
+ this.License = license;
+ this.LicenseUrl = licenseUrl;
+ this.RequirementsMajor = requirementsMajor;
+ this.RequirementsMinor = requirementsMinor;
+ this.RequirementsPatch = requirementsPatch;
+ this.RequirementsType = requirementsType;
+ this.Author = author;
+ this.AuthorUrl = authorUrl;
+ this.IconUrl = iconUrl;
+ ReadMe = readme;
+ this.Control = control;
}
#region Public Methods
@@ -485,9 +506,21 @@ namespace umbraco.cms.businesslogic.packager
Url = Config.DocumentElement.SelectSingleNode("/umbPackage/info/package/url").FirstChild.Value;
License = Config.DocumentElement.SelectSingleNode("/umbPackage/info/package/license").FirstChild.Value;
LicenseUrl = Config.DocumentElement.SelectSingleNode("/umbPackage/info/package/license").Attributes.GetNamedItem("url").Value;
+
RequirementsMajor = int.Parse(Config.DocumentElement.SelectSingleNode("/umbPackage/info/package/requirements/major").FirstChild.Value);
RequirementsMinor = int.Parse(Config.DocumentElement.SelectSingleNode("/umbPackage/info/package/requirements/minor").FirstChild.Value);
RequirementsPatch = int.Parse(Config.DocumentElement.SelectSingleNode("/umbPackage/info/package/requirements/patch").FirstChild.Value);
+
+ var reqNode = Config.DocumentElement.SelectSingleNode("/umbPackage/info/package/requirements");
+ RequirementsType = reqNode != null && reqNode.Attributes != null && reqNode.Attributes["type"] != null
+ ? Enum.Parse(reqNode.Attributes["type"].Value, true)
+ : RequirementsType.Legacy;
+ var iconNode = Config.DocumentElement.SelectSingleNode("/umbPackage/info/author/iconUrl");
+ if (iconNode != null)
+ {
+ IconUrl = iconNode.FirstChild.Value;
+ }
+
Author = Config.DocumentElement.SelectSingleNode("/umbPackage/info/author/name").FirstChild.Value;
AuthorUrl = Config.DocumentElement.SelectSingleNode("/umbPackage/info/author/website").FirstChild.Value;
@@ -605,7 +638,7 @@ namespace umbraco.cms.businesslogic.packager
}
catch { }
}
-
+
///
/// This uses the old method of fetching and only supports the packages.umbraco.org repository.
///
diff --git a/src/umbraco.cms/businesslogic/Packager/PackageInstance/PackageInstance.cs b/src/umbraco.cms/businesslogic/Packager/PackageInstance/PackageInstance.cs
index ed25e1f29f..39e806133e 100644
--- a/src/umbraco.cms/businesslogic/Packager/PackageInstance/PackageInstance.cs
+++ b/src/umbraco.cms/businesslogic/Packager/PackageInstance/PackageInstance.cs
@@ -8,269 +8,89 @@ namespace umbraco.cms.businesslogic.packager
{
public class PackageInstance
{
- private int _id;
+ public int Id { get; set; }
- private string _name = "";
- private string _url = "";
- private string _folder = "";
- private string _packagePath = "";
- private string _version = "";
+ public string RepositoryGuid { get; set; }
- private string _author = "";
- private string _authorUrl = "";
+ public string PackageGuid { get; set; }
- private string _license = "";
- private string _licenseUrl = "";
+ public bool HasUpdate { get; set; }
- private string _readMe = "";
-
- private bool _contentLoadChildNodes = false;
- private string _contentNodeId = "";
+ public bool EnableSkins { get; set; }
- private List _macros = new List();
- private List _templates = new List();
- private List _documentTypes = new List();
- private List _stylesheets = new List();
- private List _files = new List();
- private List _languages = new List();
- private List _dictionaryItems = new List();
- private List _dataTypes = new List();
+ public Guid SkinRepoGuid { get; set; }
- private string _loadControl = "";
- private string _repoGuid;
- private string _packageGuid;
- private bool _hasUpdate;
- private bool _enableSkins = false;
- private Guid _skinRepoGuid = Guid.Empty;
- private string _actions;
+ public string Name { get; set; }
- public int Id
+ public string Url { get; set; }
+
+ public string Folder { get; set; }
+
+ public string PackagePath { get; set; }
+
+ public string Version { get; set; }
+
+ public string Author { get; set; }
+
+ public string AuthorUrl { get; set; }
+
+
+ public string License { get; set; }
+
+ public string LicenseUrl { get; set; }
+
+ public string Readme { get; set; }
+
+ public bool ContentLoadChildNodes { get; set; }
+
+ public string ContentNodeId { get; set; }
+
+ public List Macros { get; set; }
+
+ public List Languages { get; set; }
+
+ public List DictionaryItems { get; set; }
+
+ public List Templates { get; set; }
+
+ public List Documenttypes { get; set; }
+
+ public List Stylesheets { get; set; }
+
+ public List Files { get; set; }
+
+ public string LoadControl { get; set; }
+
+ public string Actions { get; set; }
+
+ public List DataTypes { get; set; }
+
+ public PackageInstance()
{
- get { return _id; }
- set {_id = value; }
+ SkinRepoGuid = Guid.Empty;
+ Name = "";
+ Url = "";
+ Folder = "";
+ PackagePath = "";
+ Version = "";
+ Author = "";
+ AuthorUrl = "";
+ License = "";
+ LicenseUrl = "";
+ Readme = "";
+ ContentNodeId = "";
+ Macros = new List();
+ Languages = new List();
+ DictionaryItems = new List();
+ Templates = new List();
+ Documenttypes = new List();
+ Stylesheets = new List();
+ Files = new List();
+ LoadControl = "";
+ DataTypes = new List();
+ EnableSkins = false;
+ ContentLoadChildNodes = false;
}
-
- public String RepositoryGuid {
- get { return _repoGuid; }
- set { _repoGuid = value; }
- }
-
- public String PackageGuid {
- get { return _packageGuid; }
- set { _packageGuid = value; }
- }
-
- public bool HasUpdate {
- get { return _hasUpdate; }
- set { _hasUpdate = value; }
- }
-
- public bool EnableSkins
- {
- get { return _enableSkins; }
- set { _enableSkins = value; }
- }
-
- public Guid SkinRepoGuid
- {
- get { return _skinRepoGuid; }
- set { _skinRepoGuid = value; }
- }
-
-
- public String Name
- {
- get { return _name; }
- set
- {
- _name = value;
- }
- }
-
- public String Url
- {
- get { return _url; }
- set
- {
- _url = value;
- }
- }
-
- public String Folder
- {
- get { return _folder; }
- set
- {
- _folder = value;
- }
- }
-
- public String PackagePath
- {
- get { return _packagePath; }
- set
- {
- _packagePath = value;
- }
- }
-
- public String Version
- {
- get { return _version; }
- set
- {
- _version = value;
- }
- }
-
- public String Author
- {
- get { return _author; }
- set
- {
- _author = value;
- }
- }
-
- public String AuthorUrl
- {
- get { return _authorUrl; }
- set
- {
- _authorUrl = value;
- }
- }
-
-
- public String License
- {
- get { return _license; }
- set
- {
- _license = value;
- }
- }
-
- public String LicenseUrl
- {
- get { return _licenseUrl; }
- set
- {
- _licenseUrl = value;
- }
- }
-
- public String Readme
- {
- get { return _readMe ; }
- set
- {
- _readMe = value;
- }
- }
-
- public bool ContentLoadChildNodes
- {
- get { return _contentLoadChildNodes; }
- set
- {
- _contentLoadChildNodes = value;
- }
- }
- public string ContentNodeId
- {
- get { return _contentNodeId; }
- set
- {
- _contentNodeId = value;
- }
- }
-
- public List Macros
- {
- get { return _macros; }
- set
- {
- _macros = value;
- }
- }
-
- public List Languages {
- get { return _languages; }
- set {
- _languages = value;
- }
- }
-
- public List DictionaryItems {
- get { return _dictionaryItems; }
- set {
- _dictionaryItems = value;
- }
- }
-
- public List Templates
- {
- get { return _templates; }
- set
- {
- _templates = value;
- }
- }
-
- public List Documenttypes
- {
- get { return _documentTypes; }
- set
- {
- _documentTypes = value;
- }
- }
-
- public List Stylesheets
- {
- get { return _stylesheets; }
- set
- {
- _stylesheets = value;
- }
- }
-
- public List Files
- {
- get { return _files; }
- set
- {
- _files = value;
- }
- }
-
- public String LoadControl
- {
- get { return _loadControl; }
- set
- {
- _loadControl = value;
- }
- }
-
- public String Actions
- {
- get { return _actions; }
- set
- {
- _actions = value;
- }
- }
-
- public List DataTypes {
- get { return _dataTypes; }
- set {
- _dataTypes = value;
- }
- }
-
- public PackageInstance() {}
}
}