1 19 20 package org.netbeans.modules.j2ee.ejbcore.ui.logicalview.ejb.entity; 21 22 import java.beans.PropertyChangeEvent ; 23 import java.beans.PropertyChangeListener ; 24 import java.util.*; 25 import javax.swing.SwingUtilities ; 26 import org.netbeans.modules.j2ee.dd.api.common.CommonDDBean; 27 import org.netbeans.modules.j2ee.dd.api.ejb.CmpField; 28 import org.netbeans.modules.j2ee.dd.api.ejb.CmrField; 29 import org.netbeans.modules.j2ee.dd.api.ejb.EjbJar; 30 import org.netbeans.modules.j2ee.dd.api.ejb.EjbRelation; 31 import org.netbeans.modules.j2ee.dd.api.ejb.EjbRelationshipRole; 32 import org.netbeans.modules.j2ee.dd.api.ejb.Entity; 33 import org.netbeans.modules.j2ee.dd.api.ejb.Relationships; 34 import org.netbeans.modules.j2ee.ejbcore.api.methodcontroller.EntityMethodController; 35 import org.openide.filesystems.FileObject; 36 import org.openide.nodes.*; 37 38 39 40 43 public class CMFieldChildren extends Children.Keys<CommonDDBean> implements PropertyChangeListener { 44 private final EntityMethodController controller; 45 private final Entity model; 46 private final EjbJar ejbJar; 47 private final FileObject ddFile; 48 49 public CMFieldChildren(EntityMethodController controller, 50 Entity model, 51 EjbJar jar, 52 FileObject ddFile) { 53 this.model = model; 54 this.controller = controller; 55 this.ejbJar = jar; 56 this.ddFile = ddFile; 57 } 58 59 protected void addNotify() { 60 super.addNotify(); 61 updateKeys(); 62 model.addPropertyChangeListener(this); 63 ejbJar.addPropertyChangeListener(this); 64 } 65 66 private void updateKeys() { 67 SwingUtilities.invokeLater(new Runnable () { 68 public void run() { 69 if (controller.getBeanClass() == null) { 70 setKeys(Collections.<CommonDDBean>emptySet()); 71 } else { 72 List<CommonDDBean> keys = getCmrFields(model.getEjbName()); 73 CmpField[] cmpFields = model.getCmpField(); 74 Arrays.sort(cmpFields, new Comparator<CmpField>() { 75 public int compare(CmpField cmpField1, CmpField cmpField2) { 76 String fieldName1 = cmpField1.getFieldName(); 77 String fieldName2 = cmpField2.getFieldName(); 78 if (fieldName1 == null) { 79 fieldName1 = ""; 80 } 81 if (fieldName2 == null) { 82 fieldName2 = ""; 83 } 84 return fieldName1.compareTo(fieldName2); 85 } 86 }); 87 keys.addAll(Arrays.asList(cmpFields)); 88 setKeys(keys); 89 } 90 } 91 }); 92 } 93 94 protected void removeNotify() { 95 model.removePropertyChangeListener(this); 96 ejbJar.removePropertyChangeListener(this); 97 setKeys(Collections.<CommonDDBean>emptySet()); 98 super.removeNotify(); 99 } 100 101 protected Node[] createNodes(CommonDDBean key) { 102 Node[] nodes = null; 103 if (key instanceof CmpField) { 104 CmpField field = (CmpField) key; 105 Node node = new CMPFieldNode(field, controller, ddFile); 106 nodes = new Node[] { node }; 107 } else if (key instanceof CmrField) { 108 CmrField field = (CmrField) key; 109 Node node = new CMRFieldNode(field, controller, ddFile); 110 nodes = new Node[] { node }; 111 } 112 return nodes; 113 } 114 115 public void propertyChange(PropertyChangeEvent propertyChangeEvent) { 116 updateKeys(); 117 } 118 119 private CmrField getCmrField(EjbRelationshipRole role, String ejbName) { 120 return (role != null && 121 role.getRelationshipRoleSource() != null && 122 ejbName.equals(role.getRelationshipRoleSource().getEjbName()) && 123 role.getCmrField() != null) ? role.getCmrField():null; 124 } 125 126 private void getFields(String ejbName, List<CommonDDBean> list) { 127 Relationships relationships = ejbJar.getSingleRelationships(); 128 if (relationships != null) { 129 EjbRelation[] relations = relationships.getEjbRelation(); 130 if (relations != null) { 131 for (int i = 0; i < relations.length; i++) { 132 CmrField cmrField = getCmrField(relations[i].getEjbRelationshipRole(), ejbName); 133 if (cmrField != null) { 134 list.add(cmrField); 135 } 136 cmrField = getCmrField(relations[i].getEjbRelationshipRole2(), ejbName); 137 if (cmrField != null) { 138 list.add(cmrField); 139 } 140 } 141 } 142 } 143 } 144 145 private List<CommonDDBean> getCmrFields(String ejbName) { 146 List<CommonDDBean> resultList = new LinkedList<CommonDDBean>(); 147 getFields(ejbName + "", resultList); 148 return resultList; 149 } 150 151 } 152 | Popular Tags |