Skip to content
Snippets Groups Projects
BigDataBrowserPlugIn.java 5.14 KiB
Newer Older
  • Learn to ignore specific revisions
  • package bdv.ij;
    
    import ij.IJ;
    import ij.ImageJ;
    import ij.plugin.PlugIn;
    
    Tobias Pietzsch's avatar
    Tobias Pietzsch committed
    
    
    Tobias Pietzsch's avatar
    Tobias Pietzsch committed
    import java.awt.Component;
    import java.awt.Dimension;
    import java.awt.Font;
    
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    import java.awt.image.BufferedImage;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.net.URL;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.Map;
    
    
    Tobias Pietzsch's avatar
    Tobias Pietzsch committed
    import javax.imageio.ImageIO;
    import javax.swing.DefaultListCellRenderer;
    import javax.swing.ImageIcon;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JList;
    import javax.swing.JOptionPane;
    import javax.swing.JScrollPane;
    
    import mpicbg.spim.data.SpimDataException;
    
    import org.apache.commons.lang.StringUtils;
    
    import bdv.BigDataViewer;
    import bdv.ij.util.ProgressWriterIJ;
    
    import com.google.gson.stream.JsonReader;
    
    
    /**
     * @author HongKee Moon <moon@mpi-cbg.de>
     */
    
    public class BigDataBrowserPlugIn implements PlugIn
    
    Tobias Pietzsch's avatar
    Tobias Pietzsch committed
    	private final Map< String, ImageIcon > imageMap = new HashMap< String, ImageIcon >();
    
    	private final Map< String, String > datasetUrlMap = new HashMap< String, String >();
    
    	public static String serverUrl = "http://";
    
    
    	@Override
    	public void run( final String arg )
    	{
    		BufferedImage image = null;
    		try
    		{
    
    			image = ImageIO.read( getClass().getResourceAsStream( "/fiji.png" ) );
    
    Tobias Pietzsch's avatar
    Tobias Pietzsch committed
    		catch ( final IOException e )
    
    Tobias Pietzsch's avatar
    Tobias Pietzsch committed
    		final Object remoteUrl = JOptionPane.showInputDialog( null, "Enter BigDataServer Remote URL:", "BigDataServer",
    
    				JOptionPane.QUESTION_MESSAGE, new ImageIcon( image ), null, serverUrl );
    
    		if ( remoteUrl == null )
    			return;
    
    Tobias Pietzsch's avatar
    Tobias Pietzsch committed
    		serverUrl = remoteUrl.toString();
    
    Tobias Pietzsch's avatar
    Tobias Pietzsch committed
    		final ArrayList< String > nameList = new ArrayList< String >();
    		try
    		{
    			getDatasetList( serverUrl, nameList );
    		}
    		catch ( final IOException e )
    		{
    			IJ.showMessage( "Error connecting to server at " + serverUrl );
    			e.printStackTrace();
    		}
    		createDatasetListUI( serverUrl, nameList.toArray() );
    
    Tobias Pietzsch's avatar
    Tobias Pietzsch committed
    	private boolean getDatasetList( final String remoteUrl, final ArrayList< String > nameList ) throws IOException
    
    Tobias Pietzsch's avatar
    Tobias Pietzsch committed
    		// Get JSON string from the server
    		final URL url = new URL( remoteUrl + "/json/" );
    
    		final InputStream is = url.openStream();
    		final JsonReader reader = new JsonReader( new InputStreamReader( is, "UTF-8" ) );
    
    Tobias Pietzsch's avatar
    Tobias Pietzsch committed
    		reader.beginObject();
    
    		while ( reader.hasNext() )
    		{
    			// skipping id
    			reader.nextName();
    
    Tobias Pietzsch's avatar
    Tobias Pietzsch committed
    			String id = null, description = null, thumbnailUrl = null, datasetUrl = null;
    
    			while ( reader.hasNext() )
    			{
    
    Tobias Pietzsch's avatar
    Tobias Pietzsch committed
    				final String name = reader.nextName();
    
    				if ( name.equals( "id" ) )
    					id = reader.nextString();
    
    Tobias Pietzsch's avatar
    Tobias Pietzsch committed
    				else if ( name.equals( "description" ) )
    
    					description = reader.nextString();
    
    Tobias Pietzsch's avatar
    Tobias Pietzsch committed
    				else if ( name.equals( "thumbnailUrl" ) )
    
    					thumbnailUrl = reader.nextString();
    
    Tobias Pietzsch's avatar
    Tobias Pietzsch committed
    				else if ( name.equals( "datasetUrl" ) )
    
    					datasetUrl = reader.nextString();
    
    Tobias Pietzsch's avatar
    Tobias Pietzsch committed
    			}
    
    Tobias Pietzsch's avatar
    Tobias Pietzsch committed
    			if ( id != null )
    			{
    				nameList.add( id );
    				if ( thumbnailUrl != null && StringUtils.isNotEmpty( thumbnailUrl ) )
    					imageMap.put( id, new ImageIcon( new URL( thumbnailUrl ) ) );
    				if ( datasetUrl != null )
    					datasetUrlMap.put( id, datasetUrl );
    
    Tobias Pietzsch's avatar
    Tobias Pietzsch committed
    		reader.endObject();
    
    		reader.close();
    
    
    Tobias Pietzsch's avatar
    Tobias Pietzsch committed
    	private void createDatasetListUI( final String remoteUrl, final Object[] values )
    
    Tobias Pietzsch's avatar
    Tobias Pietzsch committed
    		final JList list = new JList( values );
    
    		list.setCellRenderer( new ThumbnailListRenderer() );
    		list.addMouseListener( new MouseAdapter()
    		{
    
    Tobias Pietzsch's avatar
    Tobias Pietzsch committed
    			@Override
    			public void mouseClicked( final MouseEvent evt )
    
    Tobias Pietzsch's avatar
    Tobias Pietzsch committed
    				final JList list = ( JList ) evt.getSource();
    
    				if ( evt.getClickCount() == 2 )
    				{
    
    Tobias Pietzsch's avatar
    Tobias Pietzsch committed
    					final int index = list.locationToIndex( evt.getPoint() );
    					final String key = String.valueOf( list.getModel().getElementAt( index ) );
    
    					System.out.println( key );
    					try
    					{
    						BigDataViewer.view( datasetUrlMap.get( key ), new ProgressWriterIJ() );
    					}
    
    Tobias Pietzsch's avatar
    Tobias Pietzsch committed
    					catch ( final SpimDataException e )
    
    Tobias Pietzsch's avatar
    Tobias Pietzsch committed
    		final JScrollPane scroll = new JScrollPane( list );
    
    		scroll.setPreferredSize( new Dimension( 600, 800 ) );
    
    Tobias Pietzsch's avatar
    Tobias Pietzsch committed
    		final JFrame frame = new JFrame();
    
    		frame.setTitle( "BigDataServer Browser - " + remoteUrl );
    
    		frame.add( scroll );
    		frame.setDefaultCloseOperation( JFrame.DISPOSE_ON_CLOSE );
    		frame.pack();
    		frame.setLocationRelativeTo( null );
    		frame.setVisible( true );
    	}
    
    	public class ThumbnailListRenderer extends DefaultListCellRenderer
    	{
    
    Tobias Pietzsch's avatar
    Tobias Pietzsch committed
    		private static final long serialVersionUID = 1L;
    
    		Font font = new Font( "helvetica", Font.BOLD, 12 );
    
    
    		@Override
    		public Component getListCellRendererComponent(
    
    Tobias Pietzsch's avatar
    Tobias Pietzsch committed
    				final JList list, final Object value, final int index,
    				final boolean isSelected, final boolean cellHasFocus )
    
    Tobias Pietzsch's avatar
    Tobias Pietzsch committed
    			final JLabel label = ( JLabel ) super.getListCellRendererComponent(
    
    					list, value, index, isSelected, cellHasFocus );
    
    			label.setIcon( imageMap.get( value ) );
    
    			label.setHorizontalTextPosition( JLabel.RIGHT );
    			label.setFont( font );
    			return label;
    		}
    	}
    
    	public static void main( final String[] args )
    	{
    
    Tobias Pietzsch's avatar
    Tobias Pietzsch committed
    		ImageJ.main( args );
    
    		new BigDataBrowserPlugIn().run( null );