//==============================================================================
//
// Copyright (c) Microsoft. All rights reserved.
// This code is licensed under the Microsoft Public License.
// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF
// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY
// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR
// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.
//
//==============================================================================
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Linq;
using Microsoft.MasterDataServices.Deployment;
using Microsoft.MasterDataServices.Services.DataContracts;
namespace ModelDUtil
{
///
/// Sample Model Deployment utility.
///
class ModelDUtil
{
#region Console app methods
///
/// Entry point for the console app.
///
/// Array of command line arguments
static void Main(string[] args)
{
///
/// Used for input or output package file name parameters.
///
string packageFile = string.Empty;
///
/// Used for model name parameter.
///
string modelName = string.Empty;
///
/// Used for version name parameter.
///
string versionName = string.Empty;
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
try
{
// Parse the command line options.
Modes mode = ModelDUtil.ParseCommandLine(args, out packageFile, out modelName, out versionName);
switch (mode)
{
case Modes.CreatePackage:
ModelDUtil.CreatePackage(packageFile, modelName, versionName);
break;
case Modes.DeployClone:
ModelDUtil.DeployClone(packageFile);
break;
case Modes.DeployNew:
ModelDUtil.DeployNew(packageFile, modelName);
break;
case Modes.DeployUpdate:
ModelDUtil.DeployUpdate(packageFile, versionName);
break;
case Modes.ListModels:
ModelDUtil.ListModels();
break;
case Modes.ListVersions:
ModelDUtil.ListVersions(modelName);
break;
default:
ModelDUtil.DisplayHelp();
break;
}
stopwatch.Stop();
Console.WriteLine(string.Empty);
Console.WriteLine("Operation completed successfully. Elapsed time: {0}", stopwatch.Elapsed.ToString("c", CultureInfo.CurrentCulture));
}
catch (Exception e)
{
stopwatch.Stop();
Console.WriteLine(string.Empty);
Console.WriteLine("Operation aborted. Elapsed time: {0}", stopwatch.Elapsed.ToString("c", CultureInfo.CurrentCulture));
Console.WriteLine("Exception: ");
Console.WriteLine(e);
}
Console.WriteLine(string.Empty);
Console.WriteLine("Press Enter to continue...");
Console.ReadLine();
}
///
/// Parse string args provided on the command line.
///
/// Array of string arguments.
/// True if command line arguments were successfully parsed, false otherwise.
private static Modes ParseCommandLine(string[] args, out string packageFile, out string modelName, out string versionName)
{
packageFile = string.Empty;
modelName = string.Empty;
versionName = string.Empty;
// The first argument must be a switch specifying the mode
Modes mode = Modes.Help;
int countArgs = args.Length;
if (countArgs > 0)
{
try
{
mode = (Modes)Enum.Parse(typeof(Modes), args[0], true);
}
catch (ArgumentException)
{
// Invalid mode argument. Display help.
return Modes.Help;
}
// Now check for additional parameters, as appropriate for the given mode.
switch (mode)
{
case Modes.CreatePackage:
// Package name, Model name, and Version name expected.
if (countArgs != 4)
{
return Modes.Help;
}
packageFile = args[1];
modelName = args[2];
versionName = args[3];
break;
case Modes.DeployClone:
// Package file name expected.
if (countArgs != 2)
{
return Modes.Help;
}
packageFile = args[1];
break;
case Modes.DeployNew:
// Package name and Model name expected.
if (countArgs != 3)
{
return Modes.Help;
}
packageFile = args[1];
modelName = args[2];
break;
case Modes.DeployUpdate:
// Package name and Version name expected.
if (countArgs != 3)
{
return Modes.Help;
}
packageFile = args[1];
versionName = args[2];
break;
case Modes.ListModels:
// No additional params expected.
if (countArgs != 1)
{
return Modes.Help;
}
break;
case Modes.ListVersions:
// Model name expected.
if (countArgs != 2)
{
return Modes.Help;
}
modelName = args[1];
break;
case Modes.Help:
// No additional params expected.
if (countArgs != 1)
{
return Modes.Help;
}
break;
default:
// Unknown enum value.
return Modes.Help;
}
}
return mode;
}
///
/// Displays help on how to use this console app.
///
private static void DisplayHelp()
{
Console.WriteLine("Usage:");
Console.WriteLine(" ModelDUtil [params]");
Console.WriteLine(string.Empty);
Console.WriteLine("where is one of the following:");
Console.WriteLine(string.Empty);
Console.WriteLine("ListModels -- returns a list of all the user models in the target system");
Console.WriteLine(" ModelDUtil ListModels");
Console.WriteLine(string.Empty);
Console.WriteLine("ListVersions -- returns a list of the versions for a given model");
Console.WriteLine(" ModelDUtil ListVersions ");
Console.WriteLine(string.Empty);
Console.WriteLine("CreatePackage -- create a package file for a given model, including a specific version of master data");
Console.WriteLine(" ModelDUtil CreatePackage