package com.razorfish.platforms.intellivault.ui;
import com.razorfish.platforms.intellivault.config.IntelliVaultCRXRepository;
import com.razorfish.platforms.intellivault.config.IntelliVaultPreferences;
import com.razorfish.platforms.intellivault.services.VaultInvokerService;
import com.razorfish.platforms.intellivault.services.impl.IntelliVaultPreferencesService;
import com.intellij.openapi.components.ServiceManager;
import com.intellij.openapi.options.Configurable;
import com.intellij.openapi.options.ConfigurationException;
import com.razorfish.platforms.intellivault.config.IntelliVaultCRXRepository;
import com.razorfish.platforms.intellivault.config.IntelliVaultPreferences;
import com.razorfish.platforms.intellivault.services.VaultInvokerService;
import com.razorfish.platforms.intellivault.services.impl.IntelliVaultPreferencesService;
import org.jetbrains.annotations.Nls;
import org.jetbrains.annotations.Nullable;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComponent;
import javax.swing.JFileChooser;
import javax.swing.JPanel;
import javax.swing.JTextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Arrays;
import java.util.List;
/**
* Created with IntelliJ IDEA.
* User: sean.steimer
* Date: 3/15/13
* Time: 12:41 PM
* To change this template use File | Settings | File Templates.
*/
public class IntelliiVaultSettings implements Configurable {
public static final String FILE_IGNORE_PATTERN_SEPERATOR = ",";
public static final String CURRENT_DIRECTORY_SYMBOL = ".";
private JPanel jPanel;
private JTextField txtVaultDir;
private JButton btnVaultDirBrowse;
private JButton btnTempDirBrowse;
private JTextField txtTempDir;
private JCheckBox verboseOutputCheckBox;
private JTextField txtRepoUrl;
private JTextField txtUsername;
private JTextField txtPassword;
private JTextField txtIgnorePatterns;
private JTextField txtJCRRootDirName;
private JButton btnRestoreDefaults;
private JCheckBox showDialogsCheckBox;
@Nls
@Override
public String getDisplayName() {
return "IntelliVault";
}
@Nullable
@Override
public String getHelpTopic() {
return "IntelliVault.Plugin.Help";
}
@Nullable
@Override
public JComponent createComponent() {
btnTempDirBrowse.addActionListener(new ActionListener() {
@Override
public void actionPerformed(final ActionEvent e) {
JFileChooser chooser = new JFileChooser();
String currentDirectory = txtTempDir.getText()!=null && txtTempDir.getText().length()>0 ?
txtTempDir.getText() : CURRENT_DIRECTORY_SYMBOL;
chooser.setCurrentDirectory(new java.io.File(currentDirectory));
chooser.setDialogTitle("Select Temp Directory");
chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
chooser.setAcceptAllFileFilterUsed(false);
// Demonstrate "Open" dialog:
int rVal = chooser.showOpenDialog(jPanel);
if (rVal == JFileChooser.APPROVE_OPTION) {
txtTempDir.setText(chooser.getSelectedFile().getAbsolutePath());
}
}
});
btnVaultDirBrowse.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JFileChooser chooser = new JFileChooser();
String curDir=txtVaultDir.getText()!=null && txtVaultDir.getText().length()>0
? txtVaultDir.getText() : CURRENT_DIRECTORY_SYMBOL;
chooser.setCurrentDirectory(new java.io.File(curDir));
chooser.setDialogTitle("Select Vault Directory");
chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
chooser.setAcceptAllFileFilterUsed(false);
// Demonstrate "Open" dialog:
int rVal = chooser.showOpenDialog(jPanel);
if (rVal == JFileChooser.APPROVE_OPTION) {
txtVaultDir.setText(chooser.getSelectedFile().getAbsolutePath());
}
}
});
btnRestoreDefaults.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
setDialogStateFromPreferences(new IntelliVaultPreferences());
}
});
reset();
return jPanel;
}
@Override
public boolean isModified() {
return true;
}
@Override
public void apply() throws ConfigurationException {
IntelliVaultPreferencesService preferencesService
= ServiceManager.getService(IntelliVaultPreferencesService.class);
preferencesService.setPreferences(getPreferencesFromDialogState());
VaultInvokerService vltInvoker = ServiceManager.getService(VaultInvokerService.class);
vltInvoker.forceReInit();
}
@Override
public void reset() {
IntelliVaultPreferencesService preferencesService
= ServiceManager.getService(IntelliVaultPreferencesService.class);
setDialogStateFromPreferences(preferencesService.getPreferences());
}
/**
* Serialize the current dialog state to a preferences object which can be used by IntelliVault.
* @return the currently selected IntelliVaultPreferences
*/
private IntelliVaultPreferences getPreferencesFromDialogState() {
IntelliVaultPreferences preferencesBean = new IntelliVaultPreferences();
preferencesBean.vaultPath = txtVaultDir.getText();
preferencesBean.tempDirectory = txtTempDir.getText();
preferencesBean.rootFolderName = txtJCRRootDirName.getText();
preferencesBean.verbose = verboseOutputCheckBox.isSelected();
preferencesBean.showDialogs = showDialogsCheckBox.isSelected();
String ignorePatterns = txtIgnorePatterns.getText();
if (ignorePatterns != null) {
String[] ignorePatternsArray = ignorePatterns.split(FILE_IGNORE_PATTERN_SEPERATOR);
preferencesBean.fileIgnorePatterns = Arrays.asList(ignorePatternsArray);
}
preferencesBean.repoConfigs.clear();
preferencesBean.addRepositoryConfiguration(txtRepoUrl.getText(), txtUsername.getText(), txtPassword.getText());
return preferencesBean;
}
/**
* De-serialize an IntelliVaultPreferences object to the dialog, setting all dialog fields as defined in the object
* passed in.
* @param preferences the preferences object to set the dialog fields from.
*/
private void setDialogStateFromPreferences(final IntelliVaultPreferences preferences) {
txtVaultDir.setText(preferences.vaultPath);
txtTempDir.setText(preferences.tempDirectory);
txtJCRRootDirName.setText(preferences.rootFolderName);
verboseOutputCheckBox.setSelected(preferences.verbose);
showDialogsCheckBox.setSelected(preferences.showDialogs);
StringBuffer buf = new StringBuffer();
for (String s : preferences.fileIgnorePatterns) {
buf.append(s).append(FILE_IGNORE_PATTERN_SEPERATOR);
}
String ignorePatterns=buf.toString();
ignorePatterns = ignorePatterns.substring(0, ignorePatterns.length()-1);
txtIgnorePatterns.setText(ignorePatterns);
List<IntelliVaultCRXRepository> repositoryList = preferences.getRepositoryList();
if (repositoryList != null && repositoryList.size() > 0){
IntelliVaultCRXRepository intelliVaultCRXRepository = repositoryList.get(0);
txtRepoUrl.setText(intelliVaultCRXRepository.getRepoUrl());
txtPassword.setText(intelliVaultCRXRepository.getPassword());
txtUsername.setText(intelliVaultCRXRepository.getUsername());
}
}
@Override
public void disposeUIResources() {
//To change body of implemented methods use File | Settings | File Templates.
}
}