package edu.mayo.cts2.framework.webapp.soap.endpoint;
import java.util.concurrent.Callable;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import edu.mayo.cts2.framework.model.command.ResolvedReadContext;
import edu.mayo.cts2.framework.model.core.VersionTagReference;
import edu.mayo.cts2.framework.model.exception.ExceptionFactory;
import edu.mayo.cts2.framework.model.service.core.NameOrURI;
import edu.mayo.cts2.framework.model.service.core.QueryControl;
import edu.mayo.cts2.framework.model.service.core.ReadContext;
import edu.mayo.cts2.framework.service.profile.ReadService;
import edu.mayo.cts2.framework.service.profile.TagAwareReadService;
public abstract class AbstractReadServiceEndpoint extends AbstractEndpoint {
protected <T,I> T doRead(
final ReadService<T,I> readService,
final I identifier,
final QueryControl queryControl,
ReadContext readContext){
final ResolvedReadContext resolvedReadContext = this.resolveReadContext(readContext);
return this.doTimedCall(new Callable<T>(){
@Override
public T call() throws Exception {
return readService.read(identifier, resolvedReadContext);
}
}, queryControl);
}
protected VersionTagReference resolveTag(NameOrURI tag, TagAwareReadService<?,?> readService ){
if(CollectionUtils.isNotEmpty(readService.getSupportedTags())){
for(VersionTagReference foundTag : readService.getSupportedTags()){
if(StringUtils.equals(tag.getName(), foundTag.getContent())
||
StringUtils.equals(tag.getUri(), foundTag.getUri())){
return foundTag;
}
}
}
throw ExceptionFactory.createUnsupportedVersionTag(tag, readService.getSupportedTags());
}
}