/* * 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.InvalidObjectException; import java.io.ObjectInputStream; import java.io.ObjectStreamException; import java.io.Serializable; import java.rmi.RemoteException; import net.jini.core.constraint.RemoteMethodControl; import net.jini.core.entry.Entry; import net.jini.core.lease.Lease; import net.jini.core.lease.UnknownLeaseException; import net.jini.core.lookup.ServiceID; import net.jini.core.lookup.ServiceRegistration; import net.jini.id.ReferentUuid; import net.jini.id.ReferentUuids; import net.jini.id.Uuid; /** * Implementation class for the ServiceRegistration interface. * * @author Sun Microsystems, Inc. * */ class Registration implements ServiceRegistration, ReferentUuid, Serializable { private static final long serialVersionUID = 2L; /** * The registrar * * @serial */ final Registrar server; /** * The service lease * * @serial */ final ServiceLease lease; /** * Returns Registration or ConstrainableRegistration instance, depending on * whether given server implements RemoteMethodControl. */ static Registration getInstance(Registrar server, ServiceLease lease) { return (server instanceof RemoteMethodControl) ? new ConstrainableRegistration(server, lease, null) : new Registration(server, lease); } /** Constructor for use by getInstance(), ConstrainableRegistration. */ Registration(Registrar server, ServiceLease lease) { this.server = server; this.lease = lease; } // This method's javadoc is inherited from an interface of this class public ServiceID getServiceID() { return lease.getServiceID(); } // This method's javadoc is inherited from an interface of this class public Lease getLease() { return lease; } // This method's javadoc is inherited from an interface of this class public void addAttributes(Entry[] attrSets) throws UnknownLeaseException, RemoteException { server.addAttributes(lease.getServiceID(), lease.getReferentUuid(), EntryRep.toEntryRep(attrSets, true)); } // This method's javadoc is inherited from an interface of this class public void modifyAttributes(Entry[] attrSetTmpls, Entry[] attrSets) throws UnknownLeaseException, RemoteException { server.modifyAttributes(lease.getServiceID(), lease.getReferentUuid(), EntryRep.toEntryRep(attrSetTmpls, false), EntryRep.toEntryRep(attrSets, false)); } // This method's javadoc is inherited from an interface of this class public void setAttributes(Entry[] attrSets) throws UnknownLeaseException, RemoteException { server.setAttributes(lease.getServiceID(), lease.getReferentUuid(), EntryRep.toEntryRep(attrSets, true)); } // This method's javadoc is inherited from an interface of this class public Uuid getReferentUuid() { return lease.getReferentUuid(); } /** Returns the registration Uuid's hash code. */ public int hashCode() { return lease.getReferentUuid().hashCode(); } /** Returns true if registration Uuids match, false otherwise. */ public boolean equals(Object obj) { return ReferentUuids.compare(this, obj); } /** * Returns a string created from the proxy class name and the result * of calling toString on the contained lease. * * @return String */ public String toString() { return getClass().getName() + "[" + lease + "]"; } /** Verifies that member fields are non-null. */ private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException { in.defaultReadObject(); if (server == null) { throw new InvalidObjectException("null server"); } else if (lease == null) { throw new InvalidObjectException("null lease"); } } /** * Throws InvalidObjectException, since data for this class is required. */ private void readObjectNoData() throws ObjectStreamException { throw new InvalidObjectException("no data"); } }