blob: ba67f332efaf8e51498860b525aa1afdf6559c9b [file] [log] [blame]
package org.apache.karaf.boot.tools.maven.plugin.model;
import java.lang.reflect.Field;
import javax.inject.Named;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
public class BeanRef implements Comparable<BeanRef> {
public String id;
public Class<?> clazz;
/**
*
* @param clazz interface or implementation class
*/
public BeanRef(Class<?> clazz) {
this.clazz = clazz;
this.id = getBeanName(clazz);
}
public BeanRef(Class<?> type, String id) {
this.clazz = type;
this.id = id;
}
public BeanRef(Field field) {
this(field.getType(), getDestinationId(field));
}
private static String getDestinationId(Field field) {
Named named = field.getAnnotation(Named.class);
if (named != null) {
return named.value();
}
Qualifier qualifier = field.getAnnotation(Qualifier.class);
if (qualifier != null) {
return qualifier.value();
}
return null;
}
public static String getBeanName(Class<?> clazz) {
Component component = clazz.getAnnotation(Component.class);
Named named = clazz.getAnnotation(Named.class);
if (component != null && !"".equals(component.value())) {
return component.value();
} else if (named != null && !"".equals(named.value())) {
return named.value();
} else {
String name = clazz.getSimpleName();
return getBeanNameFromSimpleName(name);
}
}
private static String getBeanNameFromSimpleName(String name) {
return name.substring(0, 1).toLowerCase() + name.substring(1, name.length());
}
public boolean matches(BeanRef template) {
boolean assignable = template.clazz.isAssignableFrom(this.clazz);
return assignable && ((template.id == null) || id.equals(template.id));
}
public int compareTo(BeanRef other) {
return this.id.compareTo(other.id);
}
}