public static String toCompactExternalId(Object cycObject, CycAccess access) throws CycConnectionException { if ((cycObject == null) || (!DefaultCycObject.isCycLObject(cycObject))) { throw new IllegalArgumentException(cycObject + "is not a valid CycL object."); } try { if (cycObject instanceof Number) { return CompactHLIDConverter.converter().toCompactHLId((Number) cycObject); } if (cycObject instanceof CycNumberImpl) { return CompactHLIDConverter.converter() .toCompactHLId(((CycNumberImpl) cycObject).getNumber()); } if (cycObject instanceof String) { return CompactHLIDConverter.converter().toCompactHLId((String) cycObject); } } catch (IOException ioe) { throw new CycConnectionException(ioe); } Object result = cycObjectToCompactExternalIdCache.get(cycObject); if (result != null) { return (String) result; } result = access .converse() .converseObject( "(compact-hl-external-id-string " + DefaultCycObject.stringApiValue(cycObject) + ")"); if (!(result instanceof String)) { throw new BaseClientRuntimeException("Got invalid result: " + result); } cycObjectToCompactExternalIdCache.put(cycObject, (String) result); return (String) result; }