1 /*******************************************************************************
\r
2 * Copyright (c) 2007, 2010 Association for Decentralized Information Management
\r
3 * in Industry THTH ry.
\r
4 * All rights reserved. This program and the accompanying materials
\r
5 * are made available under the terms of the Eclipse Public License v1.0
\r
6 * which accompanies this distribution, and is available at
\r
7 * http://www.eclipse.org/legal/epl-v10.html
\r
10 * VTT Technical Research Centre of Finland - initial API and implementation
\r
11 *******************************************************************************/
\r
12 package org.simantics.diagram.synchronization.graph;
\r
14 import org.simantics.db.Resource;
\r
15 import org.simantics.diagram.synchronization.IHintSynchronizer;
\r
16 import org.simantics.diagram.synchronization.IModificationQueue;
\r
17 import org.simantics.diagram.synchronization.ISynchronizationContext;
\r
18 import org.simantics.diagram.synchronization.SynchronizationHints;
\r
19 import org.simantics.g2d.element.ElementHints;
\r
20 import org.simantics.utils.datastructures.hints.IHintObservable;
\r
21 import org.simantics.utils.datastructures.hints.IHintContext.Key;
\r
24 * One should implement
\r
25 * {@link #hintChanged(ISynchronizationContext, IModificationQueue, Resource, IHintObservable, Key, Object, Object)}
\r
27 * {@link #getSynchronizedHints()}.
\r
29 * @author Tuukka Lehtonen
\r
31 public abstract class ResourceSynchronizer implements IHintSynchronizer {
\r
34 public final int synchronize(ISynchronizationContext context, IHintObservable observable) {
\r
35 Object o = observable.getHint(ElementHints.KEY_OBJECT);
\r
36 if (o instanceof Resource) {
\r
37 IModificationQueue queue = context.get(SynchronizationHints.MODIFICATION_QUEUE);
\r
38 return synchronize(context, queue, (Resource) o, observable);
\r
43 public abstract Key[] getSynchronizedHints();
\r
45 public int synchronize(ISynchronizationContext context, IModificationQueue queue, Resource object, IHintObservable observable) {
\r
47 for (Key key : getSynchronizedHints()) {
\r
48 count += synchronizeHint(context, queue, object, observable, key);
\r
53 protected final int synchronizeHint(ISynchronizationContext context, IModificationQueue queue, Resource object, IHintObservable observable, Key key) {
\r
54 return hintChanged(context, queue, object, observable, key, null, observable.getHint(key)) ? 1 : 0;
\r
58 public final boolean hintChanged(ISynchronizationContext context, IHintObservable sender, Key key, Object oldValue, Object newValue) {
\r
59 Object o = sender.getHint(ElementHints.KEY_OBJECT);
\r
60 if (o instanceof Resource) {
\r
61 IModificationQueue queue = context.get(SynchronizationHints.MODIFICATION_QUEUE);
\r
62 return hintChanged(context, queue, (Resource) o, sender, key, oldValue, newValue);
\r
68 public final boolean hintRemoved(ISynchronizationContext context, IHintObservable sender, Key key, Object oldValue) {
\r
69 Object o = sender.getHint(ElementHints.KEY_OBJECT);
\r
70 if (o instanceof Resource) {
\r
71 IModificationQueue queue = context.get(SynchronizationHints.MODIFICATION_QUEUE);
\r
72 return hintRemoved(context, queue, (Resource) o, sender, key, oldValue);
\r
77 public abstract boolean hintChanged(ISynchronizationContext context, IModificationQueue queue, Resource object, IHintObservable sender, Key key, Object oldValue, Object newValue);
\r
79 public boolean hintRemoved(ISynchronizationContext context, IModificationQueue queue, Resource object, IHintObservable sender, Key key, Object oldValue) {
\r