1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-31 12:55:40 +02:00

Fixed preferences of type List

This commit is contained in:
Alena Laskavaia 2010-05-23 02:18:18 +00:00
parent 6debae007d
commit 644fefb8c5
11 changed files with 367 additions and 92 deletions

View file

@ -10,6 +10,8 @@
*******************************************************************************/ *******************************************************************************/
package org.eclipse.cdt.codan.core.param; package org.eclipse.cdt.codan.core.param;
import java.util.Arrays;
import junit.framework.TestCase; import junit.framework.TestCase;
import org.eclipse.cdt.codan.core.param.IProblemPreferenceDescriptor.PreferenceType; import org.eclipse.cdt.codan.core.param.IProblemPreferenceDescriptor.PreferenceType;
@ -37,7 +39,7 @@ public class ListProblemPreferenceTest extends TestCase {
protected BasicProblemPreference addPar(String key, Object parval) { protected BasicProblemPreference addPar(String key, Object parval) {
BasicProblemPreference str = makePar(key, parval); BasicProblemPreference str = makePar(key, parval);
list.addChildDescriptor(str); list.addChildDescriptor(str);
return str; return (BasicProblemPreference) list.getChildDescriptor(key);
} }
/** /**
@ -100,4 +102,31 @@ public class ListProblemPreferenceTest extends TestCase {
assertEquals("a=b", list.getChildValue(PAR1)); //$NON-NLS-1$ assertEquals("a=b", list.getChildValue(PAR1)); //$NON-NLS-1$
assertEquals(p2.getValue(), list.getChildValue(PAR2)); assertEquals(p2.getValue(), list.getChildValue(PAR2));
} }
public void testGetValue() {
list.setChildDescriptor(new BasicProblemPreference("#", "Value")); //$NON-NLS-1$//$NON-NLS-2$
String x[] = { "a", "b" }; //$NON-NLS-1$ //$NON-NLS-2$
list.addChildValue(x[0]);
list.addChildValue(x[1]);
Object[] values = list.getValues();
assertTrue(Arrays.deepEquals(x, values));
}
public void testSetValue() {
list.setChildDescriptor(new BasicProblemPreference("#", "Value")); //$NON-NLS-1$//$NON-NLS-2$
String x[] = { "a", "b" }; //$NON-NLS-1$ //$NON-NLS-2$
list.setValue(x);
Object[] values = list.getValues();
assertTrue(Arrays.deepEquals(x, values));
}
public void testSetValueImport() {
list.setChildDescriptor(new BasicProblemPreference("#", "Value")); //$NON-NLS-1$//$NON-NLS-2$
String x[] = { "a", "b" }; //$NON-NLS-1$ //$NON-NLS-2$
list.setValue(x);
list.importValue("(x)"); //$NON-NLS-1$
Object[] values = list.getValues();
assertEquals(1, values.length);
assertEquals("x", values[0]); //$NON-NLS-1$
}
} }

View file

@ -13,6 +13,7 @@ package org.eclipse.cdt.codan.core.model;
import org.eclipse.cdt.codan.core.param.BasicProblemPreference; import org.eclipse.cdt.codan.core.param.BasicProblemPreference;
import org.eclipse.cdt.codan.core.param.IProblemPreference; import org.eclipse.cdt.codan.core.param.IProblemPreference;
import org.eclipse.cdt.codan.core.param.IProblemPreferenceDescriptor.PreferenceType; import org.eclipse.cdt.codan.core.param.IProblemPreferenceDescriptor.PreferenceType;
import org.eclipse.cdt.codan.core.param.ListProblemPreference;
import org.eclipse.cdt.codan.core.param.MapProblemPreference; import org.eclipse.cdt.codan.core.param.MapProblemPreference;
/** /**
@ -53,6 +54,30 @@ public abstract class AbstractCheckerWithProblemPreferences extends
return info; return info;
} }
/**
* Add preference of type list with default string type, list is empty by
* default
*
* @param problem
* - problem
* @param key
* - preference key
* @param label
* - preference label
* @return preference instance of of the list, can be used to add default
* values or set different element type
*
*/
public ListProblemPreference addListPreference(IProblemWorkingCopy problem,
String key, String label, String itemLabel) {
MapProblemPreference map = getTopLevelPreferenceMap(problem);
ListProblemPreference list = new ListProblemPreference(key, label);
list.setChildDescriptor(new BasicProblemPreference(
ListProblemPreference.COMMON_DESCRIPTOR_KEY, itemLabel,
PreferenceType.TYPE_STRING));
return (ListProblemPreference) map.addChildDescriptor(list);
}
public IProblemPreference addPreference(IProblemWorkingCopy problem, public IProblemPreference addPreference(IProblemWorkingCopy problem,
IProblemPreference info, Object defaultValue) { IProblemPreference info, Object defaultValue) {
MapProblemPreference map = getTopLevelPreferenceMap(problem); MapProblemPreference map = getTopLevelPreferenceMap(problem);
@ -70,7 +95,7 @@ public abstract class AbstractCheckerWithProblemPreferences extends
String key, Object defaultValue) { String key, Object defaultValue) {
MapProblemPreference map = getTopLevelPreferenceMap(problem); MapProblemPreference map = getTopLevelPreferenceMap(problem);
if (map.getChildValue(key) == null) if (map.getChildValue(key) == null)
map.addChildValue(key, defaultValue); map.setChildValue(key, defaultValue);
} }
/** /**

View file

@ -62,6 +62,8 @@ public abstract class AbstractProblemPreference implements IProblemPreference {
int n = id.length(); int n = id.length();
if (n == 0) if (n == 0)
return false; return false;
if (id.equals("#")) //$NON-NLS-1$
return true;
for (int i = 0; i < n; i++) for (int i = 0; i < n; i++)
if (!Character.isJavaIdentifierPart(id.charAt(i))) if (!Character.isJavaIdentifierPart(id.charAt(i)))
return false; return false;
@ -144,4 +146,10 @@ public abstract class AbstractProblemPreference implements IProblemPreference {
return getKey(); return getKey();
return parent.getQualifiedKey() + "." + getKey(); //$NON-NLS-1$ return parent.getQualifiedKey() + "." + getKey(); //$NON-NLS-1$
} }
/**
* @param tokenizer
* @return
*/
public abstract void importValue(StreamTokenizer tokenizer);
} }

