You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by ma...@apache.org on 2013/10/18 02:25:31 UTC

[09/30] AMBARI-3266. Contribute Ambari-SCOM. (Tom Beerbower via mahadev)

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/873b3502/contrib/ambari-scom/management-pack/Hadoop_MP/ScomPages/DiscoveryTemplate/MultipleAgentChooserDialog.cs
----------------------------------------------------------------------
diff --git a/contrib/ambari-scom/management-pack/Hadoop_MP/ScomPages/DiscoveryTemplate/MultipleAgentChooserDialog.cs b/contrib/ambari-scom/management-pack/Hadoop_MP/ScomPages/DiscoveryTemplate/MultipleAgentChooserDialog.cs
new file mode 100644
index 0000000..875090a
--- /dev/null
+++ b/contrib/ambari-scom/management-pack/Hadoop_MP/ScomPages/DiscoveryTemplate/MultipleAgentChooserDialog.cs
@@ -0,0 +1,37 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+using System.ComponentModel;
+using Microsoft.EnterpriseManagement.Internal.UI.Authoring.Pages.Azure;
+using Microsoft.EnterpriseManagement.Mom.Internal.UI;
+
+namespace Ambari.SCOM.ScomPages.DiscoveryTemplate {
+    class MultipleAgentChooserDialog : AgentSimpleChooserDialog{
+		public MultipleAgentChooserDialog(IContainer parentContainer) : base(new AgentPickerControl(), parentContainer) {
+            InitializeComponent();
+        }
+
+        public MultipleAgentChooserDialog(IAsyncChooserControlSearch searchControl, IContainer parentContainer)
+            : base(searchControl, parentContainer) {
+            InitializeComponent();
+        }
+
+		private void InitializeComponent() {
+			mainChooserControl.MultiSelect = true;
+		}
+	}
+}

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/873b3502/contrib/ambari-scom/management-pack/Hadoop_MP/ScomPages/DiscoveryTemplate/RunAsAccountWrapper.cs
----------------------------------------------------------------------
diff --git a/contrib/ambari-scom/management-pack/Hadoop_MP/ScomPages/DiscoveryTemplate/RunAsAccountWrapper.cs b/contrib/ambari-scom/management-pack/Hadoop_MP/ScomPages/DiscoveryTemplate/RunAsAccountWrapper.cs
new file mode 100644
index 0000000..3aa8fa9
--- /dev/null
+++ b/contrib/ambari-scom/management-pack/Hadoop_MP/ScomPages/DiscoveryTemplate/RunAsAccountWrapper.cs
@@ -0,0 +1,45 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+using System;
+using System.Globalization;
+using System.Text;
+using Microsoft.EnterpriseManagement.Security;
+
+namespace Ambari.SCOM.ScomPages.DiscoveryTemplate {
+    class RunAsAccountWrapper {
+        public Guid? AccountId { get; private set; }
+        public string AccountName { get; private set; }
+        public byte[] AccountStorageIdByteArray { get; private set; }
+        public string AccountStorageIdString { get; private set; }
+
+        public RunAsAccountWrapper(SecureData account) {
+            AccountName = account.Name;
+            AccountId = account.Id;
+            AccountStorageIdByteArray = account.SecureStorageId;
+            AccountStorageIdString = ConvertToHex(AccountStorageIdByteArray);
+        }
+
+        private string ConvertToHex(byte[] byteArray) {
+            var builder = new StringBuilder();
+            foreach (var num in byteArray) {
+                builder.Append(num.ToString("X2", CultureInfo.InvariantCulture));
+            }
+            return builder.ToString();
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/873b3502/contrib/ambari-scom/management-pack/Hadoop_MP/ScomPages/DiscoveryTemplate/SummaryPage.Designer.cs
----------------------------------------------------------------------
diff --git a/contrib/ambari-scom/management-pack/Hadoop_MP/ScomPages/DiscoveryTemplate/SummaryPage.Designer.cs b/contrib/ambari-scom/management-pack/Hadoop_MP/ScomPages/DiscoveryTemplate/SummaryPage.Designer.cs
new file mode 100644
index 0000000..452c005
--- /dev/null
+++ b/contrib/ambari-scom/management-pack/Hadoop_MP/ScomPages/DiscoveryTemplate/SummaryPage.Designer.cs
@@ -0,0 +1,107 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+namespace Ambari.SCOM.ScomPages.DiscoveryTemplate
+{
+    partial class SummaryPage {
+        /// <summary> 
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary> 
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing) {
+            if (disposing && (components != null)) {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Component Designer generated code
+
+        /// <summary> 
+        /// Required method for Designer support - do not modify 
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent() {
+            this.lblTitle = new Microsoft.EnterpriseManagement.Mom.Internal.UI.Controls.PageSectionLabel();
+            this.listviewConfiguration = new System.Windows.Forms.ListView();
+            this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+            this.columnHeader2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+            this.SuspendLayout();
+            // 
+            // lblTitle
+            // 
+            this.lblTitle.BackColor = System.Drawing.Color.Transparent;
+            this.lblTitle.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Bold);
+            this.lblTitle.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.lblTitle.Location = new System.Drawing.Point(0, 10);
+            this.lblTitle.MinimumSize = new System.Drawing.Size(244, 0);
+            this.lblTitle.Name = "lblTitle";
+            this.lblTitle.Size = new System.Drawing.Size(244, 18);
+            this.lblTitle.TabIndex = 3;
+            this.lblTitle.Text = "Confirm the settings";
+            // 
+            // listviewConfiguration
+            // 
+            this.listviewConfiguration.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+            this.listviewConfiguration.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
+            this.columnHeader1,
+            this.columnHeader2});
+            this.listviewConfiguration.Location = new System.Drawing.Point(0, 44);
+            this.listviewConfiguration.Name = "listviewConfiguration";
+            this.listviewConfiguration.Size = new System.Drawing.Size(435, 256);
+            this.listviewConfiguration.TabIndex = 2;
+            this.listviewConfiguration.UseCompatibleStateImageBehavior = false;
+            this.listviewConfiguration.View = System.Windows.Forms.View.Details;
+            // 
+            // columnHeader1
+            // 
+            this.columnHeader1.Text = "Property";
+            // 
+            // columnHeader2
+            // 
+            this.columnHeader2.Text = "Value";
+            // 
+            // SummaryPage
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.Controls.Add(this.lblTitle);
+            this.Controls.Add(this.listviewConfiguration);
+            this.HeaderText = "Summary";
+            this.Name = "SummaryPage";
+            this.NavigationText = "Summary";
+            this.Size = new System.Drawing.Size(456, 400);
+            this.TabName = "Summary";
+            this.ResumeLayout(false);
+            this.PerformLayout();
+
+        }
+
+        #endregion
+
+        private Microsoft.EnterpriseManagement.Mom.Internal.UI.Controls.PageSectionLabel lblTitle;
+        private System.Windows.Forms.ListView listviewConfiguration;
+        private System.Windows.Forms.ColumnHeader columnHeader1;
+        private System.Windows.Forms.ColumnHeader columnHeader2;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/873b3502/contrib/ambari-scom/management-pack/Hadoop_MP/ScomPages/DiscoveryTemplate/SummaryPage.cs
----------------------------------------------------------------------
diff --git a/contrib/ambari-scom/management-pack/Hadoop_MP/ScomPages/DiscoveryTemplate/SummaryPage.cs b/contrib/ambari-scom/management-pack/Hadoop_MP/ScomPages/DiscoveryTemplate/SummaryPage.cs
new file mode 100644
index 0000000..6a82c06
--- /dev/null
+++ b/contrib/ambari-scom/management-pack/Hadoop_MP/ScomPages/DiscoveryTemplate/SummaryPage.cs
@@ -0,0 +1,76 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+using System;
+using System.Collections.Generic;
+using System.Windows.Forms;
+using Microsoft.EnterpriseManagement.Configuration;
+using Microsoft.EnterpriseManagement.Internal.UI.Authoring.Pages;
+using Microsoft.EnterpriseManagement.UI;
+using Ambari.SCOM.ScomPages.Properties;
+
+namespace Ambari.SCOM.ScomPages.DiscoveryTemplate {
+    public partial class SummaryPage : UIPage {
+        public SummaryPage() {
+            InitializeComponent();
+        }
+
+        private void AddSummaryItem(string name, string value) {
+            var item = new ListViewItem(name);
+            item.SubItems.Add(value);
+            listviewConfiguration.Items.Add(item);
+        }
+
+        public override bool OnSetActive() {
+            SetListViewItems();
+            IsConfigValid = true;
+            return base.OnSetActive();
+        }
+
+        private void SetListViewItems() {
+            listviewConfiguration.Items.Clear();
+            IsConfigValid = false;
+            
+            AddSummaryItem(Resources.Name, SharedUserData[NameAndDescriptionPage.SharedUserDataName] as string);
+
+            var description = SharedUserData[NameAndDescriptionPage.SharedUserDataDescription] as string;
+            if (!String.IsNullOrEmpty(description))
+                AddSummaryItem(Resources.Description, description);
+
+            var outputManagementPack = SharedUserData[NameAndDescriptionPage.SharedUserDataManagementPack] as ManagementPack;
+            if (DestinationManagementPack != null) {
+                AddSummaryItem(Resources.ManagementPack, DestinationManagementPack.DisplayName);
+            } else if (outputManagementPack != null) {
+                AddSummaryItem(Resources.ManagementPack, outputManagementPack.DisplayName);
+            }
+
+            AddSummaryItem(Resources.AmbariUri, SharedUserData[AmbariDetailsPage.SharedUserDataAmbariUri] as string);
+            AddSummaryItem(Resources.RunAsAccount, SharedUserData[AmbariDetailsPage.SharedUserDataRunAsName] as string);
+            var watcherNodes = SharedUserData[WatcherNodesPage.SharedUserDataWatcherNodesList] as IEnumerable<string>;
+            if (watcherNodes != null) {
+                var firstItem = true;
+                foreach (var watcherNode in watcherNodes) {
+                    AddSummaryItem(firstItem ? Resources.WatcherNodes : String.Empty, watcherNode);
+                    firstItem = false;
+                }
+            }
+
+            listviewConfiguration.Columns[0].AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent);
+            listviewConfiguration.Columns[1].AutoResize(ColumnHeaderAutoResizeStyle.ColumnContent);
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/873b3502/contrib/ambari-scom/management-pack/Hadoop_MP/ScomPages/DiscoveryTemplate/SummaryPage.resx
----------------------------------------------------------------------
diff --git a/contrib/ambari-scom/management-pack/Hadoop_MP/ScomPages/DiscoveryTemplate/SummaryPage.resx b/contrib/ambari-scom/management-pack/Hadoop_MP/ScomPages/DiscoveryTemplate/SummaryPage.resx
new file mode 100644
index 0000000..525bd88
--- /dev/null
+++ b/contrib/ambari-scom/management-pack/Hadoop_MP/ScomPages/DiscoveryTemplate/SummaryPage.resx
@@ -0,0 +1,136 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+<!--## Licensed to the Apache Software Foundation (ASF) under one
+## or more contributor license agreements.  See the NOTICE file
+## distributed with this work for additional information
+## regarding copyright ownership.  The ASF licenses this file
+## to you under the Apache License, Version 2.0 (the
+## "License"); you may not use this file except in compliance
+## with the License.  You may obtain a copy of the License at
+##
+##     http://www.apache.org/licenses/LICENSE-2.0
+##
+## Unless required by applicable law or agreed to in writing,
+## software distributed under the License is distributed on an
+## "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+## KIND, either express or implied.  See the License for the
+## specific language governing permissions and limitations
+## under the License.-->
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/873b3502/contrib/ambari-scom/management-pack/Hadoop_MP/ScomPages/DiscoveryTemplate/TemplateInputConfig.cs
----------------------------------------------------------------------
diff --git a/contrib/ambari-scom/management-pack/Hadoop_MP/ScomPages/DiscoveryTemplate/TemplateInputConfig.cs b/contrib/ambari-scom/management-pack/Hadoop_MP/ScomPages/DiscoveryTemplate/TemplateInputConfig.cs
new file mode 100644
index 0000000..a92b41f
--- /dev/null
+++ b/contrib/ambari-scom/management-pack/Hadoop_MP/ScomPages/DiscoveryTemplate/TemplateInputConfig.cs
@@ -0,0 +1,32 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+using System;
+using System.Xml.Serialization;
+
+namespace Ambari.SCOM.ScomPages.DiscoveryTemplate {
+    [Serializable, XmlType(AnonymousType = true), XmlRoot(Namespace = "", IsNullable = false)]
+    public class TemplateInputConfig {
+        public string Name { get; set; }
+        public string Description { get; set; }
+        public string AmbariUri { get; set; }
+        public string RunAsAccount { get; set; }
+        public string WatcherNodesList { get; set; }
+        public string SeedComputerName { get; set; }
+        public string TemplateIdString { get; set; }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/873b3502/contrib/ambari-scom/management-pack/Hadoop_MP/ScomPages/DiscoveryTemplate/WatcherNodesPage.Designer.cs
----------------------------------------------------------------------
diff --git a/contrib/ambari-scom/management-pack/Hadoop_MP/ScomPages/DiscoveryTemplate/WatcherNodesPage.Designer.cs b/contrib/ambari-scom/management-pack/Hadoop_MP/ScomPages/DiscoveryTemplate/WatcherNodesPage.Designer.cs
new file mode 100644
index 0000000..9bc6178
--- /dev/null
+++ b/contrib/ambari-scom/management-pack/Hadoop_MP/ScomPages/DiscoveryTemplate/WatcherNodesPage.Designer.cs
@@ -0,0 +1,174 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+namespace Ambari.SCOM.ScomPages.DiscoveryTemplate
+{
+    partial class WatcherNodesPage {
+        /// <summary> 
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary> 
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing) {
+            if (disposing && (components != null)) {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Component Designer generated code
+
+        /// <summary> 
+        /// Required method for Designer support - do not modify 
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent() {
+            this.lblDescription = new System.Windows.Forms.Label();
+            this.lblTitle = new Microsoft.EnterpriseManagement.Mom.Internal.UI.Controls.PageSectionLabel();
+            this.listWatcherNodes = new System.Windows.Forms.ListBox();
+            this.lblWatcherNodes = new System.Windows.Forms.Label();
+            this.tsMenu = new System.Windows.Forms.ToolStrip();
+            this.btnAdd = new System.Windows.Forms.ToolStripButton();
+            this.separatorEdit = new System.Windows.Forms.ToolStripSeparator();
+            this.btnRemove = new System.Windows.Forms.ToolStripButton();
+            this.tsMenu.SuspendLayout();
+            this.SuspendLayout();
+            // 
+            // lblDescription
+            // 
+            this.lblDescription.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+            this.lblDescription.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.lblDescription.Location = new System.Drawing.Point(0, 43);
+            this.lblDescription.Name = "lblDescription";
+            this.lblDescription.Size = new System.Drawing.Size(438, 91);
+            this.lblDescription.TabIndex = 10;
+            this.lblDescription.Text = "Select an agent-managed computer to act as a watcher node. The watcher node commu" +
+    "nicates with Ambari API to retrieve data.";
+            // 
+            // lblTitle
+            // 
+            this.lblTitle.BackColor = System.Drawing.Color.Transparent;
+            this.lblTitle.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Bold);
+            this.lblTitle.ImeMode = System.Windows.Forms.ImeMode.NoControl;
+            this.lblTitle.Location = new System.Drawing.Point(0, 10);
+            this.lblTitle.MinimumSize = new System.Drawing.Size(244, 0);
+            this.lblTitle.Name = "lblTitle";
+            this.lblTitle.Size = new System.Drawing.Size(244, 18);
+            this.lblTitle.TabIndex = 9;
+            this.lblTitle.Text = "Choose Watcher Nodes";
+            // 
+            // listWatcherNodes
+            // 
+            this.listWatcherNodes.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+            this.listWatcherNodes.FormattingEnabled = true;
+            this.listWatcherNodes.Location = new System.Drawing.Point(3, 177);
+            this.listWatcherNodes.Name = "listWatcherNodes";
+            this.listWatcherNodes.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended;
+            this.listWatcherNodes.Size = new System.Drawing.Size(435, 108);
+            this.listWatcherNodes.TabIndex = 11;
+            this.listWatcherNodes.SelectedIndexChanged += new System.EventHandler(this.listWatcherNodes_SelectedIndexChanged);
+            // 
+            // lblWatcherNodes
+            // 
+            this.lblWatcherNodes.AutoSize = true;
+            this.lblWatcherNodes.Location = new System.Drawing.Point(3, 153);
+            this.lblWatcherNodes.Name = "lblWatcherNodes";
+            this.lblWatcherNodes.Size = new System.Drawing.Size(85, 13);
+            this.lblWatcherNodes.TabIndex = 14;
+            this.lblWatcherNodes.Text = "Watcher Nodes:";
+            // 
+            // tsMenu
+            // 
+            this.tsMenu.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
+            this.tsMenu.Dock = System.Windows.Forms.DockStyle.None;
+            this.tsMenu.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;
+            this.tsMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.btnAdd,
+            this.separatorEdit,
+            this.btnRemove});
+            this.tsMenu.Location = new System.Drawing.Point(286, 149);
+            this.tsMenu.Name = "tsMenu";
+            this.tsMenu.RenderMode = System.Windows.Forms.ToolStripRenderMode.System;
+            this.tsMenu.Size = new System.Drawing.Size(152, 25);
+            this.tsMenu.TabIndex = 24;
+            this.tsMenu.Text = "stripButtons";
+            // 
+            // btnAdd
+            // 
+            this.btnAdd.Image = global::Ambari.SCOM.ScomPages.Properties.Resources.Add;
+            this.btnAdd.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
+            this.btnAdd.ImageTransparentColor = System.Drawing.Color.Magenta;
+            this.btnAdd.Name = "btnAdd";
+            this.btnAdd.Size = new System.Drawing.Size(46, 22);
+            this.btnAdd.Text = "Add";
+            this.btnAdd.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+            this.btnAdd.Click += new System.EventHandler(this.btnAdd_Click);
+            // 
+            // separatorEdit
+            // 
+            this.separatorEdit.Name = "separatorEdit";
+            this.separatorEdit.Size = new System.Drawing.Size(6, 25);
+            // 
+            // btnRemove
+            // 
+            this.btnRemove.Enabled = false;
+            this.btnRemove.Image = global::Ambari.SCOM.ScomPages.Properties.Resources.Remove;
+            this.btnRemove.ImageTransparentColor = System.Drawing.Color.Magenta;
+            this.btnRemove.Name = "btnRemove";
+            this.btnRemove.Size = new System.Drawing.Size(66, 22);
+            this.btnRemove.Text = "Remove";
+            this.btnRemove.Click += new System.EventHandler(this.btnRemove_Click);
+            // 
+            // WatcherNodesPage
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.Controls.Add(this.tsMenu);
+            this.Controls.Add(this.lblWatcherNodes);
+            this.Controls.Add(this.listWatcherNodes);
+            this.Controls.Add(this.lblDescription);
+            this.Controls.Add(this.lblTitle);
+            this.HeaderText = "Watcher Nodes";
+            this.Name = "WatcherNodesPage";
+            this.NavigationText = "Watcher Nodes";
+            this.Size = new System.Drawing.Size(456, 391);
+            this.TabName = "Watcher Nodes";
+            this.tsMenu.ResumeLayout(false);
+            this.tsMenu.PerformLayout();
+            this.ResumeLayout(false);
+            this.PerformLayout();
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.Label lblDescription;
+        private Microsoft.EnterpriseManagement.Mom.Internal.UI.Controls.PageSectionLabel lblTitle;
+        private System.Windows.Forms.ListBox listWatcherNodes;
+        private System.Windows.Forms.Label lblWatcherNodes;
+        private System.Windows.Forms.ToolStrip tsMenu;
+        private System.Windows.Forms.ToolStripButton btnAdd;
+        private System.Windows.Forms.ToolStripSeparator separatorEdit;
+        private System.Windows.Forms.ToolStripButton btnRemove;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/873b3502/contrib/ambari-scom/management-pack/Hadoop_MP/ScomPages/DiscoveryTemplate/WatcherNodesPage.cs
----------------------------------------------------------------------
diff --git a/contrib/ambari-scom/management-pack/Hadoop_MP/ScomPages/DiscoveryTemplate/WatcherNodesPage.cs b/contrib/ambari-scom/management-pack/Hadoop_MP/ScomPages/DiscoveryTemplate/WatcherNodesPage.cs
new file mode 100644
index 0000000..51a4d75
--- /dev/null
+++ b/contrib/ambari-scom/management-pack/Hadoop_MP/ScomPages/DiscoveryTemplate/WatcherNodesPage.cs
@@ -0,0 +1,216 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using Microsoft.EnterpriseManagement;
+using Microsoft.EnterpriseManagement.Administration;
+using Microsoft.EnterpriseManagement.Common;
+using Microsoft.EnterpriseManagement.Configuration;
+using Microsoft.EnterpriseManagement.Mom.Internal.UI.Common;
+using Microsoft.EnterpriseManagement.Monitoring;
+using Microsoft.EnterpriseManagement.UI;
+using Ambari.SCOM.ScomPages.Properties;
+
+namespace Ambari.SCOM.ScomPages.DiscoveryTemplate {
+    public partial class WatcherNodesPage : UIPage {
+        public const string SharedUserDataWatcherNodesList = "WatcherNodes.WatcherNodesList";
+        public const string SharedUserDataTemplateIdString = "WatcherNodes.TemplateIdString";
+
+        private IEnumerable<PartialMonitoringObject> watcherNodes;
+        private string templateIdString;
+
+        private string ambariUri;
+        private string runAsName;
+        private byte[] runAsSsid;
+
+        public WatcherNodesPage() {
+            InitializeComponent();
+        }
+
+        private IEnumerable<PartialMonitoringObject> GetWatcherNodes(IEnumerable watcherNodesList) {
+            if (ManagementGroup == null) return null;
+
+            var monitoringClass = ManagementGroup.EntityTypes.GetClass(SystemMonitoringClass.HealthService);
+            if (monitoringClass == null) return null;
+
+            var criteriaBuilder = new StringBuilder();
+            foreach (var watcherNodeName in watcherNodesList) {
+                criteriaBuilder.AppendFormat("DisplayName = '{0}' OR ", watcherNodeName);
+            }
+            criteriaBuilder.Remove(criteriaBuilder.Length - 4, 4);
+
+            var partialMonitoringObjects =
+                ManagementGroup.EntityObjects.GetObjectReader<PartialMonitoringObject>(
+                    new MonitoringObjectGenericCriteria(criteriaBuilder.ToString()),
+                    monitoringClass,
+                    ObjectQueryOptions.Default);
+            
+            if (partialMonitoringObjects != null)
+                return partialMonitoringObjects.GetRange(0, partialMonitoringObjects.Count);
+
+            return null;
+        }
+
+        private void GetSharedUserData() {
+            ambariUri = SharedUserData[AmbariDetailsPage.SharedUserDataAmbariUri] as string;
+            runAsName = SharedUserData[AmbariDetailsPage.SharedUserDataRunAsName] as string;
+            runAsSsid = SharedUserData[AmbariDetailsPage.SharedUserDataRunAsSsid] as byte[];
+            watcherNodes = GetWatcherNodes(listWatcherNodes.Items);
+        }
+
+        public override void LoadPageConfig() {
+            if (IsCreationMode) {
+                templateIdString = Guid.NewGuid().ToString("N");
+            } else {
+                if (String.IsNullOrEmpty(InputConfigurationXml)) return;
+                try {
+                    var config = (WatcherNodesPageConfig)XmlHelper.Deserialize(InputConfigurationXml, typeof(WatcherNodesPageConfig), true);
+                    templateIdString = config.TemplateIdString;
+                    PopulateWatcherNodesList(config.WatcherNodesList);
+
+                    SetSharedUserData();
+                } catch (ArgumentNullException) {
+                    return;
+                } catch (InvalidOperationException) {
+                    return;
+                }
+            }
+            IsConfigValid = ValidatePageConfiguration();
+            base.LoadPageConfig();
+        }
+
+        private void PopulateWatcherNodesList(string watcherNodesList) {
+            listWatcherNodes.Items.AddRange(watcherNodesList.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries));
+        }
+
+        private void btnAdd_Click(object sender, EventArgs e) {
+            ShowComputerPickerDialog();
+            IsConfigValid = ValidatePageConfiguration();
+        }
+
+        private void btnRemove_Click(object sender, EventArgs e) {
+            if (listWatcherNodes.SelectedItems == null ||
+                listWatcherNodes.SelectedItems.Count == 0) return;
+            var selectedItems = new ArrayList(listWatcherNodes.SelectedItems);
+            foreach (var selectedItem in selectedItems)
+                listWatcherNodes.Items.Remove(selectedItem);
+            IsConfigValid = ValidatePageConfiguration();
+        }
+
+        private bool RunAsAccountDistributionDialog() {
+            GetSharedUserData();
+
+            var securedData = ManagementGroup.Security.GetSecureData(runAsSsid);
+            if (securedData == null) return false;
+
+            var newState = ManagementGroup.Security.GetApprovedHealthServicesForDistribution<PartialMonitoringObject>(securedData);
+            if (newState == null) return false;
+
+            if (newState.Result == ApprovedHealthServicesResults.All) return true;
+            var missingAgents = watcherNodes.Except(newState.HealthServices).ToList();
+            if (!missingAgents.Any()) return true;
+
+            var text = String.Format(Resources.AllowDistributionConfirmationFormat, runAsName, String.Join(Environment.NewLine, missingAgents.Select(a => a.DisplayName)));
+            if (MessageBox.Show(ParentForm, text, Resources.Warning, MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation) != DialogResult.Yes)
+                return false;
+                
+            newState.Result = ApprovedHealthServicesResults.Specified;
+            missingAgents.ForEach(a => newState.HealthServices.Add(a));
+            ManagementGroup.Security.SetApprovedHealthServicesForDistribution<PartialMonitoringObject>(securedData, newState);
+            return true;
+        }
+
+        private bool AllowProxyDialog() {
+            GetSharedUserData();
+
+            var filterCriteria = new StringBuilder();
+            foreach (var watcherNode in watcherNodes) {
+                filterCriteria.Append("Name = '" + watcherNode.DisplayName + "' OR ");
+            }
+            filterCriteria.Remove(filterCriteria.Length - 4, 4); 
+
+            var proxyDiabledAgents = ManagementGroup.Administration
+                            .GetAgentManagedComputers(new AgentManagedComputerCriteria(filterCriteria.ToString()))
+                            .Where(a => !a.ProxyingEnabled.Value);
+            if (!proxyDiabledAgents.Any()) return true;
+
+            var text = String.Format(Resources.AllowProxyConfirmationFormat, String.Join(Environment.NewLine, proxyDiabledAgents.Select(a => a.DisplayName)));
+            if (MessageBox.Show(ParentForm, text, Resources.Warning, MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation) != DialogResult.Yes)
+                return false;
+
+            foreach (var agent in proxyDiabledAgents) {
+                agent.ProxyingEnabled = true;
+                agent.ApplyChanges();
+            }
+
+            return true;
+        }
+
+        public override bool SavePageConfig() {
+            if (!(IsConfigValid = ValidatePageConfiguration()) ||
+                !RunAsAccountDistributionDialog() ||
+                !AllowProxyDialog()) return false;
+
+            OutputConfigurationXml = XmlHelper.Serialize(
+                                        new WatcherNodesPageConfig {
+                                            TemplateIdString = templateIdString,
+                                            WatcherNodesList = String.Join(";", listWatcherNodes.Items.OfType<string>()),
+                                            SeedComputerName = listWatcherNodes.Items.OfType<string>().FirstOrDefault() },
+                                        true);
+            SetSharedUserData();
+            return true;
+        }
+
+        private void SetSharedUserData() {
+            SharedUserData[SharedUserDataTemplateIdString] = templateIdString;
+            SharedUserData[SharedUserDataWatcherNodesList] = listWatcherNodes.Items.OfType<string>();
+        }
+
+        private void ShowComputerPickerDialog() {
+            using (var dialog = new MultipleAgentChooserDialog(Container)) {
+                if (dialog.ShowDialog(this) != DialogResult.OK) return;
+
+                if (dialog.SelectedItems == null) return;
+                foreach (var selectedItem in dialog.SelectedItems) {
+                    if (selectedItem == null || selectedItem.Item == null) continue;
+                    var item = selectedItem.Item as ComputerHealthService;
+                    if (!String.IsNullOrEmpty(item.PrincipalName) &&
+                        !listWatcherNodes.Items.Contains(item.PrincipalName)) {
+                        listWatcherNodes.Items.Add(item.PrincipalName);
+                    }
+                }
+            }
+        }
+
+        private bool ValidatePageConfiguration() {
+            if (listWatcherNodes.Items.Count <= 0)
+                return false;
+
+            SetSharedUserData();
+            return true;
+        }
+
+        private void listWatcherNodes_SelectedIndexChanged(object sender, EventArgs e) {
+            btnRemove.Enabled = (listWatcherNodes.SelectedIndex != ListBox.NoMatches);
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/873b3502/contrib/ambari-scom/management-pack/Hadoop_MP/ScomPages/DiscoveryTemplate/WatcherNodesPage.resx
----------------------------------------------------------------------
diff --git a/contrib/ambari-scom/management-pack/Hadoop_MP/ScomPages/DiscoveryTemplate/WatcherNodesPage.resx b/contrib/ambari-scom/management-pack/Hadoop_MP/ScomPages/DiscoveryTemplate/WatcherNodesPage.resx
new file mode 100644
index 0000000..1f6aaae
--- /dev/null
+++ b/contrib/ambari-scom/management-pack/Hadoop_MP/ScomPages/DiscoveryTemplate/WatcherNodesPage.resx
@@ -0,0 +1,139 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+<!--## Licensed to the Apache Software Foundation (ASF) under one
+## or more contributor license agreements.  See the NOTICE file
+## distributed with this work for additional information
+## regarding copyright ownership.  The ASF licenses this file
+## to you under the Apache License, Version 2.0 (the
+## "License"); you may not use this file except in compliance
+## with the License.  You may obtain a copy of the License at
+##
+##     http://www.apache.org/licenses/LICENSE-2.0
+##
+## Unless required by applicable law or agreed to in writing,
+## software distributed under the License is distributed on an
+## "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+## KIND, either express or implied.  See the License for the
+## specific language governing permissions and limitations
+## under the License.-->
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="tsMenu.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+</root>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/873b3502/contrib/ambari-scom/management-pack/Hadoop_MP/ScomPages/DiscoveryTemplate/WatcherNodesPageConfig.cs
----------------------------------------------------------------------
diff --git a/contrib/ambari-scom/management-pack/Hadoop_MP/ScomPages/DiscoveryTemplate/WatcherNodesPageConfig.cs b/contrib/ambari-scom/management-pack/Hadoop_MP/ScomPages/DiscoveryTemplate/WatcherNodesPageConfig.cs
new file mode 100644
index 0000000..bff739b
--- /dev/null
+++ b/contrib/ambari-scom/management-pack/Hadoop_MP/ScomPages/DiscoveryTemplate/WatcherNodesPageConfig.cs
@@ -0,0 +1,28 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+using System;
+using System.Xml.Serialization;
+
+namespace Ambari.SCOM.ScomPages.DiscoveryTemplate {
+    [Serializable, XmlType(AnonymousType = true), XmlRoot(Namespace = "", IsNullable = false)]
+    public class WatcherNodesPageConfig {
+        public string WatcherNodesList { get; set; }
+        public string SeedComputerName { get; set; }
+        public string TemplateIdString { get; set; }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/873b3502/contrib/ambari-scom/management-pack/Hadoop_MP/ScomPages/Properties/AssemblyInfo.cs
----------------------------------------------------------------------
diff --git a/contrib/ambari-scom/management-pack/Hadoop_MP/ScomPages/Properties/AssemblyInfo.cs b/contrib/ambari-scom/management-pack/Hadoop_MP/ScomPages/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..c34d6e9
--- /dev/null
+++ b/contrib/ambari-scom/management-pack/Hadoop_MP/ScomPages/Properties/AssemblyInfo.cs
@@ -0,0 +1,52 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("ScomPages")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("Apache Ambari")]
+[assembly: AssemblyProduct("ScomPages")]
+[assembly: AssemblyCopyright("Copyright © Apache Ambari 2013")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("d67097db-a38b-452e-bde9-860e1da798d9")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/873b3502/contrib/ambari-scom/management-pack/Hadoop_MP/ScomPages/Properties/Resources.Designer.cs
----------------------------------------------------------------------
diff --git a/contrib/ambari-scom/management-pack/Hadoop_MP/ScomPages/Properties/Resources.Designer.cs b/contrib/ambari-scom/management-pack/Hadoop_MP/ScomPages/Properties/Resources.Designer.cs
new file mode 100644
index 0000000..52a6840
--- /dev/null
+++ b/contrib/ambari-scom/management-pack/Hadoop_MP/ScomPages/Properties/Resources.Designer.cs
@@ -0,0 +1,172 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.18051
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace Ambari.SCOM.ScomPages.Properties {
+    using System;
+    
+    
+    /// <summary>
+    ///   A strongly-typed resource class, for looking up localized strings, etc.
+    /// </summary>
+    // This class was auto-generated by the StronglyTypedResourceBuilder
+    // class via a tool like ResGen or Visual Studio.
+    // To add or remove a member, edit your .ResX file then rerun ResGen
+    // with the /str option, or rebuild your VS project.
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    internal class Resources {
+        
+        private static global::System.Resources.ResourceManager resourceMan;
+        
+        private static global::System.Globalization.CultureInfo resourceCulture;
+        
+        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+        internal Resources() {
+        }
+        
+        /// <summary>
+        ///   Returns the cached ResourceManager instance used by this class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Resources.ResourceManager ResourceManager {
+            get {
+                if (object.ReferenceEquals(resourceMan, null)) {
+                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Ambari.SCOM.ScomPages.Properties.Resources", typeof(Resources).Assembly);
+                    resourceMan = temp;
+                }
+                return resourceMan;
+            }
+        }
+        
+        /// <summary>
+        ///   Overrides the current thread's CurrentUICulture property for all
+        ///   resource lookups using this strongly typed resource class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Globalization.CultureInfo Culture {
+            get {
+                return resourceCulture;
+            }
+            set {
+                resourceCulture = value;
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized resource of type System.Drawing.Bitmap.
+        /// </summary>
+        internal static System.Drawing.Bitmap Add {
+            get {
+                object obj = ResourceManager.GetObject("Add", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to To enable discovery of Hadoop cluster hosted in Windows Azure, Run As account &apos;{0}&apos; must be distributed to the following hosts:
+        ///
+        ///{1}
+        ///
+        ///Would you like Operations Manager to distribute the account?.
+        /// </summary>
+        internal static string AllowDistributionConfirmationFormat {
+            get {
+                return ResourceManager.GetString("AllowDistributionConfirmationFormat", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to To enable discovery of Hadoop cluster hosted in Windows Azure, following agents must be enabled to act as a proxy:
+        ///
+        ///{0}
+        ///
+        ///Would you like to allow following agents to act as a proxy?.
+        /// </summary>
+        internal static string AllowProxyConfirmationFormat {
+            get {
+                return ResourceManager.GetString("AllowProxyConfirmationFormat", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Ambari URI.
+        /// </summary>
+        internal static string AmbariUri {
+            get {
+                return ResourceManager.GetString("AmbariUri", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Description.
+        /// </summary>
+        internal static string Description {
+            get {
+                return ResourceManager.GetString("Description", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Management Pack.
+        /// </summary>
+        internal static string ManagementPack {
+            get {
+                return ResourceManager.GetString("ManagementPack", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Name.
+        /// </summary>
+        internal static string Name {
+            get {
+                return ResourceManager.GetString("Name", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized resource of type System.Drawing.Bitmap.
+        /// </summary>
+        internal static System.Drawing.Bitmap Remove {
+            get {
+                object obj = ResourceManager.GetObject("Remove", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Run As Account.
+        /// </summary>
+        internal static string RunAsAccount {
+            get {
+                return ResourceManager.GetString("RunAsAccount", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Warning.
+        /// </summary>
+        internal static string Warning {
+            get {
+                return ResourceManager.GetString("Warning", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to Watcher Nodes.
+        /// </summary>
+        internal static string WatcherNodes {
+            get {
+                return ResourceManager.GetString("WatcherNodes", resourceCulture);
+            }
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/873b3502/contrib/ambari-scom/management-pack/Hadoop_MP/ScomPages/Properties/Resources.resx
----------------------------------------------------------------------
diff --git a/contrib/ambari-scom/management-pack/Hadoop_MP/ScomPages/Properties/Resources.resx b/contrib/ambari-scom/management-pack/Hadoop_MP/ScomPages/Properties/Resources.resx
new file mode 100644
index 0000000..ab6d88c
--- /dev/null
+++ b/contrib/ambari-scom/management-pack/Hadoop_MP/ScomPages/Properties/Resources.resx
@@ -0,0 +1,178 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+<!--## Licensed to the Apache Software Foundation (ASF) under one
+## or more contributor license agreements.  See the NOTICE file
+## distributed with this work for additional information
+## regarding copyright ownership.  The ASF licenses this file
+## to you under the Apache License, Version 2.0 (the
+## "License"); you may not use this file except in compliance
+## with the License.  You may obtain a copy of the License at
+##
+##     http://www.apache.org/licenses/LICENSE-2.0
+##
+## Unless required by applicable law or agreed to in writing,
+## software distributed under the License is distributed on an
+## "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+## KIND, either express or implied.  See the License for the
+## specific language governing permissions and limitations
+## under the License.-->
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AmbariUri" xml:space="preserve">
+    <value>Ambari URI</value>
+  </data>
+  <data name="Description" xml:space="preserve">
+    <value>Description</value>
+  </data>
+  <data name="WatcherNodes" xml:space="preserve">
+    <value>Watcher Nodes</value>
+  </data>
+  <data name="ManagementPack" xml:space="preserve">
+    <value>Management Pack</value>
+  </data>
+  <data name="Name" xml:space="preserve">
+    <value>Name</value>
+  </data>
+  <data name="AllowDistributionConfirmationFormat" xml:space="preserve">
+    <value>To enable discovery of Hadoop cluster hosted in Windows Azure, Run As account '{0}' must be distributed to the following hosts:
+
+{1}
+
+Would you like Operations Manager to distribute the account?</value>
+  </data>
+  <data name="Warning" xml:space="preserve">
+    <value>Warning</value>
+  </data>
+  <data name="RunAsAccount" xml:space="preserve">
+    <value>Run As Account</value>
+  </data>
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="Add" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Images\Add.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="Remove" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Images\Remove.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="AllowProxyConfirmationFormat" xml:space="preserve">
+    <value>To enable discovery of Hadoop cluster hosted in Windows Azure, following agents must be enabled to act as a proxy:
+
+{0}
+
+Would you like to allow following agents to act as a proxy?</value>
+  </data>
+</root>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/873b3502/contrib/ambari-scom/management-pack/Hadoop_MP/ScomPages/ScomPages.csproj
----------------------------------------------------------------------
diff --git a/contrib/ambari-scom/management-pack/Hadoop_MP/ScomPages/ScomPages.csproj b/contrib/ambari-scom/management-pack/Hadoop_MP/ScomPages/ScomPages.csproj
new file mode 100644
index 0000000..e686f08
--- /dev/null
+++ b/contrib/ambari-scom/management-pack/Hadoop_MP/ScomPages/ScomPages.csproj
@@ -0,0 +1,148 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--## Licensed to the Apache Software Foundation (ASF) under one
+## or more contributor license agreements.  See the NOTICE file
+## distributed with this work for additional information
+## regarding copyright ownership.  The ASF licenses this file
+## to you under the Apache License, Version 2.0 (the
+## "License"); you may not use this file except in compliance
+## with the License.  You may obtain a copy of the License at
+##
+##     http://www.apache.org/licenses/LICENSE-2.0
+##
+## Unless required by applicable law or agreed to in writing,
+## software distributed under the License is distributed on an
+## "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+## KIND, either express or implied.  See the License for the
+## specific language governing permissions and limitations
+## under the License.-->
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>8.0.30703</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{B77E5EA7-3FE4-49C9-88AC-3AB871A26F9B}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>Ambari.SCOM.ScomPages</RootNamespace>
+    <AssemblyName>Ambari.SCOM.ScomPages</AssemblyName>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <SccProjectName>SAK</SccProjectName>
+    <SccLocalPath>SAK</SccLocalPath>
+    <SccAuxPath>SAK</SccAuxPath>
+    <SccProvider>SAK</SccProvider>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="Microsoft.EnterpriseManagement.Core, Version=7.0.5000.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\Items\Libs\SCOM2012\Microsoft.EnterpriseManagement.Core.dll</HintPath>
+    </Reference>
+    <Reference Include="Microsoft.EnterpriseManagement.OperationsManager, Version=7.0.5000.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\Items\Libs\SCOM2012\Microsoft.EnterpriseManagement.OperationsManager.dll</HintPath>
+    </Reference>
+    <Reference Include="Microsoft.EnterpriseManagement.UI.Authoring">
+      <HintPath>..\Items\Libs\SCOM2012\Microsoft.EnterpriseManagement.UI.Authoring.dll</HintPath>
+    </Reference>
+    <Reference Include="Microsoft.EnterpriseManagement.UI.Extensibility">
+      <HintPath>..\Items\Libs\SCOM2012\Microsoft.EnterpriseManagement.UI.Extensibility.dll</HintPath>
+    </Reference>
+    <Reference Include="Microsoft.MOM.UI.Common">
+      <HintPath>..\Items\Libs\SCOM2012\Microsoft.MOM.UI.Common.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="DiscoveryTemplate\AmbariDetailsPage.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="DiscoveryTemplate\AmbariDetailsPage.Designer.cs">
+      <DependentUpon>AmbariDetailsPage.cs</DependentUpon>
+    </Compile>
+    <Compile Include="DiscoveryTemplate\AmbariDetailsPageConfig.cs" />
+    <Compile Include="DiscoveryTemplate\InputParser.cs">
+      <SubType>Component</SubType>
+    </Compile>
+    <Compile Include="DiscoveryTemplate\MultipleAgentChooserDialog.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="DiscoveryTemplate\RunAsAccountWrapper.cs" />
+    <Compile Include="DiscoveryTemplate\SummaryPage.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="DiscoveryTemplate\SummaryPage.Designer.cs">
+      <DependentUpon>SummaryPage.cs</DependentUpon>
+    </Compile>
+    <Compile Include="DiscoveryTemplate\TemplateInputConfig.cs" />
+    <Compile Include="DiscoveryTemplate\WatcherNodesPage.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Include="DiscoveryTemplate\WatcherNodesPage.Designer.cs">
+      <DependentUpon>WatcherNodesPage.cs</DependentUpon>
+    </Compile>
+    <Compile Include="DiscoveryTemplate\WatcherNodesPageConfig.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="Properties\Resources.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DesignTime>True</DesignTime>
+      <DependentUpon>Resources.resx</DependentUpon>
+    </Compile>
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="DiscoveryTemplate\AmbariDetailsPage.resx">
+      <DependentUpon>AmbariDetailsPage.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="DiscoveryTemplate\SummaryPage.resx">
+      <DependentUpon>SummaryPage.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="DiscoveryTemplate\WatcherNodesPage.resx">
+      <DependentUpon>WatcherNodesPage.cs</DependentUpon>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Properties\Resources.resx">
+      <Generator>ResXFileCodeGenerator</Generator>
+      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+  </ItemGroup>
+  <ItemGroup>
+    <Content Include="Images\Add.png" />
+    <Content Include="Images\Remove.png" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/873b3502/contrib/ambari-scom/management-pack/Hadoop_MP/WidgetsSilverlight/Properties/AssemblyInfo.cs
----------------------------------------------------------------------
diff --git a/contrib/ambari-scom/management-pack/Hadoop_MP/WidgetsSilverlight/Properties/AssemblyInfo.cs b/contrib/ambari-scom/management-pack/Hadoop_MP/WidgetsSilverlight/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..6eca1ab
--- /dev/null
+++ b/contrib/ambari-scom/management-pack/Hadoop_MP/WidgetsSilverlight/Properties/AssemblyInfo.cs
@@ -0,0 +1,51 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("WidgetsSilverlight")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("Apache Ambari")]
+[assembly: AssemblyProduct("WidgetsSilverlight")]
+[assembly: AssemblyCopyright("Copyright © Apache Ambari 2013")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("207052df-79de-472c-8f2b-b4c4853fa41e")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Revision and Build Numbers 
+// by using the '*' as shown below:
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]