org.apache.cayenne.swing.BindingBuilder Maven / Gradle / Ivy
The newest version!
/*****************************************************************
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
****************************************************************/
package org.apache.cayenne.swing;
import java.awt.Component;
import java.util.HashMap;
import java.util.Map;
import javax.swing.*;
import javax.swing.text.JTextComponent;
/**
* A builder for component bindings that delegates the creation of the binding to the
* underlying factory, and itself configures a number of binding parameters.
*
*/
public class BindingBuilder {
protected BindingFactory factory;
protected BindingDelegate delegate;
protected Object context;
protected Map actionsMap;
/**
* Constructs BindingBuilder with a BindingFactory and a root model object (or
* context) of the binding.
*/
public BindingBuilder(BindingFactory factory, Object context) {
this.factory = factory;
this.context = context;
}
public BindingDelegate getDelegate() {
return delegate;
}
/**
* Sets BindingDelegate that will be assigned to all bindings created via this
* BindingBuilder.
*/
public void setDelegate(BindingDelegate delegate) {
this.delegate = delegate;
}
public Object getContext() {
return context;
}
/**
* Sets the context object that will be used by all bindings created via this
* BindingBuilder. Context is a root of the domain model for the given binding.
*/
public void setContext(Object context) {
this.context = context;
}
public BindingFactory getFactory() {
return factory;
}
/**
* Binds to an instance of BoundComponent.
*
* @since 1.2
*/
public ObjectBinding bindToProperty(
BoundComponent component,
String property,
String boundProperty) {
ObjectBinding binding = factory
.bindToProperty(component, property, boundProperty);
return initBinding(binding, delegate);
}
public ObjectBinding bindToAction(
BoundComponent component,
String action,
String boundProperty) {
ObjectBinding binding = factory.bindToAction(component, action, boundProperty);
return initBinding(binding, delegate);
}
public ObjectBinding bindToStateChange(AbstractButton button, String property) {
ObjectBinding binding = factory.bindToStateChange(button, property);
return initBinding(binding, delegate);
}
public ObjectBinding bindToStateChangeAndAction(
AbstractButton button,
String property,
String action) {
ObjectBinding binding = factory.bindToStateChange(button, property);
return initBinding(binding, getActionDelegate(action));
}
public ObjectBinding bindToAction(AbstractButton button, String action) {
ObjectBinding binding = factory.bindToAction(button, action);
return initBinding(binding, delegate);
}
public ObjectBinding bindToAction(Component component, String action) {
ObjectBinding binding = factory.bindToAction(component, action);
return initBinding(binding, delegate);
}
public ObjectBinding bindToComboSelection(JComboBox component, String property) {
ObjectBinding binding = factory.bindToComboSelection(component, property, null);
return initBinding(binding, delegate);
}
public ObjectBinding bindToComboSelection(
JComboBox component,
String property,
String noSelectionValue) {
ObjectBinding binding = factory.bindToComboSelection(
component,
property,
noSelectionValue);
return initBinding(binding, delegate);
}
public ObjectBinding bindToComboSelection(
JComboBox component,
String property,
String action,
String noSelectionValue) {
ObjectBinding binding = factory.bindToComboSelection(
component,
property,
noSelectionValue);
return initBinding(binding, getActionDelegate(action));
}
public ObjectBinding bindToTextArea(JTextArea component, String property) {
ObjectBinding binding = factory.bindToTextArea(component, property);
return initBinding(binding, delegate);
}
public ObjectBinding bindToTextField(JTextField component, String property) {
ObjectBinding binding = factory.bindToTextField(component, property);
return initBinding(binding, delegate);
}
public ObjectBinding bindToCheckBox(JCheckBox component, String property) {
ObjectBinding binding = factory.bindToCheckBox(component, property);
return initBinding(binding, delegate);
}
protected ObjectBinding initBinding(ObjectBinding binding, BindingDelegate delegate) {
binding.setDelegate(delegate);
binding.setContext(context);
return binding;
}
protected BindingDelegate getActionDelegate(String action) {
BindingDelegate delegate = null;
if (actionsMap == null) {
actionsMap = new HashMap();
}
else {
delegate = (BindingDelegate) actionsMap.get(action);
}
if (delegate == null) {
delegate = new ActionDelegate(action);
actionsMap.put(action, delegate);
}
return delegate;
}
}