2 * ============LICENSE_START=======================================================
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
11 * http://www.apache.org/licenses/LICENSE-2.0
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=========================================================
21 package org.onap.dmaap.dbcapi.service;
23 import java.util.ArrayList;
24 import java.util.List;
27 import javax.ws.rs.core.Response.Status;
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;
39 public class DR_NodeService extends BaseLoggingClass {
40 private class DrProv {
42 String currentStaticNodes;
44 private String getX( String X, ApiError apiError ) {
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" );
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 );
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 ) {
76 logger.info( "result=" + res.toString() );
77 return res.toString();
80 boolean containsNode( String aNode , ApiError apiError ){
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" );
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) ) {
105 void addNode( String aNode, ApiError apiError ) {
107 currentNodes = currentNodes + "|" + aNode;
108 setX( "NODES", currentNodes, apiError );
112 void removeNode( String aNode, ApiError apiError ) {
113 currentNodes = removeFromList( aNode, currentNodes );
114 setX( "NODES", currentNodes, apiError );
117 public boolean containsStaticNode(String aNode, ApiError apiError) {
119 //DrProvConnection prov = new DrProvConnection();
120 //prov.makeNodesConnection();
121 currentStaticNodes = getX( "STATIC_ROUTING_NODES", apiError );
122 if (! apiError.is2xx() || currentStaticNodes == null ) {
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) ) {
137 public void addStaticNode(String aNode, ApiError apiError) {
138 currentStaticNodes = currentStaticNodes + "|" + aNode;
139 setX( "STATIC_ROUTING_NODES", currentStaticNodes, apiError );
141 void removeStaticNode( String aNode, ApiError apiError ) {
142 currentStaticNodes = removeFromList( aNode, currentStaticNodes );
143 setX( "STATIC_ROUTING_NODES", currentStaticNodes, apiError );
147 DmaapConfig p = (DmaapConfig)DmaapConfig.getConfig();
148 String unit_test = p.getProperty( "UnitTest", "No" );
150 private Map<String, DR_Node> dr_nodes = DatabaseClass.getDr_nodes();
152 public Map<String, DR_Node> getDr_Nodes() {
156 public List<DR_Node> getAllDr_Nodes() {
157 return new ArrayList<DR_Node>(dr_nodes.values());
160 public DR_Node getDr_Node( String fqdn, ApiError apiError ) {
161 DR_Node old = dr_nodes.get( fqdn );
163 apiError.setCode(Status.NOT_FOUND.getStatusCode());
164 apiError.setFields( "fqdn");
165 apiError.setMessage( "Node " + fqdn + " does not exist");
168 apiError.setCode(200);
172 public DR_Node addDr_Node( DR_Node node, ApiError apiError ) {
173 String fqdn = node.getFqdn();
174 DR_Node old = dr_nodes.get( fqdn );
176 apiError.setCode(Status.CONFLICT.getStatusCode());
177 apiError.setFields( "fqdn");
178 apiError.setMessage( "Node " + fqdn + " already exists");
181 logger.info( "templog:addDr_Node at" + " 10" );
183 DrProv drProv = new DrProv();
184 logger.info( "templog:addDr_Node at" + " 12" );
186 if ( ! drProv.containsNode( node.getFqdn(), apiError ) && apiError.is2xx() ) {
187 logger.info( "templog:addDr_Node at" + " 15" );
188 drProv.addNode( node.getFqdn(), apiError );
190 logger.info( "templog:addDr_Node at" + " 20" );
191 if ( ! apiError.is2xx() && ! unit_test.equals( "Yes" ) ) {
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 );
201 logger.info( "templog:addDr_Node at" + " 40" );
202 if ( ! apiError.is2xx() && ! unit_test.equals("Yes") ) {
206 logger.info( "templog:addDr_Node at" + " 50" );
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);
215 public DR_Node updateDr_Node( DR_Node node, ApiError apiError ) {
216 DR_Node old = dr_nodes.get( node );
218 apiError.setCode(Status.NOT_FOUND.getStatusCode());
219 apiError.setFields( "fqdn");
220 apiError.setMessage( "Node " + node + " does not exist");
224 dr_nodes.put( node.getFqdn(), node );
225 apiError.setCode(200);
229 public DR_Node removeDr_Node( String nodeName, ApiError apiError ) {
230 DR_Node old = dr_nodes.get( nodeName );
232 apiError.setCode(Status.NOT_FOUND.getStatusCode());
233 apiError.setFields( "fqdn");
234 apiError.setMessage( "Node " + nodeName + " does not exist");
238 DrProv drProv = new DrProv();
239 if ( drProv.containsNode( old.getFqdn(), apiError ) && apiError.is2xx() ) {
240 drProv.removeNode( old.getFqdn(), apiError );
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 );
250 apiError.setCode(200);
251 return dr_nodes.remove(nodeName);
254 public String getNodePatternAtLocation( String loc, boolean allowMult ) {
255 logger.info( "loc=" + loc );
259 StringBuilder str = new StringBuilder();
260 for( DR_Node node : dr_nodes.values() ) {
261 if ( loc.equals( node.getDcaeLocationName()) ) {
262 if ( str.length() > 0 ) {
265 str.append( node.getFqdn());
271 logger.info( "returning " + str.toString() );
272 return str.toString();