/* SignalTreeModel.java created 2007-09-11 * */ package org.signalml.app.model.signal; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import org.apache.log4j.Logger; 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.app.document.signal.SignalDocument; import org.signalml.plugin.export.signal.Document; import org.signalml.plugin.export.view.AbstractTreeModel; /** SignalTreeModel * * * @author Michal Dobaczewski © 2007-2008 CC Otwarte Systemy Komputerowe Sp. z o.o. */ public class SignalTreeModel extends AbstractTreeModel implements DocumentManagerListener, PropertyChangeListener { protected static final Logger logger = Logger.getLogger(SignalTreeModel.class); private static final String ROOT_NODE = "signalTree.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.SIGNAL, index); } else if (parent instanceof SignalDocument) { SignalDocument signalDocument = (SignalDocument) parent; float pageSize = signalDocument.getPageSize(); SignalPageTreeNode node = new SignalPageTreeNode( index+1, pageSize, index * pageSize, (index+1) * pageSize ); return node; } return null; } @Override public int getChildCount(Object parent) { if (parent == ROOT_NODE) { return documentManager.getDocumentCount(ManagedDocumentType.SIGNAL); } else if (parent instanceof SignalDocument) { return ((SignalDocument) parent).getPageCount(); } return 0; } @Override public int getIndexOfChild(Object parent, Object child) { if (parent == ROOT_NODE && (child instanceof Document)) { return documentManager.getIndexOfDocument(ManagedDocumentType.SIGNAL, ((Document) child)); } else if ((parent instanceof SignalDocument) && (child instanceof SignalPageTreeNode)) { return ((SignalPageTreeNode) child).getPage() - 1; } return -1; } @Override public Object getRoot() { return ROOT_NODE; } @Override public boolean isLeaf(Object node) { if (node == ROOT_NODE) { return false; } else if (node instanceof SignalDocument) { return false; } return true; } @Override public void documentAdded(DocumentManagerEvent e) { if (!(e.getDocument() instanceof SignalDocument) || e.getDocument() instanceof MonitorSignalDocument) { return; } SignalDocument signalDocument = (SignalDocument) e.getDocument(); signalDocument.addPropertyChangeListener(this); fireTreeNodesInserted(this, new Object[] { ROOT_NODE }, new int[] { e.getInTypeIndex() }, new Object[] { signalDocument }); } @Override public void documentRemoved(DocumentManagerEvent e) { if (!(e.getDocument() instanceof SignalDocument) || e.getDocument() instanceof MonitorSignalDocument) { return; } SignalDocument signalDocument = (SignalDocument) e.getDocument(); signalDocument.removePropertyChangeListener(this); fireTreeNodesRemoved(this, new Object[] { ROOT_NODE }, new int[] { e.getInTypeIndex() }, new Object[] { signalDocument }); } @Override public void documentPathChanged(DocumentManagerEvent e) { // ignored } @Override public void propertyChange(PropertyChangeEvent evt) { Object source = evt.getSource(); if (source instanceof SignalDocument) { SignalDocument signalDocument = (SignalDocument) source; // react to all properties for now fireTreeStructureChanged(this, new Object[] { ROOT_NODE, signalDocument }); } } }