package demo9;
import java.awt.*;
import org.openswing.swing.client.*;
import javax.swing.*;
import org.openswing.swing.lookup.client.LookupController;
import org.openswing.swing.lookup.client.LookupListener;
import org.openswing.swing.message.receive.java.ValueObject;
import java.util.Collection;
import java.awt.event.*;
import org.openswing.swing.util.client.ClientUtils;
import org.openswing.swing.logger.client.Logger;
import java.util.ArrayList;
/**
* <p>Title: OpenSwing Framework</p>
* <p>Description: Panel that contains a lookup that allows to select more than one code and stores
* a list of codes, in order to filter data according to a list of codes.</p>
* <p>Copyright: Copyright (C) 2008 Mauro Carniel</p>
* @author Mauro Carniel
* @version 1.0
*/
public class MultiLookupControl extends JPanel {
private GridBagLayout gridBagLayout1 = new GridBagLayout();
private CodLookupControl codLookupControl1 = new CodLookupControl();
private JButton jButton1 = new JButton() {
public void paint(Graphics g) {
super.paint(g);
int width = g.getFontMetrics().stringWidth("C");
g.drawString("C",(this.getWidth()-width+1)/2, this.getHeight()/2+4);
}
};
private JScrollPane scrollPaneList = new JScrollPane();
private DefaultListModel model = new DefaultListModel();
private JList codesList = new JList(model);
private LookupController controller = null;
private String[] lookupAttributeNames = null;
private String sep = null;
private ArrayList selectedVOs = new ArrayList();
public MultiLookupControl() {
this(new LookupController(),new String[]{""}," - ");
}
public MultiLookupControl(LookupController controller,String lookupAttributeName) {
this(controller,new String[]{lookupAttributeName}," - ");
}
public MultiLookupControl(final LookupController controller,String[] lookupAttributeNames,String sep) {
this.lookupAttributeNames = lookupAttributeNames;
this.sep = sep;
try {
jbInit();
setController(controller);
}
catch(Exception e) {
e.printStackTrace();
}
}
private void jbInit() throws Exception {
this.setLayout(gridBagLayout1);
jButton1.setPreferredSize(new Dimension(20, 20));
jButton1.setMnemonic('C');
jButton1.setText("");
jButton1.addActionListener(new MultiLookupControl_jButton1_actionAdapter(this));
scrollPaneList.setPreferredSize(new Dimension(100, 100));
this.add(codLookupControl1, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0
,GridBagConstraints.NORTHWEST, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0));
this.add(jButton1, new GridBagConstraints(1, 0, 1, 1, 0.0, 0.0
,GridBagConstraints.NORTHWEST, GridBagConstraints.NONE, new Insets(0, 5, 0, 5), 0, 0));
this.add(scrollPaneList, new GridBagConstraints(2, 0, 1, 1, 1.0, 1.0
,GridBagConstraints.NORTHWEST, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0));
scrollPaneList.getViewport().add(codesList, null);
}
void jButton1_actionPerformed(ActionEvent e) {
selectedVOs.clear();
model.removeAllElements();
codesList.revalidate();
codesList.repaint();
}
/**
* @return list of ValueObjects, related to selected codes
*/
public ArrayList getSelectedVOs() {
return selectedVOs;
}
public LookupController getController() {
return controller;
}
public void setController(final LookupController controller) {
this.codLookupControl1.setLookupController(controller);
this.controller = controller;
this.controller.setDisableFrameClosing(true);
this.controller.addLookupListener(new LookupListener() {
public void beforeLookupAction(ValueObject parentVO) {
}
public void codeChanged(ValueObject parentVO,Collection parentChangedAttributes) {
try {
StringBuffer sb = new StringBuffer();
Object value = null;
for(int i=0;i<lookupAttributeNames.length;i++) {
value= ClientUtils.getValue(controller.getLookupVO(),lookupAttributeNames[i]);
sb.append(value).append(sep);
}
sb.delete(sb.length()-sep.length(),sb.length());
model.addElement(sb.toString());
selectedVOs.add(controller.getLookupVO());
codesList.revalidate();
codesList.repaint();
}
catch (Exception ex) {
Logger.error(this.getClass().getName(),"codeChanged",ex.getMessage(),ex);
}
}
public void codeValidated(boolean validated) {
}
public void forceValidate() {
}
});
}
}
class MultiLookupControl_jButton1_actionAdapter implements java.awt.event.ActionListener {
MultiLookupControl adaptee;
MultiLookupControl_jButton1_actionAdapter(MultiLookupControl adaptee) {
this.adaptee = adaptee;
}
public void actionPerformed(ActionEvent e) {
adaptee.jButton1_actionPerformed(e);
}
}