Network topology and inventory init
[transportpce.git] / inventory / src / main / java / org / opendaylight / transportpce / inventory / query / QueryUtils.java
1 /*
2  * Copyright © 2017 AT&T and others. All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8 package org.opendaylight.transportpce.inventory.query;
9
10 import static org.opendaylight.transportpce.inventory.utils.StringUtils.getCurrentTimestamp;
11
12 import com.google.common.base.Strings;
13
14 import java.sql.PreparedStatement;
15 import java.sql.SQLException;
16
17 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev161014.service.ServiceAEnd;
18 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev161014.service.ServiceZEnd;
19 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev161014.service.endpoint.Router;
20 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev161014.service.endpoint.RxDirection;
21 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev161014.service.endpoint.TxDirection;
22 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev161014.service.port.Port;
23 import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev161014.service.list.Services;
24
25 /**
26  * Query manipulation class.
27  */
28 public class QueryUtils {
29
30     private QueryUtils() {
31         // no instance, just static access
32     }
33
34     /**
35      * This method modifies the prepared statement for {@link Queries}.
36      *
37      * @param stmt the prepared statement
38      * @param servicePath the service path
39      * @throws SQLException a SQL exception
40      */
41     public static void setCreateServiceParameters(PreparedStatement stmt, Services servicePath) throws SQLException {
42         StatementBuilder builder = StatementBuilder.builder(stmt);
43         builder.setParameter(servicePath.getServiceName());
44         builder.setParameter(servicePath.getCommonId());
45
46         String requestId = "";
47         String rpcAction = "";
48         String notificationUrl = "";
49         String requestSystemId = "";
50
51         if (servicePath.getSdncRequestHeader() != null) {
52             requestId = getStringOf(servicePath.getSdncRequestHeader().getRequestId());
53             rpcAction = servicePath.getSdncRequestHeader().getRpcAction().getName();
54             notificationUrl = servicePath.getSdncRequestHeader().getNotificationUrl();
55             requestSystemId = servicePath.getSdncRequestHeader().getRequestSystemId();
56         }
57         builder.setParameter(requestId).setParameter(rpcAction).setParameter(notificationUrl)
58                 .setParameter(requestSystemId);
59
60         String connectionType = "";
61         String lifecycleState = "";
62         String administrativeState = "";
63         String condition = "";
64         if (servicePath.getConnectionType() != null) {
65             connectionType = servicePath.getConnectionType().getName();
66         }
67         if (servicePath.getLifecycleState() != null) {
68             lifecycleState = servicePath.getLifecycleState().getName();
69         }
70         if (servicePath.getAdministrativeState() != null) {
71             administrativeState = servicePath.getAdministrativeState().getName();
72         }
73         if (servicePath.getCondition() != null) {
74             condition = servicePath.getCondition().getName();
75         }
76         // status stuff
77         builder.setParameter(connectionType);
78         builder.setParameter(lifecycleState);
79         builder.setParameter(administrativeState);
80         builder.setParameter(condition);
81
82         // status stuff
83         ServiceAEnd serviceAEnd = servicePath.getServiceAEnd();
84         builder.setParameter(serviceAEnd.getServiceFormat().getName()).setParameter(serviceAEnd.getServiceRate())
85                 .setParameter(serviceAEnd.getClli()).setParameter(serviceAEnd.getNodeId());
86
87         // tx port stuff
88         Port aendTxDirection = servicePath.getServiceAEnd().getTxDirection().getPort();
89         builder.setParameter(aendTxDirection.getPortDeviceName()).setParameter(aendTxDirection.getPortName())
90                 .setParameter(aendTxDirection.getPortRack()).setParameter(aendTxDirection.getPortShelf())
91                 .setParameter(aendTxDirection.getPortSlot()).setParameter(aendTxDirection.getPortSubSlot());
92
93         // tx lgx stuff
94         TxDirection txDirectionA = servicePath.getServiceAEnd().getTxDirection();
95         builder.setParameter(txDirectionA.getLgx().getLgxDeviceName())
96                 .setParameter(txDirectionA.getLgx().getLgxPortName())
97                 .setParameter(txDirectionA.getLgx().getLgxPortRack())
98                 .setParameter(txDirectionA.getLgx().getLgxPortShelf());
99         builder.setParameter(txDirectionA.getTail().getTailRoadm().getNodeId());
100         builder.setParameter(txDirectionA.getTail().getXponderPort().getCircuitPackName());
101         builder.setParameter(txDirectionA.getTail().getXponderPort().getPortName());
102         builder.setParameter(txDirectionA.getTail().getTailRoadmPortAid());
103         builder.setParameter(txDirectionA.getTail().getTailRoadmPortRackLocation());
104
105         // rx lgx stuff
106         RxDirection rxDirectionA = servicePath.getServiceAEnd().getRxDirection();
107         builder.setParameter(rxDirectionA.getLgx().getLgxDeviceName())
108                 .setParameter(rxDirectionA.getLgx().getLgxPortName())
109                 .setParameter(rxDirectionA.getLgx().getLgxPortRack())
110                 .setParameter(rxDirectionA.getLgx().getLgxPortShelf());
111         builder.setParameter(rxDirectionA.getTail().getTailRoadm().getNodeId());
112         builder.setParameter(rxDirectionA.getTail().getXponderPort().getCircuitPackName());
113         builder.setParameter(rxDirectionA.getTail().getXponderPort().getPortName());
114         builder.setParameter(rxDirectionA.getTail().getTailRoadmPortAid());
115         builder.setParameter(rxDirectionA.getTail().getTailRoadmPortRackLocation());
116
117         builder.setParameter(servicePath.getServiceAEnd().getOpticType().getName());
118
119         Router routerA = servicePath.getServiceAEnd().getRouter();
120         builder.setParameter(routerA.getNodeId()).setParameter(routerA.getIpAddress().toString())
121                 .setParameter(routerA.getUrl());
122         builder.setParameter(servicePath.getServiceAEnd().getUserLabel());
123
124         ServiceZEnd serviceZEnd = servicePath.getServiceZEnd();
125         builder.setParameter(serviceZEnd.getServiceFormat().getName()).setParameter(serviceZEnd.getServiceRate())
126                 .setParameter(serviceZEnd.getClli()).setParameter(serviceZEnd.getNodeId());
127
128         // tx port stuff
129         Port zendTxDirection = serviceZEnd.getTxDirection().getPort();
130         builder.setParameter(zendTxDirection.getPortDeviceName()).setParameter(zendTxDirection.getPortName())
131                 .setParameter(zendTxDirection.getPortRack()).setParameter(zendTxDirection.getPortShelf())
132                 .setParameter(zendTxDirection.getPortSlot()).setParameter(zendTxDirection.getPortSubSlot());
133
134         // tx lgx stuff
135         TxDirection txDirectionZ = serviceZEnd.getTxDirection();
136         builder.setParameter(txDirectionZ.getLgx().getLgxDeviceName())
137                 .setParameter(txDirectionZ.getLgx().getLgxPortName())
138                 .setParameter(txDirectionZ.getLgx().getLgxPortRack())
139                 .setParameter(txDirectionZ.getLgx().getLgxPortShelf());
140         builder.setParameter(txDirectionZ.getTail().getTailRoadm().getNodeId());
141         builder.setParameter(txDirectionZ.getTail().getXponderPort().getCircuitPackName());
142         builder.setParameter(txDirectionZ.getTail().getXponderPort().getPortName());
143         builder.setParameter(txDirectionZ.getTail().getTailRoadmPortAid());
144         builder.setParameter(txDirectionZ.getTail().getTailRoadmPortRackLocation());
145
146         // rx lgx stuff
147         RxDirection rxDirectionZ = servicePath.getServiceAEnd().getRxDirection();
148         builder.setParameter(rxDirectionZ.getLgx().getLgxDeviceName())
149                 .setParameter(rxDirectionZ.getLgx().getLgxPortName())
150                 .setParameter(rxDirectionZ.getLgx().getLgxPortRack())
151                 .setParameter(rxDirectionZ.getLgx().getLgxPortShelf());
152         builder.setParameter(rxDirectionZ.getTail().getTailRoadm().getNodeId());
153         builder.setParameter(rxDirectionZ.getTail().getXponderPort().getCircuitPackName());
154         builder.setParameter(rxDirectionZ.getTail().getXponderPort().getPortName());
155         builder.setParameter(rxDirectionZ.getTail().getTailRoadmPortAid());
156         builder.setParameter(rxDirectionZ.getTail().getTailRoadmPortRackLocation());
157
158         builder.setParameter(servicePath.getServiceAEnd().getOpticType().getName());
159
160         Router routerZ = servicePath.getServiceZEnd().getRouter();
161         builder.setParameter(routerZ.getNodeId()).setParameter(routerZ.getIpAddress().toString())
162                 .setParameter(routerZ.getUrl());
163         builder.setParameter(servicePath.getServiceZEnd().getUserLabel());
164
165         String customerCode = "";
166         if ((servicePath.getHardConstraints().getCustomerCode() == null)
167                 || servicePath.getHardConstraints().getCustomerCode().isEmpty()) {
168             customerCode = servicePath.getHardConstraints().getCustomerCode().iterator().next();
169         }
170         builder.setParameter(customerCode);
171         builder.setParameter(servicePath.getDueDate().getValue());
172         builder.setParameter(servicePath.getEndDate().getValue());
173         builder.setParameter(servicePath.getNcCode());
174         builder.setParameter(servicePath.getNciCode());
175         builder.setParameter(servicePath.getSecondaryNciCode());
176         builder.setParameter(servicePath.getCustomer());
177         builder.setParameter(servicePath.getCustomerContact());
178         builder.setParameter(servicePath.getOperatorContact());
179         builder.setParameter(servicePath.getLatency());
180         String fiberSpanSrlgs = "";
181         if ((servicePath.getFiberSpanSrlgs() == null) || servicePath.getFiberSpanSrlgs().isEmpty()) {
182             fiberSpanSrlgs = servicePath.getFiberSpanSrlgs().iterator().next();
183         }
184         String supportingServiceName = "";
185         if ((servicePath.getSupportingServiceName() == null) || servicePath.getSupportingServiceName().isEmpty()) {
186             supportingServiceName = servicePath.getSupportingServiceName().iterator().next();
187         }
188         // TODO: hard constraints and soft constraints are missing
189         builder.setParameter(fiberSpanSrlgs);
190         builder.setParameter(supportingServiceName);
191         builder.setParameter(getCurrentTimestamp());
192         builder.setParameter(getCurrentTimestamp());
193     }
194
195     /**
196      * If the input value is null or empty string returns an empty string otherwise
197      * its value.
198      *
199      * @param value a value potentially NULL
200      * @return String the string value potentially empty if value is NULL
201      */
202     private static String getStringOf(String value) {
203         return Strings.isNullOrEmpty(value) ? "" : value;
204     }
205 }