/** 先根据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;
  }
Example #2
0
 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();
   }
 }
Example #3
0
  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);
 }