Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authortsommer2013-05-03 10:43:40 -0400
committertsommer2013-05-03 10:43:40 -0400
commit286d3c78701ec168f24ba08e4152d4e5724de8e2 (patch)
tree298b019ec2c1f5df0cae39f170d03ebc18b6d7e7
parent8b1746a077de648bd3971528cc731672e59874d2 (diff)
downloadorg.eclipse.efxclipse-286d3c78701ec168f24ba08e4152d4e5724de8e2.tar.gz
org.eclipse.efxclipse-286d3c78701ec168f24ba08e4152d4e5724de8e2.tar.xz
org.eclipse.efxclipse-286d3c78701ec168f24ba08e4152d4e5724de8e2.zip
Ported Java 8 enhencements from GitHub repo
-rwxr-xr-xbundles/runtime/org.eclipse.fx.emf.edit.ui/.classpath2
-rw-r--r--[-rwxr-xr-x]bundles/runtime/org.eclipse.fx.emf.edit.ui/src/org/eclipse/fx/emf/edit/ui/AdapterFactoryCellFactory.java61
-rw-r--r--[-rwxr-xr-x]bundles/runtime/org.eclipse.fx.emf.edit.ui/src/org/eclipse/fx/emf/edit/ui/AdapterFactoryListCellFactory.java16
-rw-r--r--[-rwxr-xr-x]bundles/runtime/org.eclipse.fx.emf.edit.ui/src/org/eclipse/fx/emf/edit/ui/AdapterFactoryObservableList.java502
-rw-r--r--[-rwxr-xr-x]bundles/runtime/org.eclipse.fx.emf.edit.ui/src/org/eclipse/fx/emf/edit/ui/AdapterFactoryTableCellFactory.java298
-rw-r--r--[-rwxr-xr-x]bundles/runtime/org.eclipse.fx.emf.edit.ui/src/org/eclipse/fx/emf/edit/ui/AdapterFactoryTreeCellFactory.java29
-rw-r--r--[-rwxr-xr-x]bundles/runtime/org.eclipse.fx.emf.edit.ui/src/org/eclipse/fx/emf/edit/ui/AdapterFactoryTreeItem.java28
-rw-r--r--bundles/runtime/org.eclipse.fx.emf.edit.ui/src/org/eclipse/fx/emf/edit/ui/AdapterFactoryTreeTableCellFactory.java127
-rw-r--r--bundles/runtime/org.eclipse.fx.emf.edit.ui/src/org/eclipse/fx/emf/edit/ui/CellUtil.java83
-rw-r--r--[-rwxr-xr-x]bundles/runtime/org.eclipse.fx.emf.edit.ui/src/org/eclipse/fx/emf/edit/ui/EAttributeCellEditHandler.java10
-rw-r--r--[-rwxr-xr-x]bundles/runtime/org.eclipse.fx.emf.edit.ui/src/org/eclipse/fx/emf/edit/ui/ProxyCellValueFactory.java81
-rw-r--r--bundles/runtime/org.eclipse.fx.emf.edit.ui/src/org/eclipse/fx/emf/edit/ui/TreeTableProxyCellValueFactory.java31
-rw-r--r--[-rwxr-xr-x]bundles/runtime/org.eclipse.fx.emf.edit.ui/src/org/eclipse/fx/emf/edit/ui/dnd/CellDragAdapter.java151
-rw-r--r--[-rwxr-xr-x]bundles/runtime/org.eclipse.fx.emf.edit.ui/src/org/eclipse/fx/emf/edit/ui/dnd/EditingDomainCellDropAdapter.java364
-rw-r--r--[-rwxr-xr-x]bundles/runtime/org.eclipse.fx.emf.edit.ui/src/org/eclipse/fx/emf/edit/ui/dnd/LocalTransfer.java0
-rwxr-xr-xdemos/org.eclipse.fx.demo.contacts.app/.classpath2
-rwxr-xr-xdemos/org.eclipse.fx.demo.contacts.app/.project78
-rwxr-xr-xdemos/org.eclipse.fx.demo.contacts.app/Application.e4xmi1
-rwxr-xr-xdemos/org.eclipse.fx.demo.contacts.app/IP_TODOS.txt46
-rwxr-xr-xdemos/org.eclipse.fx.demo.contacts.app/OSGI-INF/component.xml14
-rw-r--r--demos/org.eclipse.fx.demo.contacts.app/contacts.product.launch4
-rwxr-xr-xdemos/org.eclipse.fx.demo.contacts.app/plugin.properties1
-rwxr-xr-xdemos/org.eclipse.fx.demo.contacts.app/plugin_ru.properties22
-rwxr-xr-xdemos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/DecorationController.java154
-rwxr-xr-xdemos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/handlers/AddContactHandler.java80
-rwxr-xr-xdemos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/handlers/AddGroupHandler.java82
-rwxr-xr-xdemos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/model/ContactsManagerImpl.java110
-rwxr-xr-xdemos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/model/VCardContactsResource.java526
-rwxr-xr-xdemos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/views/ContactsListView.java172
-rwxr-xr-xdemos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/views/ContactsTableView.java208
-rw-r--r--demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/views/ContactsTreeTableView.java119
-rwxr-xr-xdemos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/views/ContactsTreeView.java204
-rwxr-xr-xdemos/org.eclipse.fx.demo.contacts.app/vcards/Angelo ZERR.vcf122
-rwxr-xr-xdemos/org.eclipse.fx.demo.contacts.app/vcards/Boris Bokowski.vcf122
-rwxr-xr-xdemos/org.eclipse.fx.demo.contacts.app/vcards/Chris Aniszczyk.vcf132
-rwxr-xr-xdemos/org.eclipse.fx.demo.contacts.app/vcards/Hallvard Traetteberg.vcf128
-rwxr-xr-xdemos/org.eclipse.fx.demo.contacts.app/vcards/Kai Toedter.vcf2
-rwxr-xr-xdemos/org.eclipse.fx.demo.contacts.app/vcards/Kevin McGuire.vcf116
-rwxr-xr-xdemos/org.eclipse.fx.demo.contacts.app/vcards/Lars Vogel.vcf2
-rwxr-xr-xdemos/org.eclipse.fx.demo.contacts.app/vcards/Peter Friese.vcf122
-rwxr-xr-xdemos/org.eclipse.fx.demo.contacts.app/vcards/Tom Schindl.vcf110
-rwxr-xr-xdemos/org.eclipse.fx.demo.contacts.app/vcards/Torsten Sommer.vcf36
-rwxr-xr-xdemos/org.eclipse.fx.demo.contacts.app/vcards/Yves YANG.vcf136
-rw-r--r--[-rwxr-xr-x]demos/org.eclipse.fx.demo.contacts.edit.tests/src/org/eclipse/fx/demo/contacts/edit/ContactItemProviderTest.java3
-rw-r--r--[-rwxr-xr-x]demos/org.eclipse.fx.demo.contacts.edit.tests/src/org/eclipse/fx/demo/contacts/edit/GroupItemProviderTest.java0
-rw-r--r--[-rwxr-xr-x]demos/org.eclipse.fx.demo.contacts.edit/src/org/eclipse/fx/demo/contacts/provider/ContactItemProvider.java1219
-rw-r--r--[-rwxr-xr-x]demos/org.eclipse.fx.demo.contacts.edit/src/org/eclipse/fx/demo/contacts/provider/GroupItemProvider.java437
47 files changed, 3322 insertions, 2971 deletions
diff --git a/bundles/runtime/org.eclipse.fx.emf.edit.ui/.classpath b/bundles/runtime/org.eclipse.fx.emf.edit.ui/.classpath
index 098194ca4..1fa3e6803 100755
--- a/bundles/runtime/org.eclipse.fx.emf.edit.ui/.classpath
+++ b/bundles/runtime/org.eclipse.fx.emf.edit.ui/.classpath
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
- <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
<classpathentry kind="src" path="src"/>
<classpathentry kind="output" path="bin"/>
diff --git a/bundles/runtime/org.eclipse.fx.emf.edit.ui/src/org/eclipse/fx/emf/edit/ui/AdapterFactoryCellFactory.java b/bundles/runtime/org.eclipse.fx.emf.edit.ui/src/org/eclipse/fx/emf/edit/ui/AdapterFactoryCellFactory.java
index 7d0512130..f2cb838a0 100755..100644
--- a/bundles/runtime/org.eclipse.fx.emf.edit.ui/src/org/eclipse/fx/emf/edit/ui/AdapterFactoryCellFactory.java
+++ b/bundles/runtime/org.eclipse.fx.emf.edit.ui/src/org/eclipse/fx/emf/edit/ui/AdapterFactoryCellFactory.java
@@ -29,6 +29,9 @@ import org.eclipse.emf.edit.provider.ComposedImage;
import org.eclipse.emf.edit.provider.IItemColorProvider;
import org.eclipse.emf.edit.provider.IItemFontProvider;
import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.ITableItemColorProvider;
+import org.eclipse.emf.edit.provider.ITableItemFontProvider;
+import org.eclipse.emf.edit.provider.ITableItemLabelProvider;
/**
* Base class for the AdapterFactoryCellFactories
@@ -36,8 +39,7 @@ import org.eclipse.emf.edit.provider.IItemLabelProvider;
public abstract class AdapterFactoryCellFactory {
/**
- * A listener interface for callbacks that process newly created
- * {@link Cell}s
+ * A listener interface for callbacks that process newly created {@link Cell}s
*/
public interface ICellCreationListener {
@@ -49,8 +51,8 @@ public abstract class AdapterFactoryCellFactory {
}
/**
- * A listener interface for callbacks that process {@link Cell}s being
- * updated during {@link Cell#updateItem}.
+ * A listener interface for callbacks that process {@link Cell}s being updated during
+ * {@link Cell#updateItem}.
*/
public interface ICellUpdateListener {
@@ -64,11 +66,10 @@ public abstract class AdapterFactoryCellFactory {
}
/**
- * An interface for providers that handle cell editing. The {@link Cell}s
- * created by the factory will delegate calls to their editing methods to
- * the first handler in {@link AdapterFactoryCellFactory#cellEditHandlers}
- * that returns <code>true</code> for {@link ICellEditHandler#canEdit(Cell)}
- * .
+ * An interface for providers that handle cell editing. The {@link Cell}s created by the factory will
+ * delegate calls to their editing methods to the first handler in
+ * {@link AdapterFactoryCellFactory#cellEditHandlers} that returns <code>true</code> for
+ * {@link ICellEditHandler#canEdit(Cell)} .
*/
public interface ICellEditHandler {
@@ -223,6 +224,48 @@ public abstract class AdapterFactoryCellFactory {
}
}
+ void applyTableItemProviderStyle(Object item, int columnIndex, Cell<?> cell, AdapterFactory adapterFactory) {
+ applyTableItemProviderLabel(item, columnIndex, cell, adapterFactory);
+ applyTableItemProviderColor(item, columnIndex, cell, adapterFactory);
+ applyTableItemProviderFont(item, columnIndex, cell, adapterFactory);
+ }
+
+ void applyTableItemProviderLabel(Object item, int columnIndex, Cell<?> cell, AdapterFactory adapterFactory) {
+ ITableItemLabelProvider labelProvider = (ITableItemLabelProvider) adapterFactory.adapt(item, ITableItemLabelProvider.class);
+ if (labelProvider != null) {
+ cell.setText(labelProvider.getColumnText(item, columnIndex));
+ Object columnImage = labelProvider.getColumnImage(item, columnIndex);
+ Node graphic = graphicFromObject(columnImage);
+ cell.setGraphic(graphic);
+ } else {
+ // clear the cell if there is no item
+ cell.setText(null);
+ cell.setGraphic(null);
+ }
+ }
+
+ void applyTableItemProviderColor(Object item, int columnIndex, Cell<?> cell, AdapterFactory adapterFactory) {
+ ITableItemColorProvider colorProvider = (ITableItemColorProvider) adapterFactory.adapt(item, ITableItemColorProvider.class);
+ if (colorProvider != null) {
+ Color foreground = colorFromObject(colorProvider.getForeground(item, columnIndex));
+ if (foreground != null)
+ cell.setTextFill(foreground);
+
+ String background = cssColorFromObject(colorProvider.getBackground(item, columnIndex));
+ if (background != null)
+ cell.setStyle("-fx-background-color: " + background);
+ }
+ }
+
+ void applyTableItemProviderFont(Object item, int columnIndex, Cell<?> cell, AdapterFactory adapterFactory) {
+ ITableItemFontProvider fontProvider = (ITableItemFontProvider) adapterFactory.adapt(item, ITableItemFontProvider.class);
+ if (fontProvider != null) {
+ Font font = fontFromObject(fontProvider.getFont(item, columnIndex));
+ if (font != null)
+ cell.setFont(font);
+ }
+ }
+
Node graphicFromObject(Object object) {
if (object instanceof Node) {
return (Node) object;
diff --git a/bundles/runtime/org.eclipse.fx.emf.edit.ui/src/org/eclipse/fx/emf/edit/ui/AdapterFactoryListCellFactory.java b/bundles/runtime/org.eclipse.fx.emf.edit.ui/src/org/eclipse/fx/emf/edit/ui/AdapterFactoryListCellFactory.java
index d032169c2..a490725a5 100755..100644
--- a/bundles/runtime/org.eclipse.fx.emf.edit.ui/src/org/eclipse/fx/emf/edit/ui/AdapterFactoryListCellFactory.java
+++ b/bundles/runtime/org.eclipse.fx.emf.edit.ui/src/org/eclipse/fx/emf/edit/ui/AdapterFactoryListCellFactory.java
@@ -25,18 +25,16 @@ import org.eclipse.emf.edit.provider.IItemFontProvider;
import org.eclipse.emf.edit.provider.IItemLabelProvider;
/**
- * This list cell factory wraps an {@link AdapterFactory} and delegates calls to
- * its {@link ListCell}s to the corresponding adapter-implemented item provider
- * interfaces.
+ * This list cell factory wraps an {@link AdapterFactory} and delegates calls to its {@link ListCell}s to the
+ * corresponding adapter-implemented item provider interfaces.
*
* <ul>
- * <li>{@link Cell#setText(String)} and {@link Cell#setGraphic(Node)} are
- * delegated to {@link IItemLabelProvider}</li>
+ * <li>{@link Cell#setText(String)} and {@link Cell#setGraphic(Node)} are delegated to
+ * {@link IItemLabelProvider}</li>
* <li>{@link Cell#setTextFill(javafx.scene.paint.Paint)} and the CSS property
- * <code>-fx-background-color</code> are delegated to {@link IItemColorProvider}
- * </li>
- * <li>{@link Cell#setFont(javafx.scene.text.Font)} is delegated to
- * {@link IItemFontProvider}</li>
+ * <code>-fx-background-color</code> are delegated to {@link IItemColorProvider}</li>
+ * <li>
+ * {@link Cell#setFont(javafx.scene.text.Font)} is delegated to {@link IItemFontProvider}</li>
* </ul>
*/
public class AdapterFactoryListCellFactory extends AdapterFactoryCellFactory implements Callback<ListView<Object>, ListCell<Object>> {
diff --git a/bundles/runtime/org.eclipse.fx.emf.edit.ui/src/org/eclipse/fx/emf/edit/ui/AdapterFactoryObservableList.java b/bundles/runtime/org.eclipse.fx.emf.edit.ui/src/org/eclipse/fx/emf/edit/ui/AdapterFactoryObservableList.java
index a4da3dfa6..a2f3978a9 100755..100644
--- a/bundles/runtime/org.eclipse.fx.emf.edit.ui/src/org/eclipse/fx/emf/edit/ui/AdapterFactoryObservableList.java
+++ b/bundles/runtime/org.eclipse.fx.emf.edit.ui/src/org/eclipse/fx/emf/edit/ui/AdapterFactoryObservableList.java
@@ -1,251 +1,251 @@
-/*******************************************************************************
- * Copyright (c) 2012 TESIS DYNAware GmbH 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:
- * Torsten Sommer <torsten.sommer@tesis.de> - initial API and implementation
- *******************************************************************************/
-package org.eclipse.fx.emf.edit.ui;
-
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
-import java.util.ListIterator;
-
-import javafx.beans.InvalidationListener;
-import javafx.collections.FXCollections;
-import javafx.collections.ListChangeListener;
-import javafx.collections.ObservableList;
-
-import org.eclipse.emf.common.notify.AdapterFactory;
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.common.notify.Notifier;
-import org.eclipse.emf.common.notify.impl.AdapterImpl;
-import org.eclipse.emf.edit.provider.IChangeNotifier;
-import org.eclipse.emf.edit.provider.INotifyChangedListener;
-import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
-
-/**
- * This {@link ObservableList} wraps an {@link AdapterFactory} and retrieves its elements from the
- * adapter-implemented {@link IStructuredItemContentProvider} interface. The content of the list can only be
- * modified through changes to the underlying model.
- */
-public class AdapterFactoryObservableList<T> implements ObservableList<T> {
-
- private static final String CHANGES_THROUGH_MODEL = "An AdapterFactoryObservableList cannot be manipulated directly. Changes must be made via the model.";
- protected AdapterFactory adapterFactory;
- protected Object root;
- protected IStructuredItemContentProvider provider;
- /* package */ObservableList<T> elements = FXCollections.observableArrayList();
-
- @SuppressWarnings("unchecked")
- public AdapterFactoryObservableList(AdapterFactory adapterFactory, final Object root) {
- super();
-
- if (adapterFactory == null)
- throw new IllegalArgumentException("AdapterFactory must not be null.");
-
- this.adapterFactory = adapterFactory;
- this.root = root;
- Object contentProvider = adapterFactory.adapt(root, IStructuredItemContentProvider.class);
-
- if(contentProvider instanceof IStructuredItemContentProvider)
- provider = (IStructuredItemContentProvider) contentProvider;
- else
- throw new IllegalArgumentException("Provided root object cannot be adapted.");
-
- elements.addAll((Collection<? extends T>) provider.getElements(root));
-
- if (root instanceof Notifier) {
- AdapterImpl adapter = new AdapterImpl() {
-
- @Override
- public void notifyChanged(Notification msg) {
- elements.setAll((Collection<? extends T>) provider.getElements(root));
- }
-
- };
-
- ((Notifier) root).eAdapters().add(adapter);
- } else if (root instanceof IChangeNotifier) {
- ((IChangeNotifier) root).addListener(new INotifyChangedListener() {
-
- @Override
- public void notifyChanged(Notification notification) {
- elements.setAll((Collection<? extends T>) provider.getElements(root));
- }
-
- });
- }
-
- }
-
- @Override
- public boolean add(Object e) {
- throw new UnsupportedOperationException(CHANGES_THROUGH_MODEL);
- }
-
- @Override
- public void add(int index, Object element) {
- throw new UnsupportedOperationException(CHANGES_THROUGH_MODEL);
- }
-
- @Override
- public boolean addAll(Collection<? extends T> c) {
- throw new UnsupportedOperationException(CHANGES_THROUGH_MODEL);
- }
-
- @Override
- public boolean addAll(int index, Collection<? extends T> c) {
- throw new UnsupportedOperationException(CHANGES_THROUGH_MODEL);
- }
-
- @Override
- public void clear() {
- throw new UnsupportedOperationException(CHANGES_THROUGH_MODEL);
- }
-
- @Override
- public boolean contains(Object o) {
- return elements.contains(o);
- }
-
- @Override
- public boolean containsAll(Collection<?> c) {
- return elements.containsAll(c);
- }
-
- @Override
- public T get(int index) {
- return elements.get(index);
- }
-
- @Override
- public int indexOf(Object o) {
- return elements.indexOf(o);
- }
-
- @Override
- public boolean isEmpty() {
- return elements.isEmpty();
- }
-
- @Override
- public Iterator<T> iterator() {
- return elements.iterator();
- }
-
- @Override
- public int lastIndexOf(Object o) {
- return elements.lastIndexOf(o);
- }
-
- @Override
- public ListIterator<T> listIterator() {
- return elements.listIterator();
- }
-
- @Override
- public ListIterator<T> listIterator(int index) {
- return elements.listIterator(index);
- }
-
- @Override
- public boolean remove(Object o) {
- throw new UnsupportedOperationException(CHANGES_THROUGH_MODEL);
- }
-
- @Override
- public T remove(int index) {
- throw new UnsupportedOperationException(CHANGES_THROUGH_MODEL);
- }
-
- @Override
- public boolean removeAll(Collection<?> c) {
- throw new UnsupportedOperationException(CHANGES_THROUGH_MODEL);
- }
-
- @Override
- public boolean retainAll(Collection<?> c) {
- throw new UnsupportedOperationException(CHANGES_THROUGH_MODEL);
- }
-
- @Override
- public T set(int index, Object element) {
- throw new UnsupportedOperationException(CHANGES_THROUGH_MODEL);
- }
-
- @Override
- public int size() {
- return elements.size();
- }
-
- @Override
- public List<T> subList(int fromIndex, int toIndex) {
- return elements.subList(fromIndex, toIndex);
- }
-
- @Override
- public Object[] toArray() {
- return elements.toArray();
- }
-
- @Override
- public <A> A[] toArray(A[] a) {
- return elements.toArray(a);
- }
-
- @Override
- public void addListener(InvalidationListener listener) {
- elements.addListener(listener);
- }
-
- @Override
- public void removeListener(InvalidationListener listener) {
- elements.removeListener(listener);
- }
-
- @Override
- public boolean addAll(Object... arg0) {
- throw new UnsupportedOperationException(CHANGES_THROUGH_MODEL);
- }
-
- @Override
- public void addListener(ListChangeListener<? super T> listener) {
- elements.addListener(listener);
- }
-
- @Override
- public void remove(int arg0, int arg1) {
- throw new UnsupportedOperationException(CHANGES_THROUGH_MODEL);
- }
-
- @Override
- public boolean removeAll(Object... arg0) {
- throw new UnsupportedOperationException(CHANGES_THROUGH_MODEL);
- }
-
- @Override
- public void removeListener(ListChangeListener<? super T> listener) {
- elements.removeListener(listener);
- }
-
- @Override
- public boolean retainAll(Object... arg0) {
- throw new UnsupportedOperationException(CHANGES_THROUGH_MODEL);
- }
-
- @Override
- public boolean setAll(Object... arg0) {
- throw new UnsupportedOperationException(CHANGES_THROUGH_MODEL);
- }
-
- @Override
- public boolean setAll(Collection<? extends T> arg0) {
- throw new UnsupportedOperationException(CHANGES_THROUGH_MODEL);
- }
-
-}
+/*******************************************************************************
+ * Copyright (c) 2012 TESIS DYNAware GmbH 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:
+ * Torsten Sommer <torsten.sommer@tesis.de> - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.fx.emf.edit.ui;
+
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import java.util.ListIterator;
+
+import javafx.beans.InvalidationListener;
+import javafx.collections.FXCollections;
+import javafx.collections.ListChangeListener;
+import javafx.collections.ObservableList;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.Notifier;
+import org.eclipse.emf.common.notify.impl.AdapterImpl;
+import org.eclipse.emf.edit.provider.IChangeNotifier;
+import org.eclipse.emf.edit.provider.INotifyChangedListener;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+
+/**
+ * This {@link ObservableList} wraps an {@link AdapterFactory} and retrieves its elements from the
+ * adapter-implemented {@link IStructuredItemContentProvider} interface. The content of the list can only be
+ * modified through changes to the underlying model.
+ */
+public class AdapterFactoryObservableList<T> implements ObservableList<T> {
+
+ private static final String CHANGES_THROUGH_MODEL = "An AdapterFactoryObservableList cannot be manipulated directly. Changes must be made via the model.";
+ protected AdapterFactory adapterFactory;
+ protected Object root;
+ protected IStructuredItemContentProvider provider;
+ /* package */ObservableList<T> elements = FXCollections.observableArrayList();
+
+ @SuppressWarnings("unchecked")
+ public AdapterFactoryObservableList(AdapterFactory adapterFactory, final Object root) {
+ super();
+
+ if (adapterFactory == null)
+ throw new IllegalArgumentException("AdapterFactory must not be null.");
+
+ this.adapterFactory = adapterFactory;
+ this.root = root;
+ Object contentProvider = adapterFactory.adapt(root, IStructuredItemContentProvider.class);
+
+ if (contentProvider instanceof IStructuredItemContentProvider)
+ provider = (IStructuredItemContentProvider) contentProvider;
+ else
+ throw new IllegalArgumentException("Provided root object cannot be adapted.");
+
+ elements.addAll((Collection<? extends T>) provider.getElements(root));
+
+ if (root instanceof Notifier) {
+ AdapterImpl adapter = new AdapterImpl() {
+
+ @Override
+ public void notifyChanged(Notification msg) {
+ elements.setAll((Collection<? extends T>) provider.getElements(root));
+ }
+
+ };
+
+ ((Notifier) root).eAdapters().add(adapter);
+ } else if (root instanceof IChangeNotifier) {
+ ((IChangeNotifier) root).addListener(new INotifyChangedListener() {
+
+ @Override
+ public void notifyChanged(Notification notification) {
+ elements.setAll((Collection<? extends T>) provider.getElements(root));
+ }
+
+ });
+ }
+
+ }
+
+ @Override
+ public boolean add(Object e) {
+ throw new UnsupportedOperationException(CHANGES_THROUGH_MODEL);
+ }
+
+ @Override
+ public void add(int index, Object element) {
+ throw new UnsupportedOperationException(CHANGES_THROUGH_MODEL);
+ }
+
+ @Override
+ public boolean addAll(Collection<? extends T> c) {
+ throw new UnsupportedOperationException(CHANGES_THROUGH_MODEL);
+ }
+
+ @Override
+ public boolean addAll(int index, Collection<? extends T> c) {
+ throw new UnsupportedOperationException(CHANGES_THROUGH_MODEL);
+ }
+
+ @Override
+ public void clear() {
+ throw new UnsupportedOperationException(CHANGES_THROUGH_MODEL);
+ }
+
+ @Override
+ public boolean contains(Object o) {
+ return elements.contains(o);
+ }
+
+ @Override
+ public boolean containsAll(Collection<?> c) {
+ return elements.containsAll(c);
+ }
+
+ @Override
+ public T get(int index) {
+ return elements.get(index);
+ }
+
+ @Override
+ public int indexOf(Object o) {
+ return elements.indexOf(o);
+ }
+
+ @Override
+ public boolean isEmpty() {
+ return elements.isEmpty();
+ }
+
+ @Override
+ public Iterator<T> iterator() {
+ return elements.iterator();
+ }
+
+ @Override
+ public int lastIndexOf(Object o) {
+ return elements.lastIndexOf(o);
+ }
+
+ @Override
+ public ListIterator<T> listIterator() {
+ return elements.listIterator();
+ }
+
+ @Override
+ public ListIterator<T> listIterator(int index) {
+ return elements.listIterator(index);
+ }
+
+ @Override
+ public boolean remove(Object o) {
+ throw new UnsupportedOperationException(CHANGES_THROUGH_MODEL);
+ }
+
+ @Override
+ public T remove(int index) {
+ throw new UnsupportedOperationException(CHANGES_THROUGH_MODEL);
+ }
+
+ @Override
+ public boolean removeAll(Collection<?> c) {
+ throw new UnsupportedOperationException(CHANGES_THROUGH_MODEL);
+ }
+
+ @Override
+ public boolean retainAll(Collection<?> c) {
+ throw new UnsupportedOperationException(CHANGES_THROUGH_MODEL);
+ }
+
+ @Override
+ public T set(int index, Object element) {
+ throw new UnsupportedOperationException(CHANGES_THROUGH_MODEL);
+ }
+
+ @Override
+ public int size() {
+ return elements.size();
+ }
+
+ @Override
+ public List<T> subList(int fromIndex, int toIndex) {
+ return elements.subList(fromIndex, toIndex);
+ }
+
+ @Override
+ public Object[] toArray() {
+ return elements.toArray();
+ }
+
+ @Override
+ public <A> A[] toArray(A[] a) {
+ return elements.toArray(a);
+ }
+
+ @Override
+ public void addListener(InvalidationListener listener) {
+ elements.addListener(listener);
+ }
+
+ @Override
+ public void removeListener(InvalidationListener listener) {
+ elements.removeListener(listener);
+ }
+
+ @Override
+ public boolean addAll(Object... arg0) {
+ throw new UnsupportedOperationException(CHANGES_THROUGH_MODEL);
+ }
+
+ @Override
+ public void addListener(ListChangeListener<? super T> listener) {
+ elements.addListener(listener);
+ }
+
+ @Override
+ public void remove(int arg0, int arg1) {
+ throw new UnsupportedOperationException(CHANGES_THROUGH_MODEL);
+ }
+
+ @Override
+ public boolean removeAll(Object... arg0) {
+ throw new UnsupportedOperationException(CHANGES_THROUGH_MODEL);
+ }
+
+ @Override
+ public void removeListener(ListChangeListener<? super T> listener) {
+ elements.removeListener(listener);
+ }
+
+ @Override
+ public boolean retainAll(Object... arg0) {
+ throw new UnsupportedOperationException(CHANGES_THROUGH_MODEL);
+ }
+
+ @Override
+ public boolean setAll(Object... arg0) {
+ throw new UnsupportedOperationException(CHANGES_THROUGH_MODEL);
+ }
+
+ @Override
+ public boolean setAll(Collection<? extends T> arg0) {
+ throw new UnsupportedOperationException(CHANGES_THROUGH_MODEL);
+ }
+
+}
diff --git a/bundles/runtime/org.eclipse.fx.emf.edit.ui/src/org/eclipse/fx/emf/edit/ui/AdapterFactoryTableCellFactory.java b/bundles/runtime/org.eclipse.fx.emf.edit.ui/src/org/eclipse/fx/emf/edit/ui/AdapterFactoryTableCellFactory.java
index 281afff6c..d1d067b25 100755..100644
--- a/bundles/runtime/org.eclipse.fx.emf.edit.ui/src/org/eclipse/fx/emf/edit/ui/AdapterFactoryTableCellFactory.java
+++ b/bundles/runtime/org.eclipse.fx.emf.edit.ui/src/org/eclipse/fx/emf/edit/ui/AdapterFactoryTableCellFactory.java
@@ -1,173 +1,125 @@
-/*******************************************************************************
- * Copyright (c) 2012 TESIS DYNAware GmbH 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:
- * Torsten Sommer <torsten.sommer@tesis.de> - initial API and implementation
- *******************************************************************************/
-package org.eclipse.fx.emf.edit.ui;
-
-import java.net.URL;
-
-import javafx.scene.Node;
-import javafx.scene.control.Cell;
-import javafx.scene.control.TableCell;
-import javafx.scene.control.TableColumn;
-import javafx.scene.image.ImageView;
-import javafx.scene.paint.Color;
-import javafx.scene.text.Font;
-import javafx.util.Callback;
-
-import org.eclipse.emf.common.notify.AdapterFactory;
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.common.notify.Notifier;
-import org.eclipse.emf.common.notify.impl.AdapterImpl;
-import org.eclipse.emf.edit.provider.ITableItemColorProvider;
-import org.eclipse.emf.edit.provider.ITableItemFontProvider;
-import org.eclipse.emf.edit.provider.ITableItemLabelProvider;
-
-/**
- * This list cell factory wraps an {@link AdapterFactory} and delegates calls to
- * its {@link TableCell}s to the corresponding adapter-implemented item provider
- * interfaces.
- *
- * <ul>
- * <li>{@link Cell#setText(String)} and {@link Cell#setGraphic(Node)} are
- * delegated to {@link ITableItemLabelProvider}</li>
- * <li>{@link Cell#setTextFill(javafx.scene.paint.Paint)} and the CSS property
- * <code>-fx-background-color</code> are delegated to
- * {@link ITableItemColorProvider}</li>
- * <li>{@link Cell#setFont(javafx.scene.text.Font)} is delegated to
- * {@link ITableItemFontProvider}</li>
- * </ul>
- */
-public class AdapterFactoryTableCellFactory<S, T> extends AdapterFactoryCellFactory implements
- Callback<TableColumn<S,T>, TableCell<S, T>> {
-
- protected int columnIndex;
-
- public AdapterFactoryTableCellFactory(AdapterFactory adapterFactory, int columnIndex) {
- super(adapterFactory);
- this.columnIndex = columnIndex;
- }
-
- @Override
- @SuppressWarnings("unchecked")
- public TableCell<S, T> call(TableColumn<S, T> arg0) {
-
- final TableCell<Object, Object> tableCell = new TableCell<Object, Object>() {
-
- Object currentItem = null;
- ICellEditHandler cellEditHandler;
-
- AdapterImpl adapter = new AdapterImpl() {
- @Override
- public void notifyChanged(Notification msg) {
- update(msg.getNotifier());
- }
- };
-
- @Override
- protected void updateItem(Object item, boolean empty) {
- super.updateItem(item, empty);
-
- // check if the item changed
- if (item != currentItem) {
-
- // remove the adapter if attached
- if (currentItem instanceof Notifier)
- ((Notifier) currentItem).eAdapters().remove(adapter);
-
- // update the current item
- currentItem = item;
-
- // attach the adapter to the new item
- if (currentItem instanceof Notifier)
- ((Notifier) currentItem).eAdapters().add(adapter);
- }
-
- // notify the listeners
- for (ICellUpdateListener cellUpdateListener : cellUpdateListeners)
- cellUpdateListener.updateItem(this, item, empty);
-
- update(item);
- }
-
- @Override
- public void startEdit() {
- super.startEdit();
- cellEditHandler = getCellEditHandler(this);
- if(cellEditHandler != null)
- cellEditHandler.startEdit(this);
- }
-
- @Override
- public void commitEdit(Object newValue) {
- super.commitEdit(newValue);
- if(cellEditHandler != null)
- cellEditHandler.commitEdit(this, newValue);
- }
-
- @Override
- public void cancelEdit() {
- super.cancelEdit();
- if(cellEditHandler != null)
- cellEditHandler.cancelEdit(this);
- update(getItem());
- }
-
- private void update(Object item) {
- applyTableItemProviderStyle(item, columnIndex, this, adapterFactory);
- }
-
- };
-
- for (ICellCreationListener cellCreationListener : cellCreationListeners)
- cellCreationListener.cellCreated(tableCell);
-
- return (TableCell<S, T>) tableCell;
- }
-
- void applyTableItemProviderStyle(Object item, int columnIndex, Cell<?> cell, AdapterFactory adapterFactory) {
-
- applyTableItemProviderLabel(item, columnIndex, cell, adapterFactory);
- applyTableItemProviderColor(item, columnIndex, cell, adapterFactory);
- applyTableItemProviderFont(item, columnIndex, cell, adapterFactory);
- }
-
- void applyTableItemProviderLabel(Object item, int columnIndex, Cell<?> cell, AdapterFactory adapterFactory) {
- ITableItemLabelProvider labelProvider = (ITableItemLabelProvider) adapterFactory.adapt(item, ITableItemLabelProvider.class);
- if (labelProvider != null) {
- cell.setText(labelProvider.getColumnText(item, columnIndex));
- Object columnImage = labelProvider.getColumnImage(item, columnIndex);
- Node graphic = graphicFromObject(columnImage);
- cell.setGraphic(graphic);
- }
- }
-
- void applyTableItemProviderColor(Object item, int columnIndex, Cell<?> cell, AdapterFactory adapterFactory) {
- ITableItemColorProvider colorProvider = (ITableItemColorProvider) adapterFactory.adapt(item, ITableItemColorProvider.class);
- if (colorProvider != null) {
- Color foreground = colorFromObject(colorProvider.getForeground(item, columnIndex));
- if (foreground != null)
- cell.setTextFill(foreground);
-
- String background = cssColorFromObject(colorProvider.getBackground(item, columnIndex));
- if (background != null)
- cell.setStyle("-fx-background-color: " + background);
- }
- }
-
- void applyTableItemProviderFont(Object item, int columnIndex, Cell<?> cell, AdapterFactory adapterFactory) {
- ITableItemFontProvider fontProvider = (ITableItemFontProvider) adapterFactory.adapt(item, ITableItemFontProvider.class);
- if (fontProvider != null) {
- Font font = fontFromObject(fontProvider.getFont(item, columnIndex));
- if (font != null)
- cell.setFont(font);
- }
- }
-
-}
+/*******************************************************************************
+ * Copyright (c) 2012 TESIS DYNAware GmbH 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:
+ * Torsten Sommer <torsten.sommer@tesis.de> - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.fx.emf.edit.ui;
+
+import javafx.scene.Node;
+import javafx.scene.control.Cell;
+import javafx.scene.control.TableCell;
+import javafx.scene.control.TableColumn;
+import javafx.util.Callback;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.Notifier;
+import org.eclipse.emf.common.notify.impl.AdapterImpl;
+import org.eclipse.emf.edit.provider.ITableItemColorProvider;
+import org.eclipse.emf.edit.provider.ITableItemFontProvider;
+import org.eclipse.emf.edit.provider.ITableItemLabelProvider;
+
+/**
+ * This list cell factory wraps an {@link AdapterFactory} and delegates calls to its {@link TableCell}s to the
+ * corresponding adapter-implemented item provider interfaces.
+ *
+ * <ul>
+ * <li>{@link Cell#setText(String)} and {@link Cell#setGraphic(Node)} are delegated to
+ * {@link ITableItemLabelProvider}</li>
+ * <li>{@link Cell#setTextFill(javafx.scene.paint.Paint)} and the CSS property
+ * <code>-fx-background-color</code> are delegated to {@link ITableItemColorProvider}</li>
+ * <li>{@link Cell#setFont(javafx.scene.text.Font)} is delegated to {@link ITableItemFontProvider}</li>
+ * </ul>
+ */
+public class AdapterFactoryTableCellFactory<S, T> extends AdapterFactoryCellFactory implements Callback<TableColumn<S, T>, TableCell<S, T>> {
+
+ protected int columnIndex;
+
+ public AdapterFactoryTableCellFactory(AdapterFactory adapterFactory, int columnIndex) {
+ super(adapterFactory);
+ this.columnIndex = columnIndex;
+ }
+
+ @Override
+ @SuppressWarnings("unchecked")
+ public TableCell<S, T> call(TableColumn<S, T> arg0) {
+
+ final TableCell<Object, Object> tableCell = new TableCell<Object, Object>() {
+
+ Object currentItem = null;
+ ICellEditHandler cellEditHandler;
+
+ AdapterImpl adapter = new AdapterImpl() {
+ @Override
+ public void notifyChanged(Notification msg) {
+ update(msg.getNotifier());
+ }
+ };
+
+ @Override
+ protected void updateItem(Object item, boolean empty) {
+ super.updateItem(item, empty);
+
+ // check if the item changed
+ if (item != currentItem) {
+
+ // remove the adapter if attached
+ if (currentItem instanceof Notifier)
+ ((Notifier) currentItem).eAdapters().remove(adapter);
+
+ // update the current item
+ currentItem = item;
+
+ // attach the adapter to the new item
+ if (currentItem instanceof Notifier)
+ ((Notifier) currentItem).eAdapters().add(adapter);
+ }
+
+ // notify the listeners
+ for (ICellUpdateListener cellUpdateListener : cellUpdateListeners)
+ cellUpdateListener.updateItem(this, item, empty);
+
+ update(item);
+ }
+
+ @Override
+ public void startEdit() {
+ super.startEdit();
+ cellEditHandler = getCellEditHandler(this);
+ if (cellEditHandler != null)
+ cellEditHandler.startEdit(this);
+ }
+
+ @Override
+ public void commitEdit(Object newValue) {
+ super.commitEdit(newValue);
+ if (cellEditHandler != null)
+ cellEditHandler.commitEdit(this, newValue);
+ }
+
+ @Override
+ public void cancelEdit() {
+ super.cancelEdit();
+ if (cellEditHandler != null)
+ cellEditHandler.cancelEdit(this);
+ update(getItem());
+ }
+
+ private void update(Object item) {
+ applyTableItemProviderStyle(item, columnIndex, this, adapterFactory);
+ }
+
+ };
+
+ for (ICellCreationListener cellCreationListener : cellCreationListeners)
+ cellCreationListener.cellCreated(tableCell);
+
+ return (TableCell<S, T>) tableCell;
+ }
+
+}
diff --git a/bundles/runtime/org.eclipse.fx.emf.edit.ui/src/org/eclipse/fx/emf/edit/ui/AdapterFactoryTreeCellFactory.java b/bundles/runtime/org.eclipse.fx.emf.edit.ui/src/org/eclipse/fx/emf/edit/ui/AdapterFactoryTreeCellFactory.java
index 28ea214f9..24b93ddc9 100755..100644
--- a/bundles/runtime/org.eclipse.fx.emf.edit.ui/src/org/eclipse/fx/emf/edit/ui/AdapterFactoryTreeCellFactory.java
+++ b/bundles/runtime/org.eclipse.fx.emf.edit.ui/src/org/eclipse/fx/emf/edit/ui/AdapterFactoryTreeCellFactory.java
@@ -25,18 +25,15 @@ import org.eclipse.emf.edit.provider.IItemFontProvider;
import org.eclipse.emf.edit.provider.IItemLabelProvider;
/**
- * This {@link TreeCell} factory wraps an {@link AdapterFactory} and delegates
- * calls to its {@link TreeCell}s to the corresponding adapter-implemented item
- * provider interfaces.
+ * This {@link TreeCell} factory wraps an {@link AdapterFactory} and delegates calls to its {@link TreeCell}s
+ * to the corresponding adapter-implemented item provider interfaces.
*
* <ul>
- * <li>{@link Cell#setText(String)} and {@link Cell#setGraphic(Node)} are
- * delegated to {@link IItemLabelProvider}</li>
+ * <li>{@link Cell#setText(String)} and {@link Cell#setGraphic(Node)} are delegated to
+ * {@link IItemLabelProvider}</li>
* <li>{@link Cell#setTextFill(javafx.scene.paint.Paint)} and the CSS property
- * <code>-fx-background-color</code> are delegated to {@link IItemColorProvider}
- * </li>
- * <li>{@link Cell#setFont(javafx.scene.text.Font)} is delegated to
- * {@link IItemFontProvider}</li>
+ * <code>-fx-background-color</code> are delegated to {@link IItemColorProvider}</li>
+ * <li>{@link Cell#setFont(javafx.scene.text.Font)} is delegated to {@link IItemFontProvider}</li>
* </ul>
*/
public class AdapterFactoryTreeCellFactory extends AdapterFactoryCellFactory implements Callback<TreeView<Object>, TreeCell<Object>> {
@@ -60,26 +57,25 @@ public class AdapterFactoryTreeCellFactory extends AdapterFactoryCellFactory imp
}
};
-
@Override
public void startEdit() {
super.startEdit();
cellEditHandler = getCellEditHandler(this);
- if(cellEditHandler != null)
+ if (cellEditHandler != null)
cellEditHandler.startEdit(this);
}
@Override
public void commitEdit(Object newValue) {
super.commitEdit(newValue);
- if(cellEditHandler != null)
+ if (cellEditHandler != null)
cellEditHandler.commitEdit(this, newValue);
}
@Override
public void cancelEdit() {
super.cancelEdit();
- if(cellEditHandler != null)
+ if (cellEditHandler != null)
cellEditHandler.cancelEdit(this);
update(getItem());
}
@@ -112,7 +108,12 @@ public class AdapterFactoryTreeCellFactory extends AdapterFactoryCellFactory imp
private void update(Object item) {
// setText(item == null ? "null" : item.toString());
- applyItemProviderStyle(item, this, adapterFactory);
+ if (item != null)
+ applyItemProviderStyle(item, this, adapterFactory);
+ else {
+ setText(null);
+ setGraphic(null);
+ }
}
};
diff --git a/bundles/runtime/org.eclipse.fx.emf.edit.ui/src/org/eclipse/fx/emf/edit/ui/AdapterFactoryTreeItem.java b/bundles/runtime/org.eclipse.fx.emf.edit.ui/src/org/eclipse/fx/emf/edit/ui/AdapterFactoryTreeItem.java
index 801914e7f..abdc6e15b 100755..100644
--- a/bundles/runtime/org.eclipse.fx.emf.edit.ui/src/org/eclipse/fx/emf/edit/ui/AdapterFactoryTreeItem.java
+++ b/bundles/runtime/org.eclipse.fx.emf.edit.ui/src/org/eclipse/fx/emf/edit/ui/AdapterFactoryTreeItem.java
@@ -16,8 +16,10 @@ import java.util.List;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
+import javafx.scene.control.Control;
import javafx.scene.control.MultipleSelectionModel;
import javafx.scene.control.TreeItem;
+import javafx.scene.control.TreeTableView;
import javafx.scene.control.TreeView;
import org.eclipse.emf.common.notify.AdapterFactory;
@@ -28,20 +30,19 @@ import org.eclipse.emf.ecore.EReference;
import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
/**
- * A {@link TreeItem} that wraps an {@link AdapterFactory} and retrieves its
- * children from the adapter-implemented {@link ITreeItemContentProvider}
- * interface.
+ * A {@link TreeItem} that wraps an {@link AdapterFactory} and retrieves its children from the
+ * adapter-implemented {@link ITreeItemContentProvider} interface.
*/
public class AdapterFactoryTreeItem extends TreeItem<Object> {
final AdapterFactory adapterFactory;
- final TreeView<?> treeView;
+ final Control view;
final ObservableList<TreeItem<Object>> children;
final ITreeItemContentProvider provider;
- public AdapterFactoryTreeItem(Object object, TreeView<?> treeView, AdapterFactory adapterFactory) {
+ public AdapterFactoryTreeItem(Object object, Control treeView, AdapterFactory adapterFactory) {
super(object);
- this.treeView = treeView;
+ this.view = treeView;
this.adapterFactory = adapterFactory;
children = FXCollections.unmodifiableObservableList(super.getChildren());
@@ -63,9 +64,8 @@ public class AdapterFactoryTreeItem extends TreeItem<Object> {
}
/**
- * This method overrides {@link TreeItem#getChildren()} and returns an
- * unmodifiable {@link ObservableList} as the children may only be changed
- * via the underlying model.
+ * This method overrides {@link TreeItem#getChildren()} and returns an unmodifiable {@link ObservableList}
+ * as the children may only be changed via the underlying model.
*/
@Override
public ObservableList<TreeItem<Object>> getChildren() {
@@ -73,12 +73,14 @@ public class AdapterFactoryTreeItem extends TreeItem<Object> {
}
/**
- * Recreates the child tree items using the {@link ITreeItemContentProvider}
- * and restores the selection and expanded state of the tree items.
+ * Recreates the child tree items using the {@link ITreeItemContentProvider} and restores the selection
+ * and expanded state of the tree items.
*/
void updateChildren() {
ObservableList<TreeItem<Object>> childTreeItems = super.getChildren();
- MultipleSelectionModel<?> selectionModel = treeView.getSelectionModel();
+
+ MultipleSelectionModel<?> selectionModel = view instanceof TreeView<?> ? ((TreeView<?>) view).getSelectionModel()
+ : ((TreeTableView<?>) view).getSelectionModel();
List<?> selection = selectionModel.getSelectedItems();
ArrayList<Object> selectedItems = new ArrayList<>();
ArrayList<TreeItem<?>> selectedTreeItems = new ArrayList<>();
@@ -115,7 +117,7 @@ public class AdapterFactoryTreeItem extends TreeItem<Object> {
// add the new tree items
for (Object child : provider.getChildren(getValue())) {
- AdapterFactoryTreeItem treeItem = new AdapterFactoryTreeItem(child, treeView, adapterFactory);
+ AdapterFactoryTreeItem treeItem = new AdapterFactoryTreeItem(child, view, adapterFactory);
childTreeItems.add(treeItem);
diff --git a/bundles/runtime/org.eclipse.fx.emf.edit.ui/src/org/eclipse/fx/emf/edit/ui/AdapterFactoryTreeTableCellFactory.java b/bundles/runtime/org.eclipse.fx.emf.edit.ui/src/org/eclipse/fx/emf/edit/ui/AdapterFactoryTreeTableCellFactory.java
new file mode 100644
index 000000000..065e65fc9
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.emf.edit.ui/src/org/eclipse/fx/emf/edit/ui/AdapterFactoryTreeTableCellFactory.java
@@ -0,0 +1,127 @@
+/*******************************************************************************
+ * Copyright (c) 2012 TESIS DYNAware GmbH 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:
+ * Torsten Sommer <torsten.sommer@tesis.de> - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.fx.emf.edit.ui;
+
+import javafx.scene.Node;
+import javafx.scene.control.Cell;
+import javafx.scene.control.TableCell;
+import javafx.scene.control.TreeTableCell;
+import javafx.scene.control.TreeTableColumn;
+import javafx.util.Callback;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.Notifier;
+import org.eclipse.emf.common.notify.impl.AdapterImpl;
+import org.eclipse.emf.edit.provider.ITableItemColorProvider;
+import org.eclipse.emf.edit.provider.ITableItemFontProvider;
+import org.eclipse.emf.edit.provider.ITableItemLabelProvider;
+
+/**
+ * This list cell factory wraps an {@link AdapterFactory} and delegates calls to its {@link TableCell}s to the
+ * corresponding adapter-implemented item provider interfaces.
+ *
+ * <ul>
+ * <li>{@link Cell#setText(String)} and {@link Cell#setGraphic(Node)} are delegated to
+ * {@link ITableItemLabelProvider}</li>
+ * <li>{@link Cell#setTextFill(javafx.scene.paint.Paint)} and the CSS property
+ * <code>-fx-background-color</code> are delegated to {@link ITableItemColorProvider}</li>
+ * <li>{@link Cell#setFont(javafx.scene.text.Font)} is delegated to {@link ITableItemFontProvider}</li>
+ * </ul>
+ */
+public class AdapterFactoryTreeTableCellFactory<S, T> extends AdapterFactoryCellFactory implements
+ Callback<TreeTableColumn<S, T>, TreeTableCell<S, T>> {
+
+ protected int columnIndex;
+
+ public AdapterFactoryTreeTableCellFactory(AdapterFactory adapterFactory, int columnIndex) {
+ super(adapterFactory);
+ this.columnIndex = columnIndex;
+ }
+
+ @Override
+ @SuppressWarnings("unchecked")
+ public TreeTableCell<S, T> call(TreeTableColumn<S, T> arg0) {
+
+ final TreeTableCell<Object, Object> tableCell = new TreeTableCell<Object, Object>() {
+
+ Object currentItem = null;
+ ICellEditHandler cellEditHandler;
+
+ AdapterImpl adapter = new AdapterImpl() {
+ @Override
+ public void notifyChanged(Notification msg) {
+ update(msg.getNotifier());
+ }
+ };
+
+ @Override
+ protected void updateItem(Object item, boolean empty) {
+ super.updateItem(item, empty);
+
+ // check if the item changed
+ if (item != currentItem) {
+
+ // remove the adapter if attached
+ if (currentItem instanceof Notifier)
+ ((Notifier) currentItem).eAdapters().remove(adapter);
+
+ // update the current item
+ currentItem = item;
+
+ // attach the adapter to the new item
+ if (currentItem instanceof Notifier)
+ ((Notifier) currentItem).eAdapters().add(adapter);
+ }
+
+ // notify the listeners
+ for (ICellUpdateListener cellUpdateListener : cellUpdateListeners)
+ cellUpdateListener.updateItem(this, item, empty);
+
+ update(item);
+ }
+
+ @Override
+ public void startEdit() {
+ super.startEdit();
+ cellEditHandler = getCellEditHandler(this);
+ if (cellEditHandler != null)
+ cellEditHandler.startEdit(this);
+ }
+
+ @Override
+ public void commitEdit(Object newValue) {
+ super.commitEdit(newValue);
+ if (cellEditHandler != null)
+ cellEditHandler.commitEdit(this, newValue);
+ }
+
+ @Override
+ public void cancelEdit() {
+ super.cancelEdit();
+ if (cellEditHandler != null)
+ cellEditHandler.cancelEdit(this);
+ update(getItem());
+ }
+
+ private void update(Object item) {
+ applyTableItemProviderStyle(item, columnIndex, this, adapterFactory);
+ }
+
+ };
+
+ for (ICellCreationListener cellCreationListener : cellCreationListeners)
+ cellCreationListener.cellCreated(tableCell);
+
+ return (TreeTableCell<S, T>) tableCell;
+ }
+
+}
diff --git a/bundles/runtime/org.eclipse.fx.emf.edit.ui/src/org/eclipse/fx/emf/edit/ui/CellUtil.java b/bundles/runtime/org.eclipse.fx.emf.edit.ui/src/org/eclipse/fx/emf/edit/ui/CellUtil.java
new file mode 100644
index 000000000..51fd14405
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.emf.edit.ui/src/org/eclipse/fx/emf/edit/ui/CellUtil.java
@@ -0,0 +1,83 @@
+package org.eclipse.fx.emf.edit.ui;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javafx.scene.control.Cell;
+import javafx.scene.control.ListCell;
+import javafx.scene.control.ListView;
+import javafx.scene.control.MultipleSelectionModel;
+import javafx.scene.control.TableCell;
+import javafx.scene.control.TableRow;
+import javafx.scene.control.TableView;
+import javafx.scene.control.TreeCell;
+import javafx.scene.control.TreeItem;
+import javafx.scene.control.TreeTableCell;
+import javafx.scene.control.TreeTableRow;
+import javafx.scene.control.TreeTableView;
+import javafx.scene.control.TreeView;
+
+public class CellUtil {
+
+ /**
+ * Finds the row for a {@link Cell} so the feedback can be applied to the whole row
+ *
+ * @return the containing {@link TableRow} for {@link TableCell}s or the {@link TreeTableRow} for
+ * {@link TreeTableCell}s and the {@link Cell} itself otherwise
+ */
+ public static Cell<?> getRowNode(final Cell<?> cell) {
+ if (cell instanceof TableCell)
+ return ((TableCell<?, ?>) cell).getTableRow();
+ else if (cell instanceof TreeTableCell)
+ return ((TreeTableCell<?, ?>) cell).getTreeTableRow();
+ else
+ return cell;
+ }
+
+ /**
+ * Retrieves the {@link MultipleSelectionModel} from the {@link ListView}, {@link TreeView},
+ * {@link TableView} or {@link TreeTableView} in which <code>cell</code> is displayed
+ *
+ * @param cell the {@link Cell} for which the {@link MultipleSelectionModel} is to be retrieved
+ * @return the {@link MultipleSelectionModel} for this {@link Cell}
+ */
+ public static MultipleSelectionModel<?> getSelectionModel(Cell<?> cell) {
+ if (cell instanceof ListCell)
+ return ((ListCell<?>) cell).getListView().getSelectionModel();
+ else if (cell instanceof TreeCell)
+ return ((TreeCell<?>) cell).getTreeView().getSelectionModel();
+ else if (cell instanceof TableCell)
+ return ((TableCell<?, ?>) cell).getTableView().getSelectionModel();
+ else if (cell instanceof TableRow)
+ return ((TableRow<?>) cell).getTableView().getSelectionModel();
+ else if (cell instanceof TreeTableCell)
+ return ((TreeTableCell<?, ?>) cell).getTreeTableView().getSelectionModel();
+ else if (cell instanceof TreeTableRow)
+ return ((TreeTableRow<?>) cell).getTreeTableView().getSelectionModel();
+ else
+ throw new IllegalArgumentException("Unsupported Cell type");
+ }
+
+ /**
+ * Retrieves the selected items from the {@link ListView}, {@link TreeView}, {@link TableView} or
+ * {@link TreeTableView} in which <code>cell</code> is displayed. {@link TreeItem}s will be replaced with
+ * {@link TreeItem#getValue()}.
+ *
+ * @param cell the {@link Cell} for which the selected items should be retrieved
+ * @return a {@link List} with the selected items
+ */
+ public static List<?> getSelectedItems(Cell<?> cell) {
+ MultipleSelectionModel<?> selectionModel = getSelectionModel(cell);
+ List<?> items = selectionModel.getSelectedItems();
+
+ if (cell instanceof TreeCell || cell instanceof TreeTableCell) {
+ List<Object> unwrappedItems = new ArrayList<>(items.size());
+ for (Object item : items)
+ unwrappedItems.add(((TreeItem<?>) item).getValue());
+ return unwrappedItems;
+ }
+
+ return items;
+ }
+
+}
diff --git a/bundles/runtime/org.eclipse.fx.emf.edit.ui/src/org/eclipse/fx/emf/edit/ui/EAttributeCellEditHandler.java b/bundles/runtime/org.eclipse.fx.emf.edit.ui/src/org/eclipse/fx/emf/edit/ui/EAttributeCellEditHandler.java
index 887f7b96b..65206a0b9 100755..100644
--- a/bundles/runtime/org.eclipse.fx.emf.edit.ui/src/org/eclipse/fx/emf/edit/ui/EAttributeCellEditHandler.java
+++ b/bundles/runtime/org.eclipse.fx.emf.edit.ui/src/org/eclipse/fx/emf/edit/ui/EAttributeCellEditHandler.java
@@ -12,7 +12,6 @@ import org.eclipse.emf.edit.command.SetCommand;
import org.eclipse.emf.edit.domain.EditingDomain;
import org.eclipse.fx.emf.edit.ui.AdapterFactoryCellFactory.ICellEditHandler;
-
public class EAttributeCellEditHandler implements ICellEditHandler {
EAttribute attribute;
@@ -25,8 +24,8 @@ public class EAttributeCellEditHandler implements ICellEditHandler {
}
@Override
- public boolean canEdit(Cell<?> treeCell) {
- Object item = treeCell.getItem();
+ public boolean canEdit(Cell<?> cell) {
+ Object item = cell.getItem();
return item instanceof EObject && ((EObject) item).eClass().getEAllAttributes().contains(attribute);
}
@@ -44,10 +43,11 @@ public class EAttributeCellEditHandler implements ICellEditHandler {
}
});
- textField.setText(string);
cell.setText(null);
cell.setGraphic(textField);
- textField.selectAll();
+ textField.setText(string);
+ // textField.requestFocus();
+ textField.selectPositionCaret(0);// selectAll();
}
@Override
diff --git a/bundles/runtime/org.eclipse.fx.emf.edit.ui/src/org/eclipse/fx/emf/edit/ui/ProxyCellValueFactory.java b/bundles/runtime/org.eclipse.fx.emf.edit.ui/src/org/eclipse/fx/emf/edit/ui/ProxyCellValueFactory.java
index e9bf107a2..7bdfca97e 100755..100644
--- a/bundles/runtime/org.eclipse.fx.emf.edit.ui/src/org/eclipse/fx/emf/edit/ui/ProxyCellValueFactory.java
+++ b/bundles/runtime/org.eclipse.fx.emf.edit.ui/src/org/eclipse/fx/emf/edit/ui/ProxyCellValueFactory.java
@@ -1,41 +1,42 @@
-/*******************************************************************************
- * Copyright (c) 2012 TESIS DYNAware GmbH 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:
- * Torsten Sommer <torsten.sommer@tesis.de> - initial API and implementation
- *******************************************************************************/
-package org.eclipse.fx.emf.edit.ui;
-
-import javafx.beans.value.ObservableValue;
-import javafx.beans.value.ObservableValueBase;
-import javafx.scene.control.TableColumn;
-import javafx.scene.control.TableColumn.CellDataFeatures;
-import javafx.util.Callback;
-
-/**
- * A cell value factory that simply forwards {@link CellDataFeatures#getValue()} as an {@link ObservableValue}.
- */
-public class ProxyCellValueFactory<S, T> implements Callback<TableColumn.CellDataFeatures<S, T>, ObservableValue<T>> {
-
- @Override
- public ObservableValue<T> call(final CellDataFeatures<S, T> features) {
-
- //TODO add notifications on update
-
- return new ObservableValueBase<T>() {
-
- @Override
- @SuppressWarnings("unchecked")
- public T getValue() {
- return (T) features.getValue();
- }
-
- };
-
- }
-
+/*******************************************************************************
+ * Copyright (c) 2012 TESIS DYNAware GmbH 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:
+ * Torsten Sommer <torsten.sommer@tesis.de> - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.fx.emf.edit.ui;
+
+import javafx.beans.value.ObservableValue;
+import javafx.beans.value.ObservableValueBase;
+import javafx.scene.control.TableColumn;
+import javafx.scene.control.TableColumn.CellDataFeatures;
+import javafx.util.Callback;
+
+/**
+ * A cell value factory that simply forwards {@link CellDataFeatures#getValue()} as an {@link ObservableValue}
+ * .
+ */
+public class ProxyCellValueFactory<S, T> implements Callback<TableColumn.CellDataFeatures<S, T>, ObservableValue<T>> {
+
+ @Override
+ public ObservableValue<T> call(final CellDataFeatures<S, T> features) {
+
+ // TODO add notifications on update
+
+ return new ObservableValueBase<T>() {
+
+ @Override
+ @SuppressWarnings("unchecked")
+ public T getValue() {
+ return (T) features.getValue();
+ }
+
+ };
+
+ }
+
} \ No newline at end of file
diff --git a/bundles/runtime/org.eclipse.fx.emf.edit.ui/src/org/eclipse/fx/emf/edit/ui/TreeTableProxyCellValueFactory.java b/bundles/runtime/org.eclipse.fx.emf.edit.ui/src/org/eclipse/fx/emf/edit/ui/TreeTableProxyCellValueFactory.java
new file mode 100644
index 000000000..ce2f6f9b4
--- /dev/null
+++ b/bundles/runtime/org.eclipse.fx.emf.edit.ui/src/org/eclipse/fx/emf/edit/ui/TreeTableProxyCellValueFactory.java
@@ -0,0 +1,31 @@
+package org.eclipse.fx.emf.edit.ui;
+
+import javafx.beans.value.ObservableValue;
+import javafx.beans.value.ObservableValueBase;
+import javafx.scene.control.TreeItem;
+import javafx.scene.control.TreeTableColumn;
+import javafx.scene.control.TreeTableColumn.CellDataFeatures;
+import javafx.util.Callback;
+
+/**
+ * A cell value factory that simply forwards {@link CellDataFeatures#getValue()} as an {@link ObservableValue}
+ * .
+ */
+public class TreeTableProxyCellValueFactory implements Callback<TreeTableColumn.CellDataFeatures<Object, Object>, ObservableValue<Object>> {
+
+ @Override
+ public ObservableValue<Object> call(final CellDataFeatures<Object, Object> features) {
+
+ return new ObservableValueBase<Object>() {
+
+ @Override
+ public Object getValue() {
+ TreeItem<Object> value = features.getValue();
+ return value.getValue();
+ }
+
+ };
+
+ }
+
+} \ No newline at end of file
diff --git a/bundles/runtime/org.eclipse.fx.emf.edit.ui/src/org/eclipse/fx/emf/edit/ui/dnd/CellDragAdapter.java b/bundles/runtime/org.eclipse.fx.emf.edit.ui/src/org/eclipse/fx/emf/edit/ui/dnd/CellDragAdapter.java
index 0a7bca923..5fb62179e 100755..100644
--- a/bundles/runtime/org.eclipse.fx.emf.edit.ui/src/org/eclipse/fx/emf/edit/ui/dnd/CellDragAdapter.java
+++ b/bundles/runtime/org.eclipse.fx.emf.edit.ui/src/org/eclipse/fx/emf/edit/ui/dnd/CellDragAdapter.java
@@ -1,82 +1,69 @@
-/*******************************************************************************
- * Copyright (c) 2012 TESIS DYNAware GmbH 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:
- * Torsten Sommer <torsten.sommer@tesis.de> - initial API and implementation
- *******************************************************************************/
-package org.eclipse.fx.emf.edit.ui.dnd;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.fx.emf.edit.ui.AdapterFactoryCellFactory;
-import org.eclipse.fx.emf.edit.ui.AdapterFactoryCellFactory.ICellCreationListener;
-
-
-import javafx.collections.ObservableList;
-import javafx.event.EventHandler;
-import javafx.scene.control.Cell;
-import javafx.scene.control.ListCell;
-import javafx.scene.control.MultipleSelectionModel;
-import javafx.scene.control.TableCell;
-import javafx.scene.control.TreeCell;
-import javafx.scene.control.TreeItem;
-import javafx.scene.input.ClipboardContent;
-import javafx.scene.input.Dragboard;
-import javafx.scene.input.MouseEvent;
-import javafx.scene.input.TransferMode;
-
-/**
- * Allows to drag items from viewers backed by an {@link AdapterFactoryCellFactory} using a {@link LocalTransfer}.
- */
-public class CellDragAdapter implements ICellCreationListener {
-
- @Override
- public void cellCreated(final Cell<?> treeCell) {
-
- treeCell.setOnDragDetected(new EventHandler<MouseEvent>() {
- public void handle(MouseEvent event) {
- /* allow any transfer mode */
- Dragboard db = treeCell.startDragAndDrop(TransferMode.ANY);
-
- /* put a string on dummy content dragboard */
- ClipboardContent content = new ClipboardContent();
- content.putString("dummy content");
- db.setContent(content);
-
- MultipleSelectionModel<?> selectionModel = getSelectionModel(treeCell);
- ObservableList<?> selectedItems = selectionModel.getSelectedItems();
-
- List<Object> items = new ArrayList<>(selectedItems.size());
-
- for (Object item : selectedItems) {
- if (item instanceof TreeItem)
- items.add(((TreeItem<?>) item).getValue());
- else
- items.add(item);
- }
-
- LocalTransfer.INSTANCE.setObject(items);
-
- event.consume();
- }
- });
-
- }
-
- private MultipleSelectionModel<?> getSelectionModel(Cell<?> cell) {
- if (cell instanceof TreeCell)
- return ((TreeCell<?>) cell).getTreeView().getSelectionModel();
- else if (cell instanceof ListCell)
- return ((ListCell<?>) cell).getListView().getSelectionModel();
- else if (cell instanceof TableCell)
- return ((TableCell<?, ?>) cell).getTableView().getSelectionModel();
-
- throw new IllegalArgumentException("Unsupported Cell type");
- }
-
-}
+/*******************************************************************************
+ * Copyright (c) 2012 TESIS DYNAware GmbH 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:
+ * Torsten Sommer <torsten.sommer@tesis.de> - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.fx.emf.edit.ui.dnd;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.fx.emf.edit.ui.AdapterFactoryCellFactory;
+import org.eclipse.fx.emf.edit.ui.CellUtil;
+import org.eclipse.fx.emf.edit.ui.AdapterFactoryCellFactory.ICellCreationListener;
+
+import javafx.collections.ObservableList;
+import javafx.event.EventHandler;
+import javafx.scene.control.Cell;
+import javafx.scene.control.MultipleSelectionModel;
+import javafx.scene.control.TreeItem;
+import javafx.scene.input.ClipboardContent;
+import javafx.scene.input.Dragboard;
+import javafx.scene.input.MouseEvent;
+import javafx.scene.input.TransferMode;
+
+/**
+ * Allows to drag items from viewers backed by an {@link AdapterFactoryCellFactory} using a
+ * {@link LocalTransfer}.
+ */
+public class CellDragAdapter implements ICellCreationListener {
+
+ @Override
+ public void cellCreated(final Cell<?> cell) {
+
+ cell.setOnDragDetected(new EventHandler<MouseEvent>() {
+ public void handle(MouseEvent event) {
+ /* allow any transfer mode */
+ Dragboard db = cell.startDragAndDrop(TransferMode.ANY);
+
+ /* put a string on dummy content dragboard */
+ ClipboardContent content = new ClipboardContent();
+ content.putString("dummy content");
+ db.setContent(content);
+
+ MultipleSelectionModel<?> selectionModel = CellUtil.getSelectionModel(cell);
+ ObservableList<?> selectedItems = selectionModel.getSelectedItems();
+
+ List<Object> items = new ArrayList<>(selectedItems.size());
+
+ for (Object item : selectedItems) {
+ if (item instanceof TreeItem)
+ items.add(((TreeItem<?>) item).getValue());
+ else
+ items.add(item);
+ }
+
+ LocalTransfer.INSTANCE.setObject(items);
+
+ event.consume();
+ }
+ });
+
+ }
+
+}
diff --git a/bundles/runtime/org.eclipse.fx.emf.edit.ui/src/org/eclipse/fx/emf/edit/ui/dnd/EditingDomainCellDropAdapter.java b/bundles/runtime/org.eclipse.fx.emf.edit.ui/src/org/eclipse/fx/emf/edit/ui/dnd/EditingDomainCellDropAdapter.java
index 331d949e6..2b241ab35 100755..100644
--- a/bundles/runtime/org.eclipse.fx.emf.edit.ui/src/org/eclipse/fx/emf/edit/ui/dnd/EditingDomainCellDropAdapter.java
+++ b/bundles/runtime/org.eclipse.fx.emf.edit.ui/src/org/eclipse/fx/emf/edit/ui/dnd/EditingDomainCellDropAdapter.java
@@ -1,185 +1,179 @@
-/*******************************************************************************
- * Copyright (c) 2012 TESIS DYNAware GmbH 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:
- * Torsten Sommer <torsten.sommer@tesis.de> - initial API and implementation
- *******************************************************************************/
-package org.eclipse.fx.emf.edit.ui.dnd;
-
-import java.util.ArrayList;
-import java.util.Collection;
-
-import javafx.event.EventHandler;
-import javafx.scene.control.Cell;
-import javafx.scene.control.TableCell;
-import javafx.scene.input.DragEvent;
-import javafx.scene.input.TransferMode;
-
-import org.eclipse.emf.common.command.Command;
-import org.eclipse.emf.edit.command.DragAndDropCommand;
-import org.eclipse.emf.edit.command.DragAndDropFeedback;
-import org.eclipse.emf.edit.domain.EditingDomain;
-import org.eclipse.fx.emf.edit.ui.AdapterFactoryCellFactory;
-import org.eclipse.fx.emf.edit.ui.AdapterFactoryCellFactory.ICellCreationListener;
-
-
-/**
- * Allows to drop items into viewers backed by an
- * {@link AdapterFactoryCellFactory} using a {@link LocalTransfer}.
- */
-public class EditingDomainCellDropAdapter implements ICellCreationListener {
-
- /**
- * Handles the feedback to Drag & Drop events by styling or otherwise
- * modifying the affected {@link Cell}
- */
- public interface IDnDFeedbackHandler {
-
- void onFeedbackInsertBefore(Cell<?> cell);
-
- void onFeedbackInsertAfter(Cell<?> cell);
-
- void onFeedbackSelect(Cell<?> cell);
-
- void onFeedbackNone(Cell<?> cell);
-
- }
-
- final EditingDomain editingDomain;
- Command dndCommand;
- IDnDFeedbackHandler feedbackHandler = new DefaultFeedbackHandler();
-
- public EditingDomainCellDropAdapter(EditingDomain editingDomain) {
- this.editingDomain = editingDomain;
- }
-
- public IDnDFeedbackHandler getFeedbackHandler() {
- return feedbackHandler;
- }
-
- public void setFeedbackHandler(IDnDFeedbackHandler feedbackHandler) {
- if (feedbackHandler == null)
- throw new IllegalArgumentException("The feeback handler cannot be null");
-
- this.feedbackHandler = feedbackHandler;
- }
-
- @Override
- public void cellCreated(final Cell<?> cell) {
-
- cell.setOnDragOver(new EventHandler<DragEvent>() {
-
- @Override
- public void handle(DragEvent event) {
- Object item = cell.getItem();
-
- Cell<?> node = getRowNode(cell);
-
- double y = event.getY();
- double height = cell.getLayoutBounds().getHeight();
-
- float position = (float) (y / height);
-
- Object object = LocalTransfer.INSTANCE.getObject();
-
- Command command = DragAndDropCommand.create(editingDomain, item, position, DragAndDropFeedback.DROP_MOVE
- | DragAndDropFeedback.DROP_LINK, DragAndDropFeedback.DROP_MOVE, (Collection<?>) object);
-
- if (command.canExecute()) {
- dndCommand = command;
-
- if (command instanceof DragAndDropFeedback) {
- DragAndDropFeedback dndFeedback = (DragAndDropFeedback) command;
- int feedback = dndFeedback.getFeedback();
-
- if ((feedback & DragAndDropFeedback.FEEDBACK_INSERT_BEFORE) != 0)
- feedbackHandler.onFeedbackInsertBefore(node);
- else if ((feedback & DragAndDropFeedback.FEEDBACK_INSERT_AFTER) != 0)
- feedbackHandler.onFeedbackInsertAfter(node);
- else if ((feedback & DragAndDropFeedback.FEEDBACK_SELECT) != 0)
- feedbackHandler.onFeedbackSelect(node);
- else
- feedbackHandler.onFeedbackNone(node);
-
- if (System.getProperties().getProperty("os.name").toLowerCase().contains("mac")) {
- event.acceptTransferModes(TransferMode.COPY_OR_MOVE);
- } else {
- ArrayList<TransferMode> modes = new ArrayList<>();
-
- if ((feedback & DragAndDropFeedback.DROP_COPY) != 0)
- modes.add(TransferMode.COPY);
- if ((feedback & DragAndDropFeedback.DROP_LINK) != 0)
- modes.add(TransferMode.LINK);
- if ((feedback & DragAndDropFeedback.DROP_MOVE) != 0)
- modes.add(TransferMode.MOVE);
-
- event.acceptTransferModes(modes.toArray(new TransferMode[modes.size()]));
- }
- }
-
- } else {
- dndCommand = null;
- feedbackHandler.onFeedbackNone(node);
- }
-
- }
-
- });
-
- cell.setOnDragExited(new EventHandler<DragEvent>() {
-
- @Override
- public void handle(DragEvent event) {
- feedbackHandler.onFeedbackNone(getRowNode(cell));
- }
-
- });
-
- cell.setOnDragDropped(new EventHandler<DragEvent>() {
- public void handle(DragEvent event) {
- if (dndCommand != null)
- editingDomain.getCommandStack().execute(dndCommand);
-
- event.setDropCompleted(true);
- event.consume();
- }
- });
- }
-
- Cell<?> getRowNode(final Cell<?> cell) {
- return cell instanceof TableCell ? ((TableCell<?, ?>) cell).getTableRow() : cell;
- }
-
- /**
- * This default implementation of {@link IDnDFeedbackHandler} adds a red
- * line where the dragged {@link Cell} can be dropped.
- */
- public static class DefaultFeedbackHandler implements IDnDFeedbackHandler {
-
- @Override
- public void onFeedbackInsertBefore(Cell<?> cell) {
- cell.setStyle("-fx-border-color: red transparent transparent transparent;");
- }
-
- @Override
- public void onFeedbackInsertAfter(Cell<?> cell) {
- cell.setStyle("-fx-border-color: transparent transparent red transparent;");
- }
-
- @Override
- public void onFeedbackSelect(Cell<?> cell) {
- cell.setStyle("-fx-border-color: transparent;");
- }
-
- @Override
- public void onFeedbackNone(Cell<?> cell) {
- cell.setStyle("-fx-border-color: transparent;");
- }
-
- }
-
-}
+/*******************************************************************************
+ * Copyright (c) 2012 TESIS DYNAware GmbH 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:
+ * Torsten Sommer <torsten.sommer@tesis.de> - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.fx.emf.edit.ui.dnd;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import javafx.event.EventHandler;
+import javafx.scene.control.Cell;
+import javafx.scene.input.DragEvent;
+import javafx.scene.input.TransferMode;
+
+import org.eclipse.emf.common.command.Command;
+import org.eclipse.emf.edit.command.DragAndDropCommand;
+import org.eclipse.emf.edit.command.DragAndDropFeedback;
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.fx.emf.edit.ui.AdapterFactoryCellFactory;
+import org.eclipse.fx.emf.edit.ui.AdapterFactoryCellFactory.ICellCreationListener;
+import org.eclipse.fx.emf.edit.ui.CellUtil;
+
+/**
+ * Allows to drop items into viewers backed by an {@link AdapterFactoryCellFactory} using a
+ * {@link LocalTransfer}.
+ */
+public class EditingDomainCellDropAdapter implements ICellCreationListener {
+
+ /**
+ * Handles the feedback to Drag & Drop events by styling or otherwise modifying the affected {@link Cell}
+ */
+ public interface IDnDFeedbackHandler {
+
+ void onFeedbackInsertBefore(Cell<?> cell);
+
+ void onFeedbackInsertAfter(Cell<?> cell);
+
+ void onFeedbackSelect(Cell<?> cell);
+
+ void onFeedbackNone(Cell<?> cell);
+
+ }
+
+ final EditingDomain editingDomain;
+ Command dndCommand;
+ IDnDFeedbackHandler feedbackHandler = new DefaultFeedbackHandler();
+
+ public EditingDomainCellDropAdapter(EditingDomain editingDomain) {
+ this.editingDomain = editingDomain;
+ }
+
+ public IDnDFeedbackHandler getFeedbackHandler() {
+ return feedbackHandler;
+ }
+
+ public void setFeedbackHandler(IDnDFeedbackHandler feedbackHandler) {
+ if (feedbackHandler == null)
+ throw new IllegalArgumentException("The feeback handler cannot be null");
+
+ this.feedbackHandler = feedbackHandler;
+ }
+
+ @Override
+ public void cellCreated(final Cell<?> cell) {
+
+ cell.setOnDragOver(new EventHandler<DragEvent>() {
+
+ @Override
+ public void handle(DragEvent event) {
+ Object item = cell.getItem();
+
+ Cell<?> node = CellUtil.getRowNode(cell);
+
+ double y = event.getY();
+ double height = cell.getLayoutBounds().getHeight();
+
+ float position = (float) (y / height);
+
+ Object object = LocalTransfer.INSTANCE.getObject();
+
+ Command command = DragAndDropCommand.create(editingDomain, item, position, DragAndDropFeedback.DROP_MOVE
+ | DragAndDropFeedback.DROP_LINK, DragAndDropFeedback.DROP_MOVE, (Collection<?>) object);
+
+ if (command.canExecute()) {
+ dndCommand = command;
+
+ if (command instanceof DragAndDropFeedback) {
+ DragAndDropFeedback dndFeedback = (DragAndDropFeedback) command;
+ int feedback = dndFeedback.getFeedback();
+
+ if ((feedback & DragAndDropFeedback.FEEDBACK_INSERT_BEFORE) != 0)
+ feedbackHandler.onFeedbackInsertBefore(node);
+ else if ((feedback & DragAndDropFeedback.FEEDBACK_INSERT_AFTER) != 0)
+ feedbackHandler.onFeedbackInsertAfter(node);
+ else if ((feedback & DragAndDropFeedback.FEEDBACK_SELECT) != 0)
+ feedbackHandler.onFeedbackSelect(node);
+ else
+ feedbackHandler.onFeedbackNone(node);
+
+ if (System.getProperties().getProperty("os.name").toLowerCase().contains("mac")) {
+ event.acceptTransferModes(TransferMode.COPY_OR_MOVE);
+ } else {
+ ArrayList<TransferMode> modes = new ArrayList<>();
+
+ if ((feedback & DragAndDropFeedback.DROP_COPY) != 0)
+ modes.add(TransferMode.COPY);
+ if ((feedback & DragAndDropFeedback.DROP_LINK) != 0)
+ modes.add(TransferMode.LINK);
+ if ((feedback & DragAndDropFeedback.DROP_MOVE) != 0)
+ modes.add(TransferMode.MOVE);
+
+ event.acceptTransferModes(modes.toArray(new TransferMode[modes.size()]));
+ }
+ }
+
+ } else {
+ dndCommand = null;
+ feedbackHandler.onFeedbackNone(node);
+ }
+
+ }
+
+ });
+
+ cell.setOnDragExited(new EventHandler<DragEvent>() {
+
+ @Override
+ public void handle(DragEvent event) {
+ feedbackHandler.onFeedbackNone(CellUtil.getRowNode(cell));
+ }
+
+ });
+
+ cell.setOnDragDropped(new EventHandler<DragEvent>() {
+ public void handle(DragEvent event) {
+ if (dndCommand != null)
+ editingDomain.getCommandStack().execute(dndCommand);
+
+ event.setDropCompleted(true);
+ event.consume();
+ }
+ });
+ }
+
+ /**
+ * This default implementation of {@link IDnDFeedbackHandler} adds a red line where the dragged
+ * {@link Cell} can be dropped.
+ */
+ public static class DefaultFeedbackHandler implements IDnDFeedbackHandler {
+
+ @Override
+ public void onFeedbackInsertBefore(Cell<?> cell) {
+ cell.setStyle("-fx-border-color: red transparent transparent transparent;");
+ }
+
+ @Override
+ public void onFeedbackInsertAfter(Cell<?> cell) {
+ cell.setStyle("-fx-border-color: transparent transparent red transparent;");
+ }
+
+ @Override
+ public void onFeedbackSelect(Cell<?> cell) {
+ cell.setStyle("-fx-border-color: transparent;");
+ }
+
+ @Override
+ public void onFeedbackNone(Cell<?> cell) {
+ cell.setStyle("-fx-border-color: transparent;");
+ }
+
+ }
+
+}
diff --git a/bundles/runtime/org.eclipse.fx.emf.edit.ui/src/org/eclipse/fx/emf/edit/ui/dnd/LocalTransfer.java b/bundles/runtime/org.eclipse.fx.emf.edit.ui/src/org/eclipse/fx/emf/edit/ui/dnd/LocalTransfer.java
index c1ed9b317..c1ed9b317 100755..100644
--- a/bundles/runtime/org.eclipse.fx.emf.edit.ui/src/org/eclipse/fx/emf/edit/ui/dnd/LocalTransfer.java
+++ b/bundles/runtime/org.eclipse.fx.emf.edit.ui/src/org/eclipse/fx/emf/edit/ui/dnd/LocalTransfer.java
diff --git a/demos/org.eclipse.fx.demo.contacts.app/.classpath b/demos/org.eclipse.fx.demo.contacts.app/.classpath
index 098194ca4..1fa3e6803 100755
--- a/demos/org.eclipse.fx.demo.contacts.app/.classpath
+++ b/demos/org.eclipse.fx.demo.contacts.app/.classpath
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
- <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
<classpathentry kind="src" path="src"/>
<classpathentry kind="output" path="bin"/>
diff --git a/demos/org.eclipse.fx.demo.contacts.app/.project b/demos/org.eclipse.fx.demo.contacts.app/.project
index ef0866633..5c3528319 100755
--- a/demos/org.eclipse.fx.demo.contacts.app/.project
+++ b/demos/org.eclipse.fx.demo.contacts.app/.project
@@ -1,39 +1,39 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
- <name>org.eclipse.fx.demo.contacts.app</name>
- <comment></comment>
- <projects>
- </projects>
- <buildSpec>
- <buildCommand>
- <name>org.eclipse.jdt.core.javabuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.pde.ManifestBuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.pde.SchemaBuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.xtext.ui.shared.xtextBuilder</name>
- <arguments>
- </arguments>
- </buildCommand>
- <buildCommand>
- <name>org.eclipse.pde.ds.core.builder</name>
- <arguments>
- </arguments>
- </buildCommand>
- </buildSpec>
- <natures>
- <nature>org.eclipse.pde.PluginNature</nature>
- <nature>org.eclipse.jdt.core.javanature</nature>
- <nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
- </natures>
-</projectDescription>
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.fx.demo.contacts.app</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.xtext.ui.shared.xtextBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ds.core.builder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
+ </natures>
+</projectDescription>
diff --git a/demos/org.eclipse.fx.demo.contacts.app/Application.e4xmi b/demos/org.eclipse.fx.demo.contacts.app/Application.e4xmi
index 3c136dd70..ed8702dea 100755
--- a/demos/org.eclipse.fx.demo.contacts.app/Application.e4xmi
+++ b/demos/org.eclipse.fx.demo.contacts.app/Application.e4xmi
@@ -6,6 +6,7 @@
<children xsi:type="basic:PartStack" xmi:id="_SeXUC-8EEd6FC9cDb6iV7g" elementId="_SeXUC-8EEd6FC9cDb6iV7g" containerData="30">
<children xsi:type="basic:Part" xmi:id="_SeXUDO8EEd6FC9cDb6iV7g" elementId="ContactsView" contributionURI="bundleclass://org.eclipse.fx.demo.contacts.app/org.eclipse.fx.demo.contacts.views.ContactsTreeView" label="%contactsTree" iconURI="platform:/plugin/org.eclipse.fx.demo.contacts.app/icons/silk/folder_user.png" tooltip="%contactsTooltip"/>
<children xsi:type="basic:Part" xmi:id="_OI8-sDb3EeKZBafm86UM9A" elementId="org.eclipse.fx.demo.contacts.app.parts.contactsTableView" contributionURI="bundleclass://org.eclipse.fx.demo.contacts.app/org.eclipse.fx.demo.contacts.views.ContactsTableView" label="%contactsTable" iconURI="platform:/plugin/org.eclipse.fx.demo.contacts.app/icons/silk/folder_user.png"/>
+ <children xsi:type="basic:Part" xmi:id="_lrRxYLP6EeKZPc9w5-xPQw" elementId="org.eclipse.fx.demo.contacts.app.parts.contactsTreeTableView" contributionURI="bundleclass://org.eclipse.fx.demo.contacts.app/org.eclipse.fx.demo.contacts.views.ContactsTreeTableView" label="%contactsTreeTable" iconURI="platform:/plugin/org.eclipse.fx.demo.contacts.app/icons/silk/folder_user.png"/>
<children xsi:type="basic:Part" xmi:id="_DCqj8DmuEeKZ7fX033HQVQ" elementId="org.eclipse.fx.demo.contacts.app.parts.contactsListView" contributionURI="bundleclass://org.eclipse.fx.demo.contacts.app/org.eclipse.fx.demo.contacts.views.ContactsListView" label="%contactsList" iconURI="platform:/plugin/org.eclipse.fx.demo.contacts.app/icons/silk/folder_user.png"/>
</children>
<children xsi:type="basic:PartStack" xmi:id="_SeXUDe8EEd6FC9cDb6iV7g" elementId="org.eclipse.fx.demo.contacts.partstacks.second" containerData="70">
diff --git a/demos/org.eclipse.fx.demo.contacts.app/IP_TODOS.txt b/demos/org.eclipse.fx.demo.contacts.app/IP_TODOS.txt
index 1400c0596..ecd64f448 100755
--- a/demos/org.eclipse.fx.demo.contacts.app/IP_TODOS.txt
+++ b/demos/org.eclipse.fx.demo.contacts.app/IP_TODOS.txt
@@ -1,24 +1,24 @@
-e4 icons:
----------
-css/blue.png
-css/bright.png
-css/dark.png
-
-FAM-FAM-FAM (Creative Commons Attribution 2.5 License):
--------------------------------------------------------
-icons/slik/arrow_redo.png
-icons/slik/arrow_undo.png
-icons/slik/bright.png
-icons/slik/cross.png
-icons/slik/cut.png
-icons/slik/dark.png
-icons/slik/disk.png
-icons/slik/door_in.png
-icons/slik/folder_add.png
-icons/slik/folder_user.png
-icons/slik/folder.png
-icons/slik/page_copy.png
-icons/slik/page_paste.png
-icons/slik/report_user.png
-icons/slik/user_add.png
+e4 icons:
+---------
+css/blue.png
+css/bright.png
+css/dark.png
+
+FAM-FAM-FAM (Creative Commons Attribution 2.5 License):
+-------------------------------------------------------
+icons/slik/arrow_redo.png
+icons/slik/arrow_undo.png
+icons/slik/bright.png
+icons/slik/cross.png
+icons/slik/cut.png
+icons/slik/dark.png
+icons/slik/disk.png
+icons/slik/door_in.png
+icons/slik/folder_add.png
+icons/slik/folder_user.png
+icons/slik/folder.png
+icons/slik/page_copy.png
+icons/slik/page_paste.png
+icons/slik/report_user.png
+icons/slik/user_add.png
icons/slik/user_delete.png \ No newline at end of file
diff --git a/demos/org.eclipse.fx.demo.contacts.app/OSGI-INF/component.xml b/demos/org.eclipse.fx.demo.contacts.app/OSGI-INF/component.xml
index 2a2b32aa3..dbd5f4196 100755
--- a/demos/org.eclipse.fx.demo.contacts.app/OSGI-INF/component.xml
+++ b/demos/org.eclipse.fx.demo.contacts.app/OSGI-INF/component.xml
@@ -1,7 +1,7 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.eclipse.fx.demo.contacts.ContactsManager">
- <implementation class="org.eclipse.fx.demo.contacts.model.ContactsManagerImpl"/>
- <service>
- <provide interface="org.eclipse.fx.demo.contacts.model.ContactsManager"/>
- </service>
-</scr:component>
+<?xml version="1.0" encoding="UTF-8"?>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.eclipse.fx.demo.contacts.ContactsManager">
+ <implementation class="org.eclipse.fx.demo.contacts.model.ContactsManagerImpl"/>
+ <service>
+ <provide interface="org.eclipse.fx.demo.contacts.model.ContactsManager"/>
+ </service>
+</scr:component>
diff --git a/demos/org.eclipse.fx.demo.contacts.app/contacts.product.launch b/demos/org.eclipse.fx.demo.contacts.app/contacts.product.launch
index eae7889f9..ffcb4577b 100644
--- a/demos/org.eclipse.fx.demo.contacts.app/contacts.product.launch
+++ b/demos/org.eclipse.fx.demo.contacts.app/contacts.product.launch
@@ -20,8 +20,8 @@
<stringAttribute key="pde.version" value="3.3"/>
<stringAttribute key="product" value="org.eclipse.fx.demo.contacts.app.product"/>
<stringAttribute key="productFile" value="/org.eclipse.fx.demo.contacts.app/contacts.product"/>
-<stringAttribute key="selected_target_plugins" value="com.ibm.icu@default:default,javax.annotation@default:default,javax.inject@default:default,javax.servlet@default:default,javax.xml@default:default,org.eclipse.ant.core@default:default,org.eclipse.core.commands@default:default,org.eclipse.core.contenttype@default:default,org.eclipse.core.databinding.beans@default:default,org.eclipse.core.databinding.observable@default:default,org.eclipse.core.databinding.property@default:default,org.eclipse.core.databinding@default:default,org.eclipse.core.expressions@default:default,org.eclipse.core.filesystem@default:default,org.eclipse.core.jobs@default:default,org.eclipse.core.resources@default:default,org.eclipse.core.runtime.compatibility.registry@default:false,org.eclipse.core.runtime@default:true,org.eclipse.core.variables@default:default,org.eclipse.e4.core.commands@default:default,org.eclipse.e4.core.contexts@default:default,org.eclipse.e4.core.di.extensions@default:default,org.eclipse.e4.core.di@default:default,org.eclipse.e4.core.services@default:default,org.eclipse.e4.ui.di@default:default,org.eclipse.e4.ui.model.workbench@default:default,org.eclipse.e4.ui.services@default:default,org.eclipse.e4.ui.workbench@default:default,org.eclipse.emf.common@default:default,org.eclipse.emf.ecore.change@default:default,org.eclipse.emf.ecore.xmi@default:default,org.eclipse.emf.ecore@default:default,org.eclipse.emf.edit@default:default,org.eclipse.equinox.app@default:default,org.eclipse.equinox.common@2:true,org.eclipse.equinox.concurrent@default:default,org.eclipse.equinox.ds@1:true,org.eclipse.equinox.event@default:default,org.eclipse.equinox.preferences@default:default,org.eclipse.equinox.registry@default:default,org.eclipse.equinox.util@default:default,org.eclipse.osgi.services@default:default,org.eclipse.osgi@-1:true"/>
-<stringAttribute key="selected_workspace_plugins" value="org.eclipse.fx.core.databinding@default:default,org.eclipse.fx.core@default:default,org.eclipse.fx.demo.contacts.app@default:default,org.eclipse.fx.demo.contacts.edit@default:default,org.eclipse.fx.demo.contacts@default:default,org.eclipse.fx.emf.databinding@default:default,org.eclipse.fx.emf.edit.ui@default:default,org.eclipse.fx.javafx@default:default,org.eclipse.fx.osgi.util@default:default,org.eclipse.fx.osgi@default:false,org.eclipse.fx.ui.application@default:default,org.eclipse.fx.ui.databinding@default:default,org.eclipse.fx.ui.di@default:default,org.eclipse.fx.ui.dialogs@default:default,org.eclipse.fx.ui.keybindings.e4@default:default,org.eclipse.fx.ui.keybindings.generic@default:default,org.eclipse.fx.ui.keybindings@default:default,org.eclipse.fx.ui.panes@default:default,org.eclipse.fx.ui.services@default:default,org.eclipse.fx.ui.theme@default:default,org.eclipse.fx.ui.workbench.base@default:default,org.eclipse.fx.ui.workbench.fx.controls@default:default,org.eclipse.fx.ui.workbench.fx@default:default,org.eclipse.fx.ui.workbench.renderers.base@default:default,org.eclipse.fx.ui.workbench.renderers.fx@default:default"/>
+<stringAttribute key="selected_target_plugins" value="com.ibm.icu@default:default,javax.annotation@default:default,javax.inject@default:default,javax.servlet@default:default,javax.xml@default:default,org.eclipse.ant.core@default:default,org.eclipse.core.commands@default:default,org.eclipse.core.contenttype@default:default,org.eclipse.core.databinding.beans@default:default,org.eclipse.core.databinding.observable@default:default,org.eclipse.core.databinding.property@default:default,org.eclipse.core.databinding@default:default,org.eclipse.core.expressions@default:default,org.eclipse.core.filesystem@default:default,org.eclipse.core.jobs@default:default,org.eclipse.core.resources@default:default,org.eclipse.core.runtime.compatibility.registry@default:false,org.eclipse.core.runtime@default:true,org.eclipse.core.variables@default:default,org.eclipse.e4.core.commands@default:default,org.eclipse.e4.core.contexts@default:default,org.eclipse.e4.core.di.extensions@default:default,org.eclipse.e4.core.di@default:default,org.eclipse.e4.core.services@default:default,org.eclipse.e4.ui.di@default:default,org.eclipse.e4.ui.model.workbench@default:default,org.eclipse.e4.ui.services@default:default,org.eclipse.e4.ui.workbench@default:default,org.eclipse.emf.common@default:default,org.eclipse.emf.ecore.change@default:default,org.eclipse.emf.ecore.xmi@default:default,org.eclipse.emf.ecore@default:default,org.eclipse.emf.edit@default:default,org.eclipse.equinox.app@default:default,org.eclipse.equinox.common@2:true,org.eclipse.equinox.concurrent@default:default,org.eclipse.equinox.ds@1:true,org.eclipse.equinox.event@default:default,org.eclipse.equinox.preferences@default:default,org.eclipse.equinox.registry@default:default,org.eclipse.equinox.util@default:default,org.eclipse.osgi.services@default:default"/>
+<stringAttribute key="selected_workspace_plugins" value="org.eclipse.fx.core.databinding@default:default,org.eclipse.fx.core@default:default,org.eclipse.fx.demo.contacts.app@default:default,org.eclipse.fx.demo.contacts.edit@default:default,org.eclipse.fx.demo.contacts@default:default,org.eclipse.fx.emf.databinding@default:default,org.eclipse.fx.emf.edit.ui@default:default,org.eclipse.fx.javafx@default:default,org.eclipse.fx.osgi.util@default:default,org.eclipse.fx.osgi@default:false,org.eclipse.fx.ui.application@default:default,org.eclipse.fx.ui.databinding@default:default,org.eclipse.fx.ui.di@default:default,org.eclipse.fx.ui.dialogs@default:default,org.eclipse.fx.ui.keybindings.e4@default:default,org.eclipse.fx.ui.keybindings.generic@default:default,org.eclipse.fx.ui.keybindings@default:default,org.eclipse.fx.ui.panes@default:default,org.eclipse.fx.ui.services@default:default,org.eclipse.fx.ui.theme@default:default,org.eclipse.fx.ui.workbench.base@default:default,org.eclipse.fx.ui.workbench.fx.controls@default:default,org.eclipse.fx.ui.workbench.fx@default:default,org.eclipse.fx.ui.workbench.renderers.base@default:default,org.eclipse.fx.ui.workbench.renderers.fx@default:default,org.eclipse.osgi@-1:true"/>
<booleanAttribute key="show_selected_only" value="false"/>
<booleanAttribute key="tracing" value="false"/>
<booleanAttribute key="useCustomFeatures" value="false"/>
diff --git a/demos/org.eclipse.fx.demo.contacts.app/plugin.properties b/demos/org.eclipse.fx.demo.contacts.app/plugin.properties
index 5d021c984..798782137 100755
--- a/demos/org.eclipse.fx.demo.contacts.app/plugin.properties
+++ b/demos/org.eclipse.fx.demo.contacts.app/plugin.properties
@@ -14,6 +14,7 @@ switchThemeMenu = _Theme
partDetails = Details
contactsTree = Tree
contactsTable = Table
+contactsTreeTable = Tree Table
contactsList = List
menuLabelSave = _Save
menuLabelCut = Cut
diff --git a/demos/org.eclipse.fx.demo.contacts.app/plugin_ru.properties b/demos/org.eclipse.fx.demo.contacts.app/plugin_ru.properties
deleted file mode 100755
index f572982c7..000000000
--- a/demos/org.eclipse.fx.demo.contacts.app/plugin_ru.properties
+++ /dev/null
@@ -1,22 +0,0 @@
-###############################################################################
-# Copyright (c) 2011 IBM Corporation 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:
-# IBM Corporation - initial API and implementation
-###############################################################################
-fileMenu = &\u0424\u0430\u0439\u043B
-partDetails = \u041F\u043E\u0434\u0440\u043E\u0431\u043D\u043E
-contactsList = \u041A\u043E\u043D\u0442\u0430\u043A\u0442\u044B
-menuLabelSave = &\u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C
-menuLabelDelete = &\u0423\u0434\u0430\u043B\u0438\u0442\u044C
-menuLabelDirectExit = &\u0411\u044B\u0441\u0442\u0440\u044B\u0439 \u0432\u044B\u0445\u043E\u0434
-menuLabelExit = &\u0412\u044B\u0445\u043E\u0434
-windowTitle = e4 \u0417\u0430\u043F\u0438\u0441\u043D\u0430\u044F \u043A\u043D\u0438\u0436\u043A\u0430
-contactsTooltip = \u0421\u043F\u0438\u0441\u043E\u043A \u043A\u043E\u043D\u0442\u0430\u043A\u0442\u043E\u0432
-detailsTooltip = \u041F\u043E\u0434\u0440\u043E\u0431\u043D\u0430\u044F \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u044F \u043E \u043A\u043E\u043D\u0442\u0430\u043A\u0442\u0435
-toolbarSaveTooltip = \u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C
-
diff --git a/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/DecorationController.java b/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/DecorationController.java
index ed3df76e5..bebb90b9e 100755
--- a/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/DecorationController.java
+++ b/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/DecorationController.java
@@ -1,77 +1,77 @@
-package org.eclipse.fx.demo.contacts;
-
-import javafx.application.Platform;
-import javafx.event.ActionEvent;
-import javafx.event.EventHandler;
-import javafx.fxml.FXML;
-import javafx.geometry.Rectangle2D;
-import javafx.scene.control.ToolBar;
-import javafx.scene.input.MouseEvent;
-import javafx.stage.Screen;
-import javafx.stage.Stage;
-import javax.annotation.PostConstruct;
-
-public class DecorationController {
- private double mouseDragOffsetX = 0;
- private double mouseDragOffsetY = 0;
-
- @FXML
- private ToolBar decorationArea;
-
- private Rectangle2D backupWindowBounds;
-
- public DecorationController() {
- }
-
- @PostConstruct
- void init() {
- decorationArea.setOnMousePressed(new EventHandler<MouseEvent>() {
- public void handle(MouseEvent event) {
- mouseDragOffsetX = event.getSceneX();
- mouseDragOffsetY = event.getSceneY();
- }
- });
- decorationArea.setOnMouseDragged(new EventHandler<MouseEvent>() {
- public void handle(MouseEvent event) {
- Stage w = getStage();
- w.setX(event.getScreenX() - mouseDragOffsetX);
- w.setY(event.getScreenY() - mouseDragOffsetY);
- }
- });
- }
-
- public void handleClose(ActionEvent event) {
- Platform.exit();
- }
-
- public void handleMin(ActionEvent event) {
- getStage().setIconified(true);
- }
-
- public void handleMax(ActionEvent event) {
- Stage stage = getStage();
- final double stageY = stage.getY();
- final Screen screen = Screen.getScreensForRectangle(stage.getX(), stageY, 1, 1).get(0);
- Rectangle2D bounds = screen.getVisualBounds();
- if (bounds.getMinX() == stage.getX() && bounds.getMinY() == stageY && bounds.getWidth() == stage.getWidth()
- && bounds.getHeight() == stage.getHeight()) {
- if (backupWindowBounds != null) {
- stage.setX(backupWindowBounds.getMinX());
- stage.setY(backupWindowBounds.getMinY());
- stage.setWidth(backupWindowBounds.getWidth());
- stage.setHeight(backupWindowBounds.getHeight());
- }
- } else {
- backupWindowBounds = new Rectangle2D(stage.getX(), stage.getY(), stage.getWidth(), stage.getHeight());
- final double newStageY = screen.getVisualBounds().getMinY();
- stage.setX(screen.getVisualBounds().getMinX());
- stage.setY(newStageY);
- stage.setWidth(screen.getVisualBounds().getWidth());
- stage.setHeight(screen.getVisualBounds().getHeight());
- }
- }
-
- Stage getStage() {
- return (Stage) decorationArea.getScene().getWindow();
- }
-}
+package org.eclipse.fx.demo.contacts;
+
+import javafx.application.Platform;
+import javafx.event.ActionEvent;
+import javafx.event.EventHandler;
+import javafx.fxml.FXML;
+import javafx.geometry.Rectangle2D;
+import javafx.scene.control.ToolBar;
+import javafx.scene.input.MouseEvent;
+import javafx.stage.Screen;
+import javafx.stage.Stage;
+import javax.annotation.PostConstruct;
+
+public class DecorationController {
+ private double mouseDragOffsetX = 0;
+ private double mouseDragOffsetY = 0;
+
+ @FXML
+ private ToolBar decorationArea;
+
+ private Rectangle2D backupWindowBounds;
+
+ public DecorationController() {
+ }
+
+ @PostConstruct
+ void init() {
+ decorationArea.setOnMousePressed(new EventHandler<MouseEvent>() {
+ public void handle(MouseEvent event) {
+ mouseDragOffsetX = event.getSceneX();
+ mouseDragOffsetY = event.getSceneY();
+ }
+ });
+ decorationArea.setOnMouseDragged(new EventHandler<MouseEvent>() {
+ public void handle(MouseEvent event) {
+ Stage w = getStage();
+ w.setX(event.getScreenX() - mouseDragOffsetX);
+ w.setY(event.getScreenY() - mouseDragOffsetY);
+ }
+ });
+ }
+
+ public void handleClose(ActionEvent event) {
+ Platform.exit();
+ }
+
+ public void handleMin(ActionEvent event) {
+ getStage().setIconified(true);
+ }
+
+ public void handleMax(ActionEvent event) {
+ Stage stage = getStage();
+ final double stageY = stage.getY();
+ final Screen screen = Screen.getScreensForRectangle(stage.getX(), stageY, 1, 1).get(0);
+ Rectangle2D bounds = screen.getVisualBounds();
+ if (bounds.getMinX() == stage.getX() && bounds.getMinY() == stageY && bounds.getWidth() == stage.getWidth()
+ && bounds.getHeight() == stage.getHeight()) {
+ if (backupWindowBounds != null) {
+ stage.setX(backupWindowBounds.getMinX());
+ stage.setY(backupWindowBounds.getMinY());
+ stage.setWidth(backupWindowBounds.getWidth());
+ stage.setHeight(backupWindowBounds.getHeight());
+ }
+ } else {
+ backupWindowBounds = new Rectangle2D(stage.getX(), stage.getY(), stage.getWidth(), stage.getHeight());
+ final double newStageY = screen.getVisualBounds().getMinY();
+ stage.setX(screen.getVisualBounds().getMinX());
+ stage.setY(newStageY);
+ stage.setWidth(screen.getVisualBounds().getWidth());
+ stage.setHeight(screen.getVisualBounds().getHeight());
+ }
+ }
+
+ Stage getStage() {
+ return (Stage) decorationArea.getScene().getWindow();
+ }
+}
diff --git a/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/handlers/AddContactHandler.java b/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/handlers/AddContactHandler.java
index 1476a8d62..55110636d 100755
--- a/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/handlers/AddContactHandler.java
+++ b/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/handlers/AddContactHandler.java
@@ -1,40 +1,40 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2010 Siemens AG 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:
- * Kai T��dter - initial implementation
- ******************************************************************************/
-
-package org.eclipse.fx.demo.contacts.handlers;
-
-import javax.inject.Inject;
-
-import org.eclipse.e4.core.di.annotations.Execute;
-import org.eclipse.emf.common.command.Command;
-import org.eclipse.emf.edit.command.AddCommand;
-import org.eclipse.fx.demo.contacts.Contact;
-import org.eclipse.fx.demo.contacts.ContactsFactory;
-import org.eclipse.fx.demo.contacts.ContactsPackage;
-import org.eclipse.fx.demo.contacts.model.ContactsManager;
-
-
-@SuppressWarnings("restriction")
-public class AddContactHandler {
-
- @Inject
- ContactsManager contactsManager;
-
- @Execute
- void execute() {
- Contact contact = ContactsFactory.eINSTANCE.createContact();
- Command command = AddCommand.create(contactsManager.getEditingDomain(), contactsManager.getRootGroup(), ContactsPackage.Literals.GROUP__CONTACTS, contact);
- if (command != null && command.canExecute())
- contactsManager.getEditingDomain().getCommandStack().execute(command);
- }
-
-}
+/*******************************************************************************
+ * Copyright (c) 2009, 2010 Siemens AG 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:
+ * Kai T��dter - initial implementation
+ ******************************************************************************/
+
+package org.eclipse.fx.demo.contacts.handlers;
+
+import javax.inject.Inject;
+
+import org.eclipse.e4.core.di.annotations.Execute;
+import org.eclipse.emf.common.command.Command;
+import org.eclipse.emf.edit.command.AddCommand;
+import org.eclipse.fx.demo.contacts.Contact;
+import org.eclipse.fx.demo.contacts.ContactsFactory;
+import org.eclipse.fx.demo.contacts.ContactsPackage;
+import org.eclipse.fx.demo.contacts.model.ContactsManager;
+
+
+@SuppressWarnings("restriction")
+public class AddContactHandler {
+
+ @Inject
+ ContactsManager contactsManager;
+
+ @Execute
+ void execute() {
+ Contact contact = ContactsFactory.eINSTANCE.createContact();
+ Command command = AddCommand.create(contactsManager.getEditingDomain(), contactsManager.getRootGroup(), ContactsPackage.Literals.GROUP__CONTACTS, contact);
+ if (command != null && command.canExecute())
+ contactsManager.getEditingDomain().getCommandStack().execute(command);
+ }
+
+}
diff --git a/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/handlers/AddGroupHandler.java b/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/handlers/AddGroupHandler.java
index 7c4cacfbb..5022199bd 100755
--- a/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/handlers/AddGroupHandler.java
+++ b/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/handlers/AddGroupHandler.java
@@ -1,41 +1,41 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2010 Siemens AG 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:
- * Kai T��dter - initial implementation
- ******************************************************************************/
-
-package org.eclipse.fx.demo.contacts.handlers;
-
-import javax.inject.Inject;
-
-import org.eclipse.e4.core.di.annotations.Execute;
-import org.eclipse.emf.common.command.Command;
-import org.eclipse.emf.edit.command.AddCommand;
-import org.eclipse.fx.demo.contacts.ContactsFactory;
-import org.eclipse.fx.demo.contacts.ContactsPackage;
-import org.eclipse.fx.demo.contacts.Group;
-import org.eclipse.fx.demo.contacts.model.ContactsManager;
-
-
-@SuppressWarnings("restriction")
-public class AddGroupHandler {
-
- @Inject
- ContactsManager contactsManager;
-
- @Execute
- void execute() {
- Group group = ContactsFactory.eINSTANCE.createGroup();
- group.setName("New Group");
- Command command = AddCommand.create(contactsManager.getEditingDomain(), contactsManager.getRootGroup(), ContactsPackage.Literals.GROUP__GROUPS, group);
- if (command != null && command.canExecute())
- contactsManager.getEditingDomain().getCommandStack().execute(command);
- }
-
-}
+/*******************************************************************************
+ * Copyright (c) 2009, 2010 Siemens AG 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:
+ * Kai T��dter - initial implementation
+ ******************************************************************************/
+
+package org.eclipse.fx.demo.contacts.handlers;
+
+import javax.inject.Inject;
+
+import org.eclipse.e4.core.di.annotations.Execute;
+import org.eclipse.emf.common.command.Command;
+import org.eclipse.emf.edit.command.AddCommand;
+import org.eclipse.fx.demo.contacts.ContactsFactory;
+import org.eclipse.fx.demo.contacts.ContactsPackage;
+import org.eclipse.fx.demo.contacts.Group;
+import org.eclipse.fx.demo.contacts.model.ContactsManager;
+
+
+@SuppressWarnings("restriction")
+public class AddGroupHandler {
+
+ @Inject
+ ContactsManager contactsManager;
+
+ @Execute
+ void execute() {
+ Group group = ContactsFactory.eINSTANCE.createGroup();
+ group.setName("New Group");
+ Command command = AddCommand.create(contactsManager.getEditingDomain(), contactsManager.getRootGroup(), ContactsPackage.Literals.GROUP__GROUPS, group);
+ if (command != null && command.canExecute())
+ contactsManager.getEditingDomain().getCommandStack().execute(command);
+ }
+
+}
diff --git a/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/model/ContactsManagerImpl.java b/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/model/ContactsManagerImpl.java
index 425e9be6b..0bb830876 100755
--- a/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/model/ContactsManagerImpl.java
+++ b/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/model/ContactsManagerImpl.java
@@ -1,55 +1,55 @@
-/*******************************************************************************
- * Copyright (c) 2012 TESIS DYNAware GmbH 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:
- * Torsten Sommer <torsten.sommer@tesis.de> - initial API and implementation
- ******************************************************************************/
-package org.eclipse.fx.demo.contacts.model;
-
-
-import org.eclipse.emf.common.command.BasicCommandStack;
-import org.eclipse.emf.common.notify.AdapterFactory;
-import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
-import org.eclipse.emf.edit.domain.EditingDomain;
-import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
-import org.eclipse.emf.edit.provider.ReflectiveItemProviderAdapterFactory;
-import org.eclipse.emf.edit.provider.resource.ResourceItemProviderAdapterFactory;
-import org.eclipse.fx.demo.contacts.Group;
-import org.eclipse.fx.demo.contacts.provider.ContactsItemProviderAdapterFactory;
-
-public class ContactsManagerImpl implements ContactsManager {
-
- protected EditingDomain editingDomain;
- protected VCardContactsResource contactsResource;
- protected ComposedAdapterFactory adapterFactory;
-
- public ContactsManagerImpl() {
- adapterFactory = new ComposedAdapterFactory(ComposedAdapterFactory.Descriptor.Registry.INSTANCE);
- adapterFactory.addAdapterFactory(new ResourceItemProviderAdapterFactory());
- adapterFactory.addAdapterFactory(new ContactsItemProviderAdapterFactory());
- adapterFactory.addAdapterFactory(new ReflectiveItemProviderAdapterFactory());
-
- contactsResource = new VCardContactsResource();
- BasicCommandStack commandStack = new BasicCommandStack();
- editingDomain = new AdapterFactoryEditingDomain(adapterFactory, commandStack);
- editingDomain.getResourceSet().getResources().add(contactsResource);
- }
-
- public AdapterFactory getAdapterFactory() {
- return adapterFactory;
- }
-
- public EditingDomain getEditingDomain() {
- return editingDomain;
- }
-
- @Override
- public Group getRootGroup() {
- return (Group) contactsResource.getContents().get(0);
- }
-
-}
+/*******************************************************************************
+ * Copyright (c) 2012 TESIS DYNAware GmbH 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:
+ * Torsten Sommer <torsten.sommer@tesis.de> - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.fx.demo.contacts.model;
+
+
+import org.eclipse.emf.common.command.BasicCommandStack;
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.provider.ReflectiveItemProviderAdapterFactory;
+import org.eclipse.emf.edit.provider.resource.ResourceItemProviderAdapterFactory;
+import org.eclipse.fx.demo.contacts.Group;
+import org.eclipse.fx.demo.contacts.provider.ContactsItemProviderAdapterFactory;
+
+public class ContactsManagerImpl implements ContactsManager {
+
+ protected EditingDomain editingDomain;
+ protected VCardContactsResource contactsResource;
+ protected ComposedAdapterFactory adapterFactory;
+
+ public ContactsManagerImpl() {
+ adapterFactory = new ComposedAdapterFactory(ComposedAdapterFactory.Descriptor.Registry.INSTANCE);
+ adapterFactory.addAdapterFactory(new ResourceItemProviderAdapterFactory());
+ adapterFactory.addAdapterFactory(new ContactsItemProviderAdapterFactory());
+ adapterFactory.addAdapterFactory(new ReflectiveItemProviderAdapterFactory());
+
+ contactsResource = new VCardContactsResource();
+ BasicCommandStack commandStack = new BasicCommandStack();
+ editingDomain = new AdapterFactoryEditingDomain(adapterFactory, commandStack);
+ editingDomain.getResourceSet().getResources().add(contactsResource);
+ }
+
+ public AdapterFactory getAdapterFactory() {
+ return adapterFactory;
+ }
+
+ public EditingDomain getEditingDomain() {
+ return editingDomain;
+ }
+
+ @Override
+ public Group getRootGroup() {
+ return (Group) contactsResource.getContents().get(0);
+ }
+
+}
diff --git a/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/model/VCardContactsResource.java b/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/model/VCardContactsResource.java
index 2f729f693..d447d0105 100755
--- a/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/model/VCardContactsResource.java
+++ b/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/model/VCardContactsResource.java
@@ -1,263 +1,263 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2010 Siemens AG 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:
- * Kai T????dter - initial implementation
- ******************************************************************************/
-
-package org.eclipse.fx.demo.contacts.model;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.FilenameFilter;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.util.Enumeration;
-
-import org.eclipse.core.runtime.FileLocator;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.emf.common.util.URI;
-import org.eclipse.emf.ecore.resource.impl.ResourceImpl;
-import org.eclipse.fx.demo.contacts.BundleActivatorImpl;
-import org.eclipse.fx.demo.contacts.Contact;
-import org.eclipse.fx.demo.contacts.ContactsFactory;
-import org.eclipse.fx.demo.contacts.Group;
-import org.osgi.framework.Bundle;
-
-
-public class VCardContactsResource extends ResourceImpl {
-
- public VCardContactsResource() {
- super(URI.createPlatformResourceURI("org.eclipse.fx.demo.contacts/vcards", false));
-
- try {
- Group rootGroup = ContactsFactory.eINSTANCE.createGroup();
- for (File file : getContacts()) {
- Contact contact = readFromVCard(file.getAbsolutePath());
- rootGroup.getContacts().add(contact);
- }
- getContents().add(rootGroup);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
-
- private File[] getContacts() throws Exception {
- File[] localContacts = getLocalContacts();
- if (localContacts.length == 0) {
- IPath path = BundleActivatorImpl.getInstance().getStateLocation();
- byte[] buffer = new byte[8192];
- Bundle bundle = Platform.getBundle("org.eclipse.fx.demo.contacts.app"); //$NON-NLS-1$
-
- for (Enumeration<?> contacts = getStoredContacts(); contacts.hasMoreElements();) {
- String bundlePath = (String) contacts.nextElement();
- if (!bundlePath.endsWith(".vcf")) { //$NON-NLS-1$
- continue;
- }
-
- InputStream inputStream = FileLocator.openStream(bundle, new Path(bundlePath), false);
- FileOutputStream outputStream = new FileOutputStream(path.append(
- bundlePath.substring(bundlePath.indexOf('/') + 1)).toFile());
-
- int read = inputStream.read(buffer);
- while (read != -1) {
- outputStream.write(buffer, 0, read);
- read = inputStream.read(buffer);
- }
-
- inputStream.close();
- outputStream.close();
- }
-
- return getLocalContacts();
- }
- return localContacts;
- }
-
- private File[] getLocalContacts() {
- IPath path = BundleActivatorImpl.getInstance().getStateLocation();
- File directory = path.toFile();
- return directory.listFiles(new FilenameFilter() {
- public boolean accept(File dir, String name) {
- return name.endsWith(".vcf"); //$NON-NLS-1$
- }
- });
- }
-
- private Enumeration<?> getStoredContacts() throws Exception {
- Bundle bundle = Platform.getBundle("org.eclipse.fx.demo.contacts.app"); //$NON-NLS-1$
- return bundle.getEntryPaths("vcards"); //$NON-NLS-1$
- }
-
- /**
- * Reads a Contact from a VCard. This method cannot parse a generic VCard,
- * but can only parse VCards created with Microsoft Outlook. The intention
- * is not to provide a generic VCard reader but an easy way to get contact
- * data (including pictures) in the repository.
- *
- * @param fileName
- * the vcard file
- * @return the created Contact
- */
- public Contact readFromVCard(String fileName) {
- Contact contact = ContactsFactory.eINSTANCE.createContact();
- contact.setSourceFile(fileName);
- BufferedReader bufferedReader = null;
- String charSet = "Cp1252";
-
- /*
- * first try to guess the char set (currently not working under some
- * JVMs
- */
-
- /*
- * try { bufferedReader = new BufferedReader(new InputStreamReader( new
- * FileInputStream(fileName))); String line; while ((line =
- * bufferedReader.readLine()) != null) { int index =
- * line.indexOf("CHARSET="); if (index != -1) { int endIndex = index +
- * 8; while (line.charAt(endIndex) != ':' && line.charAt(endIndex) !=
- * ';') { endIndex += 1; } charSet = line.substring(index + 8,
- * endIndex); break; } } } catch (FileNotFoundException e) { // TODO
- * Auto-generated catch block e.printStackTrace();
- *
- * } catch (IOException e) { // TODO Auto-generated catch block
- * e.printStackTrace(); } finally { try { if (bufferedReader != null) {
- * bufferedReader.close(); } } catch (IOException e) { // TODO
- * Auto-generated catch block e.printStackTrace(); } }
- */
-
- // Then parse the vCard
- try {
- InputStreamReader inputStreamReader = new InputStreamReader(new FileInputStream(fileName), charSet);
- bufferedReader = new BufferedReader(inputStreamReader);
- String line;
- String value;
- while ((line = bufferedReader.readLine()) != null) {
- value = getVCardValue(line, "N");
- if (value != null) {
- String[] result = value.split(";");
-
- if (result.length > 0) {
- contact.setLastName(result[0]);
- }
- if (result.length > 1) {
- contact.setFirstName(result[1]);
- }
- if (result.length > 2) {
- contact.setMiddleName(result[2]);
- }
- if (result.length > 3) {
- contact.setTitle(result[3]);
- }
- continue;
- }
- value = getVCardValue(line, "TEL;WORK");
- if (value != null) {
- contact.setPhone(value);
- continue;
- }
- value = getVCardValue(line, "TEL;CELL");
- if (value != null) {
- contact.setMobile(value);
- continue;
- }
- value = getVCardValue(line, "ADR;WORK");
- if (value != null) {
- String[] result = value.split(";");
-
- if (result.length > 2) {
- contact.setStreet(result[2]);
- }
- if (result.length > 3) {
- contact.setCity(result[3]);
- }
- if (result.length > 4) {
- contact.setState(result[4]);
- }
- if (result.length > 5) {
- contact.setZip(result[5]);
- }
- if (result.length > 6) {
- contact.setCountry(result[6]);
- }
- continue;
- }
- value = getVCardValue(line, "EMAIL;PREF;INTERNET");
- if (value != null) {
- contact.setEmail(value);
- continue;
- }
- value = getVCardValue(line, "URL;WORK");
- if (value != null) {
- contact.setWebPage(value);
- continue;
- }
- value = getVCardValue(line, "ORG");
- if (value != null) {
- contact.setCompany(value);
- continue;
- }
- value = getVCardValue(line, "TITLE");
- if (value != null) {
- contact.setJobTitle(value);
- continue;
- }
- value = getVCardValue(line, "NOTE");
- if (value != null) {
- contact.setNote(value);
- continue;
- }
- value = getVCardValue(line, "PHOTO;TYPE=JPEG;ENCODING=BASE64");
- if (value != null) {
- line = bufferedReader.readLine();
- StringBuilder builder = new StringBuilder();
- while (line != null && line.length() > 0 && line.charAt(0) == ' ') {
- builder.append(line.trim());
- line = bufferedReader.readLine();
- }
- String jpegString = builder.toString();
-
- contact.setJpegString(jpegString);
- continue;
- }
- }
- } catch (FileNotFoundException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
-
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } finally {
- try {
- if (bufferedReader != null) {
- bufferedReader.close();
- }
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- return contact;
- }
-
- private String getVCardValue(String line, String token) {
- if (line.startsWith(token + ":") || line.startsWith(token + ";")) {
- String value = line.substring(line.indexOf(":") + 1);
- return value;
- }
- return null;
- }
-
-}
+/*******************************************************************************
+ * Copyright (c) 2009, 2010 Siemens AG 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:
+ * Kai T????dter - initial implementation
+ ******************************************************************************/
+
+package org.eclipse.fx.demo.contacts.model;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.FilenameFilter;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.Enumeration;
+
+import org.eclipse.core.runtime.FileLocator;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.resource.impl.ResourceImpl;
+import org.eclipse.fx.demo.contacts.BundleActivatorImpl;
+import org.eclipse.fx.demo.contacts.Contact;
+import org.eclipse.fx.demo.contacts.ContactsFactory;
+import org.eclipse.fx.demo.contacts.Group;
+import org.osgi.framework.Bundle;
+
+
+public class VCardContactsResource extends ResourceImpl {
+
+ public VCardContactsResource() {
+ super(URI.createPlatformResourceURI("org.eclipse.fx.demo.contacts/vcards", false));
+
+ try {
+ Group rootGroup = ContactsFactory.eINSTANCE.createGroup();
+ for (File file : getContacts()) {
+ Contact contact = readFromVCard(file.getAbsolutePath());
+ rootGroup.getContacts().add(contact);
+ }
+ getContents().add(rootGroup);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ private File[] getContacts() throws Exception {
+ File[] localContacts = getLocalContacts();
+ if (localContacts.length == 0) {
+ IPath path = BundleActivatorImpl.getInstance().getStateLocation();
+ byte[] buffer = new byte[8192];
+ Bundle bundle = Platform.getBundle("org.eclipse.fx.demo.contacts.app"); //$NON-NLS-1$
+
+ for (Enumeration<?> contacts = getStoredContacts(); contacts.hasMoreElements();) {
+ String bundlePath = (String) contacts.nextElement();
+ if (!bundlePath.endsWith(".vcf")) { //$NON-NLS-1$
+ continue;
+ }
+
+ InputStream inputStream = FileLocator.openStream(bundle, new Path(bundlePath), false);
+ FileOutputStream outputStream = new FileOutputStream(path.append(
+ bundlePath.substring(bundlePath.indexOf('/') + 1)).toFile());
+
+ int read = inputStream.read(buffer);
+ while (read != -1) {
+ outputStream.write(buffer, 0, read);
+ read = inputStream.read(buffer);
+ }
+
+ inputStream.close();
+ outputStream.close();
+ }
+
+ return getLocalContacts();
+ }
+ return localContacts;
+ }
+
+ private File[] getLocalContacts() {
+ IPath path = BundleActivatorImpl.getInstance().getStateLocation();
+ File directory = path.toFile();
+ return directory.listFiles(new FilenameFilter() {
+ public boolean accept(File dir, String name) {
+ return name.endsWith(".vcf"); //$NON-NLS-1$
+ }
+ });
+ }
+
+ private Enumeration<?> getStoredContacts() throws Exception {
+ Bundle bundle = Platform.getBundle("org.eclipse.fx.demo.contacts.app"); //$NON-NLS-1$
+ return bundle.getEntryPaths("vcards"); //$NON-NLS-1$
+ }
+
+ /**
+ * Reads a Contact from a VCard. This method cannot parse a generic VCard,
+ * but can only parse VCards created with Microsoft Outlook. The intention
+ * is not to provide a generic VCard reader but an easy way to get contact
+ * data (including pictures) in the repository.
+ *
+ * @param fileName
+ * the vcard file
+ * @return the created Contact
+ */
+ public Contact readFromVCard(String fileName) {
+ Contact contact = ContactsFactory.eINSTANCE.createContact();
+ contact.setSourceFile(fileName);
+ BufferedReader bufferedReader = null;
+ String charSet = "Cp1252";
+
+ /*
+ * first try to guess the char set (currently not working under some
+ * JVMs
+ */
+
+ /*
+ * try { bufferedReader = new BufferedReader(new InputStreamReader( new
+ * FileInputStream(fileName))); String line; while ((line =
+ * bufferedReader.readLine()) != null) { int index =
+ * line.indexOf("CHARSET="); if (index != -1) { int endIndex = index +
+ * 8; while (line.charAt(endIndex) != ':' && line.charAt(endIndex) !=
+ * ';') { endIndex += 1; } charSet = line.substring(index + 8,
+ * endIndex); break; } } } catch (FileNotFoundException e) { // TODO
+ * Auto-generated catch block e.printStackTrace();
+ *
+ * } catch (IOException e) { // TODO Auto-generated catch block
+ * e.printStackTrace(); } finally { try { if (bufferedReader != null) {
+ * bufferedReader.close(); } } catch (IOException e) { // TODO
+ * Auto-generated catch block e.printStackTrace(); } }
+ */
+
+ // Then parse the vCard
+ try {
+ InputStreamReader inputStreamReader = new InputStreamReader(new FileInputStream(fileName), charSet);
+ bufferedReader = new BufferedReader(inputStreamReader);
+ String line;
+ String value;
+ while ((line = bufferedReader.readLine()) != null) {
+ value = getVCardValue(line, "N");
+ if (value != null) {
+ String[] result = value.split(";");
+
+ if (result.length > 0) {
+ contact.setLastName(result[0]);
+ }
+ if (result.length > 1) {
+ contact.setFirstName(result[1]);
+ }
+ if (result.length > 2) {
+ contact.setMiddleName(result[2]);
+ }
+ if (result.length > 3) {
+ contact.setTitle(result[3]);
+ }
+ continue;
+ }
+ value = getVCardValue(line, "TEL;WORK");
+ if (value != null) {
+ contact.setPhone(value);
+ continue;
+ }
+ value = getVCardValue(line, "TEL;CELL");
+ if (value != null) {
+ contact.setMobile(value);
+ continue;
+ }
+ value = getVCardValue(line, "ADR;WORK");
+ if (value != null) {
+ String[] result = value.split(";");
+
+ if (result.length > 2) {
+ contact.setStreet(result[2]);
+ }
+ if (result.length > 3) {
+ contact.setCity(result[3]);
+ }
+ if (result.length > 4) {
+ contact.setState(result[4]);
+ }
+ if (result.length > 5) {
+ contact.setZip(result[5]);
+ }
+ if (result.length > 6) {
+ contact.setCountry(result[6]);
+ }
+ continue;
+ }
+ value = getVCardValue(line, "EMAIL;PREF;INTERNET");
+ if (value != null) {
+ contact.setEmail(value);
+ continue;
+ }
+ value = getVCardValue(line, "URL;WORK");
+ if (value != null) {
+ contact.setWebPage(value);
+ continue;
+ }
+ value = getVCardValue(line, "ORG");
+ if (value != null) {
+ contact.setCompany(value);
+ continue;
+ }
+ value = getVCardValue(line, "TITLE");
+ if (value != null) {
+ contact.setJobTitle(value);
+ continue;
+ }
+ value = getVCardValue(line, "NOTE");
+ if (value != null) {
+ contact.setNote(value);
+ continue;
+ }
+ value = getVCardValue(line, "PHOTO;TYPE=JPEG;ENCODING=BASE64");
+ if (value != null) {
+ line = bufferedReader.readLine();
+ StringBuilder builder = new StringBuilder();
+ while (line != null && line.length() > 0 && line.charAt(0) == ' ') {
+ builder.append(line.trim());
+ line = bufferedReader.readLine();
+ }
+ String jpegString = builder.toString();
+
+ contact.setJpegString(jpegString);
+ continue;
+ }
+ }
+ } catch (FileNotFoundException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } finally {
+ try {
+ if (bufferedReader != null) {
+ bufferedReader.close();
+ }
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+ return contact;
+ }
+
+ private String getVCardValue(String line, String token) {
+ if (line.startsWith(token + ":") || line.startsWith(token + ";")) {
+ String value = line.substring(line.indexOf(":") + 1);
+ return value;
+ }
+ return null;
+ }
+
+}
diff --git a/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/views/ContactsListView.java b/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/views/ContactsListView.java
index 491661da0..000b8de9d 100755
--- a/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/views/ContactsListView.java
+++ b/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/views/ContactsListView.java
@@ -1,86 +1,86 @@
-/*******************************************************************************
- * Copyright (c) 2012 TESIS DYNAware GmbH 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:
- * Torsten Sommer <torsten.sommer@tesis.de> - initial API and implementation
- *******************************************************************************/
-package org.eclipse.fx.demo.contacts.views;
-
-import java.util.List;
-
-import javafx.beans.value.ChangeListener;
-import javafx.beans.value.ObservableValue;
-import javafx.collections.ListChangeListener;
-import javafx.scene.control.ListView;
-import javafx.scene.control.SelectionMode;
-import javafx.scene.layout.BorderPane;
-
-import javax.inject.Inject;
-
-import org.eclipse.e4.ui.model.application.MApplication;
-import org.eclipse.emf.common.notify.AdapterFactory;
-import org.eclipse.emf.edit.domain.EditingDomain;
-import org.eclipse.fx.demo.contacts.ContactsPackage;
-import org.eclipse.fx.demo.contacts.model.ContactsManager;
-import org.eclipse.fx.emf.edit.ui.AdapterFactoryListCellFactory;
-import org.eclipse.fx.emf.edit.ui.AdapterFactoryObservableList;
-import org.eclipse.fx.emf.edit.ui.EAttributeCellEditHandler;
-import org.eclipse.fx.emf.edit.ui.dnd.CellDragAdapter;
-import org.eclipse.fx.emf.edit.ui.dnd.EditingDomainCellDropAdapter;
-
-
-@SuppressWarnings("restriction")
-public class ContactsListView {
-
- @Inject
- public ContactsListView(BorderPane parent, final MApplication application, final ContactsManager contactsManager) {
- EditingDomain editingDomain = contactsManager.getEditingDomain();
- AdapterFactory adapterFactory = contactsManager.getAdapterFactory();
-
- ListView<Object> listView = new ListView<>();
-
- parent.setCenter(listView);
-
- listView.setItems(new AdapterFactoryObservableList<Object>(adapterFactory, contactsManager.getRootGroup()));
- listView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
-
- AdapterFactoryListCellFactory listCellFactory = new AdapterFactoryListCellFactory(adapterFactory);
- listCellFactory.addCellCreationListener(new CellDragAdapter());
- EditingDomainCellDropAdapter dropAdapter = new EditingDomainCellDropAdapter(editingDomain);
- dropAdapter.setFeedbackHandler(new CustomFeedbackHandler());
- listCellFactory.addCellCreationListener(dropAdapter);
- listView.setCellFactory(listCellFactory);
-
- // add edit support
- listView.setEditable(true);
- listCellFactory.addCellEditHandler(new EAttributeCellEditHandler(ContactsPackage.eINSTANCE.getGroup_Name(), editingDomain));
-
- // add the context menu
- ContextMenuProvider contextMenuProvider = new ContextMenuProvider(contactsManager);
- listCellFactory.addCellUpdateListener(contextMenuProvider);
-
- listView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
-
- listView.getSelectionModel().getSelectedItems().addListener(new ListChangeListener<Object>() {
-
- @Override
- public void onChanged(Change<?> change) {
- application.getContext().set(List.class, change.getList());
- }
-
- });
-
- listView.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<Object>() {
-
- public void changed(ObservableValue<? extends Object> arg0, Object arg1, Object arg2) {
- application.getContext().set(Object.class, arg2);
- }
-
- });
- }
-
-}
+/*******************************************************************************
+ * Copyright (c) 2012 TESIS DYNAware GmbH 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:
+ * Torsten Sommer <torsten.sommer@tesis.de> - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.fx.demo.contacts.views;
+
+import java.util.List;
+
+import javafx.beans.value.ChangeListener;
+import javafx.beans.value.ObservableValue;
+import javafx.collections.ListChangeListener;
+import javafx.scene.control.ListView;
+import javafx.scene.control.SelectionMode;
+import javafx.scene.layout.BorderPane;
+
+import javax.inject.Inject;
+
+import org.eclipse.e4.ui.model.application.MApplication;
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.fx.demo.contacts.ContactsPackage;
+import org.eclipse.fx.demo.contacts.model.ContactsManager;
+import org.eclipse.fx.emf.edit.ui.AdapterFactoryListCellFactory;
+import org.eclipse.fx.emf.edit.ui.AdapterFactoryObservableList;
+import org.eclipse.fx.emf.edit.ui.EAttributeCellEditHandler;
+import org.eclipse.fx.emf.edit.ui.dnd.CellDragAdapter;
+import org.eclipse.fx.emf.edit.ui.dnd.EditingDomainCellDropAdapter;
+
+
+@SuppressWarnings("restriction")
+public class ContactsListView {
+
+ @Inject
+ public ContactsListView(BorderPane parent, final MApplication application, final ContactsManager contactsManager) {
+ EditingDomain editingDomain = contactsManager.getEditingDomain();
+ AdapterFactory adapterFactory = contactsManager.getAdapterFactory();
+
+ ListView<Object> listView = new ListView<>();
+
+ parent.setCenter(listView);
+
+ listView.setItems(new AdapterFactoryObservableList<Object>(adapterFactory, contactsManager.getRootGroup()));
+ listView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
+
+ AdapterFactoryListCellFactory listCellFactory = new AdapterFactoryListCellFactory(adapterFactory);
+ listCellFactory.addCellCreationListener(new CellDragAdapter());
+ EditingDomainCellDropAdapter dropAdapter = new EditingDomainCellDropAdapter(editingDomain);
+ dropAdapter.setFeedbackHandler(new CustomFeedbackHandler());
+ listCellFactory.addCellCreationListener(dropAdapter);
+ listView.setCellFactory(listCellFactory);
+
+ // add edit support
+ listView.setEditable(true);
+ listCellFactory.addCellEditHandler(new EAttributeCellEditHandler(ContactsPackage.eINSTANCE.getGroup_Name(), editingDomain));
+
+ // add the context menu
+ ContextMenuProvider contextMenuProvider = new ContextMenuProvider(contactsManager);
+ listCellFactory.addCellUpdateListener(contextMenuProvider);
+
+ listView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
+
+ listView.getSelectionModel().getSelectedItems().addListener(new ListChangeListener<Object>() {
+
+ @Override
+ public void onChanged(Change<?> change) {
+ application.getContext().set(List.class, change.getList());
+ }
+
+ });
+
+ listView.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<Object>() {
+
+ public void changed(ObservableValue<? extends Object> arg0, Object arg1, Object arg2) {
+ application.getContext().set(Object.class, arg2);
+ }
+
+ });
+ }
+
+}
diff --git a/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/views/ContactsTableView.java b/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/views/ContactsTableView.java
index 6574cec49..a74556823 100755
--- a/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/views/ContactsTableView.java
+++ b/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/views/ContactsTableView.java
@@ -1,104 +1,104 @@
-/*******************************************************************************
- * Copyright (c) 2012 TESIS DYNAware GmbH 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:
- * Torsten Sommer <torsten.sommer@tesis.de> - initial API and implementation
- *******************************************************************************/
-package org.eclipse.fx.demo.contacts.views;
-
-import java.util.List;
-
-import javafx.beans.value.ChangeListener;
-import javafx.beans.value.ObservableValue;
-import javafx.collections.ListChangeListener;
-import javafx.scene.control.SelectionMode;
-import javafx.scene.control.TableColumn;
-import javafx.scene.control.TableView;
-import javafx.scene.layout.BorderPane;
-
-import javax.inject.Inject;
-
-import org.eclipse.e4.ui.model.application.MApplication;
-import org.eclipse.emf.common.notify.AdapterFactory;
-import org.eclipse.emf.edit.domain.EditingDomain;
-import org.eclipse.fx.demo.contacts.ContactsPackage;
-import org.eclipse.fx.demo.contacts.model.ContactsManager;
-import org.eclipse.fx.emf.edit.ui.AdapterFactoryObservableList;
-import org.eclipse.fx.emf.edit.ui.AdapterFactoryTableCellFactory;
-import org.eclipse.fx.emf.edit.ui.EAttributeCellEditHandler;
-import org.eclipse.fx.emf.edit.ui.ProxyCellValueFactory;
-import org.eclipse.fx.emf.edit.ui.dnd.CellDragAdapter;
-import org.eclipse.fx.emf.edit.ui.dnd.EditingDomainCellDropAdapter;
-
-
-@SuppressWarnings("restriction")
-public class ContactsTableView {
-
- @Inject
- public ContactsTableView(BorderPane parent, final MApplication application, final ContactsManager contactsManager) {
- EditingDomain editingDomain = contactsManager.getEditingDomain();
- AdapterFactory adapterFactory = contactsManager.getAdapterFactory();
-
- TableView<Object> tableView = new TableView<>();
-
- parent.setCenter(tableView);
-
- TableColumn<Object, Object> firstNameColumn = new TableColumn<>("First Name");
- TableColumn<Object, Object> lastNameColumn = new TableColumn<>("Last Name");
-
- tableView.getColumns().addAll(firstNameColumn, lastNameColumn);
-
- firstNameColumn.setCellValueFactory(new ProxyCellValueFactory<Object, Object>());
- AdapterFactoryTableCellFactory<Object, Object> firstNameCellFactory = new AdapterFactoryTableCellFactory<>(adapterFactory, 0);
- firstNameCellFactory.addCellCreationListener(new CellDragAdapter());
- firstNameCellFactory.addCellCreationListener(new EditingDomainCellDropAdapter(editingDomain));
- firstNameColumn.setCellFactory(firstNameCellFactory);
- firstNameColumn.setSortable(false);
-
- lastNameColumn.setCellValueFactory(new ProxyCellValueFactory<Object, Object>());
- AdapterFactoryTableCellFactory<Object, Object> lastNameCellFactory = new AdapterFactoryTableCellFactory<Object, Object>(
- adapterFactory, 1);
- lastNameCellFactory.addCellCreationListener(new CellDragAdapter());
- lastNameCellFactory.addCellCreationListener(new EditingDomainCellDropAdapter(editingDomain));
- lastNameColumn.setCellFactory(lastNameCellFactory);
- lastNameColumn.setSortable(false);
-
- tableView.setItems(new AdapterFactoryObservableList<Object>(adapterFactory, contactsManager.getRootGroup()));
- tableView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
-
- // add edit support
- tableView.setEditable(true);
- firstNameCellFactory.addCellEditHandler(new EAttributeCellEditHandler(ContactsPackage.eINSTANCE.getContact_FirstName(),
- editingDomain));
- lastNameCellFactory
- .addCellEditHandler(new EAttributeCellEditHandler(ContactsPackage.eINSTANCE.getContact_LastName(), editingDomain));
-
- // add the context menu
- ContextMenuProvider contextMenuProvider = new ContextMenuProvider(contactsManager);
- firstNameCellFactory.addCellUpdateListener(contextMenuProvider);
- lastNameCellFactory.addCellUpdateListener(contextMenuProvider);
-
- tableView.getSelectionModel().getSelectedItems().addListener(new ListChangeListener<Object>() {
-
- @Override
- public void onChanged(Change<?> change) {
- application.getContext().set(List.class, change.getList());
- }
-
- });
-
- tableView.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<Object>() {
-
- public void changed(ObservableValue<? extends Object> arg0, Object arg1, Object arg2) {
- application.getContext().set(Object.class, arg2);
- }
-
- });
-
- }
-
-}
+/*******************************************************************************
+ * Copyright (c) 2012 TESIS DYNAware GmbH 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:
+ * Torsten Sommer <torsten.sommer@tesis.de> - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.fx.demo.contacts.views;
+
+import java.util.List;
+
+import javafx.beans.value.ChangeListener;
+import javafx.beans.value.ObservableValue;
+import javafx.collections.ListChangeListener;
+import javafx.scene.control.SelectionMode;
+import javafx.scene.control.TableColumn;
+import javafx.scene.control.TableView;
+import javafx.scene.layout.BorderPane;
+
+import javax.inject.Inject;
+
+import org.eclipse.e4.ui.model.application.MApplication;
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.fx.demo.contacts.ContactsPackage;
+import org.eclipse.fx.demo.contacts.model.ContactsManager;
+import org.eclipse.fx.emf.edit.ui.AdapterFactoryObservableList;
+import org.eclipse.fx.emf.edit.ui.AdapterFactoryTableCellFactory;
+import org.eclipse.fx.emf.edit.ui.EAttributeCellEditHandler;
+import org.eclipse.fx.emf.edit.ui.ProxyCellValueFactory;
+import org.eclipse.fx.emf.edit.ui.dnd.CellDragAdapter;
+import org.eclipse.fx.emf.edit.ui.dnd.EditingDomainCellDropAdapter;
+
+
+@SuppressWarnings("restriction")
+public class ContactsTableView {
+
+ @Inject
+ public ContactsTableView(BorderPane parent, final MApplication application, final ContactsManager contactsManager) {
+ EditingDomain editingDomain = contactsManager.getEditingDomain();
+ AdapterFactory adapterFactory = contactsManager.getAdapterFactory();
+
+ TableView<Object> tableView = new TableView<>();
+
+ parent.setCenter(tableView);
+
+ TableColumn<Object, Object> firstNameColumn = new TableColumn<>("First Name");
+ TableColumn<Object, Object> lastNameColumn = new TableColumn<>("Last Name");
+
+ tableView.getColumns().addAll(firstNameColumn, lastNameColumn);
+
+ firstNameColumn.setCellValueFactory(new ProxyCellValueFactory<Object, Object>());
+ AdapterFactoryTableCellFactory<Object, Object> firstNameCellFactory = new AdapterFactoryTableCellFactory<>(adapterFactory, 0);
+ firstNameCellFactory.addCellCreationListener(new CellDragAdapter());
+ firstNameCellFactory.addCellCreationListener(new EditingDomainCellDropAdapter(editingDomain));
+ firstNameColumn.setCellFactory(firstNameCellFactory);
+ firstNameColumn.setSortable(false);
+
+ lastNameColumn.setCellValueFactory(new ProxyCellValueFactory<Object, Object>());
+ AdapterFactoryTableCellFactory<Object, Object> lastNameCellFactory = new AdapterFactoryTableCellFactory<Object, Object>(
+ adapterFactory, 1);
+ lastNameCellFactory.addCellCreationListener(new CellDragAdapter());
+ lastNameCellFactory.addCellCreationListener(new EditingDomainCellDropAdapter(editingDomain));
+ lastNameColumn.setCellFactory(lastNameCellFactory);
+ lastNameColumn.setSortable(false);
+
+ tableView.setItems(new AdapterFactoryObservableList<Object>(adapterFactory, contactsManager.getRootGroup()));
+ tableView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
+
+ // add edit support
+ tableView.setEditable(true);
+ firstNameCellFactory.addCellEditHandler(new EAttributeCellEditHandler(ContactsPackage.eINSTANCE.getContact_FirstName(),
+ editingDomain));
+ lastNameCellFactory
+ .addCellEditHandler(new EAttributeCellEditHandler(ContactsPackage.eINSTANCE.getContact_LastName(), editingDomain));
+
+ // add the context menu
+ ContextMenuProvider contextMenuProvider = new ContextMenuProvider(contactsManager);
+ firstNameCellFactory.addCellUpdateListener(contextMenuProvider);
+ lastNameCellFactory.addCellUpdateListener(contextMenuProvider);
+
+ tableView.getSelectionModel().getSelectedItems().addListener(new ListChangeListener<Object>() {
+
+ @Override
+ public void onChanged(Change<?> change) {
+ application.getContext().set(List.class, change.getList());
+ }
+
+ });
+
+ tableView.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<Object>() {
+
+ public void changed(ObservableValue<? extends Object> arg0, Object arg1, Object arg2) {
+ application.getContext().set(Object.class, arg2);
+ }
+
+ });
+
+ }
+
+}
diff --git a/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/views/ContactsTreeTableView.java b/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/views/ContactsTreeTableView.java
new file mode 100644
index 000000000..aa638c295
--- /dev/null
+++ b/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/views/ContactsTreeTableView.java
@@ -0,0 +1,119 @@
+/*******************************************************************************
+ * Copyright (c) 2013 TESIS DYNAware GmbH 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:
+ * Torsten Sommer <torsten.sommer@tesis.de> - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.fx.demo.contacts.views;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javafx.collections.ListChangeListener;
+import javafx.scene.control.SelectionMode;
+import javafx.scene.control.TreeTableColumn;
+import javafx.scene.control.TreeTableView;
+import javafx.scene.layout.BorderPane;
+
+import javax.inject.Inject;
+
+import org.eclipse.e4.ui.model.application.MApplication;
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.fx.demo.contacts.ContactsPackage;
+import org.eclipse.fx.demo.contacts.model.ContactsManager;
+import org.eclipse.fx.emf.edit.ui.AdapterFactoryTreeItem;
+import org.eclipse.fx.emf.edit.ui.AdapterFactoryTreeTableCellFactory;
+import org.eclipse.fx.emf.edit.ui.EAttributeCellEditHandler;
+import org.eclipse.fx.emf.edit.ui.TreeTableProxyCellValueFactory;
+import org.eclipse.fx.emf.edit.ui.dnd.CellDragAdapter;
+import org.eclipse.fx.emf.edit.ui.dnd.EditingDomainCellDropAdapter;
+
+@SuppressWarnings("restriction")
+public class ContactsTreeTableView {
+
+ @Inject
+ @SuppressWarnings("unchecked")
+ public ContactsTreeTableView(BorderPane parent, final MApplication application, final ContactsManager contactsManager) {
+ EditingDomain editingDomain = contactsManager.getEditingDomain();
+ AdapterFactory adapterFactory = contactsManager.getAdapterFactory();
+
+ TreeTableView<Object> treeTableView = new TreeTableView<>();
+
+ parent.setCenter(treeTableView);
+
+ TreeTableColumn<Object, Object> nameColumn = new TreeTableColumn<>("Contact");
+ TreeTableColumn<Object, Object> emailColumn = new TreeTableColumn<>("e-Mail");
+
+ treeTableView.getColumns().addAll(nameColumn, emailColumn);
+
+ CellDragAdapter dragAdapter = new CellDragAdapter();
+ EditingDomainCellDropAdapter dropAdapter = new EditingDomainCellDropAdapter(editingDomain);
+// dropAdapter.setFeedbackHandler(new StyleClassFeedbackHandler());
+
+ AdapterFactoryTreeTableCellFactory<Object, Object> firstNameCellFactory = new AdapterFactoryTreeTableCellFactory<>(adapterFactory, 0);
+ firstNameCellFactory.addCellCreationListener(dragAdapter);
+ firstNameCellFactory.addCellCreationListener(dropAdapter);
+ nameColumn.setCellFactory(firstNameCellFactory);
+ nameColumn.setSortable(false);
+ nameColumn.setCellValueFactory(new TreeTableProxyCellValueFactory());
+
+ AdapterFactoryTreeTableCellFactory<Object, Object> emailCellFactory = new AdapterFactoryTreeTableCellFactory<>(adapterFactory, 1);
+
+ // add drag & drop support
+ emailCellFactory.addCellCreationListener(dragAdapter);
+ emailCellFactory.addCellCreationListener(dropAdapter);
+ emailColumn.setCellFactory(emailCellFactory);
+
+ emailColumn.setSortable(false);
+ emailColumn.setCellValueFactory(new TreeTableProxyCellValueFactory());
+
+ treeTableView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
+ treeTableView.setRoot(new AdapterFactoryTreeItem(contactsManager.getRootGroup(), treeTableView, adapterFactory));
+
+ treeTableView.setShowRoot(false);
+
+ // add edit support
+ treeTableView.setEditable(true);
+ emailCellFactory.addCellEditHandler(new EAttributeCellEditHandler(ContactsPackage.eINSTANCE.getContact_Email(), editingDomain));
+
+ // add the context menu
+ ContextMenuProvider contextMenuProvider = new ContextMenuProvider(contactsManager);
+ firstNameCellFactory.addCellUpdateListener(contextMenuProvider);
+ emailCellFactory.addCellUpdateListener(contextMenuProvider);
+
+// treeTableView.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<Object>() {
+//
+// public void changed(ObservableValue<? extends Object> observable, Object oldValue, Object newValue) {
+// if (newValue instanceof AdapterFactoryTreeItem) {
+// Object value = ((AdapterFactoryTreeItem) newValue).getValue();
+// if (value instanceof Contact)
+// application.getContext().set(Object.class, value);
+// }
+// }
+//
+// });
+
+ treeTableView.getSelectionModel().getSelectedItems().addListener(new ListChangeListener<Object>() {
+
+ @Override
+ public void onChanged(Change<?> change) {
+ ArrayList<Object> selection = new ArrayList<Object>();
+ for (Object item : change.getList()) {
+ if (item instanceof AdapterFactoryTreeItem) {
+ Object value = ((AdapterFactoryTreeItem) item).getValue();
+ selection.add(value);
+ }
+ }
+ application.getContext().set(List.class, selection);
+ }
+
+ });
+
+ }
+
+}
diff --git a/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/views/ContactsTreeView.java b/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/views/ContactsTreeView.java
index e6074166e..6f7db4699 100755
--- a/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/views/ContactsTreeView.java
+++ b/demos/org.eclipse.fx.demo.contacts.app/src/org/eclipse/fx/demo/contacts/views/ContactsTreeView.java
@@ -1,102 +1,102 @@
-/*******************************************************************************
- * Copyright (c) 2012 TESIS DYNAware GmbH 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:
- * Torsten Sommer <torsten.sommer@tesis.de> - initial API and implementation
- *******************************************************************************/
-package org.eclipse.fx.demo.contacts.views;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import javafx.beans.value.ChangeListener;
-import javafx.beans.value.ObservableValue;
-import javafx.collections.ListChangeListener;
-import javafx.scene.control.SelectionMode;
-import javafx.scene.control.TreeView;
-import javafx.scene.layout.BorderPane;
-
-import javax.inject.Inject;
-
-import org.eclipse.e4.ui.model.application.MApplication;
-import org.eclipse.emf.edit.domain.EditingDomain;
-import org.eclipse.fx.demo.contacts.Contact;
-import org.eclipse.fx.demo.contacts.ContactsPackage;
-import org.eclipse.fx.demo.contacts.model.ContactsManager;
-import org.eclipse.fx.emf.edit.ui.AdapterFactoryTreeCellFactory;
-import org.eclipse.fx.emf.edit.ui.AdapterFactoryTreeItem;
-import org.eclipse.fx.emf.edit.ui.EAttributeCellEditHandler;
-import org.eclipse.fx.emf.edit.ui.dnd.CellDragAdapter;
-import org.eclipse.fx.emf.edit.ui.dnd.EditingDomainCellDropAdapter;
-
-
-@SuppressWarnings("restriction")
-public class ContactsTreeView {
-
- @Inject
- public ContactsTreeView(BorderPane parent, final MApplication application, final ContactsManager contactsManager) {
- EditingDomain editingDomain = contactsManager.getEditingDomain();
-
- // TreeView
- TreeView<Object> treeView = new TreeView<>();
- treeView.setRoot(new AdapterFactoryTreeItem(contactsManager.getRootGroup(), treeView, contactsManager.getAdapterFactory()));
- AdapterFactoryTreeCellFactory treeCellFactory = new AdapterFactoryTreeCellFactory(contactsManager.getAdapterFactory());
-
- // add edit support
- treeCellFactory.addCellEditHandler(new EAttributeCellEditHandler(ContactsPackage.eINSTANCE.getGroup_Name(), editingDomain));
-
- // adds drag support
- treeCellFactory.addCellCreationListener(new CellDragAdapter());
-
- // adds drop support
- EditingDomainCellDropAdapter dropAdapter = new EditingDomainCellDropAdapter(editingDomain);
- dropAdapter.setFeedbackHandler(new CustomFeedbackHandler());
- treeCellFactory.addCellCreationListener(dropAdapter);
-
- treeView.setCellFactory(treeCellFactory);
-
- parent.setCenter(treeView);
-
- treeView.setShowRoot(false);
-
- treeView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
-
- treeView.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<Object>() {
-
- public void changed(ObservableValue<? extends Object> arg0, Object arg1, Object arg2) {
- if (arg2 instanceof AdapterFactoryTreeItem) {
- Object value = ((AdapterFactoryTreeItem) arg2).getValue();
- if (value instanceof Contact)
- application.getContext().set(Object.class, value);
- }
- }
-
- });
-
- treeView.getSelectionModel().getSelectedItems().addListener(new ListChangeListener<Object>() {
-
- @Override
- public void onChanged(Change<?> change) {
- ArrayList<Object> selection = new ArrayList<Object>();
- for (Object item : change.getList()) {
- if (item instanceof AdapterFactoryTreeItem) {
- Object value = ((AdapterFactoryTreeItem) item).getValue();
- selection.add(value);
- }
- }
- application.getContext().set(List.class, selection);
- }
-
- });
-
- // add the context menu
- ContextMenuProvider contextMenuProvider = new ContextMenuProvider(contactsManager);
- treeCellFactory.addCellUpdateListener(contextMenuProvider);
-
- treeView.setEditable(true);
- }
-}
+/*******************************************************************************
+ * Copyright (c) 2012 TESIS DYNAware GmbH 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:
+ * Torsten Sommer <torsten.sommer@tesis.de> - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.fx.demo.contacts.views;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javafx.beans.value.ChangeListener;
+import javafx.beans.value.ObservableValue;
+import javafx.collections.ListChangeListener;
+import javafx.scene.control.SelectionMode;
+import javafx.scene.control.TreeView;
+import javafx.scene.layout.BorderPane;
+
+import javax.inject.Inject;
+
+import org.eclipse.e4.ui.model.application.MApplication;
+import org.eclipse.emf.edit.domain.EditingDomain;
+import org.eclipse.fx.demo.contacts.Contact;
+import org.eclipse.fx.demo.contacts.ContactsPackage;
+import org.eclipse.fx.demo.contacts.model.ContactsManager;
+import org.eclipse.fx.emf.edit.ui.AdapterFactoryTreeCellFactory;
+import org.eclipse.fx.emf.edit.ui.AdapterFactoryTreeItem;
+import org.eclipse.fx.emf.edit.ui.EAttributeCellEditHandler;
+import org.eclipse.fx.emf.edit.ui.dnd.CellDragAdapter;
+import org.eclipse.fx.emf.edit.ui.dnd.EditingDomainCellDropAdapter;
+
+
+@SuppressWarnings("restriction")
+public class ContactsTreeView {
+
+ @Inject
+ public ContactsTreeView(BorderPane parent, final MApplication application, final ContactsManager contactsManager) {
+ EditingDomain editingDomain = contactsManager.getEditingDomain();
+
+ // TreeView
+ TreeView<Object> treeView = new TreeView<>();
+ treeView.setRoot(new AdapterFactoryTreeItem(contactsManager.getRootGroup(), treeView, contactsManager.getAdapterFactory()));
+ AdapterFactoryTreeCellFactory treeCellFactory = new AdapterFactoryTreeCellFactory(contactsManager.getAdapterFactory());
+
+ // add edit support
+ treeCellFactory.addCellEditHandler(new EAttributeCellEditHandler(ContactsPackage.eINSTANCE.getGroup_Name(), editingDomain));
+
+ // adds drag support
+ treeCellFactory.addCellCreationListener(new CellDragAdapter());
+
+ // adds drop support
+ EditingDomainCellDropAdapter dropAdapter = new EditingDomainCellDropAdapter(editingDomain);
+ dropAdapter.setFeedbackHandler(new CustomFeedbackHandler());
+ treeCellFactory.addCellCreationListener(dropAdapter);
+
+ treeView.setCellFactory(treeCellFactory);
+
+ parent.setCenter(treeView);
+
+ treeView.setShowRoot(false);
+
+ treeView.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
+
+ treeView.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<Object>() {
+
+ public void changed(ObservableValue<? extends Object> arg0, Object arg1, Object arg2) {
+ if (arg2 instanceof AdapterFactoryTreeItem) {
+ Object value = ((AdapterFactoryTreeItem) arg2).getValue();
+ if (value instanceof Contact)
+ application.getContext().set(Object.class, value);
+ }
+ }
+
+ });
+
+ treeView.getSelectionModel().getSelectedItems().addListener(new ListChangeListener<Object>() {
+
+ @Override
+ public void onChanged(Change<?> change) {
+ ArrayList<Object> selection = new ArrayList<Object>();
+ for (Object item : change.getList()) {
+ if (item instanceof AdapterFactoryTreeItem) {
+ Object value = ((AdapterFactoryTreeItem) item).getValue();
+ selection.add(value);
+ }
+ }
+ application.getContext().set(List.class, selection);
+ }
+
+ });
+
+ // add the context menu
+ ContextMenuProvider contextMenuProvider = new ContextMenuProvider(contactsManager);
+ treeCellFactory.addCellUpdateListener(contextMenuProvider);
+
+ treeView.setEditable(true);
+ }
+}
diff --git a/demos/org.eclipse.fx.demo.contacts.app/vcards/Angelo ZERR.vcf b/demos/org.eclipse.fx.demo.contacts.app/vcards/Angelo ZERR.vcf
index 4b55de06f..3f6cd910f 100755
--- a/demos/org.eclipse.fx.demo.contacts.app/vcards/Angelo ZERR.vcf
+++ b/demos/org.eclipse.fx.demo.contacts.app/vcards/Angelo ZERR.vcf
@@ -1,61 +1,61 @@
-BEGIN:VCARD
-VERSION:2.1
-N:ZERR;Angelo
-FN:Angelo ZERR
-TITLE:Enthusiastic developer
-NOTE:CSS Engine
-ADR;WORK:;;;Saint Paul 3 Chateaux;;26130;France
-LABEL;WORK;ENCODING=QUOTED-PRINTABLE:Saint Paul 3 Chateaux 26130=0D=0A=
-France
-ADR;HOME:;;;;;;France
-LABEL;HOME:France
-X-MS-OL-DEFAULT-POSTAL-ADDRESS:0
-X-WAB-GENDER:2
-URL;WORK:http://akrogen.sourceforge.net/
-EMAIL;PREF;INTERNET:angelo.zerr@gmail.com
-PHOTO;TYPE=JPEG;ENCODING=BASE64:
- /9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQY
- GBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYa
- KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAAR
- CABYAEgDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAA
- AgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkK
- FhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWG
- h4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl
- 5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREA
- AgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYk
- NOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOE
- hYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk
- 5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD1ySXc7beijFRp/qxnPJqrGSsRJPJ/nTri
- cRjk4VBya961jzAuZlgikkchUX1rlNS8fx6c6pCsT84YFsEVxmu+Njqd46oxjto2IQf3u24+
- /wDKuG11Z94lsC4jyTu3ZYseTzXDXrtStE7aVBJXkeyXfxQuzJutdNDIADhmOSM+1dPo3jW0
- vcC5iktp2HRgSPzr580HXkaQR3hfeo2oHOR78n1rU/4SG7snjEQSO1LcLKCR/wABrH6xJGns
- YNH0a8yNDuQ7gRkEVhXUhbzPYYry7w947ks9Xihe486xkbD5GNoP8WO2K9SnUfZy4wc8g120
- qiqK6OSrTcHZlSI+XECepoocErgdBRWxkXHJ82OIduTWR4zu/snhrVZ8lSkDcj1IxW+iBmL9
- 65H4p+Z/whepR28bSyOgXaoycZ5P4DmibtFsdNXkkfOK6g7SqB83cg12ummfUYo1ZUiiHIAH
- X615tZFvti5555r1bRAXgiVMg47CvEnI9Wmk3qY/iLw1MiCSDbnrxxXLvd30TiGfLJ0KkfpX
- rt5HMLc79hAHLFwf5DNcXqNsJHLBFznqDWc5tGipJmVpl4Jm8i5iRAR8smMFT+FfQfg+7a+8
- KaezyB3VSjMDnO3ivnxoGVmypHB5xXrvwTdn8JOrsTi4fH5LXbgZ81zkxcbJHdEdfyop7/Jj
- 9aK9I4C6PkiH515n8ZBdG00+SJ5Ft28zdsOOeMfp/WvSrj59sY78VleM9LN/o2EiaRoG8xUU
- cng5H5Gs68eem0b4Wfs6qkfMmh6cr6lIJVOFG5Qa3NR1u40xRDaLsbGC23NSTvbnXZJLXPll
- cdMYI6itqSOy1DT/ACrrajAfK69Qa8V7npxWjscCmu37XIka5kYZ6djWhd69PHECygFhxmtC
- 10SzF8I1kM8hPAx0FaXj3QoYtLsJIlQMq4YL1ApNX1GlKKscbY6lPdXI34ZT1FfQXwpgji8J
- WjLEELlmbH8XOM14HoemvJqEEIAy7hVx719L6NAllYQwR4CRRhB+ArvwUd2jhxUrJJ7k1++c
- hTjiiq1y/wArMT14FFd5wm1uCyE4JCDJPpXh3xO+JGvwa3Pp+lS/ZLBCIxIsYLSEgZ+Yg+vb
- FeuwXlyPMduDKj7VA6DBxXAXVrFr+iyx3cQlQsdyL/yzb1HpWVRylpE3pqMdWeYQkxKnmfec
- bsmluZJXDeWxH07VqeKdJa2tgIsgx8ofX2rlbW8Mku12x/eWvJqRadnuejCatoaETmC3kaG7
- 8q6P/LQNzj0rOk1O+f5JZmkA4yTnIrVltnlhMlpCmQOTxisZIHeba6AMT24qH2NG+p23wtsn
- vdeSZ1yluN59Pb9a9rE22EkdScVyHgDQ5NH8Pb5UxdXR3YPUJjiuniRz5QfgZzXsYenyQSZ5
- VepzzuPuFLbRngc0VFdT7JmA7cUVsYmTrF5rslgrnTLV7iEEr9kvQzL9RjkV53oHiG40/Xrk
- alavbfajko7cB/UE16brF5HeQb3KTRMOGIDge/8A9cV414q0m4EkpS6lZA2URzuC/Qnmsvea
- ujofLc7HXdRguYxbXEJBlHXrivKNcsWtrmQrnIPWum8H+KYY/Ms9dVXVV2xyEfMuO2fSqPiq
- 5tZ7rdAWAfuw+Un2NcuISnHmW5pSTi+VnNRX9zGpQO209s06LVJra6jlQ/PGwYZ9ajYYchhy
- KoXC7LhwTz1rhje5vd2PpjwJ410/xRGqyyJBqCrgwMcbj6r6iuyMa+YWJHyjgV8d2k7QypJH
- IySKcqynBBr1/wAIfFJoIPs3iBWmGAq3KfeH+8O/1r1KWJUtJbnHUotaxO/1S68p5ZpDhSeA
- O+KK5S/1iHXXZdNlWUFcKqn5uepx16UV0Kz1uZcrRzeh+IHs7sx4L2Urfdz9zPpWh4gt2Ks0
- LK0LDdg9qKKKZpPc821zTpUuGmRSgPOTWc98NqJKpBAwW9fwoorhxC5J2RvDVaksZilwvmAA
- 8ZxmtzXvDe3w/aarbglWXD8dxxn6GiislFOLNEcvbQrICx+VR1JPStSzCDHkQeaR/E/I/AUU
- VlEGddovie90uVHjkMDrwUi6OPcdKKKK76NNSjdmM5NM/9k=
-
-X-MS-OL-DESIGN;CHARSET=utf-8:<card xmlns="http://schemas.microsoft.com/office/outlook/12/electronicbusinesscards" ver="1.0" layout="left" bgcolor="ffffff"><img xmlns="" align="tleft" area="32" use="photo"/><fld xmlns="" prop="name" align="left" dir="ltr" style="b" color="000000" size="10"/><fld xmlns="" prop="title" align="left" dir="ltr" color="000000" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="email" align="left" dir="ltr" color="000000" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="addrwork" align="left" dir="ltr" color="000000" size="8"/><fld xmlns="" prop="addrhome" align="left" dir="ltr" color="000000" size="8"/><fld xmlns="" prop="webwork" align="left" dir="ltr" color="000000" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/></card>
-REV:20090622T152914Z
-END:VCARD
+BEGIN:VCARD
+VERSION:2.1
+N:ZERR;Angelo
+FN:Angelo ZERR
+TITLE:Enthusiastic developer
+NOTE:CSS Engine
+ADR;WORK:;;;Saint Paul 3 Chateaux;;26130;France
+LABEL;WORK;ENCODING=QUOTED-PRINTABLE:Saint Paul 3 Chateaux 26130=0D=0A=
+France
+ADR;HOME:;;;;;;France
+LABEL;HOME:France
+X-MS-OL-DEFAULT-POSTAL-ADDRESS:0
+X-WAB-GENDER:2
+URL;WORK:http://akrogen.sourceforge.net/
+EMAIL;PREF;INTERNET:angelo.zerr@gmail.com
+PHOTO;TYPE=JPEG;ENCODING=BASE64:
+ /9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQY
+ GBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYa
+ KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAAR
+ CABYAEgDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAA
+ AgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkK
+ FhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWG
+ h4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl
+ 5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREA
+ AgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYk
+ NOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOE
+ hYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk
+ 5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD1ySXc7beijFRp/qxnPJqrGSsRJPJ/nTri
+ cRjk4VBya961jzAuZlgikkchUX1rlNS8fx6c6pCsT84YFsEVxmu+Njqd46oxjto2IQf3u24+
+ /wDKuG11Z94lsC4jyTu3ZYseTzXDXrtStE7aVBJXkeyXfxQuzJutdNDIADhmOSM+1dPo3jW0
+ vcC5iktp2HRgSPzr580HXkaQR3hfeo2oHOR78n1rU/4SG7snjEQSO1LcLKCR/wABrH6xJGns
+ YNH0a8yNDuQ7gRkEVhXUhbzPYYry7w947ks9Xihe486xkbD5GNoP8WO2K9SnUfZy4wc8g120
+ qiqK6OSrTcHZlSI+XECepoocErgdBRWxkXHJ82OIduTWR4zu/snhrVZ8lSkDcj1IxW+iBmL9
+ 65H4p+Z/whepR28bSyOgXaoycZ5P4DmibtFsdNXkkfOK6g7SqB83cg12ummfUYo1ZUiiHIAH
+ X615tZFvti5555r1bRAXgiVMg47CvEnI9Wmk3qY/iLw1MiCSDbnrxxXLvd30TiGfLJ0KkfpX
+ rt5HMLc79hAHLFwf5DNcXqNsJHLBFznqDWc5tGipJmVpl4Jm8i5iRAR8smMFT+FfQfg+7a+8
+ KaezyB3VSjMDnO3ivnxoGVmypHB5xXrvwTdn8JOrsTi4fH5LXbgZ81zkxcbJHdEdfyop7/Jj
+ 9aK9I4C6PkiH515n8ZBdG00+SJ5Ft28zdsOOeMfp/WvSrj59sY78VleM9LN/o2EiaRoG8xUU
+ cng5H5Gs68eem0b4Wfs6qkfMmh6cr6lIJVOFG5Qa3NR1u40xRDaLsbGC23NSTvbnXZJLXPll
+ cdMYI6itqSOy1DT/ACrrajAfK69Qa8V7npxWjscCmu37XIka5kYZ6djWhd69PHECygFhxmtC
+ 10SzF8I1kM8hPAx0FaXj3QoYtLsJIlQMq4YL1ApNX1GlKKscbY6lPdXI34ZT1FfQXwpgji8J
+ WjLEELlmbH8XOM14HoemvJqEEIAy7hVx719L6NAllYQwR4CRRhB+ArvwUd2jhxUrJJ7k1++c
+ hTjiiq1y/wArMT14FFd5wm1uCyE4JCDJPpXh3xO+JGvwa3Pp+lS/ZLBCIxIsYLSEgZ+Yg+vb
+ FeuwXlyPMduDKj7VA6DBxXAXVrFr+iyx3cQlQsdyL/yzb1HpWVRylpE3pqMdWeYQkxKnmfec
+ bsmluZJXDeWxH07VqeKdJa2tgIsgx8ofX2rlbW8Mku12x/eWvJqRadnuejCatoaETmC3kaG7
+ 8q6P/LQNzj0rOk1O+f5JZmkA4yTnIrVltnlhMlpCmQOTxisZIHeba6AMT24qH2NG+p23wtsn
+ vdeSZ1yluN59Pb9a9rE22EkdScVyHgDQ5NH8Pb5UxdXR3YPUJjiuniRz5QfgZzXsYenyQSZ5
+ VepzzuPuFLbRngc0VFdT7JmA7cUVsYmTrF5rslgrnTLV7iEEr9kvQzL9RjkV53oHiG40/Xrk
+ alavbfajko7cB/UE16brF5HeQb3KTRMOGIDge/8A9cV414q0m4EkpS6lZA2URzuC/Qnmsvea
+ ujofLc7HXdRguYxbXEJBlHXrivKNcsWtrmQrnIPWum8H+KYY/Ms9dVXVV2xyEfMuO2fSqPiq
+ 5tZ7rdAWAfuw+Un2NcuISnHmW5pSTi+VnNRX9zGpQO209s06LVJra6jlQ/PGwYZ9ajYYchhy
+ KoXC7LhwTz1rhje5vd2PpjwJ410/xRGqyyJBqCrgwMcbj6r6iuyMa+YWJHyjgV8d2k7QypJH
+ IySKcqynBBr1/wAIfFJoIPs3iBWmGAq3KfeH+8O/1r1KWJUtJbnHUotaxO/1S68p5ZpDhSeA
+ O+KK5S/1iHXXZdNlWUFcKqn5uepx16UV0Kz1uZcrRzeh+IHs7sx4L2Urfdz9zPpWh4gt2Ks0
+ LK0LDdg9qKKKZpPc821zTpUuGmRSgPOTWc98NqJKpBAwW9fwoorhxC5J2RvDVaksZilwvmAA
+ 8ZxmtzXvDe3w/aarbglWXD8dxxn6GiislFOLNEcvbQrICx+VR1JPStSzCDHkQeaR/E/I/AUU
+ VlEGddovie90uVHjkMDrwUi6OPcdKKKK76NNSjdmM5NM/9k=
+
+X-MS-OL-DESIGN;CHARSET=utf-8:<card xmlns="http://schemas.microsoft.com/office/outlook/12/electronicbusinesscards" ver="1.0" layout="left" bgcolor="ffffff"><img xmlns="" align="tleft" area="32" use="photo"/><fld xmlns="" prop="name" align="left" dir="ltr" style="b" color="000000" size="10"/><fld xmlns="" prop="title" align="left" dir="ltr" color="000000" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="email" align="left" dir="ltr" color="000000" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="addrwork" align="left" dir="ltr" color="000000" size="8"/><fld xmlns="" prop="addrhome" align="left" dir="ltr" color="000000" size="8"/><fld xmlns="" prop="webwork" align="left" dir="ltr" color="000000" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/></card>
+REV:20090622T152914Z
+END:VCARD
diff --git a/demos/org.eclipse.fx.demo.contacts.app/vcards/Boris Bokowski.vcf b/demos/org.eclipse.fx.demo.contacts.app/vcards/Boris Bokowski.vcf
index 4aaedfe21..d19f9421c 100755
--- a/demos/org.eclipse.fx.demo.contacts.app/vcards/Boris Bokowski.vcf
+++ b/demos/org.eclipse.fx.demo.contacts.app/vcards/Boris Bokowski.vcf
@@ -1,61 +1,61 @@
-BEGIN:VCARD
-VERSION:2.1
-N:Bokowski;Boris;;Dr.
-FN:Dr. Boris Bokowski
-ORG:IBM Canada Ltd.
-TITLE:Eclipse Platform UI Technical Lead
-TEL;WORK;VOICE:+1-613-820-1200
-TEL;WORK;FAX:+1-613-820-1202
-TEL;PREF:+1-613-820-1200
-ADR;WORK:;;2670 Queensview Dr;Ottawa;ON;K2A2A8;Canada
-LABEL;WORK;ENCODING=QUOTED-PRINTABLE:2670 Queensview Dr=0D=0A=
-Ottawa ON K2A2A8=0D=0A=
-Canada
-X-MS-OL-DEFAULT-POSTAL-ADDRESS:0
-EMAIL;PREF;INTERNET:Boris_Bokowski@ca.ibm.com
-PHOTO;TYPE=JPEG;ENCODING=BASE64:
- /9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQY
- GBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYa
- KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAAR
- CABgAEYDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAA
- AgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkK
- FhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWG
- h4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl
- 5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREA
- AgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYk
- NOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOE
- hYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk
- 5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDuUjbP3qnSJ8jBpsRGc1Nc3cNnYz3VwwCR
- pnJOMVNzVIjvdWtdKUfbHiAx1c1zt58RbOyud+nqs8Y5OTXj/jzxU+rXzywy5t14BHeuOgvb
- 2VWMSyNzngVi5t7GqgfSuk+M7PVrlVJMcknTcR19K6A3Q8s7WUj2NfK9tqt1ZyRtIjhlPXGK
- 9F8H+MF8lYpX3MAEUO2APUmqjPuTKFtj2KOVZTtZjj2p8tlFFbtIZsydlFczbaiJIg6Mp/3T
- kH6VOdSPQmtbX2M/UuM/PNFZr3wznNFFhHSIqADA4rzL476+9lo1pptoMPdyF3b/AGVxxj6k
- H8K9JVy3HavAPi/dm9+JEdlvBS2jjiwOxI3H/wBCqJbFx1ZkeHdF/tWCFZgwjU7mH96vRtO8
- P29vCqRxhVx6VR8OQx28K7FwOmBXTJM2BkYFcE5XZ7FGmkjE1DRbdkP7pW78iuB8Q6Utk63V
- kpjZGy6DoRXqVz5pQsvSuT15VdDkexohJpirU04lTwxrDRzW5kYmOQ7S2ehPAz+OK72STA61
- 4gt21vqH2MDbE7BMnoD1B/z616+0pZRk5OOa76N7WPIrbk7TnPWiqRJzRWxketeTDbqRPIox
- 3Jxivnn4paW9l8WPMyGjukjuIyOmNu0/qpr3DWNImRZt08kka8quc15F8QY5JdY0iaRWzEDG
- Xb+6egH0IP50p04qm5JlU5SdRRsR6beeVAS06QjdhS3U1tafrHzKkz+Yr9Dtwax7axjZld13
- DbgKRn3/AJ1ZFo39oW6qoXPIUdhXluzPdhGSJ7/UnuZXaHzSkeRsRsZx/WsTULgXaFVjkhkX
- na5zkA4rSsLRzqMyjKyDLexFSXlufM3Oqgj0oTSHKm5annWo2oPiCJW6S7fwORXri25VQACA
- BiuHj01b/XkYglYl3tg4PBFez22iSThN428DORXbRn0PIr02tTkTH7UV10+jQxuQfm96K3uc
- 9jpL+RJFYbhtx1PFeZePbZJoYxGu6Uchs/3Tn9ea7iezvQrKzjH1rCm04XUqJNtba394jFa+
- xU4OKZMK/s6ik1ocfoRQxRs/QjNO1ELd34dTsReNwOMH2p0EKWl9NYPx9nnaP/gB5U/liori
- 0ljvjJC6OOCBKoYDHtXiyXLNpn0NOpzwTQ+zxZ3iyrhkIwSDkgn1qfUysudncZFUJLOe4ljl
- nmTYnGIUCcehIGat6pIkUUbLwFQ5561LteyNHJoxtDtJZ5r14EcupCZU+uf8K9rsNSN1kNtX
- aOxryn4f/PaXshPLSj+X/wBeuwtpmgl3IM54r28PhU6fN1Z81icW/acnRHQ3U8STlZTzjtRX
- NyLMzlnySecmiuhYWNtWcrxMr7HeXmkGacSrNlB/BnH60yzuLbT3CpAhmGQ0nU/ga2I2dkyy
- AfjXO6pClmwKKGZufWuBTbVmdzilqjz74syRQ+K7G9hyDdW4SXnqynAP5ED8K56LUFMxSY7c
- 9/UV0HxMSK6stMIQiaN5FYnvkAj/ANBrjLZJsgH5iPXvXJWguY9DD1Go3Rs3NzCigRbsnt61
- j6rcSPZsH4LHAHetAJOU+WML7gVnyWkkko3847VkopO5vKcpGz4A+WC9j9GQ/mD/AIV1WOa5
- fwcyw6hdQsQGkRSAe+Cf8a63HtX0GDleij5vHQ5azGAdhRT/AMKK6TkPKPh/8SfE3hyQW18h
- u9KHHlTSfNGP9huT+ByPpXf6/wDGmwaNU0rSpZZMfM9yQuPoBnP5ivn9ZXx9404OxHWvMVNb
- nrczPR4PEl3rsxN/cZlEhkEfRcH+6PauihtfMRZEGDXjkNwykEEhh0INdLpXjTULABJBHcx+
- kgwfzFYVsO5PmidVDEqC5ZI9OiiJjww/GoJrcIGOK5NfiQirzpZJ9p+P/QazNT+IV7coVtrW
- C3HqSXb+g/Suf6tUfQ6niqS1udFdotvIZ5HEarzuJxiuduPGV7Fq63dtM7RxrsVJWJVx6kZr
- lb/Vby+fddzvIewJ4H0HSqLSM3c12UKTpa31ODEVlW0toeoQfFApGBdafG79zHIVH5EGivLD
- 7miur2sjj9jDsf/Z
-
-X-MS-OL-DESIGN;CHARSET=utf-8:<card xmlns="http://schemas.microsoft.com/office/outlook/12/electronicbusinesscards" ver="1.0" layout="left" bgcolor="ffffff"><img xmlns="" align="tleft" area="32" use="photo"/><fld xmlns="" prop="name" align="left" dir="ltr" style="b" color="000000" size="10"/><fld xmlns="" prop="org" align="left" dir="ltr" color="000000" size="8"/><fld xmlns="" prop="title" align="left" dir="ltr" color="000000" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="telwork" align="left" dir="ltr" color="000000" size="8"><label align="right" color="626262">Work</label></fld><fld xmlns="" prop="telpri" align="left" dir="ltr" color="000000" size="8"><label align="right" color="626262">Primary</label></fld><fld xmlns="" prop="email" align="left" dir="ltr" color="000000" size="8"/><fld xmlns="" prop="addrwork" align="left" dir="ltr" color="000000" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/></card>
-REV:20090525T141422Z
-END:VCARD
+BEGIN:VCARD
+VERSION:2.1
+N:Bokowski;Boris;;Dr.
+FN:Dr. Boris Bokowski
+ORG:IBM Canada Ltd.
+TITLE:Eclipse Platform UI Technical Lead
+TEL;WORK;VOICE:+1-613-820-1200
+TEL;WORK;FAX:+1-613-820-1202
+TEL;PREF:+1-613-820-1200
+ADR;WORK:;;2670 Queensview Dr;Ottawa;ON;K2A2A8;Canada
+LABEL;WORK;ENCODING=QUOTED-PRINTABLE:2670 Queensview Dr=0D=0A=
+Ottawa ON K2A2A8=0D=0A=
+Canada
+X-MS-OL-DEFAULT-POSTAL-ADDRESS:0
+EMAIL;PREF;INTERNET:Boris_Bokowski@ca.ibm.com
+PHOTO;TYPE=JPEG;ENCODING=BASE64:
+ /9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQY
+ GBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYa
+ KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAAR
+ CABgAEYDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAA
+ AgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkK
+ FhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWG
+ h4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl
+ 5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREA
+ AgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYk
+ NOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOE
+ hYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk
+ 5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDuUjbP3qnSJ8jBpsRGc1Nc3cNnYz3VwwCR
+ pnJOMVNzVIjvdWtdKUfbHiAx1c1zt58RbOyud+nqs8Y5OTXj/jzxU+rXzywy5t14BHeuOgvb
+ 2VWMSyNzngVi5t7GqgfSuk+M7PVrlVJMcknTcR19K6A3Q8s7WUj2NfK9tqt1ZyRtIjhlPXGK
+ 9F8H+MF8lYpX3MAEUO2APUmqjPuTKFtj2KOVZTtZjj2p8tlFFbtIZsydlFczbaiJIg6Mp/3T
+ kH6VOdSPQmtbX2M/UuM/PNFZr3wznNFFhHSIqADA4rzL476+9lo1pptoMPdyF3b/AGVxxj6k
+ H8K9JVy3HavAPi/dm9+JEdlvBS2jjiwOxI3H/wBCqJbFx1ZkeHdF/tWCFZgwjU7mH96vRtO8
+ P29vCqRxhVx6VR8OQx28K7FwOmBXTJM2BkYFcE5XZ7FGmkjE1DRbdkP7pW78iuB8Q6Utk63V
+ kpjZGy6DoRXqVz5pQsvSuT15VdDkexohJpirU04lTwxrDRzW5kYmOQ7S2ehPAz+OK72STA61
+ 4gt21vqH2MDbE7BMnoD1B/z616+0pZRk5OOa76N7WPIrbk7TnPWiqRJzRWxketeTDbqRPIox
+ 3Jxivnn4paW9l8WPMyGjukjuIyOmNu0/qpr3DWNImRZt08kka8quc15F8QY5JdY0iaRWzEDG
+ Xb+6egH0IP50p04qm5JlU5SdRRsR6beeVAS06QjdhS3U1tafrHzKkz+Yr9Dtwax7axjZld13
+ DbgKRn3/AJ1ZFo39oW6qoXPIUdhXluzPdhGSJ7/UnuZXaHzSkeRsRsZx/WsTULgXaFVjkhkX
+ na5zkA4rSsLRzqMyjKyDLexFSXlufM3Oqgj0oTSHKm5annWo2oPiCJW6S7fwORXri25VQACA
+ BiuHj01b/XkYglYl3tg4PBFez22iSThN428DORXbRn0PIr02tTkTH7UV10+jQxuQfm96K3uc
+ 9jpL+RJFYbhtx1PFeZePbZJoYxGu6Uchs/3Tn9ea7iezvQrKzjH1rCm04XUqJNtba394jFa+
+ xU4OKZMK/s6ik1ocfoRQxRs/QjNO1ELd34dTsReNwOMH2p0EKWl9NYPx9nnaP/gB5U/liori
+ 0ljvjJC6OOCBKoYDHtXiyXLNpn0NOpzwTQ+zxZ3iyrhkIwSDkgn1qfUysudncZFUJLOe4ljl
+ nmTYnGIUCcehIGat6pIkUUbLwFQ5561LteyNHJoxtDtJZ5r14EcupCZU+uf8K9rsNSN1kNtX
+ aOxryn4f/PaXshPLSj+X/wBeuwtpmgl3IM54r28PhU6fN1Z81icW/acnRHQ3U8STlZTzjtRX
+ NyLMzlnySecmiuhYWNtWcrxMr7HeXmkGacSrNlB/BnH60yzuLbT3CpAhmGQ0nU/ga2I2dkyy
+ AfjXO6pClmwKKGZufWuBTbVmdzilqjz74syRQ+K7G9hyDdW4SXnqynAP5ED8K56LUFMxSY7c
+ 9/UV0HxMSK6stMIQiaN5FYnvkAj/ANBrjLZJsgH5iPXvXJWguY9DD1Go3Rs3NzCigRbsnt61
+ j6rcSPZsH4LHAHetAJOU+WML7gVnyWkkko3847VkopO5vKcpGz4A+WC9j9GQ/mD/AIV1WOa5
+ fwcyw6hdQsQGkRSAe+Cf8a63HtX0GDleij5vHQ5azGAdhRT/AMKK6TkPKPh/8SfE3hyQW18h
+ u9KHHlTSfNGP9huT+ByPpXf6/wDGmwaNU0rSpZZMfM9yQuPoBnP5ivn9ZXx9404OxHWvMVNb
+ nrczPR4PEl3rsxN/cZlEhkEfRcH+6PauihtfMRZEGDXjkNwykEEhh0INdLpXjTULABJBHcx+
+ kgwfzFYVsO5PmidVDEqC5ZI9OiiJjww/GoJrcIGOK5NfiQirzpZJ9p+P/QazNT+IV7coVtrW
+ C3HqSXb+g/Suf6tUfQ6niqS1udFdotvIZ5HEarzuJxiuduPGV7Fq63dtM7RxrsVJWJVx6kZr
+ lb/Vby+fddzvIewJ4H0HSqLSM3c12UKTpa31ODEVlW0toeoQfFApGBdafG79zHIVH5EGivLD
+ 7miur2sjj9jDsf/Z
+
+X-MS-OL-DESIGN;CHARSET=utf-8:<card xmlns="http://schemas.microsoft.com/office/outlook/12/electronicbusinesscards" ver="1.0" layout="left" bgcolor="ffffff"><img xmlns="" align="tleft" area="32" use="photo"/><fld xmlns="" prop="name" align="left" dir="ltr" style="b" color="000000" size="10"/><fld xmlns="" prop="org" align="left" dir="ltr" color="000000" size="8"/><fld xmlns="" prop="title" align="left" dir="ltr" color="000000" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="telwork" align="left" dir="ltr" color="000000" size="8"><label align="right" color="626262">Work</label></fld><fld xmlns="" prop="telpri" align="left" dir="ltr" color="000000" size="8"><label align="right" color="626262">Primary</label></fld><fld xmlns="" prop="email" align="left" dir="ltr" color="000000" size="8"/><fld xmlns="" prop="addrwork" align="left" dir="ltr" color="000000" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/></card>
+REV:20090525T141422Z
+END:VCARD
diff --git a/demos/org.eclipse.fx.demo.contacts.app/vcards/Chris Aniszczyk.vcf b/demos/org.eclipse.fx.demo.contacts.app/vcards/Chris Aniszczyk.vcf
index 442f6d43a..680965d53 100755
--- a/demos/org.eclipse.fx.demo.contacts.app/vcards/Chris Aniszczyk.vcf
+++ b/demos/org.eclipse.fx.demo.contacts.app/vcards/Chris Aniszczyk.vcf
@@ -1,66 +1,66 @@
-BEGIN:VCARD
-VERSION:2.1
-N:Aniszczyk;Chris
-FN:Chris Aniszczyk
-ORG:EclipseSource
-TEL;WORK;VOICE:1-860-839-2465
-TEL;PREF:1-860-839-2465
-ADR;WORK;PREF:;;1221 S. Congress Ave;Austin;TX;78704;USA
-LABEL;WORK;PREF;ENCODING=QUOTED-PRINTABLE:1221 S. Congress Ave=0D=0A=
-Austin, TX 78704=0D=0A=
-USA
-X-MS-OL-DEFAULT-POSTAL-ADDRESS:2
-EMAIL;PREF;INTERNET:zx@eclipsesource.com
-PHOTO;TYPE=JPEG;ENCODING=BASE64:
- /9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQY
- GBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYa
- KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAAR
- CABIAEgDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAA
- AgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkK
- FhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWG
- h4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl
- 5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREA
- AgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYk
- NOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOE
- hYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk
- 5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDP+Hus6eunW9ibuIXZjZRERtJO9mxjp05q
- j4+Yx38G2R48yTjKf9c0PWuFvry5Wzs3ljkt72FwQzKVY8cMM/SvUvDqQ+KdOW9lNuZRxJFJ
- brL5b7QCRu6AgZ//AFVnFu12XKKva5gaxA2oWmn7HuGuJLKIkxA5JV8dPxFbF5ZDRtS1XU9U
- uFhtHuPOQMc9iMY555PHWus1uWLwl4fs5FWGS+uZBBAzRqoiBGSQMcAKOnrivCfEuoXfiLW5
- lE7tbQOVj3Hj0L+5J71SaauyeTWy3LeufEHUJmSHTD5FtECoZvvP7nHTp6965qXxNqjXzXgu
- HS4ZChcHqpGCDnPatWHRrdI9zguRwN38qwtWaFXdY0REU4GAMsamFRSdkjaph3TjzSNPTvEs
- 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
- GRsG7gUUUVlOnG5vTm2j/9k=
-
-X-MS-OL-DESIGN;CHARSET=utf-8:<card xmlns="http://schemas.microsoft.com/office/outlook/12/electronicbusinesscards" ver="1.0" layout="left" bgcolor="ffffff"><img xmlns="" align="tleft" area="32" use="photo"/><fld xmlns="" prop="name" align="left" dir="ltr" style="b" color="000000" size="10"/><fld xmlns="" prop="org" align="left" dir="ltr" color="000000" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="telwork" align="left" dir="ltr" color="000000" size="8"><label align="right" color="626262">Work</label></fld><fld xmlns="" prop="telpri" align="left" dir="ltr" color="000000" size="8"><label align="right" color="626262">Primary</label></fld><fld xmlns="" prop="email" align="left" dir="ltr" color="000000" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="addrwork" align="left" dir="ltr" color="000000" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/></card>
-REV:20090525T195324Z
-END:VCARD
+BEGIN:VCARD
+VERSION:2.1
+N:Aniszczyk;Chris
+FN:Chris Aniszczyk
+ORG:EclipseSource
+TEL;WORK;VOICE:1-860-839-2465
+TEL;PREF:1-860-839-2465
+ADR;WORK;PREF:;;1221 S. Congress Ave;Austin;TX;78704;USA
+LABEL;WORK;PREF;ENCODING=QUOTED-PRINTABLE:1221 S. Congress Ave=0D=0A=
+Austin, TX 78704=0D=0A=
+USA
+X-MS-OL-DEFAULT-POSTAL-ADDRESS:2
+EMAIL;PREF;INTERNET:zx@eclipsesource.com
+PHOTO;TYPE=JPEG;ENCODING=BASE64:
+ /9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQY
+ GBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYa
+ KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAAR
+ CABIAEgDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAA
+ AgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkK
+ FhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWG
+ h4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl
+ 5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREA
+ AgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYk
+ NOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOE
+ hYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk
+ 5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDP+Hus6eunW9ibuIXZjZRERtJO9mxjp05q
+ j4+Yx38G2R48yTjKf9c0PWuFvry5Wzs3ljkt72FwQzKVY8cMM/SvUvDqQ+KdOW9lNuZRxJFJ
+ brL5b7QCRu6AgZ//AFVnFu12XKKva5gaxA2oWmn7HuGuJLKIkxA5JV8dPxFbF5ZDRtS1XU9U
+ uFhtHuPOQMc9iMY555PHWus1uWLwl4fs5FWGS+uZBBAzRqoiBGSQMcAKOnrivCfEuoXfiLW5
+ lE7tbQOVj3Hj0L+5J71SaauyeTWy3LeufEHUJmSHTD5FtECoZvvP7nHTp6965qXxNqjXzXgu
+ HS4ZChcHqpGCDnPatWHRrdI9zguRwN38qwtWaFXdY0REU4GAMsamFRSdkjaph3TjzSNPTvEs
+ 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
+ GRsG7gUUUVlOnG5vTm2j/9k=
+
+X-MS-OL-DESIGN;CHARSET=utf-8:<card xmlns="http://schemas.microsoft.com/office/outlook/12/electronicbusinesscards" ver="1.0" layout="left" bgcolor="ffffff"><img xmlns="" align="tleft" area="32" use="photo"/><fld xmlns="" prop="name" align="left" dir="ltr" style="b" color="000000" size="10"/><fld xmlns="" prop="org" align="left" dir="ltr" color="000000" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="telwork" align="left" dir="ltr" color="000000" size="8"><label align="right" color="626262">Work</label></fld><fld xmlns="" prop="telpri" align="left" dir="ltr" color="000000" size="8"><label align="right" color="626262">Primary</label></fld><fld xmlns="" prop="email" align="left" dir="ltr" color="000000" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="addrwork" align="left" dir="ltr" color="000000" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/></card>
+REV:20090525T195324Z
+END:VCARD
diff --git a/demos/org.eclipse.fx.demo.contacts.app/vcards/Hallvard Traetteberg.vcf b/demos/org.eclipse.fx.demo.contacts.app/vcards/Hallvard Traetteberg.vcf
index d7c548c05..eceddaf2b 100755
--- a/demos/org.eclipse.fx.demo.contacts.app/vcards/Hallvard Traetteberg.vcf
+++ b/demos/org.eclipse.fx.demo.contacts.app/vcards/Hallvard Traetteberg.vcf
@@ -1,64 +1,64 @@
-BEGIN:VCARD
-VERSION:2.1
-N:Traetteberg;Hallvard
-FN:Hallvard Traetteberg
-ORG:Norwegian University of Science and Technology;Dept. of Computer and Information Sciences
-TITLE:Associate Professor
-TEL;CELL;VOICE:+47 91897263
-ADR;WORK;PREF;CHARSET=Windows-1252:;;Glshaugen;Trondheim;;7491;Norway
-LABEL;WORK;PREF;CHARSET=Windows-1252;ENCODING=QUOTED-PRINTABLE:Gl=C3=B8shaugen=0D=0A=
-7491 Trondheim=0D=0A=
-Norway
-X-MS-OL-DEFAULT-POSTAL-ADDRESS:2
-URL;HOME:http://www.idi.ntnu.no/~hal
-URL;WORK:http://www.idi.ntnu.no/~hal/
-EMAIL;PREF;INTERNET:hal@idi.ntnu.no
-PHOTO;TYPE=JPEG;ENCODING=BASE64:
- /9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQY
- GBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYa
- KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAAR
- CABcAEgDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAA
- AgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkK
- FhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWG
- h4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl
- 5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREA
- AgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYk
- NOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOE
- hYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk
- 5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD6E700mhjxzXBfEn4g2HhSzeMSCTUnQmKA
- AnnsWPYVA7nXapq1jpcPm6hdwW0fZpXC5+meteVeMPjXZ6dLJBotut3IvSaQkIfoOp/SvJEt
- 9d8Y30l/dvIRK2WkYcH2A9KS+8D3I+5liOpzUucYuzZcaU5K6R1Fv8dNcF4jzRWrRZ+aMR8H
- 8c5/WvQ/D/xo0W+QLqME1pJnqn7xOnU9CPyP1r55tfC19dXZhjU4B+8RWxD4OuoCQ7N6DFJ1
- ILZlKjPsfV+i+INK1tC2lX0FztGWVG+ZR7qeRWqDXxpcxat4Zu4riCWWNozuSaIlWU/UV798
- KfiVF4pVdP1EJFqirkMvCzAdSB2Pt+XpVrVXRm007M9OooBooEZ2tXq2On3FzI2EiQuxPYAV
- 8lWoufGvjKe6vCWWRy7nsq9lHsBgV9IfFq8Fl4F1eQnBaBkH1bgfzrxf4PWqtY3MxUGRpMA+
- 2KUnyxbKprmlqd9YWASGOC3XZGgCjArYj0UTR4cZz14rU063SKMEgVsRsm0AIpNcajzbnp35
- VojlV8NwKcrEAR6cVXvdDAUsqDPauwfaOdo/OqdzcICECfiKmUUkVGTkeW6/pqz2slvNHnII
- 6dK8ZYXGga6rRSSRGN9ySKcEYPBBr6c1a1ikieQ8fhXhnxMsBGkdwigYbB4rTDTalyvqc+Kp
- rluj6T+HHiBvEvhCx1Cb/j4IMcxAwC68E/jwfxorlf2d7kT+AfLyCYrp1xj1VT/WiuxrU4EW
- fjnay3PgHUBCpYoFkI9gwJ/SvMfguwGl3K5yyy5/DFevfFqK4n8HXsVqcNIAjf7pPNeKfBuG
- YtqUa5BUKPocmolrFouCadz26C4gijjWR1Vj2JrRg8uXGCp/GvLNUjurdZ1axlvZEQvlrgxA
- /wCyuAST7cVU0CyufsiasJLmz3OQls9w5IAxzg9QTkcjt71hyNLmO1VLvlPZGiVepXmsu7vb
- KOUpJPCrgfd3DP5VRfUt2iRzzOzOEyR0NecavpDSxy6pHaw3E6J5oidny/PQbWXtk/41C992
- RbbguZnfXl5bz20iQSqzA8jNeSfFFR/ZgPQs1dFYNPqdvbGXSktDICQ8TN8mDwGU56/XNYHx
- XgkTT4VHJ3jJH0q4Q5Z2ZhVm5RO6/ZlkJ8OanEf4bhW6+q//AFqKufs66ZNYeGr2WdSv2iVW
- XPpt/wDr0V1Sd2cdmtGeheK4hLod0Cob5c4+hzXm3gy1todV1N4IxFvkVmUf7v8A9c16xqMB
- uLOaJQCXQgZ9cV5tBbvpepym5V43mwcMMdOOKxqaO50UXdWZ0Uxh53R7iR9a5/xFEBZllTyg
- SOBxmujM8ccAb5SxHANcL4t1CeG5jnMInVCDhjgD8MVjK9rI7YpE1/L5emwQuxAOAcitTQrR
- RDh/nQHIB5xXN+IPE1ne2Sxw2cjTHB2x9T+fSun8Iuy6WBdBh3UP94CoUWndFuzRstbRSICu
- BjpXn3je3gmubSCYble4jXB/3ua9AubiGKAyKwK+orjYbIeJfE9vEm0CItJuboMDg/mRWid5
- HPUSSO6+HQcaRIJTlvM6Y4HA4FFbHh/TP7LsjEzh3ZtzEcD8KK6Y6Kxwzd5Nmka4rxxEv22z
- dh98MmfQ8Ef1rtTXO+MrGS90iT7P/wAfER82P3I7fiMilJXVgi7O5xtx58sSPA6+Zsx83QEd
- c1kJLdvL5dzp/m89Y5eD+YFUrfWN1zjeApO7GfzFdNbxJcxho5GikPQocVhF2ex3waZRvIoU
- RpF0653nBbATj8zVO2vL6V9sUDRRg5ZpWHA9gM5rYlspcbZr+5kXupfP9KzNVuodPj2pk7uM
- k5NOUl0Relrjr24MNlcM8vEgAUDjJ55/lW38K7cPeXt3jIjQRA+pJyf5D868xvdaWRygIY8q
- oBzzXuHw/sE0/wAL2YXmSdRPIfVmA/kMD8KdKOtzkr1NLHT5opoNFbHLcVqrXQ3RMCOMVMSa
- r3DERmgVz5o8VJPpuoTz22SiSMpUdsHFWfD/AMQra3gEd3uRl4wa6i5tory7vROoIeVyR9WN
- ctb+FtLu9xlhbIYjKtjvWSSlozru4ao1H8f6XHukSRnkYZ6E1x+ueIrjWptlnGyR92b/AArr
- LXwfpAOfJfp/eq5faNY2Noy20CrjPPejlUdR88p6HI+G9MMkhlkydnevovwXdx3Phyx2MC0c
- YjYehXj+leN6MirYYA4fOaz9R1jUtEt5p9Jv7i1dOcI2Vb6qcg0oTvKwVaV4aH0lmiuL+Fmv
- 33iPwnDe6myPciRoyyLt3YxyR0z9MUVtY4bn/9k=
-
-X-MS-OL-DESIGN;CHARSET=utf-8:<card xmlns="http://schemas.microsoft.com/office/outlook/12/electronicbusinesscards" ver="1.0" layout="left" bgcolor="ffffff"><img xmlns="" align="tleft" area="32" use="photo"/><fld xmlns="" prop="name" align="left" dir="ltr" style="b" color="000000" size="10"/><fld xmlns="" prop="org" align="left" dir="ltr" color="000000" size="8"/><fld xmlns="" prop="title" align="left" dir="ltr" color="000000" size="8"/><fld xmlns="" prop="dept" align="left" dir="ltr" color="000000" size="8"/><fld xmlns="" prop="telcell" align="left" dir="ltr" color="000000" size="8"><label align="right" color="626262">Mobile</label></fld><fld xmlns="" prop="email" align="left" dir="ltr" color="000000" size="8"/><fld xmlns="" prop="addrwork" align="left" dir="ltr" color="000000" size="8"/><fld xmlns="" prop="webwork" align="left" dir="ltr" color="000000" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/></card>
-REV:20090526T085040Z
-END:VCARD
+BEGIN:VCARD
+VERSION:2.1
+N:Traetteberg;Hallvard
+FN:Hallvard Traetteberg
+ORG:Norwegian University of Science and Technology;Dept. of Computer and Information Sciences
+TITLE:Associate Professor
+TEL;CELL;VOICE:+47 91897263
+ADR;WORK;PREF;CHARSET=Windows-1252:;;Glshaugen;Trondheim;;7491;Norway
+LABEL;WORK;PREF;CHARSET=Windows-1252;ENCODING=QUOTED-PRINTABLE:Gl=C3=B8shaugen=0D=0A=
+7491 Trondheim=0D=0A=
+Norway
+X-MS-OL-DEFAULT-POSTAL-ADDRESS:2
+URL;HOME:http://www.idi.ntnu.no/~hal
+URL;WORK:http://www.idi.ntnu.no/~hal/
+EMAIL;PREF;INTERNET:hal@idi.ntnu.no
+PHOTO;TYPE=JPEG;ENCODING=BASE64:
+ /9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQY
+ GBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYa
+ KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAAR
+ CABcAEgDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAA
+ AgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkK
+ FhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWG
+ h4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl
+ 5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREA
+ AgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYk
+ NOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOE
+ hYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk
+ 5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD6E700mhjxzXBfEn4g2HhSzeMSCTUnQmKA
+ AnnsWPYVA7nXapq1jpcPm6hdwW0fZpXC5+meteVeMPjXZ6dLJBotut3IvSaQkIfoOp/SvJEt
+ 9d8Y30l/dvIRK2WkYcH2A9KS+8D3I+5liOpzUucYuzZcaU5K6R1Fv8dNcF4jzRWrRZ+aMR8H
+ 8c5/WvQ/D/xo0W+QLqME1pJnqn7xOnU9CPyP1r55tfC19dXZhjU4B+8RWxD4OuoCQ7N6DFJ1
+ ILZlKjPsfV+i+INK1tC2lX0FztGWVG+ZR7qeRWqDXxpcxat4Zu4riCWWNozuSaIlWU/UV798
+ KfiVF4pVdP1EJFqirkMvCzAdSB2Pt+XpVrVXRm007M9OooBooEZ2tXq2On3FzI2EiQuxPYAV
+ 8lWoufGvjKe6vCWWRy7nsq9lHsBgV9IfFq8Fl4F1eQnBaBkH1bgfzrxf4PWqtY3MxUGRpMA+
+ 2KUnyxbKprmlqd9YWASGOC3XZGgCjArYj0UTR4cZz14rU063SKMEgVsRsm0AIpNcajzbnp35
+ VojlV8NwKcrEAR6cVXvdDAUsqDPauwfaOdo/OqdzcICECfiKmUUkVGTkeW6/pqz2slvNHnII
+ 6dK8ZYXGga6rRSSRGN9ySKcEYPBBr6c1a1ikieQ8fhXhnxMsBGkdwigYbB4rTDTalyvqc+Kp
+ rluj6T+HHiBvEvhCx1Cb/j4IMcxAwC68E/jwfxorlf2d7kT+AfLyCYrp1xj1VT/WiuxrU4EW
+ fjnay3PgHUBCpYoFkI9gwJ/SvMfguwGl3K5yyy5/DFevfFqK4n8HXsVqcNIAjf7pPNeKfBuG
+ YtqUa5BUKPocmolrFouCadz26C4gijjWR1Vj2JrRg8uXGCp/GvLNUjurdZ1axlvZEQvlrgxA
+ /wCyuAST7cVU0CyufsiasJLmz3OQls9w5IAxzg9QTkcjt71hyNLmO1VLvlPZGiVepXmsu7vb
+ KOUpJPCrgfd3DP5VRfUt2iRzzOzOEyR0NecavpDSxy6pHaw3E6J5oidny/PQbWXtk/41C992
+ RbbguZnfXl5bz20iQSqzA8jNeSfFFR/ZgPQs1dFYNPqdvbGXSktDICQ8TN8mDwGU56/XNYHx
+ XgkTT4VHJ3jJH0q4Q5Z2ZhVm5RO6/ZlkJ8OanEf4bhW6+q//AFqKufs66ZNYeGr2WdSv2iVW
+ XPpt/wDr0V1Sd2cdmtGeheK4hLod0Cob5c4+hzXm3gy1todV1N4IxFvkVmUf7v8A9c16xqMB
+ uLOaJQCXQgZ9cV5tBbvpepym5V43mwcMMdOOKxqaO50UXdWZ0Uxh53R7iR9a5/xFEBZllTyg
+ SOBxmujM8ccAb5SxHANcL4t1CeG5jnMInVCDhjgD8MVjK9rI7YpE1/L5emwQuxAOAcitTQrR
+ RDh/nQHIB5xXN+IPE1ne2Sxw2cjTHB2x9T+fSun8Iuy6WBdBh3UP94CoUWndFuzRstbRSICu
+ BjpXn3je3gmubSCYble4jXB/3ua9AubiGKAyKwK+orjYbIeJfE9vEm0CItJuboMDg/mRWid5
+ HPUSSO6+HQcaRIJTlvM6Y4HA4FFbHh/TP7LsjEzh3ZtzEcD8KK6Y6Kxwzd5Nmka4rxxEv22z
+ dh98MmfQ8Ef1rtTXO+MrGS90iT7P/wAfER82P3I7fiMilJXVgi7O5xtx58sSPA6+Zsx83QEd
+ c1kJLdvL5dzp/m89Y5eD+YFUrfWN1zjeApO7GfzFdNbxJcxho5GikPQocVhF2ex3waZRvIoU
+ RpF0653nBbATj8zVO2vL6V9sUDRRg5ZpWHA9gM5rYlspcbZr+5kXupfP9KzNVuodPj2pk7uM
+ k5NOUl0Relrjr24MNlcM8vEgAUDjJ55/lW38K7cPeXt3jIjQRA+pJyf5D868xvdaWRygIY8q
+ oBzzXuHw/sE0/wAL2YXmSdRPIfVmA/kMD8KdKOtzkr1NLHT5opoNFbHLcVqrXQ3RMCOMVMSa
+ r3DERmgVz5o8VJPpuoTz22SiSMpUdsHFWfD/AMQra3gEd3uRl4wa6i5tory7vROoIeVyR9WN
+ ctb+FtLu9xlhbIYjKtjvWSSlozru4ao1H8f6XHukSRnkYZ6E1x+ueIrjWptlnGyR92b/AArr
+ LXwfpAOfJfp/eq5faNY2Noy20CrjPPejlUdR88p6HI+G9MMkhlkydnevovwXdx3Phyx2MC0c
+ YjYehXj+leN6MirYYA4fOaz9R1jUtEt5p9Jv7i1dOcI2Vb6qcg0oTvKwVaV4aH0lmiuL+Fmv
+ 33iPwnDe6myPciRoyyLt3YxyR0z9MUVtY4bn/9k=
+
+X-MS-OL-DESIGN;CHARSET=utf-8:<card xmlns="http://schemas.microsoft.com/office/outlook/12/electronicbusinesscards" ver="1.0" layout="left" bgcolor="ffffff"><img xmlns="" align="tleft" area="32" use="photo"/><fld xmlns="" prop="name" align="left" dir="ltr" style="b" color="000000" size="10"/><fld xmlns="" prop="org" align="left" dir="ltr" color="000000" size="8"/><fld xmlns="" prop="title" align="left" dir="ltr" color="000000" size="8"/><fld xmlns="" prop="dept" align="left" dir="ltr" color="000000" size="8"/><fld xmlns="" prop="telcell" align="left" dir="ltr" color="000000" size="8"><label align="right" color="626262">Mobile</label></fld><fld xmlns="" prop="email" align="left" dir="ltr" color="000000" size="8"/><fld xmlns="" prop="addrwork" align="left" dir="ltr" color="000000" size="8"/><fld xmlns="" prop="webwork" align="left" dir="ltr" color="000000" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/></card>
+REV:20090526T085040Z
+END:VCARD
diff --git a/demos/org.eclipse.fx.demo.contacts.app/vcards/Kai Toedter.vcf b/demos/org.eclipse.fx.demo.contacts.app/vcards/Kai Toedter.vcf
index 0a64e4c3e..31ec145a8 100755
--- a/demos/org.eclipse.fx.demo.contacts.app/vcards/Kai Toedter.vcf
+++ b/demos/org.eclipse.fx.demo.contacts.app/vcards/Kai Toedter.vcf
@@ -13,4 +13,4 @@ EMAIL;PREF;INTERNET:kai.toedter@siemens.com
PHOTO;TYPE=JPEG;ENCODING=BASE64:
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
END:VCARD
-
+
diff --git a/demos/org.eclipse.fx.demo.contacts.app/vcards/Kevin McGuire.vcf b/demos/org.eclipse.fx.demo.contacts.app/vcards/Kevin McGuire.vcf
index cf2097dce..5b66c8b83 100755
--- a/demos/org.eclipse.fx.demo.contacts.app/vcards/Kevin McGuire.vcf
+++ b/demos/org.eclipse.fx.demo.contacts.app/vcards/Kevin McGuire.vcf
@@ -1,58 +1,58 @@
-BEGIN:VCARD
-VERSION:2.1
-N:McGuire;Kevin
-FN:Kevin McGuire
-ORG:IBM Canada
-TITLE:Eclipse UI Guy
-ADR;WORK:;;2670 Queensview Drive;Ottawa;Ontario;K2B 8K1;Canada
-LABEL;WORK;ENCODING=QUOTED-PRINTABLE:2670 Queensview Drive=0D=0A=
-Ottawa Ontario K2B 8K1=0D=0A=
-Canada
-X-MS-OL-DEFAULT-POSTAL-ADDRESS:0
-EMAIL;PREF;INTERNET:kevin_mcguire@ca.ibm.com
-PHOTO;TYPE=JPEG;ENCODING=BASE64:
- /9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQY
- GBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYa
- KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAAR
- CABcAEgDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAA
- AgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkK
- FhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWG
- h4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl
- 5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREA
- AgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYk
- NOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOE
- hYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk
- 5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD5npwpBUsMTSyBEGWPSkMYKcAScAEmtePS
- QhDTmXGMkKnT2NWTpdnM4ZFYBxgMHOSajmRfIzF+zyAgbeT0GetNkjkjOJEZTkjDDHI61taT
- pipdMLmcnIwu48Z7Z/L6VuvaWqiCJ285Dx85LAqP4fTd2yOemAez5kHIzhscUma3dZ0kQS3D
- wDYiHcsbdSvqPcdx/SsM0yWrCUUYzRTERit3w3b/AOtuH2jjy4yeTuPoKwhXo3wn0tL3XLNr
- oZjiLSqOzEDj9T+lZVpcsGzahDnmkaXh74f6jqs6zajK8UHGIsnJ+vvWtefD5rXUIZo2lkiT
- AUZ6eoNe02VtGsY4Apl5ErI+B8wNeW683rc9tYamlax4Zqvgxd6yOpAA9apm2TT7aZHjeeEj
- iIn+LBxg9u2a9T1pfmIIFcZf6ct3JNboMTOuIyOPm/8Ar1dOrJyWplWoxS0Rw8trPe6nMSBL
- DgBVkGWGVz1578fjXKaxZNYahLbsCApBXPBweRXoEVrNawNBIJEu1ZoniKHcpAJVvocH8xXN
- /EiNI9fVkOTJCrN9eR/ICvRhJtnlVIJI5biikorQwIhXonwe1Ax+J7SBu4dR9Nuf6V52K6Tw
- Kp/txXjLCREbBEm3AYbT2JJ+btis68eaDRth21UVj6eu/Eml2BWO5vIlc8bFbLflUn9qW7Wx
- uY3LRYzyegryf+w9SfzIrHT4onjAzNOwbJI6jJ4xx/hXW6Fo8w02a21NY5oJYyHQjAZuMdvY
- 15LjFLRnvQnKTtY5nxX4uuZL54tNihcZ/wBY7cH6VzVpr2oxX8dy15BJKjcxCI4OD0OcfpWl
- YWMcXiJ0OPkcqijjA7D6V0l54dgMfm+QqqpyEVQBmtVOMNkZSpVJvUsMZvGulXOr3UFpbXth
- ECr224SZLYxJuGGUfe74x1rzDxTatcJNFdrm7t0Z0YN90Z3FT68ZPtXuPwtjSFdTW7QC2u0E
- OG/i5ww/I1538QdHtdL8YeILXT1dtOt4C3ztnZvj3AD2wfyrpU5cqZzKlBylF9jxviioyeaK
- 7DySMGtDRb9tN1S2u0G7ynyy/wB5ehH4jNZ1OBoaurDTad0fXmitZ31pFeqwMLxrIp9QRkVU
- j1WCa6lkYeXbRvsBA3ZIGf8ACvPfhVrUmpeFZNNifF3aDYNx6qxO0/h0/CurgW60+KGKOxL2
- wkKvKXB2/wC0R1P4V4k4cs3Fn09Gqp01KPU4PxIzLq872cUr5bck4BXFdXpmsG4sFhmYtKqD
- JYYqx4gSSa2zFD5addwjAz+JPH5Vzvhu32X0kt3IzI5Ee3jA9auSVhXlF3Oi0PVJbO+S0nBC
- xyeag+uM1xfxn1sQeJdR8htzX9uik/3VwB/JcVv67OreJVMR4JxxXH/GTT44rjSL/JHnQCKX
- 1DBnw35YB/CurDvnsmebim4Xcep5pRU81u8XUbl/vDkUV3nlESQSNzt2j1bgVKIFX7z5/wB0
- f1p5JY/MSaaBkkelTcuyNXwhrVxoniCC4tBmMfLMmcb0PUfXuPcV9IaDq9prNgk0EgeOUZBH
- r7+9fMFn8tx8vauw+HmpS2niK2svPaOC6ymM8B8ZU/nx+NcmJoqa5lujtwld03y9Ge73umRP
- DIW3Pjpk4rh/EU0Onw/u12kH7orXv9Z1KGBoxGGZeMmvNvEE19eTn7ScZ7LxmuKEL7npVKqt
- puT2uqM7yahMOF+WMH+Jv/rVz/xI1z+0rHS7dseZDEd4z0Jc4/Rf1q/ZwtKRv4SMYA7AVwet
- zfaNUmIPyl8D6DgV3Yde9p0PNxT9zXqLBdyQ3TOhOCAD70VXjGCc0V12OFNlrIxxTUb59pGR
- TAflqbpKQOBntSGSLmOVie9ElxLbiK5hYrNE4kRh2IwR/KhxyD61SuZnF0IeDHjpQlcG7H0R
- 4b1y28SaTBeRFFuCoEsZ/vd6xPEVrJc6giwQMqj77EAD8K848CXc9netHBIwRmII9a9c0x2u
- CDKcmvNqQ9nKyPVpT9pFNnKayi6To1xKcCQjC/U9K8ic7rlj6V6n8V5GjNvCvCHLEe44/rXl
- EZyzHvXZho2jfucOLlefL2LKDIop0PC5orc50f/Z
-
-X-MS-OL-DESIGN;CHARSET=utf-8:<card xmlns="http://schemas.microsoft.com/office/outlook/12/electronicbusinesscards" ver="1.0" layout="left" bgcolor="ffffff"><img xmlns="" align="tleft" area="32" use="photo"/><fld xmlns="" prop="name" align="left" dir="ltr" style="b" color="000000" size="10"/><fld xmlns="" prop="org" align="left" dir="ltr" color="000000" size="8"/><fld xmlns="" prop="title" align="left" dir="ltr" color="000000" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="email" align="left" dir="ltr" color="000000" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="addrwork" align="left" dir="ltr" color="000000" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/></card>
-REV:20090529T154834Z
-END:VCARD
+BEGIN:VCARD
+VERSION:2.1
+N:McGuire;Kevin
+FN:Kevin McGuire
+ORG:IBM Canada
+TITLE:Eclipse UI Guy
+ADR;WORK:;;2670 Queensview Drive;Ottawa;Ontario;K2B 8K1;Canada
+LABEL;WORK;ENCODING=QUOTED-PRINTABLE:2670 Queensview Drive=0D=0A=
+Ottawa Ontario K2B 8K1=0D=0A=
+Canada
+X-MS-OL-DEFAULT-POSTAL-ADDRESS:0
+EMAIL;PREF;INTERNET:kevin_mcguire@ca.ibm.com
+PHOTO;TYPE=JPEG;ENCODING=BASE64:
+ /9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQY
+ GBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYa
+ KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAAR
+ CABcAEgDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAA
+ AgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkK
+ FhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWG
+ h4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl
+ 5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREA
+ AgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYk
+ NOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOE
+ hYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk
+ 5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD5npwpBUsMTSyBEGWPSkMYKcAScAEmtePS
+ QhDTmXGMkKnT2NWTpdnM4ZFYBxgMHOSajmRfIzF+zyAgbeT0GetNkjkjOJEZTkjDDHI61taT
+ pipdMLmcnIwu48Z7Z/L6VuvaWqiCJ285Dx85LAqP4fTd2yOemAez5kHIzhscUma3dZ0kQS3D
+ wDYiHcsbdSvqPcdx/SsM0yWrCUUYzRTERit3w3b/AOtuH2jjy4yeTuPoKwhXo3wn0tL3XLNr
+ oZjiLSqOzEDj9T+lZVpcsGzahDnmkaXh74f6jqs6zajK8UHGIsnJ+vvWtefD5rXUIZo2lkiT
+ AUZ6eoNe02VtGsY4Apl5ErI+B8wNeW683rc9tYamlax4Zqvgxd6yOpAA9apm2TT7aZHjeeEj
+ iIn+LBxg9u2a9T1pfmIIFcZf6ct3JNboMTOuIyOPm/8Ar1dOrJyWplWoxS0Rw8trPe6nMSBL
+ DgBVkGWGVz1578fjXKaxZNYahLbsCApBXPBweRXoEVrNawNBIJEu1ZoniKHcpAJVvocH8xXN
+ /EiNI9fVkOTJCrN9eR/ICvRhJtnlVIJI5biikorQwIhXonwe1Ax+J7SBu4dR9Nuf6V52K6Tw
+ Kp/txXjLCREbBEm3AYbT2JJ+btis68eaDRth21UVj6eu/Eml2BWO5vIlc8bFbLflUn9qW7Wx
+ uY3LRYzyegryf+w9SfzIrHT4onjAzNOwbJI6jJ4xx/hXW6Fo8w02a21NY5oJYyHQjAZuMdvY
+ 15LjFLRnvQnKTtY5nxX4uuZL54tNihcZ/wBY7cH6VzVpr2oxX8dy15BJKjcxCI4OD0OcfpWl
+ YWMcXiJ0OPkcqijjA7D6V0l54dgMfm+QqqpyEVQBmtVOMNkZSpVJvUsMZvGulXOr3UFpbXth
+ ECr224SZLYxJuGGUfe74x1rzDxTatcJNFdrm7t0Z0YN90Z3FT68ZPtXuPwtjSFdTW7QC2u0E
+ OG/i5ww/I1538QdHtdL8YeILXT1dtOt4C3ztnZvj3AD2wfyrpU5cqZzKlBylF9jxviioyeaK
+ 7DySMGtDRb9tN1S2u0G7ynyy/wB5ehH4jNZ1OBoaurDTad0fXmitZ31pFeqwMLxrIp9QRkVU
+ j1WCa6lkYeXbRvsBA3ZIGf8ACvPfhVrUmpeFZNNifF3aDYNx6qxO0/h0/CurgW60+KGKOxL2
+ wkKvKXB2/wC0R1P4V4k4cs3Fn09Gqp01KPU4PxIzLq872cUr5bck4BXFdXpmsG4sFhmYtKqD
+ JYYqx4gSSa2zFD5addwjAz+JPH5Vzvhu32X0kt3IzI5Ee3jA9auSVhXlF3Oi0PVJbO+S0nBC
+ xyeag+uM1xfxn1sQeJdR8htzX9uik/3VwB/JcVv67OreJVMR4JxxXH/GTT44rjSL/JHnQCKX
+ 1DBnw35YB/CurDvnsmebim4Xcep5pRU81u8XUbl/vDkUV3nlESQSNzt2j1bgVKIFX7z5/wB0
+ f1p5JY/MSaaBkkelTcuyNXwhrVxoniCC4tBmMfLMmcb0PUfXuPcV9IaDq9prNgk0EgeOUZBH
+ r7+9fMFn8tx8vauw+HmpS2niK2svPaOC6ymM8B8ZU/nx+NcmJoqa5lujtwld03y9Ge73umRP
+ DIW3Pjpk4rh/EU0Onw/u12kH7orXv9Z1KGBoxGGZeMmvNvEE19eTn7ScZ7LxmuKEL7npVKqt
+ puT2uqM7yahMOF+WMH+Jv/rVz/xI1z+0rHS7dseZDEd4z0Jc4/Rf1q/ZwtKRv4SMYA7AVwet
+ zfaNUmIPyl8D6DgV3Yde9p0PNxT9zXqLBdyQ3TOhOCAD70VXjGCc0V12OFNlrIxxTUb59pGR
+ TAflqbpKQOBntSGSLmOVie9ElxLbiK5hYrNE4kRh2IwR/KhxyD61SuZnF0IeDHjpQlcG7H0R
+ 4b1y28SaTBeRFFuCoEsZ/vd6xPEVrJc6giwQMqj77EAD8K848CXc9netHBIwRmII9a9c0x2u
+ CDKcmvNqQ9nKyPVpT9pFNnKayi6To1xKcCQjC/U9K8ic7rlj6V6n8V5GjNvCvCHLEe44/rXl
+ EZyzHvXZho2jfucOLlefL2LKDIop0PC5orc50f/Z
+
+X-MS-OL-DESIGN;CHARSET=utf-8:<card xmlns="http://schemas.microsoft.com/office/outlook/12/electronicbusinesscards" ver="1.0" layout="left" bgcolor="ffffff"><img xmlns="" align="tleft" area="32" use="photo"/><fld xmlns="" prop="name" align="left" dir="ltr" style="b" color="000000" size="10"/><fld xmlns="" prop="org" align="left" dir="ltr" color="000000" size="8"/><fld xmlns="" prop="title" align="left" dir="ltr" color="000000" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="email" align="left" dir="ltr" color="000000" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="addrwork" align="left" dir="ltr" color="000000" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/></card>
+REV:20090529T154834Z
+END:VCARD
diff --git a/demos/org.eclipse.fx.demo.contacts.app/vcards/Lars Vogel.vcf b/demos/org.eclipse.fx.demo.contacts.app/vcards/Lars Vogel.vcf
index 9b243374a..b11068b91 100755
--- a/demos/org.eclipse.fx.demo.contacts.app/vcards/Lars Vogel.vcf
+++ b/demos/org.eclipse.fx.demo.contacts.app/vcards/Lars Vogel.vcf
@@ -13,4 +13,4 @@ EMAIL;PREF;INTERNET:Lars.Vogel@gmail.com
PHOTO;TYPE=JPEG;ENCODING=BASE64:
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
END:VCARD
-
+
diff --git a/demos/org.eclipse.fx.demo.contacts.app/vcards/Peter Friese.vcf b/demos/org.eclipse.fx.demo.contacts.app/vcards/Peter Friese.vcf
index df31b274d..212b144a7 100755
--- a/demos/org.eclipse.fx.demo.contacts.app/vcards/Peter Friese.vcf
+++ b/demos/org.eclipse.fx.demo.contacts.app/vcards/Peter Friese.vcf
@@ -1,61 +1,61 @@
-BEGIN:VCARD
-VERSION:2.1
-N:Friese;Peter
-FN:Peter Friese
-ORG:itemis
-TEL;WORK;VOICE:+49 431 5606-338
-TEL;PREF:+49 431 5606-338
-ADR;WORK;PREF;CHARSET=Windows-1252:;;Schauenburgerstrae 116;Kiel;;24118;Germany
-LABEL;WORK;PREF;CHARSET=Windows-1252;ENCODING=QUOTED-PRINTABLE:Schauenburgerstra=DFe 116=0D=0A=
-=0D=0A=
-24118 Kiel
-X-MS-OL-DEFAULT-POSTAL-ADDRESS:2
-EMAIL;PREF;INTERNET:peter.friese@itemis.de
-PHOTO;TYPE=JPEG;ENCODING=BASE64:
- /9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQY
- GBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYa
- KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAAR
- CABgAEUDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAA
- AgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkK
- FhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWG
- h4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl
- 5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREA
- AgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYk
- NOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOE
- hYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk
- 5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD0vINOAFN2expQn1r61nz1yQCjb7Vn6tqV
- tpVsZ72ZYo+m5jxXDXXxV063nkgaGSTIISWBwwJxxx1H61jUrQp/EzWnSnU+FHpB2jGeMnFO
- Cqe9eJ/8Ldni861mhjuDxsmHykD8uSPwrqPDHxGsJ/tB1SRLXLFlLE46cj8/51jHF05uyZpL
- C1Iq7R6MEHY07yz6g1V02+g1C0iubVleKQblIIPH4Vb/AANdFznEEbe1FPBopXDQM/7I/Ksn
- xTr9p4c0WfUbtMpGMBR1Zj0Fdm1nJ/s/lXg37Tc88A0mxyBE4aVlHcjgf1rlniEoto6YUG5J
- M8q8T+K9Q8T6oZrp28ok+XEpOEHpiqFvYmWdRISDkEN/iKueH7ELB5zjLv0z2Fb9vbKzrkDN
- ePUblqz2qNLRWKM2iPdO4CKZkmKhlGPlNJceGNRSWWRImZVbr1/z1r13wZYQsV+0xgsccnnN
- evaHodlf2rDy1jAH3l71xOq+blR6Dw0Yx557Hyt4b8Qav4aut9vO4tFYCW2kOQfUAZGPwr6P
- 8PaxYa1pcF7ajMUi/ke4/OvMfi94Xj0fVVnEe9LolDgkZI6YNS/AeNzc6nEJG+z7UcBsjDZI
- PHTPb3xXp4LEuXuSPIx2FUffgeu/6P6fpRUv2Vf7y0V6PMu55dpdjRMje9fPv7TULyapoznO
- 0wuv4hv/AK9fRWwHrXz7+0Pdre6/Y6dDGS1qgZ2B5O/nAH0FccpK1jvhCTdzzmGDZbwJF2QZ
- rU0m0E1xsmlCccGsC+vG3/uvMHoqL0+tSadqpRsTOR/v8EVxVH2PVotLRnrPhqSO2u4YxIee
- CQ2RXuGjW6/2aJBkKOeOK+W7fURaoLlXVu4O/ivUPhz8UIZmWwv0GCQqur5Ga42rO53TblDl
- jubfxlQXelWnlLmRJfkGO+K5b4MWbR32qlVKwgKpU9jk/wCBrovi3ex29np1z1heUnK/Stf4
- Z6csehG7UhvtTb8+w4/xrpwTandnnY5L2fKjeEQ9DRWkIT7UV6ftTx/ZDS64614B8Yof+K8k
- lA4+zI2fwx/jXum4eteYfGjT4xDa6orHzP8Aj3ZccEcsD/Os6kbRudFGd527nhk8bKxCgkfX
- FGm2f2jVLTOAGkC4BzznqaWeR55mUD5VPPvU9jcGGWPcoXaQQwFcLnoz2YQjzJM9l+IngKPU
- JdNltGhhMlqsYB43uBnNcno3gESXKxNcw/aUOdlspaQEfpXRa34guta8BNsREWFowkm7LhfU
- enOKofDfxzcWV+ljfFSWbAkIwxPue9cvM1HyO72cU+7O5vtHEuhWNv4huTcpHKnJjwIxjHOO
- Wx3JroPAT3S6I6Xjbtk8iRkDA2BsDHtxVm+tYtVt2EmAGAcfXtVy0UW1ukSY2qPzrTAxlOXN
- 0RwY+tCFHk+03+RoeaKKq7/pRXq8h4fOZpmA6sB+Ncn8RoodU8M3MCSxm4ixMi7hkkdR+RNc
- w92zc7VH4/8A164P4n+J5tMsEs7SXZc3IO5l6qn/ANes5YpTXLY2WHcHzXOX1C1NwHETFJMZ
- BU45q3pJhuQkU0MouMAHyznJ+hqGCT9zEwOTtB/SrFok1zdAWwZpCeAByK4mrI9Wk+aWrOvE
- WvJp0lnoVrezmRdux0Qrj3NYWkafeya/Cl4Qs8ThpNq4Cc816x4BtdVsbP8A09QqMPlzycVa
- g8Pwza1LPtXDv5kpHfHQVxTqpXR6E6eqadzXTxJZWiLHNvaZF52gHGe3Wl/4TC1P3IZj9cCv
- n/wH4guP7Y1S2eVyks8kgBY/e3H3ruGvJW43j8Tn+denRqqlBRR4Nan7Wbmz0N/GUSnC2sh/
- 4F/9aivOzcPnLOPyH+FFafWvP8DL6uiJ3mCktwByTmvD/G2p/wBp6/cTI++NSEQ+wrb8TfEC
- 61APbacv2a1bKsx5dh/SuFdt0n41zRTWrNZyvojtrKctaxYPIUCtGx1N7SUOoZW9R3rndNlx
- EvpWvC2eozUyOqnJ7o9b8J+Mb/UhDYJEzY/i9K6rxt4kh8I+Fp7l2BvJEKwpnkuR1+g615t4
- E1y10mOea42xhACSeuPavPfiX4sn8Sak80hKwj5Yo88Kv+Ncfseefkdsq/s6fM3dlbwtdm1n
- F1je5fcw9eSTXqtld2t9GjW8qkkZK5G4fhXjug7xaBiOrfLV2+uDHcjyHKsgxlTjmu5xujyl
- I9hxxzn8xRXllt4p1SGIJ9p3Af3xk/nRU8jHzI//2Q==
-
-X-MS-OL-DESIGN;CHARSET=utf-8:<card xmlns="http://schemas.microsoft.com/office/outlook/12/electronicbusinesscards" ver="1.0" layout="left" bgcolor="ffffff"><img xmlns="" align="tleft" area="32" use="photo"/><fld xmlns="" prop="name" align="left" dir="ltr" style="b" color="000000" size="10"/><fld xmlns="" prop="org" align="left" dir="ltr" color="000000" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="telwork" align="left" dir="ltr" color="000000" size="8"><label align="right" color="626262">Work</label></fld><fld xmlns="" prop="telpri" align="left" dir="ltr" color="000000" size="8"><label align="right" color="626262">Primary</label></fld><fld xmlns="" prop="email" align="left" dir="ltr" color="000000" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="addrwork" align="left" dir="ltr" color="000000" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/></card>
-REV:20090526T042241Z
-END:VCARD
+BEGIN:VCARD
+VERSION:2.1
+N:Friese;Peter
+FN:Peter Friese
+ORG:itemis
+TEL;WORK;VOICE:+49 431 5606-338
+TEL;PREF:+49 431 5606-338
+ADR;WORK;PREF;CHARSET=Windows-1252:;;Schauenburgerstrae 116;Kiel;;24118;Germany
+LABEL;WORK;PREF;CHARSET=Windows-1252;ENCODING=QUOTED-PRINTABLE:Schauenburgerstra=DFe 116=0D=0A=
+=0D=0A=
+24118 Kiel
+X-MS-OL-DEFAULT-POSTAL-ADDRESS:2
+EMAIL;PREF;INTERNET:peter.friese@itemis.de
+PHOTO;TYPE=JPEG;ENCODING=BASE64:
+ /9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQY
+ GBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYa
+ KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAAR
+ CABgAEUDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAA
+ AgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkK
+ FhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWG
+ h4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl
+ 5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREA
+ AgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYk
+ NOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOE
+ hYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk
+ 5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD0vINOAFN2expQn1r61nz1yQCjb7Vn6tqV
+ tpVsZ72ZYo+m5jxXDXXxV063nkgaGSTIISWBwwJxxx1H61jUrQp/EzWnSnU+FHpB2jGeMnFO
+ Cqe9eJ/8Ldni861mhjuDxsmHykD8uSPwrqPDHxGsJ/tB1SRLXLFlLE46cj8/51jHF05uyZpL
+ C1Iq7R6MEHY07yz6g1V02+g1C0iubVleKQblIIPH4Vb/AANdFznEEbe1FPBopXDQM/7I/Ksn
+ xTr9p4c0WfUbtMpGMBR1Zj0Fdm1nJ/s/lXg37Tc88A0mxyBE4aVlHcjgf1rlniEoto6YUG5J
+ M8q8T+K9Q8T6oZrp28ok+XEpOEHpiqFvYmWdRISDkEN/iKueH7ELB5zjLv0z2Fb9vbKzrkDN
+ ePUblqz2qNLRWKM2iPdO4CKZkmKhlGPlNJceGNRSWWRImZVbr1/z1r13wZYQsV+0xgsccnnN
+ evaHodlf2rDy1jAH3l71xOq+blR6Dw0Yx557Hyt4b8Qav4aut9vO4tFYCW2kOQfUAZGPwr6P
+ 8PaxYa1pcF7ajMUi/ke4/OvMfi94Xj0fVVnEe9LolDgkZI6YNS/AeNzc6nEJG+z7UcBsjDZI
+ PHTPb3xXp4LEuXuSPIx2FUffgeu/6P6fpRUv2Vf7y0V6PMu55dpdjRMje9fPv7TULyapoznO
+ 0wuv4hv/AK9fRWwHrXz7+0Pdre6/Y6dDGS1qgZ2B5O/nAH0FccpK1jvhCTdzzmGDZbwJF2QZ
+ rU0m0E1xsmlCccGsC+vG3/uvMHoqL0+tSadqpRsTOR/v8EVxVH2PVotLRnrPhqSO2u4YxIee
+ CQ2RXuGjW6/2aJBkKOeOK+W7fURaoLlXVu4O/ivUPhz8UIZmWwv0GCQqur5Ga42rO53TblDl
+ jubfxlQXelWnlLmRJfkGO+K5b4MWbR32qlVKwgKpU9jk/wCBrovi3ex29np1z1heUnK/Stf4
+ Z6csehG7UhvtTb8+w4/xrpwTandnnY5L2fKjeEQ9DRWkIT7UV6ftTx/ZDS64614B8Yof+K8k
+ lA4+zI2fwx/jXum4eteYfGjT4xDa6orHzP8Aj3ZccEcsD/Os6kbRudFGd527nhk8bKxCgkfX
+ FGm2f2jVLTOAGkC4BzznqaWeR55mUD5VPPvU9jcGGWPcoXaQQwFcLnoz2YQjzJM9l+IngKPU
+ JdNltGhhMlqsYB43uBnNcno3gESXKxNcw/aUOdlspaQEfpXRa34guta8BNsREWFowkm7LhfU
+ enOKofDfxzcWV+ljfFSWbAkIwxPue9cvM1HyO72cU+7O5vtHEuhWNv4huTcpHKnJjwIxjHOO
+ Wx3JroPAT3S6I6Xjbtk8iRkDA2BsDHtxVm+tYtVt2EmAGAcfXtVy0UW1ukSY2qPzrTAxlOXN
+ 0RwY+tCFHk+03+RoeaKKq7/pRXq8h4fOZpmA6sB+Ncn8RoodU8M3MCSxm4ixMi7hkkdR+RNc
+ w92zc7VH4/8A164P4n+J5tMsEs7SXZc3IO5l6qn/ANes5YpTXLY2WHcHzXOX1C1NwHETFJMZ
+ BU45q3pJhuQkU0MouMAHyznJ+hqGCT9zEwOTtB/SrFok1zdAWwZpCeAByK4mrI9Wk+aWrOvE
+ WvJp0lnoVrezmRdux0Qrj3NYWkafeya/Cl4Qs8ThpNq4Cc816x4BtdVsbP8A09QqMPlzycVa
+ g8Pwza1LPtXDv5kpHfHQVxTqpXR6E6eqadzXTxJZWiLHNvaZF52gHGe3Wl/4TC1P3IZj9cCv
+ n/wH4guP7Y1S2eVyks8kgBY/e3H3ruGvJW43j8Tn+denRqqlBRR4Nan7Wbmz0N/GUSnC2sh/
+ 4F/9aivOzcPnLOPyH+FFafWvP8DL6uiJ3mCktwByTmvD/G2p/wBp6/cTI++NSEQ+wrb8TfEC
+ 61APbacv2a1bKsx5dh/SuFdt0n41zRTWrNZyvojtrKctaxYPIUCtGx1N7SUOoZW9R3rndNlx
+ EvpWvC2eozUyOqnJ7o9b8J+Mb/UhDYJEzY/i9K6rxt4kh8I+Fp7l2BvJEKwpnkuR1+g615t4
+ E1y10mOea42xhACSeuPavPfiX4sn8Sak80hKwj5Yo88Kv+Ncfseefkdsq/s6fM3dlbwtdm1n
+ F1je5fcw9eSTXqtld2t9GjW8qkkZK5G4fhXjug7xaBiOrfLV2+uDHcjyHKsgxlTjmu5xujyl
+ I9hxxzn8xRXllt4p1SGIJ9p3Af3xk/nRU8jHzI//2Q==
+
+X-MS-OL-DESIGN;CHARSET=utf-8:<card xmlns="http://schemas.microsoft.com/office/outlook/12/electronicbusinesscards" ver="1.0" layout="left" bgcolor="ffffff"><img xmlns="" align="tleft" area="32" use="photo"/><fld xmlns="" prop="name" align="left" dir="ltr" style="b" color="000000" size="10"/><fld xmlns="" prop="org" align="left" dir="ltr" color="000000" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="telwork" align="left" dir="ltr" color="000000" size="8"><label align="right" color="626262">Work</label></fld><fld xmlns="" prop="telpri" align="left" dir="ltr" color="000000" size="8"><label align="right" color="626262">Primary</label></fld><fld xmlns="" prop="email" align="left" dir="ltr" color="000000" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="addrwork" align="left" dir="ltr" color="000000" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/></card>
+REV:20090526T042241Z
+END:VCARD
diff --git a/demos/org.eclipse.fx.demo.contacts.app/vcards/Tom Schindl.vcf b/demos/org.eclipse.fx.demo.contacts.app/vcards/Tom Schindl.vcf
index 2cf757e96..719fbf274 100755
--- a/demos/org.eclipse.fx.demo.contacts.app/vcards/Tom Schindl.vcf
+++ b/demos/org.eclipse.fx.demo.contacts.app/vcards/Tom Schindl.vcf
@@ -1,55 +1,55 @@
-BEGIN:VCARD
-VERSION:2.1
-N:Schindl;Tom
-FN:Tom Schindl
-ORG:BestSolution.at Systemhaus Gmbh
-TEL;WORK;VOICE:0676 323 21 47
-TEL;CELL;VOICE:0676 323 21 47
-TEL;PREF:0676 323 21 47
-ADR;WORK;PREF;CHARSET=Windows-1252:;;Eduard-Bodemgasse 6;Innsbruck;;6020;sterreich
-LABEL;WORK;PREF;CHARSET=Windows-1252;ENCODING=QUOTED-PRINTABLE:Eduard-Bodemgasse 6=0D=0A=
-6020 Innsbruck=0D=0A=
-=D6sterreich
-X-MS-OL-DEFAULT-POSTAL-ADDRESS:2
-EMAIL;PREF;INTERNET:tom.schindl@bestsolution.at
-PHOTO;TYPE=JPEG;ENCODING=BASE64:
- /9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQY
- GBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYa
- KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAAR
- CABTAEgDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAA
- AgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkK
- FhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWG
- h4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl
- 5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREA
- AgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYk
- NOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOE
- hYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk
- 5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD6ppHYKMmhjtGa8Y+M/wAQp7C1l0vQXH2l
- srNcbsBB3VT6/wAqmUlFXY0rnW+LPiRoeheZE93FLcrwYkbp9T2rzzUPjaXdks7SMdlZ3JFf
- PKrdSXMjXUbSsW3FtxOalXbPMAlwseHKkdSBXPKcnszRRXU9yHxpmjj/ANJggL/9M92B9a6z
- wn8SotXVfN2RyHptOQa+cLfR7VC00ySHP3drfzrT0e7XT7jzY8ptKsno3PSs1Wae9ynTR9f6
- XqyXAGGBrcRw65FfO/grxmXuBBODHKDjBOa9p0PVFuIl+auyMlJXRi01udDRSI25c0VQjN8R
- 3K2uj3czsVSOJnJBxwBmvkyOzufE2pTX0jHYznb6KM19QfEVXk8IaskX32tnA/KvDfDlsLTR
- bZIhklck+pJrlxMrWOrCxUpanJXHg6VrrO+RgR8p7D6+tNbwn5SyOYxI/I2465r0FvNOBt5p
- fsk4OcAmuKU5W3O9U49UcPDpcWm2iBQBJtJ2dR9K5zUmjZ1QgKu4Er34PUf57V6dqdh5Y8wx
- k8cZ9a8t8TQlr+F0wuHO76VFJ80tTCtBJaFf+0Ge7ivIpStxbSbQOnmJ6GvoHwHrJlEYLdcV
- 806kyRqrDG8yYOPTpXsvw3ui/wBnbJOVU8/QV6VBWOGofSOnS+ZCD7UVS8PvugX6UV0GY/xJ
- b/atKuYAcGSNkz9RXzNc6/daNaJZfZADBlHllcICQTnFfU18u6Bq+dvHnhW31XUrpyAZSzoQ
- WOAM1hXS0udOGvd8pkReI3mtllUA4HJQ7gPyrktT8V6kbphDeFFGTtjTccDvXc+CPCdrpFhq
- A4YOMYJ4FYq+FdOuL9mikVHHUex9vSua8FKzPRtNx8zL8NeLjdtsluzcoTgh1KsPpWv4k0qK
- eye4iGWCliPWuh07R9O0yEKIo3I5DFRgfgKivZEcMigbTkVzVLKV46CUHa0jw8xSm8X5WeIN
- lgOuO9ey+AgiTQeSW8oqpXd1xjvXPHw3HHfpPE5VUQvKD0K5Oa6nwHCz3EbBcKMAAdgK9ChL
- nd0cVekqcF3Z774bP7hPpRTvDsZWBM+lFdJxmtcjMLV8/wDxCuZrDWbuGMHc8mV/GvoSQZQi
- vGPi7ozPdw3icA4QsOx7VlWV43OjDT5JnnGqeIL3Sl+zQpHuKA+of61mS397fLFd3c0a3KAq
- qxrtAHpS+ILSSNf9Ju3YgcMFxWTaaW14FX7TcqueqtXK1FLmPUu7Xubdvqs86r15rUhl2Rhp
- DzWO6RWBSEZwoySe5qlNqnmThFJ2g84rnmuf4SXLTU1L68urq7+wRjbAACxHVs84+len+AtH
- KKhK1wnhOwe+vvOdfvHj2Fe9eF9OEMKcV6VGHJBI8mrUc5XOg06HyoQPairSjAwKK1MxawPE
- umpfWcsUi7lYYNb9MmjDoQaAPmDxXJHpF61rfQjKk7Sw+8PWuVvvFVpBGViRU+gr6S8XeFbP
- V4Gju7aOZe25c4+leW6h8LdOWQmO0AHuSa53h0zsWLaVjxm41e41GbESklugFdL4Z0CeaRWm
- UlienpXoem/D+G3bEUCJ9BXc6B4USAqSg/KrhSUTGdaUtCr4L0DyVQla9RsYRFEABVbTbBbd
- AABxWmBgcVqYhRRRQAUUUUARTqCORWbPDGTygoooAjigiz9wVo28ajoooooAtDiiiigAoooo
- A//Z
-
-X-MS-OL-DESIGN;CHARSET=utf-8:<card xmlns="http://schemas.microsoft.com/office/outlook/12/electronicbusinesscards" ver="1.0" layout="left" bgcolor="ffffff"><img xmlns="" align="tleft" area="32" use="photo"/><fld xmlns="" prop="name" align="left" dir="ltr" style="b" color="000000" size="10"/><fld xmlns="" prop="org" align="left" dir="ltr" color="000000" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="telwork" align="left" dir="ltr" color="000000" size="8"><label align="right" color="626262">Work</label></fld><fld xmlns="" prop="telpri" align="left" dir="ltr" color="000000" size="8"><label align="right" color="626262">Primary</label></fld><fld xmlns="" prop="telcell" align="left" dir="ltr" color="000000" size="8"><label align="right" color="626262">Mobile</label></fld><fld xmlns="" prop="email" align="left" dir="ltr" color="000000" size="8"/><fld xmlns="" prop="addrwork" align="left" dir="ltr" color="000000" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/></card>
-REV:20090528T104730Z
-END:VCARD
+BEGIN:VCARD
+VERSION:2.1
+N:Schindl;Tom
+FN:Tom Schindl
+ORG:BestSolution.at Systemhaus Gmbh
+TEL;WORK;VOICE:0676 323 21 47
+TEL;CELL;VOICE:0676 323 21 47
+TEL;PREF:0676 323 21 47
+ADR;WORK;PREF;CHARSET=Windows-1252:;;Eduard-Bodemgasse 6;Innsbruck;;6020;sterreich
+LABEL;WORK;PREF;CHARSET=Windows-1252;ENCODING=QUOTED-PRINTABLE:Eduard-Bodemgasse 6=0D=0A=
+6020 Innsbruck=0D=0A=
+=D6sterreich
+X-MS-OL-DEFAULT-POSTAL-ADDRESS:2
+EMAIL;PREF;INTERNET:tom.schindl@bestsolution.at
+PHOTO;TYPE=JPEG;ENCODING=BASE64:
+ /9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQY
+ GBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYa
+ KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAAR
+ CABTAEgDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAA
+ AgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkK
+ FhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWG
+ h4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl
+ 5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREA
+ AgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYk
+ NOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOE
+ hYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk
+ 5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD6ppHYKMmhjtGa8Y+M/wAQp7C1l0vQXH2l
+ srNcbsBB3VT6/wAqmUlFXY0rnW+LPiRoeheZE93FLcrwYkbp9T2rzzUPjaXdks7SMdlZ3JFf
+ PKrdSXMjXUbSsW3FtxOalXbPMAlwseHKkdSBXPKcnszRRXU9yHxpmjj/ANJggL/9M92B9a6z
+ wn8SotXVfN2RyHptOQa+cLfR7VC00ySHP3drfzrT0e7XT7jzY8ptKsno3PSs1Wae9ynTR9f6
+ XqyXAGGBrcRw65FfO/grxmXuBBODHKDjBOa9p0PVFuIl+auyMlJXRi01udDRSI25c0VQjN8R
+ 3K2uj3czsVSOJnJBxwBmvkyOzufE2pTX0jHYznb6KM19QfEVXk8IaskX32tnA/KvDfDlsLTR
+ bZIhklck+pJrlxMrWOrCxUpanJXHg6VrrO+RgR8p7D6+tNbwn5SyOYxI/I2465r0FvNOBt5p
+ fsk4OcAmuKU5W3O9U49UcPDpcWm2iBQBJtJ2dR9K5zUmjZ1QgKu4Er34PUf57V6dqdh5Y8wx
+ k8cZ9a8t8TQlr+F0wuHO76VFJ80tTCtBJaFf+0Ge7ivIpStxbSbQOnmJ6GvoHwHrJlEYLdcV
+ 806kyRqrDG8yYOPTpXsvw3ui/wBnbJOVU8/QV6VBWOGofSOnS+ZCD7UVS8PvugX6UV0GY/xJ
+ b/atKuYAcGSNkz9RXzNc6/daNaJZfZADBlHllcICQTnFfU18u6Bq+dvHnhW31XUrpyAZSzoQ
+ WOAM1hXS0udOGvd8pkReI3mtllUA4HJQ7gPyrktT8V6kbphDeFFGTtjTccDvXc+CPCdrpFhq
+ A4YOMYJ4FYq+FdOuL9mikVHHUex9vSua8FKzPRtNx8zL8NeLjdtsluzcoTgh1KsPpWv4k0qK
+ eye4iGWCliPWuh07R9O0yEKIo3I5DFRgfgKivZEcMigbTkVzVLKV46CUHa0jw8xSm8X5WeIN
+ lgOuO9ey+AgiTQeSW8oqpXd1xjvXPHw3HHfpPE5VUQvKD0K5Oa6nwHCz3EbBcKMAAdgK9ChL
+ nd0cVekqcF3Z774bP7hPpRTvDsZWBM+lFdJxmtcjMLV8/wDxCuZrDWbuGMHc8mV/GvoSQZQi
+ vGPi7ozPdw3icA4QsOx7VlWV43OjDT5JnnGqeIL3Sl+zQpHuKA+of61mS397fLFd3c0a3KAq
+ qxrtAHpS+ILSSNf9Ju3YgcMFxWTaaW14FX7TcqueqtXK1FLmPUu7Xubdvqs86r15rUhl2Rhp
+ DzWO6RWBSEZwoySe5qlNqnmThFJ2g84rnmuf4SXLTU1L68urq7+wRjbAACxHVs84+len+AtH
+ KKhK1wnhOwe+vvOdfvHj2Fe9eF9OEMKcV6VGHJBI8mrUc5XOg06HyoQPairSjAwKK1MxawPE
+ umpfWcsUi7lYYNb9MmjDoQaAPmDxXJHpF61rfQjKk7Sw+8PWuVvvFVpBGViRU+gr6S8XeFbP
+ V4Gju7aOZe25c4+leW6h8LdOWQmO0AHuSa53h0zsWLaVjxm41e41GbESklugFdL4Z0CeaRWm
+ UlienpXoem/D+G3bEUCJ9BXc6B4USAqSg/KrhSUTGdaUtCr4L0DyVQla9RsYRFEABVbTbBbd
+ AABxWmBgcVqYhRRRQAUUUUARTqCORWbPDGTygoooAjigiz9wVo28ajoooooAtDiiiigAoooo
+ A//Z
+
+X-MS-OL-DESIGN;CHARSET=utf-8:<card xmlns="http://schemas.microsoft.com/office/outlook/12/electronicbusinesscards" ver="1.0" layout="left" bgcolor="ffffff"><img xmlns="" align="tleft" area="32" use="photo"/><fld xmlns="" prop="name" align="left" dir="ltr" style="b" color="000000" size="10"/><fld xmlns="" prop="org" align="left" dir="ltr" color="000000" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="telwork" align="left" dir="ltr" color="000000" size="8"><label align="right" color="626262">Work</label></fld><fld xmlns="" prop="telpri" align="left" dir="ltr" color="000000" size="8"><label align="right" color="626262">Primary</label></fld><fld xmlns="" prop="telcell" align="left" dir="ltr" color="000000" size="8"><label align="right" color="626262">Mobile</label></fld><fld xmlns="" prop="email" align="left" dir="ltr" color="000000" size="8"/><fld xmlns="" prop="addrwork" align="left" dir="ltr" color="000000" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/></card>
+REV:20090528T104730Z
+END:VCARD
diff --git a/demos/org.eclipse.fx.demo.contacts.app/vcards/Torsten Sommer.vcf b/demos/org.eclipse.fx.demo.contacts.app/vcards/Torsten Sommer.vcf
index 7989a04c5..981757ce1 100755
--- a/demos/org.eclipse.fx.demo.contacts.app/vcards/Torsten Sommer.vcf
+++ b/demos/org.eclipse.fx.demo.contacts.app/vcards/Torsten Sommer.vcf
@@ -1,18 +1,18 @@
-BEGIN:VCARD
-VERSION:2.1
-N:Sommer;Torsten
-FN:Torsten Sommer
-ORG:TESIS DYNAware GmbH
-TITLE:Dipl.-Ing.
-TEL;WORK;VOICE:+49 89 747377-7438
-TEL;WORK;FAX:+49 89 747377 99
-TEL;PREF:+49 89 747377-7438
-ADR;WORK:;;Baierbrunner Str. 15;Mnchen;;D-81379;Germany
-LABEL;WORK;ENCODING=QUOTED-PRINTABLE:Baierbrunner Str. 15=0D=0AM=FCnchen D-81379=0D=0AGermany
-URL;HOME:http://www.tesis-dynaware.de/
-URL;WORK:http://www.tesis-dynaware.de/
-EMAIL;PREF;INTERNET:torsten.sommer@tesis.de
-PHOTO;TYPE=JPEG;ENCODING=BASE64:
- /9j/4AAQSkZJRgABAgIAHAAcAAD/4Qq9RXhpZgAATU0AKgAAAAgABwESAAMAAAABAAEAAAEaAAUAAAABAAAAYgEbAAUAAAABAAAAagEoAAMAAAABAAMAAAExAAIAAAAeAAAAcgEyAAIAAAAUAAAAkIdpAAQAAAABAAAApAAAANAABFNJAAAnEAAEU0kAACcQQWRvYmUgUGhvdG9zaG9wIENTMyBNYWNpbnRvc2gAMjAxMjoxMToxMSAyMzozOTo1NwAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAWqADAAQAAAABAAAAZAAAAAAAAAAGAQMAAwAAAAEABgAAARoABQAAAAEAAAEeARsABQAAAAEAAAEmASgAAwAAAAEAAgAAAgEABAAAAAEAAAEuAgIABAAAAAEAAAmHAAAAAAAAAEgAAAABAAAASAAAAAH/2P/gABBKRklGAAECAABIAEgAAP/tAAxBZG9iZV9DTQAB/+4ADkFkb2JlAGSAAAAAAf/bAIQADAgICAkIDAkJDBELCgsRFQ8MDA8VGBMTFRMTGBEMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAENCwsNDg0QDg4QFA4ODhQUDg4ODhQRDAwMDAwREQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM/8AAEQgAZABaAwEiAAIRAQMRAf/dAAQABv/EAT8AAAEFAQEBAQEBAAAAAAAAAAMAAQIEBQYHCAkKCwEAAQUBAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAABBAEDAgQCBQcGCAUDDDMBAAIRAwQhEjEFQVFhEyJxgTIGFJGhsUIjJBVSwWIzNHKC0UMHJZJT8OHxY3M1FqKygyZEk1RkRcKjdDYX0lXiZfKzhMPTdePzRieUpIW0lcTU5PSltcXV5fVWZnaGlqa2xtbm9jdHV2d3h5ent8fX5/cRAAICAQIEBAMEBQYHBwYFNQEAAhEDITESBEFRYXEiEwUygZEUobFCI8FS0fAzJGLhcoKSQ1MVY3M08SUGFqKygwcmNcLSRJNUoxdkRVU2dGXi8rOEw9N14/NGlKSFtJXE1OT0pbXF1eX1VmZ2hpamtsbW5vYnN0dXZ3eHl6e3x//aAAwDAQACEQMRAD8A7cKYUAphFTMJPexjS97gxrRJcTAATSAC4mANSfJee/Wf6zt6hmjGpefsNcgAfnu/0j/5P+jTZGkxiSXpuofXfo2GX10E5V7fzWaM/tWrDu/xj5+4uqx8euvsHuc53/ff+pXMNvpafTrG9zp3Eaan+V9L/NU21ipu41we0NB/KozMsoxh6Wj/ABnXg/rGFUWD6RrsIP8AZa9q6noX1p6P1tu3FtDMgfSxrCA/+z+//ZXk1zvXBFjQCODBBQMe2zHuY9nsfWQWPadQRw5ETPVUsY6aPvMJ1zv1O+so6ziGnJcPt1H0403s/Nt/8mujhSA2LYiKNLJ08JQkh//Q7gBTCi1Eaih5v67dUdhYDcVjtjsrdvcORW36X+cvK7b97zt0C77/ABnuYz7B+8RbP9Vu3/vy5f6sdJoyScjLZvYDDazwf6yhmdSS2MQsAD6seg9Lzup3bcVvsH07Do0f2l2eN9ScmB62S0iOGtWjgtpora2ljaq2j6LQGgBa+PkUvGjwot2xwgOA36j47Qd1m+e3A+eizup/Ut3ovdUKy4ajbIOnxXaW5OPUwvtsDWjkkwqFnVOmugtya4OglwCRHZOla0+efVm+3pf1jxfVcaptFdrXDQtd7V7JC8z6ti009bbbpDXMuHcESC7/AKlemBwPuHB1HwKnxmw08oqS8JJJJ7G//9HuWqYQwphFDyP+Myhr+l4+RpupsIjuQ4f9S1ct0S546aPRO1wJExMea7L68Ybrq8O+Jqrc9lnh7w2J/wAxcl9XGNrdZSR7RYS2e7SoMh1LbwxqMZA/NY8lrNz9zWDJvfIFlm8xLv5Kv9Lb1fpuY0Wsf6G4Bzt0t1W9T0zGPuaDB7Awp5tIrrZWxsCeEziFeLMIG7/BD9ZcPKyaqxje6sj9ISYAlZPT+mZDWljsWh43bTpuc5vezc6V1tDWnHqcSHD6PjojMxaKyXVsaCfAJXQOiZR10Ozx3XcGyu3CqxwZc11bW/Pc0a/mtleiYFjrcHHsdo51bdwHiBC53LxzZ1Ci4Rtpa6R/W9v/AH1dJhV+liVV/utH46qTEdT5NfPECIPUy/5qYJ0ktVK1n//S7gIgQgpAoqYZ+G3OwrcV2nqNhrvBw1Y7/OXA34OR03JDLq3VRpqPaY/0b/ouavRA5YH11IPTqD3Fv/fVHkiCL7MuLIR6ehKHpuWHVHceO6qdcLc+gY9LyCTrtkT81R6Zls1rcYnlLMxMiuzfVluqos/N2gx/b+kq9atyJ4mz03pmZQduSXPqr2urBJAJB+K6GvM3HbBaTyCuZZjYz6vTOZus77XOkf53tatSmqjCqbtc55LdXvcXOJ+JRITIcI3dnApOVc87gK2RvHc86LbCyfq/W8Yjr3iPWdLAf3Rpu/tLWarEBUfNo5ZmUqvQbLylKSWqcxv/0+0DlIOVfel6iSmyHLD+uDg7BoZOpsJjy2rQyMyrGx7Mm522qlpe8+QErkeoZZ6nltz2BzWOYGsYdSGfS7fnfvoSiTGVDoqOSMMkOI1xGnCtusx3F7Twr+H1erJx3Mv9wOjQDBBT5uEHV7mjzCxnYdjbC6o7Ha6dpVYUd24QYnR08FwozHPc/wBXYJ2u4I7D+ytWjIf1DNYyT6cjcB58MXPYmBl2WnfZDX6HaNdV2P1f6e2rKxqmjQPDie5j3Eu+5OA180Wa2oDV7drQ1oaNA0AAfDRSboVEFSlWGozTSm5SSU//1On3JtxVDqHVcLp1fqZdor/dZy939Vi4/q/1szeobqMWcbGOhg/pHD+W/wDN/spAEqbn1v8ArCMhrumYbppaf1iwfnEf4Nv/AAbfzlW+reY21v2O0+9mtR8R+7/ZWCzVsHluinS99FrbanbXsIc0jsQpImmLLAZIkfZ5vfNxG3MLNA/w7FZWZ019TyC0td4LT6Xn15+LXl1wHt9trB2d3VrrXUsWnEZXZV6+TYYprbo7+W8u/NY1DJgjL1R0P4SYcPPZMRGPIDOA9P8AXh5OP0+phiB7+4Wn9t+y9SwKaz+kttAPkwBz3/8AUoWOaPRN7NGtB3A6EEfSa8fvNWS7quN0/Mb1bqDXOZIqorb9Il/0y3d/oqfpqDHD9YAdKOrf5jL/AEeRh6uKNRrxfTwZ1UgvMcP63dX6XfYxln2vEY8gU26+ydzPSs+mz2rsOj/XTonUw1hs+yZB5pu0E/yLfoOUpiQxA2Ae70AKeVEagEag8EcFOgl//9Xisr7R65+1b/W/P9Sd3/SSaufST0PQsjc74qR4MLnEkkPoH1R+0/bLPT/o+39NPE/4OP5a1Mv0/tz/AF93rR/Z9P8AM9OPd/XXlaSmx7fxc3nP5079Pl3fVcD0tuV9L0ZZun46/wApc59c/T+0N9bdt2H7Nt+hH8n+Vu+muNSUZ/nZ7fKGeH+58Hz/ADz2/wAL5v5f5x69vqSfU+l6de/+ttEoL9n5v0p1XLJIHds4/kj5B9R+rP8Azygfs31fs/8Awv8ANf8Ag3t/zV13/Zt/3R+h5/T/ANf+tLwBJDr0Xv8A/9n/7SeYUGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAAAccAgAAAm9sADhCSU0EJQAAAAAAEHUqq0lMt8MP2eTQze+bRII4QklNA+oAAAAAGA88P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pgo8IURPQ1RZUEUgcGxpc3QgUFVCTElDICItLy9BcHBsZS8vRFREIFBMSVNUIDEuMC8vRU4iICJodHRwOi8vd3d3LmFwcGxlLmNvbS9EVERzL1Byb3BlcnR5TGlzdC0xLjAuZHRkIj4KPHBsaXN0IHZlcnNpb249IjEuMCI+CjxkaWN0PgoJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTUhvcml6b250YWxSZXM8L2tleT4KCTxkaWN0PgoJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5jcmVhdG9yPC9rZXk+CgkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc+CgkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCTxhcnJheT4KCQkJPGRpY3Q+CgkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNSG9yaXpvbnRhbFJlczwva2V5PgoJCQkJPHJlYWw+NzI8L3JlYWw+CgkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuc3RhdGVGbGFnPC9rZXk+CgkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQk8L2RpY3Q+CgkJPC9hcnJheT4KCTwvZGljdD4KCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQuUE1PcmllbnRhdGlvbjwva2V5PgoJPGRpY3Q+CgkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk+CgkJPGFycmF5PgoJCQk8ZGljdD4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQuUE1PcmllbnRhdGlvbjwva2V5PgoJCQkJPGludGVnZXI+MTwvaW50ZWdlcj4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CgkJCTwvZGljdD4KCQk8L2FycmF5PgoJPC9kaWN0PgoJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTVNjYWxpbmc8L2tleT4KCTxkaWN0PgoJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5jcmVhdG9yPC9rZXk+CgkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc+CgkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCTxhcnJheT4KCQkJPGRpY3Q+CgkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNU2NhbGluZzwva2V5PgoJCQkJPHJlYWw+MTwvcmVhbD4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CgkJCTwvZGljdD4KCQk8L2FycmF5PgoJPC9kaWN0PgoJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTVZlcnRpY2FsUmVzPC9rZXk+Cgk8ZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCTxzdHJpbmc+Y29tLmFwcGxlLmpvYnRpY2tldDwvc3RyaW5nPgoJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQk8YXJyYXk+CgkJCTxkaWN0PgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTVZlcnRpY2FsUmVzPC9rZXk+CgkJCQk8cmVhbD43MjwvcmVhbD4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CgkJCTwvZGljdD4KCQk8L2FycmF5PgoJPC9kaWN0PgoJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTVZlcnRpY2FsU2NhbGluZzwva2V5PgoJPGRpY3Q+CgkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk+CgkJPGFycmF5PgoJCQk8ZGljdD4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQuUE1WZXJ0aWNhbFNjYWxpbmc8L2tleT4KCQkJCTxyZWFsPjE8L3JlYWw+CgkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuc3RhdGVGbGFnPC9rZXk+CgkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQk8L2RpY3Q+CgkJPC9hcnJheT4KCTwvZGljdD4KCTxrZXk+Y29tLmFwcGxlLnByaW50LnN1YlRpY2tldC5wYXBlcl9pbmZvX3RpY2tldDwva2V5PgoJPGRpY3Q+CgkJPGtleT5QTVBQRFBhcGVyQ29kZU5hbWU8L2tleT4KCQk8ZGljdD4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc+CgkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQkJPGFycmF5PgoJCQkJPGRpY3Q+CgkJCQkJPGtleT5QTVBQRFBhcGVyQ29kZU5hbWU8L2tleT4KCQkJCQk8c3RyaW5nPkE0PC9zdHJpbmc+CgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CgkJCQk8L2RpY3Q+CgkJCTwvYXJyYXk+CgkJPC9kaWN0PgoJCTxrZXk+UE1UaW9nYVBhcGVyTmFtZTwva2V5PgoJCTxkaWN0PgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCQk8YXJyYXk+CgkJCQk8ZGljdD4KCQkJCQk8a2V5PlBNVGlvZ2FQYXBlck5hbWU8L2tleT4KCQkJCQk8c3RyaW5nPmlzby1hNDwvc3RyaW5nPgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQkJPC9kaWN0PgoJCQk8L2FycmF5PgoJCTwvZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNQWRqdXN0ZWRQYWdlUmVjdDwva2V5PgoJCTxkaWN0PgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCQk8YXJyYXk+CgkJCQk8ZGljdD4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNQWRqdXN0ZWRQYWdlUmVjdDwva2V5PgoJCQkJCTxhcnJheT4KCQkJCQkJPGludGVnZXI+MDwvaW50ZWdlcj4KCQkJCQkJPGludGVnZXI+MDwvaW50ZWdlcj4KCQkJCQkJPHJlYWw+NzgzPC9yZWFsPgoJCQkJCQk8cmVhbD41NTk8L3JlYWw+CgkJCQkJPC9hcnJheT4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuc3RhdGVGbGFnPC9rZXk+CgkJCQkJPGludGVnZXI+MDwvaW50ZWdlcj4KCQkJCTwvZGljdD4KCQkJPC9hcnJheT4KCQk8L2RpY3Q+CgkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTUFkanVzdGVkUGFwZXJSZWN0PC9rZXk+CgkJPGRpY3Q+CgkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5jcmVhdG9yPC9rZXk+CgkJCTxzdHJpbmc+Y29tLmFwcGxlLmpvYnRpY2tldDwvc3RyaW5nPgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk+CgkJCTxhcnJheT4KCQkJCTxkaWN0PgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQuUE1BZGp1c3RlZFBhcGVyUmVjdDwva2V5PgoJCQkJCTxhcnJheT4KCQkJCQkJPHJlYWw+LTE4PC9yZWFsPgoJCQkJCQk8cmVhbD4tMTg8L3JlYWw+CgkJCQkJCTxyZWFsPjgyNDwvcmVhbD4KCQkJCQkJPHJlYWw+NTc3PC9yZWFsPgoJCQkJCTwvYXJyYXk+CgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CgkJCQk8L2RpY3Q+CgkJCTwvYXJyYXk+CgkJPC9kaWN0PgoJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhcGVySW5mby5QTVBhcGVyTmFtZTwva2V5PgoJCTxkaWN0PgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCQk8YXJyYXk+CgkJCQk8ZGljdD4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYXBlckluZm8uUE1QYXBlck5hbWU8L2tleT4KCQkJCQk8c3RyaW5nPmlzby1hNDwvc3RyaW5nPgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQkJPC9kaWN0PgoJCQk8L2FycmF5PgoJCTwvZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYXBlckluZm8uUE1VbmFkanVzdGVkUGFnZVJlY3Q8L2tleT4KCQk8ZGljdD4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc+CgkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQkJPGFycmF5PgoJCQkJPGRpY3Q+CgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvLlBNVW5hZGp1c3RlZFBhZ2VSZWN0PC9rZXk+CgkJCQkJPGFycmF5PgoJCQkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQkJCQk8cmVhbD43ODM8L3JlYWw+CgkJCQkJCTxyZWFsPjU1OTwvcmVhbD4KCQkJCQk8L2FycmF5PgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQkJPC9kaWN0PgoJCQk8L2FycmF5PgoJCTwvZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYXBlckluZm8uUE1VbmFkanVzdGVkUGFwZXJSZWN0PC9rZXk+CgkJPGRpY3Q+CgkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5jcmVhdG9yPC9rZXk+CgkJCTxzdHJpbmc+Y29tLmFwcGxlLmpvYnRpY2tldDwvc3RyaW5nPgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk+CgkJCTxhcnJheT4KCQkJCTxkaWN0PgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhcGVySW5mby5QTVVuYWRqdXN0ZWRQYXBlclJlY3Q8L2tleT4KCQkJCQk8YXJyYXk+CgkJCQkJCTxyZWFsPi0xODwvcmVhbD4KCQkJCQkJPHJlYWw+LTE4PC9yZWFsPgoJCQkJCQk8cmVhbD44MjQ8L3JlYWw+CgkJCQkJCTxyZWFsPjU3NzwvcmVhbD4KCQkJCQk8L2FycmF5PgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQkJPC9kaWN0PgoJCQk8L2FycmF5PgoJCTwvZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYXBlckluZm8ucHBkLlBNUGFwZXJOYW1lPC9rZXk+CgkJPGRpY3Q+CgkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5jcmVhdG9yPC9rZXk+CgkJCTxzdHJpbmc+Y29tLmFwcGxlLmpvYnRpY2tldDwvc3RyaW5nPgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk+CgkJCTxhcnJheT4KCQkJCTxkaWN0PgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhcGVySW5mby5wcGQuUE1QYXBlck5hbWU8L2tleT4KCQkJCQk8c3RyaW5nPkE0PC9zdHJpbmc+CgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CgkJCQk8L2RpY3Q+CgkJCTwvYXJyYXk+CgkJPC9kaWN0PgoJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5BUElWZXJzaW9uPC9rZXk+CgkJPHN0cmluZz4wMC4yMDwvc3RyaW5nPgoJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC50eXBlPC9rZXk+CgkJPHN0cmluZz5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvVGlja2V0PC9zdHJpbmc+Cgk8L2RpY3Q+Cgk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuQVBJVmVyc2lvbjwva2V5PgoJPHN0cmluZz4wMC4yMDwvc3RyaW5nPgoJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnR5cGU8L2tleT4KCTxzdHJpbmc+Y29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXRUaWNrZXQ8L3N0cmluZz4KPC9kaWN0Pgo8L3BsaXN0PgoAOEJJTQPtAAAAAAAQAEf//wACAAIAR///AAIAAjhCSU0EJgAAAAAADgAAAAAAAAAAAAA/gAAAOEJJTQQNAAAAAAAEAAAAeDhCSU0EGQAAAAAABAAAAB44QklNA/MAAAAAAAkAAAAAAAAAAAEAOEJJTQQKAAAAAAABAAA4QklNJxAAAAAAAAoAAQAAAAAAAAACOEJJTQP1AAAAAABIAC9mZgABAGxmZgAGAAAAAAABAC9mZgABAKGZmgAGAAAAAAABADIAAAABAFoAAAAGAAAAAAABADUAAAABAC0AAAAGAAAAAAABOEJJTQP4AAAAAABwAAD/////////////////////////////A+gAAAAA/////////////////////////////wPoAAAAAP////////////////////////////8D6AAAAAD/////////////////////////////A+gAADhCSU0ECAAAAAAAEAAAAAEAAAJAAAACQAAAAAA4QklNBB4AAAAAAAQAAAAAOEJJTQQaAAAAAANVAAAABgAAAAAAAAAAAAAAZAAAAFoAAAAQAHAAcgBvAHQAcgBhAGkAdAAtADEANAAwAHgAMQA4ADAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAFoAAABkAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAEAAAAAAABudWxsAAAAAgAAAAZib3VuZHNPYmpjAAAAAQAAAAAAAFJjdDEAAAAEAAAAAFRvcCBsb25nAAAAAAAAAABMZWZ0bG9uZwAAAAAAAAAAQnRvbWxvbmcAAABkAAAAAFJnaHRsb25nAAAAWgAAAAZzbGljZXNWbExzAAAAAU9iamMAAAABAAAAAAAFc2xpY2UAAAASAAAAB3NsaWNlSURsb25nAAAAAAAAAAdncm91cElEbG9uZwAAAAAAAAAGb3JpZ2luZW51bQAAAAxFU2xpY2VPcmlnaW4AAAANYXV0b0dlbmVyYXRlZAAAAABUeXBlZW51bQAAAApFU2xpY2VUeXBlAAAAAEltZyAAAAAGYm91bmRzT2JqYwAAAAEAAAAAAABSY3QxAAAABAAAAABUb3AgbG9uZwAAAAAAAAAATGVmdGxvbmcAAAAAAAAAAEJ0b21sb25nAAAAZAAAAABSZ2h0bG9uZwAAAFoAAAADdXJsVEVYVAAAAAEAAAAAAABudWxsVEVYVAAAAAEAAAAAAABNc2dlVEVYVAAAAAEAAAAAAAZhbHRUYWdURVhUAAAAAQAAAAAADmNlbGxUZXh0SXNIVE1MYm9vbAEAAAAIY2VsbFRleHRURVhUAAAAAQAAAAAACWhvcnpBbGlnbmVudW0AAAAPRVNsaWNlSG9yekFsaWduAAAAB2RlZmF1bHQAAAAJdmVydEFsaWduZW51bQAAAA9FU2xpY2VWZXJ0QWxpZ24AAAAHZGVmYXVsdAAAAAtiZ0NvbG9yVHlwZWVudW0AAAARRVNsaWNlQkdDb2xvclR5cGUAAAAATm9uZQAAAAl0b3BPdXRzZXRsb25nAAAAAAAAAApsZWZ0T3V0c2V0bG9uZwAAAAAAAAAMYm90dG9tT3V0c2V0bG9uZwAAAAAAAAALcmlnaHRPdXRzZXRsb25nAAAAAAA4QklNBCgAAAAAAAwAAAABP/AAAAAAAAA4QklNBBQAAAAAAAQAAAACOEJJTQQMAAAAAAmjAAAAAQAAAFoAAABkAAABEAAAakAAAAmHABgAAf/Y/+AAEEpGSUYAAQIAAEgASAAA/+0ADEFkb2JlX0NNAAH/7gAOQWRvYmUAZIAAAAAB/9sAhAAMCAgICQgMCQkMEQsKCxEVDwwMDxUYExMVExMYEQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAQ0LCw0ODRAODhAUDg4OFBQODg4OFBEMDAwMDBERDAwMDAwMEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAz/wAARCABkAFoDASIAAhEBAxEB/90ABAAG/8QBPwAAAQUBAQEBAQEAAAAAAAAAAwABAgQFBgcICQoLAQABBQEBAQEBAQAAAAAAAAABAAIDBAUGBwgJCgsQAAEEAQMCBAIFBwYIBQMMMwEAAhEDBCESMQVBUWETInGBMgYUkaGxQiMkFVLBYjM0coLRQwclklPw4fFjczUWorKDJkSTVGRFwqN0NhfSVeJl8rOEw9N14/NGJ5SkhbSVxNTk9KW1xdXl9VZmdoaWprbG1ub2N0dXZ3eHl6e3x9fn9xEAAgIBAgQEAwQFBgcHBgU1AQACEQMhMRIEQVFhcSITBTKBkRShsUIjwVLR8DMkYuFygpJDUxVjczTxJQYWorKDByY1wtJEk1SjF2RFVTZ0ZeLys4TD03Xj80aUpIW0lcTU5PSltcXV5fVWZnaGlqa2xtbm9ic3R1dnd4eXp7fH/9oADAMBAAIRAxEAPwDtwphQCmEVMwk97GNL3uDGtElxMABNIALiYA1J8l579Z/rO3qGaMal5+w1yAB+e7/SP/k/6NNkaTGJJem6h9d+jYZfXQTlXt/NZoz+1asO7/GPn7i6rHx66+we5znf99/6lcw2+lp9Osb3OncRpqf5X0v81TbWKm7jXB7Q0H8qjMyyjGHpaP8AGdeD+sYVRYPpGuwg/wBlr2rqehfWno/W27cW0MyB9LGsID/7P7/9leTXO9cEWNAI4MEFAx7bMe5j2ex9ZBY9p1BHDkRM9VSxjpo+8wnXO/U76yjrOIaclw+3UfTjTez823/ya6OFIDYtiIo0snTwlCSH/9DuAFMKLURqKHm/rt1R2FgNxWO2Oyt29w5Fbfpf5y8rtv3vO3QLvv8AGe5jPsH7xFs/1W7f+/Ll/qx0mjJJyMtm9gMNrPB/rKGZ1JLYxCwAPqx6D0vO6ndtxW+wfTsOjR/aXZ431JyYHrZLSI4a1aOC2mitraWNqraPotAaAFr4+RS8aPCi3bHCA4DfqPjtB3Wb57cD56LO6n9S3ei91QrLhqNsg6fFdpbk49TC+2wNaOSTCoWdU6a6C3Jrg6CXAJEdk6VrT559Wb7el/WPF9Vxqm0V2tcNC13tXskLzPq2LTT1ttukNcy4dwRILv8AqV6YHA+4cHUfAqfGbDTyipLwkkknsb//0e5aphDCmEUPI/4zKGv6Xj5Gm6mwiO5Dh/1LVy3RLnjpo9E7XAkTEx5rsvrxhuurw74mqtz2WeHvDYn/ADFyX1cY2t1lJHtFhLZ7tKgyHUtvDGoxkD81jyWs3P3NYMm98gWWbzEu/kq/0tvV+m5jRax/obgHO3S3Vb1PTMY+5oMHsDCnm0iutlbGwJ4TOIV4swgbv8EP1lw8rJqrGN7qyP0hJgCVk9P6ZkNaWOxaHjdtOm5zm97NzpXW0NacepxIcPo+OiMzForJdWxoJ8AldA6JlHXQ7PHddwbK7cKrHBlzXVtb89zRr+a2V6JgWOtwcex2jnVt3AeIELncvHNnUKLhG2lrpH9b2/8AfV0mFX6WJVX+60fjqpMR1Pk188QIg9TL/mpgnSS1UrWf/9LuAiBCCkCiphn4bc7CtxXaeo2Gu8HDVjv85cDfg5HTckMurdVGmo9pj/Rv+i5q9EDlgfXUg9OoPcW/99UeSIIvsy4shHp6Eoem5YdUdx47qp1wtz6Bj0vIJOu2RPzVHpmWzWtxieUszEyK7N9WW6qiz83aDH9v6Sr1q3InibPTemZlB25Jc+qva6sEkAkH4roa8zcdsFpPIK5lmNjPq9M5m6zvtc6R/ne1q1KaqMKpu1znkt1e9xc4n4lEhMhwjd2cCk5VzzuArZG8dzzotsLJ+r9bxiOveI9Z0sB/dGm7+0tZqsQFR82jlmZSq9BsvKUpJapzG//T7QOUg5V96XqJKbIcsP64ODsGhk6mwmPLatDIzKsbHsybnbaqWl7z5ASuR6hlnqeW3PYHNY5gaxh1IZ9Lt+d++hKJMZUOio5IwyQ4jXEacK26zHcXtPCv4fV6snHcy/3A6NAMEFPm4QdXuaPMLGdh2NsLqjsdrp2lVhR3bhBidHTwXCjMc9z/AFdgna7gjsP7K1aMh/UM1jJPpyNwHnwxc9iYGXZad9kNfodo11XY/V/p7asrGqaNA8OJ7mPcS77k4DXzRZragNXt2tDWho0DQAB8NFJuhUQVKVYajNNKblJJT//U6fcm3FUOodVwunV+pl2iv91nL3f1WLj+r/WzN6huoxZxsY6GD+kcP5b/AM3+ykASpufW/wCsIyGu6Zhumlp/WLB+cR/g2/8ABt/OVb6t5jbW/Y7T72a1HxH7v9lYLNWweW6KdL30WttqdtewhzSOxCkiaYssBkiR9nm983Ebcws0D/DsVlZnTX1PILS13gtPpefXn4teXXAe322sHZ3dWutdSxacRldlXr5Nhimtujv5by781jUMmCMvVHQ/hJhw89kxEY8gM4D0/wBeHk4/T6mGIHv7haf237L1LAprP6S20A+TAHPf/wBShY5o9E3s0a0HcDoQR9Jrx+81ZLuq43T8xvVuoNc5kiqitv0iX/TLd3+ip+moMcP1gB0o6t/mMv8AR5GHq4o1GvF9PBnVSC8xw/rd1fpd9jGWfa8RjyBTbr7J3M9Kz6bPauw6P9dOidTDWGz7JkHmm7QT/It+g5SmJDEDYB7vQAp5URqARqDwRwU6CX//1eKyvtHrn7Vv9b8/1J3f9JJq59JPQ9CyNzvipHgwucSSQ+gfVH7T9ss9P+j7f008T/g4/lrUy/T+3P8AX3etH9n0/wAz04939deVpKbHt/Fzec/nTv0+Xd9VwPS25X0vRlm6fjr/AClzn1z9P7Q31t23Yfs236Efyf5W76a41JRn+dnt8oZ4f7nwfP8APPb/AAvm/l/nHr2+pJ9T6Xp17/620Sgv2fm/SnVcskgd2zj+SPkH1H6s/wDPKB+zfV+z/wDC/wA1/wCDe3/NXXf9m3/dH6Hn9P8A1/60vAEkOvRe/wD/2QA4QklNBCEAAAAAAFUAAAABAQAAAA8AQQBkAG8AYgBlACAAUABoAG8AdABvAHMAaABvAHAAAAATAEEAZABvAGIAZQAgAFAAaABvAHQAbwBzAGgAbwBwACAAQwBTADMAAAABADhCSU0EBgAAAAAABwAIAAAAAQEA/+EPz2h0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8APD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNC4xLWMwMzYgNDYuMjc2NzIwLCBNb24gRmViIDE5IDIwMDcgMjI6MTM6NDMgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6eGFwPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4YXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIiBkYzpmb3JtYXQ9ImltYWdlL2pwZWciIHhhcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTMyBNYWNpbnRvc2giIHhhcDpDcmVhdGVEYXRlPSIyMDEwLTA2LTE1VDE5OjA5OjEyKzAyOjAwIiB4YXA6TW9kaWZ5RGF0ZT0iMjAxMi0xMS0xMVQyMzozOTo1NyswMTowMCIgeGFwOk1ldGFkYXRhRGF0ZT0iMjAxMi0xMS0xMVQyMzozOTo1NyswMTowMCIgeGFwTU06RG9jdW1lbnRJRD0idXVpZDo5MEExOTc4MTQzN0FERjExOTExMkZGMDI2OUVFQjI1MSIgeGFwTU06SW5zdGFuY2VJRD0idXVpZDowN0Y4MDgyN0VCMkRFMjExOERDQ0YzQUQ4NDRFQ0Y0NyIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgcGhvdG9zaG9wOklDQ1Byb2ZpbGU9InNSR0IgSUVDNjE5NjYtMi4xIiBwaG90b3Nob3A6SGlzdG9yeT0iIiB0aWZmOk9yaWVudGF0aW9uPSIxIiB0aWZmOlhSZXNvbHV0aW9uPSIyODM0NjUvMTAwMDAiIHRpZmY6WVJlc29sdXRpb249IjI4MzQ2NS8xMDAwMCIgdGlmZjpSZXNvbHV0aW9uVW5pdD0iMyIgdGlmZjpOYXRpdmVEaWdlc3Q9IjI1NiwyNTcsMjU4LDI1OSwyNjIsMjc0LDI3NywyODQsNTMwLDUzMSwyODIsMjgzLDI5NiwzMDEsMzE4LDMxOSw1MjksNTMyLDMwNiwyNzAsMjcxLDI3MiwzMDUsMzE1LDMzNDMyOzI2MjExOTRDNEE1NjY5MTUwRjZDRjRDNDA0NUI3RTJFIiBleGlmOlBpeGVsWERpbWVuc2lvbj0iOTAiIGV4aWY6UGl4ZWxZRGltZW5zaW9uPSIxMDAiIGV4aWY6Q29sb3JTcGFjZT0iMSIgZXhpZjpOYXRpdmVEaWdlc3Q9IjM2ODY0LDQwOTYwLDQwOTYxLDM3MTIxLDM3MTIyLDQwOTYyLDQwOTYzLDM3NTEwLDQwOTY0LDM2ODY3LDM2ODY4LDMzNDM0LDMzNDM3LDM0ODUwLDM0ODUyLDM0ODU1LDM0ODU2LDM3Mzc3LDM3Mzc4LDM3Mzc5LDM3MzgwLDM3MzgxLDM3MzgyLDM3MzgzLDM3Mzg0LDM3Mzg1LDM3Mzg2LDM3Mzk2LDQxNDgzLDQxNDg0LDQxNDg2LDQxNDg3LDQxNDg4LDQxNDkyLDQxNDkzLDQxNDk1LDQxNzI4LDQxNzI5LDQxNzMwLDQxOTg1LDQxOTg2LDQxOTg3LDQxOTg4LDQxOTg5LDQxOTkwLDQxOTkxLDQxOTkyLDQxOTkzLDQxOTk0LDQxOTk1LDQxOTk2LDQyMDE2LDAsMiw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwyMCwyMiwyMywyNCwyNSwyNiwyNywyOCwzMDs4RTlEMkMwMjUwM0M1NDQ0MzlEQUQzNTEyNUNFNkVCMCI+IDx4YXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ1dWlkOjhEQTE5NzgxNDM3QURGMTE5MTEyRkYwMjY5RUVCMjUxIiBzdFJlZjpkb2N1bWVudElEPSJ1dWlkOjhEQTE5NzgxNDM3QURGMTE5MTEyRkYwMjY5RUVCMjUxIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/eHBhY2tldCBlbmQ9InciPz7/4gxYSUNDX1BST0ZJTEUAAQEAAAxITGlubwIQAABtbnRyUkdCIFhZWiAHzgACAAkABgAxAABhY3NwTVNGVAAAAABJRUMgc1JHQgAAAAAAAAAAAAAAAQAA9tYAAQAAAADTLUhQICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABFjcHJ0AAABUAAAADNkZXNjAAABhAAAAGx3dHB0AAAB8AAAABRia3B0AAACBAAAABRyWFlaAAACGAAAABRnWFlaAAACLAAAABRiWFlaAAACQAAAABRkbW5kAAACVAAAAHBkbWRkAAACxAAAAIh2dWVkAAADTAAAAIZ2aWV3AAAD1AAAACRsdW1pAAAD+AAAABRtZWFzAAAEDAAAACR0ZWNoAAAEMAAAAAxyVFJDAAAEPAAACAxnVFJDAAAEPAAACAxiVFJDAAAEPAAACAx0ZXh0AAAAAENvcHlyaWdodCAoYykgMTk5OCBIZXdsZXR0LVBhY2thcmQgQ29tcGFueQAAZGVzYwAAAAAAAAASc1JHQiBJRUM2MTk2Ni0yLjEAAAAAAAAAAAAAABJzUkdCIElFQzYxOTY2LTIuMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWFlaIAAAAAAAAPNRAAEAAAABFsxYWVogAAAAAAAAAAAAAAAAAAAAAFhZWiAAAAAAAABvogAAOPUAAAOQWFlaIAAAAAAAAGKZAAC3hQAAGNpYWVogAAAAAAAAJKAAAA+EAAC2z2Rlc2MAAAAAAAAAFklFQyBodHRwOi8vd3d3LmllYy5jaAAAAAAAAAAAAAAAFklFQyBodHRwOi8vd3d3LmllYy5jaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkZXNjAAAAAAAAAC5JRUMgNjE5NjYtMi4xIERlZmF1bHQgUkdCIGNvbG91ciBzcGFjZSAtIHNSR0IAAAAAAAAAAAAAAC5JRUMgNjE5NjYtMi4xIERlZmF1bHQgUkdCIGNvbG91ciBzcGFjZSAtIHNSR0IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZGVzYwAAAAAAAAAsUmVmZXJlbmNlIFZpZXdpbmcgQ29uZGl0aW9uIGluIElFQzYxOTY2LTIuMQAAAAAAAAAAAAAALFJlZmVyZW5jZSBWaWV3aW5nIENvbmRpdGlvbiBpbiBJRUM2MTk2Ni0yLjEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHZpZXcAAAAAABOk/gAUXy4AEM8UAAPtzAAEEwsAA1yeAAAAAVhZWiAAAAAAAEwJVgBQAAAAVx/nbWVhcwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAo8AAAACc2lnIAAAAABDUlQgY3VydgAAAAAAAAQAAAAABQAKAA8AFAAZAB4AIwAoAC0AMgA3ADsAQABFAEoATwBUAFkAXgBjAGgAbQByAHcAfACBAIYAiwCQAJUAmgCfAKQAqQCuALIAtwC8AMEAxgDLANAA1QDbAOAA5QDrAPAA9gD7AQEBBwENARMBGQEfASUBKwEyATgBPgFFAUwBUgFZAWABZwFuAXUBfAGDAYsBkgGaAaEBqQGxAbkBwQHJAdEB2QHhAekB8gH6AgMCDAIUAh0CJgIvAjgCQQJLAlQCXQJnAnECegKEAo4CmAKiAqwCtgLBAssC1QLgAusC9QMAAwsDFgMhAy0DOANDA08DWgNmA3IDfgOKA5YDogOuA7oDxwPTA+AD7AP5BAYEEwQgBC0EOwRIBFUEYwRxBH4EjASaBKgEtgTEBNME4QTwBP4FDQUcBSsFOgVJBVgFZwV3BYYFlgWmBbUFxQXVBeUF9gYGBhYGJwY3BkgGWQZqBnsGjAadBq8GwAbRBuMG9QcHBxkHKwc9B08HYQd0B4YHmQesB78H0gflB/gICwgfCDIIRghaCG4IggiWCKoIvgjSCOcI+wkQCSUJOglPCWQJeQmPCaQJugnPCeUJ+woRCicKPQpUCmoKgQqYCq4KxQrcCvMLCwsiCzkLUQtpC4ALmAuwC8gL4Qv5DBIMKgxDDFwMdQyODKcMwAzZDPMNDQ0mDUANWg10DY4NqQ3DDd4N+A4TDi4OSQ5kDn8Omw62DtIO7g8JDyUPQQ9eD3oPlg+zD88P7BAJECYQQxBhEH4QmxC5ENcQ9RETETERTxFtEYwRqhHJEegSBxImEkUSZBKEEqMSwxLjEwMTIxNDE2MTgxOkE8UT5RQGFCcUSRRqFIsUrRTOFPAVEhU0FVYVeBWbFb0V4BYDFiYWSRZsFo8WshbWFvoXHRdBF2UXiReuF9IX9xgbGEAYZRiKGK8Y1Rj6GSAZRRlrGZEZtxndGgQaKhpRGncanhrFGuwbFBs7G2MbihuyG9ocAhwqHFIcexyjHMwc9R0eHUcdcB2ZHcMd7B4WHkAeah6UHr4e6R8THz4faR+UH78f6iAVIEEgbCCYIMQg8CEcIUghdSGhIc4h+yInIlUigiKvIt0jCiM4I2YjlCPCI/AkHyRNJHwkqyTaJQklOCVoJZclxyX3JicmVyaHJrcm6CcYJ0kneierJ9woDSg/KHEooijUKQYpOClrKZ0p0CoCKjUqaCqbKs8rAis2K2krnSvRLAUsOSxuLKIs1y0MLUEtdi2rLeEuFi5MLoIuty7uLyQvWi+RL8cv/jA1MGwwpDDbMRIxSjGCMbox8jIqMmMymzLUMw0zRjN/M7gz8TQrNGU0njTYNRM1TTWHNcI1/TY3NnI2rjbpNyQ3YDecN9c4FDhQOIw4yDkFOUI5fzm8Ofk6Njp0OrI67zstO2s7qjvoPCc8ZTykPOM9Ij1hPaE94D4gPmA+oD7gPyE/YT+iP+JAI0BkQKZA50EpQWpBrEHuQjBCckK1QvdDOkN9Q8BEA0RHRIpEzkUSRVVFmkXeRiJGZ0arRvBHNUd7R8BIBUhLSJFI10kdSWNJqUnwSjdKfUrESwxLU0uaS+JMKkxyTLpNAk1KTZNN3E4lTm5Ot08AT0lPk0/dUCdQcVC7UQZRUFGbUeZSMVJ8UsdTE1NfU6pT9lRCVI9U21UoVXVVwlYPVlxWqVb3V0RXklfgWC9YfVjLWRpZaVm4WgdaVlqmWvVbRVuVW+VcNVyGXNZdJ114XcleGl5sXr1fD19hX7NgBWBXYKpg/GFPYaJh9WJJYpxi8GNDY5dj62RAZJRk6WU9ZZJl52Y9ZpJm6Gc9Z5Nn6Wg/aJZo7GlDaZpp8WpIap9q92tPa6dr/2xXbK9tCG1gbbluEm5rbsRvHm94b9FwK3CGcOBxOnGVcfByS3KmcwFzXXO4dBR0cHTMdSh1hXXhdj52m3b4d1Z3s3gReG54zHkqeYl553pGeqV7BHtje8J8IXyBfOF9QX2hfgF+Yn7CfyN/hH/lgEeAqIEKgWuBzYIwgpKC9INXg7qEHYSAhOOFR4Wrhg6GcobXhzuHn4gEiGmIzokziZmJ/opkisqLMIuWi/yMY4zKjTGNmI3/jmaOzo82j56QBpBukNaRP5GokhGSepLjk02TtpQglIqU9JVflcmWNJaflwqXdZfgmEyYuJkkmZCZ/JpomtWbQpuvnByciZz3nWSd0p5Anq6fHZ+Ln/qgaaDYoUehtqImopajBqN2o+akVqTHpTilqaYapoum/adup+CoUqjEqTepqaocqo+rAqt1q+msXKzQrUStuK4trqGvFq+LsACwdbDqsWCx1rJLssKzOLOutCW0nLUTtYq2AbZ5tvC3aLfguFm40blKucK6O7q1uy67p7whvJu9Fb2Pvgq+hL7/v3q/9cBwwOzBZ8Hjwl/C28NYw9TEUcTOxUvFyMZGxsPHQce/yD3IvMk6ybnKOMq3yzbLtsw1zLXNNc21zjbOts83z7jQOdC60TzRvtI/0sHTRNPG1EnUy9VO1dHWVdbY11zX4Nhk2OjZbNnx2nba+9uA3AXcit0Q3ZbeHN6i3ynfr+A24L3hROHM4lPi2+Nj4+vkc+T85YTmDeaW5x/nqegy6LzpRunQ6lvq5etw6/vshu0R7ZzuKO6070DvzPBY8OXxcvH/8ozzGfOn9DT0wvVQ9d72bfb794r4Gfio+Tj5x/pX+uf7d/wH/Jj9Kf26/kv+3P9t////7gAOQWRvYmUAZEAAAAAB/9sAhAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAgICAgICAgICAgIDAwMDAwMDAwMDAQEBAQEBAQEBAQECAgECAgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwP/wAARCABkAFoDAREAAhEBAxEB/90ABAAM/8QBogAAAAYCAwEAAAAAAAAAAAAABwgGBQQJAwoCAQALAQAABgMBAQEAAAAAAAAAAAAGBQQDBwIIAQkACgsQAAIBAwQBAwMCAwMDAgYJdQECAwQRBRIGIQcTIgAIMRRBMiMVCVFCFmEkMxdScYEYYpElQ6Gx8CY0cgoZwdE1J+FTNoLxkqJEVHNFRjdHYyhVVlcassLS4vJkg3SThGWjs8PT4yk4ZvN1Kjk6SElKWFlaZ2hpanZ3eHl6hYaHiImKlJWWl5iZmqSlpqeoqaq0tba3uLm6xMXGx8jJytTV1tfY2drk5ebn6Onq9PX29/j5+hEAAgEDAgQEAwUEBAQGBgVtAQIDEQQhEgUxBgAiE0FRBzJhFHEIQoEjkRVSoWIWMwmxJMHRQ3LwF+GCNCWSUxhjRPGisiY1GVQ2RWQnCnODk0Z0wtLi8lVldVY3hIWjs8PT4/MpGpSktMTU5PSVpbXF1eX1KEdXZjh2hpamtsbW5vZnd4eXp7fH1+f3SFhoeIiYqLjI2Oj4OUlZaXmJmam5ydnp+So6SlpqeoqaqrrK2ur6/9oADAMBAAIRAxEAPwDaXp/oL2/xt/ri/wBB9PakdUbp9plBtpvbg3/wsPrfi4t791XpS0ZIK/48cgjgrdbfm490kAKHVw60epOUy+IwWNrc1n8njsHiMbSyVmSy2VrIKCgoqSFdUlTVVVQ8cUMKCxLMQL/n2yCqAs+FHEk0A/b1ZFZ2CqpLHgAKk9VO/IH+dr8Oulpc/trYmQzPd/ZGHECR4Ha8BxmzUmqLrHNl9+VSzUFPRIRptTxzzysQIlY3sT3O/wBomsQBppK0wKKP9tw+2nQhtOXL6bQ04WGI5q2W/wB5Gc/Oleqq94/8KNe+hkKrIbS6g+Om0tro80dLQbp3RvPP7hkaKII7VFWkOEWNGqDqR4qORSpC/qv7K5N/vySIbBTwzWo/bQV/b0cxcq2AFJtxcMOPaASPsyQenXY//Cm/fVJPDJ2Z8Xerq3B0BhGbr9l9uZ3HZhknBHmw+L3HteKCf0jWsbSXN7X+nuo5huRJEGsAwJpgkn8jkDqsnKdqwkMO5NgVytBT55BJ6vs+Df8ANI+IPz4of4f1Pv2k292lSRGXLdL73rqDFb/gRVDPU4WnaZKXdFAvP7lEzuv9qMc2EFnfx3ageG0cv8Lf5DwI+zoN3u3TWLdzK8PkynH5jiD9vVlMcAtybgH83B4JF7f1vf8A1va8CvnjovOOpIjUc2+otf8Ar+P94HtzQPXrVesyi1uDxzp/P05P+Nh7v1rHn1l1f7Qv6f8Aef6fX/efeqD0631//9DaYpPUA1hyPpa/+wvf2p6bOc9KClAVgLDR9bfgGwPPv3Wun4VFLR009fWVEVLR0dPPV1lTO6w09LS00b1FTV1ErlVipqeniLuxNlVST/X3Rzin/FUHr5f5uPWwCxCqO4/nX7Pn1pvfzNv5m+N+SndVJ1jsXPVsXxy2dT5Slp6CmlnhbsHctNJPBLvPPQRSRUtViVlhMeJo6hmgih1VDo0jraO903WO+uSHJG1IpNM/qHgGPyJ+EU4Z6k3ZNiewtTIUrubkVJyErnSvzH4iPs6qgoN97Px8ibe21Sfx/KZFqubN1tJI2LSoraptD+bNQUlZl6+SmhIjC0UdPTpGgjSU8gB5rp6gotFIoAONPIZ4D1wD9p6FUdsFUsw7gfOhH+Sp/M/l0rqHB0u1cbLlp9mx0EoSN6NMdt2hzVSGt5B5RXJJLCGk9WuSWSd/q2nge0sjyGnjkhfIE1H+cfbjp9IldiIVGo8TQVP5/bnh0XnduRfsOCupt0YmhoJqaoqZqGeTE1+IqhrbyRM81HFW0kt9XKsYZFAvYqR73G8du6Sw3Jr6D/BQ8D+3rb20koZZLcGP7Kf4Ogn6+3RuPrjee3c7hBNtvObYy9Hl9s7h23lYUyOKy2OlaoocnTVFMKHIwPRSjUhLsw/II49na3dV8aOdifOoII+w5z/h6JZdvBLRyWqqPIg1B+0UBp8+voP/AMnb+ZNB83upavY/Z2dxMvyO6wjjG5Ep40oP787NkEUWK3xRUV9P3UEhFLklQkipHksFkHsabFuRvYhFcN/jSjz/ABDyI/y/PqOd82r93z+JChFqxoPPSfMH7eI+WOrpFiYLcjULm/8Avufr7EBZa6SeiEV6lCNSiken6C9jqv8An8nge29RHVqdc/tz/qh9b/QfX/bfX3vWfTr1Ov/R2o6aPgEWBJsRf6kWueDxf2p6aOOPSjp472utgbA/QXsLD/YX97691TT/ADrvlHkejug8L1Lt/Mvgcn3dHuGPcmWpXeKuoOutuU1M+cio3jOszZ6uq4qW111Rh1vzYhHm3cGtrWCyjaj3BINOOkUr/Mj7c9C3lGwS5vJbyRNSwAEA8NZ4V+QAP5060ENy76fNZmcUTNT0kkkrlAZlZaZZHFNT1moJFGkUGlZEQsGVfUUBPsG/TlELs3DgMfYKepA4V4E4r1I0cyyOsUZ7fM/nXPoK+nEcadHl+CXxb7v+VG81xnUWImkw2PlRM/vXJtPQbepBqXT97mGQQCNADaCl8tRIBayj1eyDcJ2VlhUfrEVoDRV+3zqfP/B0MNp2dr1TKRpta01EHU/+lX/NgefWzX1z/JS7HkpoH313VtmemkpmP2G3ts1U8+uQreKGorJljhVQv6rFmPqZifaURbhKlGkQg+QBJz9vR6u27RA9BBKQPVgAT8+OOhtxf8j/AGDjYKmTJ7wmzks4lkioTJFjsd5GAKSV4+wqqqoGr/OLGUD/AE1D6+2JdrvNLyNcYFaYIH88/wCrj0aQPsweg246cZPdw8uIFf2+eOiV/Jj+S/Xx7Q3BkNnY/YU2UphLkIV21/FMRnKaGjgl8dPSpXy10FVNXSEawSt14A54YilvLPSzShgDkAnP5E5+zq+47Xtt5EwihKMwxUY/aOHVUX8szfW6fiT/ADFOi33VncnscTdnY/rvfeNy9FOlLWYHOTxYKthnKnxtHU1FZCp1tpRj5QLr7kzZrtHe0uBRaMAc+R8vXj6dY/cy2MiC9t3WvaSB8xnj19LCOIBdJDWBKsGtqUqdJDG36lI59yDWpNePUWDy6yrEo/SFNvyLWIHPI45PuwWpIr1brl4z/UfS/wCfr/T37Q3p17r/0tqyhCm/FyOB/iTf/bA+1PTXSrokuwAFxcf668/j63591c0U549eP29aqX/CnnKYjCp8T3YTDJZDD9yS15RWMc23cCm3KxaOQrb9ypyVXwo5bj2DuZrYyTbYR/adw+wEr/g/wV6GfKdwYYdxBPZ2n7SA1R+Yp1Qx/LH+Jex+1Kqq7K7j2/DubbtNlfsMPtTKTzpiauWOUtNVZOOCWKSpjZz/AJvUFsoBuL+wBzLubRzNbWzU0DJHmSPI8cf4epk5H2UTQG8ukBD8AcgCvpw63HOkaPaHXe3sRjNj4DbGzts4qlRhhMJR43bmKpKWNLvKtLAlPDENNzrflgLkn2FLVbmdiwU0/n9p+fUmyfT2rKkpoAKAZIHp/s06sW2B2FtHNwLJSbhpvIIVkBgniqadANLMHmppZI9b/gH6jkcexBbxktmXSR6V8vPounRWjBiQMhI88/bT0+fSr3Z2N19tHEVWd3TvXDYXE08ZkmyGRrYaSBEXTd5J52QBbEWHNz7ekiQh63XHyFem4jJFRvAoqjz/AMg/y9FI3B8o/jjlDRS4/u3r1oa+aSkpUyO68TQCpmdyiRkVlVA0RZ7qNYAuRzY+ye52y7Q+JGhp9n+Xp0bzYy64HmQMeGR/qp1r9/K7rTZezfmxgd4FKMwY3cvW/cFBaGCro6zGncmMrcuihVaKSlpP4ZLIkiFhIJByb+znY5DG0SvxVwT8xX/J5dRzzjapJ4kkJ+OM545GPyr1vLQV0FYkdfSSeWiyEMVdRS20+WjrY0q6ST/kOnlU2sLX9zb5lgew8Osc6FDpbiP+K6lIRe4/pyB9L3/1/dkyePW9Q9esvH9R/X/fce36da1Dr//T2qKJhGw083Frfji39R7U9NdKimcgqfp/Ui54PNwPrwD70QCCD1rrXH/4UxbFoMv8X+neyl/hj5XYHYOZoRBJo/jlZid0YNIJno01eeXD4qupIpawBTGjyxM5AHsM8wRhksG1KJBIVAPE1Hl9hA6FXK63LNuTRW0kkEcQdyoJVKGgLelQSB9h6oa+Fe8sxT/GzHHZNbDicrTZPK485BsemRXHzpVuzZCGkkKwzzQLKGVZLrqtcN9PcV7paIu4zrMKNqHH5jj1PnLW4SSbPD9I1AMYHAVHDy6Vud+9z0edxeEoPkp2bnY8pjcfuzdj79r6fEPms+UWCpGCpqCqWoxlM0oLRU66aeFGbTZPZzy3ts28yTQ2s0USIPicimDmgp5cT8ukvN252fLtpb3cthdXbu+k+GGNCR5muK8AacaDo2Xxbofl38W+3MTRbt2/vL/Rv/eLB4rO5L+8MGZ2lU/xeCJ4FaYQ0zTVlFHU/wCUWQmCVCrW+nsi3WG8sprn9VHVTTUooD9nlj040z0L9kiiubeweKOSKS4QMI2NXQEcGByOOD1aL/Mr6e7U7O2zsqn6tdMptKuxcM+76mrzxx1DiYK6rpFFYY0K1dVSU5ZpJGiZGCoBz7bj1sqGB6DSCxpWgPEg+gPRpJt7FvAviSzFgi1pUqML6d3l+09V7/Hv40dg4vG12Ir+heitx08W6KbBVCmho91bm3ZtiWSpbI70gy2VrMhV0UcUUUNqUyw1Cu59J08ibeYNusLO3m2veRdzEDWtB8h+R44x0COXm3u4uNwh5l5VSwtUakbFjV8kAj1FKGpwRgdPvzs6T3Btfc/xl2p1nRV7V+YwG6dlYfDeaSpkp4IszS5vGY6N637iSHD4aOvqJPHKxihiTT+mw9lNq6Bbm4FBpHD/AAD9vSbddumvr/bNst4z+tNpx5AnuI+wZr1uZdB57Ibr6M6c3FkoYaTJZXrbaMmTpKazU9PkKXEw4+tip/UbU61NIxQXIUGw4HuXNquhfbbYXjJpaWJSQPwngQPlUdQJzZsh5c5q5i2Ay6zZ3TxByKFgDUNT5gjoXotQ4bjm4Nj9T/W1x7XdB4jgScdZ9Tf0/H9P95/33Hu+turUHp1//9Tako/XYL9PpY2H4N/68H/ePanprpS0ylWQHVY8D8/Qjn/Yn3vr3VIP88HqLKby298ct+miav2jtXPb/wBmbsRl8tJTx76xWEnxzVsRZYTBXHb08ALggsQt7sPca8+200kG3XUZIWN2BI8i1Cv7SpHU/exdzYyJzns05H1k0EMqA/iWJnWRR60EgJHpX8teT+XPiMZt/I7x2NNRFMVDv3IVuKWrpwtPV4HJeWOjqKNXXS0BaFoza4DJ9fYG3W4N/BFeRONYRQ3rqXjX7acf8PQ42bbP3DuN3s1woFZCyfw6HFVI+zhTyPWwbs7419d1bx5Shx1U0NQUmaDF5KoxKvI63laX7WWASolzp1epRwD7I7e/ZaVBz6Er+2nr+XQ7jsJkoY5aV41Ab7CAcdKTuXaFPt7b+1tuYPEwQ0D18kaQSyEUyuysXnnnlYuZJAC7MbuTb2/c3VxcCKJgFhGQOCj55ySelMEMUcjzeIWuzTuPHy4eSgdHQ2PQ46s682RkKibC5WhjdsN4nqaSrjeiaCJWiq4pZHLxkqdOsAEggc39qY0dbaO4gYKQxAAOaD5fP59P7vNaSFYxGwcBWNfPUSDkY8q4NRxNOhHw3V+yttT1dftza2DoJalpHlkpMfBTFla5k0zRxq4DXuefp7rNczMq/poGJ40Ar616Kfo1las9w5jpQVJPzxX9nRQe2+v6jcPyC6n3vRxUUmJ2Bgt4w5KjlRpagPu0U2MapgWxKQ0lHjZBI/0DyIoJJt7cR1jswp/E2fXHH+Z8+k+xWMNxv0kpfEMZ0epZyKDhx7ceo+WervOm9vf3S6p6927Goj/he1scHjIN4pKxXr3i0n9Ijartb8e5y2e3NrtW3QMO4RAn7W7j/h6xM583Yb7zvzXuytVZr2QA4yEIjB/4zx8+hLAbn08D6mxvyBb8f19mQUngOgmeuVpf6/4fj/o76+96G9Ot9f/V2oqQqbWurcfX/b/05Fvz7U9NdKmlbhdVv6/Xm3+x4BFvfutCoqSR0HvffUOM7+6X7A6kyk0NKu78DNS4nJzRrKmF3FSMtdgMuAVYgUOUgjZ7cmPUP6glW42Ue4WV3YSU/UWgPofwn8j0ecs77Pyzv+2b5ACxt5QSowXQ9siV/pKSPStOtRTenR/YXxb7GoMPvXZe5tmJQz1GIhkyGNq/7tVlTSTR1BqNp7gWnXGZnE1XkM8awzysqyeoKbr7hl9qvLB761u7dkWgIJHaxH8LcDUZGa+vWTt9zBs+6y7Rve17nFPrqWVTSRa5pJHxVlyOFCeBp1bh8ce2Kev21PJX1KaaKAympcp4mpwuo+sWAAVfyeR7CdzW3LdvfX9vQ1tdxEwjcMKH/ixg9AF84ajG/IjYdD1vsXdGXp6ioyM0tW2BaupZKyWSMB6dK6mlgqYhZeNBXUpJB9qoSW8PxAVAoa+f516vNuUapLLHSS4ICgfhA4GoxX9tekB8a/jV3JsSpGP7Pqdwbg2XtWTau49l0Vbl8zSY3I5HE1iVEEFS9TXwCrlpS4dYg0omZG1j+q+SGPwaDuVs0Na8a/7PRTa7pvKyyHRWNAc6agAihPA0xgelerlNv9yR5GeXHtS5PFV0yyrNQ1ETgwzLCsjTRq6r44KlSzLa6kAge0Fz4kelyKoTSleHW13hJTLGBQgH7K/6vnXoT+hNpT9tbu3BWPlaWk2xgjgkz9N4JpcnmLVVfVQY2llDCmpaWaSH995FaRV/QATqA85X2IbtKJp5QsELAstKl6ioFeAHr59RpzJz4/LFveRWtmX3S7jKxSkgLBTDOBxZ6N2cADUmox1aDTsEUABURVUKgACIqAKiIBcBVUAAfge5aYivaKDrHCrFqk5P+on8+PU6OYtwALnk2/1/ybWsB72Hbhx6tT1PWfzH/Uj+n1/tf09uVP8ACevfn1//1tpSmdlKjVa39bkEcn6/W4/3j2p6aPT5DOyH9Sm9ub3sL/j/AB0+/de018uPSjpcipsPqOPqOQP94t9PdXQMOPd177OqjP51MtPL8e+pqoKGloe3KiSGQhi0UUm0q9ZlQn0xrIypf/goPsI85Pp26310AMwHyyp/ljoc8gRNJuW4aFq622qnqFcV/lWn7OqhvjP23ipEqduZCuEEVXCIZo5JFuukjyOQ9tCMo+nPp/x9xBfWwYI6irjy8+p12jcEf9KSSgA9euXcfVW/tu7ihzWz/kJuDZvXe8TDPNi49uYmrjoKkxaHSj3GtTHlJMdNIC7xFA4NxcgD3W3uYJXMLwkyDjn/AGMdSXsFry2uj66/aCdhVZCoZAxzkEgCvzx0tMP1z1nl9tDb8vyRlyW5jJH55sDufdsmQxwemjgqTSxZYQ4jEVVfMRL5Akgj/SoY+zlDZQxOPFBenHurX5YUA/aadCnxLG3k8XcudHmtENTFF9OmocQpKl5CPKgAJ9QM9Hp2dtjY3Re1cZHistnM5NNhJI63c+8tz5PdG48lVBUbymuyMy+OkjjKpFHDFFHGg4FyxJO6rcyBgOwH8j6UHz6inmDcre4uZ7i3txEzE6VAyF8iT5t6k+vVtfwBwGah6nyu/wDOUk1COxs4K/bsFTDJT1Mu2MPCaKhyckcn7gjytVJNLEWALRaSOCD7l/lKxez2+SWZaSSvWnmABQftyfz6xo553OK+3WK3gfVHbx6Sf6ZNWH2+XVgVE4kTRqBYBmsxHPHOk8X/ANYexW+aMOHQLHbXPU3UAdKgrbkfS34F7j+v+t7p8+rg1Feutc39U+v9D9P9t9fdtbevXqD06//X2b4MmARrawFyCCR9bhh+LH294i04ivVNJ6eYcnGyizrb/H+yTyLm54Pvepa8evU8iOnGLJKTbVp/HFuDe/1JJNifdS4GBx63Sv2dVTfzgaynyXR3WOG+4pzXTdkZKqjofuIlqHpINr1MMtYKYOakwJNIqeUDRrOm9zb2COfhr2W3oTQz5P2KT/q+3qTPawA77foCNf0pP5awOHp/qr1qf7n3bn+tclU5mgmqVloRLKhidhqhQ6iWNiJDEosUP1/1vcZ20guSiFgJQaH5nyr9vQ9vLaWwmlJUhDkU/D8vn8vl0bjqL5a7U7P69yWB37JUZqmrkbF4uhp68UVXS1sheNH8rhpIaankZpPRdri1z7tfWPgyCTTpaoqB8+J+weoz6Ho22jeEkg+nuG1IRQE8Kf5/LPDoPujchSdedu5zNZLPTb4j21R01WuF3DU1FTiaqji+3noaFpoZo3JxZeSWOS5AZRccn2xcIzLbkkaSCAc8K5+wenSqzewt553QAMo40GCRT88fLo/+xd+5v5G9zYHCRZCqk2n/ABDDxZuioqh1pkqMzWQ0+P2spQGNFeI65gnqjRQOCwsb2kAihjRE73dQD9pHD7K/t6JLu6+rupZi9YIondvLgDQfnTrdWoKKnxtFQ4mmjjgpMRQUWKpYIUVIYIMbRw0UUMaKAqJGkFlt+Pc1hQioq/AqgfsHWOBYszSEdzEt+016eaFfFUrxqv8ApP4FxZ7/AE5Cnj/W93IKHreCAT09SOqkk/S5sbj/AHn8c+68etgg9Y/PH/Uf0/s/77/Y+7aW9D1vr//Q2JnzABDF7cn8gC5/x5+vuhBYEECvXuuP8dI+svp+o9Y4/H1B+nvdGpTrf5dMO/e3dtdWbA3p2fvXJfwvaGwNsZjd25MgqmaSDEYSikrqo08GpfuaqVYvHDGCDJK6rcX96VXZ1QZYnH+r/V59aNPPh1ro/ITtuX5WdqYv5CYagzuNwmT2NgsFt3bGRqI6uvxWxw7Zqlnelo5ZaAZz7uskkyCwFrqwAZvET7Wc/wDJW4X3KVhPtgMt1bapJIxksrcWUDJZB+HzWtMjIE9mffLl/a/dzmLbOZGW22q/ZLaC4fCwyQsVWOUmgSOZjXWSAslA1A1QWvuXpmPLbfOSoaM+mB6mB4UEiTjxlw0RjUFrj6/U2uCLe8ZIX1zMT8XA0xT/AFcOugm+7bDLarLGBqpU+eDkU9a8R/Lqsqs6dzuLz9XkdpVsuByEkFXA1M8MhxJq5w3jrTDFaWCaCVA3oOk8gjn2I4Nx7Pp7yIOtRn8VPT0/1Y6jK426WNhNaT6Woe0jz9QPX18j59C71N0X23ubc2RTM7tp6XGZyL+F1r4aklSulgqlSOb1TyJBGVcAJwSiAWPJ9qpJ7P6dUhgKgHiaH8qcf29N21nuMs7eLKNB9Ac/5Menp1shfAP4/Y7avafSO0KGmeWmh3jjsxkaqdf8syCYZP4pka/JSsq/dTSJQAM9gtrW4Hu+zn6vedvgGV1hv95zn9n8h0r36I7TyvvFzUVMZSvmS9APyNcDy62noqgsWdzcuxd7kXDSMTx+fqfcxHJ1dY74Hlw6cUmQkFW5XkG/IP8AvZ+vtzUGAB6uoIA6cU/dAJNybH9X+82/A9+Pbw4Edb49ZNH+0j62+h+v+q/1vddR9T16g6//0b0pMmGUDyHUB9P6j6C/+F/fqjNevdRlrZtaJGvkZ2CqgP6mc8Dkhf8AEk8Af4e2/GpUMvb1up9etaD+br/MJi7Kx2Y+K3SuXar2PjcoY+3d2UEh+33jmcNVK8Oy8NOh/f2rh8hD5K2cemuqo1RbwodZ1Z2ron1Eo/VIwPQfP59JLifJVfI5Pz/1DoEv5b3cOO3bRN0tuuuMW4tvq+T2LXTMyVGSw1OS9XhqeS5d8jgnfyoBdnpST/utvch7FuAlgWykekyDtPmR/wBC/wA+sT/eTkpts3I82bZAp265ak60qElIpqI/gl/F6NWvxDq6PGdUY7e2KrsCq0lBn5Vd1glKxYvKs7kpUQQoScbV1RBLFB4Wa+pQT7AnOXtPtfMU8u67MUtN/wCLeUM5/pqPgf8ApqKHiw8+hx7O/en5k9tre15e5uWbd/b9aKudV5Yg8Fhdv7eBRWkUh1KMI4pp6r87j+OWX2jl6umq8PW4uvjZ5ZKeaAoZo2ZmWSIqpjkhkX9MiEo4/qfePl9s25bReybdu9o8N6uSCOI8mUjDIf4gaf4OugWy81cq887Lb8y8n7vFebRKcOhyrUykiGjRyLwZHCsDnIoel58ftrYeU0Bp6V/4yjGCuppqUqtPIspP3Lysqq/p/Synj2jnEkdVdR8qdCGwkiaJPCNHOGwMDo8y91L1L8kPiXsfbFTG26N5dqYqmrhASTjtm4bDZvP7mnnZD+3DNQ4sROznRplIb629jj2t2w33NMCtHWM28wNc/EjCucg1PH7OoK+8zzSeX/bK7vIbgxzw3tk4INK6LmI6T6qRUEeYOetnOmnMwWWJlMUqiWLQQytDMolp5FkBs8bxNdSDYgix9jgVHaeIx+z/AGegedOssv8AZtQj7Dkf4R06wuf8NVwSv1/PH+8D+vvfTnTvT1JS4tf8A2A/2BP0sPdwwI0tw611O+6P9R+i/wDsP9v9f9497pH69ez1/9Kxfv35TdKfGPbsm4e5N+Y3bLPC0uK21C4yO8twSadSU2G2zTO2QlLvx5ZFjgW9y/uscU07fpr2+vkP9Xy62zIg7jnrW6+XH82Huj5HLlOv+pI8j011DXxT0eRNBXX7D3hQygpJDns9SlRgsZUwn10VAQXVtMszLdfZ1abekRVmzJ+wDpFLOzVAHb1WBilafHGCR1M2Nmlonb0F9MDMIizBhfVEQSfze/szA1Djw6TE5r0otp5rMbD3Lh94bUycuK3Bt7MUWZxFfSEl6Svo5RPGzk/rhOgrIjXV42ZWuGPt2J3t5Y5ozSRTUf6v5H5dF+5WFnu1hebbfxCSymQq6nzBHl6H0PEEV620PjF3zgfkR1hs7t/a5pKLceN0YbfuApgqjA7kptByFKYJNTDHVyMKqie4BhkAFyp9j+0uFu4Y7qM8fiHzHWC/NnLl1yjvN9y9fVMdNcL/AMcTfC3oSPhYcQw+fQ7/ADM+SXVmyeptu7f3FsObtHtbd1dBj+stq4aqixGehSCenj3BuCuzrxzfwfb2IWUR3lDpWVkkcSgWZlpzBsezcwbPJa73bakWpRxiSM+RRuI+Y+Fhg+XRX7c8587+33OMG7cjbqY2dgtxA9Wt7pK08KVK6cn4ZRSRD3A8QQH2FVbKj2nkuwcOjw4vHUVdNmaTJx/Z5nC5LGo38TwW4KAHXQ5XGTEI6BmjmDLLGXjcH3iVzNyze7BuSWdxJ4lvIuqGUCgkStK08mFAHU5U08iD1129tPc3ZfcPlufetugNtuFq/hXloxBktpwA2kkYeNwdUMg7XX0ZSBXnkPlP1x8be3sP8yfkfis9k8GcpQ9XdUbMwppBnczld91lDFumvxcOSaOmON2H15A1VkJTZFatjp7+adB7lD2rhttpnuN9nStqCtvH6tI57yK8QgNW9Bjj1i796KHd+edst+RdpuVjv2jbcLjVWkcEFfAVgMhppBpjHmRq4AkKnqL+bb8uviTvfdeHwO64u+eldvb4z9JQ9Z9pTVdZPTbPqMjNk8A+yd4oJN0bXthKyMJSytWUMTAKIAB7Ee57bAt5dRMpRtbUI+3gR9nR/wAqbr+9eWOX9xR9TS2cRPmKhArfzBr1sefD/wDnP/Cn5XQ4rC1O9G6I7Sq0ijm687eqqXEUlRXPZXh27vhGG2s1E0hIj8klNKRbUinj2QzbfcQkkLrj9R/m6E6zo1Axo3Vu8LGWnp6mNo5qSsiSekq6eWOoo6uBxqjmpKuB5KergcEFXjZlP9T7R+ZUjuHl0/1K/wCQD9NH6h+r/U/77n3uh9D17r//09YbtH/SD/fiu/0sf3y/v/5X/j/9+/4v/eTzeRvL91/Hf8q8Wr/kD+nsQjR26aaflw6L21VOr4vn13i9Hki0+TTpXx2v9NP9vTx9f9hb2pHyp0ya5r1KxPi+/wAxe1vuk16/p/wEptWrT6bfT6fj/Y+7GmttXr17yH2dOFVp+1m8V/H4o/J4ravF5D5NP4ta2r86f9j78K0WnVBTOr1/4rq2D+Ub/pM/0v7z/u1b/Rb/AHWH+kb7ryfZfe3k/uf9lp/b/vD5/Npvx9tfVxo9iflnxfqLjT/uLp7vSv4aV868f6PWPv3iP3P/AFe2jx6/1h+oP0+n4tGPG1+ej4dP/DKUxXo9/bP93P8ATlub/SB/eT+/f8KXx+fyf3W/0Y+F/wC7/wDc77D/AHK/a/d3/iGrj77y6/Xp9yTbfuvwH+q0004rxp51rin2/Ly6wfvv63/WWf7h1U7tdKadWdNP9E1cK+XUzoj+7X8K790f3l/uN91sr+NfxPT4/H/Fl/iH+f8A9yn3vi8mrzfufZX186fcHe+X0H7i2H6D+3+qfw/hro8M66fnp/21Os4vuOf1h/rp7k/v3/cH92QfUfHp8bxx4erV5011/Fp1U6pb/nL/AMA/0gYj+/H94v4Z/cbM/wChL+AeD+5n2euP7z+Da/T/ABf+NeH+IW/f1+LycafZ7af1V/qbsf7t1/T/AEreHSlfEx4nif8ADfE+Lzrwx0Twf68P+vLz5/WH6X6v96xfU69Wn6X/AEDwKY+m+n/svKlfxV6TtB/H/u5v7x+L+Lf6POtP7x6dWn+9H9yMR/EfDf8AtX0+S/Hkv+Pafda/VN4/9voTX/p9K1/P/Z6lr2w8P+qNj9NX93+Pc/T14+B48nh/8Z4fKnQcZf8Ag1/8g1fxP77/ACny6NOq51W8X+R6ddtHj51fXn2XrpodNepBPE16vm/lnf8ADyn21D/srX+k7/Rjqhv/AKSvt/8AQv8Ab6vRp/0j/wC4bT9f+AH7t72/HtFc/Q/6Pp1fL4vypnp1PG/DWletif8A7HXf+AMf8eN/1fv+P2/+un/rC9l3+Jf8O/n8P+fpT+t/L/V+fX//2Q==
-REV:20121111T231052Z
-END:VCARD
+BEGIN:VCARD
+VERSION:2.1
+N:Sommer;Torsten
+FN:Torsten Sommer
+ORG:TESIS DYNAware GmbH
+TITLE:Dipl.-Ing.
+TEL;WORK;VOICE:+49 89 747377-7438
+TEL;WORK;FAX:+49 89 747377 99
+TEL;PREF:+49 89 747377-7438
+ADR;WORK:;;Baierbrunner Str. 15;Mnchen;;D-81379;Germany
+LABEL;WORK;ENCODING=QUOTED-PRINTABLE:Baierbrunner Str. 15=0D=0AM=FCnchen D-81379=0D=0AGermany
+URL;HOME:http://www.tesis-dynaware.de/
+URL;WORK:http://www.tesis-dynaware.de/
+EMAIL;PREF;INTERNET:torsten.sommer@tesis.de
+PHOTO;TYPE=JPEG;ENCODING=BASE64:
+ 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de/+ttEoL9n5v0p1XLJIHds4/kj5B9R+rP8Azygfs31fs/8Awv8ANf8Ag3t/zV13/Zt/3R+h5/T/ANf+tLwBJDr0Xv8A/9n/7SeYUGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAAAccAgAAAm9sADhCSU0EJQAAAAAAEHUqq0lMt8MP2eTQze+bRII4QklNA+oAAAAAGA88P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pgo8IURPQ1RZUEUgcGxpc3QgUFVCTElDICItLy9BcHBsZS8vRFREIFBMSVNUIDEuMC8vRU4iICJodHRwOi8vd3d3LmFwcGxlLmNvbS9EVERzL1Byb3BlcnR5TGlzdC0xLjAuZHRkIj4KPHBsaXN0IHZlcnNpb249IjEuMCI+CjxkaWN0PgoJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTUhvcml6b250YWxSZXM8L2tleT4KCTxkaWN0PgoJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5jcmVhdG9yPC9rZXk+CgkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc+CgkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCTxhcnJheT4KCQkJPGRpY3Q+CgkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNSG9yaXpvbnRhbFJlczwva2V5PgoJCQkJPHJlYWw+NzI8L3JlYWw+CgkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuc3RhdGVGbGFnPC9rZXk+CgkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQk8L2RpY3Q+CgkJPC9hcnJheT4KCTwvZGljdD4KCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQuUE1PcmllbnRhdGlvbjwva2V5PgoJPGRpY3Q+CgkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk+CgkJPGFycmF5PgoJCQk8ZGljdD4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQuUE1PcmllbnRhdGlvbjwva2V5PgoJCQkJPGludGVnZXI+MTwvaW50ZWdlcj4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CgkJCTwvZGljdD4KCQk8L2FycmF5PgoJPC9kaWN0PgoJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTVNjYWxpbmc8L2tleT4KCTxkaWN0PgoJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5jcmVhdG9yPC9rZXk+CgkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc+CgkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCTxhcnJheT4KCQkJPGRpY3Q+CgkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNU2NhbGluZzwva2V5PgoJCQkJPHJlYWw+MTwvcmVhbD4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CgkJCTwvZGljdD4KCQk8L2FycmF5PgoJPC9kaWN0PgoJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTVZlcnRpY2FsUmVzPC9rZXk+Cgk8ZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCTxzdHJpbmc+Y29tLmFwcGxlLmpvYnRpY2tldDwvc3RyaW5nPgoJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQk8YXJyYXk+CgkJCTxkaWN0PgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTVZlcnRpY2FsUmVzPC9rZXk+CgkJCQk8cmVhbD43MjwvcmVhbD4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CgkJCTwvZGljdD4KCQk8L2FycmF5PgoJPC9kaWN0PgoJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTVZlcnRpY2FsU2NhbGluZzwva2V5PgoJPGRpY3Q+CgkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk+CgkJPGFycmF5PgoJCQk8ZGljdD4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQuUE1WZXJ0aWNhbFNjYWxpbmc8L2tleT4KCQkJCTxyZWFsPjE8L3JlYWw+CgkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuc3RhdGVGbGFnPC9rZXk+CgkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQk8L2RpY3Q+CgkJPC9hcnJheT4KCTwvZGljdD4KCTxrZXk+Y29tLmFwcGxlLnByaW50LnN1YlRpY2tldC5wYXBlcl9pbmZvX3RpY2tldDwva2V5PgoJPGRpY3Q+CgkJPGtleT5QTVBQRFBhcGVyQ29kZU5hbWU8L2tleT4KCQk8ZGljdD4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc+CgkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQkJPGFycmF5PgoJCQkJPGRpY3Q+CgkJCQkJPGtleT5QTVBQRFBhcGVyQ29kZU5hbWU8L2tleT4KCQkJCQk8c3RyaW5nPkE0PC9zdHJpbmc+CgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CgkJCQk8L2RpY3Q+CgkJCTwvYXJyYXk+CgkJPC9kaWN0PgoJCTxrZXk+UE1UaW9nYVBhcGVyTmFtZTwva2V5PgoJCTxkaWN0PgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCQk8YXJyYXk+CgkJCQk8ZGljdD4KCQkJCQk8a2V5PlBNVGlvZ2FQYXBlck5hbWU8L2tleT4KCQkJCQk8c3RyaW5nPmlzby1hNDwvc3RyaW5nPgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQkJPC9kaWN0PgoJCQk8L2FycmF5PgoJCTwvZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNQWRqdXN0ZWRQYWdlUmVjdDwva2V5PgoJCTxkaWN0PgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCQk8YXJyYXk+CgkJCQk8ZGljdD4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNQWRqdXN0ZWRQYWdlUmVjdDwva2V5PgoJCQkJCTxhcnJheT4KCQkJCQkJPGludGVnZXI+MDwvaW50ZWdlcj4KCQkJCQkJPGludGVnZXI+MDwvaW50ZWdlcj4KCQkJCQkJPHJlYWw+NzgzPC9yZWFsPgoJCQkJCQk8cmVhbD41NTk8L3JlYWw+CgkJCQkJPC9hcnJheT4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuc3RhdGVGbGFnPC9rZXk+CgkJCQkJPGludGVnZXI+MDwvaW50ZWdlcj4KCQkJCTwvZGljdD4KCQkJPC9hcnJheT4KCQk8L2RpY3Q+CgkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTUFkanVzdGVkUGFwZXJSZWN0PC9rZXk+CgkJPGRpY3Q+CgkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5jcmVhdG9yPC9rZXk+CgkJCTxzdHJpbmc+Y29tLmFwcGxlLmpvYnRpY2tldDwvc3RyaW5nPgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk+CgkJCTxhcnJheT4KCQkJCTxkaWN0PgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQuUE1BZGp1c3RlZFBhcGVyUmVjdDwva2V5PgoJCQkJCTxhcnJheT4KCQkJCQkJPHJlYWw+LTE4PC9yZWFsPgoJCQkJCQk8cmVhbD4tMTg8L3JlYWw+CgkJCQkJCTxyZWFsPjgyNDwvcmVhbD4KCQkJCQkJPHJlYWw+NTc3PC9yZWFsPgoJCQkJCTwvYXJyYXk+CgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CgkJCQk8L2RpY3Q+CgkJCTwvYXJyYXk+CgkJPC9kaWN0PgoJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhcGVySW5mby5QTVBhcGVyTmFtZTwva2V5PgoJCTxkaWN0PgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCQk8c3RyaW5nPmNvbS5hcHBsZS5qb2J0aWNrZXQ8L3N0cmluZz4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCQk8YXJyYXk+CgkJCQk8ZGljdD4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYXBlckluZm8uUE1QYXBlck5hbWU8L2tleT4KCQkJCQk8c3RyaW5nPmlzby1hNDwvc3RyaW5nPgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQkJPC9kaWN0PgoJCQk8L2FycmF5PgoJCTwvZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYXBlckluZm8uUE1VbmFkanVzdGVkUGFnZVJlY3Q8L2tleT4KCQk8ZGljdD4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNyZWF0b3I8L2tleT4KCQkJPHN0cmluZz5jb20uYXBwbGUuam9idGlja2V0PC9zdHJpbmc+CgkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQkJPGFycmF5PgoJCQkJPGRpY3Q+CgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvLlBNVW5hZGp1c3RlZFBhZ2VSZWN0PC9rZXk+CgkJCQkJPGFycmF5PgoJCQkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQkJCQk8cmVhbD43ODM8L3JlYWw+CgkJCQkJCTxyZWFsPjU1OTwvcmVhbD4KCQkJCQk8L2FycmF5PgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQkJPC9kaWN0PgoJCQk8L2FycmF5PgoJCTwvZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYXBlckluZm8uUE1VbmFkanVzdGVkUGFwZXJSZWN0PC9rZXk+CgkJPGRpY3Q+CgkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5jcmVhdG9yPC9rZXk+CgkJCTxzdHJpbmc+Y29tLmFwcGxlLmpvYnRpY2tldDwvc3RyaW5nPgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk+CgkJCTxhcnJheT4KCQkJCTxkaWN0PgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhcGVySW5mby5QTVVuYWRqdXN0ZWRQYXBlclJlY3Q8L2tleT4KCQkJCQk8YXJyYXk+CgkJCQkJCTxyZWFsPi0xODwvcmVhbD4KCQkJCQkJPHJlYWw+LTE4PC9yZWFsPgoJCQkJCQk8cmVhbD44MjQ8L3JlYWw+CgkJCQkJCTxyZWFsPjU3NzwvcmVhbD4KCQkJCQk8L2FycmF5PgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQkJPC9kaWN0PgoJCQk8L2FycmF5PgoJCTwvZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYXBlckluZm8ucHBkLlBNUGFwZXJOYW1lPC9rZXk+CgkJPGRpY3Q+CgkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5jcmVhdG9yPC9rZXk+CgkJCTxzdHJpbmc+Y29tLmFwcGxlLmpvYnRpY2tldDwvc3RyaW5nPgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9rZXk+CgkJCTxhcnJheT4KCQkJCTxkaWN0PgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhcGVySW5mby5wcGQuUE1QYXBlck5hbWU8L2tleT4KCQkJCQk8c3RyaW5nPkE0PC9zdHJpbmc+CgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CgkJCQk8L2RpY3Q+CgkJCTwvYXJyYXk+CgkJPC9kaWN0PgoJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5BUElWZXJzaW9uPC9rZXk+CgkJPHN0cmluZz4wMC4yMDwvc3RyaW5nPgoJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC50eXBlPC9rZXk+CgkJPHN0cmluZz5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvVGlja2V0PC9zdHJpbmc+Cgk8L2RpY3Q+Cgk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuQVBJVmVyc2lvbjwva2V5PgoJPHN0cmluZz4wMC4yMDwvc3RyaW5nPgoJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnR5cGU8L2tleT4KCTxzdHJpbmc+Y29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXRUaWNrZXQ8L3N0cmluZz4KPC9kaWN0Pgo8L3BsaXN0PgoAOEJJTQPtAAAAAAAQAEf//wACAAIAR///AAIAAjhCSU0EJgAAAAAADgAAAAAAAAAAAAA/gAAAOEJJTQQNAAAAAAAEAAAAeDhCSU0EGQAAAAAABAAAAB44QklNA/MAAAAAAAkAAAAAAAAAAAEAOEJJTQQKAAAAAAABAAA4QklNJxAAAAAAAAoAAQAAAAAAAAACOEJJTQP1AAAAAABIAC9mZgABAGxmZgAGAAAAAAABAC9mZgABAKGZmgAGAAAAAAABADIAAAABAFoAAAAGAAAAAAABADUAAAABAC0AAAAGAAAAAAABOEJJTQP4AAAAAABwAAD/////////////////////////////A+gAAAAA/////////////////////////////wPoAAAAAP////////////////////////////8D6AAAAAD/////////////////////////////A+gAADhCSU0ECAAAAAAAEAAAAAEAAAJAAAACQAAAAAA4QklNBB4AAAAAAAQAAAAAOEJJTQQaAAAAAANVAAAABgAAAAAAAAAAAAAAZAAAAFoAAAAQAHAAcgBvAHQAcgBhAGkAdAAtADEANAAwAHgAMQA4ADAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAFoAAABkAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAEAAAAAAABudWxsAAAAAgAAAAZib3VuZHNPYmpjAAAAAQAAAAAAAFJjdDEAAAAEAAAAAFRvcCBsb25nAAAAAAAAAABMZWZ0bG9uZwAAAAAAAAAAQnRvbWxvbmcAAABkAAAAAFJnaHRsb25nAAAAWgAAAAZzbGljZXNWbExzAAAAAU9iamMAAAABAAAAAAAFc2xpY2UAAAASAAAAB3NsaWNlSURsb25nAAAAAAAAAAdncm91cElEbG9uZwAAAAAAAAAGb3JpZ2luZW51bQAAAAxFU2xpY2VPcmlnaW4AAAANYXV0b0dlbmVyYXRlZAAAAABUeXBlZW51bQAAAApFU2xpY2VUeXBlAAAAAEltZyAAAAAGYm91bmRzT2JqYwAAAAEAAAAAAABSY3QxAAAABAAAAABUb3AgbG9uZwAAAAAAAAAATGVmdGxvbmcAAAAAAAAAAEJ0b21sb25n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OmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIiBkYzpmb3JtYXQ9ImltYWdlL2pwZWciIHhhcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTMyBNYWNpbnRvc2giIHhhcDpDcmVhdGVEYXRlPSIyMDEwLTA2LTE1VDE5OjA5OjEyKzAyOjAwIiB4YXA6TW9kaWZ5RGF0ZT0iMjAxMi0xMS0xMVQyMzozOTo1NyswMTowMCIgeGFwOk1ldGFkYXRhRGF0ZT0iMjAxMi0xMS0xMVQyMzozOTo1NyswMTowMCIgeGFwTU06RG9jdW1lbnRJRD0idXVpZDo5MEExOTc4MTQzN0FERjExOTExMkZGMDI2OUVFQjI1MSIgeGFwTU06SW5zdGFuY2VJRD0idXVpZDowN0Y4MDgyN0VCMkRFMjExOERDQ0YzQUQ4NDRFQ0Y0NyIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgcGhvdG9zaG9wOklDQ1Byb2ZpbGU9InNSR0IgSUVDNjE5NjYtMi4xIiBwaG90b3Nob3A6SGlzdG9yeT0iIiB0aWZmOk9yaWVudGF0aW9uPSIxIiB0aWZmOlhSZXNvbHV0aW9uPSIyODM0NjUvMTAwMDAiIHRpZmY6WVJlc29sdXRpb249IjI4MzQ2NS8xMDAwMCIgdGlmZjpSZXNvbHV0aW9uVW5pdD0iMyIgdGlmZjpOYXRpdmVEaWdlc3Q9IjI1NiwyNTcsMjU4LDI1OSwyNjIsMjc0LDI3NywyODQsNTMwLDUzMSwyODIsMjgzLDI5NiwzMDEsMzE4LDMxOSw1MjksNTMyLDMwNiwyNzAsMjcxLDI3MiwzMDUsMzE1LDMzNDMyOzI2MjExOTRDNEE1NjY5MTUwRjZDRjRDNDA0NUI3RTJFIiBleGlmOlBpeGVsWERpbWVuc2lvbj0iOTAiIGV4aWY6UGl4ZWxZRGltZW5zaW9uPSIxMDAiIGV4aWY6Q29sb3JTcGFjZT0iMSIgZXhpZjpOYXRpdmVEaWdlc3Q9IjM2ODY0LDQwOTYwLDQwOTYxLDM3MTIxLDM3MTIyLDQwOTYyLDQwOTYzLDM3NTEwLDQwOTY0LDM2ODY3LDM2ODY4LDMzNDM0LDMzNDM3LDM0ODUwLDM0ODUyLDM0ODU1LDM0ODU2LDM3Mzc3LDM3Mzc4LDM3Mzc5LDM3MzgwLDM3MzgxLDM3MzgyLDM3MzgzLDM3Mzg0LDM3Mzg1LDM3Mzg2LDM3Mzk2LDQxNDgzLDQxNDg0LDQxNDg2LDQxNDg3LDQxNDg4LDQxNDkyLDQxNDkzLDQxNDk1LDQxNzI4LDQxNzI5LDQxNzMwLDQxOTg1LDQxOTg2LDQxOTg3LDQxOTg4LDQxOTg5LDQxOTkwLDQxOTkxLDQxOTkyLDQxOTkzLDQxOTk0LDQxOTk1LDQxOTk2LDQyMDE2LDAsMiw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwyMCwyMiwyMywyNCwyNSwyNiwyNywyOCwzMDs4RTlEMkMwMjUwM0M1NDQ0MzlEQUQzNTEyNUNFNkVCMCI+IDx4YXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ1dWlkOjhEQTE5NzgxNDM3QURGMTE5MTEyRkYwMjY5RUVCMjUxIiBzdFJlZjpkb2N1bWVudElEPSJ1dWlkOjhEQTE5NzgxNDM3QURGMTE5MTEyRkYwMjY5RUVCMjUxIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/eHBhY2tldCBlbmQ9InciPz7/4gxYSUNDX1BST0ZJTEUAAQEAAAxITGlubwIQAABtbnRyUkdCIFhZWiAHzgACAAkABgAxAABhY3NwTVNGVAAAAABJRUMgc1JHQgAAAAAAAAAAAAAAAQAA9tYAAQAAAADTLUhQICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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
+REV:20121111T231052Z
+END:VCARD
diff --git a/demos/org.eclipse.fx.demo.contacts.app/vcards/Yves YANG.vcf b/demos/org.eclipse.fx.demo.contacts.app/vcards/Yves YANG.vcf
index e417f325a..1bf03a7d3 100755
--- a/demos/org.eclipse.fx.demo.contacts.app/vcards/Yves YANG.vcf
+++ b/demos/org.eclipse.fx.demo.contacts.app/vcards/Yves YANG.vcf
@@ -1,68 +1,68 @@
-BEGIN:VCARD
-VERSION:2.1
-N;LANGUAGE=en-us:YANG;Yves
-FN:Yves YANG
-ORG:Soyatec
-TITLE:XWT
-NOTE:Modeling & Declarative UI
-TEL;WORK;VOICE:+33 (1) 60130667
-TEL;CELL;VOICE:+33 (6) 20743945
-TEL;WORK;FAX:+33 (9) 58070667
-ADR;WORK;PREF;CHARSET=Windows-1252:;;1, alle des Mongasques;Massy;;91300;France
-LABEL;WORK;PREF;CHARSET=Windows-1252;ENCODING=QUOTED-PRINTABLE:1, all=E9e des Mon=E9gasques=0D=0A=
-91300 Massy
-X-MS-OL-DEFAULT-POSTAL-ADDRESS:2
-URL;WORK:http://www.soyatec.com
-EMAIL;PREF;INTERNET:yves.yang@soyatec.com
-PHOTO;TYPE=JPEG;ENCODING=BASE64:
- /9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQY
- GBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYa
- KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAAR
- CABgAEUDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAA
- AgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkK
- FhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWG
- h4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl
- 5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREA
- AgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYk
- NOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOE
- hYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk
- 5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwBPDXiP4eQ+GdJjvNO0x7pLSFZS2nqxLhBu
- JO3k5zzV2TxX8NR00jTT9NLT/wCJrwewGbKD/rmv8qkmcRjnO70quULntUni/wCHC5xodiR7
- aZH/AIVl33jrwGgxaeGbGRj3bT4gB+leNTSM3U8elR5pcpaR6wvj7wmj/vPCWmyJ6pZxKf1B
- qwnjzwR28JW+fQ2cP+FePU4cHijlHynsLePPBm4BPBtofXNrAP6V1Hw+vfC/jDULu2i8J6bb
- C3iEpZ7aJt2TjHC189Ruc89a9h/Z3mVdf1VWOC1qoH/fVDVhWIv2g9F0rTjoP2DTLG18z7Rv
- 8m3RN2PLxnA56n86Ku/tJHP/AAjv/bx/7SoqRM4HTbC0t9Aiup2YAW6Pz6lelcq0hkkZznce
- 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
-
-X-MS-OL-DESIGN;CHARSET=utf-8:<card xmlns="http://schemas.microsoft.com/office/outlook/12/electronicbusinesscards" ver="1.0" layout="left" bgcolor="ffffff"><img xmlns="" align="tleft" area="32" use="photo"/><fld xmlns="" prop="name" align="left" dir="ltr" style="b" color="000000" size="10"/><fld xmlns="" prop="org" align="left" dir="ltr" color="000000" size="8"/><fld xmlns="" prop="title" align="left" dir="ltr" color="000000" size="8"/><fld xmlns="" prop="telwork" align="left" dir="ltr" color="000000" size="8"><label align="right" color="626262">Work</label></fld><fld xmlns="" prop="telcell" align="left" dir="ltr" color="000000" size="8"><label align="right" color="626262">Mobile</label></fld><fld xmlns="" prop="email" align="left" dir="ltr" color="000000" size="8"/><fld xmlns="" prop="addrwork" align="left" dir="ltr" color="000000" size="8"/><fld xmlns="" prop="webwork" align="left" dir="ltr" color="000000" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/></card>
-REV:20090602T075537Z
-END:VCARD
+BEGIN:VCARD
+VERSION:2.1
+N;LANGUAGE=en-us:YANG;Yves
+FN:Yves YANG
+ORG:Soyatec
+TITLE:XWT
+NOTE:Modeling & Declarative UI
+TEL;WORK;VOICE:+33 (1) 60130667
+TEL;CELL;VOICE:+33 (6) 20743945
+TEL;WORK;FAX:+33 (9) 58070667
+ADR;WORK;PREF;CHARSET=Windows-1252:;;1, alle des Mongasques;Massy;;91300;France
+LABEL;WORK;PREF;CHARSET=Windows-1252;ENCODING=QUOTED-PRINTABLE:1, all=E9e des Mon=E9gasques=0D=0A=
+91300 Massy
+X-MS-OL-DEFAULT-POSTAL-ADDRESS:2
+URL;WORK:http://www.soyatec.com
+EMAIL;PREF;INTERNET:yves.yang@soyatec.com
+PHOTO;TYPE=JPEG;ENCODING=BASE64:
+ /9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQY
+ GBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYa
+ KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAAR
+ CABgAEUDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAA
+ AgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkK
+ FhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWG
+ h4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl
+ 5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREA
+ AgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYk
+ NOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOE
+ hYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk
+ 5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwBPDXiP4eQ+GdJjvNO0x7pLSFZS2nqxLhBu
+ JO3k5zzV2TxX8NR00jTT9NLT/wCJrwewGbKD/rmv8qkmcRjnO70quULntUni/wCHC5xodiR7
+ aZH/AIVl33jrwGgxaeGbGRj3bT4gB+leNTSM3U8elR5pcpaR6wvj7wmj/vPCWmyJ6pZxKf1B
+ qwnjzwR28JW+fQ2cP+FePU4cHijlHynsLePPBm4BPBtofXNrAP6V1Hw+vfC/jDULu2i8J6bb
+ C3iEpZ7aJt2TjHC189Ruc89a9h/Z3mVdf1VWOC1qoH/fVDVhWIv2g9F0rTjoP2DTLG18z7Rv
+ 8m3RN2PLxnA56n86Ku/tJHP/AAjv/bx/7SoqRM4HTbC0t9Aiup2YAW6Pz6lelcq0hkkZznce
+ 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
+
+X-MS-OL-DESIGN;CHARSET=utf-8:<card xmlns="http://schemas.microsoft.com/office/outlook/12/electronicbusinesscards" ver="1.0" layout="left" bgcolor="ffffff"><img xmlns="" align="tleft" area="32" use="photo"/><fld xmlns="" prop="name" align="left" dir="ltr" style="b" color="000000" size="10"/><fld xmlns="" prop="org" align="left" dir="ltr" color="000000" size="8"/><fld xmlns="" prop="title" align="left" dir="ltr" color="000000" size="8"/><fld xmlns="" prop="telwork" align="left" dir="ltr" color="000000" size="8"><label align="right" color="626262">Work</label></fld><fld xmlns="" prop="telcell" align="left" dir="ltr" color="000000" size="8"><label align="right" color="626262">Mobile</label></fld><fld xmlns="" prop="email" align="left" dir="ltr" color="000000" size="8"/><fld xmlns="" prop="addrwork" align="left" dir="ltr" color="000000" size="8"/><fld xmlns="" prop="webwork" align="left" dir="ltr" color="000000" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/></card>
+REV:20090602T075537Z
+END:VCARD
diff --git a/demos/org.eclipse.fx.demo.contacts.edit.tests/src/org/eclipse/fx/demo/contacts/edit/ContactItemProviderTest.java b/demos/org.eclipse.fx.demo.contacts.edit.tests/src/org/eclipse/fx/demo/contacts/edit/ContactItemProviderTest.java
index a5c37e6b5..9bd2b3b18 100755..100644
--- a/demos/org.eclipse.fx.demo.contacts.edit.tests/src/org/eclipse/fx/demo/contacts/edit/ContactItemProviderTest.java
+++ b/demos/org.eclipse.fx.demo.contacts.edit.tests/src/org/eclipse/fx/demo/contacts/edit/ContactItemProviderTest.java
@@ -28,6 +28,7 @@ public class ContactItemProviderTest {
static final String FIRST_NAME = "Hans";
static final String LAST_NAME = "Wurst";
+ static final String E_MAIL = "hans.wurst@example.com";
Contact contact;
ContactItemProvider contactItemProvider;
@@ -56,6 +57,8 @@ public class ContactItemProviderTest {
public void getImageWithValidName() {
contact.setFirstName(FIRST_NAME);
contact.setLastName(LAST_NAME);
+ contact.setEmail(E_MAIL);
+
Object image = contactItemProvider.getImage(contact);
assertTrue("Image should be a URL", image instanceof URL);
URL imageURL = (URL) image;
diff --git a/demos/org.eclipse.fx.demo.contacts.edit.tests/src/org/eclipse/fx/demo/contacts/edit/GroupItemProviderTest.java b/demos/org.eclipse.fx.demo.contacts.edit.tests/src/org/eclipse/fx/demo/contacts/edit/GroupItemProviderTest.java
index 9388b859f..9388b859f 100755..100644
--- a/demos/org.eclipse.fx.demo.contacts.edit.tests/src/org/eclipse/fx/demo/contacts/edit/GroupItemProviderTest.java
+++ b/demos/org.eclipse.fx.demo.contacts.edit.tests/src/org/eclipse/fx/demo/contacts/edit/GroupItemProviderTest.java
diff --git a/demos/org.eclipse.fx.demo.contacts.edit/src/org/eclipse/fx/demo/contacts/provider/ContactItemProvider.java b/demos/org.eclipse.fx.demo.contacts.edit/src/org/eclipse/fx/demo/contacts/provider/ContactItemProvider.java
index 07c83f9ab..49a43020d 100755..100644
--- a/demos/org.eclipse.fx.demo.contacts.edit/src/org/eclipse/fx/demo/contacts/provider/ContactItemProvider.java
+++ b/demos/org.eclipse.fx.demo.contacts.edit/src/org/eclipse/fx/demo/contacts/provider/ContactItemProvider.java
@@ -1,606 +1,613 @@
-/**
- * Copyright (c) 2012 TESIS DYNAware GmbH 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:
- * Torsten Sommer <torsten.sommer@tesis.de> - initial API and implementation
- */
-package org.eclipse.fx.demo.contacts.provider;
-
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-
-import org.eclipse.emf.common.notify.AdapterFactory;
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.common.util.Diagnostic;
-import org.eclipse.emf.common.util.ResourceLocator;
-import org.eclipse.emf.ecore.util.Diagnostician;
-import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
-import org.eclipse.emf.edit.provider.ComposedImage;
-import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
-import org.eclipse.emf.edit.provider.IItemLabelProvider;
-import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
-import org.eclipse.emf.edit.provider.IItemPropertySource;
-import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
-import org.eclipse.emf.edit.provider.ITableItemLabelProvider;
-import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
-import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
-import org.eclipse.emf.edit.provider.ItemProviderAdapter;
-import org.eclipse.emf.edit.provider.ViewerNotification;
-import org.eclipse.fx.demo.contacts.Contact;
-import org.eclipse.fx.demo.contacts.ContactsPackage;
-
-/**
- * This is the item provider adapter for a {@link org.eclipse.fx.demo.contacts.Contact} object.
- * <!-- begin-user-doc -->
- * @implements ITableItemLabelProvider
- * <!-- end-user-doc -->
- * @generated
- */
-public class ContactItemProvider
- extends ItemProviderAdapter
- implements
- IEditingDomainItemProvider,
- IStructuredItemContentProvider,
- ITreeItemContentProvider,
- IItemLabelProvider,
- IItemPropertySource,
- ITableItemLabelProvider {
- /**
- * This constructs an instance from a factory and a notifier.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
- public ContactItemProvider(AdapterFactory adapterFactory) {
- super(adapterFactory);
- }
-
- /**
- * This returns the property descriptors for the adapted class.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
- @Override
- public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
- if (itemPropertyDescriptors == null) {
- super.getPropertyDescriptors(object);
-
- addFirstNamePropertyDescriptor(object);
- addMiddleNamePropertyDescriptor(object);
- addLastNamePropertyDescriptor(object);
- addTitlePropertyDescriptor(object);
- addCompanyPropertyDescriptor(object);
- addJobTitlePropertyDescriptor(object);
- addStreetPropertyDescriptor(object);
- addCityPropertyDescriptor(object);
- addZipPropertyDescriptor(object);
- addStatePropertyDescriptor(object);
- addCountryPropertyDescriptor(object);
- addEmailPropertyDescriptor(object);
- addWebPagePropertyDescriptor(object);
- addPhonePropertyDescriptor(object);
- addMobilePropertyDescriptor(object);
- addNotePropertyDescriptor(object);
- addJpegStringPropertyDescriptor(object);
- addSourceFilePropertyDescriptor(object);
- }
- return itemPropertyDescriptors;
- }
-
- /**
- * This adds a property descriptor for the First Name feature.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
- protected void addFirstNamePropertyDescriptor(Object object) {
- itemPropertyDescriptors.add
- (createItemPropertyDescriptor
- (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
- getResourceLocator(),
- getString("_UI_Contact_firstName_feature"),
- getString("_UI_PropertyDescriptor_description", "_UI_Contact_firstName_feature", "_UI_Contact_type"),
- ContactsPackage.Literals.CONTACT__FIRST_NAME,
- true,
- false,
- false,
- ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
- null,
- null));
- }
-
- /**
- * This adds a property descriptor for the Middle Name feature.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
- protected void addMiddleNamePropertyDescriptor(Object object) {
- itemPropertyDescriptors.add
- (createItemPropertyDescriptor
- (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
- getResourceLocator(),
- getString("_UI_Contact_middleName_feature"),
- getString("_UI_PropertyDescriptor_description", "_UI_Contact_middleName_feature", "_UI_Contact_type"),
- ContactsPackage.Literals.CONTACT__MIDDLE_NAME,
- true,
- false,
- false,
- ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
- null,
- null));
- }
-
- /**
- * This adds a property descriptor for the Last Name feature.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
- protected void addLastNamePropertyDescriptor(Object object) {
- itemPropertyDescriptors.add
- (createItemPropertyDescriptor
- (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
- getResourceLocator(),
- getString("_UI_Contact_lastName_feature"),
- getString("_UI_PropertyDescriptor_description", "_UI_Contact_lastName_feature", "_UI_Contact_type"),
- ContactsPackage.Literals.CONTACT__LAST_NAME,
- true,
- false,
- false,
- ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
- null,
- null));
- }
-
- /**
- * This adds a property descriptor for the Title feature.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
- protected void addTitlePropertyDescriptor(Object object) {
- itemPropertyDescriptors.add
- (createItemPropertyDescriptor
- (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
- getResourceLocator(),
- getString("_UI_Contact_title_feature"),
- getString("_UI_PropertyDescriptor_description", "_UI_Contact_title_feature", "_UI_Contact_type"),
- ContactsPackage.Literals.CONTACT__TITLE,
- true,
- false,
- false,
- ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
- null,
- null));
- }
-
- /**
- * This adds a property descriptor for the Company feature.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
- protected void addCompanyPropertyDescriptor(Object object) {
- itemPropertyDescriptors.add
- (createItemPropertyDescriptor
- (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
- getResourceLocator(),
- getString("_UI_Contact_company_feature"),
- getString("_UI_PropertyDescriptor_description", "_UI_Contact_company_feature", "_UI_Contact_type"),
- ContactsPackage.Literals.CONTACT__COMPANY,
- true,
- false,
- false,
- ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
- null,
- null));
- }
-
- /**
- * This adds a property descriptor for the Job Title feature.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
- protected void addJobTitlePropertyDescriptor(Object object) {
- itemPropertyDescriptors.add
- (createItemPropertyDescriptor
- (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
- getResourceLocator(),
- getString("_UI_Contact_jobTitle_feature"),
- getString("_UI_PropertyDescriptor_description", "_UI_Contact_jobTitle_feature", "_UI_Contact_type"),
- ContactsPackage.Literals.CONTACT__JOB_TITLE,
- true,
- false,
- false,
- ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
- null,
- null));
- }
-
- /**
- * This adds a property descriptor for the Street feature.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
- protected void addStreetPropertyDescriptor(Object object) {
- itemPropertyDescriptors.add
- (createItemPropertyDescriptor
- (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
- getResourceLocator(),
- getString("_UI_Contact_street_feature"),
- getString("_UI_PropertyDescriptor_description", "_UI_Contact_street_feature", "_UI_Contact_type"),
- ContactsPackage.Literals.CONTACT__STREET,
- true,
- false,
- false,
- ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
- null,
- null));
- }
-
- /**
- * This adds a property descriptor for the City feature.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
- protected void addCityPropertyDescriptor(Object object) {
- itemPropertyDescriptors.add
- (createItemPropertyDescriptor
- (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
- getResourceLocator(),
- getString("_UI_Contact_city_feature"),
- getString("_UI_PropertyDescriptor_description", "_UI_Contact_city_feature", "_UI_Contact_type"),
- ContactsPackage.Literals.CONTACT__CITY,
- true,
- false,
- false,
- ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
- null,
- null));
- }
-
- /**
- * This adds a property descriptor for the Zip feature.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
- protected void addZipPropertyDescriptor(Object object) {
- itemPropertyDescriptors.add
- (createItemPropertyDescriptor
- (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
- getResourceLocator(),
- getString("_UI_Contact_zip_feature"),
- getString("_UI_PropertyDescriptor_description", "_UI_Contact_zip_feature", "_UI_Contact_type"),
- ContactsPackage.Literals.CONTACT__ZIP,
- true,
- false,
- false,
- ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
- null,
- null));
- }
-
- /**
- * This adds a property descriptor for the State feature.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
- protected void addStatePropertyDescriptor(Object object) {
- itemPropertyDescriptors.add
- (createItemPropertyDescriptor
- (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
- getResourceLocator(),
- getString("_UI_Contact_state_feature"),
- getString("_UI_PropertyDescriptor_description", "_UI_Contact_state_feature", "_UI_Contact_type"),
- ContactsPackage.Literals.CONTACT__STATE,
- true,
- false,
- false,
- ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
- null,
- null));
- }
-
- /**
- * This adds a property descriptor for the Country feature.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
- protected void addCountryPropertyDescriptor(Object object) {
- itemPropertyDescriptors.add
- (createItemPropertyDescriptor
- (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
- getResourceLocator(),
- getString("_UI_Contact_country_feature"),
- getString("_UI_PropertyDescriptor_description", "_UI_Contact_country_feature", "_UI_Contact_type"),
- ContactsPackage.Literals.CONTACT__COUNTRY,
- true,
- false,
- false,
- ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
- null,
- null));
- }
-
- /**
- * This adds a property descriptor for the Email feature.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
- protected void addEmailPropertyDescriptor(Object object) {
- itemPropertyDescriptors.add
- (createItemPropertyDescriptor
- (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
- getResourceLocator(),
- getString("_UI_Contact_email_feature"),
- getString("_UI_PropertyDescriptor_description", "_UI_Contact_email_feature", "_UI_Contact_type"),
- ContactsPackage.Literals.CONTACT__EMAIL,
- true,
- false,
- false,
- ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
- null,
- null));
- }
-
- /**
- * This adds a property descriptor for the Web Page feature.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
- protected void addWebPagePropertyDescriptor(Object object) {
- itemPropertyDescriptors.add
- (createItemPropertyDescriptor
- (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
- getResourceLocator(),
- getString("_UI_Contact_webPage_feature"),
- getString("_UI_PropertyDescriptor_description", "_UI_Contact_webPage_feature", "_UI_Contact_type"),
- ContactsPackage.Literals.CONTACT__WEB_PAGE,
- true,
- false,
- false,
- ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
- null,
- null));
- }
-
- /**
- * This adds a property descriptor for the Phone feature.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
- protected void addPhonePropertyDescriptor(Object object) {
- itemPropertyDescriptors.add
- (createItemPropertyDescriptor
- (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
- getResourceLocator(),
- getString("_UI_Contact_phone_feature"),
- getString("_UI_PropertyDescriptor_description", "_UI_Contact_phone_feature", "_UI_Contact_type"),
- ContactsPackage.Literals.CONTACT__PHONE,
- true,
- false,
- false,
- ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
- null,
- null));
- }
-
- /**
- * This adds a property descriptor for the Mobile feature.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
- protected void addMobilePropertyDescriptor(Object object) {
- itemPropertyDescriptors.add
- (createItemPropertyDescriptor
- (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
- getResourceLocator(),
- getString("_UI_Contact_mobile_feature"),
- getString("_UI_PropertyDescriptor_description", "_UI_Contact_mobile_feature", "_UI_Contact_type"),
- ContactsPackage.Literals.CONTACT__MOBILE,
- true,
- false,
- false,
- ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
- null,
- null));
- }
-
- /**
- * This adds a property descriptor for the Note feature.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
- protected void addNotePropertyDescriptor(Object object) {
- itemPropertyDescriptors.add
- (createItemPropertyDescriptor
- (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
- getResourceLocator(),
- getString("_UI_Contact_note_feature"),
- getString("_UI_PropertyDescriptor_description", "_UI_Contact_note_feature", "_UI_Contact_type"),
- ContactsPackage.Literals.CONTACT__NOTE,
- true,
- false,
- false,
- ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
- null,
- null));
- }
-
- /**
- * This adds a property descriptor for the Jpeg String feature.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
- protected void addJpegStringPropertyDescriptor(Object object) {
- itemPropertyDescriptors.add
- (createItemPropertyDescriptor
- (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
- getResourceLocator(),
- getString("_UI_Contact_jpegString_feature"),
- getString("_UI_PropertyDescriptor_description", "_UI_Contact_jpegString_feature", "_UI_Contact_type"),
- ContactsPackage.Literals.CONTACT__JPEG_STRING,
- true,
- false,
- false,
- ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
- null,
- null));
- }
-
- /**
- * This adds a property descriptor for the Source File feature.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
- protected void addSourceFilePropertyDescriptor(Object object) {
- itemPropertyDescriptors.add
- (createItemPropertyDescriptor
- (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
- getResourceLocator(),
- getString("_UI_Contact_sourceFile_feature"),
- getString("_UI_PropertyDescriptor_description", "_UI_Contact_sourceFile_feature", "_UI_Contact_type"),
- ContactsPackage.Literals.CONTACT__SOURCE_FILE,
- true,
- false,
- false,
- ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
- null,
- null));
- }
-
- /**
- * This returns Contact.gif.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated NOT
- */
- @Override
- public Object getImage(Object object) {
- Contact contact = (Contact) object;
- Diagnostic diagnostic = Diagnostician.INSTANCE.validate(contact);
- Object baseImage = getResourceLocator().getImage("silk/user.png");
-
- if (diagnostic.getSeverity() != Diagnostic.OK) {
- Object overlayImage = getResourceLocator().getImage("silk/bullet_error.png");
- ArrayList<Object> images = new ArrayList<Object>(2);
- images.add(baseImage);
- images.add(overlayImage);
- return new ComposedImage(images);
- }
-
- return overlayImage(object, baseImage);
- }
-
- /**
- * This returns the label text for the adapted class.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated NOT
- */
- @Override
- public String getText(Object object) {
- Contact contact = (Contact)object;
- String firstName = contact.getFirstName();
- String lastName = contact.getLastName();
- return (firstName != null ? firstName : "") + " " + (lastName != null ? lastName : "");
- }
-
- /**
- * This handles model notifications by calling {@link #updateChildren} to update any cached
- * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
- @Override
- public void notifyChanged(Notification notification) {
- updateChildren(notification);
-
- switch (notification.getFeatureID(Contact.class)) {
- case ContactsPackage.CONTACT__FIRST_NAME:
- case ContactsPackage.CONTACT__MIDDLE_NAME:
- case ContactsPackage.CONTACT__LAST_NAME:
- case ContactsPackage.CONTACT__TITLE:
- case ContactsPackage.CONTACT__COMPANY:
- case ContactsPackage.CONTACT__JOB_TITLE:
- case ContactsPackage.CONTACT__STREET:
- case ContactsPackage.CONTACT__CITY:
- case ContactsPackage.CONTACT__ZIP:
- case ContactsPackage.CONTACT__STATE:
- case ContactsPackage.CONTACT__COUNTRY:
- case ContactsPackage.CONTACT__EMAIL:
- case ContactsPackage.CONTACT__WEB_PAGE:
- case ContactsPackage.CONTACT__PHONE:
- case ContactsPackage.CONTACT__MOBILE:
- case ContactsPackage.CONTACT__NOTE:
- case ContactsPackage.CONTACT__JPEG_STRING:
- case ContactsPackage.CONTACT__SOURCE_FILE:
- fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
- return;
- }
- super.notifyChanged(notification);
- }
-
- /**
- * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
- * that can be created under this object.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
- @Override
- protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
- super.collectNewChildDescriptors(newChildDescriptors, object);
- }
-
- /**
- * Return the resource locator for this item provider's resources.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
- @Override
- public ResourceLocator getResourceLocator() {
- return ContactsEditPlugin.INSTANCE;
- }
-
- @Override
- public String getColumnText(Object object, int columnIndex) {
- Contact contact = (Contact) object;
-
- String label = null;
- switch (columnIndex) {
- case 0:
- label = contact.getFirstName();
- break;
- case 1:
- label = contact.getLastName();
- break;
- }
-
- return label == null ? "n/a" : label;
- }
-
-}
+/**
+ * Copyright (c) 2012 TESIS DYNAware GmbH 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:
+ * Torsten Sommer <torsten.sommer@tesis.de> - initial API and implementation
+ */
+package org.eclipse.fx.demo.contacts.provider;
+
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.Diagnostic;
+import org.eclipse.emf.common.util.ResourceLocator;
+
+import org.eclipse.emf.ecore.util.Diagnostician;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.ComposedImage;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITableItemLabelProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemProviderAdapter;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+import org.eclipse.fx.demo.contacts.Contact;
+import org.eclipse.fx.demo.contacts.ContactsPackage;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.fx.demo.contacts.Contact} object.
+ * <!-- begin-user-doc -->
+ * @implements ITableItemLabelProvider
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class ContactItemProvider
+ extends ItemProviderAdapter
+ implements
+ IEditingDomainItemProvider,
+ IStructuredItemContentProvider,
+ ITreeItemContentProvider,
+ IItemLabelProvider,
+ IItemPropertySource,
+ ITableItemLabelProvider {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public ContactItemProvider(AdapterFactory adapterFactory) {
+ super(adapterFactory);
+ }
+
+ /**
+ * This returns the property descriptors for the adapted class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+ if (itemPropertyDescriptors == null) {
+ super.getPropertyDescriptors(object);
+
+ addFirstNamePropertyDescriptor(object);
+ addMiddleNamePropertyDescriptor(object);
+ addLastNamePropertyDescriptor(object);
+ addTitlePropertyDescriptor(object);
+ addCompanyPropertyDescriptor(object);
+ addJobTitlePropertyDescriptor(object);
+ addStreetPropertyDescriptor(object);
+ addCityPropertyDescriptor(object);
+ addZipPropertyDescriptor(object);
+ addStatePropertyDescriptor(object);
+ addCountryPropertyDescriptor(object);
+ addEmailPropertyDescriptor(object);
+ addWebPagePropertyDescriptor(object);
+ addPhonePropertyDescriptor(object);
+ addMobilePropertyDescriptor(object);
+ addNotePropertyDescriptor(object);
+ addJpegStringPropertyDescriptor(object);
+ addSourceFilePropertyDescriptor(object);
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This adds a property descriptor for the First Name feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addFirstNamePropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_Contact_firstName_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_Contact_firstName_feature", "_UI_Contact_type"),
+ ContactsPackage.Literals.CONTACT__FIRST_NAME,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ getString("_UI_GeneralPropertyCategory"),
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the Middle Name feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addMiddleNamePropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_Contact_middleName_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_Contact_middleName_feature", "_UI_Contact_type"),
+ ContactsPackage.Literals.CONTACT__MIDDLE_NAME,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ getString("_UI_GeneralPropertyCategory"),
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the Last Name feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addLastNamePropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_Contact_lastName_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_Contact_lastName_feature", "_UI_Contact_type"),
+ ContactsPackage.Literals.CONTACT__LAST_NAME,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ getString("_UI_GeneralPropertyCategory"),
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the Title feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addTitlePropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_Contact_title_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_Contact_title_feature", "_UI_Contact_type"),
+ ContactsPackage.Literals.CONTACT__TITLE,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ getString("_UI_GeneralPropertyCategory"),
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the Company feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addCompanyPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_Contact_company_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_Contact_company_feature", "_UI_Contact_type"),
+ ContactsPackage.Literals.CONTACT__COMPANY,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ getString("_UI_GeneralPropertyCategory"),
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the Job Title feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addJobTitlePropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_Contact_jobTitle_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_Contact_jobTitle_feature", "_UI_Contact_type"),
+ ContactsPackage.Literals.CONTACT__JOB_TITLE,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ getString("_UI_GeneralPropertyCategory"),
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the Street feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addStreetPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_Contact_street_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_Contact_street_feature", "_UI_Contact_type"),
+ ContactsPackage.Literals.CONTACT__STREET,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ getString("_UI_BusinessAddressPropertyCategory"),
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the City feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addCityPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_Contact_city_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_Contact_city_feature", "_UI_Contact_type"),
+ ContactsPackage.Literals.CONTACT__CITY,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ getString("_UI_BusinessAddressPropertyCategory"),
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the Zip feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addZipPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_Contact_zip_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_Contact_zip_feature", "_UI_Contact_type"),
+ ContactsPackage.Literals.CONTACT__ZIP,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ getString("_UI_BusinessAddressPropertyCategory"),
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the State feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addStatePropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_Contact_state_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_Contact_state_feature", "_UI_Contact_type"),
+ ContactsPackage.Literals.CONTACT__STATE,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ getString("_UI_BusinessAddressPropertyCategory"),
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the Country feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addCountryPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_Contact_country_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_Contact_country_feature", "_UI_Contact_type"),
+ ContactsPackage.Literals.CONTACT__COUNTRY,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ getString("_UI_BusinessAddressPropertyCategory"),
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the Email feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addEmailPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_Contact_email_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_Contact_email_feature", "_UI_Contact_type"),
+ ContactsPackage.Literals.CONTACT__EMAIL,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ getString("_UI_BusinessInternetPropertyCategory"),
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the Web Page feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addWebPagePropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_Contact_webPage_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_Contact_webPage_feature", "_UI_Contact_type"),
+ ContactsPackage.Literals.CONTACT__WEB_PAGE,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ getString("_UI_BusinessInternetPropertyCategory"),
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the Phone feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addPhonePropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_Contact_phone_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_Contact_phone_feature", "_UI_Contact_type"),
+ ContactsPackage.Literals.CONTACT__PHONE,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ getString("_UI_BusinessPhonesPropertyCategory"),
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the Mobile feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addMobilePropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_Contact_mobile_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_Contact_mobile_feature", "_UI_Contact_type"),
+ ContactsPackage.Literals.CONTACT__MOBILE,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ getString("_UI_BusinessPhonesPropertyCategory"),
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the Note feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addNotePropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_Contact_note_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_Contact_note_feature", "_UI_Contact_type"),
+ ContactsPackage.Literals.CONTACT__NOTE,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the Jpeg String feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addJpegStringPropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_Contact_jpegString_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_Contact_jpegString_feature", "_UI_Contact_type"),
+ ContactsPackage.Literals.CONTACT__JPEG_STRING,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This adds a property descriptor for the Source File feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addSourceFilePropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_Contact_sourceFile_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_Contact_sourceFile_feature", "_UI_Contact_type"),
+ ContactsPackage.Literals.CONTACT__SOURCE_FILE,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This returns Contact.gif.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ @Override
+ public Object getImage(Object object) {
+ Contact contact = (Contact) object;
+ Diagnostic diagnostic = Diagnostician.INSTANCE.validate(contact);
+ Object baseImage = getResourceLocator().getImage("silk/user.png");
+
+ if (diagnostic.getSeverity() != Diagnostic.OK) {
+ Object overlayImage = getResourceLocator().getImage("silk/bullet_error.png");
+ ArrayList<Object> images = new ArrayList<Object>(2);
+ images.add(baseImage);
+ images.add(overlayImage);
+ return new ComposedImage(images);
+ }
+
+ return overlayImage(object, baseImage);
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ @Override
+ public String getText(Object object) {
+ Contact contact = (Contact)object;
+ String firstName = contact.getFirstName();
+ String lastName = contact.getLastName();
+ return (firstName != null ? firstName : "") + " " + (lastName != null ? lastName : "");
+ }
+
+ /**
+ * This handles model notifications by calling {@link #updateChildren} to update any cached
+ * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void notifyChanged(Notification notification) {
+ updateChildren(notification);
+
+ switch (notification.getFeatureID(Contact.class)) {
+ case ContactsPackage.CONTACT__FIRST_NAME:
+ case ContactsPackage.CONTACT__MIDDLE_NAME:
+ case ContactsPackage.CONTACT__LAST_NAME:
+ case ContactsPackage.CONTACT__TITLE:
+ case ContactsPackage.CONTACT__COMPANY:
+ case ContactsPackage.CONTACT__JOB_TITLE:
+ case ContactsPackage.CONTACT__STREET:
+ case ContactsPackage.CONTACT__CITY:
+ case ContactsPackage.CONTACT__ZIP:
+ case ContactsPackage.CONTACT__STATE:
+ case ContactsPackage.CONTACT__COUNTRY:
+ case ContactsPackage.CONTACT__EMAIL:
+ case ContactsPackage.CONTACT__WEB_PAGE:
+ case ContactsPackage.CONTACT__PHONE:
+ case ContactsPackage.CONTACT__MOBILE:
+ case ContactsPackage.CONTACT__NOTE:
+ case ContactsPackage.CONTACT__JPEG_STRING:
+ case ContactsPackage.CONTACT__SOURCE_FILE:
+ fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+ return;
+ }
+ super.notifyChanged(notification);
+ }
+
+ /**
+ * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+ * that can be created under this object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+ super.collectNewChildDescriptors(newChildDescriptors, object);
+ }
+
+ /**
+ * Return the resource locator for this item provider's resources.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public ResourceLocator getResourceLocator() {
+ return ContactsEditPlugin.INSTANCE;
+ }
+
+ @Override
+ public String getColumnText(Object object, int columnIndex) {
+ Contact contact = (Contact) object;
+ switch (columnIndex) {
+ case 0:
+ return getText(object);
+ case 1:
+ return contact.getEmail();
+ default:
+ return super.getColumnText(object, columnIndex);
+ }
+ }
+
+ @Override
+ public Object getColumnImage(Object object, int columnIndex) {
+ switch (columnIndex) {
+ case 0:
+ return getImage(object);
+ default:
+ return super.getColumnImage(object, columnIndex);
+ }
+ }
+
+}
diff --git a/demos/org.eclipse.fx.demo.contacts.edit/src/org/eclipse/fx/demo/contacts/provider/GroupItemProvider.java b/demos/org.eclipse.fx.demo.contacts.edit/src/org/eclipse/fx/demo/contacts/provider/GroupItemProvider.java
index 92550c8eb..e78a2f6ec 100755..100644
--- a/demos/org.eclipse.fx.demo.contacts.edit/src/org/eclipse/fx/demo/contacts/provider/GroupItemProvider.java
+++ b/demos/org.eclipse.fx.demo.contacts.edit/src/org/eclipse/fx/demo/contacts/provider/GroupItemProvider.java
@@ -1,207 +1,230 @@
-/**
- * Copyright (c) 2012 TESIS DYNAware GmbH 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:
- * Torsten Sommer <torsten.sommer@tesis.de> - initial API and implementation
- */
-package org.eclipse.fx.demo.contacts.provider;
-
-
-import java.util.Collection;
-import java.util.List;
-
-import org.eclipse.emf.common.notify.AdapterFactory;
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.common.util.ResourceLocator;
-import org.eclipse.emf.ecore.EStructuralFeature;
-import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
-import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
-import org.eclipse.emf.edit.provider.IItemLabelProvider;
-import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
-import org.eclipse.emf.edit.provider.IItemPropertySource;
-import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
-import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
-import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
-import org.eclipse.emf.edit.provider.ItemProviderAdapter;
-import org.eclipse.emf.edit.provider.ViewerNotification;
-import org.eclipse.fx.demo.contacts.ContactsFactory;
-import org.eclipse.fx.demo.contacts.ContactsPackage;
-import org.eclipse.fx.demo.contacts.Group;
-
-/**
- * This is the item provider adapter for a {@link org.eclipse.fx.demo.contacts.Group} object.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
-public class GroupItemProvider
- extends ItemProviderAdapter
- implements
- IEditingDomainItemProvider,
- IStructuredItemContentProvider,
- ITreeItemContentProvider,
- IItemLabelProvider,
- IItemPropertySource {
- /**
- * This constructs an instance from a factory and a notifier.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
- public GroupItemProvider(AdapterFactory adapterFactory) {
- super(adapterFactory);
- }
-
- /**
- * This returns the property descriptors for the adapted class.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
- @Override
- public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
- if (itemPropertyDescriptors == null) {
- super.getPropertyDescriptors(object);
-
- addNamePropertyDescriptor(object);
- }
- return itemPropertyDescriptors;
- }
-
- /**
- * This adds a property descriptor for the Name feature.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
- protected void addNamePropertyDescriptor(Object object) {
- itemPropertyDescriptors.add
- (createItemPropertyDescriptor
- (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
- getResourceLocator(),
- getString("_UI_Group_name_feature"),
- getString("_UI_PropertyDescriptor_description", "_UI_Group_name_feature", "_UI_Group_type"),
- ContactsPackage.Literals.GROUP__NAME,
- true,
- false,
- false,
- ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
- null,
- null));
- }
-
- /**
- * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
- * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
- * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
- @Override
- public Collection<? extends EStructuralFeature> getChildrenFeatures(Object object) {
- if (childrenFeatures == null) {
- super.getChildrenFeatures(object);
- childrenFeatures.add(ContactsPackage.Literals.GROUP__CONTACTS);
- childrenFeatures.add(ContactsPackage.Literals.GROUP__GROUPS);
- }
- return childrenFeatures;
- }
-
- /**
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
- @Override
- protected EStructuralFeature getChildFeature(Object object, Object child) {
- // Check the type of the specified child object and return the proper feature to use for
- // adding (see {@link AddCommand}) it as a child.
-
- return super.getChildFeature(object, child);
- }
-
- /**
- * This returns Group.gif.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated NOT
- */
- @Override
- public Object getImage(Object object) {
- return overlayImage(object, getResourceLocator().getImage("silk/folder.png"));
- }
-
- /**
- * This returns the label text for the adapted class.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated NOT
- */
- @Override
- public String getText(Object object) {
- String label = ((Group) object).getName();
- return label == null || label.length() == 0 ? "?" : label;
- }
-
- /**
- * This handles model notifications by calling {@link #updateChildren} to update any cached
- * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
- @Override
- public void notifyChanged(Notification notification) {
- updateChildren(notification);
-
- switch (notification.getFeatureID(Group.class)) {
- case ContactsPackage.GROUP__NAME:
- fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
- return;
- case ContactsPackage.GROUP__CONTACTS:
- case ContactsPackage.GROUP__GROUPS:
- fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
- return;
- }
- super.notifyChanged(notification);
- }
-
- /**
- * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
- * that can be created under this object.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
- @Override
- protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
- super.collectNewChildDescriptors(newChildDescriptors, object);
-
- newChildDescriptors.add
- (createChildParameter
- (ContactsPackage.Literals.GROUP__CONTACTS,
- ContactsFactory.eINSTANCE.createContact()));
-
- newChildDescriptors.add
- (createChildParameter
- (ContactsPackage.Literals.GROUP__GROUPS,
- ContactsFactory.eINSTANCE.createGroup()));
- }
-
- /**
- * Return the resource locator for this item provider's resources.
- * <!-- begin-user-doc -->
- * <!-- end-user-doc -->
- * @generated
- */
- @Override
- public ResourceLocator getResourceLocator() {
- return ContactsEditPlugin.INSTANCE;
- }
-
-}
+/**
+ * Copyright (c) 2012 TESIS DYNAware GmbH 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:
+ * Torsten Sommer <torsten.sommer@tesis.de> - initial API and implementation
+ */
+package org.eclipse.fx.demo.contacts.provider;
+
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.util.ResourceLocator;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITableItemLabelProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemProviderAdapter;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+import org.eclipse.fx.demo.contacts.ContactsFactory;
+import org.eclipse.fx.demo.contacts.ContactsPackage;
+import org.eclipse.fx.demo.contacts.Group;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.fx.demo.contacts.Group} object.
+ * <!-- begin-user-doc -->
+ * @implements ITableItemLabelProvider
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class GroupItemProvider
+ extends ItemProviderAdapter
+ implements
+ IEditingDomainItemProvider,
+ IStructuredItemContentProvider,
+ ITreeItemContentProvider,
+ IItemLabelProvider,
+ IItemPropertySource,
+ ITableItemLabelProvider {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public GroupItemProvider(AdapterFactory adapterFactory) {
+ super(adapterFactory);
+ }
+
+ /**
+ * This returns the property descriptors for the adapted class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+ if (itemPropertyDescriptors == null) {
+ super.getPropertyDescriptors(object);
+
+ addNamePropertyDescriptor(object);
+ }
+ return itemPropertyDescriptors;
+ }
+
+ /**
+ * This adds a property descriptor for the Name feature.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected void addNamePropertyDescriptor(Object object) {
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_Group_name_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_Group_name_feature", "_UI_Group_type"),
+ ContactsPackage.Literals.GROUP__NAME,
+ true,
+ false,
+ false,
+ ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+ null,
+ null));
+ }
+
+ /**
+ * This specifies how to implement {@link #getChildren} and is used to deduce an appropriate feature for an
+ * {@link org.eclipse.emf.edit.command.AddCommand}, {@link org.eclipse.emf.edit.command.RemoveCommand} or
+ * {@link org.eclipse.emf.edit.command.MoveCommand} in {@link #createCommand}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Collection<? extends EStructuralFeature> getChildrenFeatures(Object object) {
+ if (childrenFeatures == null) {
+ super.getChildrenFeatures(object);
+ childrenFeatures.add(ContactsPackage.Literals.GROUP__CONTACTS);
+ childrenFeatures.add(ContactsPackage.Literals.GROUP__GROUPS);
+ }
+ return childrenFeatures;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EStructuralFeature getChildFeature(Object object, Object child) {
+ // Check the type of the specified child object and return the proper feature to use for
+ // adding (see {@link AddCommand}) it as a child.
+
+ return super.getChildFeature(object, child);
+ }
+
+ /**
+ * This returns Group.gif.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("silk/folder.png"));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated NOT
+ */
+ @Override
+ public String getText(Object object) {
+ String label = ((Group) object).getName();
+ return label == null || label.length() == 0 ? "?" : label;
+ }
+
+ /**
+ * This handles model notifications by calling {@link #updateChildren} to update any cached
+ * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public void notifyChanged(Notification notification) {
+ updateChildren(notification);
+
+ switch (notification.getFeatureID(Group.class)) {
+ case ContactsPackage.GROUP__NAME:
+ fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+ return;
+ case ContactsPackage.GROUP__CONTACTS:
+ case ContactsPackage.GROUP__GROUPS:
+ fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
+ return;
+ }
+ super.notifyChanged(notification);
+ }
+
+ /**
+ * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+ * that can be created under this object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+ super.collectNewChildDescriptors(newChildDescriptors, object);
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ContactsPackage.Literals.GROUP__CONTACTS,
+ ContactsFactory.eINSTANCE.createContact()));
+
+ newChildDescriptors.add
+ (createChildParameter
+ (ContactsPackage.Literals.GROUP__GROUPS,
+ ContactsFactory.eINSTANCE.createGroup()));
+ }
+
+ /**
+ * Return the resource locator for this item provider's resources.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public ResourceLocator getResourceLocator() {
+ return ContactsEditPlugin.INSTANCE;
+ }
+
+ @Override
+ public String getColumnText(Object object, int columnIndex) {
+ switch (columnIndex) {
+ case 0:
+ return getText(object);
+ default:
+ return super.getColumnText(object, columnIndex);
+ }
+ }
+
+ @Override
+ public Object getColumnImage(Object object, int columnIndex) {
+ switch (columnIndex) {
+ case 0:
+ return getImage(object);
+ default:
+ return super.getColumnImage(object, columnIndex);
+ }
+ }
+
+}

Back to the top