Package org.jvnet.jaxb2_commons.javaforkmlapi.booleanconverter

Source Code of org.jvnet.jaxb2_commons.javaforkmlapi.booleanconverter.BooleanConverter

/////////////////////////////////////////////////////////////////////////////
//
// $RCSfile: $
//
// Project   JaxbPluginJavaForKmlApi
//
// Author    Flori (f.bachmann@micromata.de)
// Created   Nov 23, 2009
// Copyright Micromata Nov 23, 2009
//
// $Id: $
// $Revision: $
// $Date: $
//
/////////////////////////////////////////////////////////////////////////////
package org.jvnet.jaxb2_commons.javaforkmlapi.booleanconverter;

import javax.xml.bind.annotation.adapters.XmlAdapter;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;

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.JClass;
import com.sun.codemodel.JDefinedClass;
import com.sun.codemodel.JExpr;
import com.sun.codemodel.JFieldVar;
import com.sun.codemodel.JMethod;
import com.sun.codemodel.JMod;
import com.sun.codemodel.JOp;
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;

public class BooleanConverter extends Command {
  private static final Logger LOG = Logger.getLogger(BooleanConverter.class.getName());
 
  public BooleanConverter(final Outline outline, final Options opts, final ErrorHandler errorHandler, final ClazzPool pool) {
    super(outline, opts, errorHandler, pool);
    createBooleanConverter(outline);
  }
 
  @SuppressWarnings("restriction")
  private void createBooleanConverter(final Outline outline) {
    final JDefinedClass booleanConverter = pool.getClassBooleanConverter();

    final JClass xmladapter = outline.getCodeModel().ref(XmlAdapter.class).narrow(Integer.class).narrow(Boolean.class);
    booleanConverter._extends(xmladapter);
   
    // toString
    final JMethod unmarshal = booleanConverter.method(JMod.PUBLIC, Boolean.class, "unmarshal");
    final JVar stringConstructorArg = unmarshal.param(JMod.FINAL, Integer.class, "i");
    unmarshal.annotate(Override.class);
    unmarshal._throws(Exception.class);
    unmarshal.body()._return(JOp.cond(stringConstructorArg.eq(JExpr._null()), JExpr._null(), stringConstructorArg.eq(JExpr.lit(1))));
   
    // toString
    final JMethod marshal = booleanConverter.method(JMod.PUBLIC, Integer.class, "marshal");
    final JVar unmarshallparam = marshal.param(JMod.FINAL, Boolean.class, "b");
    marshal.annotate(Override.class);
    marshal._throws(Exception.class);
    marshal.body()._return(JOp.cond(unmarshallparam.eq(JExpr._null()), JExpr._null(), JOp.cond(unmarshallparam, JExpr.lit(1), JExpr.lit(0))));

  }


  @Override
  public void execute() {
    for (final ClassOutline classOutline : outline.getClasses()) {
      annotateBooleanFieldsWithBooleanConverter((ClassOutlineImpl) classOutline);
    }
  }
 
  private void annotateBooleanFieldsWithBooleanConverter(final ClassOutlineImpl cc) {
    final JDefinedClass implClass = cc.implClass;
    // if no fields are present return
    if (implClass.fields().isEmpty()) {
      return;
    }
   
    for (final JFieldVar jFieldVar : implClass.fields().values()) {
      if (jFieldVar.type().fullName().equals("java.lang.Boolean")) {
        jFieldVar.annotate(XmlJavaTypeAdapter.class).param("value", pool.getClassBooleanConverter());
      }
    }
  }

}
TOP

Related Classes of org.jvnet.jaxb2_commons.javaforkmlapi.booleanconverter.BooleanConverter

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.