AMBARI-21806 - Repository Entities Which Can't Be Removed Should Be Hide-able 
(jonathanhurley)


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

Branch: refs/heads/feature-branch-AMBARI-21307
Commit: 8b133e499ebf9b1596ac835a1250ff8c4e904b0e
Parents: f7d10f4
Author: Jonathan Hurley <jhur...@hortonworks.com>
Authored: Thu Aug 24 13:03:52 2017 -0400
Committer: Jonathan Hurley <jhur...@hortonworks.com>
Committed: Fri Aug 25 08:55:47 2017 -0400

----------------------------------------------------------------------
 .../RepositoryVersionResourceProvider.java      | 12 ++++++---
 .../orm/entities/RepositoryVersionEntity.java   | 27 +++++++++++++++++++-
 .../server/upgrade/UpgradeCatalog260.java       | 15 ++++++++++-
 .../main/resources/Ambari-DDL-Derby-CREATE.sql  |  1 +
 .../main/resources/Ambari-DDL-MySQL-CREATE.sql  |  1 +
 .../main/resources/Ambari-DDL-Oracle-CREATE.sql |  1 +
 .../resources/Ambari-DDL-Postgres-CREATE.sql    |  1 +
 .../resources/Ambari-DDL-SQLAnywhere-CREATE.sql |  1 +
 .../resources/Ambari-DDL-SQLServer-CREATE.sql   |  1 +
 .../server/upgrade/UpgradeCatalog260Test.java   | 24 +++++++++++++++--
 10 files changed, 77 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/8b133e49/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RepositoryVersionResourceProvider.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RepositoryVersionResourceProvider.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RepositoryVersionResourceProvider.java
index 60ec014..44ef9f7 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RepositoryVersionResourceProvider.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RepositoryVersionResourceProvider.java
@@ -86,6 +86,7 @@ public class RepositoryVersionResourceProvider extends 
AbstractAuthorizedResourc
   public static final String REPOSITORY_VERSION_STACK_VERSION_PROPERTY_ID      
= PropertyHelper.getPropertyId("RepositoryVersions", "stack_version");
   public static final String REPOSITORY_VERSION_REPOSITORY_VERSION_PROPERTY_ID 
= PropertyHelper.getPropertyId("RepositoryVersions", "repository_version");
   public static final String REPOSITORY_VERSION_DISPLAY_NAME_PROPERTY_ID       
= PropertyHelper.getPropertyId("RepositoryVersions", "display_name");
+  public static final String REPOSITORY_VERSION_HIDDEN_PROPERTY_ID             
= PropertyHelper.getPropertyId("RepositoryVersions", "hidden");
   public static final String SUBRESOURCE_OPERATING_SYSTEMS_PROPERTY_ID         
= new OperatingSystemResourceDefinition().getPluralName();
   public static final String SUBRESOURCE_REPOSITORIES_PROPERTY_ID              
= new RepositoryResourceDefinition().getPluralName();
 
@@ -108,6 +109,7 @@ public class RepositoryVersionResourceProvider extends 
AbstractAuthorizedResourc
       REPOSITORY_VERSION_ID_PROPERTY_ID,
       REPOSITORY_VERSION_REPOSITORY_VERSION_PROPERTY_ID,
       REPOSITORY_VERSION_DISPLAY_NAME_PROPERTY_ID,
+      REPOSITORY_VERSION_HIDDEN_PROPERTY_ID,
       REPOSITORY_VERSION_STACK_NAME_PROPERTY_ID,
       REPOSITORY_VERSION_STACK_VERSION_PROPERTY_ID,
       SUBRESOURCE_OPERATING_SYSTEMS_PROPERTY_ID,
@@ -252,6 +254,7 @@ public class RepositoryVersionResourceProvider extends 
AbstractAuthorizedResourc
       setResourceProperty(resource, REPOSITORY_VERSION_STACK_NAME_PROPERTY_ID, 
entity.getStackName(), requestedIds);
       setResourceProperty(resource, 
REPOSITORY_VERSION_STACK_VERSION_PROPERTY_ID, entity.getStackVersion(), 
requestedIds);
       setResourceProperty(resource, 
REPOSITORY_VERSION_DISPLAY_NAME_PROPERTY_ID, entity.getDisplayName(), 
requestedIds);
+      setResourceProperty(resource, REPOSITORY_VERSION_HIDDEN_PROPERTY_ID, 
entity.isHidden(), requestedIds);
       setResourceProperty(resource, 
REPOSITORY_VERSION_REPOSITORY_VERSION_PROPERTY_ID, entity.getVersion(), 
requestedIds);
       setResourceProperty(resource, REPOSITORY_VERSION_TYPE_PROPERTY_ID, 
entity.getType(), requestedIds);
 
