esg.common.shell.ESGFEnv.java Source code

Java tutorial

Introduction

Here is the source code for esg.common.shell.ESGFEnv.java

Source

/***************************************************************************
*                                                                          *
*  Organization: Lawrence Livermore National Lab (LLNL)                    *
*   Directorate: Computation                                               *
*    Department: Computing Applications and Research                       *
*      Division: S&T Global Security                                       *
*        Matrix: Atmospheric, Earth and Energy Division                    *
*       Program: PCMDI                                                     *
*       Project: Earth Systems Grid Federation (ESGF) Data Node Software   *
*  First Author: Gavin M. Bell (gavin@llnl.gov)                            *
*                                                                          *
****************************************************************************
*                                                                          *
*   Copyright (c) 2009, Lawrence Livermore National Security, LLC.         *
*   Produced at the Lawrence Livermore National Laboratory                 *
*   Written by: Gavin M. Bell (gavin@llnl.gov)                             *
*   LLNL-CODE-420962                                                       *
*                                                                          *
*   All rights reserved. This file is part of the:                         *
*   Earth System Grid Federation (ESGF) Data Node Software Stack           *
*                                                                          *
*   For details, see http://esgf.org/esg-node/                             *
*   Please also read this link                                             *
*    http://esgf.org/LICENSE                                               *
*                                                                          *
*   * Redistribution and use in source and binary forms, with or           *
*   without modification, are permitted provided that the following        *
*   conditions are met:                                                    *
*                                                                          *
*   * Redistributions of source code must retain the above copyright       *
*   notice, this list of conditions and the disclaimer below.              *
*                                                                          *
*   * Redistributions in binary form must reproduce the above copyright    *
*   notice, this list of conditions and the disclaimer (as noted below)    *
*   in the documentation and/or other materials provided with the          *
*   distribution.                                                          *
*                                                                          *
*   Neither the name of the LLNS/LLNL nor the names of its contributors    *
*   may be used to endorse or promote products derived from this           *
*   software without specific prior written permission.                    *
*                                                                          *
*   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS    *
*   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT      *
*   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS      *
*   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL LAWRENCE    *
*   LIVERMORE NATIONAL SECURITY, LLC, THE U.S. DEPARTMENT OF ENERGY OR     *
*   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,           *
*   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT       *
*   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF       *
*   USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND    *
*   ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,     *
*   OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT     *
*   OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF     *
*   SUCH DAMAGE.                                                           *
*                                                                          *
***************************************************************************/
package esg.common.shell;

import jline.*;

import java.io.*;
import java.util.*;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.commons.logging.impl.*;

import esg.common.util.ESGFProperties;

/**
   Description:
   Encapsulates the "environment" of a given line of command execution
       
   Note: I could do this same thing with getting sexy with enums, but chose to K.I.S.S.
**/
public class ESGFEnv {

    private static Log log = LogFactory.getLog(ESGFEnv.class);

    ConsoleReader reader = null;
    PrintWriter writer = null;
    ESGFProperties env = null;
    Map<String, Object> context = null;

    //default "contexts (contextKeys)"
    public static final String DEFAULT = "asdfjkhaueowr_default";
    public static final String USER = "asdfjkhaueowr_user";
    public static final String SYS = "asdfjkhaueowr_system";

    ESGFEnv() {
    }

    ESGFEnv(ConsoleReader reader, PrintWriter writer, ESGFProperties env) {
        setReader(reader);
        setWriter(writer);
        this.env = env;
        context = new HashMap<String, Object>();
    }

    public ConsoleReader getReader() {
        return reader;
    }

    public ESGFEnv setReader(ConsoleReader reader) {
        this.reader = reader;
        return this;
    }

    public PrintWriter getWriter() {
        return writer;
    }

    public ESGFEnv setWriter(PrintWriter writer) {
        this.writer = writer;
        return this;
    }

    public ESGFProperties getEnv() {
        return env;
    }

    public String getEnv(String key) {
        return env.getProperty(key);
    }

    public Object getContext(String key) {
        return this.getContext(DEFAULT, key);
    }

    @SuppressWarnings("unchecked")
    public Object getContext(String contextKey, String key) {
        Map<String, Object> contextSubMap = (Map<String, Object>) context.get(contextKey);
        if (null == contextSubMap)
            return null;
        return contextSubMap.get(key);
    }

    public ESGFEnv putContext(String key, Object value) {
        return this.putContext(DEFAULT, key, value);
    }

    @SuppressWarnings("unchecked")
    public ESGFEnv putContext(String contextKey, String key, Object value) {
        Map<String, Object> contextSubMap = null;
        if (null == (contextSubMap = (Map<String, Object>) context.get(contextKey))) {
            contextSubMap = new HashMap<String, Object>();
        }
        contextSubMap.put(key, value);
        context.put(contextKey, contextSubMap);
        log.trace(context.toString());
        return this;
    }

    public Object removeContext(String contextKey) {
        return context.remove(contextKey);
    }

    @SuppressWarnings("unchecked")
    public Object removeContext(String contextKey, String key) {
        Map<String, Object> contextSubMap = null;
        if (null == (contextSubMap = (Map<String, Object>) context.get(contextKey))) {
            contextSubMap = new HashMap<String, Object>();
        }
        return contextSubMap.remove(key);
    }

    public ESGFEnv clearContext() {
        context.clear();
        return this;
    }

    @SuppressWarnings("unchecked")
    public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append("Env... \n");
        Map<String, Object> contextSubMap = null;
        for (String contextKey : context.keySet()) {
            contextSubMap = null;
            if (null != (contextSubMap = (Map<String, Object>) context.get(contextKey))) {
                if (contextKey.equals(SYS))
                    sb.append("SYS: ");
                if (contextKey.equals(USER))
                    sb.append("USER: ");
                if (contextKey.equals(DEFAULT))
                    sb.append("DEFAULT: ");
                sb.append(contextSubMap.toString() + "\n");
            }
        }
        return sb.toString();
    }

}