/** * Return the observable that represent the passed one without any of the traits it * may inherit. * * @param observable * @return naked observable */ public static IKnowledge getBaseObservable(IKnowledge observable) { if (!(observable instanceof IConcept)) { return observable; } if (getTraits(observable).isEmpty()) { return observable; } for (IConcept o : ((IConcept) observable).getParents()) { if (NS.isObservable(o)) { return getBaseObservable(o); } } return null; }
/** * Analyze an observable concept and return the main observable with all the original * identities and realms but no attributes; separately, return the list of the * attributes that were removed. * * @param observable * @return attribute profile * @throws KlabValidationException */ public static Pair<IConcept, Collection<IConcept>> separateAttributes(IKnowledge observable) throws KlabValidationException { IKnowledge obs = getBaseObservable(observable); ArrayList<IConcept> tret = new ArrayList<>(); ArrayList<IConcept> keep = new ArrayList<>(); for (IConcept zt : getTraits(observable)) { if (zt.is(KLAB.c(NS.CORE_IDENTITY_TRAIT)) || zt.is(KLAB.c(NS.CORE_REALM_TRAIT))) { keep.add(zt); } else { tret.add(zt); } } return new Pair<>(Observables.declareObservable((IConcept) (obs == null ? observable : obs), keep, Observables.getContextType(observable), Observables .getInherentType(observable)), tret); }