public static <T> boolean setFeature( Object iUserObject, String elementName, Feature<T> feature, T value) { SchemaFeatures features = getSchemaFeature(iUserObject, elementName, feature); if (features == null) return false; T oldValue = features.getFeature(feature); features.setFeature(feature, value); // BROADCAST CHANGES TO ALL REGISTERED LISTENERS List<SchemaFeaturesChangeListener> listeners = Controller.getInstance().getListeners(SchemaFeaturesChangeListener.class); if (listeners != null) switch (feature.getType()) { case ACTION: for (SchemaFeaturesChangeListener listener : listeners) { listener.signalChangeAction(iUserObject, elementName, feature, oldValue, value); } break; case FIELD: for (SchemaFeaturesChangeListener listener : listeners) { listener.signalChangeField(iUserObject, elementName, feature, oldValue, value); } break; case EVENT: break; case CLASS: for (SchemaFeaturesChangeListener listener : listeners) { listener.signalChangeClass(iUserObject, feature, oldValue, value); } default: break; } return true; }