package com.illumina.basespace.igv.ui.tree; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.UUID; import javax.swing.JLabel; import javax.swing.JTree; import javax.swing.SwingWorker; import org.broad.igv.ui.IGV; import com.illumina.basespace.entity.AppResult; import com.illumina.basespace.entity.AppResultCompact; import com.illumina.basespace.entity.FileCompact; import com.illumina.basespace.entity.Reference; import com.illumina.basespace.igv.BaseSpaceConstants; import com.illumina.basespace.igv.BaseSpaceMain; import com.illumina.basespace.igv.BaseSpaceMain.ClientContext; import com.illumina.basespace.igv.BaseSpaceUtil; import com.illumina.basespace.igv.ui.BaseSpaceHelper; import com.illumina.basespace.igv.ui.ImageProvider; import com.illumina.basespace.param.FileParams; public class AppResultNode extends BaseSpaceTreeNode<AppResultCompact> { public AppResultNode(AppResultCompact bean,UUID clientId,ClientContext clientContext) { super(bean,clientId,clientContext); } private JTree tree; public JTree getTree() { return tree; } @Override public void loadChildrenAsynch(final JTree tree) { final BaseSpaceTreeNode<?> treeNode = this; SwingWorker<List<FileCompact>,Object> worker = new SwingWorker<List<FileCompact>,Object>() { @Override protected List<FileCompact> doInBackground() throws Exception { List<FileCompact> entities = new ArrayList<FileCompact>(); FileParams fileParams = new FileParams(BaseSpaceConstants.FILE_TYPES.keySet().toArray(new String[0]), 128); entities.addAll(Arrays.asList(BaseSpaceMain.instance().getApiClient(getClientId()).getFiles(getBean(), fileParams).items())); return entities; } @Override protected void done() { try { super.done(); List<FileCompact> list = get(); List<BaseSpaceTreeNode<?>> decorators = new ArrayList<BaseSpaceTreeNode<?>>(list.size()); for (FileCompact obj : list) { String suffix = ""; int suffixStartIdx = obj.getName().lastIndexOf("."); if (suffixStartIdx != -1) suffix = obj.getName().substring(suffixStartIdx); if (obj.getName().toLowerCase().endsWith(".bam")) { FileCompact indexFile = BaseSpaceUtil.findFile(obj.getName() + ".bai", list); if (indexFile != null) { decorators.add(new FileNode(obj,indexFile,getClientId(),getClientContext())); } } else if (obj.getName().toLowerCase().endsWith(".vcf")) { decorators.add(new FileNode(obj,getClientId(),getClientContext())); } else if (obj.getName().toLowerCase().endsWith(".vcf.gz")) { FileCompact indexFile = BaseSpaceUtil.findFile(obj.getName() + ".tbi", list); if (indexFile != null) { decorators.add(new FileNode(obj,indexFile,getClientId(),getClientContext())); } } else if (obj.getName().toLowerCase().endsWith(".bed")) { decorators.add(new FileNode(obj,getClientId(),getClientContext())); } else if (obj.getName().toLowerCase().endsWith(".bedgraph.gz")) { decorators.add(new FileNode(obj,getClientId(),getClientContext())); } else if (obj.getName().toLowerCase().endsWith(".gtf")) { decorators.add(new FileNode(obj,getClientId(),getClientContext())); } else if (obj.getName().toLowerCase().endsWith(".tdf")) { decorators.add(new FileNode(obj,getClientId(),getClientContext())); } else if (obj.getName().toLowerCase().endsWith(".bw")) { decorators.add(new FileNode(obj,getClientId(),getClientContext())); } else if (obj.getName().toLowerCase().endsWith(".gz")) { decorators.add(new FileNode(obj,getClientId(),getClientContext())); } else if (BaseSpaceConstants.FILE_TYPES.containsKey(suffix)) { decorators.add(new FileNode(obj,getClientId(),getClientContext())); } } addChildren(tree,treeNode,decorators); } catch(Throwable t) { BaseSpaceHelper.showErrorDialog(IGV.getMainFrame(),t); } } }; worker.execute(); } @Override public void renderNode(JTree tree, JLabel label, AppResultCompact value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) { //String nameToDisplay = getBean().getName() + (referencedSampleName != null?"_" + referencedSampleName:""); String nameToDisplay = getBean().getName(); label.setText( "<html>" + nameToDisplay + "</html>"); label.setIcon(ImageProvider.instance().getIcon("appresult.png")); } }