package org.jvnet.jaxb2_commons.xjc.outline.concrete;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
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.MObjectFactoryOutline;
import org.jvnet.jaxb2_commons.xjc.outline.MPackageOutline;
import org.jvnet.jaxb2_commons.xml.bind.model.MPackageInfo;
import com.sun.codemodel.JPackage;
import com.sun.tools.xjc.outline.PackageOutline;
public class CMPackageOutline implements MPackageOutline {
private final MModelOutline parent;
private final MPackageInfo target;
private final JPackage code;
private final MObjectFactoryOutline objectFactoryOutline;
private final List<MElementOutline> elementOutlines = new ArrayList<MElementOutline>();
private final List<MClassOutline> classOutlines = new ArrayList<MClassOutline>();
private final List<MEnumOutline> enumOutlines = new ArrayList<MEnumOutline>();
private final List<MElementOutline> _elementOutlines = Collections
.unmodifiableList(elementOutlines);
private final List<MClassOutline> _classOutlines = Collections
.unmodifiableList(classOutlines);
private final List<MEnumOutline> _enumOutlines = Collections
.unmodifiableList(enumOutlines);
public CMPackageOutline(MModelOutline parent, MPackageInfo target,
PackageOutline packageOutline) {
Validate.notNull(parent);
Validate.notNull(target);
this.parent = parent;
this.target = target;
this.code = packageOutline._package();
this.objectFactoryOutline = new CMObjectFactoryOutline(parent, this,
packageOutline.objectFactory());
}
public MModelOutline getParent() {
return parent;
}
public MPackageInfo getTarget() {
return target;
}
public JPackage getCode() {
return code;
}
public MObjectFactoryOutline getObjectFactoryOutline() {
return objectFactoryOutline;
}
public Collection<MClassOutline> getClassOutlines() {
return _classOutlines;
}
public void addClassOutline(MClassOutline classOutline) {
Validate.notNull(classOutline);
Validate.isTrue(classOutline.getPackageOutline() == this);
this.classOutlines.add(classOutline);
}
public Collection<MElementOutline> getElementOutlines() {
return _elementOutlines;
}
public void addElementOutline(MElementOutline elementOutline) {
Validate.notNull(elementOutline);
Validate.isTrue(elementOutline.getPackageOutline() == this);
this.elementOutlines.add(elementOutline);
}
public Collection<MEnumOutline> getEnumOutlines() {
return _enumOutlines;
}
public void addEnumOutline(MEnumOutline enumOutline) {
Validate.notNull(enumOutline);
Validate.isTrue(enumOutline.getPackageOutline() == this);
this.enumOutlines.add(enumOutline);
}
}