blob: d8030c2a9a30139c70cf11a07fc9e8325594a031 [file] [log] [blame]
/*
* Copyright 2000-2013 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.intellij.cvsSupport2.cvsoperations.cvsUpdate.ui;
import com.intellij.CvsBundle;
import com.intellij.cvsSupport2.config.CvsConfiguration;
import com.intellij.cvsSupport2.cvsoperations.cvsTagOrBranch.TagsHelper;
import com.intellij.cvsSupport2.cvsoperations.cvsTagOrBranch.TagsProviderOnVirtualFiles;
import com.intellij.cvsSupport2.cvsoperations.dateOrRevision.ui.DateOrRevisionOrTagSettings;
import com.intellij.cvsSupport2.ui.ChangeKeywordSubstitutionPanel;
import com.intellij.openapi.options.CancelledConfigurationException;
import com.intellij.openapi.options.ConfigurationException;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.Messages;
import com.intellij.openapi.ui.TextFieldWithBrowseButton;
import com.intellij.openapi.vcs.FilePath;
import org.netbeans.lib.cvsclient.command.KeywordSubstitution;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.Collection;
/**
* author: lesya
*/
public class UpdateOptionsPanel {
private JCheckBox myPruneEmptyDirectories;
private TextFieldWithBrowseButton myBranch;
private TextFieldWithBrowseButton myBranch2;
private JCheckBox mySwitchToHeadRevision;
private JCheckBox myCreateNewDirectories;
private JCheckBox myCleanCopy;
private JPanel myDateOrRevisionPanel;
private final ChangeKeywordSubstitutionPanel myChangeKeywordSubstitutionPanel;
private final DateOrRevisionOrTagSettings myDateOrRevisionOrTagSettings;
private JPanel myPanel;
private JPanel myKeywordSubstitutionPanel;
private JRadioButton myDoNotMerge;
private JRadioButton myMergeWithBranch;
private JRadioButton myMergeTwoBranches;
private final JRadioButton[] myMergingGroup;
private final Project myProject;
public UpdateOptionsPanel(Project project,
final Collection<FilePath> files) {
myProject = project;
final CvsConfiguration configuration = CvsConfiguration.getInstance(myProject);
myChangeKeywordSubstitutionPanel =
new ChangeKeywordSubstitutionPanel(KeywordSubstitution.getValue(configuration.UPDATE_KEYWORD_SUBSTITUTION));
configuration.CLEAN_COPY = false;
configuration.RESET_STICKY = false;
myMergingGroup = new JRadioButton[]{myDoNotMerge, myMergeWithBranch, myMergeTwoBranches};
myKeywordSubstitutionPanel.setLayout(new BorderLayout());
myKeywordSubstitutionPanel.add(myChangeKeywordSubstitutionPanel.getComponent(), BorderLayout.CENTER);
myDateOrRevisionOrTagSettings = new DateOrRevisionOrTagSettings(new TagsProviderOnVirtualFiles(files),
project);
myDateOrRevisionOrTagSettings.setHeadCaption(CvsBundle.message("label.default.update.branch"));
myDateOrRevisionPanel.setLayout(new BorderLayout());
myDateOrRevisionPanel.add(myDateOrRevisionOrTagSettings.getPanel(), BorderLayout.CENTER);
TagsHelper.addChooseBranchAction(myBranch, files, project);
TagsHelper.addChooseBranchAction(myBranch2, files, project);
}
public void reset() {
CvsConfiguration config = CvsConfiguration.getInstance(myProject);
myPruneEmptyDirectories.setSelected(config.PRUNE_EMPTY_DIRECTORIES);
myDoNotMerge.setSelected(true);
myBranch.setText(config.MERGE_WITH_BRANCH1_NAME);
myBranch2.setText(config.MERGE_WITH_BRANCH2_NAME);
mySwitchToHeadRevision.setSelected(false);
myCreateNewDirectories.setSelected(config.CREATE_NEW_DIRECTORIES);
myCleanCopy.setSelected(false);
myDateOrRevisionOrTagSettings.updateFrom(config.UPDATE_DATE_OR_REVISION_SETTINGS);
for (JRadioButton jRadioButton : myMergingGroup) {
jRadioButton.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
enableBranchField();
}
});
}
enableBranchField();
}
private void enableBranchField() {
int mergingMode = getSelected(myMergingGroup);
switch (mergingMode) {
case CvsConfiguration.DO_NOT_MERGE:
myBranch.setEnabled(false);
myBranch2.setEnabled(false);
break;
case CvsConfiguration.MERGE_WITH_BRANCH:
myBranch.setEnabled(true);
myBranch2.setEnabled(false);
break;
case CvsConfiguration.MERGE_TWO_BRANCHES:
myBranch.setEnabled(true);
myBranch2.setEnabled(true);
break;
}
}
public void apply() throws ConfigurationException {
CvsConfiguration configuration = CvsConfiguration.getInstance(myProject);
configuration.CLEAN_COPY = false;
if (myCleanCopy.isSelected()) {
if (Messages.showYesNoDialog(
CvsBundle.message("confirmation.clean.copy"),
CvsBundle.message("confirmation.title.clean.copy"), Messages.getWarningIcon()) == Messages.YES) {
configuration.CLEAN_COPY = true;
} else {
throw new CancelledConfigurationException();
}
}
configuration.PRUNE_EMPTY_DIRECTORIES = myPruneEmptyDirectories.isSelected();
configuration.MERGING_MODE = getSelected(myMergingGroup);
configuration.MERGE_WITH_BRANCH1_NAME = myBranch.getText();
configuration.MERGE_WITH_BRANCH2_NAME = myBranch2.getText();
configuration.RESET_STICKY = mySwitchToHeadRevision.isSelected();
configuration.CREATE_NEW_DIRECTORIES = myCreateNewDirectories.isSelected();
final KeywordSubstitution keywordSubstitution = myChangeKeywordSubstitutionPanel.getKeywordSubstitution();
if (keywordSubstitution == null) {
configuration.UPDATE_KEYWORD_SUBSTITUTION = null;
} else {
configuration.UPDATE_KEYWORD_SUBSTITUTION = keywordSubstitution.toString();
}
myDateOrRevisionOrTagSettings.saveTo(configuration.UPDATE_DATE_OR_REVISION_SETTINGS);
}
private static int getSelected(JRadioButton[] mergingGroup) {
for (int i = 0; i < mergingGroup.length; i++) {
JRadioButton jRadioButton = mergingGroup[i];
if (jRadioButton.isSelected()) return i;
}
return 0;
}
public JComponent getPanel() {
return myPanel;
}
}