}
// check sub-resource locators for ambiguities
Map<UriTemplate, String> srlUriTemplates = new HashMap<UriTemplate, String>();
Map<UriTemplate, String> srlUriTemplatesWithSlash = new HashMap<UriTemplate, String>();
for (AbstractSubResourceLocator srl : resource.getSubResourceLocators()) {
UriTemplate srlUriTemplate = new UriTemplate(srl.getPath().getValue());
UriTemplate srlUriTemplateWithSlash =
srlUriTemplate.endsWithSlash() ? srlUriTemplate : new UriTemplate(srl.getPath().getValue() + '/');
if (srlUriTemplates.containsKey(srlUriTemplate)) {
issueList.add(new ResourceModelIssue(
resource,
ImplMessages.AMBIGUOUS_SRLS(resource.getResourceClass(), srlUriTemplate.getTemplate(), srlUriTemplates.get(srlUriTemplate)),
true));
} else {
if (srlUriTemplatesWithSlash.containsKey(srlUriTemplateWithSlash)) {
issueList.add(new ResourceModelIssue(
resource,
ImplMessages.AMBIGUOUS_SRLS(resource.getResourceClass(), srlUriTemplate.getTemplate(), srlUriTemplatesWithSlash.get(srlUriTemplate)),
true));
} else {
srlUriTemplatesWithSlash.put(srlUriTemplateWithSlash, srlUriTemplate.getTemplate());
}
srlUriTemplates.put(srlUriTemplate, srlUriTemplate.getTemplate());
}
}
// check resource methods for ambiguities
findOutMTAmbiguities(resource, resource.getResourceMethods(), new ResourceMethodAmbiguityErrMsgGenerator<AbstractResourceMethod>() {
void generateInErrMsg(AbstractResource resource, AbstractResourceMethod arm1, AbstractResourceMethod arm2, MediaType mt) {
issueList.add(new ResourceModelIssue(
resource,
ImplMessages.AMBIGUOUS_RMS_IN(resource.getResourceClass(), arm1.getHttpMethod(), mt, arm1.getMethod().getName(), arm2.getMethod().getName(), arm1.getSupportedInputTypes(), arm2.getSupportedInputTypes()),
true));
}
;
void generateOutErrMsg(AbstractResource resource, AbstractResourceMethod arm1, AbstractResourceMethod arm2, MediaType mt) {
issueList.add(new ResourceModelIssue(
resource,
ImplMessages.AMBIGUOUS_RMS_OUT(resource.getResourceClass(), arm1.getHttpMethod(), mt, arm1.getMethod().getName(), arm2.getMethod().getName(), arm1.getSupportedOutputTypes(), arm2.getSupportedOutputTypes()),
true));
}
;
});
// check sub-resource methods for ambiguities
findOutMTAmbiguities(resource, resource.getSubResourceMethods(), new ResourceMethodAmbiguityErrMsgGenerator<AbstractSubResourceMethod>() {
boolean isConflictingPaths(String path1, String path2) {
UriTemplate t1 = new UriTemplate(path1);
UriTemplate t2 = new UriTemplate(path2);
if (t1.equals(t2)) {
return true;
} else {
if (t1.endsWithSlash()) {
return (!t2.endsWithSlash()) && t1.equals(new UriTemplate(path2 + "/"));
} else {
return t2.endsWithSlash() && t2.equals(new UriTemplate(path1 + "/"));
}
}
}
;