content: /*
   * 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
   *
   *     http://www.apache.org/licenses/LICENSE-2.0
   *
   * 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.security.authorization;
  
  /**
   * ResourceType is an enumeration of resources one which authorization tests may be performed.
   * <p/>
   * This data matches the <i>generic</i> values from the <code>adminresourcetype</code> table in the Ambari
   * database.  The enum name represents the <code>adminresourcetype.resource_type_name</code> value
   * and the internal value represents the <code>adminresourcetype.</code> value
   */
  public enum ResourceType {
    AMBARI(1),
    CLUSTER(2),
    VIEW(3);
  
    private final int id;
  
    /**
     * Constructor
     *
     * @param id the ID value for this ResourceType
     */
    ResourceType(int id) {
      this.id = id;
    }
  
    /**
     * Get's ID value for this ResourceType.
     * <p/>
     * This value represents the <code>adminresourcetype.resource_type_id</code> value for the resource type.
     *
     * @return an integer
     */
    public int getId() {
      return id;
    }
  
    /**
     * Safely translates a resource type to a ResourceType
     * <p/>
     * If a non-empty name is specified and does not match an enumerated value, assume that is is a
     * view since view types are declared as separate resource types.
     *
     * @param resourceTypeName an resource type name
     * @return a ResourceType or null if no translation can be made
     */
    public static ResourceType translate(String resourceTypeName) {
      if (resourceTypeName == null) {
        return null;
      } else {
        resourceTypeName = resourceTypeName.trim();
  
        if (resourceTypeName.isEmpty()) {
          return null;
        } else {
          try {
            return ResourceType.valueOf(resourceTypeName.toUpperCase());
          } catch (IllegalArgumentException e) {
            // Assume that this is a view since these resource types are listed separately.
            return VIEW;
          }
        }
      }
    }
  }
  