X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=auth%2Fauth-batch%2Fsrc%2Fmain%2Fjava%2Forg%2Fonap%2Faaf%2Fauth%2Fbatch%2Fhelpers%2FLastNotified.java;h=e108ec859cf20ec90f91cf413f060a42d5011c5c;hb=e3163b2d5609753f874e2f52fd5ef67fa063af7a;hp=22231f3a88a2867d1c7b30a63ba6d808de390337;hpb=a174f8ddbc5eb78a648fb68b33ef18cb64d81fda;p=aaf%2Fauthz.git diff --git a/auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/helpers/LastNotified.java b/auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/helpers/LastNotified.java index 22231f3a..e108ec85 100644 --- a/auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/helpers/LastNotified.java +++ b/auth/auth-batch/src/main/java/org/onap/aaf/auth/batch/helpers/LastNotified.java @@ -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 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 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 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 lastNotified) { + Date last = null; for(Iterator 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; + } + }