Remove Tabs, per Jococo
[aaf/authz.git] / auth / auth-batch / src / main / java / org / onap / aaf / auth / batch / helpers / ExpireRange.java
1 /**
2  * ============LICENSE_START====================================================
3  * org.onap.aaf
4  * ===========================================================================
5  * Copyright (c) 2018 AT&T Intellectual Property. All rights reserved.
6  *
7  * Modifications Copyright © 2018 IBM.
8  * ===========================================================================
9  * Licensed under the Apache License, Version 2.0 (the "License");
10  * you may not use this file except in compliance with the License.
11  * You may obtain a copy of the License at
12  * 
13  *      http://www.apache.org/licenses/LICENSE-2.0
14  * 
15  * Unless required by applicable law or agreed to in writing, software
16  * distributed under the License is distributed on an "AS IS" BASIS,
17  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18  * See the License for the specific language governing permissions and
19  * limitations under the License.
20  * ============LICENSE_END====================================================
21  */
22
23 package org.onap.aaf.auth.batch.helpers;
24
25 import java.util.ArrayList;
26 import java.util.Date;
27 import java.util.GregorianCalendar;
28 import java.util.HashMap;
29 import java.util.HashSet;
30 import java.util.List;
31 import java.util.Map;
32 import java.util.Set;
33
34 import org.onap.aaf.auth.org.Organization.Identity;
35 import org.onap.aaf.cadi.Access;
36
37 public class ExpireRange {
38     private static final String DELETE = "Delete";
39     public static final String ONE_MONTH = "OneMonth";
40     public static final String TWO_MONTH = "TwoMonth";
41     public static final String TWO_WEEK = "TwoWeek";
42     public static final String ONE_WEEK = "OneWeek";
43     private static final String AAF_BATCH_RANGE = "aaf_batch_range.";
44     public final Map<String,List<Range>> ranges;
45     private final Map<Integer,Date> intervalDates;
46     private static final Date now = new Date();
47     public final Range approveDelete ;
48
49     private Range delRange;
50     
51     public ExpireRange(final Access access) {
52         ranges = new HashMap<>();
53         intervalDates = new HashMap<>();
54         int i=0;
55         approveDelete = new Range(DELETE,0,0,0,-1,0,GregorianCalendar.DAY_OF_YEAR,-100);
56         String prop = access.getProperty(AAF_BATCH_RANGE + i,null);
57         if(prop==null && i==0) {
58                 List<Range> lcred = getRangeList("cred");
59                 List<Range> lur = getRangeList("ur");
60                 List<Range> lx509 = getRangeList("x509");
61     
62                 
63                 /*
64                    Range(Name, ReportingLevel, PeopleInterval, AppInterval, Start(Type,Qty) End(Type,Qty) )
65                    Interval of -1 Means "only once"
66                    Interval of 0 means none
67                    Interval > 0 means only X number of Days.
68                 */
69                 delRange = new Range(DELETE,0,0,0,-1,0,GregorianCalendar.WEEK_OF_MONTH,-2);
70                 lur.add(delRange);
71                 lcred.add(delRange);
72                 lx509.add(delRange);
73                 
74                 lcred.add(new Range(ONE_WEEK ,3,-1,1,0,0,GregorianCalendar.WEEK_OF_MONTH,1));
75                 lcred.add(new Range(TWO_WEEK ,2,-1,-1,GregorianCalendar.WEEK_OF_MONTH,1,GregorianCalendar.WEEK_OF_MONTH,2));
76                 lcred.add(new Range(ONE_MONTH,1,7,7,GregorianCalendar.WEEK_OF_MONTH,2,GregorianCalendar.MONTH,1));
77                 lcred.add(new Range(TWO_MONTH,1,-1,-1,GregorianCalendar.MONTH,1,GregorianCalendar.MONTH,2));
78                 
79                 lur.add(  new Range(ONE_MONTH,1,-1,-1,0,0,GregorianCalendar.MONTH,1));
80                 // Comment out until we can get some more clear actions in place for GUI
81                 // lur.add(  new Range(ONE_MONTH,1,-1,-1,GregorianCalendar.WEEK_OF_MONTH,2,GregorianCalendar.MONTH,1));
82                 // lur.add(  new Range(ONE_WEEK,2,-1,1,0,0,GregorianCalendar.WEEK_OF_MONTH,1));
83                 
84                 lx509.add(new Range(ONE_MONTH,1,-1,-1,GregorianCalendar.WEEK_OF_MONTH,2,GregorianCalendar.MONTH,1));
85             }
86     }
87     
88     public Range newFutureRange() {
89         return new Range("Approval",7,7,1,0,0,GregorianCalendar.MONTH,1);
90     }
91     
92     public Set<String> names() {
93         Set<String> names = new HashSet<>();
94         for(List<Range> lr : ranges.values()) {
95             for(Range r : lr) {
96                 names.add(r.name);
97             }
98         }
99
100         return names;
101     }
102     
103     private synchronized List<Range> getRangeList(final String key) {
104         List<Range> rv = ranges.get(key);
105         if(rv==null) {
106             rv = new ArrayList<>();
107             ranges.put(key, rv);
108         }
109         return rv;
110     }
111     
112     public class Range {
113         private final String name;
114         private final int reportingLevel;
115         private final int peopleInterval; // in Days
116         private final int appInterval; // in Days
117         private final Date start;
118         private final Date end;
119         private final Date lowerValid;
120         
121         public Range(
122                 final String name, final int reportingLevel, 
123                 final int peopleInterval, final int appInterval,  
124                 final int startGCType, final int startQty,  
125                 final int endGCType,final int endQty) {
126             this.name = name;
127             this.reportingLevel = reportingLevel;
128             this.peopleInterval = peopleInterval;
129             this.appInterval = appInterval;
130             GregorianCalendar gc = new GregorianCalendar();
131             if(startGCType<0) {
132                 gc.set(GregorianCalendar.YEAR, 1);
133             } else {
134                 gc.setTime(now);
135                 gc.add(startGCType, startQty);
136             }
137             start = gc.getTime();
138             
139             if(endGCType<0) {
140                 gc.set(GregorianCalendar.YEAR, 1);
141             } else {
142                 gc.setTime(now);
143                 gc.add(endGCType, endQty);
144             }
145             end = gc.getTime();
146             
147
148             if(endGCType<0) {
149                 gc.set(GregorianCalendar.YEAR, -1);
150             } else {
151                 gc.setTime(now);
152                 gc.add(endGCType, endQty * -1);
153             }
154             lowerValid = gc.getTime();
155
156         }
157         
158         public String name() {
159             return name;
160         }
161         
162         public int reportingLevel() {
163             return reportingLevel;
164         }
165
166         public boolean needsContact(Date lnd, Identity identity) {
167             final int interval;
168             if(identity==null || identity.isPerson()) {
169                 interval = peopleInterval;
170             } else {
171                 interval = appInterval;
172             }
173             if(interval == 0) {
174                 return false;
175             } else if(interval < 0) { // "-1 = only once "
176                 return (lnd==null || lnd.before(lowerValid));
177             } else {
178                 Date rv = intervalDates.get(interval);
179                 if(rv==null) {
180                     GregorianCalendar gc = new GregorianCalendar();
181                     gc.setTime(now);
182                     gc.add(GregorianCalendar.DAY_OF_YEAR, -1*interval);
183                     rv = gc.getTime();
184                     intervalDates.put(interval, rv);
185                 }
186                 return rv.after(lnd);
187             }
188         }
189
190         public Date getStart() {
191             return start;
192         }
193         
194         public Date getEnd() {
195             return end;
196         }
197         
198         public boolean inRange(final Date date) {
199             if(date==null) {
200                 return false;
201             } else {
202                 return date.getTime()>=start.getTime() && date.before(end);
203             }
204         }
205
206     }
207
208     public Range getRange(final String key, final Date date) {
209         Range rv = null;
210         if(date!=null) {
211             List<Range> lr = ranges.get(key);
212             if(lr==null) {
213                 return null;
214             } else {
215                 for(Range r : lr) {
216                     if(r.inRange(date)) {
217                         rv = r;
218                         break;
219                     }
220                 }
221             }
222         }
223         return rv;
224     }
225
226     public Date now() {
227         return now;
228     }
229     
230
231 }