1eeb2edd0b14bef2ba7a45ed125f45af3e2e72bd
[idea/community.git] / python / educational-core / course-creator / src / com / jetbrains / edu / coursecreator / ui / CreateCourseArchivePanel.java
1 package com.jetbrains.edu.coursecreator.ui;
2
3 import com.intellij.icons.AllIcons;
4 import com.intellij.openapi.fileChooser.FileChooserDescriptor;
5 import com.intellij.openapi.fileChooser.FileChooserDescriptorFactory;
6 import com.intellij.openapi.project.Project;
7 import com.intellij.openapi.ui.TextFieldWithBrowseButton;
8 import com.intellij.openapi.util.io.FileUtil;
9 import com.jetbrains.edu.learning.core.EduNames;
10 import org.jetbrains.annotations.NotNull;
11
12 import javax.swing.*;
13 import java.awt.*;
14 import java.awt.event.ActionEvent;
15 import java.awt.event.ActionListener;
16 import java.io.File;
17
18 public class CreateCourseArchivePanel extends JPanel {
19   private JPanel myPanel;
20   private JTextField myNameField;
21   private TextFieldWithBrowseButton myLocationField;
22   private JLabel myErrorIcon;
23   private JLabel myErrorLabel;
24   private CreateCourseArchiveDialog myDlg;
25
26   public CreateCourseArchivePanel(@NotNull final Project project, CreateCourseArchiveDialog dlg, String name) {
27     setLayout(new BorderLayout());
28     add(myPanel, BorderLayout.CENTER);
29     myErrorIcon.setIcon(AllIcons.Actions.Lightning);
30     setState(false);
31     myDlg = dlg;
32     String sanitizedName = FileUtil.sanitizeFileName(name);
33     myNameField.setText(sanitizedName.startsWith("_") ? EduNames.COURSE : sanitizedName);
34     myLocationField.setText(project.getBasePath());
35     FileChooserDescriptor descriptor = FileChooserDescriptorFactory.createSingleFolderDescriptor();
36     myLocationField.addBrowseFolderListener("Choose Location Folder", null, project, descriptor);
37     myLocationField.addActionListener(new ActionListener() {
38       @Override
39       public void actionPerformed(ActionEvent e) {
40         String location = myLocationField.getText();
41         File file = new File(location);
42         if (!file.exists() || !file.isDirectory()) {
43           myDlg.enableOKAction(false);
44           setError("Invalid location");
45         }
46         myDlg.enableOKAction(true);
47       }
48     });
49   }
50
51   private void setState(boolean isVisible) {
52     myErrorIcon.setVisible(isVisible);
53     myErrorLabel.setVisible(isVisible);
54   }
55
56   private void setError(String message) {
57     myErrorLabel.setText(message);
58     setState(true);
59   }
60
61   public String getZipName() {
62     return myNameField.getText();
63   }
64
65   public String getLocationPath() {
66     return myLocationField.getText();
67   }
68 }