⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 abstractmodule.java

📁 这是一个segy数据显示程序
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/* ======================================================================== * JCommon : a free general purpose class library for the Java(tm) platform * ======================================================================== * * (C) Copyright 2000-2004, by Object Refinery Limited and Contributors. *  * Project Info:  http://www.jfree.org/jcommon/index.html * * This library is free software; you can redistribute it and/or modify it under the terms * of the GNU Lesser General Public License as published by the Free Software Foundation; * either version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License along with this * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, * Boston, MA 02111-1307, USA. * * [Java is a trademark or registered trademark of Sun Microsystems, Inc.  * in the United States and other countries.] *  * ------------------- * AbstractModule.java * ------------------- * (C)opyright 2003, 2004, by Thomas Morgner and Contributors. * * Original Author:  Thomas Morgner; * Contributor(s):   David Gilbert (for Object Refinery Limited); * * $Id: AbstractModule.java,v 1.2 2004/06/07 14:44:57 mungady Exp $ * * Changes * ------- * 05-Jul-2003 : Initial version * 07-Jun-2004 : Added JCommon header (DG); * */package org.jfree.base.modules;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.util.ArrayList;/** * The abstract module provides a default implementation of the module interface. * <p> * The module can be specified in an external property file. The file name of this * specification defaults to "module.properties". This file is no real property file, * it follows a more complex rule set. * <p> * Lines starting with '#' are considered comments. * Section headers start at the beginning of the line, section properties * are indented with at least one whitespace. * <p> * The first section is always the module info and contains the basic module * properties like name, version and a short description. * <p> * <pre> * module-info: *   name: xls-export-gui *   producer: The JFreeReport project - www.jfree.org/jfreereport *   description: A dialog component for the Excel table export. *   version.major: 0 *   version.minor: 84 *   version.patchlevel: 0 * </pre> * The properties name, producer and description are simple strings. They may * span multiple lines, but may not contain a colon (':'). * The version properties are integer values. * <p> * This section may be followed by one or more "depends" sections. These * sections describe the base modules that are required to be active to make this * module work. The package manager will enforce this policy and will deactivate this * module if one of the base modules is missing. * <p> * <pre> * depends: *   module: org.jfree.report.modules.output.table.xls.XLSTableModule *   version.major: 0 *   version.minor: 84 * </pre> * <p> * The property module references to the module implementation of the module package. * * @author Thomas Morgner */public abstract class AbstractModule extends DefaultModuleInfo implements Module{  /**   * The reader helper provides a pushback interface for the reader to read and   * buffer  complete lines.   * @author Thomas Morgner   */  private static class ReaderHelper  {    /** The line buffer containing the last line read. */    private String buffer;    /** The reader from which to read the text. */    private final BufferedReader reader;    /**     * Creates a new reader helper for the given buffered reader.     *     * @param reader the buffered reader that is the source of the text.     */    public ReaderHelper(final BufferedReader reader)    {      this.reader = reader;    }    /**     * Checks, whether the reader contains a next line. Returns false if the end     * of the stream has been reached.     *     * @return true, if there is a next line to read, false otherwise.     * @throws IOException if an error occures.     */    public boolean hasNext() throws IOException    {      if (buffer == null)      {        buffer = readLine();      }      return buffer != null;    }    /**     * Returns the next line.     *     * @return the next line.     */    public String next()    {      final String line = buffer;      buffer = null;      return line;    }    /**     * Pushes the given line back into the buffer. Only one line can be contained in     * the buffer at one time.     *     * @param line the line that should be pushed back into the buffer.     */    public void pushBack(final String line)    {      buffer = line;    }    /**     * Reads the next line skipping all comment lines.     *     * @return the next line, or null if no line can be read.     * @throws IOException if an IO error occures.     */    protected String readLine() throws IOException    {      String line = reader.readLine();      while (line != null && (line.length() == 0 || line.startsWith("#")))      {        // empty line or comment is ignored        line = reader.readLine();      }      return line;    }    /**     * Closes the reader.     *     * @throws IOException if an IOError occurs.     */    public void close() throws IOException    {      reader.close();    }  }  /** The list of required modules. */  private ModuleInfo[] requiredModules;  /** The list of optional modules. */  private ModuleInfo[] optionalModules;  /** The name of the module. */  private String name;  /** A short description of the module. */  private String description;  /** The name of the module producer. */  private String producer;  /** The modules subsystem. */  private String subsystem;  /**   * Default Constructor.   */  public AbstractModule()  {    setModuleClass(this.getClass().getName());  }  /**   * Loads the default module description from the file "module.properties". This file   * must be in the same package as the implementing class.   *   * @throws ModuleInitializeException if an error occurs.   */  protected void loadModuleInfo() throws ModuleInitializeException  {    final InputStream in = getClass().getResourceAsStream("module.properties");    if (in == null)    {      throw new ModuleInitializeException          ("File 'module.properties' not found in module package.");    }    loadModuleInfo(in);  }  /**   * Loads the module descriptiong from the given input stream. The module description   * must conform to the rules define in the class description. The file must be encoded   * with "ISO-8859-1" (like property files).   *   * @param in the input stream from where to read the file   * @throws ModuleInitializeException if an error occurs.   */  protected void loadModuleInfo(final InputStream in) throws ModuleInitializeException  {    try    {      if (in == null)      {        throw new NullPointerException            ("Given InputStream is null.");      }      final ReaderHelper rh = new ReaderHelper(new BufferedReader          (new InputStreamReader(in, "ISO-8859-1")));      final ArrayList optionalModules = new ArrayList();      final ArrayList dependendModules = new ArrayList();      while (rh.hasNext())      {        final String lastLineRead = rh.next();        if (lastLineRead.startsWith("module-info:"))        {          readModuleInfo(rh);        }        else if (lastLineRead.startsWith("depends:"))        {          dependendModules.add(readExternalModule(rh));        }        else if (lastLineRead.startsWith("optional:"))        {          optionalModules.add(readExternalModule(rh));        }        else        {          // we dont understand the current line, so we skip it ...          // should we throw a parse exception instead?        }      }      rh.close();      this.optionalModules = (ModuleInfo[])          optionalModules.toArray(new ModuleInfo[optionalModules.size()]);      this.requiredModules = (ModuleInfo[])          dependendModules.toArray(new ModuleInfo[dependendModules.size()]);    }    catch (IOException ioe)    {      throw new ModuleInitializeException("Failed to load properties", ioe);    }  }  /**   * Reads a multiline value the stream. This will read the stream until   * a new key is found or the end of the file is reached.   *   * @param reader the reader from where to read.   * @param firstLine the first line (which was read elsewhere).   * @return the complete value, never null   * @throws IOException if an IO error occurs.   */  private String readValue(final ReaderHelper reader, String firstLine) throws IOException  {    final StringBuffer b = new StringBuffer(firstLine.trim());    boolean newLine = true;    while (isNextLineValueLine(reader))    {      firstLine = reader.next();      final String trimedLine = firstLine.trim();      if (trimedLine.length() == 0 && (newLine == false))      {        b.append ("\n");        newLine = true;      }      else      {        if (newLine == false)        {          b.append(" ");        }        b.append(parseValue(trimedLine));        newLine = false;      }    }    return b.toString();  }  /**   * Checks, whether the next line in the reader is a value line.   *    * @param reader from where to read the lines.   * @return true, if the next line is a value line, false otherwise.   * @throws IOException if an IO error occurs.   */  private boolean isNextLineValueLine (final ReaderHelper reader) throws IOException  {    if (reader.hasNext() == false)    {      return false;    }    final String firstLine = reader.next();    if (firstLine == null)    {      return false;    }    if (parseKey(firstLine) != null)    {      reader.pushBack(firstLine);      return false;    }    reader.pushBack(firstLine);    return true;  }  /**   * Reads the module definition header. This header contains information about   * the module itself.   *   * @param reader the reader from where to read the content.   * @throws IOException if an error occures   */  private void readModuleInfo(final ReaderHelper reader) throws IOException  {    while (reader.hasNext())    {      final String lastLineRead = reader.next();      if (Character.isWhitespace(lastLineRead.charAt(0)) == false)      {        // break if the current character is no whitespace ...        reader.pushBack(lastLineRead);        return;      }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -