private void setType(CascadeType type) { if (type.equals(CascadeType.ALL)){ save = true; delete = true; } if (type.equals(CascadeType.REMOVE)){ delete = true; } if (type.equals(CascadeType.PERSIST)){ save = true; } if (type.equals(CascadeType.MERGE)){ save = true; } if (save || delete){ validate = true; } }
private static String[] convertJpaCascadeToStrings(List<CascadeType> cascadeTypes) { if (cascadeTypes == null) { return null; } String[] result = new String[cascadeTypes.size()]; int i = 0; for (CascadeType ct : cascadeTypes) { result[i++] = ct.name(); } return result; }
@Override public Iterable<?> getCompletionTokens() { return Arrays.asList(CascadeType.values()); }
private void setType(CascadeType type) { if (type.equals(CascadeType.ALL)){ save = true; delete = true; } if (type.equals(CascadeType.REMOVE)){ delete = true; } if (type.equals(CascadeType.PERSIST)){ save = true; } if (type.equals(CascadeType.MERGE)){ save = true; } if (save || delete){ validate = true; } }
private static String[] convertJpaCascadeToStrings(List<CascadeType> cascadeTypes) { if (cascadeTypes == null) { return null; } String[] result = new String[cascadeTypes.size()]; int i = 0; for (CascadeType ct : cascadeTypes) { result[i++] = ct.name(); } return result; }
public static boolean collectionOneToManyWithCascade(Object entity, Field field, CascadeType cascadeAcao) { if (!isCollectionOneToMany(entity, field)) { return false; } OneToMany oneToMany = field.getAnnotation(OneToMany.class); boolean cascade = false; for (CascadeType cascadeType : oneToMany.cascade()) { if (cascadeType.equals(CascadeType.ALL) || cascadeType.equals(cascadeAcao)) { cascade = true; break; } } return cascade; }
/** * INTERNAL: * WIP: Probably should make cascade types into its own object eventually. */ public ArrayList<String> getCascadeTypes(CascadeType[] cascadeTypes) { ArrayList<String> cTypes = new ArrayList<String>(); for (CascadeType cascadeType : cascadeTypes) { cTypes.add(cascadeType.name()); } return cTypes; }
public static boolean collectionOneToManyWithCascade(Object entity, Field field, CascadeType cascadeAcao) { if (!isCollectionOneToMany(entity, field)) { return false; } OneToMany oneToMany = field.getAnnotation(OneToMany.class); boolean cascade = false; for (CascadeType cascadeType : oneToMany.cascade()) { if (cascadeType.equals(CascadeType.ALL) || cascadeType.equals(cascadeAcao)) { cascade = true; break; } } return cascade; }
/** * INTERNAL: * Set the cascade type on a mapping. */ protected void setCascadeType(String type, ForeignReferenceMapping mapping) { if (type.equals(MetadataConstants.CASCADE_ALL) || type.equals(CascadeType.ALL.name())) { mapping.setCascadeAll(true); } else if (type.equals(MetadataConstants.CASCADE_MERGE) || type.equals(CascadeType.MERGE.name())) { mapping.setCascadeMerge(true); } else if (type.equals(MetadataConstants.CASCADE_PERSIST) || type.equals(CascadeType.PERSIST.name())) { mapping.setCascadePersist(true); } else if (type.equals(MetadataConstants.CASCADE_REFRESH) || type.equals(CascadeType.REFRESH.name())) { mapping.setCascadeRefresh(true); } else if (type.equals(MetadataConstants.CASCADE_REMOVE) || type.equals(CascadeType.REMOVE.name())) { mapping.setCascadeRemove(true); } } }
public static boolean isOneToOneAndCascadeRemove(Object entityMaster, EntityType<?> entiyType) { for (Field field : entityMaster.getClass().getDeclaredFields()) { if (!ReflectionUtils.getGenericClass(field).equals(entiyType.getJavaType())) { continue; } OneToOne oneToOne = field.getAnnotation(OneToOne.class); if (oneToOne == null) { continue; } return Arrays .stream(oneToOne.cascade()) .anyMatch(c -> CascadeType.ALL.equals(c) || CascadeType.REMOVE.equals(c)); } return false; }
/** * INTERNAL: */ protected void processCascadeTypes(ForeignReferenceMapping mapping) { for (String cascadeType : getCascadeTypes()) { setCascadeType(cascadeType, mapping); } // Apply the persistence unit default cascade-persist if necessary. if (m_descriptor.isCascadePersist() && ! mapping.isCascadePersist()) { setCascadeType(CascadeType.PERSIST.name(), mapping); } }
public static boolean isOneToOneAndCascadeRemove(Object entityMaster, EntityType<?> entiyType) { for (Field field : entityMaster.getClass().getDeclaredFields()) { if (!ReflectionUtils.getGenericClass(field).equals(entiyType.getJavaType())) { continue; } OneToOne oneToOne = field.getAnnotation(OneToOne.class); if (oneToOne == null) { continue; } return Arrays .stream(oneToOne.cascade()) .anyMatch(c -> CascadeType.ALL.equals(c) || CascadeType.REMOVE.equals(c)); } return false; }
public static String jpaCascade(PackageImportAdder importAdder, CascadeGetter... cascadeGetters) { if (cascadeGetters == null) { return ""; } // we look for the first non empty conf. // not that it could be a NONE conf => user does not want any cascade. for (CascadeGetter cascadeGetter : cascadeGetters) { if (cascadeGetter != null) { List<Cascade> cascadeConf = cascadeGetter.getCascades(); if (cascadeConf != null && cascadeConf.size() > 0) { List<CascadeType> cascades = convertJpaCascade(cascadeConf); // we could have removed the NONE element, so we check for emptiness. if (!cascades.isEmpty()) { for (CascadeType ct : cascades) { importAdder.addImport("static javax.persistence.CascadeType." + ct.name()); } AttributeBuilder ab = new AttributeBuilder(); ab.add("cascade", convertJpaCascadeToStrings(cascades)); return ab.getAttributes(); } else { return ""; // there was 1 element: NONE => user does not want anything, we bail out. } } } } return ""; }
public static boolean isOneToManyAndCascadeRemove(Object entityMaster, EntityType<?> entiyType) { for (Field field : entityMaster.getClass().getDeclaredFields()) { if (!Collection.class.isAssignableFrom(field.getType())) { continue; } if (!ReflectionUtils.getGenericClass(field).equals(entiyType.getJavaType())) { continue; } OneToMany oneToMany = field.getAnnotation(OneToMany.class); if (oneToMany == null) { continue; } return Arrays .stream(oneToMany.cascade()) .anyMatch(c -> CascadeType.ALL.equals(c) || CascadeType.REMOVE.equals(c)); } return false; }
public static String jpaCascade(PackageImportAdder importAdder, CascadeGetter... cascadeGetters) { if (cascadeGetters == null) { return ""; } // we look for the first non empty conf. // not that it could be a NONE conf => user does not want any cascade. for (CascadeGetter cascadeGetter : cascadeGetters) { if (cascadeGetter != null) { List<Cascade> cascadeConf = cascadeGetter.getCascades(); if (cascadeConf != null && cascadeConf.size() > 0) { List<CascadeType> cascades = convertJpaCascade(cascadeConf); // we could have removed the NONE element, so we check for emptiness. if (!cascades.isEmpty()) { for (CascadeType ct : cascades) { importAdder.addImport("static javax.persistence.CascadeType." + ct.name()); } AttributeBuilder ab = new AttributeBuilder(); ab.add("cascade", convertJpaCascadeToStrings(cascades)); return ab.getAttributes(); } else { return ""; // there was 1 element: NONE => user does not want anything, we bail out. } } } } return ""; }
public static boolean isOneToManyAndCascadeRemove(Object entityMaster, EntityType<?> entiyType) { for (Field field : entityMaster.getClass().getDeclaredFields()) { if (!Collection.class.isAssignableFrom(field.getType())) { continue; } if (!ReflectionUtils.getGenericClass(field).equals(entiyType.getJavaType())) { continue; } OneToMany oneToMany = field.getAnnotation(OneToMany.class); if (oneToMany == null) { continue; } return Arrays .stream(oneToMany.cascade()) .anyMatch(c -> CascadeType.ALL.equals(c) || CascadeType.REMOVE.equals(c)); } return false; }
private Element toXml(Element parentEl) { Element el = parentEl.addElement(type.xml, XMLNS); el.addAttribute("name", field.getName()); el.addAttribute("target-entity", targetEntity); el.addAttribute("fetch", type.getFetch(field)); String mappedBy = type.getMappedBy(field); if (!StringUtils.isEmpty(mappedBy)) el.addAttribute("mapped-by", mappedBy); CascadeType[] cascadeTypes = type.getCascade(field); if (cascadeTypes != null && cascadeTypes.length > 0) { Element cascadeTypeEl = el.addElement("cascade", XMLNS); for (CascadeType cascadeType : cascadeTypes) { cascadeTypeEl.addElement("cascade-" + cascadeType.name().toLowerCase()); } } // either new JoinColumnHandler(field.getAnnotation(JoinColumn.class)).toXml(el); // or new OrderByHandler(field.getAnnotation(OrderBy.class)).toXml(el); new JoinTableHandler(field.getAnnotation(JoinTable.class)).toXml(el); return el; } }
private Type getRelationType(final Entity businessObject, final String methodName) throws SBusinessDataRepositoryException { final String fieldName = ClassReflector.getFieldName(methodName); Annotation[] annotations; try { annotations = businessObject.getClass().getDeclaredField(fieldName).getAnnotations(); } catch (final NoSuchFieldException e) { return null; } catch (final SecurityException e) { throw new SBusinessDataRepositoryException(e); } for (final Annotation annotation : annotations) { final Set<Class<? extends Annotation>> annotationKeySet = getAnnotationKeySet(); if (annotationKeySet.contains(annotation.annotationType())) { try { final Method cascade = annotation.getClass().getMethod("cascade"); final CascadeType[] cascadeTypes = (CascadeType[]) cascade.invoke(annotation); if (CascadeType.MERGE.equals(cascadeTypes[0])) { return Type.AGGREGATION; } if (CascadeType.ALL.equals(cascadeTypes[0])) { return Type.COMPOSITION; } } catch (final Exception e) { throw new SBusinessDataRepositoryException(e); } } } return null; }
private Type getRelationType(final Entity businessObject, final String methodName) throws SBusinessDataRepositoryException { final String fieldName = ClassReflector.getFieldName(methodName); Annotation[] annotations; try { annotations = businessObject.getClass().getDeclaredField(fieldName).getAnnotations(); } catch (final NoSuchFieldException e) { return null; } catch (final SecurityException e) { throw new SBusinessDataRepositoryException(e); } for (final Annotation annotation : annotations) { final Set<Class<? extends Annotation>> annotationKeySet = getAnnotationKeySet(); if (annotationKeySet.contains(annotation.annotationType())) { try { final Method cascade = annotation.getClass().getMethod("cascade"); final CascadeType[] cascadeTypes = (CascadeType[]) cascade.invoke(annotation); if (CascadeType.MERGE.equals(cascadeTypes[0])) { return Type.AGGREGATION; } if (CascadeType.ALL.equals(cascadeTypes[0])) { return Type.COMPOSITION; } } catch (final Exception e) { throw new SBusinessDataRepositoryException(e); } } } return null; }