Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/xwt/org.eclipse.papyrus.xwt/src/org/eclipse/papyrus/xwt/javabean/ValueConvertorRegister.java')
-rw-r--r--plugins/xwt/org.eclipse.papyrus.xwt/src/org/eclipse/papyrus/xwt/javabean/ValueConvertorRegister.java77
1 files changed, 77 insertions, 0 deletions
diff --git a/plugins/xwt/org.eclipse.papyrus.xwt/src/org/eclipse/papyrus/xwt/javabean/ValueConvertorRegister.java b/plugins/xwt/org.eclipse.papyrus.xwt/src/org/eclipse/papyrus/xwt/javabean/ValueConvertorRegister.java
new file mode 100644
index 00000000000..5437fba9c2c
--- /dev/null
+++ b/plugins/xwt/org.eclipse.papyrus.xwt/src/org/eclipse/papyrus/xwt/javabean/ValueConvertorRegister.java
@@ -0,0 +1,77 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2010 Soyatec (http://www.soyatec.com) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Soyatec - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.papyrus.xwt.javabean;
+
+import java.util.HashMap;
+
+import org.eclipse.core.databinding.conversion.IConverter;
+
+public class ValueConvertorRegister {
+
+ static protected HashMap<Class<?>, HashMap<Class<?>, IConverter>> register = new HashMap<Class<?>, HashMap<Class<?>, IConverter>>();
+
+ public void register(Class<?> source, Class<?> target, IConverter converter) {
+ HashMap<Class<?>, IConverter> convertors = register.get(source);
+ if(convertors == null) {
+ convertors = new HashMap<Class<?>, IConverter>();
+ register.put(source, convertors);
+ }
+ convertors.put(target, converter);
+ }
+
+ public IConverter findConverter(Class<?> source, Class<?> target) {
+ HashMap<Class<?>, IConverter> convertors = register.get(source);
+ if(convertors == null) {
+ if(source.isEnum()) {
+ convertors = register.get(Enum.class);
+ if(convertors == null) {
+ return null;
+ }
+ } else {
+ Class<?>[] interfacees = source.getInterfaces();
+ for(Class<?> class1 : interfacees) {
+ IConverter converter = findConverter(class1, target);
+ if(converter != null) {
+ return converter;
+ }
+ }
+ Class<?> superclass = source.getSuperclass();
+ if(superclass != null) {
+ IConverter converter = findConverter(superclass, target);
+ if(converter != null) {
+ return converter;
+ }
+ }
+ return null;
+ }
+ }
+ return findConverter(convertors, target);
+ }
+
+ private IConverter findConverter(HashMap<Class<?>, IConverter> convertors, Class<?> current) {
+ IConverter converter = convertors.get(current);
+ if(converter == null) {
+ if(current.isEnum()) {
+ converter = convertors.get(Enum.class);
+ }
+ }
+ if(converter == null) {
+ Class<?> superclass = current.getSuperclass();
+ if(superclass == null && current != Object.class) {
+ superclass = Object.class;
+ }
+ if(superclass != null) {
+ converter = findConverter(convertors, superclass);
+ }
+ }
+ return converter;
+ }
+}

Back to the top