📄 ejb3overridenannotationreader.java
字号:
List<Element> subelements = element == null ? null : element.elements( "attribute-override" ); return buildAttributeOverrides( subelements ); } private List<AttributeOverride> buildAttributeOverrides(List<Element> subelements) { List<AttributeOverride> overrides = new ArrayList<AttributeOverride>(); if ( subelements != null && subelements.size() > 0 ) { for (Element current : subelements) { if ( !current.getName().equals( "attribute-override" ) ) continue; AnnotationDescriptor override = new AnnotationDescriptor( AttributeOverride.class ); copyStringAttribute( override, current, "name", true ); Element column = current != null ? current.element( "column" ) : null; override.setValue( "column", getColumn( column, true, current ) ); overrides.add( (AttributeOverride) AnnotationFactory.create( override ) ); } } return overrides; } private Column getColumn(Element element, boolean isMandatory, Element current) { //Element subelement = element != null ? element.element( "column" ) : null; if ( element != null ) { AnnotationDescriptor column = new AnnotationDescriptor( Column.class ); copyStringAttribute( column, element, "name", false ); copyBooleanAttribute( column, element, "unique" ); copyBooleanAttribute( column, element, "nullable" ); copyBooleanAttribute( column, element, "insertable" ); copyBooleanAttribute( column, element, "updatable" ); copyStringAttribute( column, element, "column-definition", false ); copyStringAttribute( column, element, "table", false ); copyIntegerAttribute( column, element, "length" ); copyIntegerAttribute( column, element, "precision" ); copyIntegerAttribute( column, element, "scale" ); return (Column) AnnotationFactory.create( column ); } else { if ( isMandatory ) { throw new AnnotationException( current.getPath() + ".column is mandatory. " + SCHEMA_VALIDATION ); } return null; } } private void addAttributeOverrideIfNeeded(AttributeOverride annotation, List<AttributeOverride> overrides) { if ( annotation != null ) { String overrideName = annotation.name(); boolean present = false; for (AttributeOverride current : overrides) { if ( current.name().equals( overrideName ) ) { present = true; break; } } if ( !present ) overrides.add( annotation ); } } private AccessType getAccessType(Element tree, XMLContext.Default defaults) { String access = tree == null ? null : tree.attributeValue( "access" ); if ( "FIELD".equals( access ) || "PROPERTY".equals( access ) ) { access = access.toLowerCase(); } if ( access != null ) { AnnotationDescriptor ad = new AnnotationDescriptor( AccessType.class ); ad.setValue( "value", access ); return AnnotationFactory.create( ad ); } else if ( defaults.canUseJavaAnnotations() && isJavaAnnotationPresent( AccessType.class ) ) { AccessType annotation = getJavaAnnotation( AccessType.class ); return annotation; } else if ( defaults.getAccess() != null ) { AnnotationDescriptor ad = new AnnotationDescriptor( AccessType.class ); ad.setValue( "value", defaults.getAccess() ); return AnnotationFactory.create( ad ); } else { return null; } } private ExcludeSuperclassListeners getExcludeSuperclassListeners(Element tree, XMLContext.Default defaults) { return (ExcludeSuperclassListeners) getMarkerAnnotation( ExcludeSuperclassListeners.class, tree, defaults ); } private ExcludeDefaultListeners getExcludeDefaultListeners(Element tree, XMLContext.Default defaults) { return (ExcludeDefaultListeners) getMarkerAnnotation( ExcludeDefaultListeners.class, tree, defaults ); } private Annotation getMarkerAnnotation( Class<? extends Annotation> clazz, Element element, XMLContext.Default defaults ) { Element subelement = element == null ? null : element.element( annotationToXml.get( clazz ) ); if ( subelement != null ) { return AnnotationFactory.create( new AnnotationDescriptor( clazz ) ); } else if ( defaults.canUseJavaAnnotations() ) { //TODO wonder whether it should be excluded so that user can undone it return getJavaAnnotation( clazz ); } else { return null; } } private SqlResultSetMappings getSqlResultSetMappings(Element tree, XMLContext.Default defaults) { List<SqlResultSetMapping> results = (List<SqlResultSetMapping>) buildSqlResultsetMappings( tree, defaults ); if ( defaults.canUseJavaAnnotations() ) { SqlResultSetMapping annotation = getJavaAnnotation( SqlResultSetMapping.class ); addSqlResultsetMappingIfNeeded( annotation, results ); SqlResultSetMappings annotations = getJavaAnnotation( SqlResultSetMappings.class ); if ( annotations != null ) { for (SqlResultSetMapping current : annotations.value()) { addSqlResultsetMappingIfNeeded( current, results ); } } } if ( results.size() > 0 ) { AnnotationDescriptor ad = new AnnotationDescriptor( SqlResultSetMappings.class ); ad.setValue( "value", results.toArray( new SqlResultSetMapping[results.size()] ) ); return AnnotationFactory.create( ad ); } else { return null; } } public static List<SqlResultSetMapping> buildSqlResultsetMappings(Element element, XMLContext.Default defaults) { if ( element == null ) return new ArrayList<SqlResultSetMapping>(); List resultsetElementList = element.elements( "sql-result-set-mapping" ); List<SqlResultSetMapping> resultsets = new ArrayList<SqlResultSetMapping>(); Iterator it = resultsetElementList.listIterator(); while ( it.hasNext() ) { Element subelement = (Element) it.next(); AnnotationDescriptor ann = new AnnotationDescriptor( SqlResultSetMapping.class ); copyStringAttribute( ann, subelement, "name", true ); List<Element> elements = subelement.elements( "entity-result" ); List<EntityResult> entityResults = new ArrayList<EntityResult>( elements.size() ); for (Element entityResult : elements) { AnnotationDescriptor entityResultDescriptor = new AnnotationDescriptor( EntityResult.class ); String clazzName = entityResult.attributeValue( "entity-class" ); if ( clazzName == null ) { throw new AnnotationException( "<entity-result> without entity-class. " + SCHEMA_VALIDATION ); } Class clazz = null; try { clazz = ReflectHelper.classForName( XMLContext.buildSafeClassName( clazzName, defaults ), EJB3OverridenAnnotationReader.class ); } catch (ClassNotFoundException e) { throw new AnnotationException( "Unable to find entity-class: " + clazzName, e ); } entityResultDescriptor.setValue( "entityClass", clazz ); copyStringAttribute( entityResultDescriptor, entityResult, "discriminator-column", false ); List<FieldResult> fieldResults = new ArrayList<FieldResult>(); for (Element fieldResult : (List<Element>) entityResult.elements( "field-result" )) { AnnotationDescriptor fieldResultDescriptor = new AnnotationDescriptor( FieldResult.class ); copyStringAttribute( fieldResultDescriptor, fieldResult, "name", true ); copyStringAttribute( fieldResultDescriptor, fieldResult, "column", true ); fieldResults.add( (FieldResult) AnnotationFactory.create( fieldResultDescriptor ) ); } entityResultDescriptor.setValue( "fields", fieldResults.toArray( new FieldResult[fieldResults.size()] ) ); entityResults.add( (EntityResult) AnnotationFactory.create( entityResultDescriptor ) ); } ann.setValue( "entities", entityResults.toArray( new EntityResult[entityResults.size()] ) ); elements = subelement.elements( "column-result" ); List<ColumnResult> columnResults = new ArrayList<ColumnResult>( elements.size() ); for (Element columnResult : elements) { AnnotationDescriptor columnResultDescriptor = new AnnotationDescriptor( ColumnResult.class ); copyStringAttribute( columnResultDescriptor, columnResult, "name", true ); columnResults.add( (ColumnResult) AnnotationFactory.create( columnResultDescriptor ) ); } ann.setValue( "columns", columnResults.toArray( new ColumnResult[columnResults.size()] ) ); //FIXME there is never such a result-class, get rid of it? String clazzName = subelement.attributeValue( "result-class" ); if ( StringHelper.isNotEmpty( clazzName ) ) { Class clazz = null; try { clazz = ReflectHelper.classForName( XMLContext.buildSafeClassName( clazzName, defaults ), EJB3OverridenAnnotationReader.class ); } catch (ClassNotFoundException e) { throw new AnnotationException( "Unable to find entity-class: " + clazzName, e ); } ann.setValue( "resultClass", clazz ); } copyStringAttribute( ann, subelement, "result-set-mapping", false ); resultsets.add( (SqlResultSetMapping) AnnotationFactory.create( ann ) ); } return resultsets; } private void addSqlResultsetMappingIfNeeded(SqlResultSetMapping annotation, List<SqlResultSetMapping> resultsets) { if ( annotation != null ) { String resultsetName = annotation.name(); boolean present = false; for (SqlResultSetMapping current : resultsets) { if ( current.name().equals( resultsetName ) ) { present = true; break; } } if ( !present ) resultsets.add( annotation ); } } private NamedQueries getNamedQueries(Element tree, XMLContext.Default defaults) { //TODO avoid the Proxy Creation (@NamedQueries) when possible List<NamedQuery> queries = (List<NamedQuery>) buildNamedQueries( tree, false, defaults ); if ( defaults.canUseJavaAnnotations() ) { NamedQuery annotation = getJavaAnnotation( NamedQuery.class ); addNamedQueryIfNeeded( annotation, queries ); NamedQueries annotations = getJavaAnnotation( NamedQueries.class ); if ( annotations != null ) { for (NamedQuery current : annotations.value()) { addNamedQueryIfNeeded( current, queries ); } } } if ( queries.size() > 0 ) { AnnotationDescriptor ad = new AnnotationDescriptor( NamedQueries.class ); ad.setValue( "value", queries.toArray( new NamedQuery[queries.size()] ) ); return AnnotationFactory.create( ad ); } else { return null; } } private void addNamedQueryIfNeeded(NamedQuery annotation, List<NamedQuery> queries) { if ( annotation != null ) { String queryName = annotation.name(); boolean present = false; for (NamedQuery current : queries) { if ( current.name().equals( queryName ) ) { present = true; break; } } if ( !present ) queries.add( annotation ); } } private NamedNativeQueries getNamedNativeQueries(Element tree, XMLContext.Default defaults) { List<NamedNativeQuery> queries = (List<NamedNativeQuery>) buildNamedQueries( tree, true, defaults ); if ( defaults.canUseJavaAnnotations() ) { NamedNativeQuery annotation = getJavaAnnotation( NamedNativeQuery.class ); addNamedNativeQueryIfNeeded( annotation, queries ); NamedNativeQueries annotations = getJavaAnnotation( NamedNativeQueries.class ); if ( annotations != null ) { for (NamedNativeQuery current : annotations.value()) { addNamedNativeQueryIfNeeded( current, queries ); } } } if ( queries.size() > 0 ) { AnnotationDescriptor ad = new AnnotationDescriptor( NamedNativeQueries.class ); ad.setValue( "value", queries.toArray( new NamedNativeQuery[queries.size()] ) ); return AnnotationFactory.create( ad ); } else { return null; } } private void addNamedNativeQueryIfNeeded(NamedNativeQuery annotation, List<NamedNativeQuery> queries) { if ( annotation != null ) { String queryName = annotation.name(); boolean present = false; for (NamedNativeQuery current : queries) { if ( current.name().equals( queryName ) ) { present = true; break; } } if ( !present ) queries.add( annotation ); } } public static List buildNamedQueries(Element element, boolean isNative, XMLContext.Default defaults) { if ( element == null ) return new ArrayList(); List namedQueryElementList = isNative ? element.elements( "named-native-query" ) : element.elements( "named-query" ); List namedQueries = new ArrayList(); Iterator it = namedQueryElementList.listIterator(); while ( it.hasNext() ) { Element subelement = (Element) it.next(); AnnotationDescriptor ann = new AnnotationDescriptor( isNative ? NamedNativeQuery.class : NamedQuery.class ); copyStringAttribute( ann, subelement, "name", false ); Element queryElt = subelement.element( "query" ); if ( queryElt == null ) throw new AnnotationException( "No <query> element found." + SCHEMA_VALIDATION ); ann.setValue( "query", queryElt.getTextTrim() ); List<Element> elements = subelement.elements( "hint" ); List<QueryHint> queryHints = new ArrayList<QueryHint>( elements.size() ); for (Element hint : elements) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -