@SuppressWarnings("unchecked") public Optional<ITerminologyComponentUriResolver<IComponent<?>>> getUriResolver(String uri) { checkNotNull(uri, "URI must not be null."); if (!UriUtils.isTerminologyUri(uri)) { return Optional.absent(); } List<String> uriSegments = UriUtils.getUriSegments(uri); String terminologyOid = uriSegments.get(UriUtils.TERMINOLOGY_OID_INDEX); String terminologyId = CoreTerminologyBroker.getInstance().getTerminologyIdByOid(terminologyOid); IConfigurationElement[] configurationElements = Platform.getExtensionRegistry().getConfigurationElementsFor(URI_RESOLVER_EXTENSION_ID); for (final IConfigurationElement element : configurationElements) { try { if (terminologyId.equals(element.getAttribute(TERMINOLOGY_ATTRIBUTE_NAME))) { return Optional.of((ITerminologyComponentUriResolver<IComponent<?>>) element.createExecutableExtension(CLASS_ATTRIBUTE_NAME)); } } catch (CoreException e) { throw new RuntimeException("Error when instantiating terminology component URI resolver.", e); } } return Optional.absent(); } }