FrameFactory.java

package edu.udel.cis.vsl.tass.state.impl;

import edu.udel.cis.vsl.tass.dynamic.IF.DynamicFactoryIF;
import edu.udel.cis.vsl.tass.model.IF.location.LocationIF;
import edu.udel.cis.vsl.tass.morph.MorphicFactory;
import edu.udel.cis.vsl.tass.morph.MorphicVector;
import edu.udel.cis.vsl.tass.morph.MorphicVectorFactory;
import edu.udel.cis.vsl.tass.state.IF.FrameIF;
import edu.udel.cis.vsl.tass.state.IF.ScopeStateIF;

public class FrameFactory extends MorphicFactory<FrameIF> {

	private MorphicVectorFactory<ScopeStateIF> scopeStateVectorFactory;

	private ScopeStateFactory scopeStateFactory;

	public FrameFactory(ScopeStateFactory scopeStateFactory) {
		this.scopeStateFactory = scopeStateFactory;
		this.scopeStateVectorFactory = new MorphicVectorFactory<ScopeStateIF>(
				scopeStateFactory);
	}

	public DynamicFactoryIF dynamicFactory() {
		return scopeStateFactory.dynamicFactory();
	}

	public FrameSimplifier simplifier() {
		return new FrameSimplifier(this);
	}

	public ScopeStateFactory scopeStateFactory() {
		return scopeStateFactory;
	}

	public MorphicVectorFactory<ScopeStateIF> scopeStateVectorFactory() {
		return scopeStateVectorFactory;
	}

	public Frame frame(LocationIF location,
			MorphicVector<ScopeStateIF> scopeStates) {
		Frame frame = new Frame(location, scopeStates);

		return frame;
	}

	@Override
	public void canonicalizeChildren(FrameIF frame) {
		((Frame) frame).canonicalizeChildren(scopeStateVectorFactory);
	}
}