public static <C, V> void setValue(C target, String path, V value, boolean required, boolean autoConvert) { int sep = path.indexOf('.'); if (sep < 0) // it is a local property setLocal(target, path, value, required, autoConvert); else { // a recursive feature path needs to be resolved String localName = path.substring(0, sep); Object subTarget = FeatureAccessor.getValue(target, localName, true); if (subTarget == null) { // feature exists but is null, so create an object and assign it to the feature subTarget = setFeatureDefault(target, localName); } String remainingName = path.substring(sep + 1); setValue(subTarget, remainingName, value, required, autoConvert); } }
private void init(CSVLineIterator iterator, Class<E> type, String emptyValue, String[] attributeNames) { this.iterator = iterator; this.type = type; this.emptyValue = emptyValue; this.mutators = new NamedMutator[attributeNames.length]; this.classIndex = -1; for (int i = 0; i < attributeNames.length; i++) { String attributeName = attributeNames[i]; if ("class".equals(attributeName)) { mutators[i] = null; this.classIndex = i; } else { mutators[i] = new AnyMutator(attributeName, false, true); } } }
@Override public void setValue(Object target, Object value) throws UpdateFailedException { setValue(target, path, value, required, autoConvert); }
private Object haveTargetObject(Object bean, String featurePath) { if (featurePath == null) { return bean; } else if (featurePath.contains(".")) { String[] pathParts = StringUtil.splitOnFirstSeparator(featurePath, '.'); Object child = haveTargetObject(bean, pathParts[0]); return haveTargetObject(child, pathParts[1]); } Object value = FeatureAccessor.getValue(bean, featurePath, false); if (value != null) return value; else return AnyMutator.setFeatureDefault(bean, featurePath); }
public static <C, V> void setValue(C target, String path, V value) { setValue(target, path, value, true, false); }
public <T> T parseAsBean(String row, Class<T> beanClass) { if (row.length() != rowLength) throw new SyntaxError("Row of type '" + name + "' has illegal length. " + "Expected: " + rowLength + ", found: " + row.length(), "'" + row + "'"); T bean = BeanUtil.newInstance(beanClass); ParsePosition pos = new ParsePosition(0); for (FixedWidthColumnDescriptor columnDescriptor : columnDescriptors) { int endIndex = pos.getIndex() + columnDescriptor.getWidth(); String cellContent = row.substring(pos.getIndex(), endIndex); try { Object cellObject = columnDescriptor.parse(cellContent); AnyMutator.setValue(bean, columnDescriptor.getName(), cellObject, true, true); } catch (ParseException e) { throw new SyntaxError("Error parsing column '" + columnDescriptor + "'. " + e.getMessage(), cellContent); } pos.setIndex(endIndex); } return bean; }
private void createMutators(String[] attributePaths) { this.mutators = new Mutator[attributePaths.length]; for (int i = 0; i < attributePaths.length; i++) { String attributePath = attributePaths[i]; if ("class".equals(attributePath)) { this.mutators[i] = new EmptyMutator(); } else { this.mutators[i] = new AnyMutator(attributePath, false, true); } } }
@Override public Object evaluate(Context context) { Object value = rhs.evaluate(context); if (lhs.length == 1) { // if lhs is a simple variable name then put the result into context by this name context.set(lhs[0], value); } else { // get last parent object of QN and set the feature denoted by the last QN part String fieldName = lhs[lhs.length - 1]; Object field = QNExpression.resolveNamePart(lhs, lhs.length - 1, context); AnyMutator.setValue(field, fieldName, value, true, true); } return value; }
@Override public E evaluate(Context context) { E bean = instantiation.evaluate(context); for (Assignment assignment : assignments) { String name = assignment.getName(); Object value = assignment.getExpression().evaluate(context); if (BeanUtil.hasProperty(bean.getClass(), name)) BeanUtil.setPropertyValue(bean, name, value, false); else AnyMutator.setValue(bean, name, value, true, true); } if (bean instanceof ContextAware) ((ContextAware) bean).setContext(context); return bean; }