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;
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;
public void add(Set<String> users) {
StringBuilder query = new StringBuilder();
- startNotifyQuery(query);
+ startQuery(query);
int cnt = 0;
for(String user : users) {
if(++cnt>1) {
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;
+ }
+
}