1 19 20 package org.netbeans.modules.j2ee.refactoring; 21 22 import org.netbeans.modules.j2ee.dd.api.ejb.Ejb; 23 import org.netbeans.modules.j2ee.dd.api.ejb.EntityAndSession; 24 import org.netbeans.modules.j2ee.dd.api.ejb.MessageDriven; 25 import org.netbeans.modules.j2ee.dd.api.ejb.Entity; 26 import org.netbeans.modules.j2ee.dd.api.ejb.Session; 27 import org.netbeans.modules.j2ee.dd.api.ejb.EnterpriseBeans; 28 import org.netbeans.modules.j2ee.dd.api.common.CommonDDBean; 29 import org.netbeans.modules.j2ee.dd.api.common.EjbLocalRef; 30 import org.netbeans.modules.j2ee.dd.api.common.EjbRef; 31 import org.netbeans.jmi.javamodel.JavaClass; 32 import org.netbeans.jmi.javamodel.ClassDefinition; 33 34 import java.util.Iterator ; 35 36 39 public abstract class EjbInterfaceType { 40 41 public static final EjbInterfaceType BEAN_IMPL = new EjbInterfaceType() { 42 public String getClassName(Ejb bean) { 43 return bean == null ? null : bean.getEjbClass(); 44 } 45 46 public void setNewClassName(Ejb bean, String newName) { 47 if (bean != null) { 48 bean.setEjbClass(newName); 49 } 50 } 51 52 protected String getSuperClassName(Class beanType) { 53 if (MessageDriven.class.isAssignableFrom(beanType)) { 54 return Utility.MESSAGE_DRIVEN_BEAN; 55 } else if (Entity.class.isAssignableFrom(beanType)) { 56 return Utility.ENTITY_BEAN; 57 } else if (Session.class.isAssignableFrom(beanType)) { 58 return Utility.SESSION_BEAN; 59 } else { 60 return null; 61 } 62 } 63 64 public String getSuffix() { 65 return "Bean"; } 67 68 public String toString() { 69 return "implementation class"; } 71 }; 72 73 public static final EjbInterfaceType LOCAL_HOME = new EjbInterfaceType() { 74 public String getClassName(Ejb bean) { 75 if (bean instanceof EntityAndSession) { 76 return ((EntityAndSession) bean).getLocalHome(); 77 } else { 78 return null; 79 } 80 } 81 82 public void setNewClassName(Ejb bean, String newName) { 83 if (bean instanceof EntityAndSession) { 84 ((EntityAndSession) bean).setLocalHome(newName); 85 } 86 } 87 88 protected String getSuperClassName(Class beanType) { 89 return Utility.EJB_LOCAL_HOME; 90 } 91 92 public String getSuffix() { 93 return "LocalHome"; } 95 96 public String toString() { 97 return "local home interface"; } 99 100 public CommonDDBean[] getReferences(Ejb bean) { 101 return bean.getEjbLocalRef(); 102 } 103 104 public String getReferenceValue(CommonDDBean ref) { 105 return ((EjbLocalRef)ref).getLocalHome(); 106 } 107 108 public void setRefValue(CommonDDBean ref, String value) { 109 ((EjbLocalRef) ref).setLocalHome(value); 110 } 111 }; 112 113 public static final EjbInterfaceType LOCAL = new EjbInterfaceType() { 114 public String getClassName(Ejb bean) { 115 if (bean instanceof EntityAndSession) { 116 return ((EntityAndSession) bean).getLocal(); 117 } else { 118 return null; 119 } 120 } 121 122 public void setNewClassName(Ejb bean, String newName) { 123 if (bean instanceof EntityAndSession) { 124 ((EntityAndSession) bean).setLocal(newName); 125 } 126 } 127 128 protected String getSuperClassName(Class beanType) { 129 return Utility.EJB_LOCAL_OBJECT; 130 } 131 132 public String getSuffix() { 133 return "Local"; } 135 136 public String toString() { 137 return "local interface"; } 139 140 public CommonDDBean[] getReferences(Ejb bean) { 141 return bean.getEjbLocalRef(); 142 } 143 144 public String getReferenceValue(CommonDDBean ref) { 145 return ((EjbLocalRef)ref).getLocal(); 146 } 147 148 public void setRefValue(CommonDDBean ref, String value) { 149 ((EjbLocalRef) ref).setLocal(value); 150 } 151 }; 152 153 public static final EjbInterfaceType REMOTE = new EjbInterfaceType() { 154 public String getClassName(Ejb bean) { 155 if (bean instanceof EntityAndSession) { 156 return ((EntityAndSession) bean).getRemote(); 157 } else { 158 return null; 159 } 160 } 161 162 public void setNewClassName(Ejb bean, String newName) { 163 if (bean instanceof EntityAndSession) { 164 ((EntityAndSession) bean).setRemote(newName); 165 } 166 } 167 168 protected String getSuperClassName(Class beanType) { 169 return Utility.EJB_OBJECT; 170 } 171 172 public String getSuffix() { 173 return "Remote"; } 175 176 public String toString() { 177 return "remote interface"; } 179 180 public CommonDDBean[] getReferences(Ejb bean) { 181 return bean.getEjbRef(); 182 } 183 184 public String getReferenceValue(CommonDDBean ref) { 185 return ((EjbRef)ref).getRemote(); 186 } 187 188 public void setRefValue(CommonDDBean ref, String value) { 189 ((EjbRef) ref).setRemote(value); 190 } 191 }; 192 193 public static final EjbInterfaceType HOME = new EjbInterfaceType() { 194 public String getClassName(Ejb bean) { 195 if (bean instanceof EntityAndSession) { 196 return ((EntityAndSession) bean).getHome(); 197 } else { 198 return null; 199 } 200 } 201 202 public void setNewClassName(Ejb bean, String newName) { 203 if (bean instanceof EntityAndSession) { 204 ((EntityAndSession) bean).setHome(newName); 205 } 206 } 207 208 protected String getSuperClassName(Class beanType) { 209 return Utility.EJB_HOME; 210 } 211 212 public String getSuffix() { 213 return "RemoteHome"; } 215 216 public String toString() { 217 return "home interface"; } 219 220 public CommonDDBean[] getReferences(Ejb bean) { 221 return bean.getEjbRef(); 222 } 223 224 public String getReferenceValue(CommonDDBean ref) { 225 return ((EjbRef)ref).getHome(); 226 } 227 228 public void setRefValue(CommonDDBean ref, String value) { 229 ((EjbRef) ref).setHome(value); 230 } 231 }; 232 233 public static final EjbInterfaceType LOCAL_BUSINESS = new EjbInterfaceType() { 234 public String getClassName(Ejb bean) { 235 return getClassNameForBeanBaseName(LOCAL.getBeanBaseName(LOCAL.getClassName(bean))); 236 } 237 238 public void setNewClassName(Ejb bean, String newName) { 239 240 } 241 242 protected String getSuperClassName(Class beanType) { 243 return null; 244 } 245 246 public String getSuffix() { 247 return "LocalBusiness"; } 249 250 public String toString() { 251 return "local business interface"; } 253 }; 254 255 public static final EjbInterfaceType REMOTE_BUSINESS = new EjbInterfaceType() { 256 public String getClassName(Ejb bean) { 257 return getClassNameForBeanBaseName(REMOTE.getBeanBaseName(REMOTE.getClassName(bean))); 258 } 259 260 public void setNewClassName(Ejb bean, String newName) { 261 262 } 263 264 protected String getSuperClassName(Class beanType) { 265 return null; 266 } 267 268 public String getSuffix() { 269 return "RemoteBusiness"; } 271 272 public String toString() { 273 return "remote business interface"; } 275 }; 276 277 public abstract String getClassName(Ejb bean); 278 279 public abstract void setNewClassName(Ejb bean, String newName); 280 protected abstract String getSuperClassName(Class beanType); 281 public abstract String getSuffix(); 282 283 public JavaClass resolveClass(Ejb bean) { 284 JavaClass javaClass = Utility.resolveRealClass(getClassName(bean)); 285 if (javaClass != null) { 286 String superClassName = getSuperClassName(bean.getClass()); 287 if (superClassName == null || Utility.isSubTypeOf(javaClass, superClassName)) { 288 return javaClass; 289 } 290 } 291 return null; 292 } 293 294 public String getClassNameForBeanBaseName(String beanBaseName) { 295 return beanBaseName + getSuffix(); 296 } 297 298 public String getBeanBaseName(String className) { 299 return stripSuffix(className, getSuffix()); 300 } 301 302 private static String stripSuffix(String s, String suffix) { 303 return s != null && s.endsWith(suffix) ? s.substring(0, s.length() - suffix.length()) : s; 304 } 305 306 public Ejb getBean(EnterpriseBeans eBeans, Class beanType, String className) { 307 if (eBeans != null) { 308 Ejb[] ejbs = eBeans.getEjbs(); 309 if (ejbs != null) { 310 for (int i = 0; i < ejbs.length; i++) { 311 Ejb ejb = ejbs[i]; 312 if (ejb != null && beanType.isAssignableFrom(ejb.getClass())) { 313 Ejb bean = ejbs[i]; 314 if (className.equals(getClassName(bean))) { 315 return bean; 316 } 317 } 318 } 319 } 320 } 321 return null; 322 } 323 324 public Ejb getBean(EnterpriseBeans eBeans, Class beanType, ClassDefinition jc) { 325 if (eBeans != null) { 326 Ejb[] ejbs = eBeans.getEjbs(); 327 if (ejbs != null) { 328 for (int i = 0; i < ejbs.length; i++) { 329 Ejb ejb = ejbs[i]; 330 if (ejb != null && beanType.isAssignableFrom(ejb.getClass())) { 331 Ejb bean = ejbs[i]; 332 JavaClass javaClass = resolveClass(bean); 333 if (javaClass != null && (javaClass.isSubTypeOf(jc) ||jc.isSubTypeOf(javaClass))) { 334 return bean; 335 } 336 } 337 } 338 } 339 } 340 return null; 341 } 342 343 public CommonDDBean[] getReferences(Ejb bean) { 344 return null; 345 } 346 347 public String getReferenceValue(CommonDDBean ref) { 348 return null; 349 } 350 351 public void setRefValue(CommonDDBean ref, String value) { 352 } 353 354 355 356 public static EjbInterfaceType getEjbInterfaceType(ClassDefinition javaClass, boolean resolveBusiness) { 357 if (Utility.isSubTypeOf(javaClass, Utility.EJB_LOCAL_OBJECT)) { 358 return LOCAL; 359 } else if (Utility.isSubTypeOf(javaClass, Utility.EJB_OBJECT)) { 360 return REMOTE; 361 } else if (Utility.isSubTypeOf(javaClass, Utility.EJB_HOME)) { 362 return HOME; 363 } else if (Utility.isSubTypeOf(javaClass, Utility.EJB_LOCAL_HOME)) { 364 return LOCAL_HOME; 365 } else if (Utility.isSubTypeOf(javaClass, Utility.SESSION_BEAN) || 366 Utility.isSubTypeOf(javaClass, Utility.ENTITY_BEAN) || 367 Utility.isSubTypeOf(javaClass, Utility.MESSAGE_DRIVEN_BEAN)) { 368 return BEAN_IMPL; 369 } else { 370 for (Iterator it = ((JavaClass) javaClass).getImplementors().iterator(); it.hasNext();) { 371 ClassDefinition implementor = (ClassDefinition) it.next(); 372 EjbInterfaceType ejbInterfaceType = getEjbInterfaceType(implementor, false); 373 if (ejbInterfaceType != null) { 374 if (resolveBusiness) { 375 String beanBaseName = ejbInterfaceType.getBeanBaseName(implementor.getName()); 376 if (ejbInterfaceType == LOCAL) { 377 if (beanBaseName.equals(LOCAL_BUSINESS.getBeanBaseName(javaClass.getName()))) { 378 return LOCAL_BUSINESS; 379 } 380 } else if (ejbInterfaceType == REMOTE) { 381 if (beanBaseName.equals(REMOTE_BUSINESS.getBeanBaseName(javaClass.getName()))) { 382 return REMOTE_BUSINESS; 383 } 384 } 385 } else { 386 return ejbInterfaceType; 387 } 388 } 389 } 390 return null; 391 } 392 } 393 } 394 | Popular Tags |