/* Copyright (c) 2006 Ola Bini * * Permission is hereby granted, free of charge, to any person obtaining a copy of * this software and associated documentation files (the "Software"), to deal in * the Software without restriction, including without limitation the rights to * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies * of the Software, and to permit persons to whom the Software is furnished to do * so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ /** * $Id: ConstructorImpl.java,v 1.2 2006/08/18 15:51:46 olabini Exp $ */ package org.jvyaml; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.Map; import java.util.Set; import java.util.regex.Pattern;; /** * @author <a href="mailto:ola.bini@ki.se">Ola Bini</a> * @version $Revision: 1.2 $ */ public class ConstructorImpl extends SafeConstructorImpl { private final static Map yamlConstructors = new HashMap(); private final static Map yamlMultiConstructors = new HashMap(); private final static Map yamlMultiRegexps = new HashMap(); public YamlConstructor getYamlConstructor(final Object key) { YamlConstructor mine = (YamlConstructor)yamlConstructors.get(key); if(mine == null) { mine = super.getYamlConstructor(key); } return mine; } public YamlMultiConstructor getYamlMultiConstructor(final Object key) { YamlMultiConstructor mine = (YamlMultiConstructor)yamlMultiConstructors.get(key); if(mine == null) { mine = super.getYamlMultiConstructor(key); } return mine; } public Pattern getYamlMultiRegexp(final Object key) { Pattern mine = (Pattern)yamlMultiRegexps.get(key); if(mine == null) { mine = super.getYamlMultiRegexp(key); } return mine; } public Set getYamlMultiRegexps() { final Set all = new HashSet(super.getYamlMultiRegexps()); all.addAll(yamlMultiRegexps.keySet()); return all; } public static void addConstructor(final String tag, final YamlConstructor ctor) { yamlConstructors.put(tag,ctor); } public static void addMultiConstructor(final String tagPrefix, final YamlMultiConstructor ctor) { yamlMultiConstructors.put(tagPrefix,ctor); yamlMultiRegexps.put(tagPrefix,Pattern.compile("^"+tagPrefix)); } public ConstructorImpl(final Composer composer) { super(composer); } public static void main(final String[] args) throws Exception { final String filename = args[0]; System.out.println("Reading of file: \"" + filename + "\""); final StringBuffer input = new StringBuffer(); final java.io.Reader reader = new java.io.FileReader(filename); char[] buff = new char[1024]; int read = 0; while(true) { read = reader.read(buff); input.append(buff,0,read); if(read < 1024) { break; } } reader.close(); final String str = input.toString(); final long before = System.currentTimeMillis(); for(int i=0;i<1;i++) { final Constructor ctor = new ConstructorImpl(new ComposerImpl(new ParserImpl(new ScannerImpl(str)),new ResolverImpl())); for(final Iterator iter = ctor.eachDocument();iter.hasNext();iter.next()) { System.out.println(iter.next()); } } final long after = System.currentTimeMillis(); final long time = after-before; final double timeS = (after-before)/1000.0; System.out.println("Walking through the nodes for the file: " + filename + " took " + time + "ms, or " + timeS + " seconds"); } }// ConstructorImpl