@@ -324,8 +327,6 @@ public class RepositoryVersionResourceProvider extends 
AbstractAuthorizedResourc
             throw new ObjectNotFoundException("There is no repository version 
with id " + id);
           }
 
-          List<OperatingSystemEntity> operatingSystemEntities = null;
-
           if 
(StringUtils.isNotBlank(ObjectUtils.toString(propertyMap.get(SUBRESOURCE_OPERATING_SYSTEMS_PROPERTY_ID))))
 {
             if (!AuthorizationHelper.isAuthorized(ResourceType.AMBARI, null, 
RoleAuthorization.AMBARI_EDIT_STACK_REPOS)) {
               throw new AuthorizationException("The authenticated user does 
not have authorization to modify stack repositories");
@@ -334,7 +335,7 @@ public class RepositoryVersionResourceProvider extends 
AbstractAuthorizedResourc
             final Object operatingSystems = 
propertyMap.get(SUBRESOURCE_OPERATING_SYSTEMS_PROPERTY_ID);
             final String operatingSystemsJson = gson.toJson(operatingSystems);
             try {
-              operatingSystemEntities = 
repositoryVersionHelper.parseOperatingSystems(operatingSystemsJson);
+              
repositoryVersionHelper.parseOperatingSystems(operatingSystemsJson);
             } catch (Exception ex) {
               throw new AmbariException("Json structure for operating systems 
is incorrect", ex);
             }
@@ -345,6 +346,11 @@ public class RepositoryVersionResourceProvider extends 
AbstractAuthorizedResourc
             
entity.setDisplayName(propertyMap.get(REPOSITORY_VERSION_DISPLAY_NAME_PROPERTY_ID).toString());
           }
 
+          
if(StringUtils.isNotBlank(ObjectUtils.toString(propertyMap.get(REPOSITORY_VERSION_HIDDEN_PROPERTY_ID)))){
+            boolean isHidden = 
Boolean.valueOf(ObjectUtils.toString(propertyMap.get(REPOSITORY_VERSION_HIDDEN_PROPERTY_ID)));
+            entity.setHidden(isHidden);
+          }
+
           validateRepositoryVersion(repositoryVersionDAO, ambariMetaInfo, 
entity);
 
           repositoryVersionDAO.merge(entity);

http://git-wip-us.apache.org/repos/asf/ambari/blob/8b133e49/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/RepositoryVersionEntity.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/RepositoryVersionEntity.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/RepositoryVersionEntity.java
index c7c6ff4..bf9e678 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/RepositoryVersionEntity.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/RepositoryVersionEntity.java
@@ -144,6 +144,9 @@ public class RepositoryVersionEntity {
   @Column(name="version_xsd", insertable = true, updatable = true)
   private String versionXsd;
 
+  @Column(name = "hidden", nullable = false, insertable = true, updatable = 
true)
+  private short isHidden = 0;
+
   @ManyToOne
   @JoinColumn(name = "parent_id")
   private RepositoryVersionEntity parent;
@@ -151,6 +154,7 @@ public class RepositoryVersionEntity {
   @OneToMany(mappedBy = "parent")
   private List<RepositoryVersionEntity> children;
 
+
   // ----- RepositoryVersionEntity 
-------------------------------------------------------
 
   public RepositoryVersionEntity() {
@@ -385,7 +389,7 @@ public class RepositoryVersionEntity {
   @Override
   public String toString() {
     return Objects.toStringHelper(this).add("id", id).add("stack", 
stack).add("version",
-        version).add("type", type).toString();
+        version).add("type", type).add("hidden", isHidden == 1).toString();
   }
 
   /**
@@ -434,4 +438,25 @@ public class RepositoryVersionEntity {
     return null == parent ? null : parent.getId();
   }
 
+  /**
+   * Gets whether this repository is hidden.
+   *
+   * @return
+   */
+  public boolean isHidden() {
+    return isHidden != 0;
+  }
+
+  /**
+   * Sets whether this repository is hidden. A repository can be hidden for
+   * several reasons, including if it has been removed (but needs to be kept
+   * around for foreign key relationships) or if it just is not longer desired
+   * to see it.
+   *
+   * @param isHidden
+   */
+  public void setHidden(boolean isHidden) {
+    this.isHidden = (short) (isHidden ? 1 : 0);
+  }
+
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/8b133e49/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog260.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog260.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog260.java
index 2d094e5..9e1b55b 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog260.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog260.java
@@ -56,6 +56,7 @@ public class UpgradeCatalog260 extends AbstractUpgradeCatalog 
{
 
   public static final String REPO_VERSION_TABLE = "repo_version";
   public static final String REPO_VERSION_ID_COLUMN = "repo_version_id";
+  public static final String REPO_VERSION_HIDDEN_COLUMN = "hidden";
 
   public static final String HOST_COMPONENT_DESIRED_STATE_TABLE = 
"hostcomponentdesiredstate";
   public static final String FK_HCDS_DESIRED_STACK_ID = 
"FK_hcds_desired_stack_id";
@@ -147,10 +148,11 @@ public class UpgradeCatalog260 extends 
AbstractUpgradeCatalog {
     updateUpgradeTable();
     createUpgradeHistoryTable();
     dropStaleTables();
+    updateRepositoryVersionTable();
   }
 
   private void createUpgradeHistoryTable() throws SQLException {
-    List<DBAccessor.DBColumnInfo> columns = new 
ArrayList<DBAccessor.DBColumnInfo>();
+    List<DBAccessor.DBColumnInfo> columns = new ArrayList<>();
 
     columns.add(new DBAccessor.DBColumnInfo(ID_COLUMN, Long.class, null, null, 
false));
     columns.add(new DBAccessor.DBColumnInfo(UPGRADE_ID_COLUMN, Long.class, 
null, null, false));
@@ -303,6 +305,17 @@ public class UpgradeCatalog260 extends 
AbstractUpgradeCatalog {
   }
 
   /**
+   * Updates {@value #REPO_VERSION_TABLE} table. Adds
+   * {@value #REPO_VERSION_HIDDEN_COLUMN} column.
+   *
+   * @throws java.sql.SQLException
+   */
+  private void updateRepositoryVersionTable() throws SQLException {
+    dbAccessor.addColumn(REPO_VERSION_TABLE,
+        new DBAccessor.DBColumnInfo(REPO_VERSION_HIDDEN_COLUMN, Short.class, 
null, 0, false));
+  }
+
+  /**
    * {@inheritDoc}
    */
   @Override

http://git-wip-us.apache.org/repos/asf/ambari/blob/8b133e49/ambari-server/src/main/resources/Ambari-DDL-Derby-CREATE.sql
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/Ambari-DDL-Derby-CREATE.sql 
b/ambari-server/src/main/resources/Ambari-DDL-Derby-CREATE.sql
index 5fcb03e..8a55336 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-Derby-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-Derby-CREATE.sql
@@ -154,6 +154,7 @@ CREATE TABLE repo_version (
   display_name VARCHAR(128) NOT NULL,
   repositories VARCHAR(3000) NOT NULL,
   repo_type VARCHAR(255) DEFAULT 'STANDARD' NOT NULL,
+  hidden SMALLINT NOT NULL DEFAULT 0,
   version_url VARCHAR(1024),
   version_xml CLOB,
   version_xsd VARCHAR(512),

http://git-wip-us.apache.org/repos/asf/ambari/blob/8b133e49/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql 
b/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql
index 7c0e8d3..a0916bf 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql
@@ -174,6 +174,7 @@ CREATE TABLE repo_version (
   display_name VARCHAR(128) NOT NULL,
   repositories MEDIUMTEXT NOT NULL,
   repo_type VARCHAR(255) DEFAULT 'STANDARD' NOT NULL,
+  hidden SMALLINT NOT NULL DEFAULT 0,
   version_url VARCHAR(1024),
   version_xml MEDIUMTEXT,
   version_xsd VARCHAR(512),

http://git-wip-us.apache.org/repos/asf/ambari/blob/8b133e49/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql 
b/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql
index f46e184..5204ebb 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql
@@ -155,6 +155,7 @@ CREATE TABLE repo_version (
   display_name VARCHAR2(128) NOT NULL,
   repositories CLOB NOT NULL,
   repo_type VARCHAR2(255) DEFAULT 'STANDARD' NOT NULL,
+  hidden NUMBER(1) DEFAULT 0 NOT NULL,
   version_url VARCHAR(1024),
   version_xml CLOB,
   version_xsd VARCHAR(512),

http://git-wip-us.apache.org/repos/asf/ambari/blob/8b133e49/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql 
b/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql
index a6f5cb7..dee2f87 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql
@@ -154,6 +154,7 @@ CREATE TABLE repo_version (
   display_name VARCHAR(128) NOT NULL,
   repositories TEXT NOT NULL,
   repo_type VARCHAR(255) DEFAULT 'STANDARD' NOT NULL,
+  hidden SMALLINT NOT NULL DEFAULT 0,
   version_url VARCHAR(1024),
   version_xml TEXT,
   version_xsd VARCHAR(512),

http://git-wip-us.apache.org/repos/asf/ambari/blob/8b133e49/ambari-server/src/main/resources/Ambari-DDL-SQLAnywhere-CREATE.sql
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/Ambari-DDL-SQLAnywhere-CREATE.sql 
b/ambari-server/src/main/resources/Ambari-DDL-SQLAnywhere-CREATE.sql
index ef36507..654bac8 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-SQLAnywhere-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-SQLAnywhere-CREATE.sql
@@ -153,6 +153,7 @@ CREATE TABLE repo_version (
   display_name VARCHAR(128) NOT NULL,
   repositories TEXT NOT NULL,
   repo_type VARCHAR(255) DEFAULT 'STANDARD' NOT NULL,
+  hidden SMALLINT NOT NULL DEFAULT 0,
   version_url VARCHAR(1024),
   version_xml TEXT,
   version_xsd VARCHAR(512),

http://git-wip-us.apache.org/repos/asf/ambari/blob/8b133e49/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATE.sql
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATE.sql 
b/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATE.sql
index 01ab8ee..238dc1c 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATE.sql
@@ -167,6 +167,7 @@ CREATE TABLE repo_version (
   display_name VARCHAR(128) NOT NULL,
   repositories VARCHAR(MAX) NOT NULL,
   repo_type VARCHAR(255) DEFAULT 'STANDARD' NOT NULL,
+  hidden SMALLINT NOT NULL DEFAULT 0,
   version_url VARCHAR(1024),
   version_xml VARCHAR(MAX),
   version_xsd VARCHAR(512),

http://git-wip-us.apache.org/repos/asf/ambari/blob/8b133e49/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog260Test.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog260Test.java
 
b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog260Test.java
index df15657..2e38686 100644
--- 
a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog260Test.java
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog260Test.java
@@ -138,7 +138,7 @@ public class UpgradeCatalog260Test {
   @Test
   public void testExecuteDDLUpdates() throws Exception {
 
-    List<Integer> current = new ArrayList<Integer>();
+    List<Integer> current = new ArrayList<>();
     current.add(1);
 
     expect(dbAccessor.getConnection()).andReturn(connection).anyTimes();
@@ -179,6 +179,9 @@ public class UpgradeCatalog260Test {
 
     expectDropStaleTables();
 
+    Capture<DBColumnInfo> repoVersionHiddenColumnCapture = newCapture();
+    expectUpdateRepositoryVersionTableTable(repoVersionHiddenColumnCapture);
+
     replay(dbAccessor, configuration, connection, statement, resultSet);
 
     Module module = new Module() {
@@ -203,7 +206,7 @@ public class UpgradeCatalog260Test {
     verifyAddSelectedCollumsToClusterconfigTable(selectedColumnInfo, 
selectedmappingColumnInfo, selectedTimestampColumnInfo, 
createTimestampColumnInfo);
     verifyUpdateUpgradeTable(rvid, orchestration);
     verifyCreateUpgradeHistoryTable(columns);
-
+    verifyUpdateRepositoryVersionTableTable(repoVersionHiddenColumnCapture);
   }
 
   public void expectDropStaleTables() throws SQLException {
@@ -507,5 +510,22 @@ public class UpgradeCatalog260Test {
 
   }
 
+  /**
+   * Sets expectations for DDL work on the
+   * {@link UpgradeCatalog260#REPO_VERSION_TABLE}.
+   *
+   * @param hiddenColumnCapture
+   * @throws SQLException
+   */
+  public void expectUpdateRepositoryVersionTableTable(Capture<DBColumnInfo> 
hiddenColumnCapture) throws SQLException {
+    dbAccessor.addColumn(eq(UpgradeCatalog260.REPO_VERSION_TABLE), 
capture(hiddenColumnCapture));
+    expectLastCall().once();
+  }
 
+  public void verifyUpdateRepositoryVersionTableTable(Capture<DBColumnInfo> 
hiddenColumnCapture) {
+    DBColumnInfo hiddenColumn = hiddenColumnCapture.getValue();
+    Assert.assertEquals(0, hiddenColumn.getDefaultValue());
+    Assert.assertEquals(UpgradeCatalog260.REPO_VERSION_HIDDEN_COLUMN, 
hiddenColumn.getName());
+    Assert.assertEquals(false, hiddenColumn.isNullable());
+  }
 }

Reply via email to