View file

@ -129,4 +129,20 @@ public class BasicProblemPreference extends AbstractProblemPreference {
String sval = tokenizer.sval; String sval = tokenizer.sval;
return sval; return sval;
} }
@Override
public String toString() {
return "(" + type + ")" + key + ((value == null) ? "" : "=" + value); //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$//$NON-NLS-4$
}
@Override
public void importValue(StreamTokenizer tokenizer) {
try {
tokenizer.nextToken();
String val = tokenizer.sval;
importValue(val);
} catch (IOException e) {
new IllegalArgumentException(e);
}
}
} }

View file

@ -34,7 +34,7 @@ public interface IProblemPreferenceCompositeDescriptor {
*/ */
IProblemPreference[] getChildDescriptors(); IProblemPreference[] getChildDescriptors();
void addChildDescriptor(IProblemPreference info); IProblemPreference addChildDescriptor(IProblemPreference info);
void removeChildDescriptor(IProblemPreference info); void removeChildDescriptor(IProblemPreference info);
} }

View file

@ -19,7 +19,7 @@ package org.eclipse.cdt.codan.core.param;
public interface IProblemPreferenceCompositeValue { public interface IProblemPreferenceCompositeValue {
Object getChildValue(String key); Object getChildValue(String key);
void addChildValue(String key, Object value); void setChildValue(String key, Object value);
void removeChildValue(String key); void removeChildValue(String key);
} }

View file

