/*******************************************************************************
* Copyright (c) 2011 Martin Schnabel <mb0@mb0.org>.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
******************************************************************************/
package org.axdt.avm.access;
import java.util.List;
import org.axdt.avm.AvmEPackage;
import org.axdt.avm.model.AvmDeclaredType;
import org.axdt.avm.model.AvmMember;
import org.axdt.avm.model.AvmPackage;
import org.axdt.avm.naming.AvmQualifiedName;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
import org.eclipse.xtext.resource.EObjectDescription;
import org.eclipse.xtext.resource.IEObjectDescription;
import com.google.common.collect.Lists;
public class AvmContainerPackage extends MinimalEObjectImpl implements
AvmPackage {
protected final AvmQualifiedName qname;
protected AvmContainerPackage parent;
protected final List<IEObjectDescription> children;
protected IEObjectDescription desc;
public AvmContainerPackage(AvmQualifiedName qname, IEObjectDescription desc) {
this.qname = qname;
children = Lists.newArrayList();
addChild(desc);
}
@Override
protected EClass eStaticClass() {
return AvmEPackage.eINSTANCE.getAvmPackage();
}
public void addChild(IEObjectDescription desc) {
children.add(EObjectDescription.create(desc.getQualifiedName()
.getLastSegment(), desc.getEObjectOrProxy()));
}
public List<AvmDeclaredType> getTypes() {
List<AvmDeclaredType> result = Lists.newArrayList();
for (IEObjectDescription child : children) {
EObject object = child.getEObjectOrProxy();
if (object instanceof AvmDeclaredType) {
result.add((AvmDeclaredType) object);
}
}
return result;
}
public List<AvmMember> getMembers() {
List<AvmMember> result = Lists.newArrayList();
for (IEObjectDescription child : children) {
EObject object = child.getEObjectOrProxy();
if (object instanceof AvmMember) {
result.add((AvmMember) object);
}
}
return result;
}
public String getQualifier() {
return qname.skipLast(1).toString();
}
public AvmQualifiedName getQualifiedName() {
return qname;
}
public String getCanonicalName() {
return qname.toString();
}
public String getName() {
return qname.getFirstSegment();
}
public IEObjectDescription getDescription() {
if (desc == null)
desc = EObjectDescription.create(qname, this);
return desc;
}
public AvmContainerPackage getParent() {
return parent;
}
public void setParent(AvmContainerPackage parent) {
this.parent = parent;
}
public List<IEObjectDescription> getChildren() {
return children;
}
}