package net.enilink.komma.em.internal.query;
import java.util.Collections;
import java.util.Map;
import java.util.Set;
import net.enilink.composition.mappers.RoleMapper;
import net.enilink.komma.core.IReferenceable;
import net.enilink.komma.core.IUpdate;
import net.enilink.komma.core.IValue;
import net.enilink.komma.core.LockModeType;
import net.enilink.komma.core.URI;
import net.enilink.komma.dm.IDataManagerUpdate;
import net.enilink.komma.em.internal.IEntityManagerInternal;
import com.google.inject.Inject;
public class Update implements IUpdate {
protected IEntityManagerInternal manager;
protected IDataManagerUpdate update;
@Inject
RoleMapper<URI> roleMapper;
public Update(IEntityManagerInternal manager, IDataManagerUpdate update) {
this.manager = manager;
this.update = update;
}
private void doSetParameter(String name, IValue value) {
update.setParameter(name, value);
}
@Override
public void execute() {
update.execute();
}
@Override
public Map<String, Object> getHints() {
return Collections.emptyMap();
}
@Override
public LockModeType getLockMode() {
return LockModeType.NONE;
}
@Override
public Set<String> getSupportedHints() {
return Collections.emptySet();
}
@Override
public IUpdate setHint(String hintName, Object value) {
return this;
}
@Override
public IUpdate setLockMode(LockModeType lockMode) {
return this;
}
public IUpdate setParameter(String name, Object value) {
if (value == null) {
doSetParameter(name, null);
} else {
if (value instanceof IReferenceable) {
value = ((IReferenceable) value).getReference();
}
doSetParameter(name, value instanceof IValue ? (IValue) value
: manager.toValue(value));
}
return this;
}
public IUpdate setTypeParameter(String name, Class<?> concept) {
doSetParameter(name, roleMapper.findType(concept));
return this;
}
}