Android Open Source - jpdroid Jpdroid Object Map






From Project

Back to project page jpdroid.

License

The source code is released under:

GNU General Public License

If you think the Android project jpdroid listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package br.com.rafael.jpdroid.core;
//from  w  w  w .  j av  a 2s .  c o m
import java.io.ByteArrayOutputStream;
import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;

import android.annotation.SuppressLint;
import android.content.ContentValues;
import android.graphics.Bitmap;
import br.com.rafael.jpdroid.annotations.Column;
import br.com.rafael.jpdroid.annotations.ForeignKey;
import br.com.rafael.jpdroid.annotations.DefaultOrder;
import br.com.rafael.jpdroid.annotations.PrimaryKey;
import br.com.rafael.jpdroid.annotations.RelationClass;
import br.com.rafael.jpdroid.enums.RelationType;

/**
 * Classe respons?vel por obter colunas e valores de um objeto.
 * 
 * @author Rafael Centenaro
 */
public class JpdroidObjectMap {

  /**
   * Retorna as chaves estrangeiras identificadas pela anota??o ForeignKey
   * 
   * @param item
   * @param referenceEntity
   * @return Field[]
   */
  public static Field[] getFieldsByForeignKey(Object item, String referenceEntity) {
    List<Field> fields = new ArrayList<Field>();

    Field[] declaredFields = item.getClass().getDeclaredFields();
    for (Field field : declaredFields) {

      ForeignKey annotation = field.getAnnotation(ForeignKey.class);

      if (annotation != null && annotation.joinEntity().getSimpleName().equals(referenceEntity)) {
        fields.add(field);
      }

    }
    return fields.toArray(new Field[fields.size()]);
  }

  /**
   * Retorna os campos identificados pela anota??o RelationClass.
   * 
   * @param entity
   * @return Field[]
   */
  public static Field[] getFieldsByRelationClass(Object entity, RelationType relationType) {
    List<Field> fields = new ArrayList<Field>();

    Field[] declaredFields = entity.getClass().getDeclaredFields();
    for (Field field : declaredFields) {

      RelationClass annotation = field.getAnnotation(RelationClass.class);
      if (annotation != null && !annotation.Transient()) {
        if (relationType == RelationType.OneToMany) {
          if ((annotation.relationType() == relationType || annotation.relationType() == RelationType.OneToOne)) {
            fields.add(field);
          }
        } else {
          if ((annotation.relationType() == relationType || annotation.relationType() == RelationType.ManyToMany)) {
            fields.add(field);
          }
        }
      }

    }
    return fields.toArray(new Field[fields.size()]);
  }

  /**
   * Retorna o campo identificado pela anota??o passada por par?metro.
   * 
   * @param entity
   * @param annotationClass
   * @return Field
   */
  public static Field getFieldByAnnotation(Object entity, Class<? extends Annotation> annotationClass) {
    Field[] fields = entity.getClass().getDeclaredFields();
    for (Field field : fields) {

      Annotation annotation = field.getAnnotation(annotationClass);

      if (annotation != null) {
        return field;
      }

    }
    return null;
  }
  
  /**
   * Retorna os campos configurados pela anota??o Order.
   * @param entity
   * @return
   */
  public static String getDefaultOrderBy(Class<?> entity){
    
    String orderBy = "";
    
    Field[] fieldOrderBy = entity.getDeclaredFields();
    for (Field field : fieldOrderBy) {
      DefaultOrder order = field.getAnnotation(DefaultOrder.class);
      if (order != null) {
        if (orderBy.length() == 0) {
          orderBy = field.getName() + " " + order.order();
        } else {
          orderBy += ", "+field.getName() + " " + order.order();
        }
      }
    }
    return orderBy;
  }

  /**
   * Retorna um array de campos identificados pela anota??o passada por par?metro.
   * 
   * @param entity
   * @param annotationClass
   * @return Field[]
   */
  public static Field[] getFieldsByAnnotation(Object entity, Class<? extends Annotation>... annotationClass) {
    List<Field> fields = new ArrayList<Field>();
    for (Class<? extends Annotation> class1 : annotationClass) {
      Field[] fieldChild = getFieldsByAnnotation(entity, class1);
      for (Field field : fieldChild) {
        fields.add(field);
      }
    }
    return fields.toArray(new Field[fields.size()]);
  }

