Merge "Sonar Fix: CertResp.java"
[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  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  * 
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  * 
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END====================================================
19  */
20
21 package org.onap.aaf.auth.batch.helpers;
22
23 import java.util.ArrayList;
24 import java.util.Date;
25 import java.util.GregorianCalendar;
26 import java.util.HashMap;
27 import java.util.HashSet;
28 import java.util.List;
29 import java.util.Map;
30 import java.util.Set;
31
32 import org.onap.aaf.cadi.Access;
33
34 public class ExpireRange {
35         private static final String AAF_BATCH_RANGE = "aaf_batch_range.";
36         public Map<String,List<Range>> ranges;
37         public final Date now;
38         
39         public ExpireRange(final Access access) {
40                 now = new Date();
41                 ranges = new HashMap<>();
42                 int i=0;
43                 String prop = access.getProperty(AAF_BATCH_RANGE + i,null);
44                 if(prop==null) {
45                         if(i==0) {
46                                 List<Range> lcred = getRangeList("cred");
47                                 List<Range> lur = getRangeList("ur");
48                                 List<Range> lx509 = getRangeList("x509");
49                                 
50                                 Range del = new Range("Delete",0,0,-1,0,GregorianCalendar.WEEK_OF_MONTH,-2);
51                                 lur.add(del);
52                                 lcred.add(del);
53                                 lx509.add(del);
54                                 
55                                 lcred.add(new Range("CredOneWeek",3,1,0,0,GregorianCalendar.WEEK_OF_MONTH,1));
56                                 lcred.add(new Range("CredTwoWeek",2,1,GregorianCalendar.WEEK_OF_MONTH,1,GregorianCalendar.WEEK_OF_MONTH,2));
57                                 lcred.add(new Range("OneMonth",1,7,GregorianCalendar.WEEK_OF_MONTH,2,GregorianCalendar.MONTH,1));
58                                 lcred.add(new Range("TwoMonth",1,0,GregorianCalendar.MONTH,1,GregorianCalendar.MONTH,2));
59                                 
60                                 lur.add(new Range("OneMonth",1,7,GregorianCalendar.WEEK_OF_MONTH,2,GregorianCalendar.MONTH,1));
61                                 
62                                 lx509.add(new Range("OneMonth",1,7,GregorianCalendar.WEEK_OF_MONTH,2,GregorianCalendar.MONTH,1));
63                         }
64                 }
65         }
66         
67         public Set<String> names() {
68                 Set<String> names = new HashSet<>();
69         for(List<Range> lr : ranges.values()) {
70                 for(Range r : lr) {
71                         names.add(r.name);
72                 }
73         }
74
75                 return names;
76         }
77         
78         private synchronized List<Range> getRangeList(final String key) {
79                 List<Range> rv = ranges.get(key);
80                 if(rv==null) {
81                         rv = new ArrayList<>();
82                         ranges.put(key, rv);
83                 }
84                 return rv;
85         }
86         
87         public class Range {
88                 private final String name;
89                 private final int reportingLevel;
90                 private final int interval; // in Days
91                 private final Date start;
92                 private final Date end;
93                 
94                 public Range(
95                                 final String name, final int reportingLevel, final int interval,  
96                                 final int startGCType, final int startQty,  
97                                 final int endGCType,final int endQty) {
98                         this.name = name;
99                         this.reportingLevel = reportingLevel;
100                         this.interval = interval;
101                         GregorianCalendar gc = new GregorianCalendar();
102                         if(startGCType<0) {
103                                 gc.set(GregorianCalendar.YEAR, 1);
104                         } else {
105                                 gc.setTime(now);
106                                 gc.add(startGCType, startQty);
107                         }
108                         start = gc.getTime();
109                         
110                         if(endGCType<0) {
111                                 gc.set(GregorianCalendar.YEAR, 1);
112                         } else {
113                                 gc.setTime(now);
114                                 gc.add(endGCType, endQty);
115                         }
116                         end = gc.getTime();
117                 }
118                 
119                 public String name() {
120                         return name;
121                 }
122                 
123                 public int reportingLevel() {
124                         return reportingLevel;
125                 }
126
127                 public Date getStart() {
128                         return start;
129                 }
130                 
131                 public Date getEnd() {
132                         return end;
133                 }
134                 
135                 private boolean inRange(final Date date) {
136                         if(date==null) {
137                                 return false;
138                         } else {
139                                 return date.getTime()>=start.getTime() && date.before(end);
140                         }
141                 }
142
143                 public boolean shouldContact(final Date lastContact) {
144                         if(reportingLevel<=0) {
145                                 return false;
146                         } else if(lastContact==null) {
147                                 return true;
148                         } else if(interval==0) {
149                                 return lastContact.before(start);
150                         } else {
151                                 GregorianCalendar gc = new GregorianCalendar();
152                                 gc.setTime(now);
153                                 gc.add(GregorianCalendar.DAY_OF_WEEK, interval);
154                                 return lastContact.before(gc.getTime());
155                         }
156                 }
157         }
158
159         public Range getRange(final String key, final Date date) {
160                 Range rv = null;
161                 if(date!=null) {
162                         List<Range> lr = ranges.get(key);
163                         if(lr==null) {
164                                 return null;
165                         } else {
166                                 for(Range r : lr) {
167                                         if(r.inRange(date)) {
168                                                 rv = r;
169                                                 break;
170                                         }
171                                 }
172                         }
173                 }
174                 return rv;
175         }
176         
177
178 }