58e7718d90c2fb1159526e4b1cf0a4e40300946b
[aaf/authz.git] / cadi / client / src / main / java / org / onap / aaf / cadi / client / Retryable.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
22 package org.onap.aaf.cadi.client;
23
24 import java.net.ConnectException;
25
26 import org.onap.aaf.cadi.CadiException;
27 import org.onap.aaf.cadi.Locator;
28 import org.onap.aaf.misc.env.APIException;
29
30 /**
31  * 
32  * @author Jonathan
33  *
34  * @param <RT>
35  * @param <RET>
36  */
37 public abstract class Retryable<RET> {
38     // be able to hold state for consistent Connections.  Not required for all connection types.
39     public Rcli<?> lastClient;
40     private Locator.Item item;
41     
42     public Retryable() {
43         lastClient = null;
44         item = null;
45     }
46
47     public Retryable(Retryable<?> ret) {
48         lastClient = ret.lastClient;
49         item = ret.item;
50     }
51
52     public Locator.Item item(Locator.Item item) {
53         lastClient = null;
54         this.item = item;
55         return item;
56     }
57     public Locator.Item item() {
58         return item;
59     }
60     
61     public abstract RET code(Rcli<?> client) throws CadiException, ConnectException, APIException;
62
63     /**
64      * Note, Retryable is tightly coupled to the Client Utilizing.  It will not be the wrong type.
65      * @return
66      */
67     @SuppressWarnings("unchecked")
68     public <CLIENT> Rcli<CLIENT> lastClient() {
69         return (Rcli<CLIENT>)lastClient;
70     }
71 }