package org.xpect.model;
import java.lang.annotation.Annotation;
import java.util.Collection;
import org.apache.log4j.Logger;
import org.eclipse.emf.common.util.EList;
import org.eclipse.xtext.common.types.JvmDeclaredType;
import org.eclipse.xtext.util.Strings;
import org.xpect.Environment;
import org.xpect.XjmContribution;
import org.xpect.XpectRequiredEnvironment;
import org.xpect.util.JvmAnnotationUtil;
import com.google.common.collect.Lists;
public class XjmContributionImplCustom extends XjmContributionImpl {
private static final Logger LOG = Logger.getLogger(XjmContributionImplCustom.class);
public void initialize(JvmDeclaredType type, Collection<? extends Annotation> roles) {
super.setDeactivationReason(null);
super.setJvmClass(type);
EList<Annotation> newRoles = super.getRoles();
newRoles.clear();
newRoles.addAll(roles);
EList<Environment> newEnvironments = getEnvironments();
newEnvironments.clear();
XpectRequiredEnvironment xpectEnvironment = JvmAnnotationUtil.getJavaAnnotation(getJvmClass(), XpectRequiredEnvironment.class);
if (xpectEnvironment != null)
newEnvironments.addAll(Lists.newArrayList(xpectEnvironment.value()));
else
newEnvironments.addAll(Lists.newArrayList(Environment.values()));
}
@Override
public boolean isActive() {
JvmDeclaredType cls = getJvmClass();
return cls != null && !cls.eIsProxy() && Strings.isEmpty(getDeactivationReason());
}
@Override
public <T> T newInstance(Class<T> expectedType) {
Class<?> clazz = getJavaClass();
if (clazz == null || !expectedType.isAssignableFrom(clazz))
return null;
try {
T result = expectedType.cast(clazz.newInstance());
return result;
} catch (InstantiationException e) {
LOG.error(e.getMessage(), e);
} catch (IllegalAccessException e) {
LOG.error(e.getMessage(), e);
}
return null;
}
@Override
public void setJvmClass(JvmDeclaredType newJvmClass) {
throw new UnsupportedOperationException(); // use initialize()
}
@Override
public void setReplacedBy(XjmContribution newReplacedBy) {
super.setReplacedBy(newReplacedBy);
setDeactivationReason("ReplacedBy: " + newReplacedBy.getJvmClass().getQualifiedName());
}
}