@Override
  public void lookupEntity(
      String displayName,
      final EntityDataLookupContext lookupContext,
      final AsyncCallback<Optional<OWLEntityData>> callback) {

    final String trimmedContent = displayName.trim();

    final ProjectId projectId = lookupContext.getProjectId();
    final Set<EntityType<?>> allowedEntityTypes = lookupContext.getAllowedEntityTypes();
    final EntityLookupRequest entityLookupRequest =
        new EntityLookupRequest(
            trimmedContent, EntityLookupRequestType.EXACT_MATCH_IGNORE_CASE, 5, allowedEntityTypes);
    lookupServiceAsync.lookupEntities(
        projectId,
        entityLookupRequest,
        new AsyncCallback<List<EntityLookupServiceResult>>() {
          @Override
          public void onFailure(Throwable caught) {
            callback.onFailure(caught);
          }

          @Override
          public void onSuccess(List<EntityLookupServiceResult> result) {
            Optional<OWLEntityData> entityData =
                getMatchingEntity(result, trimmedContent, lookupContext);
            callback.onSuccess(entityData);
            //                if (entityData.isPresent()) {
            //                    callback.onSuccess(entityData.get());
            //                    return;
            //                }
            ////                if (context.isIRIAllowed() && isAbsoluteIRI(trimmedContent)) {
            ////                    IRIData iriData = new IRIData(IRI.create(trimmedContent));
            ////                    return;
            ////                }
            ////
            ////                if (context.isLiteralAllowed()) {
            ////                    OWLLiteralData literalData = parseLiteralData(trimmedContent,
            // lang);
            ////                    handleSuccess(literalData, callback);
            ////                    return;
            ////                }
            //
            //                // TODO: Not matched allowed type
            //                callback.parsingFailure();
          }
        });
  }
 /**
  * Given a lookup result, gets the entity data which matches the current text in the editor.
  *
  * @param result
  * @param text
  * @return
  */
 private Optional<OWLEntityData> getMatchingEntity(
     List<EntityLookupServiceResult> result, String text, EntityDataLookupContext context) {
   if (result.isEmpty()) {
     return Optional.absent();
   }
   EntityLookupServiceResult lookupResult = result.get(0);
   final OWLEntityData lookedUpEntityData = lookupResult.getOWLEntityData();
   EntityType<?> entityType = lookedUpEntityData.getEntity().getEntityType();
   if (lookedUpEntityData.getBrowserText().equalsIgnoreCase(text)
       && context.getAllowedEntityTypes().contains(entityType)) {
     return Optional.of(lookedUpEntityData);
   } else {
     return Optional.absent();
   }
 }