All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.wildfly.swarm.config.runtime.invocation.Addressing Maven / Gradle / Ivy

There is a newer version: 0.4.3
Show newest version
package org.wildfly.swarm.config.runtime.invocation;

import org.jboss.jandex.AnnotationInstance;
import org.jboss.jandex.ClassInfo;
import org.jboss.jandex.DotName;
import org.jboss.jandex.Index;
import org.wildfly.swarm.config.runtime.Address;
import org.wildfly.swarm.config.runtime.Addresses;
import org.wildfly.swarm.config.runtime.model.AddressTemplate;

/**
 * @author Heiko Braun
 * @since 29/10/15
 */
public class Addressing {
    public static AddressTemplate of(Class entity) {
        Index index = IndexFactory.createIndex(entity);
        ClassInfo clazz = index.getClassByName(DotName.createSimple(entity.getCanonicalName()));

        AddressTemplate addr = null;

        for (AnnotationInstance annotation : clazz.classAnnotations()) {
            if (annotation.name().equals(IndexFactory.ADDRESS_META)) {
                Address meta = entity.getAnnotation(Address.class);
                addr = AddressTemplate.of(meta.value());
            }
            else if (annotation.name().equals(IndexFactory.ADDRESSES_META)) {
                Addresses meta = entity.getAnnotation(Addresses.class);
                StringBuffer sb = new StringBuffer("\n");
                for (String s : meta.value()) {
                    sb.append(s).append("\n");
                }
                throw new RuntimeException("Ambiguous resource reference on class "+entity +": "+ sb.toString());
            }

        }

        if(null==addr)
            throw new RuntimeException("Missing resource reference on class "+entity);

        return addr;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy