package org.signalml.app.model.monitor; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import org.apache.log4j.Logger; import org.signalml.plugin.export.signal.Document; import org.signalml.app.document.DocumentManager; import org.signalml.app.document.DocumentManagerEvent; import org.signalml.app.document.DocumentManagerListener; import org.signalml.app.document.ManagedDocumentType; import org.signalml.app.document.MonitorSignalDocument; import org.signalml.plugin.export.view.AbstractTreeModel; /** MonitorTreeModel * */ public class MonitorTreeModel extends AbstractTreeModel implements DocumentManagerListener, PropertyChangeListener { protected static final Logger logger = Logger.getLogger(MonitorTreeModel.class); private static final String ROOT_NODE = "monitorTree.root"; private DocumentManager documentManager; public DocumentManager getDocumentManager() { return documentManager; } public void setDocumentManager(DocumentManager documentManager) { this.documentManager = documentManager; } @Override public Object getChild(Object parent, int index) { if (parent == ROOT_NODE) { return documentManager.getDocumentAt(ManagedDocumentType.MONITOR, index); } return null; } @Override public int getChildCount(Object parent) { if (parent == ROOT_NODE) { return documentManager.getDocumentCount(ManagedDocumentType.MONITOR); } return 0; } @Override public int getIndexOfChild(Object parent, Object child) { if (parent == ROOT_NODE && (child instanceof Document)) { return documentManager.getIndexOfDocument(ManagedDocumentType.MONITOR, ((Document) child)); } return -1; } @Override public Object getRoot() { return ROOT_NODE; } @Override public boolean isLeaf(Object node) { if (node == ROOT_NODE) { return false; } return true; } @Override public void documentAdded(DocumentManagerEvent e) { if (!(e.getDocument() instanceof MonitorSignalDocument)) { return; } MonitorSignalDocument monitorDocument = (MonitorSignalDocument) e.getDocument(); monitorDocument.addPropertyChangeListener(this); fireTreeNodesInserted(this, new Object[] { ROOT_NODE }, new int[] { e.getInTypeIndex() }, new Object[] { monitorDocument }); } @Override public void documentRemoved(DocumentManagerEvent e) { if (!(e.getDocument() instanceof MonitorSignalDocument)) { return; } MonitorSignalDocument monitorDocument = (MonitorSignalDocument) e.getDocument(); monitorDocument.removePropertyChangeListener(this); fireTreeNodesRemoved(this, new Object[] { ROOT_NODE }, new int[] { e.getInTypeIndex() }, new Object[] { monitorDocument }); } @Override public void documentPathChanged(DocumentManagerEvent e) { // path changes are not allowed } @Override public void propertyChange(PropertyChangeEvent evt) { Object source = evt.getSource(); if (source instanceof MonitorSignalDocument) { MonitorSignalDocument monitorDocument = (MonitorSignalDocument) source; // react to all properties for now fireTreeStructureChanged(this, new Object[] { ROOT_NODE, monitorDocument }); } } }