58a44044fad9e0194d7789c00b31955706ebdd2e
[netconf.git] / netconf / netconf-topology-singleton / src / main / java / org / opendaylight / netconf / topology / singleton / messages / action / InvokeActionMessage.java
1 /*
2  * Copyright (C) 2019 Ericsson Software Technology AB. 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.netconf.topology.singleton.messages.action;
9
10 import static java.util.Objects.requireNonNull;
11
12 import java.io.Externalizable;
13 import java.io.IOException;
14 import java.io.ObjectInput;
15 import java.io.ObjectOutput;
16 import java.io.Serializable;
17 import org.eclipse.jdt.annotation.Nullable;
18 import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier;
19 import org.opendaylight.netconf.topology.singleton.messages.ContainerNodeMessage;
20 import org.opendaylight.netconf.topology.singleton.messages.SchemaPathMessage;
21 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
22
23 /**
24  * Message container which holds node data in {@link SchemaPathMessage}, {@link ContainerNodeMessage} and
25  * {@link DOMDataTreeIdentifier} prepared to send between remote hosts with serialization when action operation is
26  * invoked.
27  */
28 public class InvokeActionMessage implements Serializable {
29     private static final long serialVersionUID = 1L;
30
31     private final SchemaPathMessage schemaPathMessage;
32     private final ContainerNodeMessage containerNodeMessage;
33     private final DOMDataTreeIdentifier domDataTreeIdentifier;
34
35     /**
36      * Constructor for {@code InvokeActionMessage}.
37      *
38      * @param schemaPathMessage SchemaPathMessage
39      * @param containerNodeMessage ContainerNodeMessage
40      * @param domDataTreeIdentifier DOMDataTreeIdentifier
41      */
42     public InvokeActionMessage(final SchemaPathMessage schemaPathMessage,
43         final @Nullable ContainerNodeMessage containerNodeMessage, final DOMDataTreeIdentifier domDataTreeIdentifier) {
44         this.schemaPathMessage = requireNonNull(schemaPathMessage);
45         this.containerNodeMessage = requireNonNull(containerNodeMessage);
46         this.domDataTreeIdentifier = requireNonNull(domDataTreeIdentifier);
47     }
48
49     public SchemaPath getSchemaPath() {
50         return schemaPathMessage.getSchemaPath();
51     }
52
53     private SchemaPathMessage getSchemaPathMessage() {
54         return schemaPathMessage;
55     }
56
57     public @Nullable ContainerNodeMessage getContainerNodeMessage() {
58         return containerNodeMessage;
59     }
60
61     public DOMDataTreeIdentifier getDOMDataTreeIdentifier() {
62         return domDataTreeIdentifier;
63     }
64
65     private Object writeReplace() {
66         return new Proxy(this);
67     }
68
69     @Override
70     public String toString() {
71         return "InvokeActionMessage [schemaPathMessage=" + schemaPathMessage + ", containerNodeMessage="
72             + containerNodeMessage + ", domDataTreeIdentifier=" + domDataTreeIdentifier + "]";
73     }
74
75     private static class Proxy implements Externalizable {
76         private static final long serialVersionUID = 2L;
77
78         private InvokeActionMessage invokeActionMessage;
79
80         @SuppressWarnings("checkstyle:RedundantModifier")
81         public Proxy() {
82             //Due to Externalizable
83         }
84
85         Proxy(final InvokeActionMessage invokeActionMessage) {
86             this.invokeActionMessage = invokeActionMessage;
87         }
88
89         @Override
90         public void writeExternal(final ObjectOutput out) throws IOException {
91             out.writeObject(invokeActionMessage.getSchemaPathMessage());
92             out.writeObject(invokeActionMessage.getContainerNodeMessage());
93             out.writeObject(invokeActionMessage.getDOMDataTreeIdentifier());
94         }
95
96         @Override
97         public void readExternal(final ObjectInput in) throws IOException, ClassNotFoundException {
98             invokeActionMessage = new InvokeActionMessage((SchemaPathMessage) in.readObject(),
99                 (ContainerNodeMessage) in.readObject(), (DOMDataTreeIdentifier) in.readObject());
100         }
101
102         private Object readResolve() {
103             return invokeActionMessage;
104         }
105     }
106 }