]> git.uio.no Git - ifi-stolz-refaktor.git/blame - case-study/jdt-after/ui/org/eclipse/jdt/internal/ui/callhierarchy/SearchUtil.java
Case Study: adding data and statistics
[ifi-stolz-refaktor.git] / case-study / jdt-after / ui / org / eclipse / jdt / internal / ui / callhierarchy / SearchUtil.java
CommitLineData
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 *******************************************************************************/
12package org.eclipse.jdt.internal.ui.callhierarchy;
13
14import java.util.Arrays;
15import java.util.HashSet;
16import java.util.Iterator;
17import java.util.Set;
18
19import org.eclipse.jface.dialogs.IDialogSettings;
20
21import org.eclipse.ui.IWorkingSet;
22import org.eclipse.ui.PlatformUI;
23
24import org.eclipse.jdt.internal.corext.util.Messages;
25
26import org.eclipse.jdt.internal.ui.JavaPlugin;
27import org.eclipse.jdt.internal.ui.search.LRUWorkingSetsList;
28import org.eclipse.jdt.internal.ui.viewsupport.BasicElementLabels;
29import org.eclipse.jdt.internal.ui.workingsets.WorkingSetComparator;
30
31public 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}