blob: 9912509ddb97315ad082dd5feb8146889789f301 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009, 2010 Oracle. 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:
* Oracle - initial API and implementation
******************************************************************************/
package org.eclipse.jpt.jpa.core.internal;
import java.util.ArrayList;
import org.eclipse.jpt.jpa.core.JpaAnnotationDefinitionProvider;
import org.eclipse.jpt.jpa.core.resource.java.AnnotationDefinition;
public abstract class AbstractJpaAnnotationDefinitionProvider
implements JpaAnnotationDefinitionProvider
{
protected ArrayList<AnnotationDefinition> typeAnnotationDefinitions;
protected ArrayList<AnnotationDefinition> typeMappingAnnotationDefinitions;
protected ArrayList<AnnotationDefinition> attributeAnnotationDefinitions;
private ArrayList<AnnotationDefinition> packageAnnotationDefinitions;
protected AbstractJpaAnnotationDefinitionProvider() {
super();
}
// ********** type annotation definitions **********
public synchronized Iterable<AnnotationDefinition> getTypeAnnotationDefinitions() {
if (this.typeAnnotationDefinitions == null) {
this.typeAnnotationDefinitions = this.buildTypeAnnotationDefinitions();
}
return this.typeAnnotationDefinitions;
}
protected ArrayList<AnnotationDefinition> buildTypeAnnotationDefinitions() {
ArrayList<AnnotationDefinition> definitions = new ArrayList<AnnotationDefinition>();
this.addTypeAnnotationDefinitionsTo(definitions);
return definitions;
}
protected abstract void addTypeAnnotationDefinitionsTo(ArrayList<AnnotationDefinition> definitions);
// ********** type mapping annotation definitions **********
public synchronized Iterable<AnnotationDefinition> getTypeMappingAnnotationDefinitions() {
if (this.typeMappingAnnotationDefinitions == null) {
this.typeMappingAnnotationDefinitions = this.buildTypeMappingAnnotationDefinitions();
}
return this.typeMappingAnnotationDefinitions;
}
protected ArrayList<AnnotationDefinition> buildTypeMappingAnnotationDefinitions() {
ArrayList<AnnotationDefinition> definitions = new ArrayList<AnnotationDefinition>();
this.addTypeMappingAnnotationDefinitionsTo(definitions);
return definitions;
}
protected abstract void addTypeMappingAnnotationDefinitionsTo(ArrayList<AnnotationDefinition> definitions);
// ********** attribute annotation definitions **********
public synchronized Iterable<AnnotationDefinition> getAttributeAnnotationDefinitions() {
if (this.attributeAnnotationDefinitions == null) {
this.attributeAnnotationDefinitions = this.buildAttributeAnnotationDefinitions();
}
return this.attributeAnnotationDefinitions;
}
protected ArrayList<AnnotationDefinition> buildAttributeAnnotationDefinitions() {
ArrayList<AnnotationDefinition> definitions = new ArrayList<AnnotationDefinition>();
this.addAttributeAnnotationDefinitionsTo(definitions);
return definitions;
}
protected abstract void addAttributeAnnotationDefinitionsTo(ArrayList<AnnotationDefinition> definitions);
// ********** package annotation definitions **********
public synchronized Iterable<AnnotationDefinition> getPackageAnnotationDefinitions() {
if (this.packageAnnotationDefinitions == null) {
this.packageAnnotationDefinitions = this.buildPackageAnnotationDefinitions();
}
return this.packageAnnotationDefinitions;
}
protected ArrayList<AnnotationDefinition> buildPackageAnnotationDefinitions() {
ArrayList<AnnotationDefinition> definitions = new ArrayList<AnnotationDefinition>();
this.addPackageAnnotationDefinitionsTo(definitions);
return definitions;
}
protected abstract void addPackageAnnotationDefinitionsTo(ArrayList<AnnotationDefinition> definitions);
}