// Path: src/de/uni_koblenz/west/splendid/config/FederationSailSchema.java
// public static final URI ESTIMATOR = vf.createURI(NAMESPACE + "cardEstimator");
// 
// Path: src/de/uni_koblenz/west/splendid/config/FederationSailSchema.java
// public static final URI EVAL_STRATEGY  = vf.createURI(NAMESPACE + "evalStrategy");
// 
// Path: src/de/uni_koblenz/west/splendid/config/FederationSailSchema.java
// public static final URI GROUP_BY_SAMEAS = vf.createURI(NAMESPACE + "groupBySameAs");
// 
// Path: src/de/uni_koblenz/west/splendid/config/FederationSailSchema.java
// public static final URI GROUP_BY_SOURCE = vf.createURI(NAMESPACE + "groupBySource");
// 
// Path: src/de/uni_koblenz/west/splendid/config/FederationSailSchema.java
// public static final URI OPT_TYPE  = vf.createURI(NAMESPACE + "optimizerType");
// 
// Path: src/de/uni_koblenz/west/splendid/config/FederationSailSchema.java
// public static final URI USE_BIND_JOIN = vf.createURI(NAMESPACE + "useBindJoin");
// 
// Path: src/de/uni_koblenz/west/splendid/config/FederationSailSchema.java
// public static final URI USE_HASH_JOIN = vf.createURI(NAMESPACE + "useHashJoin");


