Package org.freeplane.plugin.workspace.components.dialog

Source Code of org.freeplane.plugin.workspace.components.dialog.NewProjectDialogPanel

package org.freeplane.plugin.workspace.components.dialog;

import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.File;
import java.net.URI;
import java.net.URL;
import java.util.Locale;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
import javax.swing.border.MatteBorder;

import org.freeplane.core.util.LogUtils;
import org.freeplane.core.util.TextUtils;
import org.freeplane.plugin.workspace.URIUtils;
import org.freeplane.plugin.workspace.WorkspaceController;
import org.freeplane.plugin.workspace.model.project.AWorkspaceProject;

import com.jgoodies.forms.factories.FormFactory;
import com.jgoodies.forms.layout.ColumnSpec;
import com.jgoodies.forms.layout.FormLayout;
import com.jgoodies.forms.layout.RowSpec;

public class NewProjectDialogPanel extends JPanel {
 
  private static final long serialVersionUID = 1L;
  private JTextField txtProjectName;
  private JTextField txtProjectPath;
  protected boolean manualChoice = false;
  private JLabel lblWarn;
  private Component confirmButton;
 
  public NewProjectDialogPanel() {
    setPreferredSize(new Dimension(400, 160));
    setLayout(new FormLayout(new ColumnSpec[] {
        FormFactory.RELATED_GAP_COLSPEC,
        FormFactory.DEFAULT_COLSPEC,
        FormFactory.RELATED_GAP_COLSPEC,
        ColumnSpec.decode("max(100dlu;min):grow"),
        FormFactory.RELATED_GAP_COLSPEC,
        FormFactory.DEFAULT_COLSPEC,
        FormFactory.RELATED_GAP_COLSPEC,
        FormFactory.RELATED_GAP_COLSPEC,},
      new RowSpec[] {
        FormFactory.RELATED_GAP_ROWSPEC,
        RowSpec.decode("fill:max(30dlu;pref)"),
        FormFactory.RELATED_GAP_ROWSPEC,
        FormFactory.DEFAULT_ROWSPEC,
        FormFactory.RELATED_GAP_ROWSPEC,
        RowSpec.decode("fill:default"),
        FormFactory.RELATED_GAP_ROWSPEC,
        RowSpec.decode("fill:default"),}));
   
    JPanel panel = new JPanel();
    panel.setBorder(new MatteBorder(0, 0, 1, 0, (Color) new Color(0, 0, 0)));
    panel.setBackground(Color.WHITE);
    add(panel, "1, 1, 8, 2, fill, fill");
    panel.setLayout(new FormLayout(new ColumnSpec[] {
        FormFactory.RELATED_GAP_COLSPEC,
        ColumnSpec.decode("default:grow"),},
      new RowSpec[] {
        FormFactory.RELATED_GAP_ROWSPEC,
        RowSpec.decode("fill:default:grow"),}));
   
    JLabel lblNewLabel = new JLabel(TextUtils.getText(NewProjectDialogPanel.class.getSimpleName().toLowerCase(Locale.ENGLISH)+".help"));
    lblNewLabel.setVerticalAlignment(SwingConstants.TOP);
    panel.add(lblNewLabel, "2, 2");
   
    lblWarn = new JLabel(TextUtils.getText(ImportProjectDialogPanel.class.getSimpleName().toLowerCase(Locale.ENGLISH)+".warn1"));
    add(lblWarn, "2, 4, 5, 1");
    URL url = this.getClass().getResource("/images/16x16/dialog-warning-4.png");
    if(url != null) {
      lblWarn.setIcon(new ImageIcon(url));
    }
    lblWarn.setVisible(false);
   
    JLabel lblProjectName = new JLabel(TextUtils.getText(NewProjectDialogPanel.class.getSimpleName().toLowerCase(Locale.ENGLISH)+".name.label"));
    lblProjectName.setHorizontalAlignment(SwingConstants.RIGHT);
    add(lblProjectName, "2, 6, right, default");
   
    txtProjectName = new JTextField();
    txtProjectName.setText(TextUtils.getText(NewProjectDialogPanel.class.getSimpleName().toLowerCase(Locale.ENGLISH)+".name.default"));
    add(txtProjectName, "4, 6, fill, default");
    txtProjectName.setColumns(10);
    txtProjectName.addKeyListener(new KeyListener() {     
      public void keyTyped(KeyEvent evt) {
        if(isBlackListed(evt.getKeyChar())) {
          evt.consume();
        }
      }
     
      public void keyReleased(KeyEvent evt) {
        if(isBlackListed(evt.getKeyChar())) {
          evt.consume();
        }
        else {
          if(!manualChoice) {
            SwingUtilities.invokeLater(new Runnable() {
              public void run() {
                setProjectPath(getDefaultProjectPath(getProjectName()));
              }
            });
          }
        }
      }
     
      public void keyPressed(KeyEvent evt) {
        if(isBlackListed(evt.getKeyChar())) {
          evt.consume();
        }
      }
    });
   
    JLabel lblProjectPath = new JLabel(TextUtils.getText(NewProjectDialogPanel.class.getSimpleName().toLowerCase(Locale.ENGLISH)+".path.label"));
    lblProjectPath.setHorizontalAlignment(SwingConstants.RIGHT);
    add(lblProjectPath, "2, 8, right, default");
   
    txtProjectPath = new JTextField(getDefaultProjectPath(txtProjectName.getText()));
    setProjectPath(getDefaultProjectPath(getProjectName()));
    add(txtProjectPath, "4, 8, fill, default");
    txtProjectPath.setColumns(10);
    txtProjectPath.addKeyListener(new KeyListener() {     
      public void keyTyped(KeyEvent evt) {
        if(isBlackListed(evt.getKeyChar())) {
          evt.consume();
        }
        else {
          manualChoice = true;
        }
      }
     
      public void keyReleased(KeyEvent evt) {
        if(isBlackListed(evt.getKeyChar())) {
          evt.consume();
        }
        else {
          manualChoice = true;
        }
        enableConfirmation();
      }
     
      public void keyPressed(KeyEvent evt) {
        if(isBlackListed(evt.getKeyChar())) {
          evt.consume();
        }
        else {
          manualChoice = true;
        }
      }
    });
   
    JButton btnBrowse = new JButton("...");
    btnBrowse.setToolTipText(TextUtils.getText(NewProjectDialogPanel.class.getSimpleName().toLowerCase(Locale.ENGLISH)+".button.tip"));
    btnBrowse.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent arg0) {
        File home = URIUtils.getAbsoluteFile(getProjectPath());
        while(home != null && !home.exists()) {
          home = home.getParentFile();
        }
        JFileChooser chooser = new JFileChooser(home == null ? getDefaultProjectPath(getProjectName()) : home.getAbsolutePath());
        chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
        chooser.setMultiSelectionEnabled(false);
        chooser.setFileHidingEnabled(true);
        int response = chooser.showOpenDialog(NewProjectDialogPanel.this);
        if(response == JFileChooser.APPROVE_OPTION) {
          File file = chooser.getSelectedFile();
          setProjectPath(file.getAbsolutePath());
          manualChoice = true;
        }
      }
    });
    add(btnBrowse, "6, 8");
  }
 
  @Override
  public void paint(Graphics g) {
    enableConfirmation();
    super.paint(g);
  }
 
  public static boolean isBlackListed(char keyChar) {
    if(
      '%' == keyChar
      || '!' == keyChar
      || '$' == keyChar
      || '§' == keyChar
      || '&' == keyChar
      || '\'' == keyChar
      || 'ยด' == keyChar
    ) {
      return true;
    }
    return false;
  }

  protected void setProjectPath(String path) {
    txtProjectPath.setText(path);
  }

  protected String getDefaultProjectPath(String projectName) {
    File base = URIUtils.getAbsoluteFile(WorkspaceController.getDefaultProjectHome());
    if(projectName == null) {
      projectName = TextUtils.getText(NewProjectDialogPanel.class.getSimpleName().toLowerCase(Locale.ENGLISH)+".name.default");
    }
    File path = new File(base, projectName.trim());   
    int counter = 1;
    while(path.exists() && projectName.trim().length() > 0) {
      path = new File(base, projectName.trim()+" "+(counter++));
    }   
    return path.getAbsolutePath();
  }
 
  private void enableConfirmation() {
    if(confirmButton != null) {
      if(NameExistsInWorkspace(getProjectName())) {
        lblWarn.setText(TextUtils.getText(NewProjectDialogPanel.class.getSimpleName().toLowerCase(Locale.ENGLISH)+".warn1"));
        lblWarn.setVisible(true);
        confirmButton.setEnabled(false);         
      }
      else if(PathExistsInWorkspace(txtProjectPath.getText())) {
        lblWarn.setText(TextUtils.getText(NewProjectDialogPanel.class.getSimpleName().toLowerCase(Locale.ENGLISH)+".warn2"));
        lblWarn.setVisible(true);
        confirmButton.setEnabled(false);
      }
      else {
        confirmButton.setEnabled(true);
        lblWarn.setVisible(false);
     
    }
  }
 
  private boolean NameExistsInWorkspace(String name) {
    for(AWorkspaceProject project : WorkspaceController.getCurrentModel().getProjects()) {
      try {
        if(project.getProjectName().equals(name)) {
          return true;
        }
      }
      catch (Exception e) {
        LogUtils.info(""+e.getMessage());
      }
    }
    return false;
  }
 
  private boolean PathExistsInWorkspace(String path) {
    for(AWorkspaceProject project : WorkspaceController.getCurrentModel().getProjects()) {
      try {
        if(URIUtils.getFile(project.getProjectHome()).getAbsolutePath().equals(new File(path).getAbsolutePath())) {
          return true;
        }
      }
      catch (Exception e) {
        LogUtils.info(""+e.getMessage());
      }
    }
    return false;
  }

  public String getProjectName() {
    return txtProjectName.getText().trim();
  }
 
  public URI getProjectPath() {
    return new File(txtProjectPath.getText()).toURI();
  }
 
  public void setConfirmButton(Component comp) {
    this.confirmButton = comp;
  }

}
TOP

Related Classes of org.freeplane.plugin.workspace.components.dialog.NewProjectDialogPanel

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.