All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.vsspt.xjc.AbstractVssPluginImpl Maven / Gradle / Ivy

Go to download

Generates toString, setter, equals and hashCode methods on JAXB generated classes.

There is a newer version: 2.0.0
Show newest version
package com.github.vsspt.xjc;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.xml.sax.ErrorHandler;
import org.xml.sax.SAXException;


import com.github.vsspt.xjc.model.ClassRepresentation;
import com.sun.codemodel.JDefinedClass;
import com.sun.codemodel.JFieldVar;
import com.sun.tools.xjc.Options;
import com.sun.tools.xjc.Plugin;
import com.sun.tools.xjc.generator.bean.ClassOutlineImpl;
import com.sun.tools.xjc.outline.ClassOutline;
import com.sun.tools.xjc.outline.Outline;

public abstract class AbstractVssPluginImpl extends Plugin {

  protected final static String SEPARATOR = ",";

  protected abstract String getAnnotationName();
  
  protected abstract boolean checkAnnotationsFields();  

  protected abstract void generateMethod(ClassRepresentation clazz, List fields, boolean hasSuperClassFields);

  @Override
  public boolean run(final Outline outline, final Options options, final ErrorHandler arg2) throws SAXException {

    final Map classes = new HashMap();

    for (final ClassOutline classOutline : outline.getClasses()) {

      final ClassRepresentation classRepresentation = new ClassRepresentation(classOutline, getAnnotationName(), checkAnnotationsFields());

      if (classRepresentation.isValidForAugument()) {
        classes.put(classRepresentation.getName(), classRepresentation);
      }
    }

    generateCode(outline, classes);

    return true;
  }

  protected void generateCode(final Outline outline, final Map classes) {
    for (final ClassOutline classOutline : outline.getClasses()) {
      final String key = classOutline.implClass.name();
      final ClassRepresentation clazz = classes.get(key);
      if (clazz != null) {

        final JDefinedClass implementationClass = classOutline.implClass;

        final Map> fields = new HashMap>();
        for (final JFieldVar field : implementationClass.fields().values()) {

          if (clazz.getFieldsFromAnnotations().contains(field.name())) {
            List classFields = fields.get(key);
            if (classFields == null) {
              classFields = new ArrayList();
            }
            classFields.add(field);

            fields.put(key, classFields);
          }
        }
        generateMethod(clazz, fields.get(implementationClass.name()), checkForSuperClassFields((ClassOutlineImpl) classOutline, fields));
      }
    }
  }

  protected boolean checkForSuperClassFields(final ClassOutlineImpl classOutline, final Map> classFields) {
    if (classOutline.getSuperClass() == null) {
      return false;
    }
    final String key = classOutline.getSuperClass().implClass.name();
    final List fields = classFields.get(key);

    return fields == null || fields.isEmpty();

  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy