]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.databoard/src/org/simantics/databoard/binding/BooleanBinding.java
Use type reflection tools from databoard in objmap2.
[simantics/platform.git] / bundles / org.simantics.databoard / src / org / simantics / databoard / binding / BooleanBinding.java
1 /*******************************************************************************
2  *  Copyright (c) 2010 Association for Decentralized Information Management in
3  *  Industry THTH ry.
4  *  All rights reserved. This program and the accompanying materials
5  *  are made available under the terms of the Eclipse Public License v1.0
6  *  which accompanies this distribution, and is available at
7  *  http://www.eclipse.org/legal/epl-v10.html
8  *
9  *  Contributors:
10  *      VTT Technical Research Centre of Finland - initial API and implementation
11  *******************************************************************************/
12 package org.simantics.databoard.binding;
13
14 import java.util.IdentityHashMap;
15 import java.util.Set;
16
17 import org.simantics.databoard.accessor.reference.ChildReference;
18 import org.simantics.databoard.binding.error.BindingException;
19 import org.simantics.databoard.binding.error.RuntimeBindingException;
20 import org.simantics.databoard.binding.impl.BindingPrintContext;
21 import org.simantics.databoard.binding.impl.BooleanBindingDefault;
22 import org.simantics.databoard.binding.mutable.MutableBooleanBinding;
23 import org.simantics.databoard.type.BooleanType;
24 import org.simantics.databoard.util.IdentityPair;
25
26 /**
27  * This is a binding of Boolean Type and a Java Object.
28  *
29  * @see BooleanBindingDefault
30  * @see MutableBooleanBinding
31  * @see BooleanType
32  * @author Toni Kalajainen <toni.kalajainen@vtt.fi>
33  */
34 public abstract class BooleanBinding extends Binding {
35         
36         public BooleanBinding(BooleanType type) {
37                 this.type = type;
38         }
39         
40         public abstract Object create(boolean value) throws BindingException; 
41         public abstract Object create(Boolean value) throws BindingException; 
42         public abstract void setValue(Object obj, Boolean newValue) throws BindingException;
43         public abstract void setValue(Object obj, boolean newValue)     throws BindingException;
44         public abstract Boolean getValue(Object o) throws BindingException; 
45         public abstract boolean getValue_(Object o) throws BindingException; 
46
47         public Object createUnchecked(Boolean value) throws RuntimeBindingException {
48                 try {
49                         return create(value);
50                 } catch (BindingException e) {
51                         throw new RuntimeBindingException(e);
52                 }
53         }
54         
55         @Override
56         public void readFrom(Binding srcBinding, Object src, Object dst)
57                         throws BindingException {
58                 boolean v = ((BooleanBinding)srcBinding).getValue_(src);
59                 setValue(dst, v);
60         }       
61         
62         @Override
63         public BooleanType type() {
64                 return (BooleanType) super.type();
65         }
66         
67         @Override
68     public void accept(Visitor1 v, Object obj) {
69         v.visit(this, obj);        
70     }
71     
72         @Override
73     public <T> T accept(Visitor<T> v) {
74         return v.visit(this);
75     }
76         
77     @Override
78     public void assertInstaceIsValid(Object obj, Set<Object> validInstances) throws BindingException {
79                 if (!isInstance(obj)) throw new BindingException("Not a boolean instance");     
80     }
81     
82     @Override
83     public int deepHashValue(Object value, IdentityHashMap<Object, Object> hashedObjects) throws BindingException {
84         boolean b = getValue_(value);
85         return b ? 1231 : 1237;
86     }
87     
88     @Override
89     public int deepCompare(Object o1, Object o2,
90                 Set<IdentityPair<Object, Object>> compareHistory)
91                 throws BindingException {
92         
93         boolean v1 = getValue_(o1);
94         boolean v2 = getValue_(o2);
95         return (v2 == v1 ? 0 : (v1 ? 1 : -1));          
96     }
97     
98     @Override
99         protected void toString(Object value, BindingPrintContext ctx) throws BindingException {
100         ctx.b.append(getValue_(value));
101     }
102
103         @Override
104         public Binding getComponentBinding(ChildReference path) {
105                 if (path==null) return this;            
106                 throw new IllegalArgumentException();
107         }       
108         
109         @Override
110         public int getComponentCount() {
111                 return 0;
112         }
113         
114         @Override
115         public Binding getComponentBinding(int index) {
116                 throw new IllegalArgumentException();
117         }
118 }