Repository: ambari Updated Branches: refs/heads/trunk 91b56006a -> 31b7da998
AMBARI-5953 - Views: instancedata should be ambari user scoped Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/31b7da99 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/31b7da99 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/31b7da99 Branch: refs/heads/trunk Commit: 31b7da99838cdac15c875c913ddc27466a0f897b Parents: 91b5600 Author: tbeerbower <[email protected]> Authored: Thu May 29 23:57:37 2014 -0400 Committer: tbeerbower <[email protected]> Committed: Fri May 30 05:53:46 2014 -0400 ---------------------------------------------------------------------- .../orm/entities/ViewInstanceDataEntity.java | 76 ++++++++++++++++- .../orm/entities/ViewInstanceDataEntityPK.java | 42 ++++++++- .../server/orm/entities/ViewInstanceEntity.java | 75 ++++++++++++++++- .../server/upgrade/UpgradeCatalog161.java | 6 ++ .../ambari/server/view/ViewContextImpl.java | 16 +--- .../main/resources/Ambari-DDL-MySQL-CREATE.sql | 2 +- .../main/resources/Ambari-DDL-Oracle-CREATE.sql | 2 +- .../resources/Ambari-DDL-Postgres-CREATE.sql | 2 +- .../Ambari-DDL-Postgres-EMBEDDED-CREATE.sql | 2 +- .../orm/entities/ViewInstanceEntityTest.java | 89 ++++++++++++++++++++ 10 files changed, 284 insertions(+), 28 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/31b7da99/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ViewInstanceDataEntity.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ViewInstanceDataEntity.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ViewInstanceDataEntity.java index 5bb003d..f6c8c97 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ViewInstanceDataEntity.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ViewInstanceDataEntity.java @@ -51,6 +51,13 @@ public class ViewInstanceDataEntity { private String name; /** + * The user. + */ + @Id + @Column(name = "user_name", nullable = false, insertable = true, updatable = false) + private String user; + + /** * The property value. */ @Column @@ -64,43 +71,110 @@ public class ViewInstanceDataEntity { }) private ViewInstanceEntity viewInstance; - + /** + * Get the view name. + * + * @return the view name + */ public String getViewName() { return viewName; } + /** + * Set the view name. + * + * @param viewName the view name + */ public void setViewName(String viewName) { this.viewName = viewName; } + /** + * Get the instance name. + * + * @return the instance name + */ public String getViewInstanceName() { return viewInstanceName; } + /** + * Set the instance name. + * + * @param viewInstanceName the instance name + */ public void setViewInstanceName(String viewInstanceName) { this.viewInstanceName = viewInstanceName; } + /** + * Get the data key. + * + * @return the data key + */ public String getName() { return name; } + /** + * Set the data key. + * + * @param name the data key + */ public void setName(String name) { this.name = name; } + /** + * Get the user. + * + * @return the user + */ + public String getUser() { + return user; + } + + /** + * Set the user. + * + * @param user the user + */ + public void setUser(String user) { + this.user = user; + } + + /** + * Get the data value. + * + * @return the data value + */ public String getValue() { return value; } + /** + * Set the data value. + * + * @param value the data value + */ public void setValue(String value) { this.value = value; } + /** + * Get the view instance. + * + * @return the view instance + */ public ViewInstanceEntity getViewInstanceEntity() { return viewInstance; } + /** + * Set the view instance + * + * @param viewInstance the view instance + */ public void setViewInstanceEntity(ViewInstanceEntity viewInstance) { this.viewInstance = viewInstance; } http://git-wip-us.apache.org/repos/asf/ambari/blob/31b7da99/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ViewInstanceDataEntityPK.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ViewInstanceDataEntityPK.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ViewInstanceDataEntityPK.java index fb7ac4e..ec8a448 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ViewInstanceDataEntityPK.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ViewInstanceDataEntityPK.java @@ -38,6 +38,10 @@ public class ViewInstanceDataEntityPK { @Column(name = "name", nullable = false, insertable = true, updatable = false, length = 100) private String name; + @Id + @Column(name = "user_name", nullable = false, insertable = true, updatable = false, length = 100) + private String user; + /** * Get the name of the associated view. * @@ -56,16 +60,26 @@ public class ViewInstanceDataEntityPK { this.viewName = viewName; } + /** + * Get the view instance name. + * + * @return the view instance name + */ public String getViewInstanceName() { return viewInstanceName; } + /** + * Set the view instance name. + * + * @param viewInstanceName the view instance name + */ public void setViewInstanceName(String viewInstanceName) { this.viewInstanceName = viewInstanceName; } /** - * Get the name of the host group. + * Get the name of the data entry. * * @return host group name */ @@ -74,7 +88,7 @@ public class ViewInstanceDataEntityPK { } /** - * Set the name of the host group. + * Set the name of the data entry. * * @param name host group name */ @@ -82,6 +96,24 @@ public class ViewInstanceDataEntityPK { this.name = name; } + /** + * Get the associated user. + * + * @return the user + */ + public String getUser() { + return user; + } + + /** + * Set the user. + * + * @param user the user + */ + public void setUser(String user) { + this.user = user; + } + @Override public boolean equals(Object o) { if (this == o) return true; @@ -91,11 +123,13 @@ public class ViewInstanceDataEntityPK { return this.viewName.equals(that.viewName) && this.viewInstanceName.equals(that.viewInstanceName) && - this.name.equals(that.name); + this.name.equals(that.name) && + this.user.equals(that.user); } @Override public int hashCode() { - return 31 * viewName.hashCode() + viewInstanceName.hashCode() + name.hashCode(); + return 31 * viewName.hashCode() + viewInstanceName.hashCode() + + name.hashCode() + user.hashCode(); } } http://git-wip-us.apache.org/repos/asf/ambari/blob/31b7da99/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ViewInstanceEntity.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ViewInstanceEntity.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ViewInstanceEntity.java index 70a60b9..0faf411 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ViewInstanceEntity.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ViewInstanceEntity.java @@ -23,7 +23,10 @@ import org.apache.ambari.server.view.configuration.InstanceConfig; import org.apache.ambari.view.ResourceProvider; import org.apache.ambari.view.ViewDefinition; import org.apache.ambari.view.ViewInstanceDefinition; -import org.apache.ambari.view.events.Listener; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContext; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.core.userdetails.UserDetails; import javax.persistence.CascadeType; import javax.persistence.Column; @@ -111,6 +114,12 @@ public class ViewInstanceEntity implements ViewInstanceDefinition { @Transient private final Map<String, Object> services = new HashMap<String, Object>(); + /** + * Helper class. + */ + @Transient + private UserNameProvider userNameProvider = new UserNameProvider(); + // ----- Constructors ------------------------------------------------------ @@ -171,8 +180,12 @@ public class ViewInstanceEntity implements ViewInstanceDefinition { public Map<String, String> getInstanceDataMap() { Map<String, String> applicationData = new HashMap<String, String>(); + String user = getCurrentUserName(); + for (ViewInstanceDataEntity viewInstanceDataEntity : data) { - applicationData.put(viewInstanceDataEntity.getName(), viewInstanceDataEntity.getValue()); + if (viewInstanceDataEntity.getUser().equals(user)) { + applicationData.put(viewInstanceDataEntity.getName(), viewInstanceDataEntity.getValue()); + } } return applicationData; } @@ -227,7 +240,7 @@ public class ViewInstanceEntity implements ViewInstanceDefinition { * @param value the property value */ public void putProperty(String key, String value) { - removeInstanceData(key); + removeProperty(key); ViewInstancePropertyEntity viewInstancePropertyEntity = new ViewInstancePropertyEntity(); viewInstancePropertyEntity.setViewName(viewName); viewInstancePropertyEntity.setViewInstanceName(name); @@ -322,6 +335,7 @@ public class ViewInstanceEntity implements ViewInstanceDefinition { viewInstanceDataEntity.setViewName(viewName); viewInstanceDataEntity.setViewInstanceName(name); viewInstanceDataEntity.setName(key); + viewInstanceDataEntity.setUser(getCurrentUserName()); viewInstanceDataEntity.setValue(value); viewInstanceDataEntity.setViewInstanceEntity(this); data.add(viewInstanceDataEntity); @@ -347,8 +361,11 @@ public class ViewInstanceEntity implements ViewInstanceDefinition { * @return the instance data entity associated with the given key */ public ViewInstanceDataEntity getInstanceData(String key) { + String user = getCurrentUserName(); + for (ViewInstanceDataEntity viewInstanceDataEntity : data) { - if (viewInstanceDataEntity.getName().equals(key)) { + if (viewInstanceDataEntity.getName().equals(key) && + viewInstanceDataEntity.getUser().equals(user)) { return viewInstanceDataEntity; } } @@ -456,4 +473,54 @@ public class ViewInstanceEntity implements ViewInstanceDefinition { public static String getContextPath(String viewName, String version, String viewInstanceName) { return VIEWS_CONTEXT_PATH_PREFIX + viewName + "/" + version + "/" + viewInstanceName; } + + /** + * Get the current user name. + * + * @return the current user name; empty String if user is not known + */ + public String getUsername() { + return userNameProvider.getUsername(); + } + + // ----- helper methods ---------------------------------------------------- + + // get the current user name + private String getCurrentUserName() { + String currentUserName = getUsername(); + + return currentUserName == null || currentUserName.length() == 0 ? + " " : currentUserName; + } + + /** + * Set the user name provider helper. + * + * @param userNameProvider the helper + */ + protected void setUserNameProvider(UserNameProvider userNameProvider) { + this.userNameProvider = userNameProvider; + } + + + // ----- inner class : UserNameProvider ---------------------------------- + + /** + * User name provider helper class. + */ + protected static class UserNameProvider { + public String getUsername() { + SecurityContext ctx = SecurityContextHolder.getContext(); + Authentication authentication = ctx == null ? null : ctx.getAuthentication(); + Object principal = authentication == null ? null : authentication.getPrincipal(); + + String username; + if (principal instanceof UserDetails) { + username = ((UserDetails)principal).getUsername(); + } else { + username = principal == null ? "" :principal.toString(); + } + return username; + } + } } http://git-wip-us.apache.org/repos/asf/ambari/blob/31b7da99/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog161.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog161.java b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog161.java index e9855b8..2155ce6 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog161.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog161.java @@ -27,6 +27,7 @@ import javax.persistence.TypedQuery; import org.apache.ambari.server.AmbariException; import org.apache.ambari.server.configuration.Configuration; +import org.apache.ambari.server.orm.DBAccessor; import org.apache.ambari.server.orm.DBAccessor.DBColumnInfo; import org.apache.ambari.server.orm.entities.ClusterEntity; import org.apache.ambari.server.state.State; @@ -73,6 +74,11 @@ public class UpgradeCatalog161 extends AbstractUpgradeCatalog { dbAccessor.createTable("requestoperationlevel", columns, "operation_level_id"); + //========================================================================= + // Add columns + dbAccessor.addColumn("viewinstancedata", + new DBAccessor.DBColumnInfo("user_name", String.class, 255, " ", false)); + // ======================================================================== // Add constraints dbAccessor.addFKConstraint("requestoperationlevel", "FK_req_op_level_req_id", http://git-wip-us.apache.org/repos/asf/ambari/blob/31b7da99/ambari-server/src/main/java/org/apache/ambari/server/view/ViewContextImpl.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/view/ViewContextImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/view/ViewContextImpl.java index f952d61..042e5c4 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/view/ViewContextImpl.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/view/ViewContextImpl.java @@ -35,10 +35,6 @@ import org.apache.ambari.view.ViewDefinition; import org.apache.ambari.view.ViewInstanceDefinition; import org.apache.ambari.view.events.Event; import org.apache.ambari.view.events.Listener; -import org.springframework.security.core.Authentication; -import org.springframework.security.core.context.SecurityContext; -import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.security.core.userdetails.UserDetails; import java.io.IOException; import java.io.InputStream; @@ -175,17 +171,7 @@ public class ViewContextImpl implements ViewContext, ViewController { @Override public String getUsername() { - SecurityContext ctx = SecurityContextHolder.getContext(); - Authentication authentication = ctx == null ? null : ctx.getAuthentication(); - Object principal = authentication == null ? null : authentication.getPrincipal(); - - String username; - if (principal instanceof UserDetails) { - username = ((UserDetails)principal).getUsername(); - } else { - username = principal == null ? "" :principal.toString(); - } - return username; + return viewInstanceEntity.getUsername(); } @Override http://git-wip-us.apache.org/repos/asf/ambari/blob/31b7da99/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 bfe1595..de5a8ed 100644 --- a/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql +++ b/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql @@ -63,7 +63,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 , 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, PRIMARY KEY(blueprint_name, hostgroup_name, type_name)); CREATE TABLE viewmain (view_name VARCHAR(255) NOT NULL, label VARCHAR(255), version VARCHAR(255), archive VARCHAR(255), PRIMARY KEY(view_name)); -CREATE TABLE viewinstancedata (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)); +CREATE TABLE viewinstancedata (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_name, view_instance_name, name, user_name)); CREATE TABLE viewinstance (view_name VARCHAR(255) NOT NULL, name VARCHAR(255) NOT NULL, PRIMARY KEY(view_name, name)); 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)); CREATE TABLE viewparameter (view_name VARCHAR(255) NOT NULL, name VARCHAR(255) NOT NULL, description VARCHAR(255), required CHAR(1), PRIMARY KEY(view_name, name)); http://git-wip-us.apache.org/repos/asf/ambari/blob/31b7da99/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 bcd9bbe..eec4a3a 100644 --- a/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql +++ b/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql @@ -53,7 +53,7 @@ CREATE TABLE hostgroup_component (blueprint_name VARCHAR2(255) NOT NULL, hostgro CREATE TABLE blueprint_configuration (blueprint_name VARCHAR2(255) NOT NULL, type_name VARCHAR2(255) NOT NULL, config_data CLOB NOT NULL , 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, PRIMARY KEY(blueprint_name, hostgroup_name, type_name)); CREATE TABLE viewmain (view_name VARCHAR(255) NOT NULL, label VARCHAR(255), version VARCHAR(255), archive VARCHAR(255), PRIMARY KEY(view_name)); -CREATE TABLE viewinstancedata (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)); +CREATE TABLE viewinstancedata (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_name, view_instance_name, name, user_name)); CREATE TABLE viewinstance (view_name VARCHAR(255) NOT NULL, name VARCHAR(255) NOT NULL, PRIMARY KEY(view_name, name)); 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)); CREATE TABLE viewparameter (view_name VARCHAR(255) NOT NULL, name VARCHAR(255) NOT NULL, description VARCHAR(255), required CHAR(1), PRIMARY KEY(view_name, name)); http://git-wip-us.apache.org/repos/asf/ambari/blob/31b7da99/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 9b0a1cf..330c1fb 100644 --- a/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql +++ b/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql @@ -86,7 +86,7 @@ CREATE TABLE blueprint_configuration (blueprint_name varchar(255) NOT NULL, type 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, PRIMARY KEY(blueprint_name, hostgroup_name, type_name)); CREATE TABLE viewmain (view_name VARCHAR(255) NOT NULL, label VARCHAR(255), version VARCHAR(255), archive VARCHAR(255), PRIMARY KEY(view_name)); -CREATE TABLE viewinstancedata (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)); +CREATE TABLE viewinstancedata (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_name, view_instance_name, name, user_name)); CREATE TABLE viewinstance (view_name VARCHAR(255) NOT NULL, name VARCHAR(255) NOT NULL, PRIMARY KEY(view_name, name)); 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)); CREATE TABLE viewparameter (view_name VARCHAR(255) NOT NULL, name VARCHAR(255) NOT NULL, description VARCHAR(255), required CHAR(1), PRIMARY KEY(view_name, name)); http://git-wip-us.apache.org/repos/asf/ambari/blob/31b7da99/ambari-server/src/main/resources/Ambari-DDL-Postgres-EMBEDDED-CREATE.sql ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/Ambari-DDL-Postgres-EMBEDDED-CREATE.sql b/ambari-server/src/main/resources/Ambari-DDL-Postgres-EMBEDDED-CREATE.sql index 13bbcae..2418332 100644 --- a/ambari-server/src/main/resources/Ambari-DDL-Postgres-EMBEDDED-CREATE.sql +++ b/ambari-server/src/main/resources/Ambari-DDL-Postgres-EMBEDDED-CREATE.sql @@ -133,7 +133,7 @@ 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), version VARCHAR(255), archive VARCHAR(255), PRIMARY KEY(view_name)); -CREATE TABLE ambari.viewinstancedata (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)); +CREATE TABLE ambari.viewinstancedata (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_name, view_instance_name, name, user_name)); CREATE TABLE ambari.viewinstance (view_name VARCHAR(255) NOT NULL, name VARCHAR(255) NOT NULL, PRIMARY KEY(view_name, name)); 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)); CREATE TABLE ambari.viewparameter (view_name VARCHAR(255) NOT NULL, name VARCHAR(255) NOT NULL, description VARCHAR(255), required CHAR(1), PRIMARY KEY(view_name, name)); http://git-wip-us.apache.org/repos/asf/ambari/blob/31b7da99/ambari-server/src/test/java/org/apache/ambari/server/orm/entities/ViewInstanceEntityTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/orm/entities/ViewInstanceEntityTest.java b/ambari-server/src/test/java/org/apache/ambari/server/orm/entities/ViewInstanceEntityTest.java index 32b7993..b8cb7f4 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/orm/entities/ViewInstanceEntityTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/orm/entities/ViewInstanceEntityTest.java @@ -113,9 +113,98 @@ public class ViewInstanceEntityTest { viewInstanceDefinition.getContextPath()); } + @Test + public void testInstanceData() throws Exception { + TestUserNameProvider userNameProvider = new TestUserNameProvider("user1"); + + ViewInstanceEntity viewInstanceDefinition = getViewInstanceEntity(userNameProvider); + + viewInstanceDefinition.putInstanceData("key1", "foo"); + + ViewInstanceDataEntity dataEntity = viewInstanceDefinition.getInstanceData("key1"); + + Assert.assertNotNull(dataEntity); + + Assert.assertEquals("foo", dataEntity.getValue()); + Assert.assertEquals("user1", dataEntity.getUser()); + + viewInstanceDefinition.putInstanceData("key2", "bar"); + viewInstanceDefinition.putInstanceData("key3", "baz"); + viewInstanceDefinition.putInstanceData("key4", "monkey"); + viewInstanceDefinition.putInstanceData("key5", "runner"); + + Map<String, String> dataMap = viewInstanceDefinition.getInstanceDataMap(); + + Assert.assertEquals(5, dataMap.size()); + + Assert.assertEquals("foo", dataMap.get("key1")); + Assert.assertEquals("bar", dataMap.get("key2")); + Assert.assertEquals("baz", dataMap.get("key3")); + Assert.assertEquals("monkey", dataMap.get("key4")); + Assert.assertEquals("runner", dataMap.get("key5")); + + viewInstanceDefinition.removeInstanceData("key3"); + dataMap = viewInstanceDefinition.getInstanceDataMap(); + Assert.assertEquals(4, dataMap.size()); + Assert.assertFalse(dataMap.containsKey("key3")); + + userNameProvider.setUser("user2"); + + dataMap = viewInstanceDefinition.getInstanceDataMap(); + Assert.assertTrue(dataMap.isEmpty()); + + viewInstanceDefinition.putInstanceData("key1", "aaa"); + viewInstanceDefinition.putInstanceData("key2", "bbb"); + viewInstanceDefinition.putInstanceData("key3", "ccc"); + + dataMap = viewInstanceDefinition.getInstanceDataMap(); + + Assert.assertEquals(3, dataMap.size()); + + Assert.assertEquals("aaa", dataMap.get("key1")); + Assert.assertEquals("bbb", dataMap.get("key2")); + Assert.assertEquals("ccc", dataMap.get("key3")); + + userNameProvider.setUser("user1"); + + dataMap = viewInstanceDefinition.getInstanceDataMap(); + Assert.assertEquals(4, dataMap.size()); + + Assert.assertEquals("foo", dataMap.get("key1")); + Assert.assertEquals("bar", dataMap.get("key2")); + Assert.assertNull(dataMap.get("key3")); + Assert.assertEquals("monkey", dataMap.get("key4")); + Assert.assertEquals("runner", dataMap.get("key5")); + } + public static ViewInstanceEntity getViewInstanceEntity() throws Exception { InstanceConfig instanceConfig = InstanceConfigTest.getInstanceConfigs().get(0); ViewEntity viewDefinition = ViewEntityTest.getViewEntity(); return new ViewInstanceEntity(viewDefinition, instanceConfig); } + + public static ViewInstanceEntity getViewInstanceEntity(ViewInstanceEntity.UserNameProvider userNameProvider) + throws Exception { + ViewInstanceEntity viewInstanceEntity = getViewInstanceEntity(); + viewInstanceEntity.setUserNameProvider(userNameProvider); + return viewInstanceEntity; + } + + protected static class TestUserNameProvider extends ViewInstanceEntity.UserNameProvider { + + private String user; + + public TestUserNameProvider(String user) { + this.user = user; + } + + public void setUser(String user) { + this.user = user; + } + + @Override + public String getUsername() { + return user; + } + } }
