blob: d455ec93df6261dd73e21eb0536ae3504f13a43c [file] [log] [blame]
/*
* Copyright 2000-2012 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.ui.experts;
import com.intellij.CvsBundle;
import com.intellij.cvsSupport2.config.CvsRootConfiguration;
import com.intellij.cvsSupport2.connections.CvsEnvironment;
import com.intellij.cvsSupport2.connections.CvsRootException;
import com.intellij.cvsSupport2.cvsBrowser.CvsElement;
import com.intellij.cvsSupport2.cvsBrowser.CvsTree;
import com.intellij.cvsSupport2.cvsoperations.common.LoginPerformer;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.ModalityState;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.Messages;
import com.intellij.openapi.util.Ref;
import com.intellij.openapi.vcs.VcsException;
import com.intellij.util.Consumer;
import org.intellij.lang.annotations.JdkConstants;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
import java.util.Collections;
import java.util.Observable;
import java.util.Observer;
/**
* author: lesya
*/
public class SelectCvsElementStep extends WizardStep {
private CvsTree myCvsTree;
private final SelectCVSConfigurationStep mySelectCVSConfigurationStep;
private final Project myProject;
private final boolean myShowFiles;
@JdkConstants.TreeSelectionMode private final int mySelectionMode;
private final boolean myAllowRootSelection;
private final boolean myShowModules;
private final Ref<Boolean> myErrors = new Ref<Boolean>();
public SelectCvsElementStep(String title, CvsWizard wizard,
Project project,
SelectCVSConfigurationStep selectCVSConfigurationStep,
boolean allowRootSelection,
@JdkConstants.TreeSelectionMode int selectionMode,
boolean showModules,
boolean showFiles) {
super(title, wizard);
myShowModules = showModules;
mySelectCVSConfigurationStep = selectCVSConfigurationStep;
myProject = project;
myShowFiles = showFiles;
mySelectionMode = selectionMode;
myAllowRootSelection = allowRootSelection;
init();
}
@Override
public boolean nextIsEnabled() {
return myCvsTree.getCurrentSelection().length > 0 && myErrors.isNull();
}
private boolean isLogged(final CvsRootConfiguration selectedConfiguration) {
myErrors.set(null);
final LoginPerformer performer = new LoginPerformer(
myProject, Collections.<CvsEnvironment>singletonList(selectedConfiguration),
new Consumer<VcsException>() {
@Override
public void consume(VcsException e) {
myErrors.set(Boolean.TRUE);
}
});
try {
final boolean logged = performer.loginAll(false);
return logged && myErrors.isNull();
} catch (CvsRootException e) {
Messages.showErrorDialog(e.getMessage(), CvsBundle.message("error.title.invalid.cvs.root"));
return false;
}
}
@Override
public boolean preNextCheck() {
final CvsRootConfiguration selectedConfiguration = mySelectCVSConfigurationStep.getSelectedConfiguration();
if (selectedConfiguration == null) {
return false;
}
final boolean logged = isLogged(selectedConfiguration);
if (logged) {
myCvsTree.setCvsRootConfiguration((CvsRootConfiguration)selectedConfiguration.clone());
}
return logged;
}
@Override
protected void dispose() {
if (myCvsTree != null) {
myCvsTree.deactivated();
}
}
@Nullable
public CvsElement getSelectedCvsElement() {
final CvsElement[] selection = myCvsTree.getCurrentSelection();
if (selection.length == 0) return null;
return selection[0];
}
@Override
protected JComponent createComponent() {
myCvsTree = new CvsTree(myProject, myAllowRootSelection, mySelectionMode, myShowModules, myShowFiles, new Consumer<VcsException>() {
@Override
public void consume(final VcsException e) {
myErrors.set(Boolean.TRUE);
ApplicationManager.getApplication().invokeLater(new Runnable() {
@Override
public void run() {
Messages.showErrorDialog(e.getMessage(), CvsBundle.message("error.title.cvs.error"));
}
}, ModalityState.any());
}
});
myCvsTree.init();
myCvsTree.addSelectionObserver(new Observer() {
@Override
public void update(Observable o, Object arg) {
if (CvsTree.SELECTION_CHANGED.equals(arg)) {
getWizard().updateStep();
}
}
});
return myCvsTree;
}
public CvsElement[] getSelectedCvsElements() {
return myCvsTree.getCurrentSelection();
}
@Override
public JComponent getPreferredFocusedComponent() {
return myCvsTree.getTree();
}
}