/** * @param mergeWithAnnotations Whether to use Java annotations for this * element, if present and not disabled by the XMLContext defaults. * In some contexts (such as an element-collection mapping) merging * with annotations is never allowed. */ private AssociationOverrides getAssociationOverrides(Element tree, XMLContext.Default defaults, boolean mergeWithAnnotations) { List<AssociationOverride> attributes = buildAssociationOverrides( tree, defaults ); if ( mergeWithAnnotations && defaults.canUseJavaAnnotations() ) { AssociationOverride annotation = getPhysicalAnnotation( AssociationOverride.class ); addAssociationOverrideIfNeeded( annotation, attributes ); AssociationOverrides annotations = getPhysicalAnnotation( AssociationOverrides.class ); if ( annotations != null ) { for ( AssociationOverride current : annotations.value() ) { addAssociationOverrideIfNeeded( current, attributes ); } } } if ( attributes.size() > 0 ) { AnnotationDescriptor ad = new AnnotationDescriptor( AssociationOverrides.class ); ad.setValue( "value", attributes.toArray( new AssociationOverride[attributes.size()] ) ); return AnnotationFactory.create( ad ); } else { return null; } }
private List<AssociationOverride> buildAssociationOverrides(Element element, XMLContext.Default defaults) { List<Element> subelements = element == null ? null : element.elements( "association-override" ); List<AssociationOverride> overrides = new ArrayList<AssociationOverride>(); if ( subelements != null && subelements.size() > 0 ) { for ( Element current : subelements ) { AnnotationDescriptor override = new AnnotationDescriptor( AssociationOverride.class ); copyStringAttribute( override, current, "name", true ); override.setValue( "joinColumns", getJoinColumns( current, false ) ); JoinTable joinTable = buildJoinTable( current, defaults ); if ( joinTable != null ) { override.setValue( "joinTable", joinTable ); } overrides.add( (AssociationOverride) AnnotationFactory.create( override ) ); } } return overrides; }
/** * Builds the property for the given attribute. * * @param attribute * the attribute to inspect * @param columnMetadata * the attached (or overriden) column metadata * @param override * the AssociationOverride found for this attribute * @return the property that represents the attribute or {@code null} if not persistent */ <X> Property<X, ?> buildProperty(final AttributeAccessor attribute, final Column columnMetadata, final AssociationOverride override) { if (attribute.isPersistent()) { if (CollectionProperty.isCollectionProperty(attribute)) { return new CollectionProperty<>(this, attribute, override); } else if (MapProperty.isMapProperty(attribute)) { return new MapProperty<>(this, attribute, override); } else if (EntityProperty.isEntityProperty(attribute)) { return new EntityProperty<>(this.context, getTable(), attribute, override); } else if (attribute.isAnnotationPresent(Embedded.class)) { return new EmbeddedProperty<>(this, attribute); } else if (attribute.isAnnotationPresent(Version.class)) { return new VersionProperty<>(this.context, this.table, attribute, columnMetadata); } else { return new PrimitiveProperty<>(this.context, this.table, attribute, columnMetadata); } } return null; }
/** * Builds the name of the table of the association for the given field. * * @param attribute * the inspected field * @param override * contains optional override options * @param joinTable * the optional join table * @param collectionTable * the optional metadata of the table * @param defaultTableName * the default name for the table * @return the table name */ protected static String buildTableName(final AttributeAccessor attribute, final AssociationOverride override, final JoinTable joinTable, final CollectionTable collectionTable, final String defaultTableName) { if (override != null) { final JoinTable joinTableOverride = override.joinTable(); if (joinTableOverride != null && joinTableOverride.name().length() > 0) { return joinTableOverride.name(); } } if (joinTable != null && joinTable.name().length() > 0) { return joinTable.name(); } if (collectionTable != null && collectionTable.name().length() > 0) { return collectionTable.name(); } return defaultTableName; }
private static Map<String, JoinColumn[]> buildJoinColumnOverride(XAnnotatedElement element, String path) { Map<String, JoinColumn[]> columnOverride = new HashMap<String, JoinColumn[]>(); if ( element == null ) return columnOverride; AssociationOverride singleOverride = element.getAnnotation( AssociationOverride.class ); AssociationOverrides multipleOverrides = element.getAnnotation( AssociationOverrides.class ); AssociationOverride[] overrides; if ( singleOverride != null ) { overrides = new AssociationOverride[] { singleOverride }; } else if ( multipleOverrides != null ) { overrides = multipleOverrides.value(); } else { overrides = null; } //fill overridden columns if ( overrides != null ) { for (AssociationOverride depAttr : overrides) { columnOverride.put( StringHelper.qualify( path, depAttr.name() ), depAttr.joinColumns() ); } } return columnOverride; }
private static Map<String, JoinTable> buildJoinTableOverride(XAnnotatedElement element, String path) { Map<String, JoinTable> tableOverride = new HashMap<String, JoinTable>(); if ( element == null ) return tableOverride; AssociationOverride singleOverride = element.getAnnotation( AssociationOverride.class ); AssociationOverrides multipleOverrides = element.getAnnotation( AssociationOverrides.class ); AssociationOverride[] overrides; if ( singleOverride != null ) { overrides = new AssociationOverride[] { singleOverride }; } else if ( multipleOverrides != null ) { overrides = multipleOverrides.value(); } else { overrides = null; } //fill overridden tables if ( overrides != null ) { for (AssociationOverride depAttr : overrides) { if ( depAttr.joinColumns().length == 0 ) { tableOverride.put( StringHelper.qualify( path, depAttr.name() ), depAttr.joinTable() ); } } } return tableOverride; }
private void addAssociationOverrideIfNeeded(AssociationOverride annotation, List<AssociationOverride> overrides) { if ( annotation != null ) { String overrideName = annotation.name(); boolean present = false; for ( AssociationOverride current : overrides ) { if ( current.name().equals( overrideName ) ) { present = true; break; } } if ( !present ) { overrides.add( annotation ); } } }
@EmbeddedId @AssociationOverrides({ @AssociationOverride(name = "pk.organization", joinColumns = @JoinColumn(name = "StrCode")), @AssociationOverride(name = "pk.getSudo", joinColumns = @JoinColumn(name = "GetSudo")), @AssociationOverride(name = "pk.bunruiKbn", joinColumns = @JoinColumn(name = "BunruiKbn")) }) public ClassificationCategoryIdentifier getPk() { return pk; }
@EmbeddedId @AssociationOverrides({ @AssociationOverride(name = "pk.parent", joinColumns = @JoinColumn(name = "ProGNo")), @AssociationOverride(name = "pk.srProNo", joinColumns = @JoinColumn(name = "SrProNo")) }) public MenuIdentifier getPk() { return pk; }
@EmbeddedId @AssociationOverrides({ @AssociationOverride(name = "pk.organization", joinColumns = @JoinColumn(name = "StrCode")), @AssociationOverride(name = "pk.account", joinColumns = @JoinColumn(name = "KmkCode")) }) public BudgetPerformanceWorktableIdentifier getPk() { return pk; }
@EmbeddedId @AssociationOverrides({ @AssociationOverride(name = "pk.organization", joinColumns = @JoinColumn(name = "StrCode")), @AssociationOverride(name = "pk.getSudo", joinColumns = @JoinColumn(name = "GetSudo")) }) public ClassificationCategoryWithoutBunruiKbnIdentifier getPk() { return pk; }
@EmbeddedId @AssociationOverrides({ @AssociationOverride(name = "pk.organization", joinColumns = @JoinColumn(name = "StrCode")), @AssociationOverride(name = "pk.srDate", joinColumns = @JoinColumn(name = "SrDate")) }) public StampAndLaborCostIdentifier getPk() { return pk; }
@EmbeddedId @AssociationOverrides({ @AssociationOverride(name = "pk.organization", joinColumns = @JoinColumn(name = "StrCode")), @AssociationOverride(name = "pk.getSudo", joinColumns = @JoinColumn(name = "GetSudo")), @AssociationOverride(name = "pk.account", joinColumns = @JoinColumn(name = "KmkCode")) }) public FixedSystemCostWorktableIdentifier getPk() { return pk; }
@EmbeddedId @AssociationOverrides({ @AssociationOverride(name = "pk.organization", joinColumns = @JoinColumn(name = "StrCode")), @AssociationOverride(name = "pk.vendor", joinColumns = @JoinColumn(name = "SrsCode")), @AssociationOverride(name = "pk.category", joinColumns = @JoinColumn(name = "CtgCode")) }) public SectorVendorIdentifier getPk() { return pk; }
@EmbeddedId @AssociationOverrides({ @AssociationOverride(name = "pk.organization", joinColumns = @JoinColumn(name = "StrCode", columnDefinition = "TINYINT")), @AssociationOverride(name = "pk.getSudo", joinColumns = @JoinColumn(name = "GetSudo", columnDefinition = "TINYINT")) }) public ClassificationCategoryWithoutBunruiKbnIdentifier getPk() { return pk; }
@EmbeddedId @AssociationOverrides({ @AssociationOverride(name = "pk.organization", joinColumns = @JoinColumn(name = "StrCode")), @AssociationOverride(name = "pk.jinjiKbn", joinColumns = @JoinColumn(name = "JinjiKbn")), @AssociationOverride(name = "pk.shoriDate", joinColumns = @JoinColumn(name = "ShoriDate")) }) public LaborCostWorktableIdentifier getPk() { return pk; }
@EmbeddedId @AssociationOverrides({ @AssociationOverride(name = "pk.organization", joinColumns = @JoinColumn(name = "StrCode")), @AssociationOverride(name = "pk.getSudo", joinColumns = @JoinColumn(name = "GetSudo")), @AssociationOverride(name = "pk.srDate", joinColumns = @JoinColumn(name = "SrDate")) }) public SalesChangeIdentifier getPk() { return pk; }
@EmbeddedId @AssociationOverrides({ @AssociationOverride(name = "pk.organization", joinColumns = @JoinColumn(name = "StrCode")), @AssociationOverride(name = "pk.getSudo", joinColumns = @JoinColumn(name = "GetSudo")) }) public SalesFixedIdentifier getPk() { return pk; }
@EmbeddedId @AssociationOverrides({ @AssociationOverride(name = "pk.organization", joinColumns = @JoinColumn(name = "StrCode")), @AssociationOverride(name = "pk.kojinCode", joinColumns = @JoinColumn(name = "KojinCode")), @AssociationOverride(name = "pk.shoriDate", joinColumns = @JoinColumn(name = "ShoriDate")) }) public StrokesLeakageTimeWorktableIdentifier getPk() { return pk; }
@EmbeddedId @AssociationOverrides({ @AssociationOverride(name = "pk.organization", joinColumns = @JoinColumn(name = "StrCode")), @AssociationOverride(name = "pk.getSudo", joinColumns = @JoinColumn(name = "GetSudo")), @AssociationOverride(name = "pk.kmkCodeJ", joinColumns = @JoinColumn(name = "KmkCodeJ")) }) public BudgetPerformanceIdentifier getPk() { return pk; }
@EmbeddedId @AssociationOverrides({ @AssociationOverride(name = "pk.organization", joinColumns = @JoinColumn(name = "StrCode")), @AssociationOverride(name = "pk.getSudo", joinColumns = @JoinColumn(name = "GetSudo")), @AssociationOverride(name = "pk.srDate", joinColumns = @JoinColumn(name = "SrDate")), @AssociationOverride(name = "pk.vendor", joinColumns = @JoinColumn(name = "SrsCode")), @AssociationOverride(name = "pk.category", joinColumns = @JoinColumn(name = "CtgCode")), @AssociationOverride(name = "pk.wakuNum", joinColumns = @JoinColumn(name = "WakuNum")) }) public PurchaseIdentifier getPk() { return pk; }
@EmbeddedId @AssociationOverrides({ @AssociationOverride(name = "pk.organization", joinColumns = @JoinColumn(name = "StrCode")), @AssociationOverride(name = "pk.getSudo", joinColumns = @JoinColumn(name = "GetSudo")), @AssociationOverride(name = "pk.category", joinColumns = @JoinColumn(name = "CtgCode")) }) public InventoryIdentifier getPk() { return pk; }
@EmbeddedId @AssociationOverrides({ @AssociationOverride(name = "pk.organization", joinColumns = @JoinColumn(name = "StrCode")), @AssociationOverride(name = "pk.getSudo", joinColumns = @JoinColumn(name = "GetSudo")), @AssociationOverride(name = "pk.vendor", joinColumns = @JoinColumn(name = "SrsCode")), @AssociationOverride(name = "pk.category", joinColumns = @JoinColumn(name = "CtgCode")) }) public MonthlyPurchaseIdentifier getPk() { return pk; }
@EmbeddedId @AssociationOverrides({ @AssociationOverride(name = "pk.organization", joinColumns = @JoinColumn(name = "StrCode")), @AssociationOverride(name = "pk.getSudo", joinColumns = @JoinColumn(name = "GetSudo")), @AssociationOverride(name = "pk.ugKbn", joinColumns = @JoinColumn(name = "UgKbn")), @AssociationOverride(name = "pk.category", joinColumns = @JoinColumn(name = "CtgCode")) }) public MonthlySalesIdentifier getPk() { return pk; }
/** * Funds all association overrides that are attached to the given field or class. * * @param fieldOrClass * the annotated element * @return a mapping from the name of the override to its definition, empty if neither {@link AssociationOverrides} * nor {@link AssociationOverride} are given */ static Map<String, AssociationOverride> getAccociationOverrides(final AnnotatedElement fieldOrClass) { final AssociationOverrides multiOverride = fieldOrClass.getAnnotation(AssociationOverrides.class); final AssociationOverride singleOverride = fieldOrClass.getAnnotation(AssociationOverride.class); if (multiOverride == null && singleOverride == null) { return Collections.emptyMap(); } final Collection<AssociationOverride> config = new ArrayList<>(); // Multi annotation if (multiOverride != null) { config.addAll(Arrays.asList(multiOverride.value())); } // Single annotion if (singleOverride != null) { config.add(singleOverride); } final Map<String, AssociationOverride> attributeOverrides = new HashMap<>(); for (final AssociationOverride override : config) { attributeOverrides.put(override.name(), override); } return attributeOverrides; }
/** * Creates a new collection property. * * @param sourceClass * the description of the current inspected class that contains this property * @param attribute * accessor to the represented attribute * @param override * the configured assocation override */ public CollectionProperty(final EntityClass<?> sourceClass, final AttributeAccessor attribute, final AssociationOverride override) { super(sourceClass, attribute, override, 0); // Read a potentially defined order column final OrderColumn orderColumnDef = attribute.getAnnotation(OrderColumn.class); this.orderColumn = orderColumnDef == null ? null : getTable().resolveColumn( orderColumnDef.name().length() == 0 ? attribute.getName() + "_ORDER" : orderColumnDef.name()); }
/** * Instantiates a new embedded property. * * @param entityClass * the class of the entity * @param attribute * the attribute that contains the embedded object */ public EmbeddedProperty(final EntityClass<?> entityClass, final AttributeAccessor attribute) { super(attribute); this.id = attribute.isAnnotationPresent(EmbeddedId.class); final Class<?> type = attribute.getType(); if (!type.isAnnotationPresent(Embeddable.class)) { throw new IllegalArgumentException(attribute + " does reference " + type + " which is not embeddable."); } // Determine the access style final AccessStyle accessStyle; final Access accessType = type.getAnnotation(Access.class); if (accessType != null) { accessStyle = AccessStyle.getStyle(accessType.value()); } else { accessStyle = attribute.getAccessStyle(); } final Map<String, AttributeOverride> attributeOverrides = EntityClass .getAttributeOverrides(attribute.getElement()); final Map<String, AssociationOverride> accociationOverrides = EntityClass .getAccociationOverrides(attribute.getElement()); for (final AttributeAccessor field : accessStyle.getDeclaredAttributes((Class<Object>) type, type)) { final AttributeOverride attrOveride = attributeOverrides.get(field.getName()); final Property<T, ?> property = entityClass.buildProperty(field, attrOveride != null ? attrOveride.column() : field.getAnnotation(Column.class), accociationOverrides.get(field.getName())); if (property != null) { this.embeddedProperties.put(field.getName(), property); } } }
/** * Creates a new instance of {@link EntityProperty}. * * @param context * the generator context. * @param containerTable * the table that contains our column * @param attribute * the accessor of the attribute * @param override * optional {@link AttributeOverride} configuration. */ public EntityProperty(final GeneratorContext context, final GeneratorTable containerTable, final AttributeAccessor attribute, @Nullable final AssociationOverride override) { super(attribute); this.context = context; // Initialize the target class description this.targetClass = context.getDescription((Class<T>) attribute.getType()); // Initialize according to the *ToOne annotations final MappingInformation mapping = new MappingInformation(attribute); this.required = !mapping.isOptional(); this.mappedBy = mapping.getMappedBy().length() == 0 ? null : mapping.getMappedBy(); final MapsId mapsId = attribute.getAnnotation(MapsId.class); this.idField = mapsId != null ? mapsId.value() : null; // Initialize the column name if (this.mappedBy == null) { final JoinColumn joinColumn = override != null && override.joinColumns().length > 0 ? override.joinColumns()[0] : attribute.getAnnotation(JoinColumn.class); if (joinColumn != null && joinColumn.name().length() > 0) { this.column = containerTable.resolveColumn(joinColumn.name()); } else { this.column = containerTable.resolveColumn(attribute.getName() + "_" + (this.targetClass == null ? "id" : this.targetClass.getIdColumn(attribute))); } } else { this.column = null; } // Initialize ANY meta information final String anyColumnName = mapping.getAnyMetaColumn(); if (anyColumnName != null) { this.anyColumn = containerTable.resolveColumn(anyColumnName); fillMetaDefs(attribute, context.getDialect()); } else { this.anyColumn = null; } }