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.view;
  
  import org.apache.ambari.view.cluster.Cluster;
  
  import java.util.Collection;
  import java.util.Map;
  
  /**
   * Context object available to the view components to provide access to
   * the view and instance attributes as well as run time information about
   * the current execution context.
   */
  public interface ViewContext {
  
    /**
     * Key for mapping a view context as a property.
     */
    public static final String CONTEXT_ATTRIBUTE = "ambari-view-context";
  
    /**
     * Get the current user name after auth_to_local conversion
     *
     * @return the current user name
     */
    public String getUsername();
  
    /**
     * Get the current ambari user.
     *
     * @return the current user name
     */
    public String getLoggedinUser();
  
    /**
     * Determine whether or not the access specified by the given permission name
     * is permitted for the given user.
     *
     * @param userName        the user name
     * @param permissionName  the permission name
     *
     * @throws SecurityException if the access specified by the given permission name
     *         is not permitted
     */
    public void hasPermission(String userName, String permissionName) throws SecurityException;
  
    /**
     * Get the view name.
     *
     * @return the view name
     */
    public String getViewName();
  
    /**
     * Get the view definition associated with this context.
     *
     * @return the view definition
     */
    public ViewDefinition getViewDefinition();
  
    /**
     * Get the view instance name.
     *
     * @return the view instance name; null if no instance is associated
     */
    public String getInstanceName();
  
    /**
     * Get the view instance definition associated with this context.
     *
     * @return the view instance definition; null if no instance is associated
     */
    public ViewInstanceDefinition getViewInstanceDefinition();
  
    /**
     * Get the property values specified to create the view instance.
     *
     * @return the view instance property values; null if no instance is associated
     */
    public Map<String, String> getProperties();
  
    /**
     * Save an instance data value for the given key.
     *
     * @param key    the key
     * @param value  the value
     *
     * @throws IllegalStateException    if no instance is associated
     * @throws IllegalArgumentException if updating the view instance fails validation
     */
    public void putInstanceData(String key, String value);
  
    /**
     * Get the instance data value for the given key.
     *
     * @param key  the key
     *
     * @return the instance data value; null if no instance is associated
     */
    public String getInstanceData(String key);
  
    /**
     * Get the instance data values.
     *
     * @return the view instance property values; null if no instance is associated
     */
    public Map<String, String> getInstanceData();
  
    /**
     * Remove the instance data value for the given key.
     *
     * @param key  the key
     *
     * @throws IllegalStateException if no instance is associated
     */
    public void removeInstanceData(String key);
  
    /**
     * Get a property for the given key from the ambari configuration.
     *
     * @param key  the property key
     *
     * @return the property value; null indicates that the configuration contains no mapping for the key
     */
    public String getAmbariProperty(String key);
  
    /**
     * Get the view resource provider for the given resource type.
     *
     * @param type  the resource type
     *
     * @return the resource provider; null if no instance is associated
     */
    public ResourceProvider<?> getResourceProvider(String type);
  
    /**
     * Get a URL stream provider.
     *
     * @return a stream provider
     */
    public URLStreamProvider getURLStreamProvider();
  
    /**
     * Get a URL connection provider.
     *
     * @return a connection provider
     */
    public URLConnectionProvider getURLConnectionProvider();
  
    /**
     * Get an Ambari stream provider.
     *
     * @return an Ambari stream provider
     */
    public AmbariStreamProvider getAmbariStreamProvider();
  
    /**
     * Get Ambari stream provider attached as cluster to the view
     * If view is not attached to ambari managed cluster then it will be null
     *
     * @return stream provider for the cluster
     */
    public AmbariStreamProvider getAmbariClusterStreamProvider();
  
    /**
     * Get a data store for view persistence entities.
     *
     * @return a data store; null if no instance is associated
     */
    public DataStore getDataStore();
  
    /**
     * Get all of the available view definitions.
     *
     * @return the view definitions
     */
    public Collection<ViewDefinition> getViewDefinitions();
  
    /**
     * Get all of the available view instance definitions.
     *
     * @return the view instance definitions
     */
    public Collection<ViewInstanceDefinition> getViewInstanceDefinitions();
  
    /**
     * Get a view controller associated with this context.
     *
     * @return the view controller
     */
    public ViewController getController();
  
    /**
     * Get the HTTP Impersonator.
     *
     * @return the HTTP Impersonator, which internally uses the App Cookie Manager
     *
     * @deprecated  As of release 2.0
     */
    @Deprecated
    public HttpImpersonator getHttpImpersonator();
  
    /**
     * Get the default settings for the Impersonator.
     *
     * @return the Impersonator settings.
     *
     * @deprecated  As of release 2.0
     */
    @Deprecated
    public ImpersonatorSetting getImpersonatorSetting();
  
    /**
     * Get the cluster associated with this view instance.
     *
     * @return the associated cluster; <code>null</code> if no cluster is associated
     */
    public Cluster getCluster();
  }
  