/* * Copyright 2014-present Open Networking Laboratory * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.onosproject.net.device; import org.onosproject.net.AbstractDescription; import org.onosproject.net.SparseAnnotations; import org.onlab.packet.ChassisId; import java.net.URI; import static com.google.common.base.MoreObjects.toStringHelper; import static com.google.common.base.Preconditions.checkNotNull; import static org.onosproject.net.Device.Type; import com.google.common.base.Objects; /** * Default implementation of immutable device description entity. */ public class DefaultDeviceDescription extends AbstractDescription implements DeviceDescription { private final URI uri; private final Type type; private final String manufacturer; private final String hwVersion; private final String swVersion; private final String serialNumber; private final ChassisId chassisId; private final boolean defaultAvailable; /** * Creates a device description using the supplied information. * * @param uri device URI * @param type device type * @param manufacturer device manufacturer * @param hwVersion device HW version * @param swVersion device SW version * @param serialNumber device serial number * @param chassis chassis id * @param annotations optional key/value annotations map */ public DefaultDeviceDescription(URI uri, Type type, String manufacturer, String hwVersion, String swVersion, String serialNumber, ChassisId chassis, SparseAnnotations... annotations) { this(uri, type, manufacturer, hwVersion, swVersion, serialNumber, chassis, true, annotations); } /** * Creates a device description using the supplied information. * * @param uri device URI * @param type device type * @param manufacturer device manufacturer * @param hwVersion device HW version * @param swVersion device SW version * @param serialNumber device serial number * @param chassis chassis id * @param defaultAvailable optional whether device is by default available * @param annotations optional key/value annotations map */ public DefaultDeviceDescription(URI uri, Type type, String manufacturer, String hwVersion, String swVersion, String serialNumber, ChassisId chassis, boolean defaultAvailable, SparseAnnotations... annotations) { super(annotations); this.uri = checkNotNull(uri, "Device URI cannot be null"); this.type = checkNotNull(type, "Device type cannot be null"); this.manufacturer = manufacturer; this.hwVersion = hwVersion; this.swVersion = swVersion; this.serialNumber = serialNumber; this.chassisId = chassis; this.defaultAvailable = defaultAvailable; } /** * Creates a device description using the supplied information. * @param base DeviceDescription to basic information * @param annotations Annotations to use. */ public DefaultDeviceDescription(DeviceDescription base, SparseAnnotations... annotations) { this(base.deviceUri(), base.type(), base.manufacturer(), base.hwVersion(), base.swVersion(), base.serialNumber(), base.chassisId(), base.isDefaultAvailable(), annotations); } /** * Creates a device description using the supplied information. * @param base DeviceDescription to basic information (except for type) * @param type device type * @param annotations Annotations to use. */ public DefaultDeviceDescription(DeviceDescription base, Type type, SparseAnnotations... annotations) { this(base.deviceUri(), type, base.manufacturer(), base.hwVersion(), base.swVersion(), base.serialNumber(), base.chassisId(), base.isDefaultAvailable(), annotations); } /** * Creates a device description using the supplied information. * * @param base DeviceDescription to basic information (except for defaultAvailable) * @param defaultAvailable whether device should be made available by default * @param annotations Annotations to use. */ public DefaultDeviceDescription(DeviceDescription base, boolean defaultAvailable, SparseAnnotations... annotations) { this(base.deviceUri(), base.type(), base.manufacturer(), base.hwVersion(), base.swVersion(), base.serialNumber(), base.chassisId(), defaultAvailable, annotations); } @Override public URI deviceUri() { return uri; } @Override public Type type() { return type; } @Override public String manufacturer() { return manufacturer; } @Override public String hwVersion() { return hwVersion; } @Override public String swVersion() { return swVersion; } @Override public String serialNumber() { return serialNumber; } @Override public ChassisId chassisId() { return chassisId; } @Override public boolean isDefaultAvailable() { return defaultAvailable; } @Override public String toString() { return toStringHelper(this) .add("uri", uri).add("type", type).add("mfr", manufacturer) .add("hw", hwVersion).add("sw", swVersion) .add("serial", serialNumber) .add("annotations", annotations()) .toString(); } @Override public int hashCode() { return Objects.hashCode(super.hashCode(), uri, type, manufacturer, hwVersion, swVersion, serialNumber, chassisId, defaultAvailable); } @Override public boolean equals(Object object) { if (object instanceof DefaultDeviceDescription) { if (!super.equals(object)) { return false; } DefaultDeviceDescription that = (DefaultDeviceDescription) object; return Objects.equal(this.uri, that.uri) && Objects.equal(this.type, that.type) && Objects.equal(this.manufacturer, that.manufacturer) && Objects.equal(this.hwVersion, that.hwVersion) && Objects.equal(this.swVersion, that.swVersion) && Objects.equal(this.serialNumber, that.serialNumber) && Objects.equal(this.chassisId, that.chassisId) && Objects.equal(this.defaultAvailable, that.defaultAvailable); } return false; } // default constructor for serialization DefaultDeviceDescription() { this.uri = null; this.type = null; this.manufacturer = null; this.hwVersion = null; this.swVersion = null; this.serialNumber = null; this.chassisId = null; this.defaultAvailable = true; } }