/* 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