Repository: ambari
Updated Branches:
  refs/heads/trunk f8b83e2f6 -> 37717dd4c


AMBARI-10445. Populate cluster widgets from stack-defined widgets on 
cluster/service create. Upgrade Catalog changes. (swagle)


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/37717dd4
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/37717dd4
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/37717dd4

Branch: refs/heads/trunk
Commit: 37717dd4cd55ee75f3f218e6fee20af529cc0f87
Parents: f8b83e2
Author: Siddharth Wagle <swa...@hortonworks.com>
Authored: Fri Apr 10 18:46:44 2015 -0700
Committer: Siddharth Wagle <swa...@hortonworks.com>
Committed: Fri Apr 10 18:49:57 2015 -0700

----------------------------------------------------------------------
 .../server/upgrade/UpgradeCatalog210.java       | 36 +++++++++
 .../server/upgrade/UpgradeCatalog210Test.java   | 78 ++++++++++++++++++++
 2 files changed, 114 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/37717dd4/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog210.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog210.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog210.java
index d72c9d3..09a8740 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog210.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog210.java
@@ -22,10 +22,18 @@ import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 
 import org.apache.ambari.server.AmbariException;
 import org.apache.ambari.server.configuration.Configuration;
+import org.apache.ambari.server.controller.AmbariManagementController;
 import org.apache.ambari.server.orm.DBAccessor.DBColumnInfo;
+import org.apache.ambari.server.orm.dao.ClusterDAO;
+import org.apache.ambari.server.orm.dao.ClusterServiceDAO;
+import org.apache.ambari.server.orm.entities.ClusterEntity;
+import org.apache.ambari.server.state.Cluster;
+import org.apache.ambari.server.state.Clusters;
+import org.apache.ambari.server.state.Service;
 import org.apache.commons.lang.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -357,6 +365,32 @@ public class UpgradeCatalog210 extends 
AbstractUpgradeCatalog {
         false);
   }
 
