]>
Commit | Line | Data |
---|---|---|
1b2798f6 EK |
1 | /******************************************************************************* |
2 | * Copyright (c) 2000, 2011 IBM Corporation and others. | |
3 | * All rights reserved. This program and the accompanying materials | |
4 | * are made available under the terms of the Eclipse Public License v1.0 | |
5 | * which accompanies this distribution, and is available at | |
6 | * http://www.eclipse.org/legal/epl-v10.html | |
7 | * | |
8 | * Contributors: | |
9 | * Jesper Kamstrup Linnet (eclipse@kamstrup-linnet.dk) - initial API and implementation | |
10 | * (report 36180: Callers/Callees view) | |
11 | *******************************************************************************/ | |
12 | package org.eclipse.jdt.internal.ui.callhierarchy; | |
13 | ||
14 | import java.util.Arrays; | |
15 | import java.util.HashSet; | |
16 | import java.util.Iterator; | |
17 | import java.util.Set; | |
18 | ||
19 | import org.eclipse.jface.dialogs.IDialogSettings; | |
20 | ||
21 | import org.eclipse.ui.IWorkingSet; | |
22 | import org.eclipse.ui.PlatformUI; | |
23 | ||
24 | import org.eclipse.jdt.internal.corext.util.Messages; | |
25 | ||
26 | import org.eclipse.jdt.internal.ui.JavaPlugin; | |
27 | import org.eclipse.jdt.internal.ui.search.LRUWorkingSetsList; | |
28 | import org.eclipse.jdt.internal.ui.viewsupport.BasicElementLabels; | |
29 | import org.eclipse.jdt.internal.ui.workingsets.WorkingSetComparator; | |
30 | ||
31 | public class SearchUtil { | |
32 | ||
33 | // LRU working sets | |
34 | public static int LRU_WORKINGSET_LIST_SIZE= 3; | |
35 | private static LRUWorkingSetsList fgLRUWorkingSets; | |
36 | // Settings store | |
37 | private static final String DIALOG_SETTINGS_KEY= "CallHierarchySearchScope"; //$NON-NLS-1$ | |
38 | private static final String STORE_LRU_WORKING_SET_NAMES= "lastUsedWorkingSetNames"; //$NON-NLS-1$ | |
39 | private static IDialogSettings fgSettingsStore; | |
40 | ||
41 | /** | |
42 | * Updates the LRU list of working sets. | |
43 | * | |
44 | * @param workingSets the workings sets to be added to the LRU list | |
45 | */ | |
46 | public static void updateLRUWorkingSets(IWorkingSet[] workingSets) { | |
47 | if (workingSets == null || workingSets.length < 1) | |
48 | return; | |
49 | ||
50 | SearchUtil.getLRUWorkingSets().add(workingSets); | |
51 | SearchUtil.saveState(); | |
52 | } | |
53 | ||
54 | private static void saveState() { | |
55 | IWorkingSet[] workingSets; | |
56 | Iterator<IWorkingSet[]> iter= SearchUtil.fgLRUWorkingSets.iterator(); | |
57 | int i= 0; | |
58 | while (iter.hasNext()) { | |
59 | workingSets= iter.next(); | |
60 | String[] names= new String[workingSets.length]; | |
61 | for (int j= 0; j < workingSets.length; j++) | |
62 | names[j]= workingSets[j].getName(); | |
63 | SearchUtil.fgSettingsStore.put(SearchUtil.STORE_LRU_WORKING_SET_NAMES + i, names); | |
64 | i++; | |
65 | } | |
66 | } | |
67 | ||
68 | public static LRUWorkingSetsList getLRUWorkingSets() { | |
69 | if (SearchUtil.fgLRUWorkingSets == null) { | |
70 | restoreState(); | |
71 | } | |
72 | return SearchUtil.fgLRUWorkingSets; | |
73 | } | |
74 | ||
75 | static void restoreState() { | |
76 | SearchUtil.fgLRUWorkingSets= new LRUWorkingSetsList(SearchUtil.LRU_WORKINGSET_LIST_SIZE); | |
77 | SearchUtil.fgSettingsStore= JavaPlugin.getDefault().getDialogSettings().getSection(SearchUtil.DIALOG_SETTINGS_KEY); | |
78 | if (SearchUtil.fgSettingsStore == null) | |
79 | SearchUtil.fgSettingsStore= JavaPlugin.getDefault().getDialogSettings().addNewSection(SearchUtil.DIALOG_SETTINGS_KEY); | |
80 | ||
81 | boolean foundLRU= false; | |
82 | for (int i= SearchUtil.LRU_WORKINGSET_LIST_SIZE - 1; i >= 0; i--) { | |
83 | String[] lruWorkingSetNames= SearchUtil.fgSettingsStore.getArray(SearchUtil.STORE_LRU_WORKING_SET_NAMES + i); | |
84 | if (lruWorkingSetNames != null) { | |
85 | Set<IWorkingSet> workingSets= new HashSet<IWorkingSet>(2); | |
86 | for (int j= 0; j < lruWorkingSetNames.length; j++) { | |
87 | IWorkingSet workingSet= PlatformUI.getWorkbench().getWorkingSetManager().getWorkingSet(lruWorkingSetNames[j]); | |
88 | if (workingSet != null) { | |
89 | workingSets.add(workingSet); | |
90 | } | |
91 | } | |
92 | foundLRU= true; | |
93 | if (!workingSets.isEmpty()) | |
94 | SearchUtil.fgLRUWorkingSets.add(workingSets.toArray(new IWorkingSet[workingSets.size()])); | |
95 | } | |
96 | } | |
97 | if (!foundLRU) | |
98 | // try old preference format | |
99 | restoreFromOldFormat(); | |
100 | } | |
101 | ||
102 | private static void restoreFromOldFormat() { | |
103 | SearchUtil.fgLRUWorkingSets= new LRUWorkingSetsList(SearchUtil.LRU_WORKINGSET_LIST_SIZE); | |
104 | SearchUtil.fgSettingsStore= JavaPlugin.getDefault().getDialogSettings().getSection(SearchUtil.DIALOG_SETTINGS_KEY); | |
105 | if (SearchUtil.fgSettingsStore == null) | |
106 | SearchUtil.fgSettingsStore= JavaPlugin.getDefault().getDialogSettings().addNewSection(SearchUtil.DIALOG_SETTINGS_KEY); | |
107 | ||
108 | boolean foundLRU= false; | |
109 | String[] lruWorkingSetNames= SearchUtil.fgSettingsStore.getArray(SearchUtil.STORE_LRU_WORKING_SET_NAMES); | |
110 | if (lruWorkingSetNames != null) { | |
111 | for (int i= lruWorkingSetNames.length - 1; i >= 0; i--) { | |
112 | IWorkingSet workingSet= PlatformUI.getWorkbench().getWorkingSetManager().getWorkingSet(lruWorkingSetNames[i]); | |
113 | if (workingSet != null) { | |
114 | foundLRU= true; | |
115 | SearchUtil.fgLRUWorkingSets.add(new IWorkingSet[]{workingSet}); | |
116 | } | |
117 | } | |
118 | } | |
119 | if (foundLRU) | |
120 | // save in new format | |
121 | saveState(); | |
122 | } | |
123 | ||
124 | public static String toString(IWorkingSet[] workingSets) { | |
125 | Arrays.sort(workingSets, new WorkingSetComparator()); | |
126 | String result= ""; //$NON-NLS-1$ | |
127 | if (workingSets != null && workingSets.length > 0) { | |
128 | boolean firstFound= false; | |
129 | for (int i= 0; i < workingSets.length; i++) { | |
130 | String workingSetName= BasicElementLabels.getWorkingSetLabel(workingSets[i]); | |
131 | if (firstFound) | |
132 | result= Messages.format(CallHierarchyMessages.SearchUtil_workingSetConcatenation, new String[] {result, workingSetName}); | |
133 | else { | |
134 | result= workingSetName; | |
135 | firstFound= true; | |
136 | } | |
137 | } | |
138 | } | |
139 | return result; | |
140 | } | |
141 | } |