Collection syntax change because of Sonar
[aaf/authz.git] / auth / auth-core / src / main / java / org / onap / aaf / auth / org / OrganizationFactory.java
index 36efb5d..f950703 100644 (file)
@@ -29,6 +29,7 @@ import java.util.concurrent.ConcurrentHashMap;
 
 import org.onap.aaf.auth.env.AuthzTrans;
 import org.onap.aaf.cadi.util.FQI;
+import org.onap.aaf.cadi.util.Split;
 import org.onap.aaf.misc.env.Env;
 import org.onap.aaf.misc.env.impl.BasicEnv;
 
@@ -47,7 +48,7 @@ import org.onap.aaf.misc.env.impl.BasicEnv;
 public class OrganizationFactory {
        private static final String ORGANIZATION_DOT = "Organization.";
        private static Organization defaultOrg = null;
-       private static Map<String,Organization> orgs = new ConcurrentHashMap<String,Organization>();
+       private static Map<String,Organization> orgs = new ConcurrentHashMap<>();
        public static Organization init(BasicEnv env) throws OrganizationException {
                int idx = ORGANIZATION_DOT.length();
                Organization org,firstOrg = null;
@@ -75,14 +76,22 @@ public class OrganizationFactory {
                }
                Organization org = orgs.get(orgNS);
                if(org == null) {
+                       env.debug().printf("Attempting to instantiate Organization %s\n",orgNS);
+
                        String orgClass = env.getProperty(ORGANIZATION_DOT+orgNS);
                        if(orgClass == null) {
                                env.warn().log("There is no Organization." + orgNS + " property");
                        } else {
-                               for(Organization o : orgs.values()) {
-                                       if(orgClass.equals(o.getClass().getName())) {
-                                               org = o;
+                               try {
+                                       Class<?> orgCls = Class.forName(orgClass);
+                                       for(Organization o : orgs.values()) {
+                                               if(o.getClass().isAssignableFrom(orgCls)) {
+                                                       org = o;
+                                               }
                                        }
+                               } catch (ClassNotFoundException e1) {
+                                       env.error().log(e1, orgClass + " is not on the Classpath.");
+                                       throw new OrganizationException(e1);
                                }
                                if(org==null) {
                                        try {
@@ -90,6 +99,13 @@ public class OrganizationFactory {
                                                Class<Organization> cls = (Class<Organization>) Class.forName(orgClass);
                                                Constructor<Organization> cnst = cls.getConstructor(Env.class,String.class);
                                                org = cnst.newInstance(env,orgNS);
+                                               String other_realms = env.getProperty(orgNS+".also_supports");
+                                               if(other_realms!=null) {
+                                                       for(String r : Split.splitTrim(',', other_realms)) {
+                                                               org.addSupportedRealm(r);
+                                                       }
+                                               }
+                                               
                                        } catch (ClassNotFoundException | NoSuchMethodException | SecurityException | 
                                                        InstantiationException | IllegalAccessException | IllegalArgumentException | 
                                                        InvocationTargetException e) {
@@ -98,10 +114,11 @@ public class OrganizationFactory {
                                        }
                                }
                                orgs.put(orgNS, org);
-                               if("true".equalsIgnoreCase(env.getProperty(orgNS+".default"))) {
+                               boolean isDefault;
+                               if((isDefault="true".equalsIgnoreCase(env.getProperty(orgNS+".default")))) {
                                        defaultOrg = org;
                                }
-
+                               env.init().printf("Instantiated %s with %s%s\n",orgNS,orgClass,(isDefault?" as default":""));
                        }
                        if(org==null) {
                                if(defaultOrg!=null) {