package sqlite.kripton58.array; import com.abubusoft.kripton.KriptonBinder; import com.abubusoft.kripton.KriptonJsonContext; import com.abubusoft.kripton.android.sqlite.SQLiteTable; import com.abubusoft.kripton.common.CollectionUtils; import com.abubusoft.kripton.common.KriptonByteArrayOutputStream; import com.abubusoft.kripton.exception.KriptonRuntimeException; import com.abubusoft.kripton.persistence.JacksonWrapperParser; import com.abubusoft.kripton.persistence.JacksonWrapperSerializer; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonToken; import java.util.ArrayList; /** * <p> * Entity <code>CharBean</code> is associated to table <code>char_bean</code> * This class represents table associated to entity. * </p> * @see CharBean */ public class CharBeanTable implements SQLiteTable { /** * Costant represents typeName of table char_bean */ public static final String TABLE_NAME = "char_bean"; /** * <p> * DDL to create table char_bean * </p> * * <pre>CREATE TABLE char_bean (id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, value BLOB, value2 BLOB);</pre> */ public static final String CREATE_TABLE_SQL = "CREATE TABLE char_bean (id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, value BLOB, value2 BLOB);"; /** * <p> * DDL to drop table char_bean * </p> * * <pre>DROP TABLE IF EXISTS char_bean;</pre> */ public static final String DROP_TABLE_SQL = "DROP TABLE IF EXISTS char_bean;"; /** * Entity's property <code>id</code> is associated to table column <code>id</code>. This costant represents column name. * * @see CharBean#id */ public static final String COLUMN_ID = "id"; /** * Entity's property <code>value</code> is associated to table column <code>value</code>. This costant represents column name. * * @see CharBean#value */ public static final String COLUMN_VALUE = "value"; /** * Entity's property <code>value2</code> is associated to table column <code>value2</code>. This costant represents column name. * * @see CharBean#value2 */ public static final String COLUMN_VALUE2 = "value2"; /** * Columns array */ private static final String[] COLUMNS = {COLUMN_ID, COLUMN_VALUE, COLUMN_VALUE2}; /** * for attribute value serialization */ public static byte[] serializeValue(char[] value) { if (value==null) { return null; } KriptonJsonContext context=KriptonBinder.jsonBind(); try (KriptonByteArrayOutputStream stream=new KriptonByteArrayOutputStream(); JacksonWrapperSerializer wrapper=context.createSerializer(stream)) { JsonGenerator jacksonSerializer=wrapper.jacksonGenerator; jacksonSerializer.writeStartObject(); int fieldCount=0; if (value!=null) { fieldCount++; int n=value.length; char item; // write wrapper tag jacksonSerializer.writeFieldName("element"); jacksonSerializer.writeStartArray(); for (int i=0; i<n; i++) { item=value[i]; jacksonSerializer.writeNumber(item); } jacksonSerializer.writeEndArray(); } jacksonSerializer.writeEndObject(); jacksonSerializer.flush(); return stream.toByteArray(); } catch(Exception e) { e.printStackTrace(); throw(new KriptonRuntimeException(e.getMessage())); } } /** * for attribute value parsing */ public static char[] parseValue(byte[] input) { if (input==null) { return null; } KriptonJsonContext context=KriptonBinder.jsonBind(); try (JacksonWrapperParser wrapper=context.createParser(input)) { JsonParser jacksonParser=wrapper.jacksonParser; // START_OBJECT jacksonParser.nextToken(); // value of "element" jacksonParser.nextValue(); char[] result=null; if (jacksonParser.currentToken()==JsonToken.START_ARRAY) { ArrayList<Character> collection=new ArrayList<>(); Character item=null; while (jacksonParser.nextToken() != JsonToken.END_ARRAY) { if (jacksonParser.currentToken()==JsonToken.VALUE_NULL) { item=null; } else { item=Character.valueOf((char)jacksonParser.getIntValue()); } collection.add(item); } result=CollectionUtils.asCharacterTypeArray(collection); } return result; } catch(Exception e) { e.printStackTrace(); throw(new KriptonRuntimeException(e.getMessage())); } } /** * for attribute value2 serialization */ public static byte[] serializeValue2(Character[] value) { if (value==null) { return null; } KriptonJsonContext context=KriptonBinder.jsonBind(); try (KriptonByteArrayOutputStream stream=new KriptonByteArrayOutputStream(); JacksonWrapperSerializer wrapper=context.createSerializer(stream)) { JsonGenerator jacksonSerializer=wrapper.jacksonGenerator; jacksonSerializer.writeStartObject(); int fieldCount=0; if (value!=null) { fieldCount++; int n=value.length; Character item; // write wrapper tag jacksonSerializer.writeFieldName("element"); jacksonSerializer.writeStartArray(); for (int i=0; i<n; i++) { item=value[i]; if (item==null) { jacksonSerializer.writeNull(); } else { jacksonSerializer.writeNumber(item); } } jacksonSerializer.writeEndArray(); } jacksonSerializer.writeEndObject(); jacksonSerializer.flush(); return stream.toByteArray(); } catch(Exception e) { e.printStackTrace(); throw(new KriptonRuntimeException(e.getMessage())); } } /** * for attribute value2 parsing */ public static Character[] parseValue2(byte[] input) { if (input==null) { return null; } KriptonJsonContext context=KriptonBinder.jsonBind(); try (JacksonWrapperParser wrapper=context.createParser(input)) { JsonParser jacksonParser=wrapper.jacksonParser; // START_OBJECT jacksonParser.nextToken(); // value of "element" jacksonParser.nextValue(); Character[] result=null; if (jacksonParser.currentToken()==JsonToken.START_ARRAY) { ArrayList<Character> collection=new ArrayList<>(); Character item=null; while (jacksonParser.nextToken() != JsonToken.END_ARRAY) { if (jacksonParser.currentToken()==JsonToken.VALUE_NULL) { item=null; } else { item=Character.valueOf((char)jacksonParser.getIntValue()); } collection.add(item); } result=CollectionUtils.asCharacterArray(collection); } return result; } catch(Exception e) { e.printStackTrace(); throw(new KriptonRuntimeException(e.getMessage())); } } /** * Columns array */ @Override public String[] columns() { return COLUMNS; } /** * table name */ @Override public String name() { return TABLE_NAME; } }