import org.openrdf.model.Resource;
import org.openrdf.model.ValueFactory;
import org.openrdf.model.impl.ValueFactoryImpl;
import org.openrdf.query.algebra.evaluation.EvaluationStrategy;
import org.openrdf.sail.config.SailConfigException;
import static de.uni_koblenz.west.splendid.config.FederationSailSchema.ESTIMATOR;
import static de.uni_koblenz.west.splendid.config.FederationSailSchema.EVAL_STRATEGY;
import static de.uni_koblenz.west.splendid.config.FederationSailSchema.GROUP_BY_SAMEAS;
import static de.uni_koblenz.west.splendid.config.FederationSailSchema.GROUP_BY_SOURCE;
import static de.uni_koblenz.west.splendid.config.FederationSailSchema.OPT_TYPE;
import static de.uni_koblenz.west.splendid.config.FederationSailSchema.USE_BIND_JOIN;
import static de.uni_koblenz.west.splendid.config.FederationSailSchema.USE_HASH_JOIN;
import org.openrdf.model.Graph;
import org.openrdf.model.Literal;
		Resource self = super.export(model);
		
		model.add(self, ESTIMATOR, vf.createLiteral(this.estimatorType));
		
		model.add(self, GROUP_BY_SAMEAS, vf.createLiteral(this.groupBySameAs));
		model.add(self, GROUP_BY_SOURCE, vf.createLiteral(this.groupBySource));
		
		model.add(self, USE_BIND_JOIN, vf.createLiteral(this.useBindJoin));
		model.add(self, USE_HASH_JOIN, vf.createLiteral(this.useHashJoin));
		
		model.add(self, EVAL_STRATEGY, vf.createLiteral(this.evalStrategy.getClass().getName()));
		
		return self;
	}

	@Override
	public void parse(Graph model, Resource implNode) throws SailConfigException {
		super.parse(model, implNode);
		
		Literal estimator = getObjectLiteral(model, implNode, ESTIMATOR);
		if (estimator != null) {
			this.estimatorType = estimator.getLabel();
		} else {
			this.estimatorType = DEFAULT_ESTIMATOR_TYPE;
		}
		
		this.groupBySameAs = getObjectBoolean(model, implNode, GROUP_BY_SAMEAS, this.groupBySameAs);
		this.groupBySource = getObjectBoolean(model, implNode, GROUP_BY_SOURCE, this.groupBySource);
		
		this.useBindJoin = getObjectBoolean(model, implNode, USE_BIND_JOIN, this.useBindJoin);
// Path: src/de/uni_koblenz/west/splendid/config/FederationSailSchema.java
// public static final URI ESTIMATOR = vf.createURI(NAMESPACE + "cardEstimator");
// 
// Path: src/de/uni_koblenz/west/splendid/config/FederationSailSchema.java
// public static final URI EVAL_STRATEGY  = vf.createURI(NAMESPACE + "evalStrategy");
// 
// Path: src/de/uni_koblenz/west/splendid/config/FederationSailSchema.java
// public static final URI GROUP_BY_SAMEAS = vf.createURI(NAMESPACE + "groupBySameAs");
// 
// Path: src/de/uni_koblenz/west/splendid/config/FederationSailSchema.java
// public static final URI GROUP_BY_SOURCE = vf.createURI(NAMESPACE + "groupBySource");
// 
// Path: src/de/uni_koblenz/west/splendid/config/FederationSailSchema.java
// public static final URI OPT_TYPE  = vf.createURI(NAMESPACE + "optimizerType");
// 
// Path: src/de/uni_koblenz/west/splendid/config/FederationSailSchema.java
// public static final URI USE_BIND_JOIN = vf.createURI(NAMESPACE + "useBindJoin");
// 
// Path: src/de/uni_koblenz/west/splendid/config/FederationSailSchema.java
// public static final URI USE_HASH_JOIN = vf.createURI(NAMESPACE + "useHashJoin");


// Path: src/de/uni_koblenz/west/splendid/config/QueryOptimizerConfig.java
import org.openrdf.model.Resource;
import org.openrdf.model.ValueFactory;
import org.openrdf.model.impl.ValueFactoryImpl;
import org.openrdf.query.algebra.evaluation.EvaluationStrategy;
import org.openrdf.sail.config.SailConfigException;
import static de.uni_koblenz.west.splendid.config.FederationSailSchema.ESTIMATOR;
import static de.uni_koblenz.west.splendid.config.FederationSailSchema.EVAL_STRATEGY;
import static de.uni_koblenz.west.splendid.config.FederationSailSchema.GROUP_BY_SAMEAS;
import static de.uni_koblenz.west.splendid.config.FederationSailSchema.GROUP_BY_SOURCE;
import static de.uni_koblenz.west.splendid.config.FederationSailSchema.OPT_TYPE;
import static de.uni_koblenz.west.splendid.config.FederationSailSchema.USE_BIND_JOIN;
import static de.uni_koblenz.west.splendid.config.FederationSailSchema.USE_HASH_JOIN;
import org.openrdf.model.Graph;
import org.openrdf.model.Literal;

		Resource self = super.export(model);
		
		model.add(self, ESTIMATOR, vf.createLiteral(this.estimatorType));
		
		model.add(self, GROUP_BY_SAMEAS, vf.createLiteral(this.groupBySameAs));
		model.add(self, GROUP_BY_SOURCE, vf.createLiteral(this.groupBySource));
		
		model.add(self, USE_BIND_JOIN, vf.createLiteral(this.useBindJoin));
		model.add(self, USE_HASH_JOIN, vf.createLiteral(this.useHashJoin));
		
		model.add(self, EVAL_STRATEGY, vf.createLiteral(this.evalStrategy.getClass().getName()));
		
		return self;
	}

	@Override
	public void parse(Graph model, Resource implNode) throws SailConfigException {
		super.parse(model, implNode);
		
		Literal estimator = getObjectLiteral(model, implNode, ESTIMATOR);
		if (estimator != null) {
			this.estimatorType = estimator.getLabel();
		} else {
			this.estimatorType = DEFAULT_ESTIMATOR_TYPE;
		}
		
		this.groupBySameAs = getObjectBoolean(model, implNode, GROUP_BY_SAMEAS, this.groupBySameAs);
		this.groupBySource = getObjectBoolean(model, implNode, GROUP_BY_SOURCE, this.groupBySource);
		
		this.useBindJoin = getObjectBoolean(model, implNode, USE_BIND_JOIN, this.useBindJoin);
		this.useHashJoin = getObjectBoolean(model, implNode, USE_HASH_JOIN, this.useHashJoin);