1 19 20 package org.netbeans.modules.tasklist.core.filter; 21 22 import java.beans.PropertyChangeEvent ; 23 import java.beans.PropertyChangeListener ; 24 import java.io.IOException ; 25 import java.util.ArrayList ; 26 import java.util.Iterator ; 27 import org.netbeans.spi.settings.Convertor; 28 import org.netbeans.spi.settings.DOMConvertor; 29 import org.netbeans.spi.settings.Saver; 30 import org.openide.ErrorManager; 31 import org.w3c.dom.Document ; 32 import org.w3c.dom.Element ; 33 import org.w3c.dom.Node ; 34 import org.w3c.dom.NodeList ; 35 36 37 44 public class FilterRepositoryConvertor extends DOMConvertor implements PropertyChangeListener { 45 46 private static final String ATTR_ACTIVE = "active"; 47 private static final String ELEM_FILTER = "Filter"; 48 private static final String ELEM_FILTERS = "Filters"; 49 50 54 private static Object create(org.openide.filesystems.FileObject fo) { 55 return new FilterRepositoryConvertor(); 56 } 57 58 private Saver saver; 59 60 61 public FilterRepositoryConvertor() { 62 super("-//NetBeans org.netbeans.modules.tasklist//DTD Filters 1.0//EN", "http://tasklist.netbeans.org/dtd/filters-1_0.dtd", ELEM_FILTERS); 65 } 66 67 protected Object readElement(org.w3c.dom.Element element) throws java.io.IOException , java.lang.ClassNotFoundException { 68 FilterRepository rep = new FilterRepository(); 69 int activeIndex = Integer.parseInt(element.getAttribute(ATTR_ACTIVE)); 70 71 Node child = element.getFirstChild(); 72 while (child != null) { 73 if ((child.getNodeType() == Node.ELEMENT_NODE)) { 74 Filter f = (Filter)this.delegateRead((Element )child); 75 rep.add(f); 76 } 77 child = child.getNextSibling(); 78 } 79 80 if (activeIndex != -1) { 81 rep.setActive((Filter)rep.get(activeIndex)); 82 } 83 84 return rep; 85 } 86 87 protected void writeElement(org.w3c.dom.Document document, org.w3c.dom.Element element, Object obj) throws java.io.IOException , org.w3c.dom.DOMException { 88 FilterRepository fr = (FilterRepository)obj; 89 element.setAttribute(ATTR_ACTIVE, Integer.toString(fr.indexOf(fr.getActive()))); 90 91 Iterator fit = fr.iterator(); 92 while (fit.hasNext()) { 93 Element childNode = this.delegateWrite(document, fit.next()); 94 element.appendChild(childNode); 95 } 96 } 97 98 public void registerSaver(Object obj, org.netbeans.spi.settings.Saver saver) { 99 this.saver = saver; 100 ((FilterRepository)obj).addPropertyChangeListener(this); 101 } 102 103 public void unregisterSaver(Object obj, org.netbeans.spi.settings.Saver saver) { 104 if (saver == null || saver != this.saver) { 105 ErrorManager.getDefault().notify(ErrorManager.ERROR, 106 new IllegalArgumentException ( 107 "Wrong argument for unregisterSaver(Object=" + obj + ", Saver=" + saver + ")")); } 110 ((FilterRepository)obj).removePropertyChangeListener(this); 111 this.saver = null; 112 } 113 114 115 public void propertyChange(PropertyChangeEvent evt) { 116 try { 117 saver.requestSave(); 118 } catch (IOException e) { 119 ErrorManager.getDefault().notify(e); 120 } 121 } 122 123 } 124 | Popular Tags |