d2f56385053a6442638f11103585e9cd1d22bb0b
[appc.git] / appc-adapters / appc-netconf-adapter / appc-netconf-adapter-bundle / src / main / java / org / openecomp / appc / adapter / netconf / internal / NetconfAdapter2.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * openECOMP : APP-C
4  * ================================================================================
5  * Copyright (C) 2017 AT&T Intellectual Property. All rights
6  *                                              reserved.
7  * ================================================================================
8  * Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  * 
12  *      http://www.apache.org/licenses/LICENSE-2.0
13  * 
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  * ============LICENSE_END=========================================================
20  */
21
22 package org.openecomp.appc.adapter.netconf.internal;
23
24 import org.slf4j.Logger;
25 import org.slf4j.LoggerFactory;
26
27 import java.io.*;
28
29 /**
30  * Provides basic methods for exchanging netconf messages.
31  */
32 public class NetconfAdapter2 {
33
34     private static final Logger LOG = LoggerFactory.getLogger(NetconfAdapter2.class);
35
36     // device input pipe
37     private final PipedOutputStream pipedOutIn = new PipedOutputStream();
38     private PipedInputStream in;
39     // device output pipe
40     private final PipedInputStream pipedInOut = new PipedInputStream();
41     private PipedOutputStream out;
42
43     /**
44      * Constructor.
45      *
46      * @throws IOException
47      */
48     public NetconfAdapter2() throws IOException {
49         in = new PipedInputStream(pipedOutIn);
50         out = new PipedOutputStream(pipedInOut);
51     }
52
53     /**
54      * @return InputStream this instance will read netconf messages from.
55      */
56     public InputStream getIn() {
57         return in;
58     }
59
60     /**
61      * @return OutputStream this instance will write netconf messages to.
62      */
63     public OutputStream getOut() {
64         return out;
65     }
66
67     /**
68      * Receives netconf message from InputStream and return it's text (without netconf frame characters).
69      *
70      * @return text of message received from netconf device
71      * @throws IOException
72      */
73     public String receiveMessage() throws IOException {
74         NetconfMessage message = new NetconfMessage();
75         byte[] buf = new byte[1024];
76         int c;
77         while((c = pipedInOut.read(buf)) > 0) {
78                 message.append(buf, 0, c);
79                 if (message.isCompleted()) {
80                     break;
81                 }
82         }
83         String text = message.getText();
84         if(LOG.isDebugEnabled()) {
85             LOG.debug("Received message from netconf device:\n" + text);
86         }
87         return text;
88     }
89
90     /**
91      * Sends netconf message with provided text (adds netconf frame characters and sends the message).
92      *
93      * @param text text of message to be sent to netconf device
94      * @throws IOException
95      */
96     public void sendMessage(final String text) throws IOException {
97         if(LOG.isDebugEnabled()) {
98             LOG.debug("Sending message to netconf device:\n" + text);
99         }
100         pipedOutIn.write(new NetconfMessage(text).getFrame());
101     }
102 }