KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > netbeans > modules > j2ee > ejbcore > ui > logicalview > ejb > entity > CMFieldChildren


1 /*
2  * The contents of this file are subject to the terms of the Common Development
3  * and Distribution License (the License). You may not use this file except in
4  * compliance with the License.
5  *
6  * You can obtain a copy of the License at http://www.netbeans.org/cddl.html
7  * or http://www.netbeans.org/cddl.txt.
8  *
9  * When distributing Covered Code, include this CDDL Header Notice in each file
10  * and include the License file at http://www.netbeans.org/cddl.txt.
11  * If applicable, add the following below the CDDL Header, with the fields
12  * enclosed by brackets [] replaced by your own identifying information:
13  * "Portions Copyrighted [year] [name of copyright owner]"
14  *
15  * The Original Software is NetBeans. The Initial Developer of the Original
16  * Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
17  * Microsystems, Inc. All Rights Reserved.
18  */

19
20 package org.netbeans.modules.j2ee.ejbcore.ui.logicalview.ejb.entity;
21
22 import java.beans.PropertyChangeEvent JavaDoc;
23 import java.beans.PropertyChangeListener JavaDoc;
24 import java.util.*;
25 import javax.swing.SwingUtilities JavaDoc;
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 /**
41  * @author Chris Webster
42  */

43 public class CMFieldChildren extends Children.Keys<CommonDDBean> implements PropertyChangeListener JavaDoc {
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 JavaDoc() {
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 JavaDoc fieldName1 = cmpField1.getFieldName();
77                             String JavaDoc 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 JavaDoc propertyChangeEvent) {
116         updateKeys();
117     }
118     
119     private CmrField getCmrField(EjbRelationshipRole role, String JavaDoc 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 JavaDoc 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 JavaDoc ejbName) {
146         List<CommonDDBean> resultList = new LinkedList<CommonDDBean>();
147         getFields(ejbName + "", resultList);
148         return resultList;
149     }
150     
151 }
152
Popular Tags