Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDave Orme2006-03-30 15:42:53 +0000
committerDave Orme2006-03-30 15:42:53 +0000
commitac4f3be2f973bc8281708185003176a677b1c1c9 (patch)
treebd29c68036a32f6cd65c3ad029f370d4b87553c7
parent0097dcd70a4a6d9d1ba3c7fac80fa6b47b65cfd1 (diff)
downloadorg.eclipse.e4.databinding-I20060330-1200.tar.gz
org.eclipse.e4.databinding-I20060330-1200.tar.xz
org.eclipse.e4.databinding-I20060330-1200.zip
TableViewerObservableCollectionWithLabels now supports converters for columns. Applied patch from bug #133946 with minor modifications.I20060330-1200
-rw-r--r--bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/internal/viewers/AbstractListViewerObservableCollectionWithLabels.java9
-rw-r--r--bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/internal/viewers/MultiMappingAndSetBinding.java8
-rw-r--r--bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/internal/viewers/TableViewerObservableCollectionWithLabels.java36
-rw-r--r--bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/provisional/BindSpec.java108
-rw-r--r--bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/provisional/viewers/IObservableCollectionWithLabels.java6
-rw-r--r--bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/provisional/viewers/ViewersBindingFactory.java6
6 files changed, 153 insertions, 20 deletions
diff --git a/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/internal/viewers/AbstractListViewerObservableCollectionWithLabels.java b/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/internal/viewers/AbstractListViewerObservableCollectionWithLabels.java
index f7efd392..703e7ef5 100644
--- a/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/internal/viewers/AbstractListViewerObservableCollectionWithLabels.java
+++ b/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/internal/viewers/AbstractListViewerObservableCollectionWithLabels.java
@@ -11,6 +11,7 @@
package org.eclipse.jface.internal.databinding.internal.viewers;
+import org.eclipse.jface.internal.databinding.provisional.conversion.IConverter;
import org.eclipse.jface.internal.databinding.provisional.observable.mapping.IMultiMapping;
import org.eclipse.jface.util.ListenerList;
import org.eclipse.jface.viewers.AbstractListViewer;
@@ -31,6 +32,8 @@ public class AbstractListViewerObservableCollectionWithLabels extends
private LabelProvider labelProvider = new LabelProvider();
private IMultiMapping labelMapping;
+
+ protected IConverter[] modelToTargetConverters;
private class LabelProvider implements IViewerLabelProvider, ILabelProvider {
@@ -146,4 +149,10 @@ public class AbstractListViewerObservableCollectionWithLabels extends
getViewer().refresh();
}
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.internal.databinding.provisional.viewers.IObservableCollectionWithLabels#setModelToTargetConverters(org.eclipse.jface.internal.databinding.provisional.conversion.IConverter[])
+ */
+ public void setModelToTargetConverters(IConverter[] converters) {
+ this.modelToTargetConverters = converters;
+ }
}
diff --git a/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/internal/viewers/MultiMappingAndSetBinding.java b/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/internal/viewers/MultiMappingAndSetBinding.java
index 0a9619aa..2d2dc611 100644
--- a/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/internal/viewers/MultiMappingAndSetBinding.java
+++ b/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/internal/viewers/MultiMappingAndSetBinding.java
@@ -136,13 +136,13 @@ public class MultiMappingAndSetBinding extends Binding {
targetSet.clear();
targetSet.addAll(modelSet);
target.init(new IMultiMapping() {
- public Object[] getMappingValues(Object element, int[] indices) {
- return model.getMappingValues(element, indices);
+ public Object[] getMappingValues(Object element, int[] columnIndices) {
+ return model.getMappingValues(element, columnIndices);
}
- public void setMappingValues(Object element, int[] indices,
+ public void setMappingValues(Object element, int[] columnIndices,
Object[] values) {
- model.setMappingValues(element, indices, values);
+ model.setMappingValues(element, columnIndices, values);
}
});
}
diff --git a/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/internal/viewers/TableViewerObservableCollectionWithLabels.java b/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/internal/viewers/TableViewerObservableCollectionWithLabels.java
index b19d0c82..2788f5f2 100644
--- a/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/internal/viewers/TableViewerObservableCollectionWithLabels.java
+++ b/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/internal/viewers/TableViewerObservableCollectionWithLabels.java
@@ -11,6 +11,7 @@
package org.eclipse.jface.internal.databinding.internal.viewers;
+import org.eclipse.jface.internal.databinding.provisional.conversion.IConverter;
import org.eclipse.jface.internal.databinding.provisional.observable.mapping.IMultiMapping;
import org.eclipse.jface.util.ListenerList;
import org.eclipse.jface.viewers.ILabelProviderListener;
@@ -34,15 +35,40 @@ public class TableViewerObservableCollectionWithLabels extends
private TabelLabelProvider labelProvider = new TabelLabelProvider();
private IMultiMapping labelMapping;
+
+ private IConverter[] modelToTargetConverters;
private class TabelLabelProvider implements ITableLabelProvider,
ITableColorProvider, ITableFontProvider {
ListenerList listeners = new ListenerList();
- private Object getColumnValue(Object element, int columnIndex) {
- return labelMapping.getMappingValues(element,
+ private Object getColumnValue(Object element, int columnIndex) {
+ Object object = labelMapping.getMappingValues(element,
new int[] { columnIndex })[0];
+ return convertColumnValue(object, columnIndex);
+ }
+
+ /**
+ * @param object
+ * @param columnIndex
+ * @return converted value
+ */
+ private Object convertColumnValue(Object object, int columnIndex) {
+ if (modelToTargetConverters[0] != null) {
+ if (modelToTargetConverters.length == 1) {
+ return modelToTargetConverters[0].convert(object);
+ }
+
+ if (modelToTargetConverters.length >= columnIndex) {
+ if (modelToTargetConverters[columnIndex] != null) {
+ return modelToTargetConverters[columnIndex].convert(object);
+ }
+ return object;
+ }
+ throw new IllegalStateException("A converter was not specified for column index " + columnIndex); //$NON-NLS-1$
+ }
+ return object;
}
private ViewerLabel getColumnValueAsViewerLabel(Object element,
@@ -158,4 +184,10 @@ public class TableViewerObservableCollectionWithLabels extends
((TableViewer) getViewer()).insert(element, index);
}
+ /**
+ * @param converters
+ */
+ public void setModelToTargetConverters(IConverter[] converters) {
+ this.modelToTargetConverters = converters;
+ }
}
diff --git a/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/provisional/BindSpec.java b/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/provisional/BindSpec.java
index 7a3795ad..87f7a7d1 100644
--- a/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/provisional/BindSpec.java
+++ b/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/provisional/BindSpec.java
@@ -29,11 +29,11 @@ import org.eclipse.jface.internal.databinding.provisional.validation.IValidator;
*/
public class BindSpec {
- private IConverter modelToTargetConverter;
+ private IConverter[] modelToTargetConverters = new IConverter[1];;
- private IConverter targetToModelConverter;
+ private IConverter[] targetToModelConverters = new IConverter[1];;
- private IValidator targetValidator;
+ private IValidator[] targetValidators = new IValidator[1];
private IDomainValidator domainValidator;
@@ -64,9 +64,37 @@ public class BindSpec {
IConverter targetToModelConverter, IValidator targetValidator,
IDomainValidator domainValidator, Integer modelUpdatePolicy,
Integer validatePolicy, Integer targetUpdatePolicy) {
- this.modelToTargetConverter = modelToTargetConverter;
- this.targetToModelConverter = targetToModelConverter;
- this.targetValidator = targetValidator;
+
+ this.modelToTargetConverters[0] = modelToTargetConverter;
+ this.targetToModelConverters[0] = targetToModelConverter;
+ this.targetValidators[0] = targetValidator;
+ this.domainValidator = domainValidator;
+ this.modelUpdatePolicy = modelUpdatePolicy;
+ this.validatePolicy = validatePolicy;
+ this.targetUpdatePolicy = targetUpdatePolicy;
+ }
+
+ /**
+ * Creates a bind spec with the given converters, validators, and update
+ * policies.
+ *
+ * @param modelToTargetConverter
+ * @param targetToModelConverter
+ * @param targetValidator
+ * @param domainValidator
+ * @param modelUpdatePolicy
+ * @param validatePolicy
+ * @param targetUpdatePolicy
+ *
+ */
+ public BindSpec(IConverter[] modelToTargetConverter,
+ IConverter[] targetToModelConverter, IValidator[] targetValidator,
+ IDomainValidator domainValidator, Integer modelUpdatePolicy,
+ Integer validatePolicy, Integer targetUpdatePolicy) {
+
+ this.modelToTargetConverters = modelToTargetConverter;
+ this.targetToModelConverters = targetToModelConverter;
+ this.targetValidators = targetValidator;
this.domainValidator = domainValidator;
this.modelUpdatePolicy = modelUpdatePolicy;
this.validatePolicy = validatePolicy;
@@ -94,7 +122,7 @@ public class BindSpec {
*
*/
public BindSpec() {
- this(null, null, null, null, null, null, null);
+ this((IConverter)null, null, null, null, null, null, null);
}
/**
@@ -104,7 +132,16 @@ public class BindSpec {
* @return the converter, or <code>null</code>
*/
public IConverter getModelToTargetConverter() {
- return modelToTargetConverter;
+ return modelToTargetConverters[0];
+ }
+
+ /**
+ * Returns the converters to be used
+ *
+ * @return the converters</code>
+ */
+ public IConverter[] getModelToTargetConverters() {
+ return modelToTargetConverters;
}
/**
@@ -114,8 +151,17 @@ public class BindSpec {
* @return the converter, or <code>null</code>
*/
public IConverter getTargetToModelConverter() {
- return targetToModelConverter;
+ return targetToModelConverters[0];
}
+
+ /**
+ * Returns the converters to be used
+ *
+ * @return the converters</code>
+ */
+ public IConverter[] getTargetToModelConverters() {
+ return targetToModelConverters;
+ }
/**
* Returns the validator to be used, or <code>null</code> if a default
@@ -124,10 +170,19 @@ public class BindSpec {
* @return the validator, or <code>null</code>
*/
public IValidator getTypeConversionValidator() {
- return targetValidator;
+ return targetValidators[0];
}
/**
+ * Returns the validators to be used.
+ *
+ * @return the validators</code>
+ */
+ public IValidator[] getTypeConversionValidators() {
+ return targetValidators;
+ }
+
+ /**
* Returns the validator to be used, or <code>null</code> if a default
* validator should be used.
*
@@ -181,7 +236,16 @@ public class BindSpec {
* @return this BindSpec, to enable chaining of method calls
*/
public BindSpec setModelToTargetConverter(IConverter converter) {
- this.modelToTargetConverter = converter;
+ this.modelToTargetConverters[0] = converter;
+ return this;
+ }
+
+ /**
+ * @param converters
+ * @return this BindSpec, to enable chaining of method calls
+ */
+ public BindSpec setModelToTargetConverters(IConverter[] converters) {
+ this.modelToTargetConverters = converters;
return this;
}
@@ -190,7 +254,16 @@ public class BindSpec {
* @return this BindSpec, to enable chaining of method calls
*/
public BindSpec setTargetToModelConverter(IConverter converter) {
- this.targetToModelConverter = converter;
+ this.targetToModelConverters[0] = converter;
+ return this;
+ }
+
+ /**
+ * @param converters
+ * @return this BindSpec, to enable chaining of method calls
+ */
+ public BindSpec setTargetToModelConverters(IConverter[] converters) {
+ this.modelToTargetConverters = converters;
return this;
}
@@ -199,11 +272,20 @@ public class BindSpec {
* @return this BindSpec, to enable chaining of method calls
*/
public BindSpec setValidator(IValidator validator) {
- this.targetValidator = validator;
+ this.targetValidators[0] = validator;
return this;
}
/**
+ * @param validators
+ * @return this BindSpec, to enable chaining of method calls
+ */
+ public BindSpec setValidators(IValidator[] validators) {
+ this.targetValidators = validators;
+ return this;
+ }
+
+ /**
* @param validator
* @return this BindSpec, to enable chaining of method calls
*/
diff --git a/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/provisional/viewers/IObservableCollectionWithLabels.java b/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/provisional/viewers/IObservableCollectionWithLabels.java
index 27f699df..9d9bc9d0 100644
--- a/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/provisional/viewers/IObservableCollectionWithLabels.java
+++ b/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/provisional/viewers/IObservableCollectionWithLabels.java
@@ -11,6 +11,7 @@
package org.eclipse.jface.internal.databinding.provisional.viewers;
+import org.eclipse.jface.internal.databinding.provisional.conversion.IConverter;
import org.eclipse.jface.internal.databinding.provisional.observable.IObservableCollection;
import org.eclipse.jface.internal.databinding.provisional.observable.mapping.IMultiMapping;
@@ -30,4 +31,9 @@ public interface IObservableCollectionWithLabels extends IObservableCollection {
*/
public void updateElements(Object[] elements);
+ /**
+ * @param converters
+ */
+ public void setModelToTargetConverters(IConverter[] converters);
+
}
diff --git a/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/provisional/viewers/ViewersBindingFactory.java b/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/provisional/viewers/ViewersBindingFactory.java
index 9bf1e449..f4fd8ce0 100644
--- a/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/provisional/viewers/ViewersBindingFactory.java
+++ b/bundles/org.eclipse.jface.databinding/src/org/eclipse/jface/internal/databinding/provisional/viewers/ViewersBindingFactory.java
@@ -57,7 +57,7 @@ public class ViewersBindingFactory implements IBindingFactory {
try {
propertyDescriptor = new PropertyDescriptor("string", objectDef.getMethod("toString", null), null); //$NON-NLS-1$ //$NON-NLS-2$
} catch (Throwable t) {
- throw new IllegalStateException("Automatic creation of toString() IObservableMultiMappingWithDomain failed."); //$NON-NLS-1$
+ throw new IllegalStateException("Automatic creation of toString() IObservableMultiMappingWithDomain failed.", t); //$NON-NLS-1$
}
PropertyDescriptor[] propertyDescriptors = new PropertyDescriptor[1];
@@ -73,10 +73,14 @@ public class ViewersBindingFactory implements IBindingFactory {
IObservableList modelList = (IObservableList) model
.getDomain();
IObservableCollectionWithLabels target = (IObservableCollectionWithLabels) targetObservable;
+
IObservableList targetList = (IObservableList) targetObservable;
dataBindingContext.fillBindSpecDefaults(dataBindingContext,
bindSpec, targetList.getElementType(), modelList
.getElementType());
+
+ target.setModelToTargetConverters(bindSpec.getModelToTargetConverters());
+
MultiMappingAndListBinding binding = new MultiMappingAndListBinding(
dataBindingContext, targetList, target, modelList,
model, bindSpec);

Back to the top