  public static Field[] getFieldsByAnnotation(Object entity, Class<? extends Annotation> annotationClass) {
    List<Field> fields = new ArrayList<Field>();

    Field[] declaredFields = entity.getClass().getDeclaredFields();
    for (Field field : declaredFields) {

      Annotation annotation = field.getAnnotation(annotationClass);

      if (annotation != null) {
        fields.add(field);
      }

    }
    return fields.toArray(new Field[fields.size()]);
  }

  /**
   * Retorna um array de String contendo os campos do objeto.
   * 
   * @param entity
   * @return String[]
   */
  @SuppressWarnings("unchecked")
  public static String[] getColumns(Class<?> entity) {
    return getColumns(entity, Column.class);
  }

  public static String[] getColumns(Class<?> entity, Class<? extends Annotation>... annotationClass) {
    List<String> colunas = new ArrayList<String>();
    Field[] fields = entity.getDeclaredFields();
    String columnName = null;
    for (Class<? extends Annotation> class1 : annotationClass) {

      for (Field field : fields) {
        Annotation annotationColumn = field.getAnnotation(class1);
        if (annotationColumn != null) {
          if (annotationColumn instanceof Column) {
            if ("".equals(((Column) annotationColumn).name())) {
              columnName = field.getName();
            } else {
              columnName = ((Column) annotationColumn).name();
            }
          } else {
            columnName = field.getName();
          }
          colunas.add(columnName);
        }
      }
    }
    return colunas.toArray(new String[colunas.size()]);
  }

  /**
   * Retorna o ContentValues referente ao objeto.
   * 
   * @param object - Inst?ncia da entidade.
   * @return - ContentValues
   */
  @SuppressLint("SimpleDateFormat")
  public static ContentValues getContentvalues(Object object) {
    Class<?> entity = object.getClass();

    ContentValues values = new ContentValues();
    String columnName = null;

    Field[] fields = entity.getDeclaredFields();
    for (Field field : fields) {

      PrimaryKey annotationId = field.getAnnotation(PrimaryKey.class);
      Column annotationColumn = field.getAnnotation(Column.class);
      ForeignKey foreignKey = field.getAnnotation(ForeignKey.class);

  
      if (annotationId != null) {
        continue;
      }
      if (annotationColumn != null) {
        if ("".equals(annotationColumn.name())) {
          columnName = field.getName();
        } else {
          columnName = annotationColumn.name();
        }

        try {
          field.setAccessible(true);
          if (foreignKey != null && String.valueOf(field.get(object)).equalsIgnoreCase("0") ) {
            
            continue;
          }
          if (("Byte[]".equalsIgnoreCase(field.getType().getSimpleName()))
              || ("Bitmap".equalsIgnoreCase(field.getType().getSimpleName()))) {
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            Bitmap foto = null;

            Object valor = field.get(object);
            if (valor != null) {
              foto = (Bitmap) valor;
            }

            if (foto != null) {
              foto.compress(Bitmap.CompressFormat.PNG, 100, baos);
              byte[] photo = baos.toByteArray();

              values.put(columnName, photo);
            }
          } 
          else if( ("java.util.Date".equals(field.getType().getName())) || ("java.sql.Date".equals(field.getName()))
              || ("Calendar".equals(field.getType().getSimpleName()))){
            values.put(columnName, new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(field.get(object)));
          }
          else {
            values.put(columnName, String.valueOf(field.get(object)));
          }

        } catch (Exception e) {
          e.printStackTrace();
        }
      }
    }
    return values;
  }

  public static List<ForeignKey> getForeingKeys(Class<?> entity) {
    List<ForeignKey> fk = new ArrayList<ForeignKey>();

    Field[] declaredFields = entity.getDeclaredFields();
    for (Field field : declaredFields) {

      ForeignKey foreignKey = field.getAnnotation(ForeignKey.class);

      if (foreignKey != null) {
        fk.add(foreignKey);
      }

    }
    return fk;
  }

  public static Field getFieldPk(Object entity) {
    Field[] declaredFields = entity.getClass().getDeclaredFields();
    for (Field field : declaredFields) {

      PrimaryKey primaryKey = field.getAnnotation(PrimaryKey.class);

      if (primaryKey != null) {
        field.setAccessible(true);
        return field;
      }

    }
    return null;

  }
}




Java Source Code List

