/* * 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 net.jini.core.lookup; import net.jini.core.entry.Entry; /** * Items in the lookup service are matched using instance of this class. * A service item (item) matches a service template (tmpl) if: * item.serviceID equals tmpl.serviceID (or if tmpl.serviceID is null); * and item.service is an instance of every type in tmpl.serviceTypes; and * item.attributeSets contains at least one matching entry for each entry * template in tmpl.attributeSetTemplates. * <p> * An entry matches * an entry template if the class of the template is the same as, or a * superclass of, the class of the entry, and every non-null field in the * template equals the corresponding field of the entry. Every entry can be * used to match more than one template. Note that in a service template, * for serviceTypes and attributeSetTemplates, a null field is equivalent to * an empty array; both represent a wildcard. * * @author Sun Microsystems, Inc. * * @since 1.0 */ public class ServiceTemplate implements java.io.Serializable { private static final long serialVersionUID = 7854483807886483216L; /** * Service ID to match, or <tt>null</tt>. * * @serial */ public ServiceID serviceID; /** * Service types to match, or <tt>null</tt>. * * @serial */ public Class[] serviceTypes; /** * Attribute set templates to match, or <tt>null</tt>. * * @serial */ public Entry[] attributeSetTemplates; /** * Simple constructor. * * @param serviceID service ID to match, or null * @param serviceTypes service types to match, or null * @param attrSetTemplates attribute set templates to match, or null */ public ServiceTemplate(ServiceID serviceID, Class[] serviceTypes, Entry[] attrSetTemplates) { this.serviceID = serviceID; this.serviceTypes = serviceTypes; this.attributeSetTemplates = attrSetTemplates; } /** * Returns a <code>String</code> representation of this * <code>ServiceTemplate</code>. * @return <code>String</code> representation of this * <code>ServiceTemplate</code> */ public String toString() { StringBuffer sBuffer = new StringBuffer(); sBuffer.append( getClass().getName()).append( "[serviceID=").append( serviceID).append( ", serviceTypes="); if (serviceTypes != null) { sBuffer.append("["); if (serviceTypes.length > 0) { for (int i = 0; i < serviceTypes.length - 1; i++) sBuffer.append(serviceTypes[i]).append(" "); sBuffer.append(serviceTypes[serviceTypes.length - 1]); } sBuffer.append("]"); } else { sBuffer.append((Object)null); } sBuffer.append(", attributeSetTemplates="); if (attributeSetTemplates != null) { sBuffer.append("["); if (attributeSetTemplates.length > 0) { for (int i = 0; i < attributeSetTemplates.length - 1; i++) sBuffer.append(attributeSetTemplates[i]).append(" "); sBuffer.append( attributeSetTemplates[attributeSetTemplates.length - 1]); } sBuffer.append("]"); } else { sBuffer.append((Object)null); } return sBuffer.append("]").toString(); } }