--- /dev/null
+/*******************************************************************************\r
+ * ============LICENSE_START====================================================\r
+ * * org.onap.aaf\r
+ * * ===========================================================================\r
+ * * Copyright © 2017 AT&T Intellectual Property. All rights reserved.\r
+ * * ===========================================================================\r
+ * * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * * you may not use this file except in compliance with the License.\r
+ * * You may obtain a copy of the License at\r
+ * * \r
+ * * http://www.apache.org/licenses/LICENSE-2.0\r
+ * * \r
+ * * Unless required by applicable law or agreed to in writing, software\r
+ * * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * * See the License for the specific language governing permissions and\r
+ * * limitations under the License.\r
+ * * ============LICENSE_END====================================================\r
+ * *\r
+ * * ECOMP is a trademark and service mark of AT&T Intellectual Property.\r
+ * *\r
+ ******************************************************************************/\r
+package org.onap.aaf.authz.org;\r
+\r
+import java.lang.reflect.Constructor;\r
+import java.lang.reflect.InvocationTargetException;\r
+import java.util.Map;\r
+import java.util.concurrent.ConcurrentHashMap;\r
+\r
+import org.onap.aaf.authz.env.AuthzEnv;\r
+import org.onap.aaf.authz.env.AuthzTrans;\r
+\r
+import org.onap.aaf.inno.env.APIException;\r
+import org.onap.aaf.inno.env.Slot;\r
+\r
+/**\r
+ * Organization Plugin Mechanism\r
+ * \r
+ * Define a NameSpace for the company (i.e. com.att), and put in Properties as \r
+ * "Organization.[your NS" and assign the supporting Class. \r
+ * \r
+ * Example:\r
+ * Organization.com.att=org.onap.aaf.authz.org.att.ATT\r
+ *\r
+ *\r
+ */\r
+public class OrganizationFactory {\r
+ public static final String ORG_SLOT = "ORG_SLOT";\r
+ private static Organization defaultOrg = null;\r
+ private static Map<String,Organization> orgs = new ConcurrentHashMap<String,Organization>();\r
+ private static Slot orgSlot;\r
+ \r
+ public static void setDefaultOrg(AuthzEnv env, String orgClass) throws APIException {\r
+ orgSlot = env.slot(ORG_SLOT);\r
+ try {\r
+ @SuppressWarnings("unchecked")\r
+ Class<Organization> cls = (Class<Organization>) Class.forName(orgClass);\r
+ Constructor<Organization> cnst = cls.getConstructor(AuthzEnv.class);\r
+ defaultOrg = cnst.newInstance(env);\r
+ } catch (ClassNotFoundException | NoSuchMethodException | SecurityException | \r
+ InstantiationException | IllegalAccessException | IllegalArgumentException | \r
+ InvocationTargetException e) {\r
+ throw new APIException(e);\r
+ }\r
+ }\r
+ \r
+ public static Organization obtain(AuthzEnv env,String orgNS) throws OrganizationException {\r
+ int at = orgNS.indexOf('@');\r
+ if(at<0) {\r
+ if(!orgNS.startsWith("com.")) {\r
+ int dot1;\r
+ if((dot1 = orgNS.lastIndexOf('.'))>-1) {\r
+ int dot2;\r
+ StringBuilder sb = new StringBuilder();\r
+ if((dot2 = orgNS.lastIndexOf('.',dot1-1))>-1) {\r
+ sb.append(orgNS,dot1+1,orgNS.length());\r
+ sb.append('.');\r
+ sb.append(orgNS,dot2+1,dot1);\r
+ } else {\r
+ sb.append(orgNS,dot1+1,orgNS.length());\r
+ sb.append('.');\r
+ sb.append(orgNS,at+1,dot1);\r
+ }\r
+ orgNS=sb.toString();\r
+ }\r
+ }\r
+ } else {\r
+ // Only use two places (Enterprise) of domain\r
+ int dot;\r
+ if((dot= orgNS.lastIndexOf('.'))>-1) {\r
+ StringBuilder sb = new StringBuilder();\r
+ int dot2;\r
+ if((dot2 = orgNS.lastIndexOf('.',dot-1))>-1) {\r
+ sb.append(orgNS.substring(dot+1));\r
+ sb.append(orgNS.subSequence(dot2, dot));\r
+ orgNS = sb.toString();\r
+ } else {\r
+ sb.append(orgNS.substring(dot+1));\r
+ sb.append('.');\r
+ sb.append(orgNS.subSequence(at+1, dot));\r
+ orgNS = sb.toString();\r
+ }\r
+ }\r
+ }\r
+ Organization org = orgs.get(orgNS);\r
+ if(org == null) {\r
+ String orgClass = env.getProperty("Organization."+orgNS);\r
+ if(orgClass == null) {\r
+ env.warn().log("There is no Organization." + orgNS + " property");\r
+ } else {\r
+ for(Organization o : orgs.values()) {\r
+ if(orgClass.equals(o.getClass().getName())) {\r
+ org = o;\r
+ }\r
+ }\r
+ if(org==null) {\r
+ try {\r
+ @SuppressWarnings("unchecked")\r
+ Class<Organization> cls = (Class<Organization>) Class.forName(orgClass);\r
+ Constructor<Organization> cnst = cls.getConstructor(AuthzEnv.class);\r
+ org = cnst.newInstance(env);\r
+ } catch (ClassNotFoundException | NoSuchMethodException | SecurityException | \r
+ InstantiationException | IllegalAccessException | IllegalArgumentException | \r
+ InvocationTargetException e) {\r
+ throw new OrganizationException(e);\r
+ }\r
+ }\r
+ orgs.put(orgNS, org);\r
+ }\r
+ if(org==null && defaultOrg!=null) {\r
+ org=defaultOrg;\r
+ orgs.put(orgNS, org);\r
+ }\r
+ }\r
+ \r
+ return org;\r
+ }\r
+\r
+ public static void set(AuthzTrans trans, String orgNS) throws OrganizationException {\r
+ Organization org = obtain(trans.env(),orgNS);\r
+ trans.put(orgSlot, org);\r
+ }\r
+ \r
+ public static Organization get(AuthzTrans trans) {\r
+ return trans.get(orgSlot,defaultOrg);\r
+ }\r
+\r
+}\r