Batch, Remove unneeded Classes, refine, etc
[aaf/authz.git] / auth / auth-batch / src / main / java / org / onap / aaf / auth / batch / helpers / ExpireRange.java
index 24a6510..cbfad7b 100644 (file)
@@ -31,46 +31,60 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
+import org.onap.aaf.auth.org.Organization.Identity;
 import org.onap.aaf.cadi.Access;
 
 public class ExpireRange {
+       private static final String DELETE = "Delete";
        public static final String ONE_MONTH = "OneMonth";
        public static final String TWO_MONTH = "TwoMonth";
        public static final String TWO_WEEK = "TwoWeek";
        public static final String ONE_WEEK = "OneWeek";
        private static final String AAF_BATCH_RANGE = "aaf_batch_range.";
-       public Map<String,List<Range>> ranges;
+       public final Map<String,List<Range>> ranges;
+       private final Map<Integer,Date> intervalDates;
        private static final Date now = new Date();
+       public final Range approveDelete ;
 
        private Range delRange;
        
        public ExpireRange(final Access access) {
                ranges = new HashMap<>();
+               intervalDates = new HashMap<>();
                int i=0;
+               approveDelete = new Range(DELETE,0,0,0,-1,0,GregorianCalendar.DAY_OF_YEAR,-100);
                String prop = access.getProperty(AAF_BATCH_RANGE + i,null);
                if(prop==null && i==0) {
                                List<Range> lcred = getRangeList("cred");
                                List<Range> lur = getRangeList("ur");
                                List<Range> lx509 = getRangeList("x509");
+       
                                
-                               delRange = new Range("Delete",0,0,-1,0,GregorianCalendar.WEEK_OF_MONTH,-2);
+                               /*
+                                  Range(Name, ReportingLevel, PeopleInterval, AppInterval, Start(Type,Qty) End(Type,Qty) )
+                                  Interval of -1 Means "only once"
+                                  Interval of 0 means none
+                                  Interval > 0 means only X number of Days.
+                               */
+                               delRange = new Range(DELETE,0,0,0,-1,0,GregorianCalendar.WEEK_OF_MONTH,-2);
                                lur.add(delRange);
                                lcred.add(delRange);
                                lx509.add(delRange);
                                
-                               lcred.add(new Range(ONE_WEEK,3,1,0,0,GregorianCalendar.WEEK_OF_MONTH,1));
-                               lcred.add(new Range(TWO_WEEK,2,1,GregorianCalendar.WEEK_OF_MONTH,1,GregorianCalendar.WEEK_OF_MONTH,2));
-                               lcred.add(new Range(ONE_MONTH,1,7,GregorianCalendar.WEEK_OF_MONTH,2,GregorianCalendar.MONTH,1));
-                               lcred.add(new Range(TWO_MONTH,1,0,GregorianCalendar.MONTH,1,GregorianCalendar.MONTH,2));
                                
-                               lur.add(new Range(ONE_MONTH,1,7,GregorianCalendar.WEEK_OF_MONTH,2,GregorianCalendar.MONTH,1));
+                               lcred.add(new Range(ONE_WEEK ,3,-1,1,0,0,GregorianCalendar.WEEK_OF_MONTH,1));
+                               lcred.add(new Range(TWO_WEEK ,2,-1,-1,GregorianCalendar.WEEK_OF_MONTH,1,GregorianCalendar.WEEK_OF_MONTH,2));
+                               lcred.add(new Range(ONE_MONTH,1,7,7,GregorianCalendar.WEEK_OF_MONTH,2,GregorianCalendar.MONTH,1));
+                               lcred.add(new Range(TWO_MONTH,1,-1,-1,GregorianCalendar.MONTH,1,GregorianCalendar.MONTH,2));
+                               
+                               lur.add(  new Range(ONE_MONTH,1,-1,-1,GregorianCalendar.WEEK_OF_MONTH,2,GregorianCalendar.MONTH,1));
                                
-                               lx509.add(new Range(ONE_MONTH,1,7,GregorianCalendar.WEEK_OF_MONTH,2,GregorianCalendar.MONTH,1));
+                               lx509.add(new Range(ONE_MONTH,1,-1,-1,GregorianCalendar.WEEK_OF_MONTH,2,GregorianCalendar.MONTH,1));
                        }
        }
        
-       public static Range newFutureRange() {
-               return new Range("Approval",1,1,0,0,GregorianCalendar.MONTH,1);
+       public Range newFutureRange() {
+               return new Range("Approval",7,7,1,0,0,GregorianCalendar.MONTH,1);
        }
        
        public Set<String> names() {
@@ -93,20 +107,24 @@ public class ExpireRange {
                return rv;
        }
        
-       public static class Range {
+       public class Range {
                private final String name;
                private final int reportingLevel;
-               private final int interval; // in Days
+               private final int peopleInterval; // in Days
+               private final int appInterval; // in Days
                private final Date start;
                private final Date end;
+               private final Date lowerValid;
                
                public Range(
-                               final String name, final int reportingLevel, final int interval,  
+                               final String name, final int reportingLevel, 
+                               final int peopleInterval, final int appInterval,  
                                final int startGCType, final int startQty,  
                                final int endGCType,final int endQty) {
                        this.name = name;
                        this.reportingLevel = reportingLevel;
-                       this.interval = interval;
+                       this.peopleInterval = peopleInterval;
+                       this.appInterval = appInterval;
                        GregorianCalendar gc = new GregorianCalendar();
                        if(startGCType<0) {
                                gc.set(GregorianCalendar.YEAR, 1);
@@ -123,6 +141,16 @@ public class ExpireRange {
                                gc.add(endGCType, endQty);
                        }
                        end = gc.getTime();
+                       
+
+                       if(endGCType<0) {
+                               gc.set(GregorianCalendar.YEAR, -1);
+                       } else {
+                               gc.setTime(now);
+                               gc.add(endGCType, endQty * -1);
+                       }
+                       lowerValid = gc.getTime();
+
                }
                
                public String name() {
@@ -133,6 +161,30 @@ public class ExpireRange {
                        return reportingLevel;
                }
 
+               public boolean needsContact(Date lnd, Identity identity) {
+                       final int interval;
+                       if(identity==null || identity.isPerson()) {
+                               interval = peopleInterval;
+                       } else {
+                               interval = appInterval;
+                       }
+                       if(interval == 0) {
+                               return false;
+                       } else if(interval < 0) { // "-1 = only once "
+                               return (lnd==null || lnd.before(lowerValid));
+                       } else {
+                               Date rv = intervalDates.get(interval);
+                               if(rv==null) {
+                                       GregorianCalendar gc = new GregorianCalendar();
+                                       gc.setTime(now);
+                                       gc.add(GregorianCalendar.DAY_OF_YEAR, -1*interval);
+                                       rv = gc.getTime();
+                                       intervalDates.put(interval, rv);
+                               }
+                               return rv.after(lnd);
+                       }
+               }
+
                public Date getStart() {
                        return start;
                }
@@ -149,20 +201,6 @@ public class ExpireRange {
                        }
                }
 
-               public boolean shouldContact(final Date lastContact) {
-                       if(reportingLevel<=0) {
-                               return false;
-                       } else if(lastContact==null) {
-                               return true;
-                       } else if(interval==0) {
-                               return lastContact.before(start);
-                       } else {
-                               GregorianCalendar gc = new GregorianCalendar();
-                               gc.setTime(now);
-                               gc.add(GregorianCalendar.DAY_OF_WEEK, interval);
-                               return lastContact.before(gc.getTime());
-                       }
-               }
        }
 
        public Range getRange(final String key, final Date date) {