/** * Set the default values for the non defined fields. * * @param model the model which has its default fields set. * @throws IllegalAccessException if the underlying fields are inaccessible * @throws Exception In case the field cannot be parsed */ private void setDefaultValuesForFields(final Map<String, Object> model) throws IllegalAccessException, Exception { // Set the default values, if defined for (int i = 1; i <= dataFields.size(); i++) { Field field = annotatedFields.get(i); field.setAccessible(true); DataField dataField = dataFields.get(i); Object modelField = model.get(field.getDeclaringClass().getName()); if (field.get(modelField) == null && !dataField.defaultValue().isEmpty()) { Format<?> format = FormatFactory.getFormat(field.getType(), getLocale(), dataField); Object value = format.parse(dataField.defaultValue()); field.set(modelField, value); } } }
public void bind(List<String> tokens, Map<String, Object> model, int line) throws Exception { int pos = 1; int counterMandatoryFields = 0; for (String data : tokens) { // Get DataField from model DataField dataField = dataFields.get(pos); ObjectHelper.notNull( dataField, "No position " + pos + " defined for the field: " + data + ", line: " + line); if (dataField.trim()) { data = data.trim(); } if (dataField.required()) { // Increment counter of mandatory fields ++counterMandatoryFields; // Check if content of the field is empty // This is not possible for mandatory fields if (data.equals("")) { throw new IllegalArgumentException( "The mandatory field defined at the position " + pos + " is empty for the line: " + line); } } // Get Field to be setted Field field = annotatedFields.get(pos); field.setAccessible(true); if (LOG.isDebugEnabled()) { LOG.debug("Pos: {}, Data: {}, Field type: {}", new Object[] {pos, data, field.getType()}); } // Create format object to format the field Format<?> format = FormatFactory.getFormat(field.getType(), getLocale(), dataField); // field object to be set Object modelField = model.get(field.getDeclaringClass().getName()); // format the data received Object value = null; if (!data.equals("")) { try { value = format.parse(data); } catch (FormatException ie) { throw new IllegalArgumentException( ie.getMessage() + ", position: " + pos + ", line: " + line, ie); } catch (Exception e) { throw new IllegalArgumentException( "Parsing error detected for field defined at the position: " + pos + ", line: " + line, e); } } else { if (!dataField.defaultValue().isEmpty()) { value = format.parse(dataField.defaultValue()); } else { value = getDefaultValueForPrimitive(field.getType()); } } field.set(modelField, value); ++pos; } LOG.debug("Counter mandatory fields: {}", counterMandatoryFields); if (counterMandatoryFields < numberMandatoryFields) { throw new IllegalArgumentException("Some mandatory fields are missing, line: " + line); } if (pos < totalFields) { setDefaultValuesForFields(model); } }