public ClassHierarchyTree(final WorkbookManager manager, OWLOntology ontology) {
    super(new ClassHierarchyTreeModel(manager.getOntologyManager(), ontology));

    this.ontology = ontology;
    this.workbookManager = manager;

    setModel(new ClassHierarchyTreeModel(workbookManager.getOntologyManager(), ontology));
    getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);

    addTreeSelectionListener(
        new TreeSelectionListener() {
          @Override
          public void valueChanged(TreeSelectionEvent e) {
            previewSelectedClass();
          }
        });

    setCellRenderer(new OntologyCellRenderer(workbookManager.getOntologyManager()));
  }
 private void transmitSelectionToModel() {
   if (rebuildingTabs || updatingSelectionFromModel) {
     return;
   }
   try {
     transmittingSelectionToModel = true;
     Range range = getSelectedSheetPanel().getSelectedRange();
     manager.getSelectionModel().setSelectedRange(range);
   } finally {
     transmittingSelectionToModel = false;
   }
 }
  public WorkbookPanel(WorkbookManager workbookManager) {
    this.manager = workbookManager;
    tabbedPane = new JTabbedPane(JTabbedPane.BOTTOM);
    setLayout(new BorderLayout());
    add(tabbedPane, BorderLayout.CENTER);
    workbookChangeListener = new WorkbookChangeListenerImpl();
    manager.getWorkbook().addChangeListener(workbookChangeListener);
    rebuildTabs();
    tabbedPane.addChangeListener(
        new ChangeListener() {
          public void stateChanged(ChangeEvent e) {
            transmitSelectionToModel();
          }
        });
    workbookManager
        .getSelectionModel()
        .addCellSelectionListener(
            new CellSelectionListener() {
              public void selectionChanged(Range range) {
                updateSelectionFromModel(range);
              }
            });
    workbookManager.addListener(
        new AbstractWorkbookManagerListener() {

          @Override
          public void workbookCreated() {
            rebuildTabs();
            transmitSelectionToModel();
          }

          @Override
          public void workbookLoaded() {
            rebuildTabs();
            transmitSelectionToModel();
          }
        });
  }
  private void previewSelectedClass() {
    logger.debug("In previewSelectedClass");

    TreePath[] selectedPaths = getSelectionPaths();
    if (selectedPaths == null) {
      return;
    }
    Set<OWLEntity> selectedEntities = new HashSet<OWLEntity>();

    for (TreePath path : selectedPaths) {
      DefaultMutableTreeNode node = (DefaultMutableTreeNode) path.getLastPathComponent();
      if (node instanceof ClassHierarchyNode) {
        selectedEntities.addAll(((ClassHierarchyNode) node).getOWLClasses());
      } else {
        selectedEntities.add(
            (OWLNamedIndividual) ((ClassHierarchyIndividualNode) node).getUserObject());
      }
    }
    OWLEntity selectedEntity = selectedEntities.iterator().next();
    if (!workbookManager.getEntitySelectionModel().getSelectedEntity().equals(selectedEntity)) {
      workbookManager.getEntitySelectionModel().setSelectedEntity(selectedEntity);
    }
    workbookManager.previewValidation();
  }
  private void rebuildTabs() {

    rebuildingTabs = true;
    for (int i = 0; i < tabbedPane.getTabCount(); i++) {
      SheetPanel sheetPanel = (SheetPanel) tabbedPane.getComponentAt(i);
      sheetPanel.dispose();
    }
    tabbedPane.removeAll();
    Workbook workbook = manager.getWorkbook();
    for (Sheet sheet : workbook.getSheets()) {
      if (!sheet.isHidden()) {
        SheetPanel sheetPanel = new SheetPanel(manager, sheet);
        tabbedPane.add(sheet.getName(), sheetPanel);
      }
    }
    rebuildingTabs = false;
  }