Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
org.hibernate.metamodel.source.annotations.xml.mocker.GlobalAnnotationMocker Maven / Gradle / Ivy
/*
* Hibernate, Relational Persistence for Idiomatic Java
*
* Copyright (c) 2011, Red Hat Inc. or third-party contributors as
* indicated by the @author tags or express copyright attribution
* statements applied by the authors. All third-party contributions are
* distributed under license by Red Hat Inc..
*
* This copyrighted material is made available to anyone wishing to use, modify,
* copy, or redistribute it subject to the terms and conditions of the GNU
* Lesser General Public License, as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
* for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this distribution; if not, write to:
* Free Software Foundation, Inc.
* 51 Franklin Street, Fifth Floor
* Boston, MA 02110-1301 USA
*/
package org.hibernate.metamodel.source.annotations.xml.mocker;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import org.jboss.jandex.AnnotationInstance;
import org.jboss.jandex.AnnotationValue;
import org.hibernate.internal.jaxb.mapping.orm.JaxbColumnResult;
import org.hibernate.internal.jaxb.mapping.orm.JaxbEntityResult;
import org.hibernate.internal.jaxb.mapping.orm.JaxbFieldResult;
import org.hibernate.internal.jaxb.mapping.orm.JaxbNamedNativeQuery;
import org.hibernate.internal.jaxb.mapping.orm.JaxbNamedQuery;
import org.hibernate.internal.jaxb.mapping.orm.JaxbQueryHint;
import org.hibernate.internal.jaxb.mapping.orm.JaxbSequenceGenerator;
import org.hibernate.internal.jaxb.mapping.orm.JaxbSqlResultSetMapping;
import org.hibernate.internal.jaxb.mapping.orm.JaxbTableGenerator;
/**
* @author Strong Liu
*/
class GlobalAnnotationMocker extends AbstractMocker {
private GlobalAnnotations globalAnnotations;
GlobalAnnotationMocker(IndexBuilder indexBuilder, GlobalAnnotations globalAnnotations) {
super( indexBuilder );
this.globalAnnotations = globalAnnotations;
}
void process() {
if ( !globalAnnotations.getTableGeneratorMap().isEmpty() ) {
for ( JaxbTableGenerator generator : globalAnnotations.getTableGeneratorMap().values() ) {
parserTableGenerator( generator );
}
}
if ( !globalAnnotations.getSequenceGeneratorMap().isEmpty() ) {
for ( JaxbSequenceGenerator generator : globalAnnotations.getSequenceGeneratorMap().values() ) {
parserSequenceGenerator( generator );
}
}
if ( !globalAnnotations.getNamedQueryMap().isEmpty() ) {
Collection namedQueries = globalAnnotations.getNamedQueryMap().values();
if ( namedQueries.size() > 1 ) {
parserNamedQueries( namedQueries );
}
else {
parserNamedQuery( namedQueries.iterator().next() );
}
}
if ( !globalAnnotations.getNamedNativeQueryMap().isEmpty() ) {
Collection namedQueries = globalAnnotations.getNamedNativeQueryMap().values();
if ( namedQueries.size() > 1 ) {
parserNamedNativeQueries( namedQueries );
}
else {
parserNamedNativeQuery( namedQueries.iterator().next() );
}
}
if ( !globalAnnotations.getSqlResultSetMappingMap().isEmpty() ) {
parserSqlResultSetMappings( globalAnnotations.getSqlResultSetMappingMap().values() );
}
indexBuilder.finishGlobalConfigurationMocking( globalAnnotations );
}
private AnnotationInstance parserSqlResultSetMappings(Collection namedQueries) {
AnnotationValue[] values = new AnnotationValue[namedQueries.size()];
int i = 0;
for ( Iterator iterator = namedQueries.iterator(); iterator.hasNext(); ) {
AnnotationInstance annotationInstance = parserSqlResultSetMapping( iterator.next() );
values[i++] = MockHelper.nestedAnnotationValue(
"", annotationInstance
);
}
return create(
SQL_RESULT_SET_MAPPINGS, null,
new AnnotationValue[] { AnnotationValue.createArrayValue( "values", values ) }
);
}
//@SqlResultSetMapping
private AnnotationInstance parserSqlResultSetMapping(JaxbSqlResultSetMapping mapping) {
List annotationValueList = new ArrayList();
MockHelper.stringValue( "name", mapping.getName(), annotationValueList );
nestedEntityResultList( "entities", mapping.getEntityResult(), annotationValueList );
nestedColumnResultList( "columns", mapping.getColumnResult(), annotationValueList );
return
create(
SQL_RESULT_SET_MAPPING, null, annotationValueList
);
}
//@EntityResult
private AnnotationInstance parserEntityResult(JaxbEntityResult result) {
List annotationValueList = new ArrayList();
MockHelper.stringValue(
"discriminatorColumn", result.getDiscriminatorColumn(), annotationValueList
);
nestedFieldResultList( "fields", result.getFieldResult(), annotationValueList );
MockHelper.classValue(
"entityClass", result.getEntityClass(), annotationValueList, indexBuilder.getServiceRegistry()
);
return
create(
ENTITY_RESULT, null, annotationValueList
);
}
private void nestedEntityResultList(String name, List entityResults, List annotationValueList) {
if ( MockHelper.isNotEmpty( entityResults ) ) {
AnnotationValue[] values = new AnnotationValue[entityResults.size()];
for ( int i = 0; i < entityResults.size(); i++ ) {
AnnotationInstance annotationInstance = parserEntityResult( entityResults.get( i ) );
values[i] = MockHelper.nestedAnnotationValue(
"", annotationInstance
);
}
MockHelper.addToCollectionIfNotNull(
annotationValueList, AnnotationValue.createArrayValue( name, values )
);
}
}
//@ColumnResult
private AnnotationInstance parserColumnResult(JaxbColumnResult result) {
return create( COLUMN_RESULT, null, MockHelper.stringValueArray( "name", result.getName() ) );
}
private void nestedColumnResultList(String name, List columnResults, List annotationValueList) {
if ( MockHelper.isNotEmpty( columnResults ) ) {
AnnotationValue[] values = new AnnotationValue[columnResults.size()];
for ( int i = 0; i < columnResults.size(); i++ ) {
AnnotationInstance annotationInstance = parserColumnResult( columnResults.get( i ) );
values[i] = MockHelper.nestedAnnotationValue(
"", annotationInstance
);
}
MockHelper.addToCollectionIfNotNull(
annotationValueList, AnnotationValue.createArrayValue( name, values )
);
}
}
//@FieldResult
private AnnotationInstance parserFieldResult(JaxbFieldResult result) {
List annotationValueList = new ArrayList();
MockHelper.stringValue( "name", result.getName(), annotationValueList );
MockHelper.stringValue( "column", result.getColumn(), annotationValueList );
return create( FIELD_RESULT, null, annotationValueList );
}
private void nestedFieldResultList(String name, List fieldResultList, List annotationValueList) {
if ( MockHelper.isNotEmpty( fieldResultList ) ) {
AnnotationValue[] values = new AnnotationValue[fieldResultList.size()];
for ( int i = 0; i < fieldResultList.size(); i++ ) {
AnnotationInstance annotationInstance = parserFieldResult( fieldResultList.get( i ) );
values[i] = MockHelper.nestedAnnotationValue(
"", annotationInstance
);
}
MockHelper.addToCollectionIfNotNull(
annotationValueList, AnnotationValue.createArrayValue( name, values )
);
}
}
private AnnotationInstance parserNamedNativeQueries(Collection namedQueries) {
AnnotationValue[] values = new AnnotationValue[namedQueries.size()];
int i = 0;
for ( Iterator iterator = namedQueries.iterator(); iterator.hasNext(); ) {
AnnotationInstance annotationInstance = parserNamedNativeQuery( iterator.next() );
values[i++] = MockHelper.nestedAnnotationValue(
"", annotationInstance
);
}
return create(
NAMED_NATIVE_QUERIES, null,
new AnnotationValue[] { AnnotationValue.createArrayValue( "values", values ) }
);
}
//@NamedNativeQuery
private AnnotationInstance parserNamedNativeQuery(JaxbNamedNativeQuery namedNativeQuery) {
List annotationValueList = new ArrayList();
MockHelper.stringValue( "name", namedNativeQuery.getName(), annotationValueList );
MockHelper.stringValue( "query", namedNativeQuery.getQuery(), annotationValueList );
MockHelper.stringValue(
"resultSetMapping", namedNativeQuery.getResultSetMapping(), annotationValueList
);
MockHelper.classValue(
"resultClass", namedNativeQuery.getResultClass(), annotationValueList, indexBuilder.getServiceRegistry()
);
nestedQueryHintList( "hints", namedNativeQuery.getHint(), annotationValueList );
return
create(
NAMED_NATIVE_QUERY, null, annotationValueList
);
}
private AnnotationInstance parserNamedQueries(Collection namedQueries) {
AnnotationValue[] values = new AnnotationValue[namedQueries.size()];
int i = 0;
for ( Iterator iterator = namedQueries.iterator(); iterator.hasNext(); ) {
AnnotationInstance annotationInstance = parserNamedQuery( iterator.next() );
values[i++] = MockHelper.nestedAnnotationValue(
"", annotationInstance
);
}
return create(
NAMED_QUERIES, null,
new AnnotationValue[] { AnnotationValue.createArrayValue( "values", values ) }
);
}
//@NamedQuery
private AnnotationInstance parserNamedQuery(JaxbNamedQuery namedQuery) {
List annotationValueList = new ArrayList();
MockHelper.stringValue( "name", namedQuery.getName(), annotationValueList );
MockHelper.stringValue( "query", namedQuery.getQuery(), annotationValueList );
MockHelper.enumValue( "lockMode", LOCK_MODE_TYPE, namedQuery.getLockMode(), annotationValueList );
nestedQueryHintList( "hints", namedQuery.getHint(), annotationValueList );
return create( NAMED_QUERY, null, annotationValueList );
}
//@QueryHint
private AnnotationInstance parserQueryHint(JaxbQueryHint queryHint) {
List annotationValueList = new ArrayList();
MockHelper.stringValue( "name", queryHint.getName(), annotationValueList );
MockHelper.stringValue( "value", queryHint.getValue(), annotationValueList );
return create( QUERY_HINT, null, annotationValueList );
}
private void nestedQueryHintList(String name, List constraints, List annotationValueList) {
if ( MockHelper.isNotEmpty( constraints ) ) {
AnnotationValue[] values = new AnnotationValue[constraints.size()];
for ( int i = 0; i < constraints.size(); i++ ) {
AnnotationInstance annotationInstance = parserQueryHint( constraints.get( i ) );
values[i] = MockHelper.nestedAnnotationValue(
"", annotationInstance
);
}
MockHelper.addToCollectionIfNotNull(
annotationValueList, AnnotationValue.createArrayValue( name, values )
);
}
}
//@SequenceGenerator
private AnnotationInstance parserSequenceGenerator(JaxbSequenceGenerator generator) {
List annotationValueList = new ArrayList();
MockHelper.stringValue( "name", generator.getName(), annotationValueList );
MockHelper.stringValue( "catalog", generator.getCatalog(), annotationValueList );
MockHelper.stringValue( "schema", generator.getSchema(), annotationValueList );
MockHelper.stringValue( "sequenceName", generator.getSequenceName(), annotationValueList );
MockHelper.integerValue( "initialValue", generator.getInitialValue(), annotationValueList );
MockHelper.integerValue( "allocationSize", generator.getAllocationSize(), annotationValueList );
return
create(
SEQUENCE_GENERATOR, null, annotationValueList
);
}
//@TableGenerator
private AnnotationInstance parserTableGenerator(JaxbTableGenerator generator) {
List annotationValueList = new ArrayList();
MockHelper.stringValue( "name", generator.getName(), annotationValueList );
MockHelper.stringValue( "catalog", generator.getCatalog(), annotationValueList );
MockHelper.stringValue( "schema", generator.getSchema(), annotationValueList );
MockHelper.stringValue( "table", generator.getTable(), annotationValueList );
MockHelper.stringValue( "pkColumnName", generator.getPkColumnName(), annotationValueList );
MockHelper.stringValue( "valueColumnName", generator.getValueColumnName(), annotationValueList );
MockHelper.stringValue( "pkColumnValue", generator.getPkColumnValue(), annotationValueList );
MockHelper.integerValue( "initialValue", generator.getInitialValue(), annotationValueList );
MockHelper.integerValue( "allocationSize", generator.getAllocationSize(), annotationValueList );
nestedUniqueConstraintList( "uniqueConstraints", generator.getUniqueConstraint(), annotationValueList );
return
create(
TABLE_GENERATOR, null, annotationValueList
);
}
@Override
protected AnnotationInstance push(AnnotationInstance annotationInstance) {
if ( annotationInstance != null ) {
return globalAnnotations.push( annotationInstance.name(), annotationInstance );
}
return null;
}
}