Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/repo/CVSWorkingSetFolderSelectionPage.java')
-rw-r--r--bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/repo/CVSWorkingSetFolderSelectionPage.java99
1 files changed, 85 insertions, 14 deletions
diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/repo/CVSWorkingSetFolderSelectionPage.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/repo/CVSWorkingSetFolderSelectionPage.java
index a9a8f94db..7096f0df0 100644
--- a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/repo/CVSWorkingSetFolderSelectionPage.java
+++ b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/repo/CVSWorkingSetFolderSelectionPage.java
@@ -21,6 +21,7 @@ import java.util.Map;
import java.util.Set;
import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.jface.dialogs.ProgressMonitorDialog;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.CheckStateChangedEvent;
@@ -62,8 +63,10 @@ import org.eclipse.ui.model.WorkbenchLabelProvider;
public class CVSWorkingSetFolderSelectionPage extends CVSWizardPage {
private String workingSetName;
+ private String originalWorkingSetName;
private Set checkedFolders;
private Map modulesCategoryCache = new HashMap();
+ private boolean editing = false;
private Text nameField;
private CheckboxTreeViewer tree;
@@ -73,6 +76,7 @@ public class CVSWorkingSetFolderSelectionPage extends CVSWizardPage {
public CVSWorkingSetFolderSelectionPage(String pageName, String title, ImageDescriptor titleImage, String description) {
super(pageName, title, titleImage, description);
checkedFolders = new HashSet();
+ workingSetName = "";
}
/**
* @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
@@ -106,11 +110,7 @@ public class CVSWorkingSetFolderSelectionPage extends CVSWizardPage {
// Ignore
}
public void treeExpanded(TreeExpansionEvent event) {
- Object element = event.getElement();
- if (element instanceof ICVSRepositoryLocation) {
- ICVSRepositoryLocation location = (ICVSRepositoryLocation) element;
- tree.setGrayed(CVSWorkingSetFolderSelectionPage.this.getModuleCategory(location), true);
- }
+ CVSWorkingSetFolderSelectionPage.this.handleExpansion(event.getElement());
}
});
@@ -131,6 +131,17 @@ public class CVSWorkingSetFolderSelectionPage extends CVSWizardPage {
updateWidgetEnablements();
nameField.setFocus();
}
+ /**
+ * Method handleExpansion.
+ * @param object
+ */
+ public void handleExpansion(Object element) {
+ if (element instanceof ICVSRepositoryLocation) {
+ ICVSRepositoryLocation location = (ICVSRepositoryLocation) element;
+ tree.setGrayed(CVSWorkingSetFolderSelectionPage.this.getModuleCategory(location), true);
+ }
+ updateCheckState(element);
+ }
/**
* Method handleChecked.
@@ -248,7 +259,7 @@ public class CVSWorkingSetFolderSelectionPage extends CVSWizardPage {
* Method initializeValues.
*/
private void initializeValues() {
- workingSetName = "";
+ nameField.setText(workingSetName);
tree.setGrayedElements(getRepositoryManager().getKnownRepositoryLocations());
}
@@ -259,33 +270,48 @@ public class CVSWorkingSetFolderSelectionPage extends CVSWizardPage {
// update the check state of repository locations and modules categories
tree.removeCheckStateListener(checkStateListener);
try {
- updateCheckState();
+ updateCheckState(null);
// Make sure the name is valid
- if (!isValidName(workingSetName)) {
+ if (workingSetName.length() == 0) {
+ setPageComplete(false);
+ setErrorMessage(null);
+ } else if (!isValidName(workingSetName)) {
setPageComplete(false);
setErrorMessage(Policy.bind("CVSWorkingSetFolderSelectionPage.invalidWorkingSetName", workingSetName)); //$NON-NLS-1$
+ } else if (isDuplicateName(workingSetName)) {
+ setPageComplete(false);
+ setErrorMessage(Policy.bind("CVSWorkingSetFolderSelectionPage.duplicateWorkingSetName", workingSetName)); //$NON-NLS-1$
+ } else if (checkedFolders.isEmpty()) {
+ setErrorMessage(Policy.bind("CVSWorkingSetFolderSelectionPage.mustSelectFolder")); //$NON-NLS-1$
+ setPageComplete(false);
} else {
+ setPageComplete(true);
setErrorMessage(null);
}
- // The page is complete when a least one folder is checked
- boolean complete = ! checkedFolders.isEmpty();
- setPageComplete(complete);
} finally {
tree.addCheckStateListener(checkStateListener);
}
}
- private void updateCheckState() {
+ private void updateCheckState(Object expanded) {
ICVSRepositoryLocation[] locations = getRepositoryManager().getKnownRepositoryLocations();
Set checkedLocations = new HashSet();
Set checkedCategories = new HashSet();
+ List expandedParents = new ArrayList();
+ expandedParents.addAll(Arrays.asList(tree.getExpandedElements()));
+ if (expanded != null)
+ expandedParents.add(expanded);
for (Iterator iter = checkedFolders.iterator(); iter.hasNext();) {
ICVSRemoteFolder folder = (ICVSRemoteFolder) iter.next();
checkedLocations.add(folder.getRepository());
if (folder.isDefinedModule()) {
+ ModulesCategory category = getModuleCategory(folder.getRepository());
checkedCategories.add(getModuleCategory(folder.getRepository()));
+ if (expandedParents.contains(category))
+ tree.setChecked(folder, true);
+ } else if (expandedParents.contains(folder.getRepository())) {
+ tree.setChecked(folder, true);
}
- tree.setChecked(folder, true);
}
for (int i = 0; i < locations.length; i++) {
ICVSRepositoryLocation location = locations[i];
@@ -293,7 +319,8 @@ public class CVSWorkingSetFolderSelectionPage extends CVSWizardPage {
}
for (Iterator iter = modulesCategoryCache.values().iterator(); iter.hasNext();) {
ModulesCategory element = (ModulesCategory) iter.next();
- tree.setChecked(element, checkedCategories.contains(element));
+ if (expandedParents.contains(element.getRepository()))
+ tree.setChecked(element, checkedCategories.contains(element));
}
}
@@ -313,6 +340,25 @@ public class CVSWorkingSetFolderSelectionPage extends CVSWizardPage {
return true;
}
+ /**
+ * Method isDuplicateName.
+ * @param workingSetName
+ * @return boolean
+ */
+ private boolean isDuplicateName(String workingSetName) {
+ if (originalWorkingSetName != null && workingSetName.equals(originalWorkingSetName)) {
+ return false;
+ }
+ String names[] = CVSUIPlugin.getPlugin().getRepositoryManager().getWorkingSetNames();
+ for (int i = 0; i < names.length; i++) {
+ String string = names[i];
+ if (workingSetName.equals(string)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
protected CheckboxTreeViewer createFolderSelectionTree(Composite composite, int span) {
CheckboxTreeViewer tree = new CheckboxTreeViewer(composite, SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
tree.setUseHashlookup(true);
@@ -399,5 +445,30 @@ public class CVSWorkingSetFolderSelectionPage extends CVSWizardPage {
public ICVSRemoteFolder[] getSelectedFolders() {
return (ICVSRemoteFolder[]) checkedFolders.toArray(new ICVSRemoteFolder[checkedFolders.size()]);
}
+
+ /**
+ * Method setOriginalWorkingSet.
+ * @param editedSet
+ */
+ public void setOriginalWorkingSet(final CVSWorkingSet editedSet) {
+ if (editedSet == null) return;
+ originalWorkingSetName = editedSet.getName();
+ workingSetName = editedSet.getName();
+ try {
+ new ProgressMonitorDialog(getShell()).run(false, false, new IRunnableWithProgress() {
+ public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
+ try {
+ ICVSRemoteFolder[] folders = editedSet.getFolders(monitor);
+ checkedFolders.addAll(Arrays.asList(folders));
+ } catch (CVSException e) {
+ throw new InvocationTargetException(e);
+ }
+ }
+ });
+ } catch (InvocationTargetException e) {
+ CVSUIPlugin.openError(null, null, null , e, CVSUIPlugin.PERFORM_SYNC_EXEC);
+ } catch (InterruptedException e) {
+ }
+ }
}

Back to the top