package org.rascalmpl.interpreter.cursors;
import java.util.Map;
import java.util.Set;
import org.rascalmpl.value.IConstructor;
import org.rascalmpl.value.IValue;
import org.rascalmpl.value.IWithKeywordParameters;
import org.rascalmpl.value.exceptions.FactTypeUseException;
public class WithKeywordParametersCursor extends Cursor implements IWithKeywordParameters<IConstructor> {
private IWithKeywordParameters<? extends IConstructor> kwp;
public WithKeywordParametersCursor(IWithKeywordParameters<? extends IConstructor> kwp) {
super(null);
this.kwp = kwp;
}
public WithKeywordParametersCursor(IWithKeywordParameters<? extends IConstructor> kwp, Context ctx) {
super(null, ctx);
this.kwp = kwp;
}
private IWithKeywordParameters<? extends IConstructor> getKWP() {
return kwp;
}
@Override
public IValue getParameter(String label) throws FactTypeUseException {
Context ctx = new WithKeywordParametersContext(getCtx(), label, getKWP());
return CursorFactory.makeCursor(getKWP().getParameter(label), ctx);
}
@Override
public IConstructor setParameter(String label, IValue newValue)
throws FactTypeUseException {
return new ConstructorCursor(getKWP().setParameter(label, newValue), getCtx());
}
@Override
public boolean hasParameter(String label) throws FactTypeUseException {
return getKWP().hasParameter(label);
}
@Override
public boolean hasParameters() {
return getKWP().hasParameters();
}
@Override
public Set<String> getParameterNames() {
return getKWP().getParameterNames();
}
@Override
public Map<String, IValue> getParameters() {
return getKWP().getParameters();
}
@Override
public IConstructor unsetParameter(String label) {
// TODO: @tijs check this?
return new ConstructorCursor(getKWP().unsetParameter(label));
}
@Override
public IConstructor unsetAll() {
// TODO: @tijs check this?
return new ConstructorCursor(getKWP().unsetAll());
}
@Override
public IConstructor setParameters(Map<String, IValue> params) {
return new ConstructorCursor(getKWP().setParameters(params), getCtx());
}
@Override
public <U extends IWithKeywordParameters<? extends IValue>> boolean equalParameters( U other) {
return getKWP().equalParameters(other);
}
}