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.outline.MEnumConstantOutline;
import org.jvnet.jaxb2_commons.xjc.outline.MEnumOutline;
import org.jvnet.jaxb2_commons.xjc.outline.concrete.CMEnumConstantOutline;
import org.jvnet.jaxb2_commons.xml.bind.model.MEnumConstantInfo;
import org.jvnet.jaxb2_commons.xml.bind.model.MModelInfo;
import com.sun.tools.xjc.model.CEnumConstant;
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.EnumConstantOutline;
import com.sun.tools.xjc.outline.EnumOutline;
import com.sun.tools.xjc.outline.Outline;
public class CMEnumConstantOutlineGenerator implements
MEnumConstantOutlineGenerator {
private final Outline outline;
private final CEnumConstant enumConstant;
public CMEnumConstantOutlineGenerator(Outline outline,
CEnumConstant enumConstant) {
Validate.notNull(outline);
Validate.notNull(enumConstant);
this.outline = outline;
this.enumConstant = enumConstant;
}
public MEnumConstantOutline generate(MEnumOutline parent,
MModelInfo<NType, NClass> modelInfo,
MEnumConstantInfo<NType, NClass> enumConstantInfo) {
final CEnumLeafInfo eli = enumConstant.getEnclosingClass();
final EnumOutline enumOutline = outline.getEnum(eli);
for (EnumConstantOutline enumConstantOutline : enumOutline.constants) {
if (enumConstantOutline.target == enumConstant) {
return new CMEnumConstantOutline(parent, enumConstantInfo,
enumConstantOutline.constRef);
}
}
return null;
}
}