/* * 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 com.sun.jini.tool.envcheck; import com.sun.jini.tool.envcheck.Reporter.Message; import java.text.MessageFormat; import java.util.MissingResourceException; import java.util.ResourceBundle; /** * Base class for plugins providing rudimentary I18N support */ abstract public class AbstractPlugin implements Plugin { /** the resource bundle for the concrete class for this instance */ private ResourceBundle bundle = null; /** the resource bundle for this abstract class */ private static ResourceBundle abstractBundle = Util.getResourceBundle(com.sun.jini.tool.envcheck.EnvCheck.class); /** * Initialize the base class by obtaining the resource bundle * associated with the instantiated class. */ protected AbstractPlugin() { bundle = Util.getResourceBundle(getClass()); } //inherit javadoc public boolean isPluginOption(String opt) { return false; } /** * Get the resource bundle for this class. * * @return the resource bundle */ protected ResourceBundle getBundle() { return bundle; } /** * Get the format string associated with <code>key</code> from the * resource bundle for this class. * * @param key the key identifying the format string * @return the format string */ protected String getString(String key) { return Util.getString(key, bundle); } /** * Get the format string associated with <code>key</code> from the * resource bundle for this class. * * @param key the key identifying the format string * @param val the value to associate with {0} * @return the format string */ protected String getString(String key, Object val) { return Util.getString(key, bundle, val); } /** * Get the format string associated with <code>key</code> from the * resource bundle for this class. * * @param key the key identifying the format string * @param val1 the value to associate with {0} * @param val2 the value to associate with {1} * @return the format string */ protected String getString(String key, Object val1, Object val2) { return Util.getString(key, bundle, val1, val2); } /** * Get the format string associated with <code>key</code> from the * resource bundle for this class. * * @param key the key identifying the format string * @param v1 the value to associate with {0} * @param v2 the value to associate with {1} * @param v3 the value to associate with {2} * @return the format string */ protected String getString(String key, Object v1, Object v2, Object v3) { return Util.getString(key, bundle, v1, v2, v3); } /** * Return a fully qualified external class name for the given static * inner class name. * * @param name the unqualified name of the inner class * @return the fully qualified name */ protected String taskName(String name) { return getClass().getName() + "$" + name; } /** * Utility method which can be called to process objects of * unexpected type which are returned by a subtask. If * <code>returnedValue</code> is not a <code>Throwable</code>, * then <code>Thread.dumpStack()</code> is called to help located * the source of the problem. Otherwise a stacktrace is printed; * the <code>-traces</code> option does not affect this trace. * * @param returnedValue the object returned by the subtask * @param source descriptive text identifying the source at the time * the subtask was launched */ protected void handleUnexpectedSubtaskReturn(Object returnedValue, String source) { Message message; if (returnedValue == null) { message = new Message(Reporter.ERROR, Util.getString("abstractPlugin.nullvalue", abstractBundle), null); Reporter.print(message, source); Thread.dumpStack(); } else if (!(returnedValue instanceof Throwable)) { message = new Message(Reporter.ERROR, Util.getString("abstractPlugin.unknownObject", abstractBundle, returnedValue.toString()), null); Reporter.print(message, source); Thread.dumpStack(); } else { // force stack trace, don't pass exception in the message Throwable t = (Throwable) returnedValue; message = new Message(Reporter.ERROR, Util.getString("abstractPlugin.excReturn", abstractBundle, t.getMessage()), null); System.err.println(Util.getString("abstractPlugin.excReturn", abstractBundle, t.getMessage())); Reporter.print(message, source); t.printStackTrace(); } } }