/******************************************************************************* * Copyright (c) 2001, 2005 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.jem.internal.beaninfo.vm; /* */ import java.beans.*; /** * IndexedPropertyDescriptor equality tester */ public class IndexedPropertyDescriptorEquality extends PropertyDescriptorEquality { static void INIT() { try { MAP_EQUALITY.put(IndexedPropertyDescriptor.class, (IndexedPropertyDescriptorEquality.class).getConstructor(new Class[] {PropertyDescriptor.class})); MAP_EQUALITY.put(PropertyDescriptor.class, (IndexedPropertyDescriptorEquality.class).getConstructor(new Class[] {PropertyDescriptor.class})); } catch (NoSuchMethodException e) { } } public IndexedPropertyDescriptorEquality() { } public IndexedPropertyDescriptorEquality(PropertyDescriptor descr) { super(descr); } /** * Calculate the hashcode for the current feature, add this * to the hashcode received from super.calculateHashCode * and return the new value. * * NOTE: for subclasses, it is MANDITORY that the first line be: * int hashcode = super.calculateHashCode(); * and the last line be: * return hashcode*31 + (your calculated hashcode for just this subclass); */ protected int calculateHashCode() { int hashcode = super.calculateHashCode(); if (fFeature instanceof IndexedPropertyDescriptor) { IndexedPropertyDescriptor pd = (IndexedPropertyDescriptor) fFeature; int hc = pd.getIndexedPropertyType().hashCode(); if (pd.getIndexedReadMethod() != null) hc += pd.getIndexedReadMethod().hashCode(); if (pd.getIndexedWriteMethod() != null) hc += pd.getIndexedWriteMethod().hashCode(); return hashcode*31 + hc; } else return hashcode; } public boolean equals(Object obj) { if (!(obj instanceof FeatureDescriptorEquality)) return false; if (identityTest(obj)) return true; if (fFeature.getClass() != ((FeatureDescriptorEquality) obj).fFeature.getClass()) return false; // If they aren't both PropertyDesciptors or IndexedPropertyDescriptors, then they don't match. if (!super.equals(obj)) return false; if (fFeature instanceof IndexedPropertyDescriptor) { IndexedPropertyDescriptor op = (IndexedPropertyDescriptor) ((FeatureDescriptorEquality) obj).fFeature; IndexedPropertyDescriptor fp = (IndexedPropertyDescriptor) fFeature; if (op.getIndexedPropertyType() != fp.getIndexedPropertyType()) return false; if (op.getIndexedReadMethod() != fp.getIndexedReadMethod()) return false; if (op.getIndexedWriteMethod() != fp.getIndexedWriteMethod()) return false; } return true; } }