1 19 package org.netbeans.modules.xml.axi.impl; 20 21 import java.beans.PropertyChangeEvent ; 22 import java.beans.PropertyChangeListener ; 23 import java.util.ArrayList ; 24 import java.util.List ; 25 import org.netbeans.modules.xml.schema.model.SchemaComponent; 26 import org.netbeans.modules.xml.schema.model.SchemaModel; 27 28 32 public class SchemaModelListener implements PropertyChangeListener { 33 34 37 public SchemaModelListener(AXIModelImpl model) { 38 this.model = model; 39 } 40 41 45 boolean needsSync() { 46 return !events.isEmpty(); 47 } 48 49 void syncCompleted() { 50 events.clear(); 51 } 52 53 public void propertyChange(PropertyChangeEvent evt) { 54 assert(model != null); 55 if(model.isIntransaction() || !isValidEvent(evt)) 56 return; 57 58 events.add(evt); 59 ((ModelAccessImpl)model.getAccess()).setDirty(); 60 } 61 62 private boolean isValidEvent(PropertyChangeEvent evt) { 63 if(evt.getSource() instanceof SchemaModel) { 64 return true; 65 } 66 67 if(!(evt.getSource() instanceof SchemaComponent)) 68 return false; 69 70 SchemaComponent component = (SchemaComponent)evt.getSource(); 71 if( (evt.getOldValue() == null) && 72 (evt.getNewValue() != null) && 73 (evt.getNewValue() instanceof SchemaComponent) ) { 74 component = (SchemaComponent)evt.getNewValue(); 75 } 76 77 if( (evt.getNewValue() == null) && 78 (evt.getOldValue() != null) && 79 (evt.getOldValue() instanceof SchemaComponent) ) { 80 component = (SchemaComponent)evt.getOldValue(); 81 } 82 83 AXIModelBuilderQuery query = new AXIModelBuilderQuery(model); 85 return query.affectsModel(component); 86 } 87 88 private List <PropertyChangeEvent > events = new ArrayList <PropertyChangeEvent >(); 89 private AXIModelImpl model; 90 } 91 | Popular Tags |