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

📄 simplescripthandler.java

📁 jConfig,JAVA读取XML的开源项目
💻 JAVA
字号:
/*
 * ScriptHandler.java
 *
 * Created on 17. Dezember 2003, 21:52
 */

package org.jconfig.handler;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Iterator;
import java.util.Properties;
import java.util.SortedMap;
import java.util.TreeMap;
import java.util.Vector;

import org.jconfig.Category;
import org.jconfig.Configuration;
import org.jconfig.ConfigurationManagerException;
import org.jconfig.DefaultCategory;
import org.jconfig.ExtensibleConfiguration;
import org.jconfig.VariableManager;
import org.jconfig.error.ErrorReporter;
import org.jconfig.parser.ConfigurationParser;
import org.jconfig.utils.ResourceLocator;
/**
 * The SimpleScriptHandler will read in a text file. The file should
 * be anntotated where every line containing properties should start
 * with either spaces or tabs. Every other line is considered as
 * category.
 * <br/>
 * Example:
 * <pre>
 * basic:
 *   prop1: hello
 *   prop2: world
 *   
 * more:
 *   simple_one: 1 
 *</pre>
 *
 * @author Andreas Mecky
 * @author Terry Dye
 */
public class SimpleScriptHandler extends AbstractHandler {

	private String fileName;
    /**
     * Constructs a SimpleScriptHandler. Nothing special happens during construction.
     */
    public SimpleScriptHandler() {
    }

    /**
     * This method loads all files that are found ending with "_config.script".
     *
     * Example: my_config.script
     *
     * @param configurationName The name of the file to be found.
     * @return The configured/loaded Configuration
     * @throws ConfigurationManagerException thrown if the "_config.script" isn't found
     */
    public Configuration load(String configurationName) throws ConfigurationManagerException {
        fileName = configurationName+"_config.script";
		try {
			ResourceLocator locator = new ResourceLocator(fileName);
			InputStream is = locator.findResource(fileName);
			return load(configurationName,is);
		}
		catch (IOException e) {
			ErrorReporter.getErrorHandler().reportError("Error while trying to read file",e);
            throw new ConfigurationManagerException("Error while trying to read file");
		}
    }
	
	public Configuration load(String configurationName,String fileName) throws ConfigurationManagerException {
		try {
			InputStream is = new FileInputStream(fileName);
			return load(configurationName,is);
		}
		catch (Exception e) {
			ErrorReporter.getErrorHandler().reportError("Error while trying to read file",e);
            throw new ConfigurationManagerException("Error while trying to read file");
		}
	}
	
	public Configuration load(String configurationName,InputStream is) throws ConfigurationManagerException {
        try {
            BufferedReader nis = new BufferedReader(new InputStreamReader(is));            
            String line;
            Vector content = new Vector();
            while ((line=nis.readLine()) != null ) {
                content.add(line);
            }
            nis.close();
            boolean addVar = false;
            Configuration cfg = new ExtensibleConfiguration(configurationName);
            String currentCategoryName = null;
            for ( int i = 0; i < content.size();i++) {
                String tmp = (String)content.get(i);
                if ( tmp != null && tmp.length() > 0 && !tmp.startsWith("#") ) {
	                if ( tmp.startsWith(" ") || tmp.startsWith("\t") ) {
	                	if ( tmp.indexOf(":") != -1 ) {
		                	String left = tmp.substring(0,tmp.indexOf(":"));
		                    left = left.trim();
		                    String right = tmp.substring(tmp.indexOf(":")+1);
		                    right = right.trim();           
		                    if ( addVar ) {
		                    	cfg.setVariable(left,right);
		                    }
		                    else {
		                    	cfg.setProperty(left,right,currentCategoryName);
		                    }
	                	}
	                }
	                else {
	                	String name = tmp;
						name = name.trim();
	                    if ( name.endsWith(":")) {
	                    	name = name.substring(0,name.length()-1);
	                    }
	                    if ( name.equalsIgnoreCase("variables")) {
	                    	addVar = true;
	                    }
	                    else {
	                    	addVar = false;
		                    String extend = null;
		                    if ( name.startsWith("extends")) {
		                    	int pos = name.indexOf(":");
		                    	if ( pos != -1 ) {
		                    		cfg.setBaseConfiguration(name.substring(pos+1).trim());
		                    	}
		                    }
		                    else {
			                    if ( tmp.indexOf(" extends ") != -1 ) {
			                        extend = name.substring(name.indexOf(" extends ")+9);
			                        extend = extend.trim();
			                        name = name.substring(0,name.indexOf(" extends "));                            
			                    }
			                    Category ec = new DefaultCategory(name);
			                    if ( extend != null ) {
			                        ec.setExtendsCategory(extend);
			                    }
			                    cfg.setCategory(ec);
			                    currentCategoryName = name;
		                    }
	                    }
	                }
                }
            }
            return cfg;
        }
        catch (IOException e) {
        	ErrorReporter.getErrorHandler().reportError("Error while trying to read file",e);
            throw new ConfigurationManagerException("Error while trying to read file");
        }        
    }

