1 11 12 package org.eclipse.ui.internal.navigator.extensions; 13 14 import java.util.ArrayList ; 15 import java.util.HashMap ; 16 import java.util.LinkedHashSet ; 17 import java.util.List ; 18 import java.util.Map ; 19 import java.util.Set ; 20 21 import org.eclipse.jface.viewers.IStructuredSelection; 22 import org.eclipse.jface.viewers.StructuredSelection; 23 import org.eclipse.ui.IEditorInput; 24 import org.eclipse.ui.internal.navigator.NavigatorContentService; 25 import org.eclipse.ui.navigator.ILinkHelper; 26 27 31 public class LinkHelperService { 32 33 private static final ILinkHelper[] CANT_GET_NO_HELP = new ILinkHelper[0]; 34 35 private NavigatorContentService contentService; 36 37 private final Map linkHelpers = new HashMap (); 38 39 43 public LinkHelperService(NavigatorContentService aContentService) { 44 contentService = aContentService; 45 } 46 47 54 public ILinkHelper[] getLinkHelpersFor(Object anObject) { 55 56 LinkHelperDescriptor[] descriptors = LinkHelperManager.getInstance() 57 .getLinkHelpersFor(anObject, contentService); 58 if (descriptors.length == 0) { 59 return CANT_GET_NO_HELP; 60 } 61 62 Set helpers = new LinkedHashSet (); 63 for (int i = 0; i < descriptors.length; i++) { 64 helpers.add(getLinkHelper(descriptors[i])); 65 } 66 if (helpers.size() == 0) 67 return CANT_GET_NO_HELP; 68 return (ILinkHelper[]) helpers.toArray(new ILinkHelper[helpers.size()]); 69 70 } 71 72 79 public ILinkHelper[] getLinkHelpersFor(IEditorInput input) { 80 LinkHelperDescriptor[] descriptors = LinkHelperManager.getInstance() 81 .getLinkHelpersFor(input, contentService); 82 if (descriptors.length == 0) { 83 return CANT_GET_NO_HELP; 84 } 85 86 Set helpers = new LinkedHashSet (); 87 for (int i = 0; i < descriptors.length; i++) { 88 helpers.add(getLinkHelper(descriptors[i])); 89 } 90 if (helpers.size() == 0) 91 return CANT_GET_NO_HELP; 92 return (ILinkHelper[]) helpers.toArray(new ILinkHelper[helpers.size()]); 93 } 94 95 private ILinkHelper getLinkHelper(LinkHelperDescriptor descriptor) { 96 ILinkHelper helper = (ILinkHelper) linkHelpers.get(descriptor); 97 if (helper == null) { 98 synchronized (this) { 99 if (helper == null) { 100 linkHelpers.put(descriptor, helper = descriptor 101 .createLinkHelper()); 102 } 103 } 104 } 105 return helper; 106 } 107 108 115 public IStructuredSelection getSelectionFor(IEditorInput input) { 116 ILinkHelper[] helpers = getLinkHelpersFor(input); 117 118 IStructuredSelection selection = StructuredSelection.EMPTY; 119 IStructuredSelection newSelection = StructuredSelection.EMPTY; 120 121 for (int i = 0; i < helpers.length; i++) { 122 selection = helpers[i].findSelection(input); 123 if (selection != null && !selection.isEmpty()) { 124 newSelection = mergeSelection(newSelection, selection); 125 } 126 } 127 return newSelection; 128 } 129 130 private IStructuredSelection mergeSelection(IStructuredSelection aBase, 131 IStructuredSelection aSelectionToAppend) { 132 if (aBase == null || aBase.isEmpty()) { 133 return (aSelectionToAppend != null) ? aSelectionToAppend 134 : StructuredSelection.EMPTY; 135 } else if (aSelectionToAppend == null || aSelectionToAppend.isEmpty()) { 136 return aBase; 137 } else { 138 List newItems = new ArrayList (aBase.toList()); 139 newItems.addAll(aSelectionToAppend.toList()); 140 return new StructuredSelection(newItems); 141 } 142 } 143 } 144 | Popular Tags |