2 * Copyright (c) 2016 Ericsson India Global Services Pvt Ltd. and others. All rights reserved.
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
8 package org.opendaylight.genius.mdsalutil;
10 import com.google.common.base.MoreObjects;
11 import java.io.Serializable;
12 import java.math.BigInteger;
13 import java.util.Arrays;
14 import java.util.Objects;
15 import org.opendaylight.genius.utils.MoreObjects2;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action;
18 public class ActionInfo implements Serializable {
20 private static final long serialVersionUID = 1L;
22 private final ActionType m_actionType;
23 private final String[] m_asActionValues;
24 private final String[][] m_asActionValuesMatrix;
25 private final BigInteger[] m_aBigIntValues;
26 private final int m_actionKey;
28 public ActionInfo(ActionInfo action) {
30 m_actionType = action.m_actionType;
31 m_actionKey = action.m_actionKey;
32 m_asActionValuesMatrix = new String[action.m_asActionValuesMatrix.length][];
33 for(int i = 0; i < action.m_asActionValuesMatrix.length; i++){
34 m_asActionValuesMatrix[i] = Arrays.copyOf(action.m_asActionValuesMatrix[i], action.m_asActionValuesMatrix[i].length);
37 m_asActionValues = Arrays.copyOf(action.m_asActionValues, action.m_asActionValues.length);
38 m_aBigIntValues = null;
41 public ActionInfo(ActionType actionType, String[] asActionValues) {
42 m_actionType = actionType;
44 m_asActionValues = asActionValues;
45 m_asActionValuesMatrix = null;
46 m_aBigIntValues = null;
49 public ActionInfo(ActionType actionType, String[] asActionValues, int actionKey) {
50 m_actionType = actionType;
51 m_actionKey = actionKey;
52 m_asActionValues = asActionValues;
53 m_asActionValuesMatrix = null;
54 m_aBigIntValues = null;
57 public ActionInfo(ActionType actionType, BigInteger[] aBigIntValues) {
58 m_actionType = actionType;
60 m_aBigIntValues = aBigIntValues;
61 m_asActionValuesMatrix = null;
62 m_asActionValues = null;
65 public ActionInfo(ActionType actionType, BigInteger[] aBigIntValues, int actionKey) {
66 m_actionType = actionType;
67 m_actionKey = actionKey;
68 m_aBigIntValues = aBigIntValues;
69 m_asActionValuesMatrix = null;
70 m_asActionValues = null;
73 public ActionInfo(ActionType actionType, String[] asActionValues, String[][] asActionValuesMatrix, int actionKey) {
74 m_actionType = actionType;
75 m_actionKey = actionKey;
76 m_aBigIntValues = null;
77 m_asActionValuesMatrix = asActionValuesMatrix;
78 m_asActionValues = asActionValues;
81 public ActionInfo(ActionType actionType, String[] asActionValues, String[][] asActionValuesMatrix) {
82 this(actionType, asActionValues, asActionValuesMatrix, 0);
85 public int getActionKey() {
89 public Action buildAction() {
90 return m_actionType.buildAction(getActionKey(), this);
93 public ActionType getActionType() {
97 public String[] getActionValues() {
98 return m_asActionValues;
101 public BigInteger[] getBigActionValues() {
102 return m_aBigIntValues;
105 public String[][] getActionValuesMatrix() {
106 return m_asActionValuesMatrix;
110 public String toString() {
111 return MoreObjects.toStringHelper(this).omitNullValues().add("actionType", m_actionType)
112 .add("actionValues", Arrays.deepToString(m_asActionValues))
113 .add("bigActionValues", Arrays.deepToString(m_aBigIntValues))
114 .add("actionKey", m_actionKey).toString();
118 public int hashCode() {
119 // BEWARE, Caveat Emptor: Array ([]) type fields must use
120 // Arrays.hashCode(). deepHashCode() would have to be used for nested
122 return Objects.hash(m_actionType, Arrays.hashCode(m_asActionValues), Arrays.hashCode(m_aBigIntValues),
127 public boolean equals(Object obj) {
128 // BEWARE, Caveat Emptor: Array ([]) type fields must use
129 // Arrays.equals(). deepEquals() would have to be used for nested
130 // arrays. Use == only for primitive types; if ever changing
131 // those field types, must change to Objects.equals.
132 return MoreObjects2.equalsHelper(this, obj,
133 (self, other) -> Objects.equals(self.m_actionType, other.m_actionType)
134 && Arrays.equals(self.m_asActionValues, other.m_asActionValues)
135 && Arrays.equals(self.m_aBigIntValues, other.m_aBigIntValues)
136 && self.m_actionKey == other.m_actionKey);