* org.onap.aaf
* ===========================================================================
* Copyright (c) 2018 AT&T Intellectual Property. All rights reserved.
+ *
+ * Modifications Copyright (C) 2018 IBM.
* ===========================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
- *
+ *
* http://www.apache.org/licenses/LICENSE-2.0
- *
+ *
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
package org.onap.aaf.auth.batch.helpers;
+import java.io.IOException;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.Date;
import java.util.UUID;
import org.onap.aaf.auth.dao.cass.FutureDAO;
+import org.onap.aaf.auth.dao.cass.UserRoleDAO;
import org.onap.aaf.auth.env.AuthzTrans;
import org.onap.aaf.auth.layer.Result;
+import org.onap.aaf.cadi.util.CSV;
import org.onap.aaf.misc.env.Env;
import org.onap.aaf.misc.env.TimeTaken;
import org.onap.aaf.misc.env.Trans;
import com.datastax.driver.core.Statement;
public class Future implements CacheChange.Data, Comparable<Future> {
- public static final Map<UUID,Future> data = new TreeMap<>();
- public static final Map<String,List<Future>> byRole = new TreeMap<>();
-
+ protected static final Map<UUID,Future> data = new TreeMap<>();
+ protected static final Map<String,List<Future>> byRole = new TreeMap<>();
+
public final FutureDAO.Data fdd;
public final String role; // derived
private static final CacheChange<Future> cache = new CacheChange<>();
-
-
+
+ public static final Creator<Future> v2_0_17 = new Creator<Future>() {
+ @Override
+ public Future create(Row row) {
+ return new Future(row.getUUID(0),row.getString(1),row.getString(2),
+ row.getTimestamp(3),row.getTimestamp(4), null);
+ }
+
+ @Override
+ public String select() {
+ return "select id,memo,target,start,expires from authz.future";
+ }
+ };
+
+ public static final Creator<Future> withConstruct = new Creator<Future>() {
+ @Override
+ public String select() {
+ return "select id,memo,target,start,expires,construct from authz.future";
+ }
+
+ @Override
+ public Future create(Row row) {
+ return new Future(row.getUUID(0),row.getString(1),row.getString(2),
+ row.getTimestamp(3),row.getTimestamp(4), row.getBytes(5));
+ }
+
+ };
+
+
+ public Future(UUID id, String memo, String target, Date start, Date expires, ByteBuffer construct) {
+ fdd = new FutureDAO.Data();
+ fdd.id = id;
+ fdd.memo = memo;
+ fdd.target = target;
+ fdd.start = start;
+ fdd.expires = expires;
+ fdd.construct = construct;
+ String role = null;
+ if ("user_role".equals(target)) {
+ UserRoleDAO.Data urdd = new UserRoleDAO.Data();
+ try {
+ urdd.reconstitute(construct);
+ fdd.target_key = urdd.user + '|' + urdd.role;
+ fdd.target_date = urdd.expires;
+ role = urdd.role;
+ } catch (IOException e) {
+ e.printStackTrace(System.err);
+ }
+ }
+ this.role = role;
+ }
+
public final UUID id() {
return fdd.id;
}
-
+
public final String memo() {
return fdd.memo;
}
-
+
public final String target() {
return fdd.target;
}
-
+
public final Date start() {
return fdd.start;
}
-
+
public final Date expires() {
return fdd.expires;
}
-
- public Future(UUID id, String memo, String target, Date start, Date expires, ByteBuffer construct) {
- fdd = new FutureDAO.Data();
- fdd.id = id;
- fdd.memo = memo;
- fdd.target = target;
- fdd.start = start;
- fdd.expires = expires;
- fdd.construct = construct;
- role = Approval.roleFromMemo(memo);
+ public static void load(Trans trans, Session session, Creator<Future> creator) {
+ load(trans,session,creator, f -> {
+ data.put(f.fdd.id,f);
+ if (f.role==null) {
+ return;
+ }
+ List<Future> lf = byRole.computeIfAbsent(f.role, k -> new ArrayList<>());
+ lf.add(f);
+ });
}
- public static void load(Trans trans, Session session, Creator<Future> creator) {
+
+ public static void load(Trans trans, Session session, Creator<Future> creator, Visitor<Future> visitor) {
trans.info().log( "query: " + creator.select() );
ResultSet results;
TimeTaken tt = trans.start("Load Futures", Env.REMOTE);
} finally {
tt.done();
}
-
+
int count = 0;
tt = trans.start("Process Futures", Env.SUB);
try {
for (Row row : results.all()) {
++count;
- Future f = creator.create(row);
- data.put(f.fdd.id,f);
- if (f.role==null) {
- continue;
- }
- List<Future> lf = byRole.get(f.role);
- if (lf==null) {
- lf = new ArrayList<>();
- byRole.put(f.role,lf);
- }
- lf.add(f);
-
+ visitor.visit(creator.create(row));
}
} finally {
tt.done();
trans.info().log("Found",count,"Futures");
}
}
-
- public static Creator<Future> v2_0_17 = new Creator<Future>() {
- @Override
- public Future create(Row row) {
- return new Future(row.getUUID(0),row.getString(1),row.getString(2),
- row.getTimestamp(3),row.getTimestamp(4), null);
- }
-
- @Override
- public String select() {
- return "select id,memo,target,start,expires from authz.future";
- }
- };
-
- public static Creator<Future> withConstruct = new Creator<Future>() {
- @Override
- public String select() {
- return "select id,memo,target,start,expires,construct from authz.future";
- }
-
- @Override
- public Future create(Row row) {
- return new Future(row.getUUID(0),row.getString(1),row.getString(2),
- row.getTimestamp(3),row.getTimestamp(4), row.getBytes(5));
- }
-
- };
public Result<Void> delayedDelete(AuthzTrans trans, FutureDAO fd, boolean dryRun, String text) {
Result<Void> rv;
}
return rv;
}
-
+
/* (non-Javadoc)
* @see org.onap.aaf.auth.helpers.CacheChange.Data#resetLocalData()
*/
public static void resetLocalData() {
cache.resetLocalData();
}
-
+
public static int sizeForDeletion() {
return cache.cacheSize();
}
return cache.contains(f);
}
+ public static void row(CSV.Writer cw, Future f) {
+ cw.row("future",f.fdd.id,f.fdd.target,f.fdd.expires,f.role,f.fdd.memo);
+ }
+
+
+ public static void deleteByIDBatch(StringBuilder sb, String id) {
+ sb.append("DELETE from authz.future where id=");
+ sb.append(id);
+ sb.append(";\n");
+ }
}