Procházet zdrojové kódy

AMBARI-7211 - Views : support for a <system> property

tbeerbower před 10 roky
rodič
revize
dc15b77062

+ 5 - 3
ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AmbariPrivilegeResourceProvider.java

@@ -122,11 +122,13 @@ public class AmbariPrivilegeResourceProvider extends PrivilegeResourceProvider<O
         resourceEntities.put(clusterEntity.getResource().getId(), clusterEntity);
       }
     }
-    //add view entites
+    //add view entities
     ViewRegistry viewRegistry = ViewRegistry.getInstance();
     for (ViewEntity viewEntity : viewRegistry.getDefinitions()) {
-      for (ViewInstanceEntity viewInstanceEntity : viewEntity.getInstances()) {
-        resourceEntities.put(viewInstanceEntity.getResource().getId(), viewInstanceEntity);
+      if (viewEntity.isLoaded()) {
+        for (ViewInstanceEntity viewInstanceEntity : viewEntity.getInstances()) {
+          resourceEntities.put(viewInstanceEntity.getResource().getId(), viewInstanceEntity);
+        }
       }
     }
     return resourceEntities;

+ 3 - 0
ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ViewVersionResourceProvider.java

@@ -54,6 +54,7 @@ public class ViewVersionResourceProvider extends AbstractResourceProvider {
   public static final String MASKER_CLASS_PROPERTY_ID       = "ViewVersionInfo/masker_class";
   public static final String VIEW_STATUS_PROPERTY_ID        = "ViewVersionInfo/status";
   public static final String VIEW_STATUS_DETAIL_PROPERTY_ID = "ViewVersionInfo/status_detail";
+  public static final String SYSTEM_PROPERTY_ID             = "ViewVersionInfo/system";
 
   /**
    * The key property ids for a view resource.
@@ -79,6 +80,7 @@ public class ViewVersionResourceProvider extends AbstractResourceProvider {
     propertyIds.add(MASKER_CLASS_PROPERTY_ID);
     propertyIds.add(VIEW_STATUS_PROPERTY_ID);
     propertyIds.add(VIEW_STATUS_DETAIL_PROPERTY_ID);
+    propertyIds.add(SYSTEM_PROPERTY_ID);
   }
 
 
@@ -135,6 +137,7 @@ public class ViewVersionResourceProvider extends AbstractResourceProvider {
             setResourceProperty(resource, MASKER_CLASS_PROPERTY_ID, viewDefinition.getMask(), requestedIds);
             setResourceProperty(resource, VIEW_STATUS_PROPERTY_ID, viewDefinition.getStatus().toString(), requestedIds);
             setResourceProperty(resource, VIEW_STATUS_DETAIL_PROPERTY_ID, viewDefinition.getStatusDetail(), requestedIds);
+            setResourceProperty(resource, SYSTEM_PROPERTY_ID, viewDefinition.isSystem(), requestedIds);
 
             resources.add(resource);
           }

+ 28 - 1
ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ViewEntity.java

@@ -112,8 +112,15 @@ public class ViewEntity implements ViewDefinition {
   private String mask;
 
   /**
-   * The list of view parameters.
+   * Indicates whether or not this is a system view.
    */
+  @Column(name = "system_view")
+  @Basic
+  private Integer system;
+
+  /**
+  * The list of view parameters.
+  */
   @OneToMany(cascade = CascadeType.ALL, mappedBy = "view")
   private Collection<ViewParameterEntity> parameters = new HashSet<ViewParameterEntity>();
 
@@ -226,6 +233,7 @@ public class ViewEntity implements ViewDefinition {
     this.ambariConfiguration  = null;
     this.archive              = null;
     this.externalResourceType = null;
+    this.system               = 0;
   }
 
   /**
@@ -251,6 +259,7 @@ public class ViewEntity implements ViewDefinition {
     this.mask        = configuration.getMasker();
     this.icon        = configuration.getIcon();
     this.icon64      = configuration.getIcon64();
+    this.system      = configuration.isSystem() ? 1 : 0;
 
     this.externalResourceType =
         new Resource.Type(getQualifiedResourceTypeName(ResourceConfig.EXTERNAL_RESOURCE_PLURAL_NAME));
@@ -713,6 +722,24 @@ public class ViewEntity implements ViewDefinition {
     return mask;
   }
 
+  /**
+   * Determine whether or not the view is a system view.
+   *
+   * @return true if the view is a system view
+   */
+  public boolean isSystem() {
+    return system == 1;
+  }
+
+  /**
+   * Set the flag which indicates whether or not the view is a system view.
+   *
+   * @param required  the system flag; true if the view is a system view
+   */
+  public void setSystem(boolean required) {
+    this.system = required ? 1 : 0;
+  }
+
   /**
    * Get the admin resource type entity.
    *

+ 2 - 0
ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog170.java

@@ -231,6 +231,8 @@ public class UpgradeCatalog170 extends AbstractUpgradeCatalog {
     // Add columns
     dbAccessor.addColumn("viewmain", new DBColumnInfo("mask",
       String.class, 255, null, true));
+    dbAccessor.addColumn("viewmain", new DBColumnInfo("system_view",
+        Character.class, 1, null, true));
     dbAccessor.addColumn("viewparameter", new DBColumnInfo("masked",
       Character.class, 1, null, true));
     dbAccessor.addColumn("users", new DBColumnInfo("active",

+ 14 - 0
ambari-server/src/main/java/org/apache/ambari/server/view/configuration/ViewConfig.java

@@ -67,6 +67,11 @@ public class ViewConfig {
    */
   private String icon64;
 
+  /**
+   * Indicates whether or not this is a system view.
+   */
+  private boolean system;
+
   /**
    * The main view class name.
    */
@@ -173,6 +178,15 @@ public class ViewConfig {
     return icon64;
   }
 
+  /**
+   * Determine whether or not this is a system view.
+   *
+   * @return true if this is a system view
+   */
+  public boolean isSystem() {
+    return system;
+  }
+
   /**
    * Get the view class name.
    *

+ 1 - 1
ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql

@@ -65,7 +65,7 @@ CREATE TABLE hostgroup (blueprint_name VARCHAR(255) NOT NULL, name VARCHAR(255)
 CREATE TABLE hostgroup_component (blueprint_name VARCHAR(255) NOT NULL, hostgroup_name VARCHAR(255) NOT NULL, name VARCHAR(255) NOT NULL, PRIMARY KEY(blueprint_name, hostgroup_name, name));
 CREATE TABLE blueprint_configuration (blueprint_name VARCHAR(255) NOT NULL, type_name VARCHAR(255) NOT NULL, config_data VARCHAR(32000) NOT NULL, config_attributes VARCHAR(32000), PRIMARY KEY(blueprint_name, type_name));
 CREATE TABLE hostgroup_configuration (blueprint_name VARCHAR(255) NOT NULL, hostgroup_name VARCHAR(255) NOT NULL, type_name VARCHAR(255) NOT NULL, config_data TEXT NOT NULL, config_attributes TEXT, PRIMARY KEY(blueprint_name, hostgroup_name, type_name));
-CREATE TABLE viewmain (view_name VARCHAR(255) NOT NULL, label VARCHAR(255), description VARCHAR(255), version VARCHAR(255), resource_type_id INTEGER NOT NULL, icon VARCHAR(255), icon64 VARCHAR(255), archive VARCHAR(255), mask VARCHAR(255), PRIMARY KEY(view_name));
+CREATE TABLE viewmain (view_name VARCHAR(255) NOT NULL, label VARCHAR(255), description VARCHAR(255), version VARCHAR(255), resource_type_id INTEGER NOT NULL, icon VARCHAR(255), icon64 VARCHAR(255), archive VARCHAR(255), mask VARCHAR(255), system_view TINYINT(1) NOT NULL DEFAULT 0, PRIMARY KEY(view_name));
 CREATE TABLE viewinstancedata (view_instance_id BIGINT, view_name VARCHAR(255) NOT NULL, view_instance_name VARCHAR(255) NOT NULL, name VARCHAR(255) NOT NULL, user_name VARCHAR(255) NOT NULL, value VARCHAR(2000) NOT NULL, PRIMARY KEY(VIEW_INSTANCE_ID, NAME, USER_NAME));
 CREATE TABLE viewinstance (view_instance_id BIGINT, resource_id BIGINT NOT NULL, view_name VARCHAR(255) NOT NULL, name VARCHAR(255) NOT NULL, label VARCHAR(255), description VARCHAR(255), visible CHAR(1), icon VARCHAR(255), icon64 VARCHAR(255), xml_driven CHAR(1), PRIMARY KEY(view_instance_id));
 CREATE TABLE viewinstanceproperty (view_name VARCHAR(255) NOT NULL, view_instance_name VARCHAR(255) NOT NULL, name VARCHAR(255) NOT NULL, value VARCHAR(2000) NOT NULL, PRIMARY KEY(view_name, view_instance_name, name));

+ 1 - 1
ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql

@@ -56,7 +56,7 @@ CREATE TABLE hostgroup (blueprint_name VARCHAR2(255) NOT NULL, name VARCHAR2(255
 CREATE TABLE hostgroup_component (blueprint_name VARCHAR2(255) NOT NULL, hostgroup_name VARCHAR2(255) NOT NULL, name VARCHAR2(255) NOT NULL, PRIMARY KEY(blueprint_name, hostgroup_name, name));
 CREATE TABLE blueprint_configuration (blueprint_name VARCHAR2(255) NOT NULL, type_name VARCHAR2(255) NOT NULL, config_data CLOB NOT NULL, config_attributes CLOB, PRIMARY KEY(blueprint_name, type_name));
 CREATE TABLE hostgroup_configuration (blueprint_name VARCHAR2(255) NOT NULL, hostgroup_name VARCHAR2(255) NOT NULL, type_name VARCHAR2(255) NOT NULL, config_data CLOB NOT NULL, config_attributes CLOB, PRIMARY KEY(blueprint_name, hostgroup_name, type_name));
-CREATE TABLE viewmain (view_name VARCHAR(255) NOT NULL, label VARCHAR(255), description VARCHAR(255), version VARCHAR(255), resource_type_id NUMBER(10) NOT NULL, icon VARCHAR(255), icon64 VARCHAR(255), archive VARCHAR(255), mask VARCHAR(255), PRIMARY KEY(view_name));
+CREATE TABLE viewmain (view_name VARCHAR(255) NOT NULL, label VARCHAR(255), description VARCHAR(255), version VARCHAR(255), resource_type_id NUMBER(10) NOT NULL, icon VARCHAR(255), icon64 VARCHAR(255), archive VARCHAR(255), mask VARCHAR(255), system_view NUMBER(1) DEFAULT 0 NOT NULL, PRIMARY KEY(view_name));
 CREATE TABLE viewinstancedata (view_instance_id NUMBER(19), view_name VARCHAR(255) NOT NULL, view_instance_name VARCHAR(255) NOT NULL, name VARCHAR(255) NOT NULL, user_name VARCHAR(255) NOT NULL, value VARCHAR(2000) NOT NULL, PRIMARY KEY(view_instance_id, name, user_name));
 CREATE TABLE viewinstance (view_instance_id NUMBER(19), resource_id NUMBER(19) NOT NULL, view_name VARCHAR(255) NOT NULL, name VARCHAR(255) NOT NULL, label VARCHAR(255), description VARCHAR(255), visible CHAR(1), icon VARCHAR(255), icon64 VARCHAR(255), xml_driven CHAR(1), PRIMARY KEY(view_instance_id));
 CREATE TABLE viewinstanceproperty (view_name VARCHAR(255) NOT NULL, view_instance_name VARCHAR(255) NOT NULL, name VARCHAR(255) NOT NULL, value VARCHAR(2000) NOT NULL, PRIMARY KEY(view_name, view_instance_name, name));

+ 1 - 1
ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql

@@ -91,7 +91,7 @@ CREATE TABLE hostgroup_component (blueprint_name VARCHAR(255) NOT NULL, hostgrou
 CREATE TABLE blueprint_configuration (blueprint_name varchar(255) NOT NULL, type_name varchar(255) NOT NULL, config_data varchar(32000) NOT NULL , config_attributes varchar(32000), PRIMARY KEY(blueprint_name, type_name));
 CREATE TABLE hostgroup_configuration (blueprint_name VARCHAR(255) NOT NULL, hostgroup_name VARCHAR(255) NOT NULL, type_name VARCHAR(255) NOT NULL, config_data TEXT NOT NULL, config_attributes varchar(32000), PRIMARY KEY(blueprint_name, hostgroup_name, type_name));
 
-CREATE TABLE viewmain (view_name VARCHAR(255) NOT NULL, label VARCHAR(255), description VARCHAR(255), version VARCHAR(255), resource_type_id INTEGER NOT NULL, icon VARCHAR(255), icon64 VARCHAR(255), archive VARCHAR(255), mask VARCHAR(255), PRIMARY KEY(view_name));
+CREATE TABLE viewmain (view_name VARCHAR(255) NOT NULL, label VARCHAR(255), description VARCHAR(255), version VARCHAR(255), resource_type_id INTEGER NOT NULL, icon VARCHAR(255), icon64 VARCHAR(255), archive VARCHAR(255), mask VARCHAR(255), system_view SMALLINT NOT NULL DEFAULT 0, PRIMARY KEY(view_name));
 CREATE TABLE viewinstancedata (view_instance_id BIGINT, view_name VARCHAR(255) NOT NULL, view_instance_name VARCHAR(255) NOT NULL, name VARCHAR(255) NOT NULL, user_name VARCHAR(255) NOT NULL, value VARCHAR(2000) NOT NULL, PRIMARY KEY(view_instance_id, name, user_name));
 CREATE TABLE viewinstance (view_instance_id BIGINT, resource_id BIGINT NOT NULL, view_name VARCHAR(255) NOT NULL, name VARCHAR(255) NOT NULL, label VARCHAR(255), description VARCHAR(255), visible CHAR(1), icon VARCHAR(255), icon64 VARCHAR(255), xml_driven CHAR(1), PRIMARY KEY(view_instance_id));
 CREATE TABLE viewinstanceproperty (view_name VARCHAR(255) NOT NULL, view_instance_name VARCHAR(255) NOT NULL, name VARCHAR(255) NOT NULL, value VARCHAR(2000) NOT NULL, PRIMARY KEY(view_name, view_instance_name, name));

+ 1 - 1
ambari-server/src/main/resources/Ambari-DDL-Postgres-EMBEDDED-CREATE.sql

@@ -141,7 +141,7 @@ GRANT ALL PRIVILEGES ON TABLE ambari.hostgroup_component TO :username;
 GRANT ALL PRIVILEGES ON TABLE ambari.blueprint_configuration TO :username;
 GRANT ALL PRIVILEGES ON TABLE ambari.hostgroup_configuration TO :username;
 
-CREATE TABLE ambari.viewmain (view_name VARCHAR(255) NOT NULL, label VARCHAR(255), description VARCHAR(255), version VARCHAR(255), resource_type_id INTEGER NOT NULL, icon VARCHAR(255), icon64 VARCHAR(255), archive VARCHAR(255), mask VARCHAR(255), PRIMARY KEY(view_name));
+CREATE TABLE ambari.viewmain (view_name VARCHAR(255) NOT NULL, label VARCHAR(255), description VARCHAR(255), version VARCHAR(255), resource_type_id INTEGER NOT NULL, icon VARCHAR(255), icon64 VARCHAR(255), archive VARCHAR(255), mask VARCHAR(255), system_view SMALLINT NOT NULL DEFAULT 0, PRIMARY KEY(view_name));
 CREATE TABLE ambari.viewinstancedata (view_instance_id BIGINT, view_name VARCHAR(255) NOT NULL, view_instance_name VARCHAR(255) NOT NULL, name VARCHAR(255) NOT NULL, user_name VARCHAR(255) NOT NULL, value VARCHAR(2000) NOT NULL, PRIMARY KEY(view_instance_id, name, user_name));
 CREATE TABLE ambari.viewinstance (view_instance_id BIGINT, resource_id BIGINT NOT NULL, view_name VARCHAR(255) NOT NULL, name VARCHAR(255) NOT NULL, label VARCHAR(255), description VARCHAR(255), visible CHAR(1), icon VARCHAR(255), icon64 VARCHAR(255), xml_driven CHAR(1), PRIMARY KEY(view_instance_id));
 CREATE TABLE ambari.viewinstanceproperty (view_name VARCHAR(255) NOT NULL, view_instance_name VARCHAR(255) NOT NULL, name VARCHAR(255) NOT NULL, value VARCHAR(2000) NOT NULL, PRIMARY KEY(view_name, view_instance_name, name));

+ 1 - 0
ambari-server/src/test/java/org/apache/ambari/server/controller/internal/AmbariPrivilegeResourceProviderTest.java

@@ -203,6 +203,7 @@ public class AmbariPrivilegeResourceProviderTest {
     expect(viewInstanceEntity.getViewEntity()).andReturn(viewEntity).anyTimes();
     expect(viewEntity.getCommonName()).andReturn("view").anyTimes();
     expect(viewEntity.getVersion()).andReturn("1.0.1").anyTimes();
+    expect(viewEntity.isLoaded()).andReturn(true).anyTimes();
     expect(viewInstanceEntity.getName()).andReturn("inst1").anyTimes();
     expect(viewInstanceEntity.getResource()).andReturn(viewResourceEntity).anyTimes();
     expect(viewUserEntity.getPrincipal()).andReturn(viewPrincipalEntity).anyTimes();

+ 11 - 0
ambari-server/src/test/java/org/apache/ambari/server/orm/entities/ViewEntityTest.java

@@ -283,4 +283,15 @@ public class ViewEntityTest {
     viewDefinition.setStatus(ViewDefinition.ViewStatus.ERROR);
     Assert.assertFalse(viewDefinition.isLoaded());
   }
+
+  @Test
+  public void testSetIsSystem() throws Exception {
+    ViewEntity viewDefinition = getViewEntity();
+
+    viewDefinition.setSystem(false);
+    Assert.assertFalse(viewDefinition.isSystem());
+
+    viewDefinition.setSystem(true);
+    Assert.assertTrue(viewDefinition.isSystem());
+  }
 }

+ 16 - 4
ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog170Test.java

@@ -133,6 +133,7 @@ public class UpgradeCatalog170Test {
 
     Capture<DBAccessor.DBColumnInfo> clusterConfigAttributesColumnCapture = new Capture<DBAccessor.DBColumnInfo>();
     Capture<DBAccessor.DBColumnInfo> maskColumnCapture = new Capture<DBAccessor.DBColumnInfo>();
+    Capture<DBAccessor.DBColumnInfo> systemColumnCapture = new Capture<DBAccessor.DBColumnInfo>();
     Capture<DBAccessor.DBColumnInfo> maskedColumnCapture = new Capture<DBAccessor.DBColumnInfo>();
     Capture<DBAccessor.DBColumnInfo> stageCommandParamsColumnCapture = new Capture<DBAccessor.DBColumnInfo>();
     Capture<DBAccessor.DBColumnInfo> stageHostParamsColumnCapture = new Capture<DBAccessor.DBColumnInfo>();
@@ -147,7 +148,7 @@ public class UpgradeCatalog170Test {
     Capture<List<DBAccessor.DBColumnInfo>> serviceConfigCapture = new Capture<List<DBAccessor.DBColumnInfo>>();
     Capture<List<DBAccessor.DBColumnInfo>> serviceConfigMappingCapture = new Capture<List<DBAccessor.DBColumnInfo>>();
 
-    setViewExpectations(dbAccessor, maskColumnCapture);
+    setViewExpectations(dbAccessor, maskColumnCapture, systemColumnCapture);
     setViewParameterExpectations(dbAccessor, maskedColumnCapture);
     setClusterConfigExpectations(dbAccessor, clusterConfigAttributesColumnCapture);
     setStageExpectations(dbAccessor, stageCommandParamsColumnCapture, stageHostParamsColumnCapture);
@@ -201,7 +202,7 @@ public class UpgradeCatalog170Test {
     verify(dbAccessor, configuration, resultSet, connection, stmt);
 
     assertClusterConfigColumns(clusterConfigAttributesColumnCapture);
-    assertViewColumns(maskColumnCapture);
+    assertViewColumns(maskColumnCapture, systemColumnCapture);
     assertViewParameterColumns(maskedColumnCapture);
     assertStageColumns(stageCommandParamsColumnCapture, stageHostParamsColumnCapture);
 
@@ -456,10 +457,12 @@ public class UpgradeCatalog170Test {
   }
 
   private void setViewExpectations(DBAccessor dbAccessor,
-                                   Capture<DBAccessor.DBColumnInfo> maskColumnCapture)
+                                   Capture<DBAccessor.DBColumnInfo> maskColumnCapture,
+                                   Capture<DBAccessor.DBColumnInfo> systemColumnCapture)
     throws SQLException {
 
     dbAccessor.addColumn(eq("viewmain"), capture(maskColumnCapture));
+    dbAccessor.addColumn(eq("viewmain"), capture(systemColumnCapture));
   }
 
   private void setViewParameterExpectations(DBAccessor dbAccessor,
@@ -470,13 +473,22 @@ public class UpgradeCatalog170Test {
   }
 
   private void assertViewColumns(
-    Capture<DBAccessor.DBColumnInfo> maskColumnCapture) {
+    Capture<DBAccessor.DBColumnInfo> maskColumnCapture,
+    Capture<DBAccessor.DBColumnInfo> systemColumnCapture) {
+
     DBAccessor.DBColumnInfo column = maskColumnCapture.getValue();
     assertEquals("mask", column.getName());
     assertEquals(255, (int) column.getLength());
     assertEquals(String.class, column.getType());
     assertNull(column.getDefaultValue());
     assertTrue(column.isNullable());
+
+    column = systemColumnCapture.getValue();
+    assertEquals("system_view", column.getName());
+    assertEquals(1, (int) column.getLength());
+    assertEquals(Character.class, column.getType());
+    assertNull(column.getDefaultValue());
+    assertTrue(column.isNullable());
   }
 
   private void assertViewParameterColumns(

+ 23 - 0
ambari-server/src/test/java/org/apache/ambari/server/view/configuration/ViewConfigTest.java

@@ -117,6 +117,20 @@ public class ViewConfigTest {
       "    <view-class>ViewImpl</view-class>\n" +
       "</view>";
 
+  private static String system_xml = "<view>\n" +
+      "    <name>MY_VIEW</name>\n" +
+      "    <label>My View!</label>\n" +
+      "    <version>1.0.0</version>\n" +
+      "    <system>true</system>\n" +
+      "</view>";
+
+  private static String non_system_xml = "<view>\n" +
+      "    <name>MY_VIEW</name>\n" +
+      "    <label>My View!</label>\n" +
+      "    <version>1.0.0</version>\n" +
+      "    <system>false</system>\n" +
+      "</view>";
+
   @Test
   public void testGetName() throws Exception {
     ViewConfig config = getConfig();
@@ -210,6 +224,15 @@ public class ViewConfigTest {
     Assert.assertEquals(0, instances.size());
   }
 
+  @Test
+  public void testIsSystem() throws Exception {
+    ViewConfig config = getConfig(system_xml);
+    Assert.assertTrue(config.isSystem());
+
+    config = getConfig(non_system_xml);
+    Assert.assertFalse(config.isSystem());
+  }
+
   public static  ViewConfig getConfig() throws JAXBException {
       return getConfig(xml);
   }