AT&T 2.0.19 Code drop, stage 5
[aaf/authz.git] / authz-service / src / main / java / org / onap / aaf / authz / service / mapper / Mapper_2_0.java
diff --git a/authz-service/src/main/java/org/onap/aaf/authz/service/mapper/Mapper_2_0.java b/authz-service/src/main/java/org/onap/aaf/authz/service/mapper/Mapper_2_0.java
deleted file mode 100644 (file)
index 180e16b..0000000
+++ /dev/null
@@ -1,791 +0,0 @@
-/*******************************************************************************\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.service.mapper;\r
-\r
-import java.nio.ByteBuffer;\r
-import java.util.ArrayList;\r
-import java.util.Collection;\r
-import java.util.Collections;\r
-import java.util.Comparator;\r
-import java.util.Date;\r
-import java.util.GregorianCalendar;\r
-import java.util.List;\r
-import java.util.UUID;\r
-\r
-import javax.xml.datatype.XMLGregorianCalendar;\r
-\r
-import org.onap.aaf.authz.env.AuthzTrans;\r
-import org.onap.aaf.authz.layer.Result;\r
-import org.onap.aaf.authz.org.Organization;\r
-import org.onap.aaf.authz.org.Organization.Expiration;\r
-import org.onap.aaf.authz.service.MayChange;\r
-import org.onap.aaf.cssa.rserv.Pair;\r
-import org.onap.aaf.dao.Bytification;\r
-import org.onap.aaf.dao.aaf.cass.ApprovalDAO;\r
-import org.onap.aaf.dao.aaf.cass.CertDAO;\r
-import org.onap.aaf.dao.aaf.cass.CredDAO;\r
-import org.onap.aaf.dao.aaf.cass.DelegateDAO;\r
-import org.onap.aaf.dao.aaf.cass.FutureDAO;\r
-import org.onap.aaf.dao.aaf.cass.HistoryDAO;\r
-import org.onap.aaf.dao.aaf.cass.Namespace;\r
-import org.onap.aaf.dao.aaf.cass.NsSplit;\r
-import org.onap.aaf.dao.aaf.cass.NsType;\r
-import org.onap.aaf.dao.aaf.cass.PermDAO;\r
-import org.onap.aaf.dao.aaf.cass.RoleDAO;\r
-import org.onap.aaf.dao.aaf.cass.Status;\r
-import org.onap.aaf.dao.aaf.cass.UserRoleDAO;\r
-import org.onap.aaf.dao.aaf.cass.DelegateDAO.Data;\r
-import org.onap.aaf.dao.aaf.hl.Question;\r
-import org.onap.aaf.dao.aaf.hl.Question.Access;\r
-\r
-import org.onap.aaf.cadi.aaf.marshal.CertsMarshal;\r
-import org.onap.aaf.cadi.util.Vars;\r
-import org.onap.aaf.inno.env.Env;\r
-import org.onap.aaf.inno.env.TimeTaken;\r
-import org.onap.aaf.inno.env.util.Chrono;\r
-import org.onap.aaf.rosetta.Marshal;\r
-\r
-import aaf.v2_0.Api;\r
-import aaf.v2_0.Approval;\r
-import aaf.v2_0.Approvals;\r
-import aaf.v2_0.Certs;\r
-import aaf.v2_0.Certs.Cert;\r
-import aaf.v2_0.CredRequest;\r
-import aaf.v2_0.Delg;\r
-import aaf.v2_0.DelgRequest;\r
-import aaf.v2_0.Delgs;\r
-import aaf.v2_0.Error;\r
-import aaf.v2_0.History;\r
-import aaf.v2_0.History.Item;\r
-import aaf.v2_0.Keys;\r
-import aaf.v2_0.NsRequest;\r
-import aaf.v2_0.Nss;\r
-import aaf.v2_0.Nss.Ns;\r
-import aaf.v2_0.Nss.Ns.Attrib;\r
-import aaf.v2_0.Perm;\r
-import aaf.v2_0.PermKey;\r
-import aaf.v2_0.PermRequest;\r
-import aaf.v2_0.Perms;\r
-import aaf.v2_0.Pkey;\r
-import aaf.v2_0.Request;\r
-import aaf.v2_0.Role;\r
-import aaf.v2_0.RolePermRequest;\r
-import aaf.v2_0.RoleRequest;\r
-import aaf.v2_0.Roles;\r
-import aaf.v2_0.UserRole;\r
-import aaf.v2_0.UserRoleRequest;\r
-import aaf.v2_0.UserRoles;\r
-import aaf.v2_0.Users;\r
-import aaf.v2_0.Users.User;\r
-\r
-public class Mapper_2_0 implements Mapper<Nss, Perms, Pkey, Roles, Users, UserRoles, Delgs, Certs, Keys, Request, History, Error, Approvals> {\r
-       private Question q;\r
-\r
-       public Mapper_2_0(Question q) {\r
-               this.q = q;\r
-       }\r
-       \r
-       /* (non-Javadoc)\r
-        * @see org.onap.aaf.authz.service.mapper.Mapper#ns(java.lang.Object, org.onap.aaf.authz.service.mapper.Mapper.Holder)\r
-        */\r
-       @Override\r
-       public Result<Namespace> ns(AuthzTrans trans, Request base) {\r
-               NsRequest from = (NsRequest)base;\r
-               Namespace namespace = new Namespace();\r
-               namespace.name = from.getName();\r
-               namespace.admin = from.getAdmin();\r
-               namespace.owner = from.getResponsible();\r
-               namespace.description = from.getDescription();\r
-               trans.checkpoint(namespace.name, Env.ALWAYS);\r
-               \r
-               NsType nt = NsType.fromString(from.getType());\r
-               if(nt.equals(NsType.UNKNOWN)) {\r
-                       String ns = namespace.name;\r
-                       int count = 0;\r
-                       for(int i=ns.indexOf('.');\r
-                                       i>=0;\r
-                                       i=ns.indexOf('.',i+1)) {\r
-                               ++count;\r
-                       }\r
-                       switch(count) {\r
-                               case 0: nt = NsType.ROOT;break;\r
-                               case 1: nt = NsType.COMPANY;break;\r
-                               default: nt = NsType.APP;\r
-                       }\r
-               }\r
-               namespace.type = nt.type;\r
-               \r
-               return Result.ok(namespace);\r
-       }\r
-\r
-       @Override\r
-       public Result<Nss> nss(AuthzTrans trans, Namespace from, Nss to) {\r
-               List<Ns> nss = to.getNs();\r
-               Ns ns = new Ns();\r
-               ns.setName(from.name);\r
-               if(from.admin!=null)ns.getAdmin().addAll(from.admin);\r
-               if(from.owner!=null)ns.getResponsible().addAll(from.owner);\r
-               if(from.attrib!=null) {\r
-                       for(Pair<String,String> attrib : from.attrib) {\r
-                               Attrib toAttrib = new Attrib();\r
-                               toAttrib.setKey(attrib.x);\r
-                               toAttrib.setValue(attrib.y);\r
-                               ns.getAttrib().add(toAttrib);\r
-                       }\r
-               }\r
-\r
-               ns.setDescription(from.description);\r
-               nss.add(ns);\r
-               return Result.ok(to);\r
-       }\r
-\r
-       /**\r
-        * Note: Prevalidate if NS given is allowed to be seen before calling\r
-        */\r
-       @Override\r
-       public Result<Nss> nss(AuthzTrans trans, Collection<Namespace> from, Nss to) {\r
-               List<Ns> nss = to.getNs();\r
-               for(Namespace nd : from) {\r
-                       Ns ns = new Ns();\r
-                       ns.setName(nd.name);\r
-                       ns.getAdmin().addAll(nd.admin);\r
-                       ns.getResponsible().addAll(nd.owner);\r
-                       ns.setDescription(nd.description);\r
-                       if(nd.attrib!=null) {\r
-                               for(Pair<String,String> attrib : nd.attrib) {\r
-                                       Attrib toAttrib = new Attrib();\r
-                                       toAttrib.setKey(attrib.x);\r
-                                       toAttrib.setValue(attrib.y);\r
-                                       ns.getAttrib().add(toAttrib);\r
-                               }\r
-                       }\r
-\r
-                       nss.add(ns);\r
-               }\r
-               return Result.ok(to);\r
-       }\r
-\r
-       @Override\r
-       public Result<Perms> perms(AuthzTrans trans, List<PermDAO.Data> from, Perms to, boolean filter) {\r
-               List<Perm> perms = to.getPerm();\r
-               TimeTaken tt = trans.start("Filter Perms before return", Env.SUB);\r
-               try {\r
-                       if(from!=null) {\r
-                               for (PermDAO.Data data : from) {\r
-                                       if(!filter || q.mayUser(trans, trans.user(), data, Access.read).isOK()) {\r
-                                               Perm perm = new Perm();\r
-                                               perm.setType(data.fullType());\r
-                                               perm.setInstance(data.instance);\r
-                                               perm.setAction(data.action);\r
-                                               for(String role : data.roles(false)) {\r
-                                                       perm.getRoles().add(role);\r
-                                               }\r
-                                               perm.setDescription(data.description);\r
-                                               perms.add(perm);\r
-                                       }\r
-                               }\r
-                       }\r
-               } finally {\r
-                       tt.done();\r
-               }\r
-                \r
-               tt = trans.start("Sort Perms", Env.SUB);\r
-               try {\r
-                       Collections.sort(perms, new Comparator<Perm>() {\r
-                               @Override\r
-                               public int compare(Perm perm1, Perm perm2) {\r
-                                       int typeCompare = perm1.getType().compareToIgnoreCase(perm2.getType());\r
-                                       if (typeCompare == 0) {\r
-                                               int instanceCompare = perm1.getInstance().compareToIgnoreCase(perm2.getInstance());\r
-                                               if (instanceCompare == 0) {\r
-                                                       return perm1.getAction().compareToIgnoreCase(perm2.getAction());\r
-                                               }\r
-                                               return instanceCompare;\r
-                                       }\r
-                                       return typeCompare;\r
-                               }       \r
-                       });\r
-               } finally {\r
-                       tt.done();\r
-               }\r
-               return Result.ok(to);\r
-       }\r
-       \r
-       @Override\r
-       public Result<List<PermDAO.Data>> perms(AuthzTrans trans, Perms perms) {\r
-               List<PermDAO.Data> lpd = new ArrayList<PermDAO.Data>();\r
-               for (Perm p : perms.getPerm()) {\r
-                       Result<NsSplit> nss = q.deriveNsSplit(trans, p.getType());\r
-                       PermDAO.Data pd = new PermDAO.Data();\r
-                       if(nss.isOK()) { \r
-                               pd.ns=nss.value.ns;\r
-                               pd.type = nss.value.name;\r
-                               pd.instance = p.getInstance();\r
-                               pd.action = p.getAction();\r
-                               for (String role : p.getRoles())\r
-                                       pd.roles(true).add(role);\r
-                               lpd.add(pd);\r
-                       } else {\r
-                               return Result.err(nss);\r
-                       }\r
-               }\r
-               return Result.ok(lpd);\r
-       }\r
-\r
-       @Override\r
-       public Result<PermDAO.Data> permkey(AuthzTrans trans, Pkey from) {\r
-               return q.permFrom(trans, from.getType(),from.getInstance(),from.getAction());\r
-       }\r
-       \r
-       @Override\r
-       public Result<PermDAO.Data> permFromRPRequest(AuthzTrans trans, Request req) {\r
-               RolePermRequest from = (RolePermRequest)req;\r
-               Pkey perm = from.getPerm();\r
-               if(perm==null)return Result.err(Status.ERR_NotFound, "Permission not found");\r
-               Result<NsSplit> nss = q.deriveNsSplit(trans, perm.getType());\r
-               PermDAO.Data pd = new PermDAO.Data();\r
-               if(nss.isOK()) { \r
-                       pd.ns=nss.value.ns;\r
-                       pd.type = nss.value.name;\r
-                       pd.instance = from.getPerm().getInstance();\r
-                       pd.action = from.getPerm().getAction();\r
-                       trans.checkpoint(pd.fullPerm(), Env.ALWAYS);\r
-                       \r
-                       String[] roles = {};\r
-                       \r
-                       if (from.getRole() != null) {\r
-                               roles = from.getRole().split(",");\r
-                       }\r
-                       for (String role : roles) { \r
-                               pd.roles(true).add(role);\r
-                       }\r
-                       return Result.ok(pd);\r
-               } else {\r
-                       return Result.err(nss);\r
-               }\r
-       }\r
-       \r
-       @Override\r
-       public Result<RoleDAO.Data> roleFromRPRequest(AuthzTrans trans, Request req) {\r
-               RolePermRequest from = (RolePermRequest)req;\r
-               Result<NsSplit> nss = q.deriveNsSplit(trans, from.getRole());\r
-               RoleDAO.Data rd = new RoleDAO.Data();\r
-               if(nss.isOK()) { \r
-                       rd.ns = nss.value.ns;\r
-                       rd.name = nss.value.name;\r
-                       trans.checkpoint(rd.fullName(), Env.ALWAYS);\r
-                       return Result.ok(rd);\r
-               } else {\r
-                       return Result.err(nss);\r
-               }\r
-       }\r
-       \r
-       @Override\r
-       public Result<PermDAO.Data> perm(AuthzTrans trans, Request req) {\r
-               PermRequest from = (PermRequest)req;\r
-               Result<NsSplit> nss = q.deriveNsSplit(trans, from.getType());\r
-               PermDAO.Data pd = new PermDAO.Data();\r
-               if(nss.isOK()) { \r
-                       pd.ns=nss.value.ns;\r
-                       pd.type = nss.value.name;\r
-                       pd.instance = from.getInstance();\r
-                       pd.action = from.getAction();\r
-                       pd.description = from.getDescription();\r
-                       trans.checkpoint(pd.fullPerm(), Env.ALWAYS);\r
-                       return Result.ok(pd);\r
-               } else {\r
-                       return Result.err(nss);\r
-               }\r
-       }\r
-\r
-       @Override\r
-       public Result<RoleDAO.Data> role(AuthzTrans trans, Request base) {\r
-               RoleRequest from = (RoleRequest)base;\r
-               Result<NsSplit> nss = q.deriveNsSplit(trans, from.getName());\r
-               if(nss.isOK()) {\r
-                       RoleDAO.Data to = new RoleDAO.Data();\r
-                       to.ns = nss.value.ns;\r
-                       to.name = nss.value.name;\r
-                       to.description = from.getDescription();\r
-                       trans.checkpoint(to.fullName(), Env.ALWAYS);\r
-\r
-                       return Result.ok(to);\r
-               } else {\r
-                       return Result.err(nss);\r
-               }\r
-       }\r
-\r
-       /* (non-Javadoc)\r
-        * @see org.onap.aaf.authz.service.mapper.Mapper#roles(java.util.List)\r
-        */\r
-       @Override\r
-       public Result<Roles> roles(AuthzTrans trans, List<RoleDAO.Data> from, Roles to, boolean filter) {\r
-               for(RoleDAO.Data frole : from) {\r
-                       // Only Add Data to view if User is allowed to see this Role \r
-                       //if(!filter || q.mayUserViewRole(trans, trans.user(), frole).isOK()) {\r
-                       if(!filter || q.mayUser(trans, trans.user(), frole,Access.read).isOK()) {\r
-                               Role role = new Role();\r
-                               role.setName(frole.ns + '.' + frole.name);\r
-                               role.setDescription(frole.description);\r
-                               for(String p : frole.perms(false)) { // can see any Perms in the Role he has permission for\r
-                                       Result<String[]> rpa = PermDAO.Data.decodeToArray(trans,q,p);\r
-                                       if(rpa.notOK()) return Result.err(rpa);\r
-                                       \r
-                                       String[] pa = rpa.value;\r
-                                       Pkey pKey = new Pkey();\r
-                                       pKey.setType(pa[0]+'.'+pa[1]);\r
-                                       pKey.setInstance(pa[2]);\r
-                                       pKey.setAction(pa[3]);\r
-                                       role.getPerms().add(pKey);\r
-                               }\r
-                               to.getRole().add(role);\r
-                       }\r
-               }\r
-               return Result.ok(to);\r
-       }\r
-\r
-       /*\r
-        * (non-Javadoc)\r
-        * @see org.onap.aaf.authz.service.mapper.Mapper#users(java.util.Collection, java.lang.Object)\r
-        * \r
-        * Note: Prevalidate all data for permission to view\r
-        */\r
-       @Override\r
-       public Result<Users> users(AuthzTrans trans, Collection<UserRoleDAO.Data> from, Users to) {\r
-               List<User> cu = to.getUser();\r
-               for(UserRoleDAO.Data urd : from) {\r
-                       User user = new User();\r
-                       user.setId(urd.user);\r
-                       user.setExpires(Chrono.timeStamp(urd.expires));\r
-                       cu.add(user);\r
-               }\r
-               return Result.ok(to);\r
-       }\r
-\r
-       /*\r
-        * (non-Javadoc)\r
-        * @see org.onap.aaf.authz.service.mapper.Mapper#users(java.util.Collection, java.lang.Object)\r
-        * \r
-        * Note: Prevalidate all data for permission to view\r
-        */\r
-       @Override\r
-       public Result<UserRoles> userRoles(AuthzTrans trans, Collection<UserRoleDAO.Data> from, UserRoles to) {\r
-               List<UserRole> cu = to.getUserRole();\r
-               for(UserRoleDAO.Data urd : from) {\r
-                       UserRole ur = new UserRole();\r
-                       ur.setUser(urd.user);\r
-                       ur.setRole(urd.role);\r
-                       ur.setExpires(Chrono.timeStamp(urd.expires));\r
-                       cu.add(ur);\r
-               }\r
-               return Result.ok(to);\r
-       }\r
-\r
-       /**\r
-        * \r
-        * @param base\r
-        * @param start\r
-        * @return\r
-        */\r
-       @Override\r
-       public Result<UserRoleDAO.Data> userRole(AuthzTrans trans, Request base) {\r
-               try {\r
-                       UserRoleRequest from = (UserRoleRequest)base;\r
-\r
-                       // Setup UserRoleData, either for immediate placement, or for future\r
-                       UserRoleDAO.Data to = new UserRoleDAO.Data();\r
-                       if (from.getUser() != null) {\r
-                               String user = from.getUser();\r
-                               to.user = user;\r
-                       }\r
-                       if (from.getRole() != null) {\r
-                               to.role(trans,q,from.getRole());\r
-                       }\r
-                       to.expires = getExpires(trans.org(),Expiration.UserInRole,base,from.getUser());\r
-                       trans.checkpoint(to.toString(), Env.ALWAYS);\r
-\r
-                       return Result.ok(to);\r
-               } catch (Exception t) {\r
-                       return Result.err(Status.ERR_BadData,t.getMessage());\r
-               }\r
-       }\r
-\r
-       @Override\r
-       public Result<CredDAO.Data> cred(AuthzTrans trans, Request base, boolean requiresPass) {\r
-               CredRequest from = (CredRequest)base;\r
-               CredDAO.Data to = new CredDAO.Data();\r
-               to.id=from.getId();\r
-               to.ns = Question.domain2ns(to.id);\r
-               String passwd = from.getPassword();\r
-               if(requiresPass) {\r
-                       String ok = trans.org().isValidPassword(to.id,passwd);\r
-                       if(ok.length()>0) {\r
-                               return Result.err(Status.ERR_BadData,ok);\r
-                       }\r
-\r
-               } else {\r
-                       to.type=0;\r
-               }\r
-               if(passwd != null) {\r
-                       to.cred = ByteBuffer.wrap(passwd.getBytes());\r
-                       to.type = CredDAO.RAW; \r
-               } else {\r
-                       to.type = 0;\r
-               }\r
-               \r
-               // Note: Ensure requested EndDate created will match Organization Password Rules\r
-               //  P.S. Do not apply TempPassword rule here. Do that when you know you are doing a Create/Reset (see Service)\r
-               to.expires = getExpires(trans.org(),Expiration.Password,base,from.getId());\r
-               trans.checkpoint(to.id, Env.ALWAYS);\r
-\r
-               return Result.ok(to);\r
-       }\r
-       \r
-       @Override\r
-       public Result<Users> cred(List<CredDAO.Data> from, Users to) {\r
-               List<User> cu = to.getUser();\r
-               for(CredDAO.Data cred : from) {\r
-                       User user = new User();\r
-                       user.setId(cred.id);\r
-                       user.setExpires(Chrono.timeStamp(cred.expires));\r
-                       user.setType(cred.type);\r
-                       cu.add(user);\r
-               }\r
-               return Result.ok(to);\r
-       }\r
-       \r
-@Override\r
-       public Result<Certs> cert(List<CertDAO.Data> from, Certs to) {\r
-               List<Cert> lc = to.getCert();\r
-               for(CertDAO.Data fcred : from) {\r
-                       Cert cert = new Cert();\r
-                       cert.setId(fcred.id);\r
-                       cert.setX500(fcred.x500);\r
-                       /**TODO - change Interface \r
-                        * @deprecated */\r
-                       cert.setFingerprint(fcred.serial.toByteArray());\r
-                       lc.add(cert);\r
-               }\r
-               return Result.ok(to);\r
-       }\r
-\r
-       /**\r
-        * Analyze whether Requests should be acted on now, or in the future, based on Start Date, and whether the requester\r
-        * is allowed to change this value directly\r
-        * \r
-        * Returning Result.OK means it should be done in the future.\r
-        * Returning Result.ACC_Now means to act on table change now.\r
-        */\r
-       @Override\r
-       public Result<FutureDAO.Data> future(AuthzTrans trans, String table, Request from, \r
-                               Bytification content, boolean enableApproval,  Memo memo, MayChange mc) {\r
-               Result<?> rMayChange = mc.mayChange();\r
-               boolean needsAppr;\r
-               if(needsAppr = rMayChange.notOK()) {\r
-                       if(enableApproval) {\r
-                               if(!trans.futureRequested()) {\r
-                                       return Result.err(rMayChange);\r
-                               }\r
-                       } else {\r
-                               return Result.err(rMayChange);\r
-                       }\r
-               }\r
-               GregorianCalendar now = new GregorianCalendar(); \r
-               GregorianCalendar start = from.getStart()==null?now:from.getStart().toGregorianCalendar();\r
-               \r
-               GregorianCalendar expires = trans.org().expiration(start, Expiration.Future);\r
-               XMLGregorianCalendar xgc;\r
-               if((xgc=from.getEnd())!=null) {\r
-                       GregorianCalendar fgc = xgc.toGregorianCalendar();\r
-                       expires = expires.before(fgc)?expires:fgc; // Min of desired expiration, and Org expiration\r
-               }\r
-               \r
-               //TODO needs two answers from this.  What's the NSS, and may Change.\r
-               FutureDAO.Data fto;\r
-               if(start.after(now) || needsAppr ) {\r
-                       //String user = trans.user();\r
-                       fto = new FutureDAO.Data();\r
-                       fto.target=table;\r
-                       fto.memo = memo.get();\r
-                       fto.start = start.getTime();\r
-                       fto.expires = expires.getTime();\r
-                       if(needsAppr) { // Need to add Approvers...\r
-                               /*\r
-                               Result<Data> rslt = mc.getNsd();\r
-                               if(rslt.notOKorIsEmpty())return Result.err(rslt);\r
-                               appr.addAll(mc.getNsd().value.responsible);\r
-                               try {\r
-                                       //Note from 2013 Is this getting Approvers for user only?  What about Delegates?\r
-                                       // 3/25/2014.  Approvers are set by Corporate policy.  We don't have to worry here about what that means.\r
-                                       // It is important to get Delegates, if necessary, at notification time\r
-                                       // If we add delegates now, it will get all confused as to who is actually responsible.\r
-                                       for(Organization.User ou : org.getApprovers(trans, user)) {\r
-                                               appr.add(ou.email);\r
-                                       }\r
-                               } catch (Exception e) {\r
-                                       return Result.err(Status.ERR_Policy,org.getName() + " did not respond with Approvers: " + e.getLocalizedMessage());\r
-                               }\r
-                               */\r
-                       }\r
-                       try {\r
-                               fto.construct = content.bytify();\r
-                       } catch (Exception e) {\r
-                               return Result.err(Status.ERR_BadData,"Data cannot be saved for Future.");\r
-                       }\r
-               } else {\r
-                       return Result.err(Status.ACC_Now, "Make Data changes now.");\r
-               }\r
-               return Result.ok(fto);\r
-       }\r
-\r
-\r
-       /* (non-Javadoc)\r
-        * @see org.onap.aaf.authz.service.mapper.Mapper#history(java.util.List)\r
-        */\r
-       @Override\r
-       public Result<History> history(AuthzTrans trans, List<HistoryDAO.Data> history, final int sort) {\r
-               History hist = new History();\r
-               List<Item> items = hist.getItem();\r
-               for(HistoryDAO.Data data : history) {\r
-                       History.Item item = new History.Item();\r
-                       item.setYYYYMM(Integer.toString(data.yr_mon));\r
-                       Date date = Chrono.uuidToDate(data.id);\r
-                       item.setTimestamp(Chrono.timeStamp(date));\r
-                       item.setAction(data.action);\r
-                       item.setMemo(data.memo);\r
-                       item.setSubject(data.subject);\r
-                       item.setTarget(data.target);\r
-                       item.setUser(data.user);\r
-                       items.add(item);\r
-               }\r
-               \r
-               if(sort != 0) {\r
-                       TimeTaken tt = trans.start("Sort ", Env.SUB);\r
-                       try {\r
-                               java.util.Collections.sort(items, new Comparator<Item>() {\r
-                                       @Override\r
-                                       public int compare(Item o1, Item o2) {\r
-                                               return sort*(o1.getTimestamp().compare(o2.getTimestamp()));\r
-                                       }\r
-                               });\r
-                       } finally {\r
-                               tt.done();\r
-                       }\r
-               }\r
-               return Result.ok(hist);\r
-       }\r
-\r
-       @Override\r
-       public Error errorFromMessage(StringBuilder holder, String msgID, String text, String... var) {\r
-               Error err = new Error();\r
-               err.setMessageId(msgID);\r
-               // AT&T Restful Error Format requires numbers "%" placements\r
-               err.setText(Vars.convert(holder, text, var));\r
-               for(String s : var) {\r
-                       err.getVariables().add(s);\r
-               }\r
-               return err;\r
-       }\r
-       \r
-       @Override\r
-       public Class<?> getClass(API api) {\r
-               switch(api) {\r
-                       case NSS:  return Nss.class;\r
-                       case NS_REQ: return NsRequest.class;\r
-                       case PERMS: return Perms.class;\r
-                       case PERM_KEY: return PermKey.class;\r
-                       case ROLES: return Roles.class;\r
-                       case ROLE: return Role.class;\r
-                       case USERS: return Users.class;\r
-                       case DELGS: return Delgs.class;\r
-                       case CERTS: return Certs.class;\r
-                       case DELG_REQ: return DelgRequest.class;\r
-                       case PERM_REQ: return PermRequest.class;\r
-                       case ROLE_REQ:  return RoleRequest.class;\r
-                       case CRED_REQ:  return CredRequest.class;\r
-                       case USER_ROLE_REQ:  return UserRoleRequest.class;\r
-                       case USER_ROLES: return UserRoles.class;\r
-                       case ROLE_PERM_REQ:  return RolePermRequest.class;\r
-                       case APPROVALS: return Approvals.class;\r
-                       case KEYS: return Keys.class;\r
-                       case HISTORY: return History.class;\r
-//                     case MODEL: return Model.class;\r
-                       case ERROR: return Error.class;\r
-                       case API: return Api.class;\r
-                       case VOID: return Void.class;\r
-               }\r
-               return null;\r
-       }\r
-\r
-       @SuppressWarnings("unchecked")\r
-       @Override\r
-       public <A> A newInstance(API api) {\r
-               switch(api) {\r
-                       case NS_REQ: return (A) new NsRequest();\r
-                       case NSS: return (A) new Nss();\r
-                       case PERMS: return (A)new Perms();\r
-                       case PERM_KEY: return (A)new PermKey();\r
-                       case ROLES: return (A)new Roles();\r
-                       case ROLE: return (A)new Role();\r
-                       case USERS: return (A)new Users();\r
-                       case DELGS: return (A)new Delgs();\r
-                       case CERTS: return (A)new Certs();\r
-                       case PERM_REQ: return (A)new PermRequest();\r
-                       case CRED_REQ: return (A)new CredRequest();\r
-                       case ROLE_REQ:  return (A)new RoleRequest();\r
-                       case USER_ROLE_REQ:  return (A)new UserRoleRequest();\r
-                       case USER_ROLES:  return (A)new UserRoles();\r
-                       case ROLE_PERM_REQ:  return (A)new RolePermRequest();\r
-                       case HISTORY: return (A)new History();\r
-                       case KEYS: return (A)new Keys();\r
-                       //case MODEL: return (A)new Model();\r
-                       case ERROR: return (A)new Error();\r
-                       case API: return (A)new Api();\r
-                       case VOID: return null;\r
-                       \r
-                       case APPROVALS: return (A) new Approvals();\r
-                       case DELG_REQ: return (A) new DelgRequest();\r
-               }\r
-               return null;\r
-       }\r
-       \r
-       @SuppressWarnings("unchecked")\r
-       /**\r
-        * Get Typed Marshaler as they are defined\r
-        * \r
-        * @param api\r
-        * @return\r
-        */\r
-       public <A> Marshal<A> getMarshal(API api) {\r
-               switch(api) {\r
-                       case CERTS: return (Marshal<A>) new CertsMarshal();\r
-                       default:\r
-                               return null;\r
-               }\r
-       }\r
-\r
-       @Override\r
-       public Result<Approvals> approvals(List<ApprovalDAO.Data> lAppr) {\r
-               Approvals apprs = new Approvals();\r
-               List<Approval> lappr = apprs.getApprovals();\r
-               Approval a;\r
-               for(ApprovalDAO.Data appr : lAppr) {\r
-                       a = new Approval();\r
-                       a.setId(appr.id.toString());\r
-                       a.setTicket(appr.ticket.toString());\r
-                       a.setUser(appr.user);\r
-                       a.setApprover(appr.approver);\r
-                       a.setType(appr.type);\r
-                       a.setStatus(appr.status);\r
-                       a.setMemo(appr.memo);\r
-                       a.setOperation(appr.operation);\r
-                       a.setUpdated(Chrono.timeStamp(appr.updated));\r
-                       lappr.add(a);\r
-               }\r
-               return Result.ok(apprs);\r
-       }\r
-       \r
-       @Override\r
-       public Result<List<ApprovalDAO.Data>> approvals(Approvals apprs) {\r
-               List<ApprovalDAO.Data>  lappr = new ArrayList<ApprovalDAO.Data>();\r
-               for(Approval a : apprs.getApprovals()) {\r
-                       ApprovalDAO.Data ad = new ApprovalDAO.Data();\r
-                       String str = a.getId();\r
-                       if(str!=null)ad.id=UUID.fromString(str);\r
-                       str = a.getTicket();\r
-                       if(str!=null)ad.ticket=UUID.fromString(str);\r
-                       ad.user=a.getUser();\r
-                       ad.approver=a.getApprover();\r
-                       ad.type=a.getType();\r
-                       ad.status=a.getStatus();\r
-                       ad.operation=a.getOperation();\r
-                       ad.memo=a.getMemo();\r
-                       \r
-                       XMLGregorianCalendar xgc = a.getUpdated();\r
-                       if(xgc!=null)ad.updated=xgc.toGregorianCalendar().getTime();\r
-                       lappr.add(ad);\r
-               }\r
-               return Result.ok(lappr);\r
-       }\r
-\r
-       @Override\r
-       public Result<Delgs> delegate(List<DelegateDAO.Data> lDelg) {\r
-               Delgs delgs = new Delgs();\r
-               List<Delg> ldelg = delgs.getDelgs();\r
-               Delg d;\r
-               for(DelegateDAO.Data del: lDelg) {\r
-                       d = new Delg();\r
-                       d.setUser(del.user);\r
-                       d.setDelegate(del.delegate);\r
-                       if(del.expires!=null)d.setExpires(Chrono.timeStamp(del.expires));\r
-                       ldelg.add(d);\r
-               }\r
-               return Result.ok(delgs);\r
-       }\r
-\r
-       @Override\r
-       public Result<Data> delegate(AuthzTrans trans, Request base) {\r
-               try {\r
-                       DelgRequest from = (DelgRequest)base;\r
-                       DelegateDAO.Data to = new DelegateDAO.Data();\r
-                       String user = from.getUser();\r
-                       to.user = user;\r
-                       String delegate = from.getDelegate();\r
-                       to.delegate = delegate;\r
-                       to.expires = getExpires(trans.org(),Expiration.UserDelegate,base,from.getUser());\r
-                       trans.checkpoint(to.user+"=>"+to.delegate, Env.ALWAYS);\r
-\r
-                       return Result.ok(to);\r
-               } catch (Exception t) {\r
-                       return Result.err(Status.ERR_BadData,t.getMessage());\r
-               }\r
-       }\r
-\r
-       /*\r
-        * We want "Expired" dates to start at a specified time set by the Organization, and consistent wherever\r
-        * the date is created from.\r
-        */ \r
-       private Date getExpires(Organization org, Expiration exp, Request base, String id) {\r
-               XMLGregorianCalendar end = base.getEnd();\r
-               GregorianCalendar gc = end==null?new GregorianCalendar():end.toGregorianCalendar();\r
-               GregorianCalendar orggc;\r
-               orggc = org.expiration(gc,exp,id); \r
-\r
-               // We'll choose the lesser of dates to ensure Policy Compliance...\r
-       \r
-               GregorianCalendar endgc = end==null||gc.after(orggc)?orggc:gc;\r
-               // Allow the Organization to determine when official "day Start" begins, Specifically when to consider something Expired.\r
-               endgc = Chrono.firstMomentOfDay(endgc);\r
-               endgc.set(GregorianCalendar.HOUR_OF_DAY, org.startOfDay());\r
-               return endgc.getTime();\r
-       }\r
-\r
-\r
-       @Override\r
-       public Result<Keys> keys(Collection<String> from) {\r
-               Keys keys = new Keys();\r
-               keys.getKey().addAll(from);\r
-               return Result.ok(keys).emptyList(from.isEmpty());\r
-       }\r
-\r
-}\r