Package org.zeroturnaround.javarebel.webobjects

Source Code of org.zeroturnaround.javarebel.webobjects.WebObjectsCBP

package org.zeroturnaround.javarebel.webobjects;

import java.util.Collection;

import org.zeroturnaround.bundled.javassist.ClassPool;
import org.zeroturnaround.bundled.javassist.CtClass;
import org.zeroturnaround.bundled.javassist.CtMethod;
import org.zeroturnaround.javarebel.integration.support.JavassistClassBytecodeProcessor;

/**
* WebObjectCBP injects support for WOLips projects into
* com.webobjects._ideservices._WOProject if support doesn't already exist (ie. pre WO 5.4)
*
* @author qdolan
*
*/
public class WebObjectsCBP extends JavassistClassBytecodeProcessor {
  public static final String IDEPATCH_CLASS = "com.webobjects._ideservices._WOProject";
  private static final String IDESUPPORT_CLASS = "com.webobjects._ideservices._IDEProjectWOLips";
  private static final String IDEPATCH_METHODNAME = "ideProjectAtPath";
  private static final String IDEPATCH_SIGNATURE = "(Ljava/lang/String;)Lcom/webobjects/_ideservices/_IDEProject;";
  private static final String IDEPATCH_CODE =
    "Object obj = com.webobjects._ideservices._JR_IDEProjectWOLips.wolipsProjectAtPath($1);" +
    "if (obj != null) {" +
    "  if (com.webobjects.foundation.NSLog.debugLoggingAllowedForLevelAndGroups(2, 32L)) {" +
    "    com.webobjects.foundation.NSLog.debug.appendln(\"*****Found WOLips project at \" + $1);" +
    "  }" +
    "  return obj;" +
    "}";
 
  public static final String WORKERTHREAD_CLASS = "com.webobjects.appserver._private.WOWorkerThread";
  private static final String WORKERPATCH_METHODNAME = "runOnce";
  private static final String WORKERPATCH_SIGNATURE = "()V";
  private static final String WORKERPATCH_CODE =
    "try {" +
      "com.webobjects.foundation.NSNotificationCenter.defaultCenter().postNotification(\"" + WebObjectsPlugin.JREBEL_EVENT + "\", null);" +
    "} catch (Exception e) {" +
    "  e.printStackTrace();" +
    "}";
 
  @Override
  @SuppressWarnings("unchecked")
  public void process(ClassPool classpool, ClassLoader classloader, CtClass ctClass) throws Exception {
    if (IDEPATCH_CLASS.equals(ctClass.getName())) {
      Collection<String> classes = ctClass.getRefClasses();
      if (!classes.contains(IDESUPPORT_CLASS)) {
        CtMethod m = ctClass.getMethod(IDEPATCH_METHODNAME, IDEPATCH_SIGNATURE);
        m.insertBefore(IDEPATCH_CODE);
      }
    }
    if (WORKERTHREAD_CLASS.equals(ctClass.getName())) {
      CtMethod m = ctClass.getMethod(WORKERPATCH_METHODNAME, WORKERPATCH_SIGNATURE);
      m.insertBefore(WORKERPATCH_CODE);
    }
  }

}
TOP

Related Classes of org.zeroturnaround.javarebel.webobjects.WebObjectsCBP

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.