package edu.mayo.cts2.framework.webapp.soap.endpoint.mapversion;
import java.util.concurrent.Callable;
import org.springframework.ws.server.endpoint.annotation.Endpoint;
import org.springframework.ws.server.endpoint.annotation.PayloadRoot;
import org.springframework.ws.server.endpoint.annotation.RequestPayload;
import org.springframework.ws.server.endpoint.annotation.ResponsePayload;
import edu.mayo.cts2.framework.model.command.ResolvedReadContext;
import edu.mayo.cts2.framework.model.core.FormatReference;
import edu.mayo.cts2.framework.model.mapversion.MapEntry;
import edu.mayo.cts2.framework.model.mapversion.MapVersion;
import edu.mayo.cts2.framework.model.service.core.FunctionalProfileEntry;
import edu.mayo.cts2.framework.model.service.core.NameOrURI;
import edu.mayo.cts2.framework.model.service.core.ProfileElement;
import edu.mayo.cts2.framework.model.service.core.QueryControl;
import edu.mayo.cts2.framework.model.service.core.ReadContext;
import edu.mayo.cts2.framework.model.service.core.types.FunctionalProfile;
import edu.mayo.cts2.framework.model.service.core.types.ImplementationProfile;
import edu.mayo.cts2.framework.model.service.core.types.StructuralProfile;
import edu.mayo.cts2.framework.model.wsdl.baseservice.GetDefaultFormat;
import edu.mayo.cts2.framework.model.wsdl.baseservice.GetDefaultFormatResponse;
import edu.mayo.cts2.framework.model.wsdl.baseservice.GetImplementationType;
import edu.mayo.cts2.framework.model.wsdl.baseservice.GetImplementationTypeResponse;
import edu.mayo.cts2.framework.model.wsdl.baseservice.GetKnownNamespace;
import edu.mayo.cts2.framework.model.wsdl.baseservice.GetKnownNamespaceResponse;
import edu.mayo.cts2.framework.model.wsdl.baseservice.GetServiceDescription;
import edu.mayo.cts2.framework.model.wsdl.baseservice.GetServiceDescriptionResponse;
import edu.mayo.cts2.framework.model.wsdl.baseservice.GetServiceName;
import edu.mayo.cts2.framework.model.wsdl.baseservice.GetServiceNameResponse;
import edu.mayo.cts2.framework.model.wsdl.baseservice.GetServiceProvider;
import edu.mayo.cts2.framework.model.wsdl.baseservice.GetServiceProviderResponse;
import edu.mayo.cts2.framework.model.wsdl.baseservice.GetServiceVersion;
import edu.mayo.cts2.framework.model.wsdl.baseservice.GetServiceVersionResponse;
import edu.mayo.cts2.framework.model.wsdl.baseservice.GetSupportedFormat;
import edu.mayo.cts2.framework.model.wsdl.baseservice.GetSupportedFormatResponse;
import edu.mayo.cts2.framework.model.wsdl.baseservice.GetSupportedProfile;
import edu.mayo.cts2.framework.model.wsdl.baseservice.GetSupportedProfileResponse;
import edu.mayo.cts2.framework.model.wsdl.mapversionread.EntryExists;
import edu.mayo.cts2.framework.model.wsdl.mapversionread.EntryExistsResponse;
import edu.mayo.cts2.framework.model.wsdl.mapversionread.Exists;
import edu.mayo.cts2.framework.model.wsdl.mapversionread.ExistsMapVersionForMap;
import edu.mayo.cts2.framework.model.wsdl.mapversionread.ExistsMapVersionForMapResponse;
import edu.mayo.cts2.framework.model.wsdl.mapversionread.ExistsResponse;
import edu.mayo.cts2.framework.model.wsdl.mapversionread.Read;
import edu.mayo.cts2.framework.model.wsdl.mapversionread.ReadEntry;
import edu.mayo.cts2.framework.model.wsdl.mapversionread.ReadEntryResponse;
import edu.mayo.cts2.framework.model.wsdl.mapversionread.ReadMapVersionForMap;
import edu.mayo.cts2.framework.model.wsdl.mapversionread.ReadMapVersionForMapResponse;
import edu.mayo.cts2.framework.model.wsdl.mapversionread.ReadResponse;
import edu.mayo.cts2.framework.service.profile.mapentry.MapEntryReadService;
import edu.mayo.cts2.framework.service.profile.mapentry.name.MapEntryReadId;
import edu.mayo.cts2.framework.service.profile.mapversion.MapVersionReadService;
import edu.mayo.cts2.framework.webapp.soap.endpoint.AbstractReadServiceEndpoint;
@Endpoint("MapVersionReadServicesEndpoint")
public class MapVersionReadServicesEndpoint extends AbstractReadServiceEndpoint {
@Cts2Service
private MapVersionReadService mapVersionReadService;
@Cts2Service
private MapEntryReadService mapEntryReadService;
@PayloadRoot(localPart = "read", namespace = CTS2_NAMESPACE_ROOT + "MapVersionReadServices")
@ResponsePayload
public ReadResponse read(@RequestPayload Read request) {
MapVersion mapVersion = this.doRead(
this.mapVersionReadService,
request.getMapVersion(),
request.getQueryControl(),
request.getContext());
ReadResponse response = new ReadResponse();
response.setMapVersion(mapVersion);
return response;
}
@PayloadRoot(localPart = "readMapVersionForMap", namespace = CTS2_NAMESPACE_ROOT + "MapVersionReadServices")
@ResponsePayload
public ReadMapVersionForMapResponse readMapVersionForMap(@RequestPayload ReadMapVersionForMap request) {
MapVersion mapVersion = this.doReadMapVersionForMap(
this.mapVersionReadService,
request.getMap(),
request.getTag(),
request.getQueryControl(),
request.getContext());
ReadMapVersionForMapResponse response = new ReadMapVersionForMapResponse();
response.setMapVersion(mapVersion);
return response;
}
@PayloadRoot(localPart = "readEntry", namespace = CTS2_NAMESPACE_ROOT + "MapVersionReadServices")
@ResponsePayload
public ReadEntryResponse readEntry(@RequestPayload ReadEntry request) {
MapEntryReadId id = new MapEntryReadId(request.getSourceEntity(), request.getMapVersion());
MapEntry entry = this.mapEntryReadService.read(
id, null);
ReadEntryResponse response = new ReadEntryResponse();
response.setReturn(entry);
return response;
}
@PayloadRoot(localPart = "exists", namespace = CTS2_NAMESPACE_ROOT + "MapVersionReadServices")
@ResponsePayload
public ExistsResponse exists(@RequestPayload Exists request) {
boolean exists = this.mapVersionReadService.exists(
request.getMapVersion(),
this.resolveReadContext(request.getContext()));
ExistsResponse response = new ExistsResponse();
response.setReturn(exists);
return response;
}
@PayloadRoot(localPart = "existsMapVersionForMap", namespace = CTS2_NAMESPACE_ROOT + "MapVersionReadServices")
@ResponsePayload
public ExistsMapVersionForMapResponse existsMapVersionForMap(@RequestPayload ExistsMapVersionForMap request) {
boolean exists = this.mapVersionReadService.existsByTag(
request.getMap(),
this.resolveTag(request.getTag(), this.mapVersionReadService),
this.resolveReadContext(request.getContext()));
ExistsMapVersionForMapResponse response = new ExistsMapVersionForMapResponse();
response.setReturn(exists);
return response;
}
@PayloadRoot(localPart = "entryExists", namespace = CTS2_NAMESPACE_ROOT + "MapVersionReadServices")
@ResponsePayload
public EntryExistsResponse entryExists(@RequestPayload EntryExists request) {
MapEntryReadId id = new MapEntryReadId(request.getSourceEntity(), request.getMapVersion());
boolean exists = this.mapEntryReadService.exists(
id, null);
EntryExistsResponse response = new EntryExistsResponse();
response.setReturn(exists);
return response;
}
/*******************************************************/
/* BaseServices */
/*******************************************************/
@PayloadRoot(localPart = "getDefaultFormat", namespace = CTS2_NAMESPACE_ROOT + "BaseServiceTypes")
@ResponsePayload
public GetDefaultFormatResponse getDefaultFormat(@RequestPayload GetDefaultFormat request) {
FormatReference format = new FormatReference("SOAP");
GetDefaultFormatResponse response = new GetDefaultFormatResponse();
response.setReturn(format);
return response;
}
@PayloadRoot(localPart = "getImplementationType", namespace = CTS2_NAMESPACE_ROOT + "BaseServiceTypes")
@ResponsePayload
public GetImplementationTypeResponse getImplementationType(@RequestPayload GetImplementationType request) {
ImplementationProfile implementations[] = new ImplementationProfile[1];
implementations[0] = ImplementationProfile.IP_SOAP;
GetImplementationTypeResponse response = new GetImplementationTypeResponse();
response.setReturn(implementations);
return response;
}
@PayloadRoot(localPart = "getKnownNamespace", namespace = CTS2_NAMESPACE_ROOT + "BaseServiceTypes")
@ResponsePayload
public GetKnownNamespaceResponse getKnownNamespace(@RequestPayload GetKnownNamespace request) {
GetKnownNamespaceResponse response = new GetKnownNamespaceResponse();
response.setReturn(this.mapVersionReadService.getKnownNamespaceList());
return response;
}
@PayloadRoot(localPart = "getServiceDescription", namespace = CTS2_NAMESPACE_ROOT + "BaseServiceTypes")
@ResponsePayload
public GetServiceDescriptionResponse getServiceDescription(@RequestPayload GetServiceDescription request) {
GetServiceDescriptionResponse response = new GetServiceDescriptionResponse();
response.setReturn(this.mapVersionReadService.getServiceDescription());
return response;
}
@PayloadRoot(localPart = "getServiceName", namespace = CTS2_NAMESPACE_ROOT + "BaseServiceTypes")
@ResponsePayload
public GetServiceNameResponse getServiceName(@RequestPayload GetServiceName request) {
GetServiceNameResponse response = new GetServiceNameResponse();
response.setReturn(this.mapVersionReadService.getServiceName());
return response;
}
@PayloadRoot(localPart = "getServiceProvider", namespace = CTS2_NAMESPACE_ROOT + "BaseServiceTypes")
@ResponsePayload
public GetServiceProviderResponse getServiceProvider(@RequestPayload GetServiceProvider request) {
GetServiceProviderResponse response = new GetServiceProviderResponse();
response.setReturn(this.mapVersionReadService.getServiceProvider());
return response;
}
@PayloadRoot(localPart = "getServiceVersion", namespace = CTS2_NAMESPACE_ROOT + "BaseServiceTypes")
@ResponsePayload
public GetServiceVersionResponse getServiceVersion(@RequestPayload GetServiceVersion request) {
GetServiceVersionResponse response = new GetServiceVersionResponse();
response.setReturn(this.mapVersionReadService.getServiceVersion());
return response;
}
@PayloadRoot(localPart = "getSupportedFormat", namespace = CTS2_NAMESPACE_ROOT + "BaseServiceTypes")
@ResponsePayload
public GetSupportedFormatResponse getSupportedFormat(@RequestPayload GetSupportedFormat request) {
FormatReference format[] = new FormatReference[1];
format[0] = new FormatReference("SOAP");
GetSupportedFormatResponse response = new GetSupportedFormatResponse();
response.setReturn(format);
return response;
}
@PayloadRoot(localPart = "getSupportedProfile", namespace = CTS2_NAMESPACE_ROOT + "BaseServiceTypes")
@ResponsePayload
public GetSupportedProfileResponse getSupportedProfile(@RequestPayload GetSupportedProfile request) {
ProfileElement profile = new ProfileElement();
profile.setStructuralProfile(StructuralProfile.SP_MAP_VERSION);
FunctionalProfileEntry entry = new FunctionalProfileEntry();
entry.setContent(FunctionalProfile.FP_READ.name());
profile.addFunctionalProfile(entry);
ProfileElement profiles[] = new ProfileElement[1];
profiles[0] = profile;
GetSupportedProfileResponse response = new GetSupportedProfileResponse();
response.setReturn(profiles);
return response;
}
private MapVersion doReadMapVersionForMap(
final MapVersionReadService readService,
final NameOrURI map,
final NameOrURI tag,
final QueryControl queryControl,
final ReadContext context) {
final ResolvedReadContext resolvedReadContext = this.resolveReadContext(context);
return this.doTimedCall(new Callable<MapVersion>() {
@Override
public MapVersion call() throws Exception {
return readService.readByTag(
map,
resolveTag(tag, readService),
resolvedReadContext);
}
}, queryControl);
}
}