Package org.jvnet.jaxb2_commons.javaforkmlapi.primitives

Source Code of org.jvnet.jaxb2_commons.javaforkmlapi.primitives.ConvertComplexTypesToSimpleTypes

package org.jvnet.jaxb2_commons.javaforkmlapi.primitives;

import org.apache.log4j.Logger;
import org.jvnet.jaxb2_commons.javaforkmlapi.ClazzPool;
import org.jvnet.jaxb2_commons.javaforkmlapi.command.Command;
import org.xml.sax.ErrorHandler;

import com.sun.codemodel.JCodeModel;
import com.sun.codemodel.JDefinedClass;
import com.sun.codemodel.JFieldVar;
import com.sun.codemodel.JMethod;
import com.sun.codemodel.JType;
import com.sun.codemodel.JVar;
import com.sun.tools.xjc.Options;
import com.sun.tools.xjc.generator.bean.ClassOutlineImpl;
import com.sun.tools.xjc.outline.ClassOutline;
import com.sun.tools.xjc.outline.Outline;


/**
*
*
* @author Florian Bachmann
*/
public class ConvertComplexTypesToSimpleTypes extends Command {
  private static final Logger LOG = Logger.getLogger(ConvertComplexTypesToSimpleTypes.class.getName());

  private final JCodeModel cm;

  private int replacedTypes;

  public ConvertComplexTypesToSimpleTypes(final Outline outline, final Options opts, final ErrorHandler errorHandler, final ClazzPool pool) {
    super(outline, opts, errorHandler, pool);

    cm = outline.getCodeModel();
  }

  @Override
  public void execute() {
    for (final ClassOutline classOutline : outline.getClasses()) {
      convertComplexTypesToSimpleTypes((ClassOutlineImpl) classOutline);
     
     
    }

  }
 
 
  private void convertComplexTypesToSimpleTypes(final ClassOutlineImpl cc) {
    final JDefinedClass implClass = cc.implClass;
    // if no fields are present return
    if (implClass.fields().isEmpty()) {
      return;
    }
    final JType stringClass = cm._ref(String.class);
    replacedTypes = 0;
    replaceComplexTypes(implClass, "java.lang.Double", cm.DOUBLE);
    replaceComplexTypes(implClass, "double", cm.DOUBLE);
    replaceComplexTypes(implClass, "java.lang.Integer", cm.INT);
    replaceComplexTypes(implClass, "int", cm.INT);
    replaceComplexTypes(implClass, "byte[]", stringClass);

    if (replacedTypes == 0) {
      return;
    }

    LOG.info(implClass.name() + " types replaced: " + replacedTypes);
  }

  private void replaceComplexTypes(final JDefinedClass implClass, final String lookForType, final JType replaceWithThisType) {

    for (final JFieldVar jFieldVar : implClass.fields().values()) {
      if (jFieldVar.type().fullName().equals(lookForType)) {
        jFieldVar.type(replaceWithThisType);
        replacedTypes++;
      }
//      if (implClass.name().equals("Playlist")) {
//        if (jFieldVar.name().equals("tourPrimitive")) {
//       
//       LOG.info("!!!!!!!!!!!! jFieldVar:   " + jFieldVar.name());
//       LOG.info("!!!!!!!!!!!! jFieldVar is " + jFieldVar.type().fullName());
//      
//       jFieldVar.annotate(XmlElementRef.class).param("name", "AbstractTourPrimitiveGroup");
//        }
//      }
//      if () {
//       
//      }
    }

    for (final JMethod jFieldVar : implClass.methods()) {
      if (jFieldVar.type().fullName().equals(lookForType)) {
        jFieldVar.type(replaceWithThisType);
        // LOG.info("JMethod:   " + jFieldVar.name());
        // LOG.info("JMethod is " + jFieldVar.type().fullName());
        replacedTypes++;
      }

      for (final JVar jParams : jFieldVar.listParams()) {
        if (jParams.type().fullName().equals(lookForType)) {
          jParams.type(replaceWithThisType);
          // LOG.info("JMethod Param:    " + jParams.name());
          // LOG.info("JMethod is Param " + jParams.type().fullName());
          replacedTypes++;
        }
      }
    }
  }

}
TOP

Related Classes of org.jvnet.jaxb2_commons.javaforkmlapi.primitives.ConvertComplexTypesToSimpleTypes

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.