package com.framsticks.parsers; import com.framsticks.params.*; // import org.apache.log4j.Logger; /** * @author Piotr Sniegowski */ public class Loaders { // private static final Logger log = Logger.getLogger(Loaders.class.getName()); public static FramsClass loadFramsClass(SourceInterface source) throws ConstructionException { final MultiParamLoader loader = new MultiParamLoader(); loader.setNewSource(source); final FramsClassBuilder builder = FramsClass.build(); final AccessInterface framsClassAccess = new ReflectionAccess(FramsClassBuilder.class, FramsClass.build().forClass(FramsClassBuilder.class)); AccessInterface paramBuilderAccess = new ReflectionAccess(ParamBuilder.class, FramsClass.build().forClass(ParamBuilder.class)); framsClassAccess.select(builder); loader.addAccessInterface(framsClassAccess); loader.addAccessInterface(paramBuilderAccess); loader.addListener(MultiParamLoader.Status.AfterObject, new MultiParamLoader.StatusListener() { @Override public void onStatusChange() { Object object = loader.returnObject(); if (object instanceof FramsClassBuilder) { return; } if (framsClassAccess.select(builder).tryAutoAppend(object)) { return; } throw new ConstructionException().msg("failed to interpretate object").arg("object", object); } }); try { loader.go(); return builder.finish(); } catch (Exception e) { throw new ConstructionException().msg("an error occurred while loading class description").arg("before", loader.getCurrentLine()).cause(e); } } }