/******************************************************************************* * Copyright (c) 2010 Association for Decentralized Information Management in * Industry THTH ry. * 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: * VTT Technical Research Centre of Finland - initial API and implementation *******************************************************************************/ package org.simantics.databoard.binding.mutable; import org.simantics.databoard.binding.Binding; import org.simantics.databoard.binding.OptionalBinding; import org.simantics.databoard.binding.error.BindingException; import org.simantics.databoard.type.OptionalType; /** * Binds OptionalType to ValueContainer * * @author Toni Kalajainen */ public class ContainerOptionalBinding extends OptionalBinding { public ContainerOptionalBinding(Binding componentBinding) { super(componentBinding); } public ContainerOptionalBinding(OptionalType type, Binding componentBinding) { super(type, componentBinding); } @Override public boolean hasValue(Object arg) { return ((ValueContainer)arg).value != null; } @Override public Object getValue(Object arg) { return ((ValueContainer)arg).value; } @Override public Object createNoValue() { return new ValueContainer(); } @Override public Object createValue(Object value) throws BindingException { ValueContainer result = new ValueContainer(); result.value = value; return result; } @Override public boolean isInstance(Object obj) { return obj instanceof ValueContainer; } @Override public void setValue(Object optional, Object componentValue) throws BindingException { ((ValueContainer) optional).value = componentValue; } @Override public void setNoValue(Object optional) throws BindingException { ((ValueContainer) optional).value = null; } }