public static CIKey of(final String key, final Map<String, CIKey> knownKeys) {
        if (key == null) {
            return null;
        } else if (key.isEmpty()) {
            return EMPTY_STRING;
        } else {
            CIKey ciKey = null;
            if (knownKeys != null) {
                ciKey = knownKeys.get(key);
            }
            if (ciKey == null) {
                ciKey = CIKeys.getCommonKey(key);
                if (ciKey == null) {
                    ciKey = new CIKey(key);
                }
            }
            return ciKey;
        }
    }
Create a {@link CIKey} for key, providing a map of known {@link CIKey}s keyed
on their key value.
Will fall back on {@link CIKeys#commonKeys()} if not found in knownKeys.
Allows callers to hold their own local set of known {@link CIKey}s to save
re-creating them each time.
<p>
Is null safe. If key is null, returns null.
</p>
stroom-util-shared/src/main/java/stroom/util/shared/string/CIKey.java