001: /* Soot - a J*va Optimization Framework
002: * Copyright (C) 2003 Jennifer Lhotak
003: *
004: * This library is free software; you can redistribute it and/or
005: * modify it under the terms of the GNU Lesser General Public
006: * License as published by the Free Software Foundation; either
007: * version 2.1 of the License, or (at your option) any later version.
008: *
009: * This library is distributed in the hope that it will be useful,
010: * but WITHOUT ANY WARRANTY; without even the implied warranty of
011: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
012: * Lesser General Public License for more details.
013: *
014: * You should have received a copy of the GNU Lesser General Public
015: * License along with this library; if not, write to the
016: * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
017: * Boston, MA 02111-1307, USA.
018: */
019:
020: package ca.mcgill.sable.soot.launching;
021:
022: import java.util.*;
023:
024: import org.eclipse.jface.dialogs.IDialogSettings;
025:
026: import ca.mcgill.sable.soot.*;
027:
028: /**
029: * Handles saving of Soot configurations, adding, updating and
030: * deleting
031: */
032: public class SavedConfigManager {
033:
034: /**
035: * Constructor for SavedConfigManager.
036: */
037: public SavedConfigManager() {
038: super ();
039: }
040:
041: public void handleDeletes() {
042: if (getDeleteList() != null) {
043: Iterator it = getDeleteList().iterator();
044: while (it.hasNext()) {
045: String name = (String) it.next();
046: remove(name);
047: }
048: }
049: }
050:
051: private void remove(String name) {
052: IDialogSettings settings = SootPlugin.getDefault()
053: .getDialogSettings();
054: int count = 0;
055: try {
056: count = settings.getInt("config_count");
057: } catch (NumberFormatException e) {
058: }
059: String[] pointers = new String[count];
060: for (int i = 1; i <= count; i++) {
061: pointers[i - 1] = settings.get("soot_run_config_" + i);
062: }
063:
064: int i = 1;
065: int j = 0;
066: while (j < count) {
067: if (!pointers[j].equals(name)) {
068: settings.put("soot_run_config_" + i, pointers[j]);
069: i++;
070: }
071: j++;
072: }
073:
074: settings.put("soot_run_config_" + count, (String) null);
075: count--;
076: if (count < 0) {
077: count = 0;
078: }
079: settings.put("config_count", count);
080: settings.put(name, (String) null);
081:
082: }
083:
084: public void handleEdits() {
085: if (getEditMap() != null) {
086: Iterator it = getEditMap().keySet().iterator();
087: while (it.hasNext()) {
088: String name = (String) it.next();
089: if (alreadyInList(name)) {
090: update(name, (ArrayList) getEditMap().get(name));
091: } else {
092: add(name, (ArrayList) getEditMap().get(name));
093: }
094: }
095: }
096: }
097:
098: private boolean alreadyInList(String name) {
099: IDialogSettings settings = SootPlugin.getDefault()
100: .getDialogSettings();
101: int count = 0;
102: try {
103: count = settings.getInt("config_count");
104: } catch (NumberFormatException e) {
105: }
106: for (int i = 1; i <= count; i++) {
107: if (settings.get("soot_run_config_" + i).equals(name)) {
108: return true;
109: }
110: }
111: return false;
112: }
113:
114: // TODO use this instead of with String, String
115: private void update(String name, ArrayList val) {
116: String[] temp = new String[val.size()];
117: val.toArray(temp);
118: IDialogSettings settings = SootPlugin.getDefault()
119: .getDialogSettings();
120:
121: settings.put(name, temp);
122: }
123:
124: // TODO use this instead of with String, String
125: private void update(String name, String[] val) {
126: IDialogSettings settings = SootPlugin.getDefault()
127: .getDialogSettings();
128:
129: settings.put(name, val);
130: }
131:
132: // TODO stop using this
133: private void update(String name, String val) {
134: IDialogSettings settings = SootPlugin.getDefault()
135: .getDialogSettings();
136:
137: if (val != null) {
138: settings.put(name, val);
139: } else {
140: settings.put(name, "default");
141: }
142: }
143:
144: // TODO use this instead of String, String
145: private void add(String name, ArrayList val) {
146: IDialogSettings settings = SootPlugin.getDefault()
147: .getDialogSettings();
148: int count = 0;
149: try {
150: count = settings.getInt("config_count");
151: } catch (NumberFormatException e) {
152: }
153: count++;
154: settings.put("config_count", count);
155: settings.put("soot_run_config_" + count, name);
156: update(name, val);
157: }
158:
159: // TODO stop using this
160: private void add(String name, String val) {
161: IDialogSettings settings = SootPlugin.getDefault()
162: .getDialogSettings();
163: int count = 0;
164: try {
165: count = settings.getInt("config_count");
166: } catch (NumberFormatException e) {
167: }
168: count++;
169: settings.put("config_count", count);
170: settings.put("soot_run_config_" + count, name);
171: update(name, val);
172: }
173:
174: private HashMap editMap;
175: private ArrayList deleteList;
176:
177: /**
178: * Returns the deleteList.
179: * @return ArrayList
180: */
181: public ArrayList getDeleteList() {
182: return deleteList;
183: }
184:
185: /**
186: * Returns the editMap.
187: * @return HashMap
188: */
189: public HashMap getEditMap() {
190: return editMap;
191: }
192:
193: /**
194: * Sets the deleteList.
195: * @param deleteList The deleteList to set
196: */
197: public void setDeleteList(ArrayList deleteList) {
198: this .deleteList = deleteList;
199: }
200:
201: /**
202: * Sets the editMap.
203: * @param editMap The editMap to set
204: */
205: public void setEditMap(HashMap editMap) {
206: this.editMap = editMap;
207: }
208:
209: }
|