Package org.wiztools.restclient.ui.reqbody

Source Code of org.wiztools.restclient.ui.reqbody.AddMultipartFileDialog

package org.wiztools.restclient.ui.reqbody;

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.dnd.DropTarget;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.inject.Inject;
import javax.swing.*;
import org.wiztools.commons.StringUtil;
import org.wiztools.restclient.bean.ContentType;
import org.wiztools.restclient.bean.ReqEntityFilePart;
import org.wiztools.restclient.bean.ReqEntityFilePartBean;
import org.wiztools.restclient.ui.*;
import org.wiztools.restclient.ui.dnd.DndAction;
import org.wiztools.restclient.ui.dnd.FileDropTargetListener;

/**
*
* @author subwiz
*/
public class AddMultipartFileDialog extends AddMultipartBaseDialog {
   
    @Inject
    private ContentTypeCharsetComponent jp_contentType;
   
    private final JTextField jtf_name = new JTextField(ContentTypeCharsetComponent.TEXT_FIELD_LENGTH);
    private final JTextField jtf_fileName = new JTextField(ContentTypeCharsetComponent.TEXT_FIELD_LENGTH);
    private final JTextField jtf_file = new JTextField(ContentTypeCharsetComponent.TEXT_FIELD_LENGTH);
   
    private final JButton jb_file = new JButton(UIUtil.getIconFromClasspath(RCFileView.iconBasePath + "load_from_file.png"));
   
    private final JButton jb_add = new JButton("Add");
    private final JButton jb_addAndClose = new JButton("Add & close");
    private final JButton jb_cancel = new JButton("Cancel");

    @Inject
    public AddMultipartFileDialog(RESTUserInterface rest_ui) {
        super(rest_ui);
       
        setTitle("Add Multipart File");
    }
   
    @PostConstruct
    protected void init() {
        // DnD:
        FileDropTargetListener l = new FileDropTargetListener();
        l.addDndAction(new DndAction() {
            @Override
            public void onDrop(List<File> files) {
                selectFile(files.get(0));
            }
        });
        new DropTarget(jtf_file, l);
        new DropTarget(jb_file, l);
       
        // Button listeners:
        jb_add.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                add();
            }
        });
        jb_addAndClose.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                addAndClose();
            }
        });
        jb_cancel.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                cancel();
            }
        });
       
        jb_file.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                selectFile();
            }
        });
       
        // Default button:
        getRootPane().setDefaultButton(jb_add);
       
        // Layout:
        Container c = getContentPane();
        c.setLayout(new BorderLayout());
       
        { // Center
            JPanel jp = new JPanel(new BorderLayout());
           
            JPanel jp_west = new JPanel(new GridLayout(4, 2));
            jp_west.add(new JLabel(" Content type: "));
            jp_west.add(new JLabel(" Name: "));
            jp_west.add(new JLabel(" File name: "));
            jp_west.add(new JLabel(" File: "));
            jp.add(jp_west, BorderLayout.WEST);
           
            JPanel jp_center = new JPanel(new GridLayout(4, 2));
            jp_center.add(jp_contentType.getComponent());
            jp_center.add(UIUtil.getFlowLayoutPanelLeftAligned(jtf_name));
            jp_center.add(UIUtil.getFlowLayoutPanelLeftAligned(jtf_fileName));
            JPanel jp_file = new JPanel(new FlowLayout(FlowLayout.LEFT));
            jp_file.add(jtf_file);
            jp_file.add(jb_file);
            jp_center.add(jp_file);
            jp.add(jp_center, BorderLayout.CENTER);
           
            c.add(jp, BorderLayout.CENTER);
        }
       
        { // South
            JPanel jp = new JPanel();
            jp.setLayout(new FlowLayout(FlowLayout.RIGHT));
            jp.add(jb_cancel);
            jp.add(jb_add);
            jp.add(jb_addAndClose);
            c.add(jp, BorderLayout.SOUTH);
        }
       
        pack();
    }
   
    private void selectFile() {
        File f = rest_ui.getOpenFile(FileChooserType.OPEN_REQUEST_BODY);
        selectFile(f);
    }
   
    private void selectFile(File f) {
       
        if(f == null){ // Pressed cancel?
            return;
        }
        if(!f.canRead()){
            JOptionPane.showMessageDialog(rest_ui.getFrame(),
                    "File not readable: " + f.getAbsolutePath(),
                    "IO Error",
                    JOptionPane.ERROR_MESSAGE);
            return;
        }
       
        // Content type charset correction:
        ContentTypeSelectorOnFile.select(jp_contentType, f, this);
       
        // Set filename:
        if(StringUtil.isEmpty(jtf_fileName.getText())) {
            jtf_fileName.setText(f.getName());
        }
       
        // Set file:
        jtf_file.setText(f.getAbsolutePath());
    }
   
    private boolean add() {
        // Validation:
        if(StringUtil.isEmpty(jtf_name.getText())) {
            JOptionPane.showMessageDialog(this,
                    "Name must be present!",
                    "Validation: name empty!",
                    JOptionPane.ERROR_MESSAGE);
            jtf_name.requestFocus();
            return false;
        }
        if(StringUtil.isEmpty(jtf_fileName.getText())) {
            JOptionPane.showMessageDialog(this,
                    "File name must be present!",
                    "Validation: filename empty!",
                    JOptionPane.ERROR_MESSAGE);
            jtf_fileName.requestFocus();
            return false;
        }
       
        // Read values:
        final String name = jtf_name.getText();
        final String fileName = jtf_fileName.getText();
        final ContentType ct = jp_contentType.getContentType();
        final File file = new File(jtf_file.getText());
        final ReqEntityFilePart part = new ReqEntityFilePartBean(name, fileName, ct, file);
       
        // Trigger all listeners:
        for(AddMultipartPartListener l: listeners) {
            l.addPart(part);
        }
       
        // Clear:
        clear();
       
        // Focus:
        jb_file.requestFocus();
       
        return true;
    }
   
    private void addAndClose() {
        if(add()) {
            setVisible(false);
        }
    }
   
    private void cancel() {
        clear();
        setVisible(false);
    }
   
    @Override
    public void clear() {
        jp_contentType.clear();
        jtf_name.setText("");
        jtf_fileName.setText("");
        jtf_file.setText("");
    }

    @Override
    public void setVisible(boolean boo) {
        jp_contentType.requestFocus();
        super.setVisible(boo);
    }
}
TOP

Related Classes of org.wiztools.restclient.ui.reqbody.AddMultipartFileDialog

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.