Refactor code to support no AAF requests
[dmaap/dbcapi.git] / src / main / java / org / onap / dmaap / dbcapi / service / DR_NodeService.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * org.onap.dcae
4  * ================================================================================
5  * Copyright (C) 2017 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.dmaap.dbcapi.service;
22
23 import java.util.ArrayList;
24 import java.util.List;
25 import java.util.Map;
26
27 import javax.ws.rs.core.Response.Status;
28
29 import org.apache.log4j.Logger;
30 import org.onap.dmaap.dbcapi.client.DrProvConnection;
31 import org.onap.dmaap.dbcapi.database.DatabaseClass;
32 import org.onap.dmaap.dbcapi.logging.BaseLoggingClass;
33 import org.onap.dmaap.dbcapi.model.ApiError;
34 import org.onap.dmaap.dbcapi.model.DR_Node;
35 import org.onap.dmaap.dbcapi.model.DmaapObject.DmaapObject_Status;
36 import org.onap.dmaap.dbcapi.util.DmaapConfig;
37
38
39 public class DR_NodeService extends BaseLoggingClass {
40         private  class DrProv {
41                 String currentNodes;
42                 String currentStaticNodes;
43                 
44                 private String getX( String X, ApiError apiError ) {
45                         
46                 logger.info( "templog:getX at" + " 12.10.10" );
47                         DrProvConnection prov = new DrProvConnection();
48                 logger.info( "templog:getX at" + " 12.10.12" );
49                         prov.makeNodesConnection( X );  
50                 logger.info( "templog:getX at" + " 12.10.14" );
51                         String resp  = prov.doGetNodes(  apiError );
52                 logger.info( "templog:getX at" + " 12.10.16" );
53                         logger.info( "rc=" + apiError.getCode() );
54                 logger.info( "templog:getX at" + " 12.10.18" );
55                         return resp;
56                 }
57                 
58                 private void setX( String X, String list, ApiError apiError ) {
59                         DrProvConnection prov = new DrProvConnection();
60                         prov.makeNodesConnection( X, list );    
61                         String resp = prov.doPutNodes( apiError );
62                 }
63                 
64                 private String removeFromList( String aNode, String aList ) {
65                         String[] nodeList = aList.split("\\|");
66                         StringBuilder res = new StringBuilder();
67                         for ( String n: nodeList ) {
68                                 logger.info( "compare existing node " + n + " vs " + aNode );
69                                 if ( ! n.equals(aNode)) {
70                                         if (res.length() > 0 ) {
71                                                 res.append( "|" );
72                                         }
73                                         res.append(n);
74                                 }
75                         }
76                         logger.info( "result=" + res.toString() );
77                         return res.toString();
78                 }
79                 
80                  boolean containsNode( String aNode , ApiError apiError ){
81         
82                 logger.info( "templog:containsNode at" + " 12.10" );
83                         //DrProvConnection prov = new DrProvConnection();
84                         //prov.makeNodesConnection();   
85                         currentNodes = getX( "NODES", apiError );
86                 logger.info( "templog:containsNode at" + " 12.12" );
87                         if ( ! apiError.is2xx() || currentNodes == null ) {
88                 logger.info( "templog:containsNode at" + " 12.14" );
89                                 return false;
90                         }
91                 logger.info( "templog:containsNode at" + " 12.16" );
92                         logger.info( "NODES now=" + currentNodes );
93                         String[] nodeList = currentNodes.split("\\|");
94                 logger.info( "templog:containsNode at" + " 12.17" );
95                         for( String n: nodeList ) {
96                 logger.info( "templog:containsNode at" + " 12.18" );
97                                 logger.info( "compare existing node " + n + " vs " + aNode );
98                                 if ( n.equals(aNode) ) {
99                                         return true;
100                                 }
101                         }
102                         return false;
103                 }
104                 
105                  void addNode( String aNode, ApiError apiError ) {
106                         
107                         currentNodes = currentNodes + "|" + aNode;
108                         setX( "NODES", currentNodes, apiError );        
109
110                         
111                 }
112                 void removeNode( String aNode, ApiError apiError ) {
113                         currentNodes = removeFromList( aNode, currentNodes );
114                         setX( "NODES", currentNodes, apiError );                        
115                 }
116
117                 public boolean containsStaticNode(String aNode, ApiError apiError) {
118         
119                         //DrProvConnection prov = new DrProvConnection();
120                         //prov.makeNodesConnection();   
121                         currentStaticNodes = getX( "STATIC_ROUTING_NODES", apiError );
122                         if (! apiError.is2xx() || currentStaticNodes == null ) {
123                                 return false;
124                         }
125                         logger.info( "STATIC_ROUTING_NODES now=" + currentNodes );
126                         String[] nodeList = currentStaticNodes.split("\\|");
127                         for( String n: nodeList ) {
128                                 logger.info( "compare existing node " + n + " vs " + aNode );
129                                 if ( n.equals(aNode) ) {
130                                         return true;
131                                 }
132                         }
133                         return false;
134                 }
135                 
136
137                 public void addStaticNode(String aNode, ApiError apiError) {
138                         currentStaticNodes = currentStaticNodes + "|" + aNode;
139                         setX( "STATIC_ROUTING_NODES", currentStaticNodes, apiError );
140                 }
141                 void removeStaticNode( String aNode, ApiError apiError ) {
142                         currentStaticNodes = removeFromList( aNode, currentStaticNodes );
143                         setX( "STATIC_ROUTING_NODES", currentStaticNodes, apiError );                   
144                 }
145         }       
146
147         DmaapConfig p = (DmaapConfig)DmaapConfig.getConfig();
148         String unit_test = p.getProperty( "UnitTest", "No" );
149
150         private Map<String, DR_Node> dr_nodes = DatabaseClass.getDr_nodes();
151         
152         public Map<String, DR_Node> getDr_Nodes() {
153                 return dr_nodes;
154         }
155         
156         public List<DR_Node> getAllDr_Nodes() {
157                 return new ArrayList<DR_Node>(dr_nodes.values());
158         }
159         
160         public DR_Node getDr_Node( String fqdn, ApiError apiError ) {
161                 DR_Node old = dr_nodes.get( fqdn );
162                 if ( old == null ) {
163                         apiError.setCode(Status.NOT_FOUND.getStatusCode());
164                         apiError.setFields( "fqdn");
165                         apiError.setMessage( "Node " + fqdn + " does not exist");
166                         return null;
167                 }
168                 apiError.setCode(200);
169                 return old;
170         }
171
172         public DR_Node addDr_Node( DR_Node node, ApiError apiError ) {
173                 String fqdn = node.getFqdn();
174                 DR_Node old = dr_nodes.get( fqdn );
175                 if ( old != null ) {
176                         apiError.setCode(Status.CONFLICT.getStatusCode());
177                         apiError.setFields( "fqdn");
178                         apiError.setMessage( "Node " + fqdn + " already exists");
179                         return null;
180                 }
181                 logger.info( "templog:addDr_Node at" + " 10" );
182                 
183                 DrProv drProv = new DrProv();
184                 logger.info( "templog:addDr_Node at" + " 12" );
185
186                 if ( ! drProv.containsNode( node.getFqdn(), apiError ) && apiError.is2xx() ) {
187                         logger.info( "templog:addDr_Node at" + " 15" );
188                         drProv.addNode( node.getFqdn(), apiError );
189                 }
190                 logger.info( "templog:addDr_Node at" + " 20" );
191                 if ( ! apiError.is2xx() && ! unit_test.equals( "Yes" ) ) {
192                         return null;
193                 }
194                 logger.info( "templog:addDr_Node at" + " 30" );
195                 DcaeLocationService locService = new DcaeLocationService();
196                 if ( locService.isEdgeLocation( node.getDcaeLocationName()) && ! drProv.containsStaticNode( node.getFqdn(), apiError ) ) {
197                         if ( apiError.is2xx() ) {
198                                 drProv.addStaticNode( node.getFqdn(), apiError );
199                         }
200                 }
201                 logger.info( "templog:addDr_Node at" + " 40" );
202                 if ( ! apiError.is2xx() && ! unit_test.equals("Yes") ) {
203                         return null;
204                 }
205                 
206                 logger.info( "templog:addDr_Node at" + " 50" );
207                 node.setLastMod();
208                 node.setStatus(DmaapObject_Status.VALID);
209                 dr_nodes.put( node.getFqdn(), node );
210                 logger.info( "templog:addDr_Node at" + " 60" );
211                 apiError.setCode(200);
212                 return node;
213         }
214         
215         public DR_Node updateDr_Node( DR_Node node, ApiError apiError ) {
216                 DR_Node old = dr_nodes.get( node );
217                 if ( old == null ) {
218                         apiError.setCode(Status.NOT_FOUND.getStatusCode());
219                         apiError.setFields( "fqdn");
220                         apiError.setMessage( "Node " + node + " does not exist");
221                         return null;
222                 }
223                 node.setLastMod();
224                 dr_nodes.put( node.getFqdn(), node );
225                 apiError.setCode(200);
226                 return node;
227         }
228         
229         public DR_Node removeDr_Node( String nodeName, ApiError apiError ) {
230                 DR_Node old = dr_nodes.get( nodeName );
231                 if ( old == null ) {
232                         apiError.setCode(Status.NOT_FOUND.getStatusCode());
233                         apiError.setFields( "fqdn");
234                         apiError.setMessage( "Node " + nodeName + " does not exist");
235                         return null;
236                 }
237                 
238                 DrProv drProv = new DrProv();
239                 if ( drProv.containsNode( old.getFqdn(), apiError ) && apiError.is2xx() ) {
240                         drProv.removeNode( old.getFqdn(), apiError );
241                 }
242                 DcaeLocationService locService = new DcaeLocationService();
243                 if ( locService.isEdgeLocation( old.getDcaeLocationName()) && drProv.containsStaticNode( old.getFqdn(), apiError ) ) {
244                         if ( apiError.is2xx()) {
245                                 drProv.removeStaticNode( old.getFqdn(), apiError );
246                         }
247                         
248                 }
249                 
250                 apiError.setCode(200);
251                 return dr_nodes.remove(nodeName);
252         }               
253
254         public String getNodePatternAtLocation( String loc, boolean allowMult ) {
255                 logger.info( "loc=" + loc );
256                 if ( loc == null ) {
257                         return null;
258                 }
259                 StringBuilder str = new StringBuilder();
260                 for( DR_Node node : dr_nodes.values() ) {
261                         if ( loc.equals( node.getDcaeLocationName()) ) {
262                                 if ( str.length() > 0 ) {
263                                         str.append( ",");
264                                 }
265                                 str.append( node.getFqdn());
266                                 if ( ! allowMult ) {
267                                         break;
268                                 }
269                         }
270                 }
271                 logger.info( "returning " + str.toString() );
272                 return str.toString();
273         }
274 }