/*******************************************************************************
* Copyright (c) 2014 Open Door Logistics (www.opendoorlogistics.com)
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the GNU Lesser Public License v3
* which accompanies this distribution, and is available at http://www.gnu.org/licenses/lgpl.txt
******************************************************************************/
package com.opendoorlogistics.studio.scripts.editor.controls;
import java.awt.BorderLayout;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import javax.swing.JComboBox;
import javax.swing.JPanel;
import com.opendoorlogistics.api.components.ODLComponent;
import com.opendoorlogistics.core.components.ODLComponentDecorator;
import com.opendoorlogistics.core.components.ODLGlobalComponents;
final public class SelectComponentIDList extends JPanel{
private final JComboBox <MyDecorator>comboBox;
private class MyDecorator extends ODLComponentDecorator{
public MyDecorator(ODLComponent decorated) {
super(decorated);
}
@Override
public String toString(){
return getName() + " (" + getId() + ")";
}
ODLComponent getDecorated(){
return decorated;
}
}
public SelectComponentIDList(){
this(null);
}
public SelectComponentIDList(String selected){
ArrayList<MyDecorator> decs = new ArrayList<>();
for(ODLComponent component: ODLGlobalComponents.getProvider()){
decs.add(new MyDecorator(component));
}
// sort alphabetically
Collections.sort(decs, new Comparator<MyDecorator>() {
@Override
public int compare(MyDecorator o1, MyDecorator o2) {
return o1.toString().compareTo(o2.toString());
}
});
MyDecorator [] decsArray = decs.toArray(new MyDecorator[decs.size()]);
comboBox = new JComboBox <>(decsArray);
setLayout(new BorderLayout());
add(comboBox);
for(int i =0 ; i < comboBox.getItemCount() && selected!=null; i++){
if(comboBox.getItemAt(i).getId().equals(selected)){
comboBox.setSelectedIndex(i);
}
}
}
public ODLComponent getSelected(){
return ((MyDecorator)comboBox.getSelectedItem()).getDecorated();
}
public void addListSelectionListener(ActionListener listener){
comboBox.addActionListener(listener);
}
}