Package bradswebdavclient

Source Code of bradswebdavclient.FolderNode$FolderNodeListener

package bradswebdavclient;

import com.ettrema.httpclient.Folder;
import com.ettrema.httpclient.FolderListener;
import com.ettrema.httpclient.Resource;
import com.ettrema.httpclient.ResourceListener;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Enumeration;
import java.util.List;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.tree.MutableTreeNode;

/**
*
* @author mcevoyb
*/
public class FolderNode extends AbstractTreeNode implements Droppable, DeletableNode {

    public static final String ICON_FOLDER = "/s_folder.png";
    final Folder folder;
    FolderListener folderListener;

    public FolderNode( final AbstractTreeNode parent, Folder folder ) {
        super( parent, folder.name, false );
        if( folder == null ) throw new NullPointerException( "folder is null" );
        this.folder = folder;

        folder.addListener( new ResourceListener() {

            public void onChanged( Resource r ) {
                model().nodeChanged( FolderNode.this );
            }

            public void onDeleted( Resource r ) {
                System.out.println( "FolderNode: onDeleted: " + r.name );
                FolderNode fn = (FolderNode) FolderNode.this.getParent().child( FolderNode.this.folder.name );
                if( fn != null ) {
                    model().removeNodeFromParent( FolderNode.this );
                }
            }

            @Override
            public String toString() {
                return "FolderNode:ResourceListener:" + FolderNode.this.toString();
            }
        } );

        children = new ArrayList<AbstractTreeNode>();
    }

    @Override
    public void delete() {
        ResourceUtils.doDelete( App.current().getMainFrame(), folder );
    }

    private MutableTreeNode findNode( Resource r ) {
        if( children == null ) return null;
        for( AbstractTreeNode childNode : children ) {
            if( childNode instanceof FolderNode ) {
                FolderNode fn = (FolderNode) childNode;
                if( fn.folder == r ) return fn;
            }
        }
        return null;
    }

    public void select( String[] arr, int i ) {
        System.out.println( "select: " + folder.name + " -> " + i );
        if( i >= arr.length ) {
            System.out.println( "  show details" );
            select();
        } else {
            String s = arr[i];
            System.out.println( "  going to " + s );
            FolderNode child = (FolderNode) child( s );
            if( child != null ) {
                child.select( arr, i + 1 );
            }
        }
    }

    public void select() {
        selectThis();
        App.current().view.showDetails( createDetails() );
    }

    @Override
    public JPanel createDetails() {
        System.out.println( "FolderNode: creating panel" );
        try {
            return new FolderPanel( folder );
        } catch( Exception ex ) {
            ex.printStackTrace();
            JOptionPane.showMessageDialog( App.current().getMainFrame(), "An error occured connecting to the host");
            return null;
        }
    }

    @Override
    protected String getIconName() {
        return ICON_FOLDER;
    }

    @Override
    protected void beforeFlush() {
        try {
            this.folder.flush();
        } catch( IOException ex ) {
            ex.printStackTrace();
        }
    }

    @Override
    protected void flushChildren() {
        try {
            this.folder.flush();
        } catch( IOException ex ) {
            ex.printStackTrace();
        }
    }

    @Override
    protected final List<AbstractTreeNode> getChildren() {
        if( folderListener == null ) {
            try {
                folder.children();
                folderListener = new FolderNodeListener();
                folder.addListener( folderListener ); // activate folder population
            } catch( Exception ex ) {
                ex.printStackTrace();
            }
        }
        return children;
    }

    @Override
    protected List<AbstractTreeNode> listChildren() {
        throw new RuntimeException( "should never get called" );
    }

    @Override
    public Enumeration children() {
        return Collections.enumeration( getChildren() );
    }

    void createNewFolder( String name ) throws Exception {
        Folder newFolder = this.folder.createFolder( name );
    }

    @Override
    void updatePopupMenu( JPopupMenu popupMenu ) {
        super.updatePopupMenu( popupMenu );

        JMenuItem item = new JMenuItem( "New Folder" );
        item.addMouseListener( new NewFolderListener() );
        popupMenu.add( item );

        DownloadFolderListener.add( popupMenu, this );

    }

    class NewFolderListener extends AbstractMouseListener {

        @Override
        public void onClick() {
            String name = JOptionPane.showInputDialog( "New Folder Name" );
            if( name == null ) return;
            try {
                createNewFolder( name );
            } catch( Exception ex ) {
                ex.printStackTrace();
            }
        }
    }

    public DataFlavor[] getTransferDataFlavors() {
        System.out.println( "getTransferDataFlavours" );
        return null;
    }

    public boolean isDataFlavorSupported( DataFlavor flavor ) {
        System.out.println( "isDataFlavorSupported: " + flavor );
        return true;
    }

    public Object getTransferData( DataFlavor flavor ) throws UnsupportedFlavorException, IOException {
        System.out.println( "getTransferDate: " + flavor );
        return "heelo";
    }

    public boolean acceptCopyDrop( Transferable transferable ) {
        TransferableResourceList list = (TransferableResourceList) transferable;
        for( Resource r : list ) {
            try {
                r.copyTo( this.folder );
            } catch( Exception ex ) {
                ex.printStackTrace();
            }
        }
        return true;
    }

    public boolean canPerformMove( Transferable transferable ) {
        boolean b = true; //(transferable instanceof TransferableResourceList);
        return b;
    }

    public boolean canPerformCopy( Transferable transferable ) {
        return true;
//    return (transferable instanceof TransferableResourceList);
    }

    public boolean acceptMoveDrop( Transferable transferable ) {
        try {
            TransferableResourceList list = (TransferableResourceList) transferable.getTransferData( TransferableResourceList.RESOURCE_LIST_FLAVOR );
            for( Resource rSource : list ) {
                rSource.moveTo( this.folder );
            }
            return true;
        } catch( UnsupportedFlavorException ex ) {
            ex.printStackTrace();
        } catch( Exception ex ) {
            ex.printStackTrace();
        }
        return false;
    }

    class FolderNodeListener implements FolderListener {

        public void onChildAdded( Folder parent, Resource child ) {
            if( parent == FolderNode.this.folder ) {
                if( child instanceof Folder ) {
                    int num = numChildren();
                    FolderNode f = new FolderNode( FolderNode.this, (Folder) child );
                    model().insertNodeInto( f, FolderNode.this, num );
                }
            }
        }

        public void onChildRemoved( Folder parent, Resource child ) {
            if( parent == FolderNode.this.folder ) {
                MutableTreeNode node = findNode( child );
                if( node == null ) {
                    return;
                } else {
                    model().removeNodeFromParent( node );
                }
            }
            System.out.println( " done" );
        }

        @Override
        public String toString() {
            return "FolderNode:FolderListener:" + FolderNode.this.toString();
        }
    }
}
TOP

Related Classes of bradswebdavclient.FolderNode$FolderNodeListener

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.