Skip to content

Commit

Permalink
JBIDE-9544: Most-recent choices are now shown in the wizard dialog
Browse files Browse the repository at this point in the history
JBIDE-9544: Unavailable addons should not be shown in the most-recent
choices
  • Loading branch information
gastaldi committed Apr 16, 2014
1 parent ad1ac7f commit 88e539a
Show file tree
Hide file tree
Showing 3 changed files with 107 additions and 11 deletions.
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
package org.jboss.tools.forge.ui.ext.dialog;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
Expand All @@ -10,6 +13,7 @@

import org.eclipse.core.resources.IFile;
import org.eclipse.jface.dialogs.PopupDialog;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.StructuredSelection;
Expand Down Expand Up @@ -37,13 +41,18 @@
import org.jboss.tools.forge.ui.ext.ForgeUIPlugin;
import org.jboss.tools.forge.ui.ext.quickaccess.QuickAccessContents;
import org.jboss.tools.forge.ui.ext.quickaccess.QuickAccessElement;
import org.jboss.tools.forge.ui.ext.quickaccess.QuickAccessProvider;
import org.jboss.tools.forge.ui.ext.quickaccess.impl.ForgeQuickAccessElement;
import org.jboss.tools.forge.ui.ext.quickaccess.impl.ForgeQuickAccessProvider;
import org.jboss.tools.forge.ui.notifications.NotificationType;

public class UICommandListDialog extends PopupDialog {

private final WizardDialogHelper wizardHelper;
private static final int MAXIMUM_NUMBER_OF_ELEMENTS = 5;

// TODO: when would this list be cleaned up?
private static final LinkedList<QuickAccessElement> PREVIOUS_CHOICES_LIST = new LinkedList<>();

public UICommandListDialog(IWorkbenchWindow window) {
super(window.getShell(), SWT.RESIZE, true,
Expand Down Expand Up @@ -119,7 +128,7 @@ public void run() {
ForgeUIPlugin.log(ie);
return;
}
final ForgeQuickAccessProvider[] providers;
final QuickAccessProvider[] providers;
try {
providers = getProviders();
} catch (Exception e) {
Expand All @@ -143,7 +152,7 @@ public void doClose() {

@Override
public QuickAccessElement getPerfectMatch(String filter) {
for (ForgeQuickAccessProvider provider : providers) {
for (QuickAccessProvider provider : providers) {
QuickAccessElement elem = provider
.getElementForId(filter);
if (elem != null) {
Expand All @@ -158,6 +167,7 @@ public void handleElementSelected(String textStr,
Object selectedElement) {
if (selectedElement instanceof ForgeQuickAccessElement) {
ForgeQuickAccessElement element = (ForgeQuickAccessElement) selectedElement;
addPreviousChoice(element);
wizardHelper.openWizard(element.getLabel(),
element.getCommand());
}
Expand All @@ -176,7 +186,9 @@ public void handleElementSelected(String textStr,
/**
* Returns each provider by a category
*/
private ForgeQuickAccessProvider[] getProviders() {
private QuickAccessProvider[] getProviders() {
List<QuickAccessProvider> allProviders = new ArrayList<>();
Collection<QuickAccessElement> allElements = new HashSet<>();
Map<String, List<UICommand>> categories = new TreeMap<>();
for (UICommand command : wizardHelper.getAllCandidatesAsList()) {
String categoryName = getCategoryName(wizardHelper.getContext(),
Expand All @@ -191,11 +203,18 @@ private ForgeQuickAccessProvider[] getProviders() {
// Create Providers for each category
Set<ForgeQuickAccessProvider> providers = new TreeSet<>();
for (Entry<String, List<UICommand>> entry : categories.entrySet()) {
providers.add(new ForgeQuickAccessProvider(entry.getKey(),
wizardHelper.getContext(), entry.getValue()));
ForgeQuickAccessProvider provider = new ForgeQuickAccessProvider(
entry.getKey(), wizardHelper.getContext(),
entry.getValue(), PREVIOUS_CHOICES_LIST, allElements);
providers.add(provider);
}
return providers
.toArray(new ForgeQuickAccessProvider[providers.size()]);
// In case a command is unavailable, remove from previous choices list
PREVIOUS_CHOICES_LIST.retainAll(allElements);
// Add PreviousChoicesProvider
allProviders.add(new PreviousChoicesProvider());
allProviders.addAll(providers);
return allProviders
.toArray(new QuickAccessProvider[allProviders.size()]);
}

private String getCategoryName(UIContext context, UICommand command) {
Expand All @@ -205,5 +224,48 @@ private String getCategoryName(UIContext context, UICommand command) {
}
return category.toString();
}


private void addPreviousChoice(QuickAccessElement element) {
PREVIOUS_CHOICES_LIST.remove(element);
if (PREVIOUS_CHOICES_LIST.size() == MAXIMUM_NUMBER_OF_ELEMENTS) {
PREVIOUS_CHOICES_LIST.removeLast();
}
PREVIOUS_CHOICES_LIST.addFirst(element);
}

private class PreviousChoicesProvider extends QuickAccessProvider {
@Override
public String getId() {
return "org.jboss.tools.forge.ui.previousChoices";
}

@Override
public String getName() {
return "Previous Choices";
}

@Override
public ImageDescriptor getImageDescriptor() {
return ForgeUIPlugin.getForgeIcon();
}

@Override
public List<QuickAccessElement> getElements() {
return PREVIOUS_CHOICES_LIST;
}

@Override
public List<QuickAccessElement> getElementsSorted() {
return PREVIOUS_CHOICES_LIST;
}

@Override
public QuickAccessElement getElementForId(String id) {
return null;
}

@Override
protected void doReset() {
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -56,4 +56,29 @@ public UICommand getCommand() {
public String getTooltip() {
return this.tooltip;
}

@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((label == null) ? 0 : label.hashCode());
return result;
}

@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
ForgeQuickAccessElement other = (ForgeQuickAccessElement) obj;
if (label == null) {
if (other.label != null)
return false;
} else if (!label.equals(other.label))
return false;
return true;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
package org.jboss.tools.forge.ui.ext.quickaccess.impl;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
Expand All @@ -25,19 +26,27 @@ public class ForgeQuickAccessProvider extends QuickAccessProvider implements
private String category;

public ForgeQuickAccessProvider(String category, UIContext context,
List<UICommand> commands) {
List<UICommand> commands, List<QuickAccessElement> previous,
Collection<QuickAccessElement> allElements) {
this.category = category;
if (commands != null)
for (UICommand command : commands) {
ForgeQuickAccessElement elem = new ForgeQuickAccessElement(
this, context, command);
candidates.put(elem.getId(), elem);
int idx = previous.indexOf(elem);
if (idx < 0) {
candidates.put(elem.getId(), elem);
} else {
// Previous UICommand has old values. Replace with a new one
previous.set(idx, elem);
}
allElements.add(elem);
}
}

@Override
public String getId() {
return "forge-" + category;
return "org.jboss.tools.forge.ui." + category;
}

@Override
Expand Down

0 comments on commit 88e539a

Please sign in to comment.