/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package com.eas.client.model; import java.util.HashSet; import java.util.Set; import java.util.logging.Level; import java.util.logging.Logger; /** * * @author mg * @param <E> */ public class ModelEditingSupport<E extends Entity<?, ?, E>> { protected Set<ModelEditingListener<E>> listeners = new HashSet<>(); protected Set<ModelEditingValidator<E>> validators = new HashSet<>(); public ModelEditingSupport() { super(); } public void addListener(ModelEditingListener<E> l) { listeners.add(l); } public void removeListener(ModelEditingListener<E> l) { listeners.remove(l); } /** * Registers an <code>DatamodelEditingValidator</code>. The validator is * notified whenever an datamodel edit action will occur. * * @param v an <code>DatamodelEditingValidator</code> object * @see #removeValidator(com.eas.client.model.ModelEditingValidator) */ public synchronized void addValidator(ModelEditingValidator<E> v) { validators.add(v); } /** * Removes an <code>DatamodelEditingValidator</code>. * * @param v the <code>DatamodelEditingValidator</code> object to be removed * @see #addValidator(com.eas.client.model.ModelEditingValidator) */ public synchronized void removeValidator(ModelEditingValidator<E> v) { validators.remove(v); } public boolean checkRelationAddingValid(Relation<E> aRelation) { try { return validators.stream().noneMatch((v) -> (!v.validateRelationAdding(aRelation))); } catch (Exception ex) { Logger.getLogger(ModelEditingSupport.class.getName()).log(Level.SEVERE, "While firing an event (checkRelationAddingValid) ", ex); } return false; } public boolean checkRelationRemovingValid(Relation<E> aRelation) { try { return validators.stream().noneMatch((v) -> (!v.validateRelationRemoving(aRelation))); } catch (Exception ex) { Logger.getLogger(ModelEditingSupport.class.getName()).log(Level.SEVERE, "While firing an event (checkRelationRemovingValid) ", ex); } return false; } public boolean checkEntityAddingValid(E aEntity) { try { return validators.stream().noneMatch((v) -> (!v.validateEntityAdding(aEntity))); } catch (Exception ex) { Logger.getLogger(ModelEditingSupport.class.getName()).log(Level.SEVERE, "While firing an event (checkEntityAddingValid) ", ex); } return false; } public boolean checkEntityRemovingValid(E aEntity) { try { return validators.stream().noneMatch((v) -> (!v.validateEntityRemoving(aEntity))); } catch (Exception ex) { Logger.getLogger(ModelEditingSupport.class.getName()).log(Level.SEVERE, "While firing an event (checkEntityRemovingValid) ", ex); } return false; } public void fireEntityAdded(E ent) { try { if (listeners != null) { listeners.stream().filter((dl) -> (dl != null)).forEachOrdered((dl) -> { dl.entityAdded(ent); }); } } catch (Exception ex) { Logger.getLogger(ModelEditingSupport.class.getName()).log(Level.SEVERE, "While firing an event (fireEntityAdded) ", ex); } } public void fireEntityRemoved(E ent) { try { if (listeners != null) { listeners.stream().filter((dl) -> (dl != null)).forEachOrdered((dl) -> { dl.entityRemoved(ent); }); } } catch (Exception ex) { Logger.getLogger(ModelEditingSupport.class.getName()).log(Level.SEVERE, "While firing an event (fireEntityRemoved) ", ex); } } public void fireRelationAdded(Relation<E> aRel) { try { if (!(aRel instanceof DummyRelation)) { if (listeners != null) { listeners.stream().filter((dl) -> (dl != null)).forEachOrdered((dl) -> { dl.relationAdded(aRel); }); } } } catch (Exception ex) { Logger.getLogger(ModelEditingSupport.class.getName()).log(Level.SEVERE, "While firing an event (fireRelationAdded) ", ex); } } public void fireRelationRemoved(Relation<E> aRel) { try { if (!(aRel instanceof DummyRelation)) { if (listeners != null) { listeners.stream().filter((dl) -> (dl != null)).forEachOrdered((dl) -> { dl.relationRemoved(aRel); }); } } } catch (Exception ex) { Logger.getLogger(ModelEditingSupport.class.getName()).log(Level.SEVERE, "While firing an event (fireRelationRemoved) ", ex); } } public void fireIndexesChanged(E aEntity) { try { if (listeners != null) { listeners.stream().filter((dl) -> (dl != null)).forEachOrdered((dl) -> { dl.entityIndexesChanged(aEntity); }); } } catch (Exception ex) { Logger.getLogger(ModelEditingSupport.class.getName()).log(Level.SEVERE, "While firing an event (fireIndexesChanged) ", ex); } } }