Update Batch from Testing
[aaf/authz.git] / auth / auth-batch / src / main / java / org / onap / aaf / auth / batch / helpers / LastNotified.java
index 22231f3..e108ec8 100644 (file)
@@ -28,7 +28,7 @@ import java.util.Map;
 import java.util.Set;
 import java.util.TreeMap;
 
-import org.onap.aaf.auth.batch.helpers.Notification.TYPE;
+import org.onap.aaf.auth.dao.cass.UserRoleDAO;
 
 import com.datastax.driver.core.ResultSet;
 import com.datastax.driver.core.Row;
@@ -37,6 +37,7 @@ import com.datastax.driver.core.Session;
 public class LastNotified {
        private Map<String,Date> lastNotified = new TreeMap<>();
        private Session session;
+       private static final Date never = new Date(0);
        
        public LastNotified(Session session) {
                this.session = session;
@@ -44,7 +45,7 @@ public class LastNotified {
        
        public void add(Set<String> users) {
                StringBuilder query = new StringBuilder();
-               startNotifyQuery(query);
+               startQuery(query);
                int cnt = 0;
        for(String user : users) {
                if(++cnt>1) {
@@ -54,37 +55,74 @@ public class LastNotified {
                query.append(user);
                query.append('\'');
                if(cnt>=30) {
-                       endNotifyQuery(query, Notification.TYPE.OA);
+                       endQuery(query);
                        add(session.execute(query.toString()),lastNotified);
                        query.setLength(0);
-                       startNotifyQuery(query);
+                       startQuery(query);
                        cnt=0;
                }
        }
        if(cnt>0) {
-               endNotifyQuery(query, Notification.TYPE.OA);
+               endQuery(query);
                        add(session.execute(query.toString()),lastNotified);
        }
        }
 
-       public Date lastNotified(String user) {
-               return lastNotified.get(user);
+       /**
+        * Note: target_key CAN also contain a Pipe.
+        * 
+        * @param user
+        * @param target
+        * @param target_key
+        * @return
+        */
+       public Date lastNotified(String user, String target, String target_key) {
+               String key = user + '|' + target + '|' + target_key;
+               return lastNotified(key);
        }
        
-       private void add(ResultSet result, Map<String, Date> lastNotified) {
+       public Date lastNotified(String key) {
+               Date rv = lastNotified.get(key);
+               if(rv==null) {
+                       rv = never;
+                       lastNotified.put(key, rv);
+               }
+               return rv;
+       }
+       
+       private Date add(ResultSet result, Map<String, Date> lastNotified) {
+               Date last = null;
        for(Iterator<Row> iter = result.iterator(); iter.hasNext();) {
                Row r = iter.next();
-               lastNotified.put(r.getString(0), r.getTimestamp(1));
+               String key = r.getString(0) + '|' +
+                                    r.getString(1) + '|' +
+                                    r.getString(2);
+               
+               lastNotified.put(key, last=r.getTimestamp(3));
        }
+       return last;
        }
 
-       private void startNotifyQuery(StringBuilder query) {
-               query.append("SELECT user,last FROM authz.notify WHERE user in (");
+       private void startQuery(StringBuilder query) {
+               query.append("SELECT user,target,key,last FROM authz.notified WHERE user in (");
        }
-    
-    private void endNotifyQuery(StringBuilder query, TYPE oa) {
-       query.append(") AND type=");
-       query.append(oa.idx());
-       query.append(';');
-    }
+
+       private void endQuery(StringBuilder query) {
+               query.append(");");
+       }
+
+       public void update(StringBuilder query,String user, String target, String key) {
+               query.append("UPDATE authz.notified SET last=dateof(now()) WHERE user='");
+               query.append(user);
+               query.append("' AND target='");
+               query.append(target);
+               query.append("' AND key='");
+               query.append(key);
+               query.append("';\n");
+       }
+
+       public static String newKey(UserRoleDAO.Data urdd) {
+               return urdd.user + "|ur|" + urdd.role;
+       }
+
 }