package ilarkesto.mda.swingeditor; import ilarkesto.core.event.EventBus; import ilarkesto.core.logging.Log; import ilarkesto.core.scope.In; import ilarkesto.core.scope.Init; import ilarkesto.mda.model.ModelChangedEvent; import ilarkesto.mda.model.ModelChangedHandler; import ilarkesto.mda.model.ModellingSession; import ilarkesto.mda.model.Node; import ilarkesto.mda.swingeditor.NodeListPanel.Observer; import ilarkesto.swing.HorizontalBarPanel; import java.awt.BorderLayout; import javax.swing.JPanel; import javax.swing.border.EmptyBorder; public class NodeListBarPanel extends JPanel implements Observer, ModelChangedHandler { private static Log log = Log.get(NodeListBarPanel.class); @In ModellingSession modellingSession; @In SwingModelHelper swingModelHelper; @In EventBus eventBus; private HorizontalBarPanel bar; public NodeListBarPanel() { bar = new HorizontalBarPanel(); setLayout(new BorderLayout()); add(bar, BorderLayout.CENTER); setBorder(new EmptyBorder(10, 10, 10, 10)); } @Init public void rebuild() { log.debug("rebuild()"); bar.removeAllColumns(); bar.addColumn(createNodeList(modellingSession.getModel().getRoot())); } @Override public void onModelChanged(ModelChangedEvent event) { rebuild(); } private NodeListPanel createNodeList(Node node) { NodeListPanel nodeList = new NodeListPanel(swingModelHelper); nodeList.setObserver(this); nodeList.setNode(node); return nodeList; } @Override public void onNodeSelectionChanged(NodeListPanel nodeListPanel, Node selectedNode) { eventBus.fireEvent(new NodeSelectionChangedEvent(selectedNode)); bar.removeColumnsAfter(nodeListPanel); if (selectedNode != null) { if (!selectedNode.containsChildren()) { if (!modellingSession.getRuleSet().containsAllowedChildTypes(selectedNode)) return; } bar.addColumn(createNodeList(selectedNode)); } } }