private boolean compare(Object source, Object target, InternalWorkingMemory workingMemory) { BitSet sourceTraits = null; BitSet targetTraits = null; if (source instanceof Thing) { sourceTraits = ((TraitableBean) ((Thing) source).getCore()).getCurrentTypeCode(); } else if (source instanceof TraitableBean) { sourceTraits = ((TraitableBean) source).getCurrentTypeCode(); } else { TraitableBean tbean = lookForWrapper(source, workingMemory); if (tbean != null) { sourceTraits = tbean.getCurrentTypeCode(); } } if (target instanceof Class) { CodedHierarchy x = ((ReteooRuleBase) workingMemory.getRuleBase()) .getConfiguration() .getComponentFactory() .getTraitRegistry() .getHierarchy(); targetTraits = x.getCode(((Class) target).getName()); } else if (target instanceof String) { CodedHierarchy x = ((ReteooRuleBase) workingMemory.getRuleBase()) .getConfiguration() .getComponentFactory() .getTraitRegistry() .getHierarchy(); targetTraits = x.getCode(target); } else if (target instanceof Thing) { targetTraits = ((TraitableBean) ((Thing) target).getCore()).getCurrentTypeCode(); } else if (target instanceof TraitableBean) { targetTraits = ((TraitableBean) target).getCurrentTypeCode(); } else { TraitableBean tbean = lookForWrapper(target, workingMemory); if (tbean != null) { targetTraits = tbean.getCurrentTypeCode(); } } if (sourceTraits == null || targetTraits == null) { return getOperator().isNegated(); } return isA(sourceTraits, targetTraits) ^ getOperator().isNegated(); }
private BitSet getCode(Object value, CodedHierarchy x) { if (value instanceof Class) { String typeName = ((Class) value).getName(); return x.getCode(typeName); } else if (value instanceof String) { return x.getCode(value); } else if (value instanceof Collection) { BitSet code = null; for (Object o : ((Collection) value)) { if (code == null) { code = (BitSet) getCode(o, x).clone(); } else { code.and(getCode(o, x)); } } return code; } throw new UnsupportedOperationException(" IsA Operator : Unsupported literal " + value); }