+ String orgClass = env.getProperty(ORGANIZATION_DOT+orgNS);
+ if (orgClass == null) {
+ env.warn().printf("There is no Organization.%s property",orgNS);
+ } else {
+ 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 {
+ @SuppressWarnings("unchecked")
+ 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) {
+ env.error().log(e, "Error on Organization Construction");
+ throw new OrganizationException(e);
+ }
+ }
+ orgs.put(orgNS, org);
+ boolean isDefault;
+ if ((isDefault="true".equalsIgnoreCase(env.getProperty(orgNS+".default")))) {
+ defaultOrg = org;
+ }
+ env.init().printf("Instantiated %s with %s%s",orgNS,orgClass,(isDefault?" as default":""));
+ }
+ if (org==null) {
+ if (defaultOrg!=null) {
+ org=defaultOrg;
+ orgs.put(orgNS, org);
+ }
+ }
+ }
+
+ return org;
+ }