@Override public boolean canClose() { return !Case.existsCurrentCase() || Case.getCurrentCase().hasData() == false; // only allow this window to be closed when there's no case opened or no image // in this case }
/** * Called only when top component was closed on all workspaces before and now is opened for the * first time on some workspace. The intent is to provide subclasses information about * TopComponent's life cycle across all existing workspaces. Subclasses will usually perform * initializing tasks here. */ @Override public void componentOpened() { // change the cursor to "waiting cursor" for this operation this.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); try { if (Case.existsCurrentCase()) { Case currentCase = Case.getCurrentCase(); // close the top component if there's no image in this case if (currentCase.hasData() == false) { // this.close(); ((BeanTreeView) this.jScrollPane1).setRootVisible(false); // hide the root } else { // if there's at least one image, load the image and open the top component List<Object> items = new ArrayList<>(); final SleuthkitCase tskCase = currentCase.getSleuthkitCase(); items.add(new DataSources()); items.add(new Views(tskCase)); items.add(new Results(tskCase)); items.add(new Reports()); contentChildren = new RootContentChildren(items); Node root = new AbstractNode(contentChildren) { /** * to override the right click action in the white blank space area on the directory * tree window */ @Override public Action[] getActions(boolean popup) { return new Action[] {}; } // Overide the AbstractNode use of DefaultHandle to return // a handle which can be serialized without a parent @Override public Node.Handle getHandle() { return new Node.Handle() { @Override public Node getNode() throws IOException { return em.getRootContext(); } }; } }; root = new DirectoryTreeFilterNode(root, true); em.setRootContext(root); em.getRootContext().setName(currentCase.getName()); em.getRootContext().setDisplayName(currentCase.getName()); ((BeanTreeView) this.jScrollPane1).setRootVisible(false); // hide the root // Reset the forward and back lists because we're resetting the root context resetHistory(); Children childNodes = em.getRootContext().getChildren(); TreeView tree = getTree(); Node results = childNodes.findChild(ResultsNode.NAME); tree.expandNode(results); Children resultsChilds = results.getChildren(); tree.expandNode(resultsChilds.findChild(KeywordHits.NAME)); tree.expandNode(resultsChilds.findChild(ExtractedContent.NAME)); Node views = childNodes.findChild(ViewsNode.NAME); Children viewsChilds = views.getChildren(); for (Node n : viewsChilds.getNodes()) { tree.expandNode(n); } tree.collapseNode(views); // if the dataResult is not opened if (!dataResult.isOpened()) { dataResult .open(); // open the data result top component as well when the directory tree is // opened } // select the first image node, if there is one // (this has to happen after dataResult is opened, because the event // of changing the selected node fires a handler that tries to make // dataResult active) if (childNodes.getNodesCount() > 0) { try { em.setSelectedNodes(new Node[] {childNodes.getNodeAt(0)}); } catch (Exception ex) { logger.log(Level.SEVERE, "Error setting default selected node.", ex); // NON-NLS } } } } } finally { this.setCursor(null); } }