package org.jvnet.jaxb2_commons.xjc.outline.concrete;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.IdentityHashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang3.Validate;
import org.jvnet.jaxb2_commons.xjc.outline.MClassOutline;
import org.jvnet.jaxb2_commons.xjc.outline.MElementOutline;
import org.jvnet.jaxb2_commons.xjc.outline.MEnumOutline;
import org.jvnet.jaxb2_commons.xjc.outline.MModelOutline;
import org.jvnet.jaxb2_commons.xjc.outline.MPackageOutline;
import org.jvnet.jaxb2_commons.xml.bind.model.MClassInfo;
import org.jvnet.jaxb2_commons.xml.bind.model.MElementInfo;
import org.jvnet.jaxb2_commons.xml.bind.model.MEnumLeafInfo;
import org.jvnet.jaxb2_commons.xml.bind.model.MModelInfo;
import org.jvnet.jaxb2_commons.xml.bind.model.MPackageInfo;
import com.sun.codemodel.JCodeModel;
import com.sun.tools.xjc.model.nav.NClass;
import com.sun.tools.xjc.model.nav.NType;
public class CMModelOutline implements MModelOutline {
private final MModelInfo<NType, NClass> target;
private final JCodeModel code;
private final List<MPackageOutline> packageOutlines = new ArrayList<MPackageOutline>();
private final List<MPackageOutline> _packageOutlines = Collections
.unmodifiableList(packageOutlines);
private final Map<MPackageInfo, MPackageOutline> packageOutlinesMap = new IdentityHashMap<MPackageInfo, MPackageOutline>();
private final List<MElementOutline> elementOutlines = new ArrayList<MElementOutline>();
private final List<MElementOutline> _elementOutlines = Collections
.unmodifiableList(elementOutlines);
private final Map<MElementInfo<NType, NClass>, MElementOutline> elementOutlinesMap = new IdentityHashMap<MElementInfo<NType, NClass>, MElementOutline>();
private final List<MClassOutline> classOutlines = new ArrayList<MClassOutline>();
private final List<MClassOutline> _classOutlines = Collections
.unmodifiableList(classOutlines);
private final Map<MClassInfo<NType, NClass>, MClassOutline> classOutlinesMap = new IdentityHashMap<MClassInfo<NType, NClass>, MClassOutline>();
private final List<MEnumOutline> enumOutlines = new ArrayList<MEnumOutline>();
private final List<MEnumOutline> _enumOutlines = Collections
.unmodifiableList(enumOutlines);
private final Map<MEnumLeafInfo<NType, NClass>, MEnumOutline> enumOutlinesMap = new IdentityHashMap<MEnumLeafInfo<NType, NClass>, MEnumOutline>();
public CMModelOutline(MModelInfo<NType, NClass> target, JCodeModel code) {
Validate.notNull(target);
Validate.notNull(code);
this.target = target;
this.code = code;
}
public MModelInfo<NType, NClass> getTarget() {
return target;
}
public JCodeModel getCode() {
return code;
}
public Collection<MPackageOutline> getPackageOutlines() {
return _packageOutlines;
}
public MPackageOutline getPackageOutline(MPackageInfo target) {
return packageOutlinesMap.get(target);
}
public void addPackageOutline(MPackageOutline packageOutline) {
Validate.notNull(packageOutline);
this.packageOutlines.add(packageOutline);
this.packageOutlinesMap.put(packageOutline.getTarget(), packageOutline);
}
public Collection<MClassOutline> getClassOutlines() {
return _classOutlines;
}
public MClassOutline getClassOutline(MClassInfo<NType, NClass> target) {
return classOutlinesMap.get(target);
}
public void addClassOutline(MClassOutline classOutline) {
Validate.notNull(classOutline);
this.classOutlines.add(classOutline);
this.classOutlinesMap.put(classOutline.getTarget(), classOutline);
}
public Collection<MEnumOutline> getEnumOutlines() {
return _enumOutlines;
}
public MEnumOutline getEnumOutline(MEnumLeafInfo<NType, NClass> target) {
return enumOutlinesMap.get(target);
}
public void addEnumOutline(MEnumOutline enumOutline) {
Validate.notNull(enumOutline);
this.enumOutlines.add(enumOutline);
this.enumOutlinesMap.put(enumOutline.getTarget(), enumOutline);
}
public Collection<MElementOutline> getElementOutlines() {
return _elementOutlines;
}
public MElementOutline getElementOutline(MElementInfo<NType, NClass> target) {
return elementOutlinesMap.get(target);
}
public void addElementOutline(MElementOutline elementOutline) {
Validate.notNull(elementOutline);
this.elementOutlines.add(elementOutline);
this.elementOutlinesMap.put(elementOutline.getTarget(), elementOutline);
}
}