@SuppressWarnings("unchecked")
	public M merge(M source) {
		Field forDisplay = null;
		try {
			List<Field> fields = ReflectionUtils.getDeclaredFieldsIncludingParent(getClass());
			// Iterate over all the attributes
			for (Field each : fields) {
				if (each.isSynthetic()) {
					continue;
				}
				final int modifiers = each.getModifiers();
				if (Modifier.isFinal(modifiers) || Modifier.isStatic(modifiers)) {
					continue;
				}
				forDisplay = each;
				if (!each.isAccessible()) {
					each.setAccessible(true);
				}
				final Object value = each.get(source);
				if (value != null) {
					each.set(this, value);
				}
			}
			return (M) this;
		} catch (Exception e) {
			String displayName = (forDisplay == null) ? "Empty" : forDisplay.getName();
			throw processException(displayName + " - Exception occurred while merging an entity from " + source + " to "
					+ this, e);
		}
	}
Merge source entity into current entity.

Only not null value is merged.

@param source merge source
@return merged entity
ngrinder-core/src/main/java/org/ngrinder/model/BaseEntity.java