/*
* ============================================================================
* GNU General Public License
* ============================================================================
*
* Copyright (C) 2006-2011 Serotonin Software Technologies Inc. http://serotoninsoftware.com
* @author Matthew Lohbihler
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* When signing a commercial license with Serotonin Software Technologies Inc.,
* the following extension to GPL is made. A special exception to the GPL is
* included to allow you to distribute a combined work that includes BAcnet4J
* without being obliged to provide the source code for any proprietary components.
*/
package com.serotonin.bacnet4j.service.unconfirmed;
import com.serotonin.bacnet4j.LocalDevice;
import com.serotonin.bacnet4j.exception.BACnetException;
import com.serotonin.bacnet4j.type.constructed.Address;
import com.serotonin.bacnet4j.type.constructed.TimeStamp;
import com.serotonin.bacnet4j.type.enumerated.EventState;
import com.serotonin.bacnet4j.type.enumerated.EventType;
import com.serotonin.bacnet4j.type.enumerated.NotifyType;
import com.serotonin.bacnet4j.type.notificationParameters.NotificationParameters;
import com.serotonin.bacnet4j.type.primitive.Boolean;
import com.serotonin.bacnet4j.type.primitive.CharacterString;
import com.serotonin.bacnet4j.type.primitive.ObjectIdentifier;
import com.serotonin.bacnet4j.type.primitive.OctetString;
import com.serotonin.bacnet4j.type.primitive.UnsignedInteger;
import org.free.bacnet4j.util.ByteQueue;
public class UnconfirmedEventNotificationRequest extends UnconfirmedRequestService {
private static final long serialVersionUID = -2283491076065625819L;
public static final byte TYPE_ID = 3;
private final UnsignedInteger processIdentifier; // 0
private final ObjectIdentifier initiatingDeviceIdentifier; // 1
private final ObjectIdentifier eventObjectIdentifier; // 2
private final TimeStamp timeStamp; // 3
private final UnsignedInteger notificationClass; // 4
private final UnsignedInteger priority; // 5
private final EventType eventType; // 6
private final CharacterString messageText; // 7 optional
private final NotifyType notifyType; // 8
private final Boolean ackRequired; // 9 optional
private final EventState fromState; // 10 optional
private final EventState toState; // 11
private final NotificationParameters eventValues; // 12 optional
public UnconfirmedEventNotificationRequest(UnsignedInteger processIdentifier,
ObjectIdentifier initiatingDeviceIdentifier, ObjectIdentifier eventObjectIdentifier, TimeStamp timeStamp,
UnsignedInteger notificationClass, UnsignedInteger priority, EventType eventType,
CharacterString messageText, NotifyType notifyType, Boolean ackRequired, EventState fromState,
EventState toState, NotificationParameters eventValues) {
this.processIdentifier = processIdentifier;
this.initiatingDeviceIdentifier = initiatingDeviceIdentifier;
this.eventObjectIdentifier = eventObjectIdentifier;
this.timeStamp = timeStamp;
this.notificationClass = notificationClass;
this.priority = priority;
this.eventType = eventType;
this.messageText = messageText;
this.notifyType = notifyType;
this.ackRequired = ackRequired;
this.fromState = fromState;
this.toState = toState;
this.eventValues = eventValues;
}
@Override
public byte getChoiceId() {
return TYPE_ID;
}
@Override
public void handle(LocalDevice localDevice, Address from, OctetString linkService) {
localDevice.getEventHandler().fireEventNotification(processIdentifier,
localDevice.getRemoteDeviceCreate(initiatingDeviceIdentifier.getInstanceNumber(), from, linkService),
eventObjectIdentifier, timeStamp, notificationClass, priority, eventType, messageText, notifyType,
ackRequired, fromState, toState, eventValues);
}
@Override
public void write(ByteQueue queue) {
write(queue, processIdentifier, 0);
write(queue, initiatingDeviceIdentifier, 1);
write(queue, eventObjectIdentifier, 2);
write(queue, timeStamp, 3);
write(queue, notificationClass, 4);
write(queue, priority, 5);
write(queue, eventType, 6);
writeOptional(queue, messageText, 7);
write(queue, notifyType, 8);
writeOptional(queue, ackRequired, 9);
writeOptional(queue, fromState, 10);
write(queue, toState, 11);
writeOptional(queue, eventValues, 12);
}
UnconfirmedEventNotificationRequest(ByteQueue queue) throws BACnetException {
processIdentifier = read(queue, UnsignedInteger.class, 0);
initiatingDeviceIdentifier = read(queue, ObjectIdentifier.class, 1);
eventObjectIdentifier = read(queue, ObjectIdentifier.class, 2);
timeStamp = read(queue, TimeStamp.class, 3);
notificationClass = read(queue, UnsignedInteger.class, 4);
priority = read(queue, UnsignedInteger.class, 5);
eventType = read(queue, EventType.class, 6);
messageText = readOptional(queue, CharacterString.class, 7);
notifyType = read(queue, NotifyType.class, 8);
ackRequired = readOptional(queue, Boolean.class, 9);
fromState = readOptional(queue, EventState.class, 10);
toState = read(queue, EventState.class, 11);
eventValues = NotificationParameters.createNotificationParametersOptional(queue, 12);
}
@Override
public int hashCode() {
final int PRIME = 31;
int result = 1;
result = PRIME * result + ((ackRequired == null) ? 0 : ackRequired.hashCode());
result = PRIME * result + ((eventObjectIdentifier == null) ? 0 : eventObjectIdentifier.hashCode());
result = PRIME * result + ((eventType == null) ? 0 : eventType.hashCode());
result = PRIME * result + ((eventValues == null) ? 0 : eventValues.hashCode());
result = PRIME * result + ((fromState == null) ? 0 : fromState.hashCode());
result = PRIME * result + ((initiatingDeviceIdentifier == null) ? 0 : initiatingDeviceIdentifier.hashCode());
result = PRIME * result + ((messageText == null) ? 0 : messageText.hashCode());
result = PRIME * result + ((notificationClass == null) ? 0 : notificationClass.hashCode());
result = PRIME * result + ((notifyType == null) ? 0 : notifyType.hashCode());
result = PRIME * result + ((priority == null) ? 0 : priority.hashCode());
result = PRIME * result + ((processIdentifier == null) ? 0 : processIdentifier.hashCode());
result = PRIME * result + ((timeStamp == null) ? 0 : timeStamp.hashCode());
result = PRIME * result + ((toState == null) ? 0 : toState.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
final UnconfirmedEventNotificationRequest other = (UnconfirmedEventNotificationRequest) obj;
if (ackRequired == null) {
if (other.ackRequired != null)
return false;
}
else if (!ackRequired.equals(other.ackRequired))
return false;
if (eventObjectIdentifier == null) {
if (other.eventObjectIdentifier != null)
return false;
}
else if (!eventObjectIdentifier.equals(other.eventObjectIdentifier))
return false;
if (eventType == null) {
if (other.eventType != null)
return false;
}
else if (!eventType.equals(other.eventType))
return false;
if (eventValues == null) {
if (other.eventValues != null)
return false;
}
else if (!eventValues.equals(other.eventValues))
return false;
if (fromState == null) {
if (other.fromState != null)
return false;
}
else if (!fromState.equals(other.fromState))
return false;
if (initiatingDeviceIdentifier == null) {
if (other.initiatingDeviceIdentifier != null)
return false;
}
else if (!initiatingDeviceIdentifier.equals(other.initiatingDeviceIdentifier))
return false;
if (messageText == null) {
if (other.messageText != null)
return false;
}
else if (!messageText.equals(other.messageText))
return false;
if (notificationClass == null) {
if (other.notificationClass != null)
return false;
}
else if (!notificationClass.equals(other.notificationClass))
return false;
if (notifyType == null) {
if (other.notifyType != null)
return false;
}
else if (!notifyType.equals(other.notifyType))
return false;
if (priority == null) {
if (other.priority != null)
return false;
}
else if (!priority.equals(other.priority))
return false;
if (processIdentifier == null) {
if (other.processIdentifier != null)
return false;
}
else if (!processIdentifier.equals(other.processIdentifier))
return false;
if (timeStamp == null) {
if (other.timeStamp != null)
return false;
}
else if (!timeStamp.equals(other.timeStamp))
return false;
if (toState == null) {
if (other.toState != null)
return false;
}
else if (!toState.equals(other.toState))
return false;
return true;
}
}