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.chemistry.opencmis.commons.server;
  
  import java.io.File;
  import java.math.BigInteger;
  
  import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
  
  /**
   * An object implementing this interface holds context data of the current call.
   */
  public interface CallContext {
  
      /** Binding: AtomPub */
      String BINDING_ATOMPUB = "atompub";
      /** Binding: Web Services */
      String BINDING_WEBSERVICES = "webservices";
      /** Binding: Browser */
      String BINDING_BROWSER = "browser";
      /** Binding: Local */
      String BINDING_LOCAL = "local";
  
      /** Key: CMIS version (value is a CmisVersion) */
      String CMIS_VERSION = "cmisVersion";
  
      /** Key: repository id */
      String REPOSITORY_ID = "repositoryId";
      /** Key: username */
      String USERNAME = "username";
      /** Key: password */
      String PASSWORD = "password";
      /** Key: local */
      String LOCALE = "locale";
      /** Key: offset (value is a BigInteger) */
      String OFFSET = "offset";
      /** Key: length (value is a BigInteger) */
      String LENGTH = "length";
      String LOCALE_ISO639_LANGUAGE = "language";
      String LOCALE_ISO3166_COUNTRY = "country";
  
      /** Key: servlet context (value is a ServletContext) */
      String SERVLET_CONTEXT = "servletContext";
      /** Key: servlet request (value is a HttpServletRequest) */
      String HTTP_SERVLET_REQUEST = "httpServletRequest";
      /** Key: servlet response (value is a HttpServletResponse) */
      String HTTP_SERVLET_RESPONSE = "httpServletResponse";
  
      /** Key: temp directory */
      String TEMP_DIR = "tempDir";
      /** Key: memory threshold (values is an Integer) */
      String MEMORY_THRESHOLD = "memoryThreshold";
      /** Key: max content size (values is a Long) */
      String MAX_CONTENT_SIZE = "maxContentSize";
      /** Key: encrypt temp files (values is a Boolean) */
      String ENCRYPT_TEMP_FILE = "encryptTempFiles";
      /**
       * Key: factory for threshold streams (value is a
       * TempStoreOutputStreamFactory)
       */
      String STREAM_FACTORY = "streamFactory";
  
      /**
       * Returns the binding. Usually it returns
       * {@link CallContext#BINDING_ATOMPUB},
       * {@link CallContext#BINDING_WEBSERVICES},
       * {@link CallContext#BINDING_BROWSER} or {@link CallContext#BINDING_LOCAL}.
       * 
       * @return the binding
       */
      String getBinding();
  
      /**
       * Returns if {@code true} object infos can improve the performance.
       * 
       * @return if object infos are required
       */
      boolean isObjectInfoRequired();
  
      /**
       * Returns context data by key.
       * 
       * @param key
       *            the key
       * 
       * @return the data if the key is valid, {@code null} otherwise
       */
      Object get(String key);
  
      /**
       * Returns the CMIS version.
       * 
       * @return the CMIS version, not {@code null}
       */
      CmisVersion getCmisVersion();
  
      /**
       * Returns the repository ID.
       * 
       * @return the repository ID or {@code null} if it's a repository info call
       */
      String getRepositoryId();
  
      /**
       * Returns the user name.
       * 
       * @return the user name if provided
       */
      String getUsername();
  
      /**
       * Returns the password.
       * 
       * @return the password if provided
       */
      String getPassword();
  
      /**
       * Returns the locale.
       * 
       * @return the locale if set
       */
      String getLocale();
  
      /**
       * Returns the content offset.
       * 
       * @return the content offset if set, {@code null} otherwise
       */
      BigInteger getOffset();
  
      /**
       * Returns the content length.
       * 
       * @return the content length if set, {@code null} otherwise
       */
      BigInteger getLength();
  
      /**
       * Returns the temp directory.
       * 
       * @return the temp directory
       */
      File getTempDirectory();
  
      /**
       * Returns if temp files should be encrypted.
       * 
       * @return {@code true} if temp files should be encrypted, {@code false}
       *         otherwise
       */
      boolean encryptTempFiles();
  
      /**
       * Returns the memory threshold.
       * 
       * @return the memory threshold in bytes
       */
      int getMemoryThreshold();
  
      /**
       * Returns the max size of content.
       * 
       * @return the max content size in bytes
       */
      long getMaxContentSize();
  }
  