Java tutorial
/*************************************************************************** * * * 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(); } }