2 * ============LICENSE_START====================================================
4 * ===========================================================================
5 * Copyright (c) 2018 AT&T Intellectual Property. All rights reserved.
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
13 * http://www.apache.org/licenses/LICENSE-2.0
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====================================================
23 package org.onap.aaf.auth.batch.helpers;
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;
34 import org.onap.aaf.auth.org.Organization.Identity;
35 import org.onap.aaf.cadi.Access;
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 ;
49 private Range delRange;
51 public ExpireRange(final Access access) {
52 ranges = new HashMap<>();
53 intervalDates = new HashMap<>();
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");
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.
69 delRange = new Range(DELETE,0,0,0,-1,0,GregorianCalendar.WEEK_OF_MONTH,-2);
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));
79 lur.add( new Range(ONE_MONTH,1,-1,-1,0,0,GregorianCalendar.MONTH,1));
80 lx509.add(new Range(ONE_MONTH,1,-1,-1,GregorianCalendar.WEEK_OF_MONTH,2,GregorianCalendar.MONTH,1));
84 public Range newFutureRange() {
85 return new Range("Approval",7,7,1,0,0,GregorianCalendar.MONTH,1);
88 public Set<String> names() {
89 Set<String> names = new HashSet<>();
90 for(List<Range> lr : ranges.values()) {
99 private synchronized List<Range> getRangeList(final String key) {
100 List<Range> rv = ranges.get(key);
102 rv = new ArrayList<>();
109 private final String name;
110 private final int reportingLevel;
111 private final int peopleInterval; // in Days
112 private final int appInterval; // in Days
113 private final Date start;
114 private final Date end;
115 private final Date lowerValid;
118 final String name, final int reportingLevel,
119 final int peopleInterval, final int appInterval,
120 final int startGCType, final int startQty,
121 final int endGCType,final int endQty) {
123 this.reportingLevel = reportingLevel;
124 this.peopleInterval = peopleInterval;
125 this.appInterval = appInterval;
126 GregorianCalendar gc = new GregorianCalendar();
128 gc.set(GregorianCalendar.YEAR, 1);
131 gc.add(startGCType, startQty);
133 start = gc.getTime();
136 gc.set(GregorianCalendar.YEAR, 1);
139 gc.add(endGCType, endQty);
145 gc.set(GregorianCalendar.YEAR, -1);
148 gc.add(endGCType, endQty * -1);
150 lowerValid = gc.getTime();
154 public String name() {
158 public int reportingLevel() {
159 return reportingLevel;
162 public boolean needsContact(Date lnd, Identity identity) {
164 if(identity==null || identity.isPerson()) {
165 interval = peopleInterval;
167 interval = appInterval;
171 } else if(interval < 0) { // "-1 = only once "
172 return (lnd==null || lnd.before(lowerValid));
174 Date rv = intervalDates.get(interval);
176 GregorianCalendar gc = new GregorianCalendar();
178 gc.add(GregorianCalendar.DAY_OF_YEAR, -1*interval);
180 intervalDates.put(interval, rv);
182 return rv.after(lnd);
186 public Date getStart() {
190 public Date getEnd() {
194 public boolean inRange(final Date date) {
198 return date.getTime()>=start.getTime() && date.before(end);
204 public Range getRange(final String key, final Date date) {
207 List<Range> lr = ranges.get(key);
212 if(r.inRange(date)) {