use of org.eclipse.n4js.ui.workingsets.WorkingSet in project n4js by eclipse.
the class N4JSProjectInWorkingSetDropAdapterAssistant method handleDrop.
@Override
public IStatus handleDrop(CommonDropAdapter dropAdapter, DropTargetEvent dropTargetEvent, Object target) {
WorkingSet oldTarget = (WorkingSet) target;
WorkingSetManager manager = oldTarget.getWorkingSetManager();
List<WorkingSet> allItems = newArrayList(manager.getAllWorkingSets());
List<WorkingSet> visibleItems = newArrayList(manager.getWorkingSets());
WorkingSetDiffBuilder diffBuilder = new WorkingSetDiffBuilder(manager);
ISelection selection = LocalSelectionTransfer.getTransfer().getSelection();
if (selection instanceof ITreeSelection) {
ManualAssociationWorkingSet oldSource = null;
for (TreePath path : ((ITreeSelection) selection).getPaths()) {
IProject project = ((IAdaptable) path.getLastSegment()).getAdapter(IProject.class);
if (project != null) {
if (!(target instanceof ManualAssociationWorkingSet)) {
return CANCEL_STATUS;
}
if (!ManualAssociationAwareWorkingSetManager.class.getName().equals(manager.getId())) {
return CANCEL_STATUS;
}
if (!workingSetContains(oldTarget, project) && !OTHERS_WORKING_SET_ID.equals(oldTarget.getId())) {
Collection<String> projectNames = newHashSet(((ManualAssociationWorkingSet) oldTarget).getAssociatedProjectNames());
projectNames.add(project.getName());
ManualAssociationWorkingSet newTarget = new ManualAssociationWorkingSet(projectNames, oldTarget.getId(), manager);
int allIndex = indexOfById(oldTarget, allItems);
allItems.remove(allIndex);
allItems.add(allIndex, newTarget);
int visibleIndex = indexOfById(oldTarget, visibleItems);
if (visibleIndex >= 0) {
visibleItems.remove(visibleIndex);
visibleItems.add(visibleIndex, newTarget);
}
diffBuilder.edit(oldTarget, newTarget);
oldTarget = newTarget;
}
// Check if our top-level element is a working set so that we can perform a move
if (path.getFirstSegment() instanceof ManualAssociationWorkingSet) {
if (oldSource == null) {
oldSource = ((ManualAssociationWorkingSet) path.getFirstSegment());
}
if (oldSource != null && !OTHERS_WORKING_SET_ID.equals(oldSource.getId())) {
Collection<String> projectNames = newHashSet(oldSource.getAssociatedProjectNames());
projectNames.remove(project.getName());
ManualAssociationWorkingSet newSource = new ManualAssociationWorkingSet(projectNames, oldSource.getId(), manager);
int allIndex = indexOfById(oldSource, allItems);
allItems.remove(allIndex);
allItems.add(allIndex, newSource);
int visibleIndex = indexOfById(oldSource, visibleItems);
if (visibleIndex >= 0) {
visibleItems.remove(visibleIndex);
visibleItems.add(visibleIndex, newSource);
}
diffBuilder.edit(oldSource, newSource);
oldSource = newSource;
}
}
} else if (path.getLastSegment() instanceof WorkingSet) {
WorkingSet movedWorkingSet = (WorkingSet) path.getLastSegment();
int sourceVisibleIndex = indexOfById(movedWorkingSet, visibleItems);
int sourceAllIndex = indexOfById(movedWorkingSet, allItems);
if (sourceVisibleIndex == -1 || sourceAllIndex == -1) {
return CANCEL_STATUS;
}
final Object currentTarget = getCommonDropAdapter().getCurrentTarget();
if (currentTarget instanceof WorkingSet) {
int targetVisibleIndex = indexOfById((WorkingSet) currentTarget, visibleItems);
int targetAllIndex = indexOfById((WorkingSet) currentTarget, allItems);
if (targetVisibleIndex == -1 || targetAllIndex == -1) {
return CANCEL_STATUS;
}
if (getCommonDropAdapter().getCurrentLocation() == ViewerDropAdapter.LOCATION_AFTER) {
targetVisibleIndex++;
targetAllIndex++;
}
WorkingSet visibleRemoved = visibleItems.remove(sourceVisibleIndex);
visibleItems.add(sourceVisibleIndex >= targetVisibleIndex ? targetVisibleIndex : targetVisibleIndex - 1, visibleRemoved);
WorkingSet allRemoved = allItems.remove(sourceAllIndex);
allItems.add(sourceAllIndex >= targetAllIndex ? targetAllIndex : targetAllIndex - 1, allRemoved);
} else {
return CANCEL_STATUS;
}
}
}
} else if (selection instanceof IStructuredSelection) {
for (Object item : ((IStructuredSelection) selection).toArray()) {
IProject project = ((IAdaptable) item).getAdapter(IProject.class);
if (project != null && !workingSetContains(oldTarget, project) && !OTHERS_WORKING_SET_ID.equals(oldTarget.getId())) {
Collection<String> projectNames = newHashSet(((ManualAssociationWorkingSet) oldTarget).getAssociatedProjectNames());
projectNames.add(project.getName());
ManualAssociationWorkingSet newTarget = new ManualAssociationWorkingSet(projectNames, oldTarget.getId(), manager);
allItems.remove(oldTarget);
allItems.add(newTarget);
if (visibleItems.remove(oldTarget)) {
visibleItems.add(newTarget);
}
diffBuilder.edit(oldTarget, newTarget);
oldTarget = newTarget;
}
}
}
WorkingSet[] newItems = Iterables.toArray(visibleItems, WorkingSet.class);
WorkingSet[] newAllItems = Iterables.toArray(allItems, WorkingSet.class);
Diff<WorkingSet> diff = diffBuilder.build(newItems, newAllItems);
if (!diff.isEmpty()) {
manager.updateState(diff);
manager.saveState(new NullProgressMonitor());
workingSetManagerBroker.refreshNavigator();
}
return OK_STATUS;
}
use of org.eclipse.n4js.ui.workingsets.WorkingSet in project n4js by eclipse.
the class GHOLD_101_WorkingSetsTest_PluginUITest method testDndSupport.
/**
*/
@Test
public void testDndSupport() throws CoreException {
final Collection<String> projectNames = newArrayList("A", "B", "C", "D", "E");
final IWorkspaceDescription workspaceDescription = ResourcesPlugin.getWorkspace().getDescription();
final boolean autoBuild = workspaceDescription.isAutoBuilding();
try {
// No need for the build at all.
workspaceDescription.setAutoBuilding(false);
for (final String projectName : projectNames) {
JavaProjectSetupUtil.createSimpleProject(projectName);
assertTrue("Project " + projectName + " is not accessible.", getProjectByName(projectName).isAccessible());
}
} finally {
workspaceDescription.setAutoBuilding(autoBuild);
}
activateWorkingSetManager(ManualAssociationAwareWorkingSetManager.class);
WorkingSetManager manager = broker.getActiveManager();
WorkingSetDiffBuilder builder = new WorkingSetDiffBuilder(manager);
List<WorkingSet> workingSets = newArrayList();
workingSets.add(new ManualAssociationWorkingSet(newArrayList(), "WS1", manager));
workingSets.add(new ManualAssociationWorkingSet(newArrayList(), "WS2", manager));
workingSets.add(new ManualAssociationWorkingSet(newArrayList(), "WS3", manager));
for (WorkingSet workingSet : workingSets) {
builder.add(workingSet);
}
workingSets.add(0, manager.getWorkingSets()[0]);
Diff<WorkingSet> diff = builder.build(Iterables.toArray(workingSets, WorkingSet.class), Iterables.toArray(workingSets, WorkingSet.class));
manager.updateState(diff);
waitForIdleState();
broker.refreshNavigator();
waitForIdleState();
commonViewer.expandToLevel(2);
waitForIdleState();
TreeItem[] treeItems = commonViewer.getTree().getItems();
final int expectedItemCount = workingSets.size();
assertTrue("Expected exactly " + expectedItemCount + " items in the Project Explorer. Input was: " + Arrays.toString(treeItems), treeItems.length == expectedItemCount);
for (TreeItem item : treeItems) {
Object data = item.getData();
assertTrue("Expected instance of working set. Was: " + data, data instanceof WorkingSet);
WorkingSet workingSet = (WorkingSet) data;
if (WorkingSet.OTHERS_WORKING_SET_ID.equals(workingSet.getId())) {
assertEquals("Expected " + projectNames.size() + " elements. Got: " + item.getItemCount(), projectNames.size(), item.getItemCount());
} else {
assertEquals("Expected 0 elements. Got: " + item.getItemCount(), 0, item.getItemCount());
}
}
StructuredSelection selection = new StructuredSelection(getProjectsByName("A", "B", "C"));
commonViewer.setSelection(selection);
assertEquals(3, commonViewer.getTree().getSelection().length);
INavigatorDnDService dnDService = projectExplorer.getNavigatorContentService().getDnDService();
CommonDropAdapterAssistant[] dropAdapterAssistants = dnDService.findCommonDropAdapterAssistants(manager.getWorkingSets()[1], commonViewer.getStructuredSelection());
assertTrue(!Arrays2.isEmpty(dropAdapterAssistants));
N4JSProjectInWorkingSetDropAdapterAssistant[] n4DropAdapterAssistants = Arrays2.filter(dropAdapterAssistants, N4JSProjectInWorkingSetDropAdapterAssistant.class);
assertTrue(!Arrays2.isEmpty(n4DropAdapterAssistants));
N4JSProjectInWorkingSetDropAdapterAssistant assistant = n4DropAdapterAssistants[0];
CommonDropAdapter adapter = assistant.getCommonDropAdapter();
LocalSelectionTransfer.getTransfer().setSelection(commonViewer.getStructuredSelection());
assistant.handleDrop(adapter, null, manager.getWorkingSets()[1]);
waitForIdleState();
broker.refreshNavigator();
waitForIdleState();
commonViewer.expandToLevel(2);
waitForIdleState();
treeItems = commonViewer.getTree().getItems();
for (TreeItem item : treeItems) {
Object data = item.getData();
assertTrue("Expected instance of working set. Was: " + data, data instanceof WorkingSet);
WorkingSet workingSet = (WorkingSet) data;
if (WorkingSet.OTHERS_WORKING_SET_ID.equals(workingSet.getId())) {
assertEquals("Expected " + (projectNames.size() - 3) + " elements. Got: " + item.getItemCount(), projectNames.size() - 3, item.getItemCount());
} else if ("WS1".equals(workingSet.getId())) {
assertEquals("Expected 3 elements. Got: " + item.getItemCount(), 3, item.getItemCount());
} else {
assertEquals("Expected 0 elements. Got: " + item.getItemCount(), 0, item.getItemCount());
}
}
}
use of org.eclipse.n4js.ui.workingsets.WorkingSet in project n4js by eclipse.
the class GHOLD_101_WorkingSetsTest_PluginUITest method testHideShowWorkingSets.
/**
*/
@Test
public void testHideShowWorkingSets() {
activateWorkingSetManager(ProjectTypeAwareWorkingSetManager.class);
TreeItem[] treeItems = commonViewer.getTree().getItems();
final int expectedItemCount = ProjectType.values().length + 1;
assertTrue("Expected exactly " + expectedItemCount + " items in the Project Explorer. Input was: " + Arrays.toString(treeItems), treeItems.length == expectedItemCount);
List<ProjectTypeWorkingSet> workingSets = from(asList(treeItems)).transform(item -> item.getData()).filter(ProjectTypeWorkingSet.class).toList();
assertEquals("Mismatching number of working sets.", expectedItemCount, workingSets.size());
List<ProjectTypeWorkingSet> workingSetsToHide = workingSets;
final HideWorkingSetAction hideAction = new HideWorkingSetAction();
commonViewer.setSelection(new StructuredSelection(workingSets.toArray()));
waitForIdleState();
treeItems = commonViewer.getTree().getItems();
final List<ProjectTypeWorkingSet> selectedWorkingSets = from(asList(treeItems)).transform(item -> item.getData()).filter(ProjectTypeWorkingSet.class).toList();
assertEquals(workingSetsToHide, selectedWorkingSets);
hideAction.selectionChanged(commonViewer.getStructuredSelection());
waitForIdleState();
assertFalse("Expected disabled action.", hideAction.isEnabled());
workingSetsToHide = newArrayList(workingSets.subList(0, 3));
commonViewer.setSelection(new StructuredSelection(workingSetsToHide.toArray()));
hideAction.selectionChanged(commonViewer.getStructuredSelection());
waitForIdleState();
assertTrue("Expected enabled action.", hideAction.isEnabled());
hideAction.run();
waitForIdleState();
treeItems = commonViewer.getTree().getItems();
workingSets = from(asList(treeItems)).transform(item -> item.getData()).filter(ProjectTypeWorkingSet.class).toList();
assertEquals("Mismatching number of working sets.", expectedItemCount - workingSetsToHide.size(), workingSets.size());
for (final WorkingSet workingSet : workingSetsToHide) {
assertTrue("Working set must not be visible in the navigator: " + workingSet, !workingSets.contains(workingSet));
}
IContributionItem showHiddenWorkingSetsItem = from(Arrays.asList(projectExplorer.getViewSite().getActionBars().getToolBarManager().getItems())).firstMatch(i -> ShowHiddenWorkingSetsDropDownAction.class.getName().equals(i.getId())).orNull();
assertNotNull("Expected visible toolbar item, since there are hidden working sets.", showHiddenWorkingSetsItem);
assertTrue("Expected a type of " + ActionContributionItem.class, showHiddenWorkingSetsItem instanceof ActionContributionItem);
final IAction action = ((ActionContributionItem) showHiddenWorkingSetsItem).getAction();
assertTrue("Expected a type of " + ShowHiddenWorkingSetsDropDownAction.class, action instanceof ShowHiddenWorkingSetsDropDownAction);
final ShowHiddenWorkingSetsDropDownAction showHiddenWorkingSetsAction = (ShowHiddenWorkingSetsDropDownAction) action;
Menu menu = showHiddenWorkingSetsAction.getMenu(commonViewer.getControl());
assertTrue("Expected " + workingSetsToHide.size() + " menu item plus a separator plus an item for showing all hidden elements.", workingSetsToHide.size() + 2 == menu.getItemCount());
menu.getItem(0).notifyListeners(SWT.Selection, null);
waitForIdleState();
workingSetsToHide.remove(0);
treeItems = commonViewer.getTree().getItems();
workingSets = from(asList(treeItems)).transform(item -> item.getData()).filter(ProjectTypeWorkingSet.class).toList();
assertEquals("Mismatching number of working sets.", expectedItemCount - workingSetsToHide.size(), workingSets.size());
menu = showHiddenWorkingSetsAction.getMenu(commonViewer.getControl());
assertTrue("Expected " + workingSetsToHide.size() + " menu item plus a separator plus an item for showing all hidden elements.", workingSetsToHide.size() + 2 == menu.getItemCount());
menu.getItem(menu.getItemCount() - 1).notifyListeners(SWT.Selection, null);
waitForIdleState();
treeItems = commonViewer.getTree().getItems();
assertTrue("Expected exactly " + expectedItemCount + " items in the Project Explorer. Input was: " + Arrays.toString(treeItems), treeItems.length == expectedItemCount);
showHiddenWorkingSetsItem = from(Arrays.asList(projectExplorer.getViewSite().getActionBars().getToolBarManager().getItems())).firstMatch(i -> ShowHiddenWorkingSetsDropDownAction.class.getName().equals(i.getId())).orNull();
assertNull("Expected not visible toolbar item, since all working sets are visible.", showHiddenWorkingSetsItem);
treeItems = commonViewer.getTree().getItems();
assertTrue("Expected exactly " + expectedItemCount + " items in the Project Explorer. Input was: " + Arrays.toString(treeItems), treeItems.length == expectedItemCount);
workingSets = from(asList(treeItems)).transform(item -> item.getData()).filter(ProjectTypeWorkingSet.class).toList();
workingSetsToHide = newArrayList(workingSets.subList(0, 3));
commonViewer.setSelection(new StructuredSelection(workingSetsToHide.toArray()));
hideAction.selectionChanged(commonViewer.getStructuredSelection());
waitForIdleState();
assertTrue("Expected enabled action.", hideAction.isEnabled());
hideAction.run();
waitForIdleState();
showHiddenWorkingSetsItem = from(Arrays.asList(projectExplorer.getViewSite().getActionBars().getToolBarManager().getItems())).firstMatch(i -> ShowHiddenWorkingSetsDropDownAction.class.getName().equals(i.getId())).orNull();
// This state will be reseted in tear down phase.
assertNotNull("Expected visible toolbar item, since there are hidden working sets.", showHiddenWorkingSetsItem);
}
use of org.eclipse.n4js.ui.workingsets.WorkingSet in project n4js by eclipse.
the class GHOLD_101_WorkingSetsTest_PluginUITest method testProjectNameFilterWorkingSetGrouping.
/**
*/
@Test
public void testProjectNameFilterWorkingSetGrouping() throws CoreException {
final Multimap<String, String> filterNamesMapping = LinkedHashMultimap.create();
filterNamesMapping.putAll(OTHERS_WORKING_SET_ID, newArrayList("org.eclipse.n4js.mangelhaft", "org.eclipse.n4js.mangelhaft.assert", "org.eclipse.n4js.mangelhaft.assert.test", "org.eclipse.n4js.mangelhaft.types", "eu.numberfour.mangelhaft.reporter.console", "eu.numberfour.mangelhaft.reporter.html", "org.eclipse.n4js.mangelhaft.reporter.ide", "org.eclipse.n4js.mangelhaft.reporter.ide.test", "eu.numberfour.mangelhaft.reporter.xunit", "eu.numberfour.mangelhaft.runner.html", "org.eclipse.n4js.mangelhaft.runner.ide", "eu.numberfour.mangelhaft.runner.node", "org.eclipse.n4js.mangelhaft.test"));
filterNamesMapping.putAll(".*-runtime-.*", newArrayList("n4js-runtime-es2015", "n4js-runtime-esnext", "n4js-runtime-fetch", "n4js-runtime-html5", "n4js-runtime-n4", "n4js-runtime-n4-tests", "n4js-runtime-node", "n4js-runtime-node-tests", "n4js-runtime-v8"));
filterNamesMapping.putAll(".*lib.*", newArrayList("org.eclipse.lib.format", "org.eclipse.lib.format.api", "org.eclipse.lib.format.api-tests", "org.eclipse.lib.i18n.api", "org.eclipse.lib.i18n.api-tests", "org.eclipse.lib.jtl", "org.eclipse.lib.jtl.api", "org.eclipse.lib.jtl.api-tests", "org.eclipse.lib.jtl.tests", "org.eclipse.lib.model.base", "org.eclipse.lib.model.base.api", "org.eclipse.lib.model.base.api-tests", "org.eclipse.lib.model.base.tests", "org.eclipse.lib.model.common", "org.eclipse.lib.model.common.api", "org.eclipse.lib.model.common.api-tests", "org.eclipse.lib.model.common.tests", "org.eclipse.lib.model.core", "org.eclipse.lib.model.core.api", "org.eclipse.lib.model.core.api-tests", "org.eclipse.lib.model.core.zoo.berlin", "org.eclipse.lib.model.gen", "org.eclipse.lib.model.gen.api", "org.eclipse.lib.model.gen.api-tests", "org.eclipse.lib.notificationCenter.api", "org.eclipse.lib.notificationCenter.api-tests", "org.eclipse.lib.npm-dependencies", "org.eclipse.lib.transaction", "org.eclipse.lib.transaction.api", "org.eclipse.lib.transaction.api-tests", "org.eclipse.lib.util"));
filterNamesMapping.putAll(".*lib.*api.*", newArrayList("org.eclipse.lib.format.api", "org.eclipse.lib.format.api-tests", "org.eclipse.lib.i18n.api", "org.eclipse.lib.i18n.api-tests", "org.eclipse.lib.jtl.api", "org.eclipse.lib.jtl.api-tests", "org.eclipse.lib.model.base.api", "org.eclipse.lib.model.base.api-tests", "org.eclipse.lib.model.common.api", "org.eclipse.lib.model.common.api-tests", "org.eclipse.lib.model.core.api", "org.eclipse.lib.model.core.api-tests", "org.eclipse.lib.model.gen.api", "org.eclipse.lib.model.gen.api-tests", "org.eclipse.lib.notificationCenter.api", "org.eclipse.lib.notificationCenter.api-tests", "org.eclipse.lib.transaction.api", "org.eclipse.lib.transaction.api-tests"));
filterNamesMapping.putAll(".*lib.*api.*test.*", newArrayList("org.eclipse.lib.format.api-tests", "org.eclipse.lib.i18n.api-tests", "org.eclipse.lib.jtl.api-tests", "org.eclipse.lib.model.base.api-tests", "org.eclipse.lib.model.common.api-tests", "org.eclipse.lib.model.core.api-tests", "org.eclipse.lib.model.gen.api-tests", "org.eclipse.lib.notificationCenter.api-tests", "org.eclipse.lib.transaction.api-tests"));
final IWorkspaceDescription workspaceDescription = ResourcesPlugin.getWorkspace().getDescription();
final boolean autoBuild = workspaceDescription.isAutoBuilding();
try {
// No need for the build at all.
workspaceDescription.setAutoBuilding(false);
for (final String projectName : filterNamesMapping.values()) {
JavaProjectSetupUtil.createSimpleProject(projectName);
}
} finally {
workspaceDescription.setAutoBuilding(autoBuild);
}
activateWorkingSetManager(ProjectNameFilterAwareWorkingSetManager.class);
final WorkingSetManager manager = broker.getActiveManager();
final WorkingSetDiffBuilder builder = new WorkingSetDiffBuilder(manager);
final List<WorkingSet> workingSets = newArrayList();
final WorkingSet other = new ProjectNameFilterWorkingSet(compile(OTHERS_WORKING_SET_ID), OTHERS_WORKING_SET_ID, manager);
builder.add(other);
workingSets.add(other);
for (final String workingSetId : filterNamesMapping.keySet()) {
final WorkingSet workingSet = new ProjectNameFilterWorkingSet(compile(workingSetId), workingSetId, manager);
builder.add(workingSet);
workingSets.add(workingSet);
}
final Diff<WorkingSet> diff = builder.build(toArray(workingSets, WorkingSet.class), toArray(workingSets, WorkingSet.class));
manager.updateState(diff);
broker.refreshNavigator();
waitForIdleState();
commonViewer.expandToLevel(2);
waitForIdleState();
final TreeItem[] treeItems = commonViewer.getTree().getItems();
final int expectedItemCount = filterNamesMapping.keySet().size();
assertTrue("Expected exactly " + expectedItemCount + " items in the Project Explorer. Input was: " + Arrays.toString(treeItems), treeItems.length == expectedItemCount);
final List<ProjectNameFilterWorkingSet> workingSetsFromTree = from(asList(treeItems)).transform(item -> item.getData()).filter(ProjectNameFilterWorkingSet.class).toList();
assertEquals("Mismatching number of working sets.", expectedItemCount, workingSetsFromTree.size());
for (final TreeItem treeItem : treeItems) {
final Pattern filter = ((ProjectNameFilterWorkingSet) treeItem.getData()).getFilter();
final Collection<String> expectedProjectNames = filterNamesMapping.get(filter.pattern());
assertEquals("Child item count mismatch: " + treeItem, expectedProjectNames.size(), treeItem.getItemCount());
for (final TreeItem child : treeItem.getItems()) {
final String childText = child.getText();
assertTrue("Unexpected tree item label: " + childText + ". Expected any of: " + Iterables.toString(expectedProjectNames), expectedProjectNames.contains(childText));
}
}
}
Aggregations