diff options
2 files changed, 102 insertions, 59 deletions
| diff --git a/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/builder/AttributeBuilderRegistration.java b/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/builder/AttributeBuilderRegistration.java new file mode 100644 index 00000000..135bd789 --- /dev/null +++ b/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/builder/AttributeBuilderRegistration.java @@ -0,0 +1,88 @@ +package at.gv.egiz.eaaf.core.impl.idp.builder; + +import java.util.HashMap; +import java.util.Iterator; +import java.util.ServiceLoader; + +import at.gv.egiz.eaaf.core.api.idp.IAttributeBuilder; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +public class AttributeBuilderRegistration { + +  private static HashMap<String, IAttributeBuilder> builders; +   +  private static ServiceLoader<IAttributeBuilder> attributBuilderLoader = +      ServiceLoader.load(IAttributeBuilder.class); + +  private static void addBuilder(final IAttributeBuilder builder) { +    builders.put(builder.getName(), builder); +  } + +  static { +    builders = new HashMap<>(); + +    log.info("Loading protocol attribut-builder modules:"); +    if (attributBuilderLoader != null) { +      final Iterator<IAttributeBuilder> moduleLoaderInterator = attributBuilderLoader.iterator(); +      while (moduleLoaderInterator.hasNext()) { +        try { +          final IAttributeBuilder modul = moduleLoaderInterator.next(); +          log.info("Loading attribut-builder Modul Information: " + modul.getName()); +          addBuilder(modul); + +        } catch (final Throwable e) { +          log.error("Check configuration! " + "Some attribute-builder modul" +              + " is not a valid IAttributeBuilder", e); +        } +      } +    } + +    log.info("Loading attribute-builder modules done"); + +  } +   +  /** +   * Get a specific attribute builder. +   * +   * @param name Attribute-builder friendly name +   * +   * @return Attribute-builder with this name or null if builder does not exists +   */ +  public static IAttributeBuilder getAttributeBuilder(final String name) { +    return builders.get(name); + +  } +   +  /** +   * Check if a specific attribute-builder is available. +   *  +   * @param name Attribute-builder friendly name +   * @return <code>true</code> if the builder is registered, otherwise <code>false</code> +   */ +  public static boolean containsBuilder(final String name) { +    return builders.containsKey(name); +     +  } +   +  /** +   * Get all registered attribute-builder. +   *  +   * @return {@link Iterator} of all available builders +   */ +  public static Iterator<IAttributeBuilder> getAllRegistratedBuilder() { +    return builders.values().iterator(); +     +  } +   +  /** +   * Get the number of currently register attribute builders. +   *  +   * @return number of attribute builders +   */ +  public static int getNumberOfRegisteredBuilders() { +    return builders.size(); +     +  } +   +} diff --git a/eaaf_modules/eaaf_module_pvp2_core/src/main/java/at/gv/egiz/eaaf/modules/pvp2/impl/builder/PvpAttributeBuilder.java b/eaaf_modules/eaaf_module_pvp2_core/src/main/java/at/gv/egiz/eaaf/modules/pvp2/impl/builder/PvpAttributeBuilder.java index 92e75e17..e8c06dd6 100644 --- a/eaaf_modules/eaaf_module_pvp2_core/src/main/java/at/gv/egiz/eaaf/modules/pvp2/impl/builder/PvpAttributeBuilder.java +++ b/eaaf_modules/eaaf_module_pvp2_core/src/main/java/at/gv/egiz/eaaf/modules/pvp2/impl/builder/PvpAttributeBuilder.java @@ -21,10 +21,11 @@ package at.gv.egiz.eaaf.modules.pvp2.impl.builder;  import java.util.ArrayList;  import java.util.Collection; -import java.util.HashMap;  import java.util.Iterator;  import java.util.List; -import java.util.ServiceLoader; + +import org.opensaml.saml.saml2.core.Attribute; +import org.opensaml.saml.saml2.metadata.RequestedAttribute;  import at.gv.egiz.eaaf.core.api.idp.IAttributeBuilder;  import at.gv.egiz.eaaf.core.api.idp.IAttributeGenerator; @@ -33,64 +34,17 @@ import at.gv.egiz.eaaf.core.api.idp.ISpConfiguration;  import at.gv.egiz.eaaf.core.exceptions.AttributeBuilderException;  import at.gv.egiz.eaaf.core.exceptions.InvalidDateFormatAttributeException;  import at.gv.egiz.eaaf.core.exceptions.UnavailableAttributeException; +import at.gv.egiz.eaaf.core.impl.idp.builder.AttributeBuilderRegistration;  import at.gv.egiz.eaaf.core.impl.idp.builder.attributes.PvpMetadata;  import at.gv.egiz.eaaf.modules.pvp2.exception.InvalidDateFormatException;  import at.gv.egiz.eaaf.modules.pvp2.exception.Pvp2Exception;  import at.gv.egiz.eaaf.modules.pvp2.impl.utils.Saml2Utils; +import lombok.extern.slf4j.Slf4j; -import org.opensaml.saml.saml2.core.Attribute; -import org.opensaml.saml.saml2.metadata.RequestedAttribute; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - +@Slf4j  public class PvpAttributeBuilder { -  private static final Logger log = LoggerFactory.getLogger(PvpAttributeBuilder.class); -    private static IAttributeGenerator<Attribute> generator = new SamlAttributeGenerator(); -  private static HashMap<String, IAttributeBuilder> builders; - -  private static ServiceLoader<IAttributeBuilder> attributBuilderLoader = -      ServiceLoader.load(IAttributeBuilder.class); - -  private static void addBuilder(final IAttributeBuilder builder) { -    builders.put(builder.getName(), builder); -  } - -  static { -    builders = new HashMap<>(); - -    log.info("Loading protocol attribut-builder modules:"); -    if (attributBuilderLoader != null) { -      final Iterator<IAttributeBuilder> moduleLoaderInterator = attributBuilderLoader.iterator(); -      while (moduleLoaderInterator.hasNext()) { -        try { -          final IAttributeBuilder modul = moduleLoaderInterator.next(); -          log.info("Loading attribut-builder Modul Information: " + modul.getName()); -          addBuilder(modul); - -        } catch (final Throwable e) { -          log.error("Check configuration! " + "Some attribute-builder modul" -              + " is not a valid IAttributeBuilder", e); -        } -      } -    } - -    log.info("Loading attribute-builder modules done"); - -  } - -  /** -   * Get a specific attribute builder. -   * -   * @param name Attribute-builder friendly name -   * -   * @return Attribute-builder with this name or null if builder does not exists -   */ -  public static IAttributeBuilder getAttributeBuilder(final String name) { -    return builders.get(name); - -  }    /**     * Build an SAML2 attribute. @@ -102,8 +56,9 @@ public class PvpAttributeBuilder {    public static Attribute buildAttribute(final String name, final String value) {      log.warn("Attribute value: {} is NOT injected", value); -    if (builders.containsKey(name)) { -      return builders.get(name).buildEmpty(generator); +    if (AttributeBuilderRegistration.containsBuilder(name)) { +      return AttributeBuilderRegistration.getAttributeBuilder(name).buildEmpty(generator); +            }      return null;    } @@ -120,9 +75,9 @@ public class PvpAttributeBuilder {     */    public static Attribute buildAttribute(final String name, final ISpConfiguration oaParam,        final IAuthData authData) throws Pvp2Exception, AttributeBuilderException { -    if (builders.containsKey(name)) { +    if (AttributeBuilderRegistration.containsBuilder(name)) {        try { -        return builders.get(name).build(oaParam, authData, generator); +        return AttributeBuilderRegistration.getAttributeBuilder(name).build(oaParam, authData, generator);        } catch (final AttributeBuilderException e) {          if (e instanceof UnavailableAttributeException) {            throw e; @@ -146,8 +101,8 @@ public class PvpAttributeBuilder {     * @return SAML2 attribute     */    public static Attribute buildEmptyAttribute(final String name) { -    if (builders.containsKey(name)) { -      return builders.get(name).buildEmpty(generator); +    if (AttributeBuilderRegistration.containsBuilder(name)) { +      return AttributeBuilderRegistration.getAttributeBuilder(name).buildEmpty(generator);      }      return null;    } @@ -159,7 +114,7 @@ public class PvpAttributeBuilder {     */    public static List<Attribute> buildSupportedEmptyAttributes() {      final List<Attribute> attributes = new ArrayList<>(); -    final Iterator<IAttributeBuilder> builderIt = builders.values().iterator(); +    final Iterator<IAttributeBuilder> builderIt = AttributeBuilderRegistration.getAllRegistratedBuilder();      while (builderIt.hasNext()) {        final IAttributeBuilder builder = builderIt.next();        if (builder.getClass().isAnnotationPresent(PvpMetadata.class)) { | 
