
[Abstract, ClassVersion("1.0.0")] 
class OMI_BaseResource
{
  [required] string ResourceId;
  [write] string SourceInfo;
  [write] string DependsOn[];
  [required] string ModuleName;
  [required] string ModuleVersion;
  [write] string ConfigurationName;
};

[Abstract, ClassVersion("1.0.0")]
class MSFT_KeyValuePair
{
	[Key]
	string Key;

	[write]
	string Value;
};

[Abstract, ClassVersion("1.0.0")] 
class MSFT_BaseConfigurationProviderRegistration
{
  [key] String ClassName;
  String DSCEngineCompatVersion;
  String DSCModuleVersion;
};

[ClassVersion("1.0.0")] 
class MSFT_CimConfigurationProviderRegistration : MSFT_BaseConfigurationProviderRegistration
{
  String Namespace;
};

[ClassVersion("1.0.0")] 
class MSFT_PSConfigurationProviderRegistration : MSFT_BaseConfigurationProviderRegistration
{
  String ModuleName;
};

[ClassVersion("1.0.0")] 
class OMI_ConfigurationDocument
{
  String Version;
  String Author;
  String Copyright;
  String HelpInfoUri;
  String ContentType;
  String GenerationDate;
  String GenerationHost;
  String Name;
  String MinimumCompatibleVersion;
  String CompatibleVersionAdditionalProperties[];
  String DocumentType;
};

[ClassVersion("1.0.0")]
class MSFT_Credential 
{   
    [MaxLen ( 256 )]
    string UserName;
    string Password;
};

// ===============================================================
//  OMI_MetaConfigurationResource
// ===============================================================
[ClassVersion("1.0.0"), 
 Description (
    "Base schema for all Metaconfiguration resources." )]
class OMI_MetaConfigurationResource 
{
	
	[required] 
	string ResourceId;

  	[write] 
	string SourceInfo;
};


// ===============================================================
//  Configuration Download Manager
// ===============================================================
[ClassVersion("1.0.0"), 
 Description("Class defining the configuration download manager" ) ] 
class OMI_ConfigurationDownloadManager  : OMI_MetaConfigurationResource 
{
};

[ClassVersion("1.0.0"), 
 Description("Web download manager class inheriting from OMI_ConfigurationDownloadManager" )] 
class MSFT_WebDownloadManager : OMI_ConfigurationDownloadManager
{
   [Description ("String URL of the download manager location" )  , Key]
   string  ServerURL;    

   
   [Description ("The certificate ID used to locate the certificate." )  ]
   string  CertificateID;
   

   [Description ("Boolean variable to allow unsecure connections" )  ]
   boolean AllowUnsecureConnection;

   [Description ("Registration Key with which to register with the Pull Server" )  ]
   string RegistrationKey;

   [Description ("The set of configuration names with which to register with the Pull Server.")]
   string ConfigurationNames[];
};


// ===============================================================
//  Report Managers
// ===============================================================

[ClassVersion("1.0.0"), 
 Description("Class defining a report manager") ] 
class OMI_ReportManager : OMI_MetaConfigurationResource 
{
};

[ClassVersion("1.0.0"), 
 Description("Web report manager class inheriting from OMI_ReportManager class") ]  
class MSFT_WebReportManager : OMI_ReportManager
{
   [Description ("URL of the server used by report manager." ) , Key]
   string  ServerURL;    

   [Description ("The certificate ID used to locate the certificate for secure connections." ) ]
   string  CertificateID;

   [Description("Specifies whether report manager can use unsecure connection over http.")]
   boolean AllowUnsecureConnection; 

   [Description ("Registration Key with which to register with the Reporting Server" )  ]
   string RegistrationKey;   
};


// ===============================================================
//  ResourceModule Managers
// ===============================================================


[ClassVersion("1.0.0"), Description("Class defining the structure of resource module managers") ] 
class OMI_ResourceModuleManager  : OMI_MetaConfigurationResource 
{
};


[ClassVersion("1.0.0"), 
 Description("Web resource module manager class inheriting from OMI_ResourceModuleManager") ] 
class MSFT_WebResourceManager : OMI_ResourceModuleManager
{
   [Description ("String URL of the resource module manager location" )  , Key]
   string  ServerURL;    

   [Description ("The certificate ID used to locate the certificate." ) ]
   string  CertificateID;   


   [Description ("Boolean variable to allow unsecure connections" )  ]
   boolean AllowUnsecureConnection;

   [Description ("Registration Key with which to register with the Resource Repository Web" )  ]
   string RegistrationKey;
   
};

[ClassVersion("1.0.0"), 
 Description("File resource module manager class inheriting from OMI_ResourceModuleManager class") ] 
class MSFT_FileResourceManager : OMI_ResourceModuleManager
{
   [Description ("String UNC path of the File resource manager" ) , Key]
   string  SourcePath;    

   [EmbeddedInstance("MSFT_Credential"),
   Description ("Default credential to access resources." ) ]
   string Credential; 
  
};



[Description(
	"This represents a Partial Configuration class."),
	ClassVersion("1.0.0")]
class MSFT_PartialConfiguration : OMI_MetaConfigurationResource 
{
	[Description ("Description of the partial configuration" )  , Write] 
	String Description ; 

	[Description ("Defines the resources that are exclusive to this particular partial configuration" )  , Write] 
	String ExclusiveResources[]; 
 
	[Description ("The configuration repository source that this partial configuration will use" )  , Write] 
	String ConfigurationSource; 

	[Description ("A dependency variable indicating which partial configuration must be applied prior to this" )  , Write] 
	String DependsOn[];        
};


