private void createCreateReflectorMethod1(CtClass reflectorFactoryImpl) throws NotFoundException, CannotCompileException { CtClass[] parameters = new CtClass[2]; parameters[0] = pool.get(Class.class.getName()); parameters[1] = pool.get(Reflector.class.getName()); CtMethod method = new CtMethod(pool.get(PublicInterface.class.getName()), "createReflector", parameters, reflectorFactoryImpl); StringBuilder methodBuilder = new StringBuilder(); methodBuilder.append("{"); methodBuilder.append("if (1==0) {"); for (String name : servicesMap.keySetName()) { SService sService = servicesMap.getByName(name); methodBuilder.append("} else if ($1.getSimpleName().equals(\"" + sService.getSimpleName() + "\")) {"); methodBuilder.append("return new " + GENERATED_CLASSES_PACKAGE + "." + sService.getSimpleName() + "Impl" + implementationCounter + "($2);"); } methodBuilder.append("}"); methodBuilder.append("return null;"); methodBuilder.append("}"); method.setBody(methodBuilder.toString()); reflectorFactoryImpl.addMethod(method); }
private void createCreateReflectorMethod2(CtClass reflectorFactoryImpl) throws NotFoundException, CannotCompileException { CtClass[] parameters = new CtClass[2]; parameters[0] = pool.get(Class.class.getName()); parameters[1] = pool.get(PublicInterface.class.getName()); CtMethod method = new CtMethod(pool.get(Reflector.class.getName()), "createReflector", parameters, reflectorFactoryImpl); StringBuilder methodBuilder = new StringBuilder(); methodBuilder.append("{"); methodBuilder.append("if (1==0) {"); for (String name : servicesMap.keySetName()) { SService sService = servicesMap.getByName(name); methodBuilder.append("} else if ($1.getSimpleName().equals(\"" + sService.getSimpleName() + "\")) {"); methodBuilder.append("return new " + GENERATED_CLASSES_PACKAGE + "." + sService.getSimpleName() + "Reflector" + implementationCounter + "((" + sService.getInterfaceClass().getName() + ")$2);"); } methodBuilder.append("}"); methodBuilder.append("return null;"); methodBuilder.append("}"); method.setBody(methodBuilder.toString()); reflectorFactoryImpl.addMethod(method); }
@Override public List<SServiceInterface> getServiceInterfaces() throws ServerException, UserException { List<SServiceInterface> sServiceInterfaces = new ArrayList<SServiceInterface>(); for (String name : getBimServer().getServicesMap().keySetName()) { SServiceInterface sServiceInterface = convertServiceInterface(name); sServiceInterfaces.add(sServiceInterface); } Collections.sort(sServiceInterfaces, new Comparator<SServiceInterface>() { @Override public int compare(SServiceInterface o1, SServiceInterface o2) { return o1.getName().compareTo(o2.getName()); } }); return sServiceInterfaces; }
public ReflectorFactory newReflectorFactory() { implementationCounter++; try { pool = ClassPool.getDefault(); pool.insertClassPath(new ClassClassPath(this.getClass())); for (String name : servicesMap.keySetName()) { SService sService = servicesMap.getByName(name); build1((Class<? extends PublicInterface>) sService.getInterfaceClass(), sService); build2((Class<? extends PublicInterface>) sService.getInterfaceClass(), sService); } CtClass reflectorFactoryImpl = pool.makeClass("org.bimserver.reflector.ReflectorFactoryImpl" + implementationCounter); reflectorFactoryImpl.addInterface(pool.get(ReflectorFactory.class.getName())); createCreateReflectorMethod1(reflectorFactoryImpl); createCreateReflectorMethod2(reflectorFactoryImpl); Class<?> class1 = pool.toClass(reflectorFactoryImpl, getClass().getClassLoader(), getClass().getProtectionDomain()); return (ReflectorFactory) class1.newInstance(); } catch (Exception e) { LOGGER.error("", e); } return null; }