/******************************************************************************* * Copyright (c) 1998, 2015 Oracle and/or its affiliates. All rights reserved. * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0 * which accompanies this distribution. * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html * and the Eclipse Distribution License is available at * http://www.eclipse.org/org/documents/edl-v10.php. * * Contributors: * Chris Delahunt (Oracle) May 13, 2008-1.0M8 * - New file introduced for bug 217164. * 05/16/2008-1.0M8 Guy Pelletier * - 218084: Implement metadata merging functionality between mapping files * 11/06/2009-2.0 Guy Pelletier * - 286317: UniqueConstraint xml element is changing (plus couple other fixes, see bug) * 03/29/2010-2.1 Guy Pelletier * - 267217: Add Named Access Type to EclipseLink-ORM * 04/09/2010-2.1 Guy Pelletier * - 307050: Add defaults for access methods of a VIRTUAL access type * 04/27/2010-2.1 Guy Pelletier * - 309856: MappedSuperclasses from XML are not being initialized properly * 03/24/2011-2.3 Guy Pelletier * - 337323: Multi-tenant with shared schema support (part 1) ******************************************************************************/ package org.eclipse.persistence.internal.jpa.metadata.mappings; import org.eclipse.persistence.annotations.VirtualAccessMethods; import org.eclipse.persistence.internal.jpa.metadata.ORMetadata; import org.eclipse.persistence.internal.jpa.metadata.accessors.MetadataAccessor; import org.eclipse.persistence.internal.jpa.metadata.accessors.objects.MetadataAnnotation; /** * INTERNAL: * Metadata for user specified property access methods and also used with * VIRTUAL access types. When specified in XML the set and get method names * are required. For VIRTUAL access defaults we use the defaults "get" and * "set" if no access methods are specified. * * Key notes: * - any metadata mapped from XML to this class must be compared in the * equals method. * - when loading from annotations, the constructor accepts the metadata * accessor this metadata was loaded from. Used it to look up any * 'companion' annotation needed for processing. * - methods should be preserved in alphabetical order. * * @author Chris Delahunt * @since EclipseLink 1.0M8 */ public class AccessMethodsMetadata extends ORMetadata { // Access method names are required in XML, therefore will override these // default values used for VIRTUAL access defaults. String getMethodName = "get"; String setMethodName = "set"; public AccessMethodsMetadata(MetadataAnnotation virtualAccessMethods, MetadataAccessor accessor){ super(virtualAccessMethods, accessor); if (virtualAccessMethods.getName().equals(VirtualAccessMethods.class.getName())){ if (virtualAccessMethods.hasAttribute("get")) { this.getMethodName = virtualAccessMethods.getAttributeString("get"); } if (virtualAccessMethods.hasAttribute("set")) { this.setMethodName = virtualAccessMethods.getAttributeString("set"); } } } /** * INTERNAL: * Used for XML loading. */ public AccessMethodsMetadata() { super("<access-methods>"); } /** * INTERNAL: */ public AccessMethodsMetadata clone() { AccessMethodsMetadata accessMethods = new AccessMethodsMetadata(); accessMethods.setGetMethodName(getGetMethodName()); accessMethods.setSetMethodName(getSetMethodName()); return accessMethods; } /** * INTERNAL: */ @Override public boolean equals(Object objectToCompare) { if (objectToCompare instanceof AccessMethodsMetadata) { AccessMethodsMetadata accessMethods = (AccessMethodsMetadata) objectToCompare; if (! valuesMatch(getMethodName, accessMethods.getGetMethodName())) { return false; } return valuesMatch(setMethodName, accessMethods.getSetMethodName()); } return false; } @Override public int hashCode() { int result = getMethodName != null ? getMethodName.hashCode() : 0; result = 31 * result + (setMethodName != null ? setMethodName.hashCode() : 0); return result; } /** * INTERNAL: * Used for OX mapping. */ public String getGetMethodName(){ return getMethodName; } /** * INTERNAL: * Used for OX mapping. */ public String getSetMethodName(){ return setMethodName; } /** * INTERNAL: * Used for OX mapping. */ public void setGetMethodName(String getMethodName){ this.getMethodName = getMethodName; } /** * INTERNAL: * Used for OX mapping. */ public void setSetMethodName(String setMethodName){ this.setMethodName = setMethodName; } /** * INTERNAL: * Used for validation exception message string and debugging. */ public String toString() { return "Get method name: " + getMethodName + ", Set method name: " + setMethodName; } }