/** 先根据TYPE注解获取FieldContainer,如果null再根据Field获取 都取不到return null */ static FieldContainer getPrimaryFieldContainer(@NonNull Container container) { HashMap<String, FieldContainer> containers = container.getFieldContainers(); if (containers == null || containers.size() < 1) { return null; } PrimaryKey primaryKey = container.getPrimaryKey(); if (primaryKey != null) { // 先根据TYPE注解获取FieldContainer String name = primaryKey.keyName(); boolean isAuto = primaryKey.autoIncrement(); if (!TextUtils.isEmpty(name)) { FieldContainer fc = containers.get(name); if (fc != null) { fc.setIsAuto(isAuto); fc.setIsPrimaryKey(true); return fc; } } } // Field获取 Set<Map.Entry<String, FieldContainer>> sets = containers.entrySet(); Iterator<Map.Entry<String, FieldContainer>> iterator = sets.iterator(); while ((iterator.hasNext())) { Map.Entry<String, FieldContainer> entry = iterator.next(); FieldContainer fieldContainer = entry.getValue(); if (fieldContainer.isPrimaryKey()) { return fieldContainer; } } return null; }
private void validate(FormField field) { String value = (String) workingInstance.get(field.getId()); FieldContainer container = containers.get(field.getId()); if (field.isRequired() && Strings.isNullOrEmpty(value)) { container.setInvalid(I18N.CONSTANTS.requiredFieldMessage()); } else { container.setValid(); } }
private void setValue(FormInstance instance) { this.instance = instance; this.workingInstance = viewModel.getInstance().copy(); for (Map.Entry<Cuid, FieldContainer> entry : containers.entrySet()) { FieldContainer container = entry.getValue(); FormFieldWidget fieldWidget = container.getFieldWidget(); fieldWidget.setValue(workingInstance.get(entry.getKey())); container.setValid(); } }
static String getTypesSQL(@NonNull Container container) { StringBuilder builder = new StringBuilder(); Field[] fields = container.getFields(); FieldContainer primary = container.getPrimaryField(); if (primary == null) primary = getPrimaryFieldContainer(container); Field primaryField = null; if (primary != null) primaryField = primary.getField(); if (fields != null && fields.length > 0) { boolean isFirst = true; for (Field f : fields) { Ignore ignore = f.getAnnotation(Ignore.class); if (ignore != null) { LogUtil.d( CouSyncDb.TAG, CouSyncDb.LOG_HEADER + "ignore field=" + f.getName() + " when " + container.getModelName() + "create type column sql"); continue; } if (primaryField != null && f.equals(primaryField)) { LogUtil.d( CouSyncDb.TAG, CouSyncDb.LOG_HEADER + "jump primary key field=" + f.getName() + " when " + container.getModelName() + "create type column sql"); continue; } String typeSql = getTypeString(f); if (TextUtils.isEmpty(typeSql)) continue; if (isFirst) { isFirst = false; } else builder.append(Statement.COMMA); builder.append(typeSql); } } else { throw new NoFieldException(container.getModelName() + " have no field"); } return builder.toString(); }
private static String getPrimaryString(@NonNull FieldContainer container) { Field field = container.getField(); Class type = field.getType(); String name = field.getName(); String primary; if (type == int.class || type == Integer.class) { primary = name + Statement.INT + Statement.PRIMARY_KEY; if (container.isAuto()) primary += Statement.AUTOINCREMENT; } else if (type == String.class || type == Character.class || type == CharSequence.class) { primary = name + Statement.TEXT + Statement.PRIMARY_KEY; } else throw new NoPrimaryKeyException( "the types of primary key field are int,integer," + "String,Character or CharSequence !"); Unique unique = field.getAnnotation(Unique.class); if (unique != null) primary += Statement.UNIQUE; primary += Statement.COMMA; return primary; }
@Override public void parse(ByteBuffer b) { int tag = Tag.peekTag(b); if (tag != delimiter.value()) throw new ParseException( lookup(tag).prettyName() + ": Repeating group fields out of order", SessionRejectReason.OutOfOrderGroupField()); super.parse(b); }