ambari-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From jai...@apache.org
Subject [16/19] ambari git commit: AMBARI-20436. Create a prototype of ambari-server swagger integration. (jaimin)
Date Mon, 20 Mar 2017 21:31:15 GMT
http://git-wip-us.apache.org/repos/asf/ambari/blob/fb86fb3b/ambari-server/src/main/java/org/apache/ambari/server/controller/GroupPrivilegeResponse.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/GroupPrivilegeResponse.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/GroupPrivilegeResponse.java
new file mode 100644
index 0000000..a722ba5
--- /dev/null
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/GroupPrivilegeResponse.java
@@ -0,0 +1,61 @@
+/**
+ * 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
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * 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.
+ */
+
+package org.apache.ambari.server.controller;
+
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.UriInfo;
+
+import org.apache.ambari.server.api.services.groups.GroupPrivilegeService;
+import org.apache.ambari.server.orm.entities.PrincipalTypeEntity;
+
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * Response schema for endpoint {@link GroupPrivilegeService#getPrivileges(HttpHeaders, UriInfo, String)}
+ */
+public class GroupPrivilegeResponse extends PrivilegeResponse implements ApiModel {
+
+  private String groupName;
+
+  /**
+   *
+   * @param groupName          group name
+   * @param permissionLabel    permission label
+   * @param permissionName     permission name
+   * @param privilegeId        privilege id
+   * @param principalType      principal type
+   */
+  public GroupPrivilegeResponse(String groupName, String permissionLabel, String permissionName, Integer privilegeId,
+                               PrincipalTypeEntity.PrincipalType principalType) {
+    this.groupName = groupName;
+    this.permissionLabel = permissionLabel;
+    this.privilegeId = privilegeId;
+    this.permissionName = permissionName;
+    this.principalType = principalType;
+  }
+
+  /**
+   *  Returns group name
+   * @return  group name
+   */
+  @ApiModelProperty(name = "PrivilegeInfo/group_name", required = true)
+  public String getGroupName() {
+    return groupName;
+  }
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/fb86fb3b/ambari-server/src/main/java/org/apache/ambari/server/controller/GroupRequest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/GroupRequest.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/GroupRequest.java
index 1bc18cc..e63a383 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/GroupRequest.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/GroupRequest.java
@@ -17,16 +17,19 @@
  */
 package org.apache.ambari.server.controller;
 
+import io.swagger.annotations.ApiModelProperty;
+
 /**
  * Represents a group maintenance request.
  */
-public class GroupRequest {
+public class GroupRequest implements ApiModel{
   private final String groupName;
 
   public GroupRequest(String groupName) {
     this.groupName = groupName;
   }
 
+  @ApiModelProperty(name = "Groups/group_name",required = true)
   public String getGroupName() {
     return groupName;
   }

http://git-wip-us.apache.org/repos/asf/ambari/blob/fb86fb3b/ambari-server/src/main/java/org/apache/ambari/server/controller/GroupResponse.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/GroupResponse.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/GroupResponse.java
index 0baccc7..a1cbe80 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/GroupResponse.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/GroupResponse.java
@@ -19,10 +19,12 @@ package org.apache.ambari.server.controller;
 
 import org.apache.ambari.server.security.authorization.GroupType;
 
+import io.swagger.annotations.ApiModelProperty;
+
 /**
  * Represents a user group maintenance response.
  */
-public class GroupResponse {
+public class GroupResponse implements ApiModel{
   private final String groupName;
   private final boolean ldapGroup;
   private final GroupType groupType;
@@ -39,14 +41,17 @@ public class GroupResponse {
     this.groupType = GroupType.LOCAL;
   }
 
+  @ApiModelProperty(name = "Groups/group_name")
   public String getGroupName() {
     return groupName;
   }
 
+  @ApiModelProperty(name = "Groups/ldap_group")
   public boolean isLdapGroup() {
     return ldapGroup;
   }
 
+  @ApiModelProperty(name = "Groups/group_type")
   public GroupType getGroupType() {
     return groupType;
   }

http://git-wip-us.apache.org/repos/asf/ambari/blob/fb86fb3b/ambari-server/src/main/java/org/apache/ambari/server/controller/MemberRequest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/MemberRequest.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/MemberRequest.java
index 0245f36..dd0e999 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/MemberRequest.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/MemberRequest.java
@@ -17,6 +17,8 @@
  */
 package org.apache.ambari.server.controller;
 
+import io.swagger.annotations.ApiModelProperty;
+
 /**
  * Represents a member maintenance request.
  */
@@ -29,10 +31,12 @@ public class MemberRequest {
     this.userName  = userName;
   }
 
+  @ApiModelProperty(name = "MemberInfo/group_name", required = true)
   public String getGroupName() {
     return groupName;
   }
 
+  @ApiModelProperty(name = "MemberInfo/user_name", required = true)
   public String getUserName() {
     return userName;
   }

http://git-wip-us.apache.org/repos/asf/ambari/blob/fb86fb3b/ambari-server/src/main/java/org/apache/ambari/server/controller/MemberResponse.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/MemberResponse.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/MemberResponse.java
index 3dc6558..69a69a7 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/MemberResponse.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/MemberResponse.java
@@ -17,7 +17,9 @@
  */
 package org.apache.ambari.server.controller;
 
-public class MemberResponse {
+import io.swagger.annotations.ApiModelProperty;
+
+public class MemberResponse implements ApiModel{
   private final String groupName;
   private final String userName;
 
@@ -26,10 +28,12 @@ public class MemberResponse {
     this.userName = userName;
   }
 
+  @ApiModelProperty(name = "MemberInfo/group_name")
   public String getGroupName() {
     return groupName;
   }
 
+  @ApiModelProperty(name = "MemberInfo/user_name")
   public String getUserName() {
     return userName;
   }

http://git-wip-us.apache.org/repos/asf/ambari/blob/fb86fb3b/ambari-server/src/main/java/org/apache/ambari/server/controller/PrivilegeResponse.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/PrivilegeResponse.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/PrivilegeResponse.java
new file mode 100644
index 0000000..a067afb
--- /dev/null
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/PrivilegeResponse.java
@@ -0,0 +1,175 @@
+/**
+ * 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
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * 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.
+ */
+
+package org.apache.ambari.server.controller;
+
+
+import org.apache.ambari.server.orm.entities.PrincipalTypeEntity.PrincipalType;
+import org.apache.ambari.server.security.authorization.ResourceType;
+
+import io.swagger.annotations.ApiModelProperty;
+
+
+public abstract class PrivilegeResponse implements ApiModel {
+  protected String permissionLabel;
+  protected Integer privilegeId;
+  protected String permissionName;
+  protected PrincipalType principalType;
+  protected String principalName;
+  protected ResourceType type;
+  protected String clusterName;
+  protected String viewName;
+  protected String version;
+  protected String instanceName;
+
+
+  /**
+   * Returns permission label
+   * @return permission label
+   */
+  @ApiModelProperty(name = "PrivilegeInfo/permission_label")
+  public String getPermissionLabel() {
+    return permissionLabel;
+  }
+
+  /**
+   * Returns principal name
+   * @return principal name
+   */
+  @ApiModelProperty(name = "PrivilegeInfo/principal_name")
+  public String getPrincipalName() {
+    return principalName;
+  }
+
+  /**
+   * Sets principal name
+   * @param principalName  principal name
+   */
+  public void setPrincipalName(String principalName) {
+    this.principalName = principalName;
+  }
+
+  /**
+   * Returns privilege id
+   * @return  privilege id
+   */
+  @ApiModelProperty(name = "PrivilegeInfo/privilege_id")
+  public Integer getPrivilegeId() {
+    return privilegeId;
+  }
+
+  /**
+   * Returns permission name
+   * @return permission name
+   */
+  @ApiModelProperty(name = "PrivilegeInfo/permission_name")
+  public String getPermissionName() {
+    return permissionName;
+  }
+
+  /**
+   * Returns principal type
+   * @return principal type
+   */
+  @ApiModelProperty(name = "PrivilegeInfo/principal_type")
+  public PrincipalType getPrincipalType() {
+    return principalType;
+  }
+
+  /**
+   * Returns resource type
+   * @return resource type
+   */
+  @ApiModelProperty(name = "PrivilegeInfo/type")
+  public ResourceType getType() {
+    return type;
+  }
+
+  /**
+   * Sets resource type
+   * @param type resource type
+   */
+  public void setType(ResourceType type) {
+    this.type = type;
+  }
+
+  /**
+   * Returns cluster name
+   * @return cluster name
+   */
+  @ApiModelProperty(name = "PrivilegeInfo/cluster_name")
+  public String getClusterName() {
+    return clusterName;
+  }
+
+  /**
+   * Sets cluster name
+   * @param clusterName cluster name
+   */
+  public void setClusterName(String clusterName) {
+    this.clusterName = clusterName;
+  }
+
+  /**
+   * Returns view name
+   * @return view name
+   */
+  @ApiModelProperty(name = "PrivilegeInfo/view_name")
+  public String getViewName() {
+    return viewName;
+  }
+
+  /**
+   * Sets view name
+   * @param viewName  view name
+   */
+  public void setViewName(String viewName) {
+    this.viewName = viewName;
+  }
+
+  /**
+   * Returns view version
+   * @return view version
+   */
+  @ApiModelProperty(name = "PrivilegeInfo/version")
+  public String getVersion() {
+    return version;
+  }
+
+  /**
+   * Sets view version
+   * @param version view version
+   */
+  public void setVersion(String version) {
+    this.version = version;
+  }
+
+  /**
+   * Returns view instance name
+   * @return view instance name
+   */
+  @ApiModelProperty(name = "PrivilegeInfo/instance_name")
+  public String getInstanceName() {
+    return instanceName;
+  }
+
+  public void setInstanceName(String instanceName) {
+    this.instanceName = instanceName;
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/fb86fb3b/ambari-server/src/main/java/org/apache/ambari/server/controller/UserAuthorizationResponse.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/UserAuthorizationResponse.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/UserAuthorizationResponse.java
new file mode 100644
index 0000000..1965e6f
--- /dev/null
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/UserAuthorizationResponse.java
@@ -0,0 +1,153 @@
+/**
+ * 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
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * 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.
+ */
+package org.apache.ambari.server.controller;
+
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.UriInfo;
+
+import org.apache.ambari.server.api.services.users.UserAuthorizationService;
+
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * Response schema for endpoint {@link UserAuthorizationService#getAuthorizations(HttpHeaders, UriInfo, String)}
+ */
+public class UserAuthorizationResponse implements ApiModel {
+
+  private final String authorizationId;
+  private final String authorizationName;
+  private final String resourceType;
+  private final String userName;
+  private String clusterName;
+  private String viewName;
+  private String viewVersion;
+  private String viewInstanceName;
+
+
+  /**
+   *
+   * @param authorizationId      authorization id
+   * @param authorizationName    authorization name
+   * @param clusterName          cluster name
+   * @param resourceType         resource type
+   * @param userName             user name
+   */
+  public UserAuthorizationResponse(String authorizationId, String authorizationName,
+                               String clusterName, String resourceType, String userName) {
+    this.authorizationId = authorizationId;
+    this.authorizationName = authorizationName;
+    this.clusterName = clusterName;
+    this.resourceType = resourceType;
+    this.userName = userName;
+  }
+
+  /**
+   *
+   * @param authorizationId     authorization id
+   * @param authorizationName   authorization name
+   * @param resourceType        resource type
+   * @param userName            user name
+   * @param viewName            view name
+   * @param viewVersion         view version
+   * @param viewInstanceName    view instance name
+   */
+  public UserAuthorizationResponse(String authorizationId, String authorizationName,
+                               String resourceType, String userName, String viewName,
+                               String viewVersion, String viewInstanceName) {
+    this.authorizationId = authorizationId;
+    this.authorizationName = authorizationName;
+    this.resourceType = resourceType;
+    this.userName = userName;
+    this.viewName = viewName;
+    this.viewVersion = viewVersion;
+    this.viewInstanceName = viewInstanceName;
+  }
+
+  /**
+   * Returns authorization id
+   * @return authorization id
+   */
+  @ApiModelProperty(name = "AuthorizationInfo/authorization_id")
+  public String getAuthorizationId() {
+    return authorizationId;
+  }
+
+  /**
+   * Returns authorization name
+   * @return authorization name
+   */
+  @ApiModelProperty(name = "AuthorizationInfo/authorization_name")
+  public String getAuthorizationName() {
+    return authorizationName;
+  }
+
+  /**
+   * Returns resource type
+   * @return resource type
+   */
+  @ApiModelProperty(name = "AuthorizationInfo/resource_type")
+  public String getResourceType() {
+    return resourceType;
+  }
+
+  /**
+   * Returns view version
+   * @return view version
+   */
+  @ApiModelProperty(name = "AuthorizationInfo/view_version")
+  public String getViewVersion() {
+    return viewVersion;
+  }
+
+  /**
+   * Returns view instance name
+   * @return view instance name
+   */
+  @ApiModelProperty(name = "AuthorizationInfo/view_instance_name")
+  public String getViewInstanceName() {
+    return viewInstanceName;
+  }
+
+  /**
+   * Returns user name
+   * @return user name
+   */
+  @ApiModelProperty(name = "AuthorizationInfo/user_name",required = true)
+  public String getUserName() {
+    return userName;
+  }
+
+  /**
+   * Returns cluster name
+   * @return cluster name
+   */
+  @ApiModelProperty(name = "AuthorizationInfo/cluster_name")
+  public String getClusterName() {
+    return clusterName;
+  }
+
+  /**
+   * Returns view name
+   * @return view name
+   */
+  @ApiModelProperty(name = "AuthorizationInfo/view_name")
+  public String getViewName() {
+    return viewName;
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/fb86fb3b/ambari-server/src/main/java/org/apache/ambari/server/controller/UserPrivilegeResponse.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/UserPrivilegeResponse.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/UserPrivilegeResponse.java
new file mode 100644
index 0000000..6502581
--- /dev/null
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/UserPrivilegeResponse.java
@@ -0,0 +1,61 @@
+/**
+ * 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
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * 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.
+ */
+
+package org.apache.ambari.server.controller;
+
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.UriInfo;
+
+import org.apache.ambari.server.api.services.users.UserPrivilegeService;
+import org.apache.ambari.server.orm.entities.PrincipalTypeEntity;
+
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * Response schema for endpoint {@link UserPrivilegeService#getPrivileges(HttpHeaders, UriInfo, String)}
+ */
+public class UserPrivilegeResponse extends PrivilegeResponse implements ApiModel {
+
+  private final String userName;
+
+  /**
+   *
+   * @param userName           user name
+   * @param permissionLabel    permission label
+   * @param permissionName     permission name
+   * @param privilegeId        privilege id
+   * @param principalType      principal type
+   */
+  public UserPrivilegeResponse(String userName, String permissionLabel, String permissionName, Integer privilegeId,
+                           PrincipalTypeEntity.PrincipalType principalType) {
+    this.userName = userName;
+    this.permissionLabel = permissionLabel;
+    this.privilegeId = privilegeId;
+    this.permissionName = permissionName;
+    this.principalType = principalType;
+  }
+
+  /**
+   * Returns user name
+   * @return  user name
+   */
+  @ApiModelProperty(name = "PrivilegeInfo/user_name",required = true)
+  public String getUserName() {
+    return userName;
+  }
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/fb86fb3b/ambari-server/src/main/java/org/apache/ambari/server/controller/UserRequest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/UserRequest.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/UserRequest.java
index 282131a..95f3d0f 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/UserRequest.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/UserRequest.java
@@ -17,9 +17,13 @@
  */
 package org.apache.ambari.server.controller;
 
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
 /**
  * Represents a user maintenance request.
  */
+@ApiModel
 public class UserRequest {
   private String userName;
   private String password;
@@ -27,14 +31,16 @@ public class UserRequest {
   private Boolean active;
   private Boolean admin;
 
-  public UserRequest(String name) {
-    this.userName = name;
-  }
-
+  @ApiModelProperty(name = "Users/user_name",hidden = true)
   public String getUsername() {
     return userName;
   }
 
+  public UserRequest(String name) {
+    this.userName = name;
+  }
+
+  @ApiModelProperty(name = "Users/password")
   public String getPassword() {
     return password;
   }
@@ -43,6 +49,7 @@ public class UserRequest {
     password = userPass;
   }
 
+  @ApiModelProperty(name = "Users/old_password")
   public String getOldPassword() {
     return oldPassword;
   }
@@ -51,6 +58,7 @@ public class UserRequest {
     oldPassword = oldUserPass;
   }
 
+  @ApiModelProperty(name = "Users/active")
   public Boolean isActive() {
     return active;
   }
@@ -59,6 +67,7 @@ public class UserRequest {
     this.active = active;
   }
 
+  @ApiModelProperty(name = "Users/admin")
   public Boolean isAdmin() {
     return admin;
   }

http://git-wip-us.apache.org/repos/asf/ambari/blob/fb86fb3b/ambari-server/src/main/java/org/apache/ambari/server/controller/UserResponse.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/UserResponse.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/UserResponse.java
index b90f864..aa1c3fc 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/UserResponse.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/UserResponse.java
@@ -22,10 +22,12 @@ import java.util.Set;
 
 import org.apache.ambari.server.security.authorization.UserType;
 
+import io.swagger.annotations.ApiModelProperty;
+
 /**
  * Represents a user maintenance request.
  */
-public class UserResponse {
+public class UserResponse implements ApiModel {
 
   private final String userName;
   private final UserType userType;
@@ -50,10 +52,12 @@ public class UserResponse {
     this.userType = UserType.LOCAL;
   }
 
+  @ApiModelProperty(name = "Users/user_name",required = true)
   public String getUsername() {
     return userName;
   }
 
+  @ApiModelProperty(name = "Users/groups")
   public Set<String> getGroups() {
     return groups;
   }
@@ -62,41 +66,45 @@ public class UserResponse {
     this.groups = groups;
   }
 
-  @Override
-  public boolean equals(Object o) {
-    if (this == o) return true;
-    if (o == null || getClass() != o.getClass()) return false;
-
-    UserResponse that = (UserResponse) o;
-
-    if (userName != null ? !userName.equals(that.userName) : that.userName != null) return false;
-    return userType == that.userType;
-
-  }
-
-  @Override
-  public int hashCode() {
-    int result = userName != null ? userName.hashCode() : 0;
-    result = 31 * result + (userType != null ? userType.hashCode() : 0);
-    return result;
-  }
-
   /**
    * @return the isLdapUser
    */
+  @ApiModelProperty(name = "Users/ldap_user")
   public boolean isLdapUser() {
     return isLdapUser;
   }
 
+  @ApiModelProperty(name = "Users/active")
   public boolean isActive() {
     return isActive;
   }
 
+  @ApiModelProperty(name = "Users/admin")
   public boolean isAdmin() {
     return isAdmin;
   }
 
+  @ApiModelProperty(name = "Users/user_type")
   public UserType getUserType() {
     return userType;
   }
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) return true;
+    if (o == null || getClass() != o.getClass()) return false;
+
+    UserResponse that = (UserResponse) o;
+
+    if (userName != null ? !userName.equals(that.userName) : that.userName != null) return false;
+    return userType == that.userType;
+
+  }
+
+  @Override
+  public int hashCode() {
+    int result = userName != null ? userName.hashCode() : 0;
+    result = 31 * result + (userType != null ? userType.hashCode() : 0);
+    return result;
+  }
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/fb86fb3b/ambari-server/src/main/java/org/apache/ambari/server/controller/ViewInstanceRequest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/ViewInstanceRequest.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/ViewInstanceRequest.java
new file mode 100644
index 0000000..1664c8a
--- /dev/null
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/ViewInstanceRequest.java
@@ -0,0 +1,209 @@
+/**
+ * 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
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * 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.
+ */
+
+package org.apache.ambari.server.controller;
+
+import java.util.Map;
+
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.UriInfo;
+
+import org.apache.ambari.server.api.services.views.ViewInstanceService;
+import org.apache.ambari.view.ClusterType;
+
+
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * Request body schema for endpoint {@link ViewInstanceService#createService(String, HttpHeaders, UriInfo, String, String, String)}
+ */
+public class ViewInstanceRequest implements ApiModel{
+  private final ViewInstanceRequestInfo viewInstanceRequestInfo;
+
+  /**
+   * @param viewInstanceRequestInfo  {@link ViewInstanceRequestInfo}
+   */
+  public ViewInstanceRequest(ViewInstanceRequestInfo viewInstanceRequestInfo) {
+    this.viewInstanceRequestInfo = viewInstanceRequestInfo;
+  }
+
+  /**
+   * Returns wrapper class for view instance information
+   * @return {@link #viewInstanceRequestInfo}
+   */
+  @ApiModelProperty(name = "ViewInstanceInfo")
+  public ViewInstanceRequestInfo getViewInstanceInfo() {
+    return viewInstanceRequestInfo;
+  }
+
+  /**
+   * static class that wraps all view instance information
+   */
+  public static class ViewInstanceRequestInfo {
+    protected final String viewName;
+    protected final String version;
+    protected final String instanceName;
+    private final String label;
+    private final String description;
+    private final boolean visible;
+    private final String iconPath;
+    private final String icon64Path;
+    private final Map<String, String> properties;
+    private final Map<String, String> instanceData;
+    private final Integer clusterHandle;
+    private final ClusterType clusterType;
+
+    /**
+     *
+     * @param viewName        view name
+     * @param version         view version
+     * @param instanceName    instance name
+     * @param label           view label
+     * @param description     view description
+     * @param visible         visibility for view
+     * @param iconPath        icon path
+     * @param icon64Path      icon64 path
+     * @param properties      properties
+     * @param instanceData    instance data
+     * @param clusterHandle   cluster handle
+     * @param clusterType     cluster type (local|remote|none)
+     */
+    public ViewInstanceRequestInfo(String viewName, String version, String instanceName, String label, String description,
+                                   boolean visible, String iconPath, String icon64Path, Map<String, String> properties,
+                                   Map<String, String> instanceData, Integer clusterHandle, ClusterType clusterType) {
+      this.viewName = viewName;
+      this.version = version;
+      this.instanceName = instanceName;
+      this.label = label;
+      this.description = description;
+      this.visible = visible;
+      this.iconPath = iconPath;
+      this.icon64Path = icon64Path;
+      this.properties = properties;
+      this.instanceData = instanceData;
+      this.clusterHandle = clusterHandle;
+      this.clusterType = clusterType;
+    }
+
+    /**
+     * Returns view name
+     * @return view name
+     */
+    @ApiModelProperty(name = "view_name", hidden = true)
+    public String getViewName() {
+      return viewName;
+    }
+
+    /**
+     * Returns view version
+     * @return view version
+     */
+    @ApiModelProperty(hidden = true)
+    public String getVersion() {
+      return version;
+    }
+
+    /**
+     * Returns instance name
+     * @return instance name
+     */
+    @ApiModelProperty(name = "instance_name", hidden = true)
+    public String getInstanceName() {
+      return instanceName;
+    }
+
+    /**
+     * Returns view label
+     * @return view label
+     */
+    public String getLabel() {
+      return label;
+    }
+
+    /**
+     * Returns view description
+     * @return view description
+     */
+    public String getDescription() {
+      return description;
+    }
+
+    /**
+     * Returns visibility for view
+     * @return visibility for view
+     */
+    public boolean isVisible() {
+      return visible;
+    }
+
+    /**
+     * Returns icon path
+     * @return icon path
+     */
+    @ApiModelProperty(name = "icon_path")
+    public String getIconPath() {
+      return iconPath;
+    }
+
+    /**
+     * Returns icon64 patch
+     * @return icon64 path
+     */
+    @ApiModelProperty(name = "icon64_path")
+    public String getIcon64Path() {
+      return icon64Path;
+    }
+
+    /**
+     * Returns all view properties
+     * @return view properties
+     */
+    public Map<String, String> getProperties() {
+      return properties;
+    }
+
+    /**
+     * Returns instance data
+     * @return instance data
+     */
+    @ApiModelProperty(name = "instance_data")
+    public Map<String, String> getInstanceData() {
+      return instanceData;
+    }
+
+    /**
+     * Returns cluster handle
+     * @return cluster handle
+     */
+    @ApiModelProperty(name = "cluster_handle")
+    public Integer getClusterHandle() {
+      return clusterHandle;
+    }
+
+    /**
+     * Returns cluster type {@link ClusterType}
+     * @return cluster type
+     */
+    @ApiModelProperty(name = "cluster_type")
+    public ClusterType getClusterType() {
+      return clusterType;
+    }
+
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/fb86fb3b/ambari-server/src/main/java/org/apache/ambari/server/controller/ViewInstanceResponse.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/ViewInstanceResponse.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/ViewInstanceResponse.java
new file mode 100644
index 0000000..d0a5206
--- /dev/null
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/ViewInstanceResponse.java
@@ -0,0 +1,198 @@
+/**
+ * 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
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * 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.
+ */
+
+package org.apache.ambari.server.controller;
+
+import java.util.Map;
+
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.UriInfo;
+
+import org.apache.ambari.server.api.services.views.ViewInstanceService;
+import org.apache.ambari.view.ClusterType;
+import org.apache.ambari.view.validation.ValidationResult;
+
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * Response schema for endpoint {@link ViewInstanceService#getServices(String, HttpHeaders, UriInfo, String, String)}
+ */
+public class ViewInstanceResponse implements ApiModel{
+  private final ViewInstanceResponseInfo viewInstanceResponseInfo;
+
+  public ViewInstanceResponse(ViewInstanceResponseInfo viewInstanceResponseInfo) {
+    this.viewInstanceResponseInfo = viewInstanceResponseInfo;
+  }
+
+  @ApiModelProperty(name = "ViewInstanceInfo")
+  public ViewInstanceResponseInfo getViewInstanceInfo() {
+    return viewInstanceResponseInfo;
+  }
+
+  public class ViewInstanceResponseInfo extends ViewInstanceRequest.ViewInstanceRequestInfo {
+    private final String contextPath;
+    private final boolean staticDriven;
+    private String shortUrl;
+    private String shortUrlName;
+    private ValidationResult validationResult;
+    private Map<String, ValidationResult> propertyValidationResults;
+
+    /**
+     *
+     * @param viewName        view name
+     * @param version         view version
+     * @param instanceName    view instance name
+     * @param label           view label
+     * @param description     view description
+     * @param visible         visible
+     * @param iconPath        icon path
+     * @param icon64Path      icon64 path
+     * @param properties      view properties
+     * @param instanceData    view instance data
+     * @param clusterHandle   cluster handle
+     * @param clusterType     cluster type (local|remote|none)
+     * @param contextPath     context path
+     * @param staticDriven    is static driven
+     */
+    public ViewInstanceResponseInfo(String viewName, String version, String instanceName, String label, String description,
+                                    boolean visible, String iconPath, String icon64Path, Map<String, String> properties,
+                                    Map<String, String> instanceData, Integer clusterHandle, ClusterType clusterType,
+                                    String contextPath, boolean staticDriven) {
+      super(viewName, version, instanceName, label, description, visible, iconPath, icon64Path, properties, instanceData, clusterHandle, clusterType);
+      this.contextPath = contextPath;
+      this.staticDriven = staticDriven;
+    }
+
+    /**
+     * Return view name.
+     * @return view name
+     */
+    @Override
+    @ApiModelProperty(name = "view_name", hidden = false)
+    public String getViewName() {
+      return viewName;
+    }
+
+    /**
+     * Return view version
+     * @return view version
+     */
+    @Override
+    @ApiModelProperty(hidden = false)
+    public String getVersion() {
+      return version;
+    }
+
+    /**
+     * Return view instance name
+     * @return view instance name
+     */
+    @Override
+    @ApiModelProperty(name = "instance_name", hidden = false)
+    public String getInstanceName() {
+      return instanceName;
+    }
+
+    /**
+     * Return view context path
+     * @return context path
+     */
+    @ApiModelProperty(name = "context_path")
+    public String getContextPath() {
+      return contextPath;
+    }
+
+    /**
+     * Return if the view is static driven
+     * @return  {{@link #staticDriven}
+     */
+    @ApiModelProperty(name = "static")
+    public boolean isStaticDriven() {
+      return staticDriven;
+    }
+
+    /**
+     * Return short url for the view
+     * @return short url for the view
+     */
+    @ApiModelProperty(name = "short_url")
+    public String getShortUrl() {
+      return shortUrl;
+    }
+
+    /**
+     * set short url for the view
+     * @param shortUrl  short url
+     */
+    public void setShortUrl(String shortUrl) {
+      this.shortUrl = shortUrl;
+    }
+
+    /**
+     * Returns short url name
+     * @return short url name
+     */
+    @ApiModelProperty(name = "short_url_name")
+    public String getShortUrlName() {
+      return shortUrlName;
+    }
+
+    /**
+     * Sets short url name
+     * @param shortUrlName short url name
+     */
+    public void setShortUrlName(String shortUrlName) {
+      this.shortUrlName = shortUrlName;
+    }
+
+    /**
+     * Returns validation result
+     * @return {@link ValidationResult}
+     */
+    @ApiModelProperty(name = "validation_result")
+    public ValidationResult getValidationResult() {
+      return validationResult;
+    }
+
+    /**
+     * sets validation result
+     * @param validationResult {@link ValidationResult}
+     */
+    public void setValidationResult(ValidationResult validationResult) {
+      this.validationResult = validationResult;
+    }
+
+    /**
+     * Returns map of property->ValidationResult
+     * @return Map
+     */
+    @ApiModelProperty(name = "property_validation_results")
+    public Map<String, ValidationResult> getPropertyValidationResults() {
+      return propertyValidationResults;
+    }
+
+    /**
+     * Sets map of property->ValidationResult
+     * @param propertyValidationResults  Map
+     */
+    public void setPropertyValidationResults(Map<String, ValidationResult> propertyValidationResults) {
+      this.propertyValidationResults = propertyValidationResults;
+    }
+
+  }
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/fb86fb3b/ambari-server/src/main/java/org/apache/ambari/server/controller/ViewPermissionResponse.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/ViewPermissionResponse.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/ViewPermissionResponse.java
new file mode 100644
index 0000000..15f4e6e
--- /dev/null
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/ViewPermissionResponse.java
@@ -0,0 +1,122 @@
+/**
+ * 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
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * 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.
+ */
+
+package org.apache.ambari.server.controller;
+
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.UriInfo;
+
+import org.apache.ambari.server.api.services.views.ViewPermissionService;
+
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * Response schema for endpoint {@link ViewPermissionService#getPermissions(HttpHeaders, UriInfo, String, String)}
+ */
+public class ViewPermissionResponse implements ApiModel {
+
+  private final ViewPermissionInfo viewPermissionInfo;
+
+  /**
+   *
+   * @param viewPermissionInfo view permission info
+   */
+  public ViewPermissionResponse(ViewPermissionInfo viewPermissionInfo) {
+    this.viewPermissionInfo = viewPermissionInfo;
+  }
+
+  /**
+   * Returns {@link ViewPermissionInfo} instance that hold all view permission information
+   * @return {@link ViewPermissionInfo}
+   */
+  @ApiModelProperty(name = "ViewPermissionInfo")
+  public ViewPermissionInfo getViewPermissionInfo() {
+    return viewPermissionInfo;
+  }
+
+  /**
+   * static wrapper class that holds all view permission information
+   */
+  public static class ViewPermissionInfo {
+    private final String viewName;
+    private final String version;
+    private final Integer permissionId;
+    private final String permissionName;
+    private final String resourceName;
+
+    /**
+     *
+     * @param viewName            view name
+     * @param version             view version
+     * @param permissionId        permission id
+     * @param permissionName      permission name
+     * @param resourceName        resource name
+     */
+    public ViewPermissionInfo(String viewName, String version, Integer permissionId, String permissionName, String resourceName) {
+      this.viewName = viewName;
+      this.version = version;
+      this.permissionId = permissionId;
+      this.permissionName = permissionName;
+      this.resourceName = resourceName;
+    }
+
+    /**
+     * Returns view name
+     * @return view name
+     */
+    @ApiModelProperty(name = "view_name")
+    public String getViewName() {
+      return viewName;
+    }
+
+    /**
+     * Returns view version
+     * @return view version
+     */
+    public String getVersion() {
+      return version;
+    }
+
+    /**
+     * Returns permission id
+     * @return permission id
+     */
+    @ApiModelProperty(name = "permission_id")
+    public Integer getPermissionId() {
+      return permissionId;
+    }
+
+    /**
+     * Returns permission name
+     * @return permission name
+     */
+    @ApiModelProperty(name = "permission_name")
+    public String getPermissionName() {
+      return permissionName;
+    }
+
+    /**
+     * Returns resource name
+     * @return resource names
+     */
+    @ApiModelProperty(name = "resource_name")
+    public String getResourceName() {
+      return resourceName;
+    }
+  }
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/fb86fb3b/ambari-server/src/main/java/org/apache/ambari/server/controller/ViewPrivilegeRequest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/ViewPrivilegeRequest.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/ViewPrivilegeRequest.java
new file mode 100644
index 0000000..cf09e0a
--- /dev/null
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/ViewPrivilegeRequest.java
@@ -0,0 +1,79 @@
+/**
+ * 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
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * 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.
+ */
+
+package org.apache.ambari.server.controller;
+
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.UriInfo;
+
+import org.apache.ambari.server.api.services.views.ViewPrivilegeService;
+
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * Request body schema for endpoint {@link ViewPrivilegeService#createPrivilege(String, HttpHeaders, UriInfo, String, String, String)} )}
+ */
+public class ViewPrivilegeRequest extends ViewPrivilegeResponse implements ApiModel {
+
+  /**
+   * Hide privilege id in request body schema
+   * @return privilege id
+   */
+  @ApiModelProperty(name = "PrivilegeInfo/privilege_id", hidden = true)
+  public Integer getPrivilegeId() {
+    return privilegeId;
+  }
+
+  /**
+   * Hide permission label in request body schema
+   * @return permission label
+   */
+  @ApiModelProperty(name = "PrivilegeInfo/permission_label", hidden = true)
+  public String getPermissionLabel() {
+    return permissionLabel;
+  }
+
+  /**
+   * Hide view name in request body schema
+   * @return view name
+   */
+  @ApiModelProperty(name = "PrivilegeInfo/view_name", hidden = true)
+  public String getViewName() {
+    return viewName;
+  }
+
+  /**
+   * Hide view version in request body schema
+   * @return view version
+   */
+  @ApiModelProperty(name = "PrivilegeInfo/version", hidden = true)
+  public String getVersion() {
+    return version;
+  }
+
+  /**
+   * Hide view instance name in request body schema
+   * @return view instance name
+   */
+  @ApiModelProperty(name = "PrivilegeInfo/instance_name", hidden = true)
+  public String getInstanceName() {
+    return instanceName;
+  }
+
+
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/fb86fb3b/ambari-server/src/main/java/org/apache/ambari/server/controller/ViewPrivilegeResponse.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/ViewPrivilegeResponse.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/ViewPrivilegeResponse.java
new file mode 100644
index 0000000..8199948
--- /dev/null
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/ViewPrivilegeResponse.java
@@ -0,0 +1,55 @@
+/**
+ * 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
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * 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.
+ */
+
+package org.apache.ambari.server.controller;
+
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.UriInfo;
+
+import org.apache.ambari.server.api.services.views.ViewPrivilegeService;
+import org.apache.ambari.server.security.authorization.ResourceType;
+
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * Response schema for endpoint {@link ViewPrivilegeService#getPrivileges(HttpHeaders, UriInfo, String, String, String)}
+ */
+public class ViewPrivilegeResponse extends PrivilegeResponse implements ApiModel {
+
+  /**
+   * Hide cluster name from the response schema
+   * @return cluster name
+   */
+  @Override
+  @ApiModelProperty(name = "PrivilegeInfo/cluster_name", hidden = true)
+  public String getClusterName() {
+    return clusterName;
+  }
+
+  /**
+   * Hide resource type from the response schema
+   * @return resource type
+   */
+  @Override
+  @ApiModelProperty(name = "PrivilegeInfo/type", hidden = true)
+  public ResourceType getType() {
+    return type;
+  }
+
+
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/fb86fb3b/ambari-server/src/main/java/org/apache/ambari/server/controller/ViewResponse.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/ViewResponse.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/ViewResponse.java
new file mode 100644
index 0000000..2d5a8f0
--- /dev/null
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/ViewResponse.java
@@ -0,0 +1,82 @@
+/**
+ * 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
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * 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.
+ */
+
+package org.apache.ambari.server.controller;
+
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.UriInfo;
+
+import org.apache.ambari.server.api.services.views.ViewService;
+
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * Response schema for endpoint {@link ViewService#getViews(String, HttpHeaders, UriInfo)}
+ */
+public class ViewResponse implements ApiModel {
+  private ViewInfo viewInfo;
+
+  /**
+   *
+   * @param viewInfo {@link ViewInfo}
+   */
+  public ViewResponse(ViewInfo viewInfo) {
+    this.viewInfo = viewInfo;
+  }
+
+  /**
+   * Returns view information wrapper class instance
+   * @return {@link #viewInfo}
+   */
+  @ApiModelProperty(name = "ViewInfo")
+  public ViewInfo getViewInfo() {
+    return viewInfo;
+  }
+
+  /**
+   * static wrapper class for view information
+   */
+  private class ViewInfo implements ApiModel{
+    private String viewName;
+
+    /**
+     *
+     * @param viewName view name
+     */
+    public ViewInfo(String viewName) {
+      this.viewName = viewName;
+    }
+
+    /**
+     * Returns view name
+     * @return view name
+     */
+    @ApiModelProperty(name = "view_name")
+    public String getViewName() {
+      return viewName;
+    }
+
+    /**
+     * Sets view name
+     * @param viewName view name
+     */
+    public void setViewName(String viewName) {
+      this.viewName = viewName;
+    }
+  }
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/fb86fb3b/ambari-server/src/main/java/org/apache/ambari/server/controller/ViewVersionResponse.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/ViewVersionResponse.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/ViewVersionResponse.java
new file mode 100644
index 0000000..0bc84c0
--- /dev/null
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/ViewVersionResponse.java
@@ -0,0 +1,234 @@
+/**
+ * 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
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * 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.
+ */
+
+package org.apache.ambari.server.controller;
+
+import java.util.List;
+
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.UriInfo;
+
+import org.apache.ambari.server.api.services.views.ViewVersionService;
+import org.apache.ambari.server.view.configuration.ParameterConfig;
+import org.apache.ambari.view.ViewDefinition;
+
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * Response schema for endpoint {@link ViewVersionService#getVersions(String, HttpHeaders, UriInfo, String)}
+ */
+public class ViewVersionResponse implements ApiModel {
+
+  ViewVersionInfo viewVersionInfo;
+
+  /**
+   *
+   * @param viewVersionInfo  view version information {@link #viewVersionInfo}
+   */
+  public ViewVersionResponse(ViewVersionInfo viewVersionInfo) {
+    this.viewVersionInfo = viewVersionInfo;
+  }
+
+  /**
+   * Returns wrapper class instance for view version information
+   * @return {@link #viewVersionInfo}
+   */
+  @ApiModelProperty(name = "ViewVersionInfo")
+  public ViewVersionInfo getViewVersionInfo() {
+    return viewVersionInfo;
+  }
+
+  /**
+   * static wrapper class for view version information
+   */
+  public static class ViewVersionInfo implements ApiModel {
+    private final String archive;
+    private final String buildNumber;
+    private final boolean clusterConfigurable;
+    private final String description;
+    private final String label;
+    private final String maskerClass;
+    private final String maxAmbariVersion;
+    private final String minAmbariVersion;
+    private final List<ParameterConfig> parameters;
+    private final ViewDefinition.ViewStatus status;
+    private final String statusDetail;
+    private final boolean system;
+    private final String version;
+    private final String viewName;
+
+    /**
+     *
+     * @param archive               archive
+     * @param buildNumber           build number
+     * @param clusterConfigurable   cluster configurable
+     * @param description           version description
+     * @param label                 version label
+     * @param maskerClass           masker class
+     * @param maxAmbariVersion      maximum ambari version
+     * @param minAmbariVersion      minimum ambari version
+     * @param parameters            version parameters
+     * @param status                status
+     * @param statusDetail          status details
+     * @param system                system
+     * @param version               version number
+     * @param viewName              view name
+     */
+    public ViewVersionInfo(String archive, String buildNumber, boolean clusterConfigurable, String description,
+                           String label, String maskerClass, String maxAmbariVersion, String minAmbariVersion,
+                           List<ParameterConfig> parameters, ViewDefinition.ViewStatus status, String statusDetail,
+                           boolean system, String version, String viewName) {
+      this.archive = archive;
+      this.buildNumber = buildNumber;
+      this.clusterConfigurable = clusterConfigurable;
+      this.description = description;
+      this.label = label;
+      this.maskerClass = maskerClass;
+      this.maxAmbariVersion = maxAmbariVersion;
+      this.minAmbariVersion = minAmbariVersion;
+      this.parameters = parameters;
+      this.status = status;
+      this.statusDetail = statusDetail;
+      this.system = system;
+      this.version = version;
+      this.viewName = viewName;
+    }
+
+    /**
+     * Returns archive string
+     * @return  archive
+     */
+    public String getArchive() {
+      return archive;
+    }
+
+    /**
+     * Returns build number
+     * @return build number
+     */
+    @ApiModelProperty(name = "build_number")
+    public String getBuildNumber() {
+      return buildNumber;
+    }
+
+    /**
+     * Checks if cluster is configurable
+     * @return {@code true} if cluster is configurable
+     *         {@code false} otherwise.
+     */
+    @ApiModelProperty(name = "cluster_configurable")
+    public boolean isClusterConfigurable() {
+      return clusterConfigurable;
+    }
+
+    /**
+     * Returns view description
+     * @return view description
+     */
+    public String getDescription() {
+      return description;
+    }
+
+    /**
+     * Returns view label
+     * @return view label
+     */
+    public String getLabel() {
+      return label;
+    }
+
+    /**
+     * Returns masker class
+     * @return masker class
+     */
+    @ApiModelProperty(name = "masker_class")
+    public String getMaskerClass() {
+      return maskerClass;
+    }
+
+    /**
+     * Returns maximum ambari version
+     * @return maximum ambari version
+     */
+    @ApiModelProperty(name = "max_ambari_version")
+    public String getMaxAmbariVersion() {
+      return maxAmbariVersion;
+    }
+
+    /**
+     * Returns minimum ambari version
+     * @return minimum ambari version
+     */
+    @ApiModelProperty(name = "min_ambari_version")
+    public String getMinAmbariVersion() {
+      return minAmbariVersion;
+    }
+
+    /**
+     * Returns view parameters
+     * @return list of {@link ParameterConfig}
+     */
+    public List<ParameterConfig> getParameters() {
+      return parameters;
+    }
+
+    /**
+     * Returns view status
+     * @return {@link ViewDefinition.ViewStatus}
+     */
+    public ViewDefinition.ViewStatus getStatus() {
+      return status;
+    }
+
+    /**
+     * Returns views status details
+     * @return status details
+     */
+    @ApiModelProperty(name = "status_detail")
+    public String getStatusDetail() {
+      return statusDetail;
+    }
+
+    /**
+     * Checks if system
+     * @return {@code true} if system view
+     *         {@code false} otherwise.
+     */
+    public boolean isSystem() {
+      return system;
+    }
+
+    /**
+     * Returns view version
+     * @return view version
+     */
+    public String getVersion() {
+      return version;
+    }
+
+    /**
+     * Returns view name
+     * @return view name
+     */
+    @ApiModelProperty(name = "view_name")
+    public String getViewName() {
+      return viewName;
+    }
+
+  }
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/fb86fb3b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ActiveWidgetLayoutResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ActiveWidgetLayoutResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ActiveWidgetLayoutResourceProvider.java
index d9a7997..5d52af2 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ActiveWidgetLayoutResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ActiveWidgetLayoutResourceProvider.java
@@ -26,6 +26,7 @@ import java.util.Set;
 
 import org.apache.ambari.server.AmbariException;
 import org.apache.ambari.server.StaticallyInject;
+import org.apache.ambari.server.controller.ActiveWidgetLayoutResponse;
 import org.apache.ambari.server.controller.AmbariManagementController;
 import org.apache.ambari.server.controller.WidgetResponse;
 import org.apache.ambari.server.controller.spi.NoSuchParentResourceException;
@@ -168,36 +169,46 @@ public class ActiveWidgetLayoutResourceProvider extends AbstractControllerResour
     }
 
     for (WidgetLayoutEntity layoutEntity : layoutEntities) {
+      ActiveWidgetLayoutResponse activeWidgetLayoutResponse  = getResponse(layoutEntity);
       Resource resource = new ResourceImpl(Type.ActiveWidgetLayout);
-      resource.setProperty(WIDGETLAYOUT_ID_PROPERTY_ID, layoutEntity.getId());
-      String clusterName = null;
-      try {
-        clusterName = getManagementController().getClusters().getClusterById(layoutEntity.getClusterId()).getClusterName();
-      } catch (AmbariException e) {
-        throw new SystemException(e.getMessage());
-      }
-      resource.setProperty(WIDGETLAYOUT_CLUSTER_NAME_PROPERTY_ID, clusterName);
-      resource.setProperty(WIDGETLAYOUT_LAYOUT_NAME_PROPERTY_ID, layoutEntity.getLayoutName());
-      resource.setProperty(WIDGETLAYOUT_SECTION_NAME_PROPERTY_ID, layoutEntity.getSectionName());
-      resource.setProperty(WIDGETLAYOUT_SCOPE_PROPERTY_ID, layoutEntity.getScope());
-      resource.setProperty(WIDGETLAYOUT_USERNAME_PROPERTY_ID, layoutEntity.getUserName());
-      resource.setProperty(WIDGETLAYOUT_DISPLAY_NAME_PROPERTY_ID, layoutEntity.getDisplayName());
-
-      List<HashMap> widgets = new ArrayList<HashMap>();
-      List<WidgetLayoutUserWidgetEntity> widgetLayoutUserWidgetEntityList = layoutEntity.getListWidgetLayoutUserWidgetEntity();
-      for (WidgetLayoutUserWidgetEntity widgetLayoutUserWidgetEntity : widgetLayoutUserWidgetEntityList) {
-        WidgetEntity widgetEntity = widgetLayoutUserWidgetEntity.getWidget();
-        HashMap<String, Object> widgetInfoMap = new HashMap<String, Object>();
-        widgetInfoMap.put("WidgetInfo",WidgetResponse.coerce(widgetEntity));
-        widgets.add(widgetInfoMap);
-      }
-      resource.setProperty(WIDGETLAYOUT_WIDGETS_PROPERTY_ID, widgets);
-
+      resource.setProperty(WIDGETLAYOUT_ID_PROPERTY_ID, activeWidgetLayoutResponse.getId());
+      resource.setProperty(WIDGETLAYOUT_CLUSTER_NAME_PROPERTY_ID, activeWidgetLayoutResponse.getClusterName());
+      resource.setProperty(WIDGETLAYOUT_LAYOUT_NAME_PROPERTY_ID, activeWidgetLayoutResponse.getLayoutName());
+      resource.setProperty(WIDGETLAYOUT_SECTION_NAME_PROPERTY_ID, activeWidgetLayoutResponse.getSectionName());
+      resource.setProperty(WIDGETLAYOUT_SCOPE_PROPERTY_ID, activeWidgetLayoutResponse.getScope());
+      resource.setProperty(WIDGETLAYOUT_USERNAME_PROPERTY_ID, activeWidgetLayoutResponse.getUserName());
+      resource.setProperty(WIDGETLAYOUT_DISPLAY_NAME_PROPERTY_ID, activeWidgetLayoutResponse.getDisplayName());
+      resource.setProperty(WIDGETLAYOUT_WIDGETS_PROPERTY_ID, activeWidgetLayoutResponse.getWidgets());
       resources.add(resource);
     }
     return resources;
   }
 
+  /**
+   * Returns the response for the active widget layout that should be returned for the active widget layout REST endpoint
+   * @param layoutEntity {@link WidgetLayoutEntity}
+   * @return  {@link ActiveWidgetLayoutResponse}
+   * @throws SystemException
+   */
+  private ActiveWidgetLayoutResponse getResponse(WidgetLayoutEntity layoutEntity) throws SystemException {
+    String clusterName = null;
+    try {
+      clusterName = getManagementController().getClusters().getClusterById(layoutEntity.getClusterId()).getClusterName();
+    } catch (AmbariException e) {
+      throw new SystemException(e.getMessage());
+    }
+    List<HashMap<String,WidgetResponse>> widgets = new ArrayList<HashMap<String,WidgetResponse>>();
+    List<WidgetLayoutUserWidgetEntity> widgetLayoutUserWidgetEntityList = layoutEntity.getListWidgetLayoutUserWidgetEntity();
+    for (WidgetLayoutUserWidgetEntity widgetLayoutUserWidgetEntity : widgetLayoutUserWidgetEntityList) {
+      WidgetEntity widgetEntity = widgetLayoutUserWidgetEntity.getWidget();
+      HashMap<String, WidgetResponse> widgetInfoMap = new HashMap<String, WidgetResponse>();
+      widgetInfoMap.put("WidgetInfo",WidgetResponse.coerce(widgetEntity));
+      widgets.add(widgetInfoMap);
+    }
+   return  new ActiveWidgetLayoutResponse(layoutEntity.getId(), clusterName, layoutEntity.getDisplayName(), layoutEntity.getLayoutName(),
+      layoutEntity.getSectionName(), layoutEntity.getScope(), layoutEntity.getUserName(),  widgets);
+  }
+
   @Override
   public RequestStatus updateResources(Request request, Predicate predicate)
     throws SystemException, UnsupportedPropertyException, NoSuchResourceException, NoSuchParentResourceException {

http://git-wip-us.apache.org/repos/asf/ambari/blob/fb86fb3b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/GroupPrivilegeResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/GroupPrivilegeResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/GroupPrivilegeResourceProvider.java
index bf63794..38c39f3 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/GroupPrivilegeResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/GroupPrivilegeResourceProvider.java
@@ -25,6 +25,8 @@ import java.util.Map;
 import java.util.Set;
 
 import org.apache.ambari.server.StaticallyInject;
+import org.apache.ambari.server.controller.GroupPrivilegeResponse;
+import org.apache.ambari.server.controller.PrivilegeResponse;
 import org.apache.ambari.server.controller.spi.NoSuchParentResourceException;
 import org.apache.ambari.server.controller.spi.NoSuchResourceException;
 import org.apache.ambari.server.controller.spi.Predicate;
@@ -188,7 +190,8 @@ public class GroupPrivilegeResourceProvider extends ReadOnlyResourceProvider {
         final Collection<PrivilegeEntity> privileges = users.getGroupPrivileges(groupEntity);
 
         for (PrivilegeEntity privilegeEntity : privileges) {
-          resources.add(toResource(privilegeEntity, groupName, requestedIds));
+          GroupPrivilegeResponse response = getResponse(privilegeEntity, groupName);
+          resources.add(toResource(response, requestedIds));
         }
       }
     }
@@ -197,50 +200,83 @@ public class GroupPrivilegeResourceProvider extends ReadOnlyResourceProvider {
   }
 
   /**
-   * Translate the found data into a Resource
-   *
+   * Returns the response for the group privilege that should be returned for the group privilege REST endpoint
    * @param privilegeEntity the privilege data
-   * @param groupName        the group name
-   * @param requestedIds    the relevant request ids
-   * @return a resource
+   * @param groupName    the group name
+   * @return group privilege response
    */
-  protected Resource toResource(PrivilegeEntity privilegeEntity, Object groupName, Set<String> requestedIds) {
-    final ResourceImpl resource = new ResourceImpl(Resource.Type.GroupPrivilege);
+  protected GroupPrivilegeResponse getResponse(PrivilegeEntity privilegeEntity, String groupName) {
+    String permissionLabel = privilegeEntity.getPermission().getPermissionLabel();
+    String permissionName =  privilegeEntity.getPermission().getPermissionName();
+    String principalTypeName = privilegeEntity.getPrincipal().getPrincipalType().getName();
+    GroupPrivilegeResponse groupPrivilegeResponse = new GroupPrivilegeResponse(groupName, permissionLabel , permissionName,
+      privilegeEntity.getId(), PrincipalTypeEntity.PrincipalType.valueOf(principalTypeName));
 
-    setResourceProperty(resource, PRIVILEGE_GROUP_NAME_PROPERTY_ID, groupName, requestedIds);
-    setResourceProperty(resource, PRIVILEGE_PRIVILEGE_ID_PROPERTY_ID, privilegeEntity.getId(), requestedIds);
-    setResourceProperty(resource, PRIVILEGE_PERMISSION_NAME_PROPERTY_ID, privilegeEntity.getPermission().getPermissionName(), requestedIds);
-    setResourceProperty(resource, PRIVILEGE_PERMISSION_LABEL_PROPERTY_ID, privilegeEntity.getPermission().getPermissionLabel(), requestedIds);
-    setResourceProperty(resource, PRIVILEGE_PRINCIPAL_TYPE_PROPERTY_ID, privilegeEntity.getPrincipal().getPrincipalType().getName(), requestedIds);
-
-    final String principalTypeName = privilegeEntity.getPrincipal().getPrincipalType().getName();
     if (principalTypeName.equals(PrincipalTypeEntity.GROUP_PRINCIPAL_TYPE_NAME)) {
       final GroupEntity groupEntity = groupDAO.findGroupByPrincipal(privilegeEntity.getPrincipal());
-      setResourceProperty(resource, PRIVILEGE_PRINCIPAL_NAME_PROPERTY_ID, groupEntity.getGroupName(), requestedIds);
+      groupPrivilegeResponse.setPrincipalName(groupEntity.getGroupName());
     }
 
+
     String typeName = privilegeEntity.getResource().getResourceType().getName();
     ResourceType resourceType = ResourceType.translate(typeName);
-    if (resourceType != null) {
+
+    if(resourceType != null) {
       switch (resourceType) {
         case AMBARI:
           // there is nothing special to add for this case
           break;
         case CLUSTER:
           final ClusterEntity clusterEntity = clusterDAO.findByResourceId(privilegeEntity.getResource().getId());
-          setResourceProperty(resource, PRIVILEGE_CLUSTER_NAME_PROPERTY_ID, clusterEntity.getClusterName(), requestedIds);
+          groupPrivilegeResponse.setClusterName(clusterEntity.getClusterName());
           break;
         case VIEW:
           final ViewInstanceEntity viewInstanceEntity = viewInstanceDAO.findByResourceId(privilegeEntity.getResource().getId());
           final ViewEntity viewEntity = viewInstanceEntity.getViewEntity();
 
-          setResourceProperty(resource, PRIVILEGE_VIEW_NAME_PROPERTY_ID, viewEntity.getCommonName(), requestedIds);
-          setResourceProperty(resource, PRIVILEGE_VIEW_VERSION_PROPERTY_ID, viewEntity.getVersion(), requestedIds);
-          setResourceProperty(resource, PRIVILEGE_INSTANCE_NAME_PROPERTY_ID, viewInstanceEntity.getName(), requestedIds);
+          groupPrivilegeResponse.setViewName(viewEntity.getCommonName());
+          groupPrivilegeResponse.setVersion(viewEntity.getVersion());
+          groupPrivilegeResponse.setInstanceName(viewInstanceEntity.getName());
+          break;
+      }
+
+      groupPrivilegeResponse.setType(resourceType);
+    }
+
+    return groupPrivilegeResponse;
+  }
+
+  /**
+   * Translate the Response into a Resource
+   * @param response        {@link PrivilegeResponse}
+   * @param requestedIds    the relevant request ids
+   * @return a resource
+   */
+  protected Resource toResource(GroupPrivilegeResponse response, Set<String> requestedIds) {
+    final ResourceImpl resource = new ResourceImpl(Resource.Type.GroupPrivilege);
+
+    setResourceProperty(resource, PRIVILEGE_GROUP_NAME_PROPERTY_ID, response.getGroupName(), requestedIds);
+    setResourceProperty(resource, PRIVILEGE_PRIVILEGE_ID_PROPERTY_ID, response.getPrivilegeId(), requestedIds);
+    setResourceProperty(resource, PRIVILEGE_PERMISSION_NAME_PROPERTY_ID, response.getPermissionName(), requestedIds);
+    setResourceProperty(resource, PRIVILEGE_PERMISSION_LABEL_PROPERTY_ID, response.getPermissionLabel(), requestedIds);
+    setResourceProperty(resource, PRIVILEGE_PRINCIPAL_TYPE_PROPERTY_ID, response.getPrincipalType().name(), requestedIds);
+    if (response.getPrincipalName() != null) {
+      setResourceProperty(resource, PRIVILEGE_PRINCIPAL_NAME_PROPERTY_ID, response.getPrincipalName(), requestedIds);
+    }
+
+    if (response.getType() != null) {
+      setResourceProperty(resource, PRIVILEGE_TYPE_PROPERTY_ID, response.getType().name(), requestedIds);
+      switch (response.getType()) {
+        case CLUSTER:
+          setResourceProperty(resource, PRIVILEGE_CLUSTER_NAME_PROPERTY_ID, response.getClusterName(), requestedIds);
+          break;
+        case VIEW:
+          setResourceProperty(resource, PRIVILEGE_VIEW_NAME_PROPERTY_ID, response.getViewName(), requestedIds);
+          setResourceProperty(resource, PRIVILEGE_VIEW_VERSION_PROPERTY_ID, response.getVersion(), requestedIds);
+          setResourceProperty(resource, PRIVILEGE_INSTANCE_NAME_PROPERTY_ID, response.getInstanceName(), requestedIds);
           break;
       }
 
-      setResourceProperty(resource, PRIVILEGE_TYPE_PROPERTY_ID, resourceType.name(), requestedIds);
     }
 
     return resource;

http://git-wip-us.apache.org/repos/asf/ambari/blob/fb86fb3b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UserAuthorizationResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UserAuthorizationResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UserAuthorizationResourceProvider.java
index 8193a49..6cb36db 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UserAuthorizationResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UserAuthorizationResourceProvider.java
@@ -27,6 +27,7 @@ import java.util.Set;
 
 import org.apache.ambari.server.StaticallyInject;
 import org.apache.ambari.server.controller.AmbariManagementController;
+import org.apache.ambari.server.controller.UserAuthorizationResponse;
 import org.apache.ambari.server.controller.predicate.EqualsPredicate;
 import org.apache.ambari.server.controller.spi.ClusterController;
 import org.apache.ambari.server.controller.spi.NoSuchParentResourceException;
@@ -251,7 +252,10 @@ public class UserAuthorizationResourceProvider extends ReadOnlyResourceProvider
 
     for (RoleAuthorizationEntity entity : authorizationEntities) {
       Resource resource = new ResourceImpl(Type.UserAuthorization);
-      setResourceProperty(resource, AUTHORIZATION_ID_PROPERTY_ID, entity.getAuthorizationId(), requestedIds);
+      String clusterName = (String)privilegeResource.getPropertyValue(UserPrivilegeResourceProvider.PRIVILEGE_CLUSTER_NAME_PROPERTY_ID);
+      UserAuthorizationResponse userAuthorizationResponse = getResponse(entity.getAuthorizationId(),
+        entity.getAuthorizationName(), clusterName, resourceType, username);
+      setResourceProperty(resource, AUTHORIZATION_ID_PROPERTY_ID, userAuthorizationResponse.getAuthorizationId(), requestedIds);
       setResourceProperty(resource, USERNAME_PROPERTY_ID, username, requestedIds);
       setResourceProperty(resource, AUTHORIZATION_NAME_PROPERTY_ID, entity.getAuthorizationName(), requestedIds);
       setResourceProperty(resource, AUTHORIZATION_RESOURCE_TYPE_PROPERTY_ID, resourceType, requestedIds);
@@ -263,6 +267,7 @@ public class UserAuthorizationResourceProvider extends ReadOnlyResourceProvider
     }
   }
 
+
   /**
    * Creates and adds resources to the results where each resource properly identities the view
    * to which the authorization data applies.
@@ -291,21 +296,58 @@ public class UserAuthorizationResourceProvider extends ReadOnlyResourceProvider
                                 Set<String> requestedIds) {
     for (RoleAuthorizationEntity entity : authorizationEntities) {
       Resource resource = new ResourceImpl(Type.UserAuthorization);
-      setResourceProperty(resource, AUTHORIZATION_ID_PROPERTY_ID, entity.getAuthorizationId(), requestedIds);
-      setResourceProperty(resource, USERNAME_PROPERTY_ID, username, requestedIds);
-      setResourceProperty(resource, AUTHORIZATION_NAME_PROPERTY_ID, entity.getAuthorizationName(), requestedIds);
-      setResourceProperty(resource, AUTHORIZATION_RESOURCE_TYPE_PROPERTY_ID, resourceType, requestedIds);
-      setResourceProperty(resource, AUTHORIZATION_VIEW_NAME_PROPERTY_ID,
-          privilegeResource.getPropertyValue(UserPrivilegeResourceProvider.PRIVILEGE_VIEW_NAME_PROPERTY_ID),
+      String viewName = (String)privilegeResource.getPropertyValue(UserPrivilegeResourceProvider.PRIVILEGE_VIEW_NAME_PROPERTY_ID);
+      String viewVersion = (String)privilegeResource.getPropertyValue(UserPrivilegeResourceProvider.PRIVILEGE_VIEW_VERSION_PROPERTY_ID);
+      String viewInstanceName = (String)privilegeResource.getPropertyValue(UserPrivilegeResourceProvider.PRIVILEGE_INSTANCE_NAME_PROPERTY_ID);
+      UserAuthorizationResponse userAuthorizationResponse = getResponse(entity.getAuthorizationId(),
+        entity.getAuthorizationName(), resourceType, username, viewName, viewVersion, viewInstanceName);
+      setResourceProperty(resource, AUTHORIZATION_ID_PROPERTY_ID, userAuthorizationResponse.getAuthorizationId(), requestedIds);
+      setResourceProperty(resource, USERNAME_PROPERTY_ID, userAuthorizationResponse.getUserName(), requestedIds);
+      setResourceProperty(resource, AUTHORIZATION_NAME_PROPERTY_ID, userAuthorizationResponse.getAuthorizationName(), requestedIds);
+      setResourceProperty(resource, AUTHORIZATION_RESOURCE_TYPE_PROPERTY_ID, userAuthorizationResponse.getResourceType(), requestedIds);
+      setResourceProperty(resource, AUTHORIZATION_VIEW_NAME_PROPERTY_ID, userAuthorizationResponse.getViewName(),
           requestedIds);
-      setResourceProperty(resource, AUTHORIZATION_VIEW_VERSION_PROPERTY_ID,
-          privilegeResource.getPropertyValue(UserPrivilegeResourceProvider.PRIVILEGE_VIEW_VERSION_PROPERTY_ID),
+      setResourceProperty(resource, AUTHORIZATION_VIEW_VERSION_PROPERTY_ID, userAuthorizationResponse.getViewVersion(),
           requestedIds);
-      setResourceProperty(resource, AUTHORIZATION_VIEW_INSTANCE_NAME_PROPERTY_ID,
-          privilegeResource.getPropertyValue(UserPrivilegeResourceProvider.PRIVILEGE_INSTANCE_NAME_PROPERTY_ID),
+      setResourceProperty(resource, AUTHORIZATION_VIEW_INSTANCE_NAME_PROPERTY_ID, userAuthorizationResponse.getViewInstanceName(),
           requestedIds);
 
       resources.add(resource);
     }
   }
+
+  /**
+   *  Returns user authorization response instance that represents the response schema
+   *  for /users/{userName}/authorizations REST endpoint
+   * @param authorizationId     authorization id
+   * @param authorizationName   authorization name
+   * @param clusterName         cluster name
+   * @param resourceType        resource type
+   * @param userName            user name
+   * @return {@link UserAuthorizationResponse}
+   */
+  private UserAuthorizationResponse getResponse(String authorizationId, String authorizationName,
+                                                                     String clusterName, String resourceType, String userName) {
+    return new UserAuthorizationResponse(authorizationId, authorizationName, clusterName, resourceType, userName);
+
+  }
+
+  /**
+   * Returns user authorization response instance that represents the response schema
+   * for /users/{userName}/authorizations REST endpoint
+   * @param authorizationId      authorization id
+   * @param authorizationName    authorization name
+   * @param resourceType         resource type
+   * @param userName             user name
+   * @param viewName             view name
+   * @param viewVersion          view version
+   * @param viewInstanceName     view instance name
+   * @return  {@link UserAuthorizationResponse}
+   */
+  private UserAuthorizationResponse getResponse(String authorizationId, String authorizationName,
+                                                                     String resourceType, String userName, String viewName,
+                                                                     String viewVersion, String viewInstanceName) {
+    return new UserAuthorizationResponse(authorizationId, authorizationName, resourceType, userName, viewName, viewVersion, viewInstanceName);
+
+  }
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/fb86fb3b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UserPrivilegeResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UserPrivilegeResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UserPrivilegeResourceProvider.java
index b9b756b..bb689ec 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UserPrivilegeResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UserPrivilegeResourceProvider.java
@@ -26,6 +26,8 @@ import java.util.Set;
 import java.util.TreeMap;
 import java.util.concurrent.TimeUnit;
 
+import org.apache.ambari.server.controller.PrivilegeResponse;
+import org.apache.ambari.server.controller.UserPrivilegeResponse;
 import org.apache.ambari.server.controller.spi.NoSuchParentResourceException;
 import org.apache.ambari.server.controller.spi.NoSuchResourceException;
 import org.apache.ambari.server.controller.spi.Predicate;
@@ -299,42 +301,38 @@ public class UserPrivilegeResourceProvider extends ReadOnlyResourceProvider {
         final Collection<PrivilegeEntity> privileges = users.getUserPrivileges(userEntity);
 
         for (PrivilegeEntity privilegeEntity : privileges) {
-          resources.add(toResource(privilegeEntity, userName, requestedIds));
+          UserPrivilegeResponse response = getResponse(privilegeEntity, userName);
+          resources.add(toResource(response, requestedIds));
         }
       }
     }
     return resources;
   }
 
-
   /**
-   * Translate the found data into a Resource
-   *
-   * @param privilegeEntity the privilege data
-   * @param userName        the username
-   * @param requestedIds    the relevant request ids
-   * @return a resource
+   * Returns response schema instance for /users/{userName}/privileges REST endpoint
+   * @param privilegeEntity {@link PrivilegeEntity}
+   * @param userName   user name
+   * @return {@link UserPrivilegeResponse}
    */
-  protected Resource toResource(PrivilegeEntity privilegeEntity, Object userName, Set<String> requestedIds){
-    final ResourceImpl resource = new ResourceImpl(Resource.Type.UserPrivilege);
-
-    setResourceProperty(resource, PRIVILEGE_USER_NAME_PROPERTY_ID, userName, requestedIds);
-    setResourceProperty(resource, PRIVILEGE_PRIVILEGE_ID_PROPERTY_ID, privilegeEntity.getId(), requestedIds);
-    setResourceProperty(resource, PRIVILEGE_PERMISSION_NAME_PROPERTY_ID, privilegeEntity.getPermission().getPermissionName(), requestedIds);
-    setResourceProperty(resource, PRIVILEGE_PERMISSION_LABEL_PROPERTY_ID, privilegeEntity.getPermission().getPermissionLabel(), requestedIds);
-    setResourceProperty(resource, PRIVILEGE_PRINCIPAL_TYPE_PROPERTY_ID, privilegeEntity.getPrincipal().getPrincipalType().getName(), requestedIds);
+  protected UserPrivilegeResponse getResponse(PrivilegeEntity privilegeEntity, String userName) {
+    String permissionLabel = privilegeEntity.getPermission().getPermissionLabel();
+    String permissionName =  privilegeEntity.getPermission().getPermissionName();
+    String principalTypeName = privilegeEntity.getPrincipal().getPrincipalType().getName();
+    UserPrivilegeResponse userPrivilegeResponse = new UserPrivilegeResponse(userName, permissionLabel , permissionName,
+      privilegeEntity.getId(), PrincipalTypeEntity.PrincipalType.valueOf(principalTypeName));
 
-    final String principalTypeName = privilegeEntity.getPrincipal().getPrincipalType().getName();
     if (principalTypeName.equals(PrincipalTypeEntity.USER_PRINCIPAL_TYPE_NAME)) {
       final UserEntity user = userDAO.findUserByPrincipal(privilegeEntity.getPrincipal());
-      setResourceProperty(resource, PRIVILEGE_PRINCIPAL_NAME_PROPERTY_ID, user.getUserName(), requestedIds);
+      userPrivilegeResponse.setPrincipalName(user.getUserName());
     } else if (principalTypeName.equals(PrincipalTypeEntity.GROUP_PRINCIPAL_TYPE_NAME)) {
       final GroupEntity groupEntity = getCachedGroupByPrincipal(privilegeEntity.getPrincipal());
-      setResourceProperty(resource, PRIVILEGE_PRINCIPAL_NAME_PROPERTY_ID, groupEntity.getGroupName(), requestedIds);
+      userPrivilegeResponse.setPrincipalName(groupEntity.getGroupName());
     }
 
     String typeName = privilegeEntity.getResource().getResourceType().getName();
     ResourceType resourceType = ResourceType.translate(typeName);
+
     if(resourceType != null) {
       switch (resourceType) {
         case AMBARI:
@@ -342,21 +340,57 @@ public class UserPrivilegeResourceProvider extends ReadOnlyResourceProvider {
           break;
         case CLUSTER:
           final ClusterEntity clusterEntity = clusterCache.get().getUnchecked(privilegeEntity.getResource().getId());
-          setResourceProperty(resource, PRIVILEGE_CLUSTER_NAME_PROPERTY_ID, clusterEntity.getClusterName(), requestedIds);
+          userPrivilegeResponse.setClusterName(clusterEntity.getClusterName());
           break;
         case VIEW:
           final ViewInstanceEntity viewInstanceEntity = viewInstanceCache.get().getUnchecked(privilegeEntity.getResource().getId());
           final ViewEntity viewEntity = viewInstanceEntity.getViewEntity();
 
-          setResourceProperty(resource, PRIVILEGE_VIEW_NAME_PROPERTY_ID, viewEntity.getCommonName(), requestedIds);
-          setResourceProperty(resource, PRIVILEGE_VIEW_VERSION_PROPERTY_ID, viewEntity.getVersion(), requestedIds);
-          setResourceProperty(resource, PRIVILEGE_INSTANCE_NAME_PROPERTY_ID, viewInstanceEntity.getName(), requestedIds);
+          userPrivilegeResponse.setViewName(viewEntity.getCommonName());
+          userPrivilegeResponse.setVersion(viewEntity.getVersion());
+          userPrivilegeResponse.setInstanceName(viewInstanceEntity.getName());
           break;
       }
 
-      setResourceProperty(resource, PRIVILEGE_TYPE_PROPERTY_ID, resourceType.name(), requestedIds);
+      userPrivilegeResponse.setType(resourceType);
+    }
+
+    return userPrivilegeResponse;
+  }
+
+  /**
+   * Translate the Response into a Resource
+   * @param response        {@link PrivilegeResponse}
+   * @param requestedIds    the relevant request ids
+   * @return a resource
+   */
+  protected Resource toResource(UserPrivilegeResponse response, Set<String> requestedIds){
+    final ResourceImpl resource = new ResourceImpl(Resource.Type.UserPrivilege);
+
+
+
+    setResourceProperty(resource, PRIVILEGE_USER_NAME_PROPERTY_ID, response.getUserName(), requestedIds);
+    setResourceProperty(resource, PRIVILEGE_PRIVILEGE_ID_PROPERTY_ID, response.getPrivilegeId(), requestedIds);
+    setResourceProperty(resource, PRIVILEGE_PERMISSION_NAME_PROPERTY_ID, response.getPermissionName(), requestedIds);
+    setResourceProperty(resource, PRIVILEGE_PERMISSION_LABEL_PROPERTY_ID, response.getPermissionLabel(), requestedIds);
+    setResourceProperty(resource, PRIVILEGE_PRINCIPAL_TYPE_PROPERTY_ID, response.getPrincipalType().name(), requestedIds);
+    if (response.getPrincipalName() != null) {
+      setResourceProperty(resource, PRIVILEGE_PRINCIPAL_NAME_PROPERTY_ID, response.getPrincipalName(), requestedIds);
     }
+    if (response.getType() != null) {
+      setResourceProperty(resource, PRIVILEGE_TYPE_PROPERTY_ID, response.getType().name(), requestedIds);
+      switch (response.getType()) {
+        case CLUSTER:
+          setResourceProperty(resource, PRIVILEGE_CLUSTER_NAME_PROPERTY_ID, response.getClusterName(), requestedIds);
+          break;
+        case VIEW:
+          setResourceProperty(resource, PRIVILEGE_VIEW_NAME_PROPERTY_ID, response.getViewName(), requestedIds);
+          setResourceProperty(resource, PRIVILEGE_VIEW_VERSION_PROPERTY_ID, response.getVersion(), requestedIds);
+          setResourceProperty(resource, PRIVILEGE_INSTANCE_NAME_PROPERTY_ID, response.getInstanceName(), requestedIds);
+          break;
+      }
 
+    }
     return resource;
   }
 }
\ No newline at end of file


Mime
View raw message