blob: c7601d84aeadc57b9dfafc1de386445f982d0a2e [file] [log] [blame]
/*
* Copyright (c) 1998, 2021 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 v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0,
* or the Eclipse Distribution License v. 1.0 which is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
*/
// Contributors:
// James Sutherland - initial impl
// 10/21/2009-2.0 Guy Pelletier
// - 290567: mappedbyid support incomplete
// // 30/05/2012-2.4 Guy Pelletier
// - 354678: Temp classloader is still being used during metadata processing
// 11/19/2012-2.5 Guy Pelletier
// - 389090: JPA 2.1 DDL Generation Support (foreign key metadata support)
package org.eclipse.persistence.internal.jpa.metadata.accessors.objects;
import java.util.HashMap;
import java.util.Map;
/**
* Metadata representation of an annotation.
*
* @author James Sutherland
* @since EclipseLink 1.2
*/
public class MetadataAnnotation {
/** The name of the annotation. */
protected String m_name;
/** Metadata annotation flag */
protected boolean isMeta = false;
/** Map of attribute names and values. */
protected Map<String, Object> m_attributes = new HashMap<>();
/**
* Default constructor.
*/
public MetadataAnnotation() {
}
/**
* INTERNAL:
*/
public void addAttribute(String key, Object value) {
m_attributes.put(key, value);
}
/**
* INTERNAL:
* Return the attribute value, or null if not set. This should remain a
* private method and callers should use one of the more specific
* getAttribute calls. (and build one if necessary)
*
* @see #getAttributeAnnotation(String)
* @see #getAttributeArray(String)
* @see #getAttributeInteger(String)
* @see #getAttributeString(String)
* @see #getAttributeBoolean(String, Boolean)
* @see #getAttributeBooleanDefaultFalse(String)
* @see #getAttributeBooleanDefaultTrue(String)
*/
private Object getAttribute(String name) {
return m_attributes.get(name);
}
/**
* INTERNAL:
* Return annotation attribute value. You should call this method only
* if you know the object returned will be a MetadataAnnotation.
*/
public MetadataAnnotation getAttributeAnnotation(String name) {
Object value = getAttribute(name);
return (value == null) ? null : (MetadataAnnotation) value;
}
/**
* INTERNAL:
* Return the attribute value, or an empty array if not set. Callers will
* have the cast the type.
*/
public Object[] getAttributeArray(String name) {
Object value = getAttribute(name);
return (value == null) ? new Object[0] : (Object[]) value;
}
/**
* INTERNAL:
* Return the boolean attribute value, or the default value if not set.
*/
public Boolean getAttributeBoolean(String name, Boolean defaultValue) {
Object value = getAttribute(name);
return (value == null) ? defaultValue : (Boolean) value;
}
/**
* INTERNAL:
* Return the boolean attribute value, or FALSE if not set.
*/
public Boolean getAttributeBooleanDefaultFalse(String name) {
return getAttributeBoolean(name, Boolean.FALSE);
}
/**
* INTERNAL:
* Return the boolean attribute value, or TRUE if not set.
*/
public Boolean getAttributeBooleanDefaultTrue(String name) {
return getAttributeBoolean(name, Boolean.TRUE);
}
/**
* INTERNAL:
* Return the Class attribute value, or the default provided.
*/
public String getAttributeClass(String name, Class<?> defaultClass) {
Object value = getAttribute(name);
return (value == null) ? defaultClass.getName() : (String) value;
}
/**
* INTERNAL:
* Return Integer attribute value. You should call this method only
* if you know the object returned will be an Integer.
*/
public Integer getAttributeInteger(String name) {
Object value = getAttribute(name);
return (value == null) ? null : (Integer) value;
}
/**
* INTERNAL:
*/
public Map<String, Object> getAttributes() {
return m_attributes;
}
/**
* INTERNAL:
* Return the attribute value, or null if not set.
*/
public String getAttributeString(String name) {
return (String) getAttribute(name);
}
/**
* INTERNAL:
* Return the attribute value, or defaultValue if not set.
*/
public String getAttributeString(String name, String defaultValue) {
Object value = getAttribute(name);
return (value == null) ? defaultValue : (String) value;
}
/**
* INTERNAL:
*/
public String getName() {
return m_name;
}
/**
* INTERNAL:
* Return true if the attribute exists.
*/
public boolean hasAttribute(String name) {
return getAttribute(name) != null;
}
/**
* INTERNAL:
*/
public void setAttributes(Map<String, Object> attributes) {
m_attributes = attributes;
}
/**
* INTERNAL:
*/
public void setName(String name) {
m_name = name;
}
/**
* INTERNAL:
*/
public void setIsMeta(boolean isMeta) {
this.isMeta = isMeta;
}
/**
* INTERNAL:
* @return true if this annotation is a meta-annotation
*/
public boolean isMeta() {
return this.isMeta;
}
/**
* INTERNAL:
*/
@Override
public String toString() {
return "@" + getName() + "(" + m_attributes + ")";
}
}