@ -13,6 +13,7 @@ package org.eclipse.cdt.codan.core.param;
import java.io.IOException; import java.io.IOException;
import java.io.StreamTokenizer; import java.io.StreamTokenizer;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator; import java.util.Iterator;
/** /**
@ -22,8 +23,9 @@ import java.util.Iterator;
*/ */
public class ListProblemPreference extends AbstractProblemPreference implements public class ListProblemPreference extends AbstractProblemPreference implements
IProblemPreferenceCompositeValue, IProblemPreferenceCompositeDescriptor { IProblemPreferenceCompositeValue, IProblemPreferenceCompositeDescriptor {
protected ArrayList<IProblemPreference> list = new ArrayList<IProblemPreference>( public static final String COMMON_DESCRIPTOR_KEY = "#"; //$NON-NLS-1$
1); protected ArrayList<Object> list = new ArrayList<Object>();
protected IProblemPreference childDescriptor;
/** /**
* @param key * @param key
@ -45,66 +47,78 @@ public class ListProblemPreference extends AbstractProblemPreference implements
} }
/** /**
* Get parameter into for element equal to key's int value. * Set child descriptor (all elements have the same)
*
* @param i
* @param info
* @return
*/
public IProblemPreference setChildDescriptor(IProblemPreference info) {
childDescriptor = info;
childDescriptor.setValue(null);
((AbstractProblemPreference) childDescriptor)
.setKey(COMMON_DESCRIPTOR_KEY);
return info;
}
/**
* Sets common descriptor for all elements, if value if not null sets the
* value for its key also. Do not make assumptions of values of desc after
* you pass it to this function.
*
* @return read only preference matching the key
*/
public IProblemPreference addChildDescriptor(IProblemPreference desc) {
Object value = desc.getValue();
String key = desc.getKey();
setChildDescriptor(desc);
setChildValue(key, value);
return getChildDescriptor(key);
}
public IProblemPreference getChildDescriptor() {
return childDescriptor;
}
public IProblemPreference getChildDescriptor(int i) {
Object value = list.get(i);
AbstractProblemPreference desc = (AbstractProblemPreference) childDescriptor
.clone();
desc.setKey(String.valueOf(i));
desc.setValue(value);
return desc;
}
/**
* Get read only problem preference for element equal to key's int value.
* If key is null or # return generic descriptor with null value.
* *
* @throws NumberFormatException * @throws NumberFormatException
* if key is not number * if key is not number
* @throws ArrayIndexOutOfBoundsException
* is index is out of bound
*/ */
public IProblemPreference getChildDescriptor(String key) public IProblemPreference getChildDescriptor(String key)
throws NumberFormatException { throws NumberFormatException {
if (key == null) { if (key == null || key.equals(COMMON_DESCRIPTOR_KEY)) {
// special case if all element are the same return first, if key is // return common descriptor
// null return getChildDescriptor();
return (IProblemPreference) getChildDescriptor(0).clone();
} }
Integer iv = Integer.valueOf(key); Integer iv = Integer.valueOf(key);
if (iv.intValue() >= list.size()) { if (iv.intValue() >= list.size()) {
// special case if all element are the same return first clone // create one
IProblemPreference childInfo = (IProblemPreference) getChildDescriptor( AbstractProblemPreference clone = (AbstractProblemPreference) childDescriptor
0).clone(); .clone();
return childInfo; clone.setKey(key);
return clone;
} }
return getChildDescriptor(iv.intValue()); return getChildDescriptor(iv.intValue());
} }
/**
* Set i'th element of parameter info, if all are the same i is 0
*
* @param i
* @param info
*/
public void setChildDescriptor(int i, IProblemPreference info) {
if (info != null) {
while (i >= list.size()) {
list.add(null);
}
list.set(i, info);
} else {
while (i == list.size() - 1) {
list.remove(i);
}
}
}
/**
* If all list elements have same info it is enough to set only first one
* (index 0). When value is set for the other it will be replicated.
*/
public void addChildDescriptor(IProblemPreference info) {
Integer iv = Integer.valueOf(info.getKey());
IProblemPreference desc = (IProblemPreference) info.clone();
desc.setParent(this);
setChildDescriptor(iv, desc);
}
public IProblemPreference getChildDescriptor(int i) {
return list.get(i);
}
public IProblemPreference[] getChildDescriptors() { public IProblemPreference[] getChildDescriptors() {
return list.toArray(new IProblemPreference[list.size()]); IProblemPreference[] res = new IProblemPreference[list.size()];
for (int i = 0; i < res.length; i++) {
res[i] = getChildDescriptor(i);
}
return res;
} }
public Object getChildValue(String key) { public Object getChildValue(String key) {
@ -112,11 +126,30 @@ public class ListProblemPreference extends AbstractProblemPreference implements
return childInfo.getValue(); return childInfo.getValue();
} }
public void addChildValue(String key, Object value) { public void setChildValue(String key, Object value) {
IProblemPreference pref = getChildDescriptor(key); int i = Integer.valueOf(key).intValue();
pref.setValue(value); setChildValue(i, value);
// because descriptor can be phantom we have to set preference forcefully }
setChildDescriptor(Integer.parseInt(key), pref);
/**
* @param i
* @param value
*/
protected void setChildValue(int i, Object value) {
if (value != null) {
while (i >= list.size()) {
list.add(null);
}
list.set(i, value);
} else {
while (i == list.size() - 1) {
list.remove(i);
}
}
}
public void addChildValue(Object value) {
list.add(value);
} }
public void removeChildValue(String key) { public void removeChildValue(String key) {
@ -128,15 +161,15 @@ public class ListProblemPreference extends AbstractProblemPreference implements
@Override @Override
public Object clone() { public Object clone() {
ListProblemPreference list1 = (ListProblemPreference) super.clone(); ListProblemPreference list1 = (ListProblemPreference) super.clone();
list1.list = (ArrayList<IProblemPreference>) list.clone(); list1.list = (ArrayList<Object>) list.clone();
return list1; return list1;
} }
public String exportValue() { public String exportValue() {
StringBuffer buf = new StringBuffer("("); //$NON-NLS-1$ StringBuffer buf = new StringBuffer("("); //$NON-NLS-1$
for (Iterator<IProblemPreference> iterator = list.iterator(); iterator for (Iterator<Object> iterator = list.iterator(); iterator.hasNext();) {
.hasNext();) { IProblemPreference d = (IProblemPreference) childDescriptor.clone();
IProblemPreference d = iterator.next(); d.setValue(iterator.next());
buf.append(d.exportValue()); buf.append(d.exportValue());
if (iterator.hasNext()) if (iterator.hasNext())
buf.append(","); //$NON-NLS-1$ buf.append(","); //$NON-NLS-1$
@ -146,34 +179,86 @@ public class ListProblemPreference extends AbstractProblemPreference implements
public void importValue(String str) { public void importValue(String str) {
StreamTokenizer tokenizer = getImportTokenizer(str); StreamTokenizer tokenizer = getImportTokenizer(str);
try {
importValue(tokenizer);
} catch (IllegalArgumentException e) {
throw new IllegalArgumentException(str, e);
}
}
/**
* @param tokenizer
*/
@Override
public void importValue(StreamTokenizer tokenizer) {
clear();
int token; int token;
int index = 0; int index = 0;
try { try {
token = tokenizer.nextToken(); token = tokenizer.nextToken();
String chara = String.valueOf((char) token);
if (token != '(') if (token != '(')
throw new IllegalArgumentException(str); throw new IllegalArgumentException(chara);
token = tokenizer.nextToken();
if (token != ')')
tokenizer.pushBack();
else
return;
while (true) { while (true) {
token = tokenizer.nextToken();
String val = tokenizer.sval;
String ik = String.valueOf(index); String ik = String.valueOf(index);
IProblemPreference desc = getChildDescriptor(ik); IProblemPreference desc = getChildDescriptor(ik);
if (desc != null) { if (desc != null && desc instanceof AbstractProblemPreference) {
desc.importValue(val); ((AbstractProblemPreference) desc).importValue(tokenizer);
addChildValue(ik, desc.getValue()); setChildValue(ik, desc.getValue());
} }
token = tokenizer.nextToken(); token = tokenizer.nextToken();
if (token == ')') if (token == ')')
break; break;
if (token != ',') if (token != ',')
throw new IllegalArgumentException(str); throw new IllegalArgumentException(chara);
index++; index++;
} }
} catch (IOException e) { } catch (IOException e) {
throw new IllegalArgumentException(str); throw new IllegalArgumentException(e);
} }
} }
public void removeChildDescriptor(IProblemPreference info) { public void removeChildDescriptor(IProblemPreference info) {
list.remove(info); throw new UnsupportedOperationException();
}
public int size() {
return list.size();
}
public void clear() {
list.clear();
}
@Override
public Object getValue() {
return getValues();
}
@Override
public void setValue(Object value) {
Object[] values = (Object[]) value;
if (Arrays.deepEquals(getValues(), values)) {
return;
}
list.clear();
for (int i = 0; i < values.length; i++) {
Object object = values[i];
list.add(object);
}
}
@Override
public String toString() {
return childDescriptor + ":" + list.toString(); //$NON-NLS-1$
}
public Object[] getValues() {
return list.toArray(new Object[list.size()]);
} }
} }

View file

@ -14,6 +14,7 @@ import java.io.IOException;
import java.io.StreamTokenizer; import java.io.StreamTokenizer;
import java.util.Iterator; import java.util.Iterator;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.Map;
import org.eclipse.cdt.codan.core.model.AbstractCheckerWithProblemPreferences; import org.eclipse.cdt.codan.core.model.AbstractCheckerWithProblemPreferences;
@ -73,10 +74,10 @@ public class MapProblemPreference extends AbstractProblemPreference implements
* @param i * @param i
* @param info * @param info
*/ */
public void addChildDescriptor(IProblemPreference info) { public IProblemPreference addChildDescriptor(IProblemPreference desc) {
IProblemPreference desc = (IProblemPreference) info.clone();
desc.setParent(this); desc.setParent(this);
hash.put(info.getKey(), desc); hash.put(desc.getKey(), desc);
return desc;
} }
public IProblemPreference[] getChildDescriptors() { public IProblemPreference[] getChildDescriptors() {
@ -89,7 +90,7 @@ public class MapProblemPreference extends AbstractProblemPreference implements
return childInfo.getValue(); return childInfo.getValue();
} }
public void addChildValue(String key, Object value) { public void setChildValue(String key, Object value) {
getChildDescriptor(key).setValue(value); getChildDescriptor(key).setValue(value);
} }
@ -120,40 +121,96 @@ public class MapProblemPreference extends AbstractProblemPreference implements
public void importValue(String str) { public void importValue(String str) {
StreamTokenizer tokenizer = getImportTokenizer(str); StreamTokenizer tokenizer = getImportTokenizer(str);
try {
importValue(tokenizer);
} catch (IllegalArgumentException e) {
throw new IllegalArgumentException(str + ":" + e.toString(), e); //$NON-NLS-1$
}
}
/**
* @param tokenizer
*/
@Override
public void importValue(StreamTokenizer tokenizer) {
int token; int token;
try { try {
token = tokenizer.nextToken(); token = tokenizer.nextToken();
if (token != '{') String chara = String.valueOf((char) token);
throw new IllegalArgumentException(str); if (token != '{') {
throw new IllegalArgumentException(chara);
}
while (true) { while (true) {
token = tokenizer.nextToken(); token = tokenizer.nextToken();
String key = tokenizer.sval; String key = tokenizer.sval;
token = tokenizer.nextToken(); token = tokenizer.nextToken();
if (token != '=') if (token != '=')
throw new IllegalArgumentException(str); throw new IllegalArgumentException(chara);
token = tokenizer.nextToken(); token = tokenizer.nextToken();
if (token != '>') if (token != '>')
throw new IllegalArgumentException(str); throw new IllegalArgumentException(chara);
token = tokenizer.nextToken();
String val = tokenizer.sval;
IProblemPreference desc = getChildDescriptor(key); IProblemPreference desc = getChildDescriptor(key);
if (desc != null) { if (desc != null && desc instanceof AbstractProblemPreference) {
desc.importValue(val); ((AbstractProblemPreference) desc).importValue(tokenizer);
} else { setChildValue(key, desc.getValue());
//putChildValue(key, val);
} }
token = tokenizer.nextToken(); token = tokenizer.nextToken();
if (token == '}') if (token == '}')
break; break;
if (token != ',') if (token != ',')
throw new IllegalArgumentException(str); throw new IllegalArgumentException(chara);
} }
} catch (IOException e) { } catch (IOException e) {
throw new IllegalArgumentException(str); throw new IllegalArgumentException(e);
} }
} }
public void removeChildDescriptor(IProblemPreference info) { public void removeChildDescriptor(IProblemPreference info) {
hash.remove(info); hash.remove(info);
} }
public int size() {
return hash.size();
}
public void clear() {
hash.clear();
}
@Override
public String toString() {
return hash.values().toString();
}
@Override
public Object getValue() {
LinkedHashMap<String, Object> map = new LinkedHashMap<String, Object>();
for (Iterator<IProblemPreference> iterator = hash.values().iterator(); iterator
.hasNext();) {
IProblemPreference pref = iterator.next();
map.put(pref.getKey(), pref.getValue());
}
return map;
}
@SuppressWarnings("unchecked")
@Override
public void setValue(Object value) {
Map<String, Object> map = (Map<String, Object>) value;
LinkedHashMap<String, IProblemPreference> hash2 = (LinkedHashMap<String, IProblemPreference>) hash
.clone();
hash.clear();
for (Iterator<String> iterator = map.keySet().iterator(); iterator
.hasNext();) {
String key = iterator.next();
Object value2 = map.get(key);
if (value2 instanceof IProblemPreference) {
hash.put(key, (IProblemPreference) value2);
} else {
IProblemPreference pref = hash2.get(key);
pref.setValue(value2);
hash.put(key, pref);
}
}
}
} }

View file

@ -39,6 +39,7 @@ public class CodanUIMessages extends NLS {
public static String CustomizeProblemDialog_Message; public static String CustomizeProblemDialog_Message;
public static String CustomizeProblemDialog_Title; public static String CustomizeProblemDialog_Title;
public static String Job_TitleRunningAnalysis; public static String Job_TitleRunningAnalysis;
public static String ParametersComposite_NewValue;
public static String ParametersComposite_None; public static String ParametersComposite_None;
static { static {
// initialize resource bundle // initialize resource bundle

View file

@ -16,11 +16,15 @@ import org.eclipse.cdt.codan.core.model.IProblem;
import org.eclipse.cdt.codan.core.model.IProblemWorkingCopy; import org.eclipse.cdt.codan.core.model.IProblemWorkingCopy;
import org.eclipse.cdt.codan.core.param.IProblemPreference; import org.eclipse.cdt.codan.core.param.IProblemPreference;
import org.eclipse.cdt.codan.core.param.IProblemPreferenceCompositeDescriptor; import org.eclipse.cdt.codan.core.param.IProblemPreferenceCompositeDescriptor;
import org.eclipse.cdt.codan.core.param.ListProblemPreference;
import org.eclipse.cdt.codan.internal.ui.CodanUIMessages; import org.eclipse.cdt.codan.internal.ui.CodanUIMessages;
import org.eclipse.jface.dialogs.InputDialog;
import org.eclipse.jface.preference.BooleanFieldEditor; import org.eclipse.jface.preference.BooleanFieldEditor;
import org.eclipse.jface.preference.FieldEditorPreferencePage; import org.eclipse.jface.preference.FieldEditorPreferencePage;
import org.eclipse.jface.preference.ListEditor;
import org.eclipse.jface.preference.PreferenceStore; import org.eclipse.jface.preference.PreferenceStore;
import org.eclipse.jface.preference.StringFieldEditor; import org.eclipse.jface.preference.StringFieldEditor;
import org.eclipse.jface.window.Window;
import org.eclipse.swt.SWT; import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.layout.GridLayout;
@ -59,7 +63,8 @@ public class ParametersComposite extends Composite {
/** /**
* @param info * @param info
*/ */
private void createFieldEditorsForParameters(IProblemPreference info) { private void createFieldEditorsForParameters(
final IProblemPreference info) {
if (info == null) if (info == null)
return; return;
switch (info.getType()) { switch (info.getType()) {
@ -77,7 +82,53 @@ public class ParametersComposite extends Composite {
addField(fe); addField(fe);
break; break;
} }
case TYPE_MAP: { case TYPE_LIST:
ListEditor le = new ListEditor(info.getQualifiedKey(),
info.getLabel(), getFieldEditorParent()) {
@Override
protected String[] parseString(String stringList) {
ListProblemPreference list = (ListProblemPreference) info;
IProblemPreference[] childDescriptors = list
.getChildDescriptors();
if (childDescriptors.length == 0)
return new String[0];
String res[] = new String[childDescriptors.length];
for (int i = 0; i < childDescriptors.length; i++) {
IProblemPreference item = childDescriptors[i];
res[i] = String.valueOf(item.getValue());
}
return res;
}
@Override
protected String getNewInputObject() {
ListProblemPreference list = (ListProblemPreference) info;
String label = list
.getChildDescriptor()
.getLabel();
InputDialog dialog = new InputDialog(
getShell(), CodanUIMessages.ParametersComposite_NewValue, label, "", null); //$NON-NLS-1$
if (dialog.open() == Window.OK) {
return dialog.getValue();
}
return null;
}
@Override
protected String createList(String[] items) {
ListProblemPreference list = (ListProblemPreference) info
.clone();
list.clear();
for (int i = 0; i < items.length; i++) {
String val = items[i];
list.addChildValue(val);
}
return list.exportValue();
}
};
addField(le);
break;
case TYPE_MAP:
IProblemPreference[] childrenDescriptor = ((IProblemPreferenceCompositeDescriptor) info) IProblemPreference[] childrenDescriptor = ((IProblemPreferenceCompositeDescriptor) info)
.getChildDescriptors(); .getChildDescriptors();
for (int i = 0; i < childrenDescriptor.length; i++) { for (int i = 0; i < childrenDescriptor.length; i++) {
@ -85,7 +136,6 @@ public class ParametersComposite extends Composite {
createFieldEditorsForParameters(desc); createFieldEditorsForParameters(desc);
} }
break; break;
}
default: default:
throw new UnsupportedOperationException(info.getType() throw new UnsupportedOperationException(info.getType()
.toString()); .toString());
@ -126,8 +176,10 @@ public class ParametersComposite extends Composite {
case TYPE_FILE: case TYPE_FILE:
desc.setValue(new File(prefStore.getString(key))); desc.setValue(new File(prefStore.getString(key)));
break; break;
case TYPE_MAP:
case TYPE_LIST: case TYPE_LIST:
desc.importValue(prefStore.getString(key));
break;
case TYPE_MAP:
IProblemPreference[] childrenDescriptor = ((IProblemPreferenceCompositeDescriptor) desc) IProblemPreference[] childrenDescriptor = ((IProblemPreferenceCompositeDescriptor) desc)
.getChildDescriptors(); .getChildDescriptors();
for (int i = 0; i < childrenDescriptor.length; i++) { for (int i = 0; i < childrenDescriptor.length; i++) {
@ -158,8 +210,10 @@ public class ParametersComposite extends Composite {
case TYPE_FILE: case TYPE_FILE:
prefStore.setValue(key, ((File) desc.getValue()).getPath()); prefStore.setValue(key, ((File) desc.getValue()).getPath());
break; break;
case TYPE_LIST:
prefStore.setValue(key, desc.exportValue());
break;
case TYPE_MAP: case TYPE_MAP:
case TYPE_LIST: {
IProblemPreference[] childrenDescriptor = ((IProblemPreferenceCompositeDescriptor) desc) IProblemPreference[] childrenDescriptor = ((IProblemPreferenceCompositeDescriptor) desc)
.getChildDescriptors(); .getChildDescriptors();
for (int i = 0; i < childrenDescriptor.length; i++) { for (int i = 0; i < childrenDescriptor.length; i++) {
@ -167,7 +221,6 @@ public class ParametersComposite extends Composite {
initPrefStore(chi); initPrefStore(chi);
} }
break; break;
}
default: default:
throw new UnsupportedOperationException(desc.getType() throw new UnsupportedOperationException(desc.getType()
.toString()); .toString());

View file

@ -13,6 +13,7 @@ CustomizeProblemComposite_TabScope=Scope
CustomizeProblemDialog_Message=Edit problem preferences, scope and launch options CustomizeProblemDialog_Message=Edit problem preferences, scope and launch options
CustomizeProblemDialog_Title=Customize Problem... CustomizeProblemDialog_Title=Customize Problem...
Job_TitleRunningAnalysis=Running Code Analysis Job_TitleRunningAnalysis=Running Code Analysis
ParametersComposite_NewValue=New Value
ParametersComposite_None=No extra preferences ParametersComposite_None=No extra preferences
ProblemsTreeEditor_NameColumn=Name ProblemsTreeEditor_NameColumn=Name
ProblemsTreeEditor_Problems=Problems ProblemsTreeEditor_Problems=Problems