2 * Copyright (c) 2013 Cisco Systems, Inc. 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.protocol.pcep.object;
10 import java.util.ArrayList;
11 import java.util.Collections;
12 import java.util.List;
14 import org.opendaylight.protocol.pcep.PCEPObject;
17 * Structure that combines set of related objects.
19 * @see <a href="http://tools.ietf.org/html/rfc5440#section-6.7">Error (PCErr)
20 * Message</a> - <error>
22 public class CompositeErrorObject {
24 private List<PCEPRequestParameterObject> requestParameters;
26 private final List<PCEPErrorObject> errors;
28 public CompositeErrorObject(final PCEPRequestParameterObject requestParameter, final PCEPErrorObject error) {
29 this(new ArrayList<PCEPRequestParameterObject>() {
30 private static final long serialVersionUID = -3974192068960284132L;
33 if (requestParameter != null)
34 this.add(requestParameter);
36 }, new ArrayList<PCEPErrorObject>() {
37 private static final long serialVersionUID = -3976331879683713909L;
47 * Constructs basic composite object only with mandatory objects.
50 * List<PCEPErrorObject>. Can't be null or empty.
52 public CompositeErrorObject(List<PCEPErrorObject> errors) {
57 * Constructs composite object with optional objects.
59 * @param requestParameters
60 * List<PCEPRequestParameterObject>
62 * List<PCEPErrorObject>. Can't be null or empty.
64 public CompositeErrorObject(List<PCEPRequestParameterObject> requestParameters, List<PCEPErrorObject> errors) {
66 if (errors == null || errors.isEmpty())
67 throw new IllegalArgumentException("Error Object is mandatory.");
69 if (requestParameters != null)
70 this.requestParameters = requestParameters;
72 this.requestParameters = Collections.emptyList();
76 * Gets list of all objects, which are in appropriate order.
78 * @return List<PCEPObject>. Can't be null or empty.
80 public List<PCEPObject> getCompositeAsList() {
81 final List<PCEPObject> list = new ArrayList<PCEPObject>();
82 if (this.requestParameters != null && !this.requestParameters.isEmpty())
83 list.addAll(this.requestParameters);
84 list.addAll(this.errors);
89 * Creates this object from a list of PCEPObjects.
92 * List<PCEPObject> list of PCEPObjects from whose this object
94 * @return CompositeErrorObject
96 public static CompositeErrorObject getCompositeFromList(List<PCEPObject> objects) {
97 if (objects == null || objects.isEmpty())
98 throw new IllegalArgumentException("List cannot be null or empty.");
100 final List<PCEPRequestParameterObject> requestParameters = new ArrayList<PCEPRequestParameterObject>();
101 final List<PCEPErrorObject> errors = new ArrayList<PCEPErrorObject>();
104 while (!objects.isEmpty()) {
105 final PCEPObject obj = objects.get(0);
109 if (obj instanceof PCEPRequestParameterObject) {
110 requestParameters.add((PCEPRequestParameterObject) obj);
116 if (obj instanceof PCEPErrorObject) {
117 errors.add((PCEPErrorObject) obj);
130 if (errors.isEmpty())
131 throw new IllegalArgumentException("Atleast one PCEPErrorObject is mandatory.");
133 return new CompositeErrorObject(requestParameters, errors);
137 * Gets list of {@link PCEPRequestParameterObject}.
139 * @return List<PCEPRequestParameterObject>. Can't be null, but may be
142 public List<PCEPRequestParameterObject> getRequestParameters() {
143 return this.requestParameters;
147 * Gets list of {@link PCEPErrorObject}
149 * @return List<PCEPErrorObject>. Can't be null or empty.
151 public List<PCEPErrorObject> getErrors() {
156 public int hashCode() {
157 final int prime = 31;
159 result = prime * result + ((this.errors == null) ? 0 : this.errors.hashCode());
160 result = prime * result + ((this.requestParameters == null) ? 0 : this.requestParameters.hashCode());
165 public boolean equals(Object obj) {
170 if (this.getClass() != obj.getClass())
172 final CompositeErrorObject other = (CompositeErrorObject) obj;
173 if (this.errors == null) {
174 if (other.errors != null)
176 } else if (!this.errors.equals(other.errors))
178 if (this.requestParameters == null) {
179 if (other.requestParameters != null)
181 } else if (!this.requestParameters.equals(other.requestParameters))
187 public String toString() {
188 final StringBuilder builder = new StringBuilder();
189 builder.append("CompositeErrorObject [requestParameters=");
190 builder.append(this.requestParameters);
191 builder.append(", errors=");
192 builder.append(this.errors);
194 return builder.toString();