package org.infoobject.magicmap.node.ui;
import ca.odell.glazedlists.swing.EventComboBoxModel;
import com.jgoodies.forms.builder.DefaultFormBuilder;
import com.jgoodies.forms.builder.PanelBuilder;
import com.jgoodies.forms.layout.CellConstraints;
import com.jgoodies.forms.layout.FormLayout;
import net.sf.magicmap.client.model.node.Node;
import net.sf.magicmap.client.utils.AbstractModel;
import org.infoobject.core.infoobject.domain.InformationObject;
import org.infoobject.magicmap.infoobject.ui.util.NodeMatcherEditor;
import org.infoobject.magicmap.infoobject.ui.util.InformationObjectMatcherEditor;
import org.infoobject.magicmap.infoobject.ui.util.InformationObjectNodeListFactory;
import org.infoobject.magicmap.infoobject.ui.util.InformationObjectCellRenderer;
import org.infoobject.magicmap.node.ui.util.NodeCellRenderer;
import javax.swing.*;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.Map;
/**
* <p>
* Class ObjectLinkUI ZUSAMMENFASSUNG
* </p>
* <p>
* DETAILS
* </p>
*
* @author Jan Friderici
* Date: 12.08.2008
* Time: 22:49:00
*/
public class ObjectLinkSelectionView extends AbstractModel {
private final InformationObjectNodeListFactory listFactory;
private Node selectedNode = Node.EMPTY_NODE;
private InformationObject selectedInformationObject;
private EventComboBoxModel<Node> nodeModel;
private EventComboBoxModel<InformationObject> informationObjectModel;
private NodeMatcherEditor nodeMatcherEditor = new NodeMatcherEditor();
private InformationObjectMatcherEditor informationObjectMatcherEditor = new InformationObjectMatcherEditor();
private JComponent view;
private JComboBox informationUri;
private JComboBox nodeName;
private JButton loadButton;
/**
*
* @param listFactory needed for the lists.
*/
public ObjectLinkSelectionView(InformationObjectNodeListFactory listFactory) {
this.listFactory = listFactory;
nodeModel = new EventComboBoxModel<Node>(listFactory.getNodeList(informationObjectMatcherEditor));
informationObjectModel = new EventComboBoxModel<InformationObject>(listFactory.getInformationObjectList(nodeMatcherEditor));
informationUri = new JComboBox(informationObjectModel);
informationUri.setRenderer(new InformationObjectCellRenderer());
informationUri.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent event) {
setSelectedInformationObject((InformationObject) informationUri.getSelectedItem());
}
});
nodeName = new JComboBox(nodeModel);
nodeName.setRenderer(new NodeCellRenderer());
nodeName.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent event) {
setSelectedNode((Node) nodeName.getSelectedItem());
}
});
loadButton = new JButton();
}
public Node getSelectedNode() {
return selectedNode;
}
public void setSelectedNode(Node newSelectedNode) {
if (this.selectedNode == null || (newSelectedNode != null && !this.selectedNode.equals(newSelectedNode))) {
Node oldselectedNode = this.selectedNode;
this.selectedNode = newSelectedNode;
firePropertyChange("selectedNode", oldselectedNode, this.selectedNode);
this.nodeModel.setSelectedItem(newSelectedNode);
if (!nodeName.isEnabled()) {
informationObjectMatcherEditor.setInformationObject(null);
nodeMatcherEditor.setFilterNode(newSelectedNode);
}
}
}
public void enableNodeSelection(boolean node) {
nodeName.setEnabled(node);
}
public void enableInformationSelection(boolean node) {
informationUri.setEnabled(node);
}
public InformationObject getSelectedInformationObject() {
return selectedInformationObject;
}
public void setSelectedInformationObject(InformationObject selectedInformationObject) {
if (this.selectedInformationObject == null || (selectedInformationObject != null && !this.selectedInformationObject.equals(selectedInformationObject))) {
InformationObject old = this.selectedInformationObject;
this.selectedInformationObject = selectedInformationObject;
firePropertyChange("selectedInformationObject", old, selectedInformationObject);
this.informationObjectModel.setSelectedItem(selectedInformationObject);
if (!informationUri.isEnabled()) {
nodeMatcherEditor.setFilterNode(null);
informationObjectMatcherEditor.setInformationObject(selectedInformationObject);
}
}
}
/**
*
* @param attribute null or "select"
* @return
* @throws IllegalArgumentException
*/
public JComponent visualProxy(String attribute, Map<String, Action> actions) throws IllegalArgumentException {
JComponent view = null;
if (null == attribute) {
view = getCreateView();
if (actions.containsKey("load")){
loadButton.setAction(actions.get("load"));
loadButton.setVisible(true);
} else {
loadButton.setVisible(false);
}
} else {
throw new IllegalArgumentException("Attribute " + attribute);
}
return view;
}
/**
*
* @return
*/
private JComponent getCreateView() {
if (view == null) {
FormLayout layout = new FormLayout("right:p");
CellConstraints cc = new CellConstraints();
PanelBuilder b = new DefaultFormBuilder(layout);
b.appendRelatedComponentsGapColumn();
b.appendColumn("fill:p:grow");
b.appendRelatedComponentsGapColumn();
b.appendColumn("p");
createCombox();
b.appendRow("p");
b.add(new JLabel("Knoten"), cc.xy(1, b.getRowCount()));
b.add(nodeName, cc.xyw(3,b.getRowCount(),3));
b.appendRelatedComponentsGapRow();
b.appendRow("p");
b.add(new JLabel("Information"), cc.xy(1, b.getRowCount()));
b.add(informationUri, cc.xy(3, b.getRowCount()));
b.add(loadButton, cc.xy(5, b.getRowCount()));
view = b.getPanel();
}
return view;
}
private void createCombox() {
}
}