1 /*******************************************************************************
\r
2 * Copyright (c) 2010 Association for Decentralized Information Management in
\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.databoard.accessor.java;
14 import org.simantics.databoard.Bindings;
\r
15 import org.simantics.databoard.accessor.Accessor;
\r
16 import org.simantics.databoard.accessor.LongAccessor;
\r
17 import org.simantics.databoard.accessor.error.AccessorConstructionException;
\r
18 import org.simantics.databoard.accessor.error.AccessorException;
\r
19 import org.simantics.databoard.accessor.error.ReferenceException;
\r
20 import org.simantics.databoard.accessor.event.Event;
\r
21 import org.simantics.databoard.accessor.event.ValueAssigned;
\r
22 import org.simantics.databoard.accessor.impl.AccessorParams;
\r
23 import org.simantics.databoard.accessor.impl.ListenerEntry;
\r
24 import org.simantics.databoard.accessor.interestset.LongInterestSet;
\r
25 import org.simantics.databoard.accessor.reference.ChildReference;
\r
26 import org.simantics.databoard.binding.ArrayBinding;
\r
27 import org.simantics.databoard.binding.Binding;
\r
28 import org.simantics.databoard.binding.LongBinding;
\r
29 import org.simantics.databoard.binding.RecordBinding;
\r
30 import org.simantics.databoard.binding.VariantBinding;
\r
31 import org.simantics.databoard.binding.error.BindingException;
\r
32 import org.simantics.databoard.binding.mutable.ContainerOptionalBinding;
\r
33 import org.simantics.databoard.type.LongType;
\r
35 public class JavaLong extends JavaObject implements LongAccessor {
37 public JavaLong(Accessor parent, LongBinding binding, Object object, AccessorParams params) {
38 super(parent, binding, object, params);
41 public LongBinding getBinding() {
42 return (LongBinding) binding;
46 public LongType type() {
47 return getBinding().type();
51 public long getValue() throws AccessorException {
\r
54 return getBinding().getValue_(object);
55 } catch (BindingException e) {
56 throw new AccessorException(e);
63 public void setValue(long newValue) throws AccessorException {
64 if (newValue == getValue()) return;
\r
67 if (binding.isImmutable() && parent!=null && parent instanceof JavaArray) {
\r
68 JavaObject jo = (JavaObject) parent;
\r
69 ArrayBinding ab = (ArrayBinding) jo.binding;
\r
70 Object nv = getBinding().create(newValue);
\r
71 ab.set(jo.object, (Integer)keyInParent, nv);
\r
73 } else if (binding.isImmutable() && parent!=null && parent instanceof JavaRecord) {
\r
74 JavaObject jo = (JavaObject) parent;
\r
75 RecordBinding rb = (RecordBinding) jo.binding;
\r
76 Object nv = getBinding().create(newValue);
\r
77 rb.setComponent(jo.object, (Integer)keyInParent, nv);
\r
79 } else if (binding.isImmutable() && parent!=null && parent instanceof JavaVariant) {
\r
80 JavaObject jo = (JavaObject) parent;
\r
81 VariantBinding vb = (VariantBinding) jo.binding;
\r
82 Object nv = getBinding().create(newValue);
\r
83 vb.setContent(jo.object, getBinding(), nv);
\r
85 } else if (binding.isImmutable() && parent!=null && parent instanceof JavaOptional) {
\r
87 JavaOptional jo = (JavaOptional) parent;
\r
88 ContainerOptionalBinding vb = (ContainerOptionalBinding) jo.binding;
\r
89 vb.setValue(jo.object, newValue);
\r
90 this.object = newValue;
\r
93 getBinding().setValue(object, newValue);
\r
98 ListenerEntry le = listeners;
100 LongInterestSet is = le.getInterestSet();
101 if (is.inNotifications()) {
102 Event e = new ValueAssigned( Bindings.LONG, is.inValues() ? newValue : null );
108 } catch (BindingException e) {
109 throw new AccessorException(e);
116 public void setValue(Binding binding, Object newValue) throws AccessorException {
118 long nv = ((LongBinding)binding).getValue_(newValue);
120 } catch (BindingException e) {
121 throw new AccessorException(e);
125 @SuppressWarnings("unchecked")
127 public <T extends Accessor> T getComponent(ChildReference reference)
128 throws AccessorConstructionException {
129 if (reference==null) return (T) this;
130 throw new ReferenceException(reference.getClass()+" is not a subreference of LongType");
134 Event applyLocal(Event e, boolean makeRollback) throws AccessorException {
135 Event rollback = makeRollback ? new ValueAssigned( Bindings.LONG, getValue() ) : null;
\r
136 if (e instanceof ValueAssigned) {
\r
137 ValueAssigned va = (ValueAssigned) e;
\r
138 if (va.newValue == null) throw new AccessorException("Long value expected, got null");
\r
139 setValue(va.newValue.getBinding(), va.newValue.getValue());
\r
142 throw new AccessorException("Cannot apply "+e.getClass().getName()+" to Long");
\r