/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package cli_fmw.report.panels.model.delegate;
import cli_fmw.delegate.DelegateStateful;
import cli_fmw.delegate.directory.DirectoryItemRO;
import cli_fmw.delegate.directory.simple.DirectorySimple;
import cli_fmw.delegate.directory.simple.DirectorySimpleItem;
import cli_fmw.delegate.directory.simple.name.DirectoryNameAbstract;
import cli_fmw.delegate.directory.simple.pathron.DirectoryPathronAbstract;
import cli_fmw.delegate.directory.simple.surname.DirectorySurnameAbstract;
import cli_fmw.main.ClipsException;
import cli_fmw.report.panels.model.FilteredComboBoxModel;
import cli_fmw.report.panels.model.ObjectContainer;
import cli_fmw.utils.MessageBox;
import framework.utils.Converter;
import java.awt.AWTEvent;
import java.awt.EventQueue;
import java.awt.event.FocusEvent;
import javax.swing.JComboBox;
/**
*
* @param <T>
* @param <DIRECTORYITEM>
* @author vip
*/
/*public abstract class DirectorySimpleFilteredComboBoxModel
<DETAILS extends DirectoryItemDetails,
ITEM extends DirectorySimpleItem<?,DETAILS>>
extends FilteredComboBoxModel {
DirectorySimple<?, DETAILS, ITEM> dir;
public DirectorySimpleFilteredComboBoxModel(JComboBox combo,
ComboBoxModel containModel, DirectorySimple<?, DETAILS, ITEM> dir) {
super(combo, containModel);
this.dir = dir;
}*/
abstract public class DirectorySimpleFilteredComboBoxModel
<T extends DelegateStateful,
DIRECTORYITEM extends DirectorySimpleItem>
extends FilteredComboBoxModel implements ObjectContainer<T> {
DirectorySimple<?, DIRECTORYITEM> dir;
DirectoryComboBoxModel<T, DIRECTORYITEM> containModel;
private T object;
public DirectorySimpleFilteredComboBoxModel(JComboBox combo, T delegate, DirectorySimple<?, DIRECTORYITEM> dir) throws ClipsException {
super(combo, dir.canAppend());
object = delegate;
containModel = new DirectoryComboBoxModel<T, DIRECTORYITEM>(combo, dir, delegate) {
private static final long serialVersionUID = 1l;
@Override
public DIRECTORYITEM getSelectedDirectoryItem() throws ClipsException {
return DirectorySimpleFilteredComboBoxModel.this.getSelectedDirectoryItem();
}
@Override
public void setSelectedDirectoryItem(DIRECTORYITEM item) throws ClipsException {
DirectorySimpleFilteredComboBoxModel.this.setSelectedDirectoryItem(item);
}
@Override
public boolean isSelectionVisible() {
return super.isSelectionVisible() && DirectorySimpleFilteredComboBoxModel.this.isEnabled();
}
};
super.setContainModel(containModel);
this.dir = dir;
}
@Override
public String processTxt(String txt) {
if (dir instanceof DirectorySurnameAbstract
|| dir instanceof DirectoryNameAbstract
|| dir instanceof DirectoryPathronAbstract) {
return Converter.firstUpper(txt, true);
} else {
return txt;
}
}
@Override
public Object addItem(String txt) {
AWTEvent currentEvent = EventQueue.getCurrentEvent();
if (currentEvent instanceof FocusEvent) {
return null;
}
int res = MessageBox.showConfirmYesNo(MessageBox.C_ADD_DIRECTORYITEM);
if (res == MessageBox.ANSWER_YES) {
try {
DIRECTORYITEM item = dir.initNewItem(txt);
dir.getItems().append(item);
// if (currentEvent instanceof FocusEvent)
return item;
} catch (ClipsException ex) {
MessageBox.showException(ex);
return null;
}
} else {
// Toolkit.getDefaultToolkit().getSystemEventQueue().postEvent(currentEvent);
return null;
}
}
protected boolean isEnabled(){
return true;
}
public T getObject() {
return object;
}
public void setObject(T object) {
this.object = object;
containModel.setObject(object);
}
public void dispose() {
containModel.setObject(null);
}
abstract public DIRECTORYITEM getSelectedDirectoryItem() throws ClipsException;
abstract public void setSelectedDirectoryItem(DIRECTORYITEM item) throws ClipsException;
}