/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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 com.sun.jini.reggie;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.rmi.MarshalledObject;
import net.jini.core.lookup.ServiceEvent;
import net.jini.core.lookup.ServiceID;
import net.jini.core.lookup.ServiceItem;
/**
* Concrete implementation class for abstract ServiceEvent.
*
* @author Sun Microsystems, Inc.
*
*/
class RegistrarEvent extends ServiceEvent {
private static final long serialVersionUID = 2L;
/**
* The new state of the item, or null if the item has been
* deleted from the lookup service. This is either a ServiceItem
* or an Item (to be converted to a ServiceItem when unmarshalled).
*
* @serial
*/
protected Object item;
/**
* The service ID of the item that triggered the event. This field is used
* instead of the inherited serviceID field (which is set to null) and is
* written directly as a 128-bit value in order to avoid potential codebase
* annotation loss (see bug 4745728).
*/
protected transient ServiceID servID;
/**
* Simple constructor.
*
* @param source the ServiceRegistrar that generated the event
* @param eventID the registration eventID
* @param seqNo the sequence number of this event
* @param handback the client handback
* @param serviceID the serviceID of the item that triggered the event
* @param transition the transition that triggered the event
* @param item the new state of the item, or null if deleted
*/
public RegistrarEvent(Object source,
long eventID,
long seqNo,
MarshalledObject handback,
ServiceID serviceID,
int transition,
Item item)
{
super(source, eventID, seqNo, handback, null, transition);
this.item = item;
servID = serviceID;
}
/**
* Returns the new state of the item, or null if the item was deleted
* from the lookup service.
*/
public ServiceItem getServiceItem() {
return (ServiceItem)item;
}
// javadoc inherited from ServiceEvent
public ServiceID getServiceID() {
return servID;
}
/**
* Writes the default serializable field value for this instance, followed
* by the item's service ID encoded as specified by the
* ServiceID.writeBytes method.
*/
private void writeObject(ObjectOutputStream out) throws IOException {
out.defaultWriteObject();
servID.writeBytes(out);
}
/**
* Reads the default serializable field value for this instance, followed
* by the item's service ID encoded as specified by the
* ServiceID.writeBytes method. If the value of the item field is an Item
* instance, converts it to a ServiceItem.
*/
private void readObject(ObjectInputStream in)
throws IOException, ClassNotFoundException
{
in.defaultReadObject();
servID = new ServiceID(in);
if (item instanceof Item)
item = ((Item)item).get();
}
}