    /**
     * This method is not yet implemented!
     * @param configuration
     * @throws ConfigurationManagerException
     */
    public void store(Configuration configuration) throws ConfigurationManagerException {
		StringBuffer buffer = new StringBuffer();
		if ( configuration.getBaseConfiguration() != null ) {
			buffer.append("extends : ");
			buffer.append(configuration.getBaseConfiguration());
			buffer.append("\n\n");
		}
		VariableManager vm = VariableManager.getInstance();
        Iterator it = vm.getVariables(configuration.getConfigName()).keySet().iterator();
        boolean vars = false;
        if (it.hasNext()) {
            buffer.append("variables:\n");
            vars = true;
        }
        while (it.hasNext()) {
            String varName = (String) it.next();
            String varText = (String) vm.getVariables(configuration.getConfigName()).get(varName);
			buffer.append("\t");
            buffer.append(varName);
            buffer.append(" : ");
            buffer.append(varText);
            buffer.append("\n");
        }
        if (vars) {
            buffer.append("\n");
        }
		String[] cats = configuration.getCategoryNames();
        for (int i = 0; i < cats.length; i++) {
            buffer.append(cats[i]);
            buffer.append(": \n");            
            SortedMap sm = getSortedProperties(cats[i],configuration);
            if (sm != null) {
                Iterator nit = sm.keySet().iterator();
                while (nit.hasNext()) {
                    String name = (String) nit.next();
                    String value = (String)sm.get(name);
                    buffer.append("\t");
                    buffer.append(name);
                    buffer.append(" : ");
                    buffer.append(value);
                    buffer.append("\n");
                }
                buffer.append("\n");
            }
        }
		try {
			FileWriter writer = new FileWriter(getFile());
			writer.write(buffer.toString());
			writer.close();
		}
		catch (Exception e) {
			throw new ConfigurationManagerException("Error while saving script:"+e.getMessage());
		}
    }
	
	protected SortedMap getSortedProperties(String categoryName,Configuration configuration) {
        Properties props = configuration.getProperties(categoryName);
        SortedMap sm = new TreeMap();
        if (props != null) {
            Iterator nit = props.keySet().iterator();
            while (nit.hasNext()) {
                String name = (String) nit.next();
                String value = props.getProperty(name);
                sm.put(name,value);
            }
            return sm;
        }
        return null;
    }

	public File getFile() {
		try {
			return new ResourceLocator(fileName).getFile();
		} catch (IOException e) {
			ErrorReporter.getErrorHandler().reportError("File not found",e);
			return null;
		}
	}
	
	public Configuration load(String configurationName, ConfigurationParser parser) throws ConfigurationManagerException {
		throw new ConfigurationManagerException("Using a specific parser with this handler is not supported");
	}
    
}

⌨️ 快捷键说明

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