/** * Returns a clone with exactly the requested fields shallowly copied */ private static<T extends PersistentBase> T getPersistent(T obj, String[] fields) { List<Field> otherFields = obj.getSchema().getFields(); String[] otherFieldStrings = new String[otherFields.size()]; for(int i = 0; i<otherFields.size(); i++ ){ otherFieldStrings[i] = otherFields.get(i).name(); } if(Arrays.equals(fields, otherFieldStrings)) { return obj; } T newObj = AvroUtils.deepClonePersistent(obj); newObj.clear(); for (String field : fields) { Field otherField = obj.getSchema().getField(field); int index = otherField.pos(); newObj.put(index, obj.get(index)); } return newObj; }
/** * Returns a clone with exactly the requested fields shallowly copied */ private static<T extends PersistentBase> T getPersistent(T obj, String[] fields) { List<Field> otherFields = obj.getSchema().getFields(); String[] otherFieldStrings = new String[otherFields.size()]; for(int i = 0; i<otherFields.size(); i++ ){ otherFieldStrings[i] = otherFields.get(i).name(); } if(Arrays.equals(fields, otherFieldStrings)) { return obj; } T newObj = AvroUtils.deepClonePersistent(obj); newObj.clear(); for (String field : fields) { Field otherField = obj.getSchema().getField(field); int index = otherField.pos(); newObj.put(index, obj.get(index)); } return newObj; }
private static <T extends PersistentBase> T getPersistent(T persitent, String[] fields) { List<Schema.Field> otherFields = persitent.getSchema().getFields(); String[] otherFieldStrings = new String[otherFields.size()]; for (int i = 0; i < otherFields.size(); i++) { otherFieldStrings[i] = otherFields.get(i).name(); } if (Arrays.equals(fields, otherFieldStrings)) { return persitent; } T clonedPersistent = AvroUtils.deepClonePersistent(persitent); clonedPersistent.clear(); if (fields != null && fields.length > 0) { for (String field : fields) { Schema.Field otherField = persitent.getSchema().getField(field); int index = otherField.pos(); clonedPersistent.put(index, persitent.get(index)); } } else { for (String field : otherFieldStrings) { Schema.Field otherField = persitent.getSchema().getField(field); int index = otherField.pos(); clonedPersistent.put(index, persitent.get(index)); } } return clonedPersistent; }
private static <T extends PersistentBase> T getPersistent(T persitent, String[] fields) { List<Schema.Field> otherFields = persitent.getSchema().getFields(); String[] otherFieldStrings = new String[otherFields.size()]; for (int i = 0; i < otherFields.size(); i++) { otherFieldStrings[i] = otherFields.get(i).name(); } if (Arrays.equals(fields, otherFieldStrings)) { return persitent; } T clonedPersistent = AvroUtils.deepClonePersistent(persitent); clonedPersistent.clear(); if (fields != null && fields.length > 0) { for (String field : fields) { Schema.Field otherField = persitent.getSchema().getField(field); int index = otherField.pos(); clonedPersistent.put(index, persitent.get(index)); } } else { for (String field : otherFieldStrings) { Schema.Field otherField = persitent.getSchema().getField(field); int index = otherField.pos(); clonedPersistent.put(index, persitent.get(index)); } } return clonedPersistent; }
@Test public void testDeepClonePersistent() throws Exception { CharSequence url = new Utf8("http://gora.apache.org/"); WebPage.Builder builder = WebPage.newBuilder() .setUrl(url) .setContent(ByteBuffer.wrap("Gora".getBytes("UTF-8"))); WebPage webPage = builder.build(); WebPage clonedWebPage = AvroUtils.deepClonePersistent(webPage); assertThat(clonedWebPage, is(notNullValue())); assertThat(clonedWebPage.getUrl(), is(equalTo(url))); assertThat(clonedWebPage.getContent(), is(notNullValue())); String clonedWebPageContent = new String(clonedWebPage.getContent().array(), "UTF-8"); assertThat(clonedWebPageContent, is(equalTo("Gora"))); }