1 19 20 28 29 package org.netbeans.modules.xml.wsdl.ui.view.grapheditor; 30 31 import java.awt.Dimension ; 32 import java.awt.Rectangle ; 33 import java.util.Collection ; 34 35 import javax.swing.SwingUtilities ; 36 37 import org.netbeans.api.visual.layout.LayoutFactory; 38 import org.netbeans.api.visual.layout.LayoutFactory.SerialAlignment; 39 import org.netbeans.api.visual.widget.Scene; 40 import org.netbeans.api.visual.widget.Widget; 41 import org.netbeans.modules.xml.wsdl.model.Operation; 42 import org.netbeans.modules.xml.wsdl.model.PortType; 43 import org.netbeans.modules.xml.wsdl.model.extensions.bpel.Role; 44 import org.netbeans.modules.xml.wsdl.ui.view.grapheditor.widget.OperationWidget; 45 import org.netbeans.modules.xml.wsdl.ui.view.grapheditor.widget.PartnerLinkTypeContentWidget; 46 import org.netbeans.modules.xml.wsdl.ui.view.grapheditor.widget.RoleWidget; 47 import org.netbeans.modules.xml.wsdl.ui.view.grapheditor.widget.WidgetFactory; 48 import org.netbeans.modules.xml.xam.ComponentEvent; 49 import org.netbeans.modules.xml.xam.ComponentListener; 50 import org.netbeans.modules.xml.xam.dom.NamedComponentReference; 51 52 56 public class OperationSceneLayer extends Widget implements ComponentListener { 57 58 private static final int OPERATION_GAP = 25; 59 private PartnerLinkTypeContentWidget mOuterWidget; 60 private Widget dummyOperationWidget; 61 private PortType leftPortType; 62 private PortType rightPortType; 63 private Widget dummyEndWidget; 64 65 public OperationSceneLayer(Scene scene, PartnerLinkTypeContentWidget outerWidget) { 66 super(scene); 67 mOuterWidget = outerWidget; 68 mOuterWidget.getWSDLComponent().getModel().addComponentListener(this); 69 rightPortType = getPortType(mOuterWidget.getRightRoleWidget()); 71 leftPortType = getPortType(mOuterWidget.getLeftRoleWidget()); 72 init(); 73 } 74 75 private void init() { 76 setLayout(LayoutFactory.createVerticalLayout(SerialAlignment.JUSTIFY, OPERATION_GAP)); 78 dummyOperationWidget = new Widget(getScene()); 79 dummyOperationWidget.setPreferredBounds(new Rectangle (0, 67)); dummyEndWidget = new Widget(getScene()); 81 dummyEndWidget.setPreferredBounds(new Rectangle (0, 105)); refreshOperations(); 83 setMinimumSize(new Dimension (400, 0)); 84 } 85 86 public void childrenAdded(ComponentEvent evt) { 87 if (evt.getSource() instanceof PortType) { 88 PortType pt = (PortType) evt.getSource(); 90 if (pt == rightPortType || pt == leftPortType) { 91 refreshOperations(); 92 } 93 } 94 } 95 96 97 public void childrenDeleted(ComponentEvent evt) { 98 if (evt.getSource() instanceof PortType) { 99 PortType pt = (PortType) evt.getSource(); 100 if (pt == rightPortType || pt == leftPortType) { 101 refreshOperations(); 102 } 103 } else { 104 PortType rpt = getPortType(mOuterWidget.getRightRoleWidget()); 106 PortType lpt = getPortType(mOuterWidget.getLeftRoleWidget()); 107 if (lpt != leftPortType || rpt != rightPortType) { 108 leftPortType = lpt; 110 rightPortType = rpt; 111 refreshOperations(); 112 } 113 } 114 } 115 116 117 public void valueChanged(ComponentEvent evt) { 118 if (evt.getSource() instanceof Role) { 119 Role role = (Role) evt.getSource(); 120 if (role.equals(mOuterWidget.getRightRoleWidget().getWSDLComponent())) { 122 rightPortType = getPortType(mOuterWidget.getRightRoleWidget()); 123 refreshOperations(); 124 } else if (role.equals(mOuterWidget.getLeftRoleWidget().getWSDLComponent())) { 125 leftPortType = getPortType(mOuterWidget.getLeftRoleWidget()); 126 refreshOperations(); 127 } 128 } 129 } 130 131 135 private void refreshOperations() { 136 SwingUtilities.invokeLater(new Runnable () { 137 public void run() { 138 removeChildren(); 139 mOuterWidget.getRightRoleWidget().showHotSpot(false); 140 renderOperations(true); 141 mOuterWidget.getLeftRoleWidget().showHotSpot(false); 142 renderOperations(false); 143 addChild(dummyEndWidget); 144 getScene().validate(); 145 } 146 }); 147 148 } 149 150 155 private void renderOperations(boolean right) { 156 PortType pt = right ? rightPortType : leftPortType; 157 if (pt != null) { 158 Collection <Operation> operations = pt.getOperations(); 159 WidgetFactory factory = WidgetFactory.getInstance(); 160 for (Operation operation : operations) { 161 OperationWidget operationWidget = 162 (OperationWidget) factory.createWidget(getScene(), operation); 163 operationWidget.setRightSided(right); 164 addChild(operationWidget); 165 } 166 } 167 } 168 169 170 171 177 private PortType getPortType(RoleWidget rw) { 178 try { 179 if (rw != null) { 180 Role role = rw.getWSDLComponent(); 181 if (role != null) { 182 NamedComponentReference<PortType> ptref = role.getPortType(); 183 if (ptref != null) { 184 return ptref.get(); 185 } 186 } 187 } 188 } catch (IllegalStateException ise) { 189 } 192 return null; 193 } 194 195 196 197 public void showBlankWidget(int i) { 198 if (i == -1) return; 199 200 removeBlankWidget(); 201 addChild(i, dummyOperationWidget); 202 } 203 204 public void removeBlankWidget() { 205 if (getChildren().contains(dummyOperationWidget)) { 206 removeChild(dummyOperationWidget); 207 } 208 } 209 } 210 | Popular Tags |