package org.jvnet.jaxb2_commons.xjc.generator.concrete; import org.apache.commons.lang3.Validate; import org.jvnet.jaxb2_commons.xjc.generator.MEnumConstantOutlineGenerator; import org.jvnet.jaxb2_commons.xjc.generator.MEnumOutlineGenerator; import org.jvnet.jaxb2_commons.xjc.outline.MEnumConstantOutline; import org.jvnet.jaxb2_commons.xjc.outline.MEnumOutline; import org.jvnet.jaxb2_commons.xjc.outline.MPackageOutline; import org.jvnet.jaxb2_commons.xjc.outline.concrete.CMEnumOutline; import org.jvnet.jaxb2_commons.xml.bind.model.MEnumConstantInfo; import org.jvnet.jaxb2_commons.xml.bind.model.MEnumLeafInfo; import org.jvnet.jaxb2_commons.xml.bind.model.MModelInfo; import com.sun.tools.xjc.model.CEnumLeafInfo; import com.sun.tools.xjc.model.nav.NClass; import com.sun.tools.xjc.model.nav.NType; import com.sun.tools.xjc.outline.EnumOutline; import com.sun.tools.xjc.outline.Outline; public class CMEnumOutlineGenerator implements MEnumOutlineGenerator { private final Outline outline; private final CEnumLeafInfo enumLeafInfo; public CMEnumOutlineGenerator(Outline outline, CEnumLeafInfo enumLeafInfo) { Validate.notNull(outline); Validate.notNull(enumLeafInfo); this.outline = outline; this.enumLeafInfo = enumLeafInfo; } public MEnumOutline generate(MPackageOutline parent, MModelInfo<NType, NClass> modelInfo, MEnumLeafInfo<NType, NClass> enumLeafInfo) { final EnumOutline eo = outline.getEnum(this.enumLeafInfo); final CMEnumOutline enumOutline = new CMEnumOutline(parent.getParent(), parent, enumLeafInfo, eo.clazz); for (MEnumConstantInfo<NType, NClass> enumConstantInfo : enumLeafInfo .getConstants()) { if (enumConstantInfo.getOrigin() instanceof EnumConstantOutlineGeneratorFactory) { final MEnumConstantOutlineGenerator generator = ((EnumConstantOutlineGeneratorFactory) enumConstantInfo .getOrigin()).createGenerator(outline); final MEnumConstantOutline enumConstantOutline = generator .generate(enumOutline, modelInfo, enumConstantInfo); if (enumConstantOutline != null) { enumOutline.addEnumConstantOutline(enumConstantOutline); } } } return enumOutline; } }