/* * ExecutionContext.java * * Created on July 24, 2007, 3:28 AM * * CodaServer and related original technologies are copyright 2008, 18th Street Software, LLC. * * Permission to use them is granted under the terms of the GNU GPLv2. */ package org.codalang.codaserver.executioncontext; import groovy.lang.GroovyClassLoader; import org.codalang.codaserver.CodaException; import org.codalang.codaserver.CodaServer; import org.codalang.codaserver.TypeParser; import org.codalang.codaserver.database.CodaDatabase; import java.util.Hashtable; import java.util.Vector; /** * * @author michaelarace */ public class ExecutionContext { private CodaServer server; private CodaDatabase database; private String applicationName; private int environment; private Hashtable<Long,TypeParser> types; private GroovyClassLoader classLoader; /** Creates a new instance of ExecutionContext */ public ExecutionContext(CodaServer server, CodaDatabase database) { this.server = server; this.database = database; types = server.getTypes(); classLoader = new GroovyClassLoader(server.getClassLoader()); } public ExecutionContext(CodaServer server, String applicationName, int environment) { this.server = server; this.database = server.getApplicationDatabase(applicationName, environment); this.applicationName = applicationName; this.environment = environment; types = server.getTypes(); this.classLoader = server.getDeployedApplication(applicationName).getEnvironmentClassLoader(environment, server.getClassLoader()); } public void setClassLoader(GroovyClassLoader classLoader) { this.classLoader = classLoader; } public GroovyClassLoader getClassLoader() { return classLoader; } public boolean validate(long typeId, String value) { if (!types.containsKey(typeId)) { TypeParser temp = server.getTypeParser(typeId); if (temp == null) { return false; } else { types.put(typeId, temp); } } return types.get(typeId).validate(value); } public Object parse(long typeId, String value) throws CodaException { if (!types.containsKey(typeId)) { TypeParser temp = server.getTypeParser(typeId); if (temp == null) { return false; } else { types.put(typeId, temp); } } return types.get(typeId).parse(value); } public String getDisplayName(long typeId) { if (!types.containsKey(typeId)) { TypeParser temp = server.getTypeParser(typeId); if (temp == null) { return ""; } else { types.put(typeId, temp); } } return TypeParser.getDisplayName(types.get(typeId).getTypeName()); } public CodaServer getServer() { return server; } public CodaDatabase getDatabase() { return database; } public Hashtable<String,String> getDistinctColumnsForTables(Vector<String> tables) { return server.getApplicationDatasource(applicationName, environment).getDistinctColumnsForTables(tables); } }