All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.contextfw.web.application.internal.component.ScriptElementBuilder Maven / Gradle / Ivy

package net.contextfw.web.application.internal.component;

import net.contextfw.web.application.WebApplicationException;
import net.contextfw.web.application.component.DOMBuilder;
import net.contextfw.web.application.component.Script;
import net.contextfw.web.application.component.ScriptContext;

import com.google.gson.Gson;

class ScriptElementBuilder extends NamedBuilder {

    private final ScriptContext scriptContext;
    private final Gson gson;
    
    protected ScriptElementBuilder(
            ScriptContext scriptContext, 
            Gson gson, 
            PropertyAccess propertyAccess, 
            String name, 
            String accessName) {
        super(propertyAccess, name, accessName);
        this.scriptContext = scriptContext;
        this.gson = gson;
    }

    @Override
    void buildNamedValue(DOMBuilder b, String name, Object value) {
        if (value != null) {
        	if (value instanceof Script) {
        		((Script) value).build(b.descend(name), gson, scriptContext);
        	} else if (value instanceof Iterable) {
                for (Object i : ((Iterable) value)) {
                    ((Script) i).build(b.descend(name), gson, scriptContext);
                }
        	} else if (value instanceof Object[]) {
        	    for (Object i : ((Object[]) value)) {
        	        ((Script) i).build(b.descend(name), gson, scriptContext);
        	    }
        	}  else {
        	    throw new WebApplicationException("Instance of '"+value.getClass().getName()+"' is not a subclass of Script");
        	}
        }
    }
}