+  /**
+   * Copy cluster & service widgets from stack to DB.
+   */
+  protected void initializeClusterAndServiceWidgets() throws AmbariException {
+    AmbariManagementController controller = 
injector.getInstance(AmbariManagementController.class);
+    Clusters clusters = controller.getClusters();
+    if (clusters == null) {
+      return;
+    }
+
+    Map<String, Cluster> clusterMap = clusters.getClusters();
+
+    if (clusterMap != null && !clusterMap.isEmpty()) {
+      for (Cluster cluster : clusterMap.values()) {
+        controller.initializeWidgetsAndLayouts(cluster, null);
+
+        Map<String, Service> serviceMap = cluster.getServices();
+        if (serviceMap != null && !serviceMap.isEmpty()) {
+          for (Service service : serviceMap.values()) {
+            controller.initializeWidgetsAndLayouts(cluster, service);
+          }
+        }
+      }
+    }
+  }
+
   // ----- UpgradeCatalog ----------------------------------------------------
 
   /**
@@ -425,5 +459,7 @@ public class UpgradeCatalog210 extends 
AbstractUpgradeCatalog {
   @Override
   protected void executeDMLUpdates() throws AmbariException, SQLException {
     addNewConfigurationsFromXml();
+    // Initialize all default widgets and widget layouts
+    initializeClusterAndServiceWidgets();
   }
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/37717dd4/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog210Test.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog210Test.java
 
b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog210Test.java
index af9dcda..6ca7dfd 100644
--- 
a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog210Test.java
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog210Test.java
@@ -18,19 +18,29 @@
 
 package org.apache.ambari.server.upgrade;
 
+import com.google.inject.AbstractModule;
 import com.google.inject.Binder;
 import com.google.inject.Guice;
 import com.google.inject.Injector;
 import com.google.inject.Module;
 import com.google.inject.Provider;
 import com.google.inject.persist.PersistService;
+import org.apache.ambari.server.api.services.AmbariMetaInfo;
 import org.apache.ambari.server.configuration.Configuration;
+import org.apache.ambari.server.controller.AmbariManagementController;
 import org.apache.ambari.server.orm.DBAccessor;
 import org.apache.ambari.server.orm.DBAccessor.DBColumnInfo;
 import org.apache.ambari.server.orm.GuiceJpaInitializer;
 import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
+import org.apache.ambari.server.state.Cluster;
+import org.apache.ambari.server.state.Clusters;
+import org.apache.ambari.server.state.OperatingSystemInfo;
+import org.apache.ambari.server.state.RepositoryInfo;
+import org.apache.ambari.server.state.Service;
+import org.apache.ambari.server.state.StackId;
 import org.apache.ambari.server.state.stack.OsFamily;
 import org.easymock.Capture;
+import org.easymock.EasyMockSupport;
 import org.junit.After;
 import org.junit.Assert;
 import org.junit.Before;
@@ -38,19 +48,25 @@ import org.junit.Test;
 
 import javax.persistence.EntityManager;
 import java.lang.reflect.Field;
+import java.lang.reflect.Method;
 import java.sql.Connection;
 import java.sql.ResultSet;
 import java.sql.SQLException;
+import java.util.Collections;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Map;
 
 import static org.easymock.EasyMock.capture;
 
 import static junit.framework.Assert.assertEquals;
+import static org.easymock.EasyMock.createMockBuilder;
 import static org.easymock.EasyMock.createNiceMock;
 import static org.easymock.EasyMock.createStrictMock;
 import static org.easymock.EasyMock.eq;
 import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.expectLastCall;
 import static org.easymock.EasyMock.replay;
 import static org.easymock.EasyMock.reset;
 import static org.easymock.EasyMock.verify;
@@ -116,6 +132,68 @@ public class UpgradeCatalog210Test {
     viewSectionDDL.verify(dbAccessor);
   }
 
+  @Test
+  public void testExecuteDMLUpdates() throws Exception {
+    Method addNewConfigurationsFromXml =
+      
AbstractUpgradeCatalog.class.getDeclaredMethod("addNewConfigurationsFromXml");
+    Method initializeClusterAndServiceWidgets =
+      
UpgradeCatalog210.class.getDeclaredMethod("initializeClusterAndServiceWidgets");
+
+    UpgradeCatalog210 upgradeCatalog210 = 
createMockBuilder(UpgradeCatalog210.class)
+      .addMockedMethod(addNewConfigurationsFromXml)
+      .addMockedMethod(initializeClusterAndServiceWidgets)
+      .createMock();
+
+    upgradeCatalog210.addNewConfigurationsFromXml();
+    expectLastCall().once();
+
+    upgradeCatalog210.initializeClusterAndServiceWidgets();
+    expectLastCall().once();
+
+    replay(upgradeCatalog210);
+
+    upgradeCatalog210.executeDMLUpdates();
+
+    verify(upgradeCatalog210);
+  }
+
+  @Test
+  public void testInitializeClusterAndServiceWidgets() throws Exception {
+    final AmbariManagementController controller = 
createStrictMock(AmbariManagementController.class);
+    final Clusters clusters = createStrictMock(Clusters.class);
+    final Cluster cluster = createStrictMock(Cluster.class);
+    final Service service = createStrictMock(Service.class);
+    final Map<String, Cluster> clusterMap = Collections.singletonMap("c1", 
cluster);
+    final Map<String, Service> services = Collections.singletonMap("HBASE", 
service);
+
+
+    Module module = new Module() {
+      @Override
+      public void configure(Binder binder) {
+        binder.bind(AmbariManagementController.class).toInstance(controller);
+        binder.bind(Clusters.class).toInstance(clusters);
+        
binder.bind(DBAccessor.class).toInstance(createNiceMock(DBAccessor.class));
+        binder.bind(OsFamily.class).toInstance(createNiceMock(OsFamily.class));
+      }
+    };
+
+    expect(controller.getClusters()).andReturn(clusters).anyTimes();
+    expect(clusters.getClusters()).andReturn(clusterMap).anyTimes();
+    controller.initializeWidgetsAndLayouts(cluster, null);
+    expectLastCall().once();
+
+    expect(cluster.getServices()).andReturn(services).once();
+    controller.initializeWidgetsAndLayouts(cluster, service);
+    expectLastCall().once();
+
+    replay(controller, clusters, cluster);
+
+    Injector injector = Guice.createInjector(module);
+    
injector.getInstance(UpgradeCatalog210.class).initializeClusterAndServiceWidgets();
+
+    verify(controller, clusters, cluster);
+  }
+
   /**
    * @param dbAccessor
    * @return

Reply via email to