List<BeanId> refs = mergeBean.getReference(name); if (refs == null || refs.size() == 0) { source.setReferences(name, refs); continue; source.setReferences(name, refs);
private void merge(List<Bean> sources, Bean mergeBean) { HashMap<BeanId, Bean> cache = new HashMap<BeanId, Bean>(); for (Bean source : sources) { for (String name : mergeBean.getPropertyNames()) { List<String> values = mergeBean.getValues(name); if (values == null || values.size() == 0) { continue; } source.setProperty(name, values); } for (String name : mergeBean.getReferenceNames()) { List<BeanId> refs = mergeBean.getReference(name); if (refs == null || refs.size() == 0) { source.setReferences(name, refs); continue; } for (BeanId beanId : refs) { Bean bean = cache.get(beanId); if (bean == null) { bean = beanManager.getLazy(beanId); setSchema(bean, schemaManager.getSchemas()); cache.put(beanId, bean); } beanId.setBean(bean); } source.setReferences(name, refs); } } }
private void replace(Bean target, Bean replace) { if (target == null) { // bean did not exist in storage, create it. target = replace; } checkReferencesExist(replace, new ArrayList<Bean>()); for (String name : replace.getPropertyNames()) { List<String> values = replace.getValues(name); if (values == null || values.size() == 0) { // null/empty indicates a remove/reset-to-default op target.remove(name); } else { target.setProperty(name, replace.getValues(name)); } } for (String name : replace.getReferenceNames()) { List<BeanId> values = replace.getReference(name); if (values == null || values.size() == 0) { // null/empty indicates a remove/reset-to-default op target.remove(name); } else { target.setReferences(name, values); } } }
private void replace(Bean target, Bean replace, Map<BeanId, Bean> all) { if (target == null) { // bean did not exist in storage, create it. target = replace; } checkReferencesExist(replace, all); for (String name : replace.getPropertyNames()) { List<String> values = replace.getValues(name); if (values == null || values.size() == 0) { // null/empty indicates a remove/reset-to-default op target.remove(name); } else { target.setProperty(name, replace.getValues(name)); } } for (String name : replace.getReferenceNames()) { List<BeanId> values = replace.getReference(name); if (values == null || values.size() == 0) { // null/empty indicates a remove/reset-to-default op target.remove(name); } else { target.setReferences(name, values); } } }
@Test public void test_merge_delete_check_predecessors() { Grandfather g1 = new Grandfather("g1"); Parent p1 = new Parent("p1"); Child c1 = new Child("c1"); g1.add(p1); admin.create(toBean(c1)); admin.create(toBean(p1)); admin.create(toBean(g1)); Bean gb1 = toBean(g1); Bean pb1 = toBean(p1); admin.get(pb1.getId()); // delete the parent reference by setting the property to empty list gb1.setReferences("prop7", new ArrayList<BeanId>()); admin.merge(gb1); try { admin.delete(pb1.getId()); } catch (AbortRuntimeException e) { fail("Should be possible to delete parent since grandfather " + "no longer have a reference to it"); } }
@Test public void test_set_delete_check_predecessors() { Grandfather g1 = new Grandfather("g1"); Parent p1 = new Parent("p1"); Child c1 = new Child("c1"); g1.add(p1); admin.create(toBean(c1)); admin.create(toBean(p1)); admin.create(toBean(g1)); Bean gb1 = toBean(g1); Bean pb1 = toBean(p1); admin.get(pb1.getId()); // delete the parent reference by setting the property to empty list gb1.setReferences("prop7", new ArrayList<BeanId>()); admin.set(gb1); try { admin.delete(pb1.getId()); } catch (AbortRuntimeException e) { fail("Should be possible to delete parent since grandfather " + "no longer have a reference to it"); } }