br.com.rafael.jpdroid.annotations.Column.java
br.com.rafael.jpdroid.annotations.DefaultOrder.java
br.com.rafael.jpdroid.annotations.DtoField.java
br.com.rafael.jpdroid.annotations.Dto.java
br.com.rafael.jpdroid.annotations.Entity.java
br.com.rafael.jpdroid.annotations.ForeignKey.java
br.com.rafael.jpdroid.annotations.Ignorable.java
br.com.rafael.jpdroid.annotations.PrimaryKey.java
br.com.rafael.jpdroid.annotations.RelationClass.java
br.com.rafael.jpdroid.annotations.ViewColumn.java
br.com.rafael.jpdroid.converters.JpdroidCsvConverter.java
br.com.rafael.jpdroid.converters.JpdroidDateUtil.java
br.com.rafael.jpdroid.converters.JpdroidDtoConverter.java
br.com.rafael.jpdroid.converters.JpdroidJsonConverter.java
br.com.rafael.jpdroid.converters.JpdroidMatrixCursorConverter.java
br.com.rafael.jpdroid.converters.JpdroidXmlConverter.java
br.com.rafael.jpdroid.core.JpdroidAbout.java
br.com.rafael.jpdroid.core.JpdroidDbHelper.java
br.com.rafael.jpdroid.core.JpdroidEntityValidation.java
br.com.rafael.jpdroid.core.JpdroidObjectMap.java
br.com.rafael.jpdroid.core.JpdroidTransaction.java
br.com.rafael.jpdroid.core.JpdroidWriteFile.java
br.com.rafael.jpdroid.core.Jpdroid.java
br.com.rafael.jpdroid.enums.Order.java
br.com.rafael.jpdroid.enums.RelationType.java
br.com.rafael.jpdroid.enums.ScriptPath.java
br.com.rafael.jpdroid.exceptions.JpdroidException.java
br.com.rafael.jpdroid.interfaces.ITransaction.java
br.com.rafael.jpdroid.util.JpdroidConverter.java
br.com.rafael.jpdroid.util.JpdroidCsvFile.java
br.com.rafael.jpdroid.util.JpdroidJsonFile.java
br.com.rafael.jpdroid.util.JpdroidXmlFile.java
br.com.rafael.pedidojpdroid.ContatoActivity.java
br.com.rafael.pedidojpdroid.EnderecoActivity.java
br.com.rafael.pedidojpdroid.ExportacoesActivity.java
br.com.rafael.pedidojpdroid.ImportacoesActivity.java
br.com.rafael.pedidojpdroid.ItensPedidoActivity.java
br.com.rafael.pedidojpdroid.ListaCidadesActivity.java
br.com.rafael.pedidojpdroid.ListaContatoActivity.java
br.com.rafael.pedidojpdroid.ListaEnderecoActivity.java
br.com.rafael.pedidojpdroid.ListaItensPedidoActivity.java
br.com.rafael.pedidojpdroid.ListaPedidoActivity.java
br.com.rafael.pedidojpdroid.ListaPessoaActivity.java
br.com.rafael.pedidojpdroid.ListaProdutoActivity.java
br.com.rafael.pedidojpdroid.ListagemPedidoActivity.java
br.com.rafael.pedidojpdroid.ListagemPessoaActivity.java
br.com.rafael.pedidojpdroid.ListagemProdutoActivity.java
br.com.rafael.pedidojpdroid.PedidoActivity.java
br.com.rafael.pedidojpdroid.PesquisaDialogActivity.java
br.com.rafael.pedidojpdroid.PessoaActivity.java
br.com.rafael.pedidojpdroid.PrincipalActivity.java
br.com.rafael.pedidojpdroid.ProdutoActivity.java
br.com.rafael.pedidojpdroid.SobreActivity.java
br.com.rafael.pedidojpdroid.dto.ContatoDTO.java
br.com.rafael.pedidojpdroid.dto.PessoaDTO.java
br.com.rafael.pedidojpdroid.entity.Cidade.java
br.com.rafael.pedidojpdroid.entity.Contato.java
br.com.rafael.pedidojpdroid.entity.Endereco.java
br.com.rafael.pedidojpdroid.entity.Estado.java
br.com.rafael.pedidojpdroid.entity.ItensPedido.java
br.com.rafael.pedidojpdroid.entity.Pedido.java
br.com.rafael.pedidojpdroid.entity.Pessoa.java
br.com.rafael.pedidojpdroid.entity.Produto.java
com.rafael.androidcomjpdroid.ContatoActivity.java
com.rafael.androidcomjpdroid.MainActivity.java
com.rafael.androidcomjpdroid.PessoaActivity.java
com.rafael.androidcomjpdroid.entity.Contato.java
com.rafael.androidcomjpdroid.entity.Pessoa.java
com.rafael.androidcomjpdroid.entity.TipoContato.java