/**
* Copyright 2004-2016 Riccardo Solmi. All rights reserved.
* This file is part of the Whole Platform.
*
* The Whole Platform is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* The Whole Platform is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with the Whole Platform. If not, see <http://www.gnu.org/licenses/>.
*/
package org.whole.lang.commons.reflect;
import java.util.EnumSet;
import java.util.List;
import java.util.Set;
import org.whole.lang.model.EnumType;
import org.whole.lang.model.EnumValue;
import org.whole.lang.model.IEntity;
import org.whole.lang.reflect.AbstractEntityDescriptor;
import org.whole.lang.reflect.CompositeKinds;
import org.whole.lang.reflect.DataKinds;
import org.whole.lang.reflect.EntityDescriptor;
import org.whole.lang.reflect.EntityDescriptorEnum;
import org.whole.lang.reflect.EntityKinds;
import org.whole.lang.reflect.EntityModifiers;
import org.whole.lang.reflect.FeatureDescriptor;
import org.whole.lang.reflect.FeatureDescriptorEnum;
import org.whole.lang.reflect.ILanguageKit;
/**
* @author Riccardo Solmi
*/
public class ResolverEntityDescriptor extends /*EnumValueImpl*/ AbstractEntityDescriptor<IEntity> implements EntityDescriptor<IEntity> {
private static final long serialVersionUID = 1L;
protected EntityDescriptor<?> baseEntityDescriptor;
protected ResolverFacade entityFacade;
public ResolverEntityDescriptor(EntityDescriptor<?> baseEntityDescriptor, ResolverFacade entityFacade) {
// super(0, "noname", "noname");
super(0, "noname", "noname", IEntity.class, EnumSet.noneOf(EntityModifiers.class));
this.baseEntityDescriptor = baseEntityDescriptor;
this.entityFacade = entityFacade;
}
protected ResolverEntityDescriptor(int ordinal, String name, String implName) {
// super(ordinal, name, implName);
super(ordinal, name, implName, IEntity.class, EnumSet.noneOf(EntityModifiers.class));
}
public ResolverFacade getEntityFacade() {
return entityFacade;
}
public EntityKinds getEntityKind() {
return getEntityFacade().wGetEntityKind();
}
public boolean has(FeatureDescriptor fd) {
return getEntityFacade().wContains(fd);
}
public int indexOf(FeatureDescriptor fd) {
for (int i=0, size=featureSize(); i<size; i++)
if (fd.equals(getEntityFeatureDescriptor(i)))
return i;
return -1;
}
public int featureSize() {
return baseEntityDescriptor.featureSize();
}
public int childFeatureSize() {
return baseEntityDescriptor.childFeatureSize();
}
public int adjacentFeatureSize() {
return baseEntityDescriptor.adjacentFeatureSize();
}
public List<FeatureDescriptor> getEntityFeatureDescriptors() {
return baseEntityDescriptor.getEntityFeatureDescriptors();
}
public boolean isExtendedLanguageSupertypeOf(EntityDescriptor<?> ed) {
return equals(ed);
}
public boolean isSubtypeOfAny() {
return baseEntityDescriptor.isSubtypeOfAny();
}
public boolean isSupertypeOfAny() {
return baseEntityDescriptor.isSupertypeOfAny();
}
public boolean isPlatformSupertypeOf(EntityDescriptor<?> ed) {
return baseEntityDescriptor.isPlatformSupertypeOf(ed);
}
public boolean isLanguageSubtypeOf(EntityDescriptor<?> ed) {
return baseEntityDescriptor.isLanguageSubtypeOf(ed);
}
public boolean isLanguageSupertypeOf(EntityDescriptor<?> ed) {
return baseEntityDescriptor.isLanguageSupertypeOf(ed);
}
public boolean isPolymorphic() {
return baseEntityDescriptor.isPolymorphic();
}
public Set<EntityDescriptor<?>> getLanguageConcreteSubtypes() {
return baseEntityDescriptor.getLanguageConcreteSubtypes();
}
public Set<EntityDescriptor<?>> getLanguageConcreteSubtypes(Set<EntityDescriptor<?>> edSet) {
return baseEntityDescriptor.getLanguageConcreteSubtypes(edSet);
}
public boolean declaredSupertypesUpto(EntityDescriptor<?> optTargetEd, Set<EntityDescriptor<?>> supertypes) {
return baseEntityDescriptor.declaredSupertypesUpto(optTargetEd, supertypes);
}
public boolean declaredSubtypesUpto(EntityDescriptor<?> optTargetEd, Set<EntityDescriptor<?>> subtypes) {
return baseEntityDescriptor.declaredSubtypesUpto(optTargetEd, subtypes);
}
public CompositeKinds getCompositeKind() {
return baseEntityDescriptor.getCompositeKind();
}
public EnumType<? extends EnumValue> getDataEnumType() {
return baseEntityDescriptor.getDataEnumType();
}
public DataKinds getDataKind() {
return baseEntityDescriptor.getDataKind();
}
public Class<?> getDataType() {
return baseEntityDescriptor.getDataType();
}
public EntityDescriptor<?> getEntityDescriptor(FeatureDescriptor fd) {
return baseEntityDescriptor.getEntityDescriptor(fd);
}
public EntityDescriptor<?> getEntityDescriptor(int index) {
return baseEntityDescriptor.getEntityDescriptor(index);
}
public EntityDescriptorEnum getEntityDescriptorEnum() {
return baseEntityDescriptor.getEntityDescriptorEnum();
}
@SuppressWarnings("unchecked")
public Class<IEntity> getEntityType() {
return (Class<IEntity>) baseEntityDescriptor.getEntityType();
}
public EnumType<?> getEnumType() {
return baseEntityDescriptor.getEnumType();
}
public FeatureDescriptor getEntityFeatureDescriptor(int index) {
return baseEntityDescriptor.getEntityFeatureDescriptor(index);
}
public FeatureDescriptorEnum getFeatureDescriptorEnum() {
return baseEntityDescriptor.getFeatureDescriptorEnum();
}
public ILanguageKit getLanguageKit() {
return baseEntityDescriptor.getLanguageKit();
}
public String getImplName() {
return baseEntityDescriptor.getImplName();
}
public String getName() {
return baseEntityDescriptor.getName();
}
public int getOrdinal() {
return baseEntityDescriptor.getOrdinal();
}
public boolean isAbstract() {
return baseEntityDescriptor.isAbstract();
}
public boolean isRelationship() {
return baseEntityDescriptor.isRelationship();
}
public boolean isToManyRelationship() {
return baseEntityDescriptor.isToManyRelationship();
}
}