/*
* Copyright (c) 2007, 2015 , Oracle. All rights reserved.
*
* This software is the proprietary information of Oracle Corporation.
* Use is subject to license terms.
*/
package org.eclipse.persistence.tools.workbench.uitools.swing;
import javax.swing.ComboBoxModel;
import javax.swing.event.ListDataListener;
import org.eclipse.persistence.tools.workbench.uitools.app.ValueModel;
/**
* This <code>ComboBoxModel</code> simply verify the value to become the
* selected and if it's the default value, then it will not be passed to the
* delegate model.
* <p>
* This occurs when the combo box receive a focus lost event, usually the text
* field fires the focus lost event but not always.
*
* @version 11.0.0
* @since 11.0.0
* @author Pascal Filion
*/
@SuppressWarnings("nls")
public final class ComboBoxModelWithDefaultHandler implements ComboBoxModel
{
/**
* The holder of the default value.
*/
private ValueModel defaultValueHolder;
/**
* The delegate <code>ComboBoxModel</code>.
*/
private ComboBoxModel delegate;
/**
* Creates a new <code>ComboBoxModelWithDefaultHandler</code>.
*
* @param delegate The delegate <code>ComboBoxModel</code>
* @param defaultValueHolder The holder of the default value
*/
public ComboBoxModelWithDefaultHandler(ComboBoxModel delegate,
ValueModel defaultValueHolder)
{
super();
this.delegate = delegate;
this.defaultValueHolder = defaultValueHolder;
}
/*
* (non-Javadoc)
*/
public void addListDataListener(ListDataListener listener)
{
delegate.addListDataListener(listener);
}
private Object defaultValue()
{
Object defaultValue = defaultValueHolder.getValue();
if (defaultValue != null)
{
StringBuilder sb = new StringBuilder();
sb.append('(');
sb.append(defaultValue);
sb.append(')');
defaultValue = sb.toString();
}
else
{
defaultValue = "";
}
return defaultValue;
}
/*
* (non-Javadoc)
*/
public Object getElementAt(int index)
{
return delegate.getElementAt(index);
}
/*
* (non-Javadoc)
*/
public Object getSelectedItem()
{
return delegate.getSelectedItem();
}
/*
* (non-Javadoc)
*/
public int getSize()
{
return delegate.getSize();
}
/*
* (non-Javadoc)
*/
public void removeListDataListener(ListDataListener listener)
{
delegate.removeListDataListener(listener);
}
/*
* (non-Javadoc)
*/
public void setSelectedItem(Object item)
{
if (!defaultValue().equals(item))
{
delegate.setSelectedItem(item);
}
}
}