package org.isatools.isacreator.gs.gui; import com.explodingpixels.macwidgets.IAppWidgetFactory; import org.apache.log4j.Logger; import org.genomespace.datamanager.core.GSFileMetadata; import org.isatools.isacreator.autofilteringlist.ExtendedJList; import org.isatools.isacreator.common.ClearFieldUtility; import org.isatools.isacreator.common.UIHelper; import org.isatools.isacreator.common.button.ButtonType; import org.isatools.isacreator.common.button.FlatButton; import org.isatools.isacreator.gs.GSDataManager; import org.isatools.isacreator.gs.GSIdentityManager; import org.isatools.isacreator.gui.ISAcreator; import org.isatools.isacreator.gui.menu.ISAcreatorMenu; import org.isatools.isacreator.gui.menu.ImportFilesListCellRenderer; import org.isatools.isacreator.gui.menu.ImportFilesMenu; import org.isatools.isacreator.managers.ApplicationManager; import org.isatools.isacreator.utils.GeneralUtils; import org.jdesktop.fuse.InjectedResource; import javax.swing.*; import javax.swing.border.EmptyBorder; import javax.swing.border.TitledBorder; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.io.File; import java.util.ArrayList; import java.util.Arrays; /** * Created by the ISATeam. * User: agbeltran * Date: 10/10/2012 * Time: 15:13 * * @author <a href="mailto:alejandra.gonzalez.beltran@gmail.com">Alejandra Gonzalez-Beltran</a> */ public class GSImportFilesMenu extends ImportFilesMenu { private static Logger log = Logger.getLogger(GSImportFilesMenu.class); @InjectedResource private ImageIcon panelHeader, listImage, backButton, backButtonOver, filterLeft, filterRight, gslistImage; private JLabel back; private Container loadingImagePanel; private JButton chooseFromGS; GSFileChooser gsFileChooser = null; GSDataManager gsDataManager = null; private java.util.List<GSFileMetadata> previousGSFiles = null; public GSImportFilesMenu(ISAcreatorMenu menu) { super(menu); setPreferredSize(new Dimension(400, 400)); GSIdentityManager gsIdentityManager = GSIdentityManager.getInstance(); gsDataManager = gsIdentityManager.getGsDataManager(); } public void createGUI() { Box container = Box.createVerticalBox(); container.setOpaque(false); previousFilesExtendedJList = new ExtendedJList(); previousFilesExtendedJList.setBorder(null); previousFilesExtendedJList.setOpaque(false); previousFiles = getPreviousFiles(); previousFilesExtendedJList.addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent event) { if (event.getClickCount() >= 2) { getSelectedFileAndLoad(); } } }); JPanel listPane = new JPanel(new BorderLayout()); listPane.setOpaque(false); JScrollPane listScroller = new JScrollPane(previousFilesExtendedJList, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); listScroller.setBorder(new EmptyBorder(1, 1, 1, 1)); listScroller.setOpaque(false); listScroller.setPreferredSize(new Dimension(250, 150)); listScroller.getViewport().setOpaque(false); IAppWidgetFactory.makeIAppScrollPane(listScroller); listPane.add(listScroller); JPanel filterFieldPane = new JPanel(); filterFieldPane.setLayout(new BoxLayout(filterFieldPane, BoxLayout.LINE_AXIS)); filterFieldPane.setOpaque(false); UIHelper.renderComponent(previousFilesExtendedJList.getFilterField(), UIHelper.VER_11_BOLD, UIHelper.DARK_GREEN_COLOR, false); previousFilesExtendedJList.getFilterField().setOpaque(false); previousFilesExtendedJList.getFilterField().setBorder(new EmptyBorder(1, 1, 1, 1)); filterFieldPane.add(UIHelper.wrapComponentInPanel(new JLabel(getLeftFilterImage()))); filterFieldPane.add(previousFilesExtendedJList.getFilterField()); filterFieldPane.add(UIHelper.wrapComponentInPanel(new JLabel(getRightFilterImage()))); filterFieldPane.add(new ClearFieldUtility(previousFilesExtendedJList.getFilterField())); listPane.add(filterFieldPane, BorderLayout.SOUTH); listPane.setBorder(new TitledBorder( UIHelper.GREEN_ROUNDED_BORDER, getBorderTitle(), TitledBorder.DEFAULT_JUSTIFICATION, TitledBorder.CENTER, UIHelper.VER_12_BOLD, UIHelper.DARK_GREEN_COLOR)); setListRenderer(); //top container contains images for refreshing the list, and the menu title image :o) JPanel topContainer = new JPanel(new GridLayout(1, 1)); topContainer.setOpaque(false); JLabel loadISAImage = new JLabel(getPanelHeaderImage(), JLabel.RIGHT); loadISAImage.setForeground(UIHelper.DARK_GREEN_COLOR); topContainer.add(loadISAImage); container.add(topContainer); container.add(Box.createVerticalStrut(5)); container.add(listPane); container.add(Box.createVerticalStrut(5)); container.add(createButtonPanel()); JLabel progress = new JLabel(); container.add(Box.createVerticalStrut(10)); container.add(progress); if (showProblemArea) container.add(createProblemDisplay()); container.add(createAlternativeExitDisplay()); add(container, BorderLayout.CENTER); } @Override public void getSelectedFileAndLoad() { if (previousFilesExtendedJList.getSelectedIndex() != -1) { // select file from list for (File candidate : previousFiles) { if (candidate.getName().equals(previousFilesExtendedJList.getSelectedValue().toString())) { getSelectedFileAndLoad(candidate,true); } } for (GSFileMetadata candidate: previousGSFiles){ if (candidate.getUrl().equals(previousFilesExtendedJList.getSelectedValue().toString())) System.out.println("file candidate = "+candidate); loadGenomeSpaceFiles(candidate); } } } @Override public java.util.List<File> getPreviousFiles() { previousFilesExtendedJList.clearItems(); File f = new File(ISAcreator.DEFAULT_ISATAB_SAVE_DIRECTORY); if (!f.exists() || !f.isDirectory()) { f.mkdir(); } previousFiles = new ArrayList<File>(Arrays.asList(f.listFiles())); for (File prevSubmission : previousFiles) { if (prevSubmission.isDirectory()) { previousFilesExtendedJList.addItem(prevSubmission.getName()); } } if (previousGSFiles!=null){ for(GSFileMetadata fileMetadata : previousGSFiles){ if (fileMetadata.isDirectory()){ previousFilesExtendedJList.addItem(fileMetadata.getUrl()); } } } return previousFiles; } @Override public void setListRenderer() { previousFilesExtendedJList.setCellRenderer(new ImportFilesListCellRenderer(listImage, gslistImage)); } @Override public String getBorderTitle() { return "select ISA-TAB to load"; } @Override public ImageIcon getPanelHeaderImage() { return panelHeader; } @Override public JPanel createAlternativeExitDisplay() { JPanel previousButtonPanel = new JPanel(new GridLayout(1, 1)); previousButtonPanel.setOpaque(false); back = new JLabel(backButton, JLabel.LEFT); back.addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent event) { if (problemScroll != null) problemScroll.setVisible(false); ApplicationManager.getCurrentApplicationInstance().setGlassPanelContents(menu.getMainMenuGUI()); } public void mouseEntered(MouseEvent event) { back.setIcon(backButtonOver); } public void mouseExited(MouseEvent event) { back.setIcon(backButton); } }); back.setOpaque(false); previousButtonPanel.add(back); return previousButtonPanel; } @Override public ImageIcon getLeftFilterImage() { return filterLeft; } @Override public ImageIcon getRightFilterImage() { return filterRight; } private Container createButtonPanel() { //selection panel Box selectionPanel = Box.createHorizontalBox(); selectionPanel.setOpaque(false); chooseFromElsewhere = new FlatButton(ButtonType.GREEN, "Open Another..."); chooseFromElsewhere.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent actionEvent) { if (timeButtonLastClicked != System.currentTimeMillis()) { if (jfc.showOpenDialog(ApplicationManager.getCurrentApplicationInstance()) == JFileChooser.APPROVE_OPTION) { String directory = jfc.getSelectedFile().toString(); File dirFile = new File(directory + File.separator); ApplicationManager.setCurrentLocalISATABFolder(dirFile.getAbsolutePath()); menu.showProgressPanel(loadISAanimation); loadFile(dirFile.getAbsolutePath()); } timeButtonLastClicked = System.currentTimeMillis(); } } }); chooseFromGS = new FlatButton(ButtonType.BLUE, "Load from GenomeSpace"); chooseFromGS.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent actionEvent) { if (timeButtonLastClicked != System.currentTimeMillis()) { gsFileChooser = new GSFileChooser(menu, GSFileChooser.GSFileChooserMode.OPEN); gsFileChooser.addPropertyChangeListener("selectedFileMetadata", new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent event) { loadGenomeSpaceFiles(); } }); gsFileChooser.showOpenDialog(); timeButtonLastClicked = System.currentTimeMillis(); } } }); loadSelected = new FlatButton(ButtonType.GREEN, "Load File"); loadSelected.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent actionEvent) { getSelectedFileAndLoad(); } }); selectionPanel.add(chooseFromElsewhere); selectionPanel.add(chooseFromGS); selectionPanel.add(loadSelected); selectionPanel.add(Box.createHorizontalGlue()); return selectionPanel; } private void loadGenomeSpaceFiles(final GSFileMetadata fileMetadata) { SwingUtilities.invokeLater(new Runnable() { public void run() { showLoadingImagePane(); } }); Thread downloadFilesThread = new Thread(new Runnable() { public void run() { if (fileMetadata == null) return; ApplicationManager.setCurrentRemoteISATABFolder(fileMetadata.getPath()); String localTmpDirectory = GeneralUtils.createTmpDirectory("isatab-"); System.out.println("Downloading files to local tmp directory " + localTmpDirectory); String pattern = "i_.*\\.txt|s_.*\\.txt|a_.*\\.txt"; gsDataManager.downloadAllFilesFromDirectory(fileMetadata.getPath(), localTmpDirectory, pattern); System.out.println("Importing file..."); ApplicationManager.setCurrentLocalISATABFolder(localTmpDirectory); if (previousGSFiles==null) previousGSFiles = new ArrayList<GSFileMetadata>(); if (!previousGSFiles.contains(fileMetadata)) previousGSFiles.add(fileMetadata); loadFile(localTmpDirectory); } }); downloadFilesThread.start(); } private void loadGenomeSpaceFiles() { SwingUtilities.invokeLater(new Runnable() { public void run() { showLoadingImagePane(); } }); Thread downloadFilesThread = new Thread(new Runnable() { public void run() { GSFileMetadata fileMetadata = gsFileChooser.getSelectedFileMetadata(); if (fileMetadata == null) return; ApplicationManager.setCurrentRemoteISATABFolder(fileMetadata.getPath()); String localTmpDirectory = GeneralUtils.createTmpDirectory("isatab-"); System.out.println("Downloading files to local tmp directory " + localTmpDirectory); String pattern = "i_.*\\.txt|s_.*\\.txt|a_.*\\.txt"; gsDataManager.downloadAllFilesFromDirectory(fileMetadata.getPath(), localTmpDirectory, pattern); System.out.println("Importing file..."); ApplicationManager.setCurrentLocalISATABFolder(localTmpDirectory); if (previousGSFiles==null) previousGSFiles = new ArrayList<GSFileMetadata>(); previousGSFiles.add(fileMetadata); loadFile(localTmpDirectory); } }); downloadFilesThread.start(); } }