001: package org.zilonis.tool.ui;
002:
003: import java.awt.BorderLayout;
004:
005: import javax.swing.JScrollPane;
006:
007: import org.jdesktop.swingx.JXPanel;
008: import org.zilonis.network.Condition;
009: import org.zilonis.shell.GenericEventHandler;
010: import org.zilonis.tool.ext.aerith.ui.AerithPanelPainter;
011: import org.zilonis.tool.ext.aerith.ui.AerithScrollbarUI;
012: import org.zilonis.tool.ui.component.AlphaMemoryComponent;
013: import org.zilonis.tool.ui.component.BetaMemoryComponent;
014: import org.zilonis.tool.ui.component.ExpressionNodeComponent;
015: import org.zilonis.tool.ui.component.HArrowComponent;
016: import org.zilonis.tool.ui.component.JoinNodeComponent;
017: import org.zilonis.tool.ui.component.NCCNodeComponent;
018: import org.zilonis.tool.ui.component.NegativeNodeComponent;
019: import org.zilonis.tool.ui.component.NetworkLayout;
020: import org.zilonis.tool.ui.component.VArrowComponent;
021:
022: public class RulesGraphPanel extends JXPanel {
023:
024: protected JXPanel inside;
025: private int conditionId = 0;
026: private GenericEventHandler eventHandler;
027:
028: public RulesGraphPanel(GenericEventHandler eventHandler) {
029: this (eventHandler, true);
030: }
031:
032: public RulesGraphPanel(GenericEventHandler eventHandler,
033: boolean usePainter) {
034: this .eventHandler = eventHandler;
035: JScrollPane scrollPane = new JScrollPane();
036: scrollPane.getHorizontalScrollBar().setUI(
037: new AerithScrollbarUI());
038: scrollPane.getVerticalScrollBar()
039: .setUI(new AerithScrollbarUI());
040: inside = new JXPanel();
041: scrollPane.getViewport().setView(inside);
042: setBorder(javax.swing.BorderFactory.createEmptyBorder(2, 2, 2,
043: 2));
044: scrollPane.setBorder(javax.swing.BorderFactory
045: .createEmptyBorder(6, 6, 6, 6));
046: if (usePainter) {
047: AerithPanelPainter aerithPanelPainter = new AerithPanelPainter();
048: // inside.setBackgroundPainter(aerithPanelPainter);
049: setBackgroundPainter(aerithPanelPainter);
050: }
051: //setMaximumSize(new java.awt.Dimension(29, 222));
052: //setMinimumSize(new java.awt.Dimension(29, 222));
053: //setPreferredSize(new java.awt.Dimension(29, 222));
054: setOpaque(false);
055: inside.setOpaque(false);
056: scrollPane.setOpaque(false);
057: scrollPane.getViewport().setOpaque(false);
058: inside.setLayout(new NetworkLayout());
059: setLayout(new BorderLayout());
060: add(BorderLayout.CENTER, scrollPane);
061: }
062:
063: public void add(Condition condition) {
064: for (Condition c = condition; c != null; c = c.getNext()) {
065: switch (c.getType()) {
066:
067: case Condition.POSITIVE_CONDITION: {
068: BetaMemoryComponent beta = new BetaMemoryComponent(
069: eventHandler);
070: beta.setBetaMemory(c.getBetaMemory());
071: beta.setIndexedBetaMemory(c.getIndexedBetaMemory());
072: inside.add("" + conditionId, beta);
073: inside.add("" + conditionId, new VArrowComponent());
074: inside.add("" + conditionId, new AlphaMemoryComponent(
075: eventHandler, c.getTriplet()));
076: inside.add("" + conditionId, new VArrowComponent());
077: inside.add("" + conditionId, new JoinNodeComponent());
078: inside.add("" + conditionId, new HArrowComponent());
079: break;
080: }
081: case Condition.BOOLEAN_EXPRESSION: {
082: BetaMemoryComponent beta = new BetaMemoryComponent(
083: eventHandler);
084: inside.add("" + conditionId, beta);
085: inside.add("" + conditionId, new VArrowComponent());
086: inside
087: .add("" + conditionId,
088: new AlphaMemoryComponent());
089: inside.add("" + conditionId, new VArrowComponent());
090: JoinNodeComponent join = new ExpressionNodeComponent();
091: join.setToolTipText(c.getExpression());
092: inside.add("" + conditionId, join);
093: inside
094: .add("" + conditionId, new HArrowComponent(
095: false));
096: break;
097: }
098: case Condition.NEGATIVE_CONDITION: {
099: NegativeNodeComponent negativeNode = new NegativeNodeComponent(
100: eventHandler);
101: negativeNode.setNegativeNode(c.getNegativeNode());
102: inside.add("" + conditionId, negativeNode);
103: inside.add("" + conditionId, new AlphaMemoryComponent(
104: eventHandler, c.getTriplet()));
105: inside.add("" + conditionId, new HArrowComponent());
106: inside.add("" + conditionId, new VArrowComponent());
107: }
108: case Condition.CONJUNCTIVE_NEGATION_CONDITION: {
109: RulesGraphPanel chain = new RulesGraphPanel(
110: eventHandler, false);
111: chain.add(c.getTop());
112: inside.add("" + conditionId, chain);
113: inside.add("" + conditionId, new HArrowComponent());
114: inside.add("" + conditionId, new VArrowComponent());
115: inside.add("" + conditionId, new VArrowComponent());
116: NCCNodeComponent nccNodeUI = new NCCNodeComponent(
117: eventHandler);
118: nccNodeUI.setNCCNode(c.getNccNode());
119: NCCNodeComponent nccPartnerNodeUI = new NCCNodeComponent(
120: eventHandler);
121: nccPartnerNodeUI.setNCCPartnerNode(c
122: .getNccPartnerNode());
123: inside.add("" + conditionId, nccNodeUI);
124: inside.add("" + conditionId, nccPartnerNodeUI);
125: inside.add("" + conditionId, new HArrowComponent());
126: }
127: }
128: conditionId++;
129: }
130: revalidate();
131: repaint();
132: }
133:
134: }
|