1// Initializing database instance
 2BasicDatabase db = new BasicDatabase(getContext());
 3// Getting mapper instance
 4RandomMapper mapper = (RandomMapper) db.getMapper(RandomModel.class);
 5// Initializing model
 6RandomModel toInsert = new RandomModel();
 7// Setting model fields
 8toInsert.randomInt = 10;
 9...
10// Saving model with save method
11mapper.save(toInsert);
12// Saving model with direct insert call
13mapper.insert(toInsert);
 
Click to view BasicDatabase.class: 
 1@KITTY_DATABASE(
 2        databaseName = "basic_database",
 3        domainPackageNames = {"net.akaish.kittyormdemo.sqlite.basicdb"},
 4        logTag = LOG_TAG,
 5        isLoggingOn = true,
 6        isProductionOn = true,
 7        isPragmaOn = true
 8)
 9@KITTY_DATABASE_REGISTRY(
10        domainPairs = {
11                @KITTY_REGISTRY_PAIR(model = ComplexRandomModel.class, mapper = ComplexRandomMapper.class),
12                @KITTY_REGISTRY_PAIR(model = IndexesAndConstraintsModel.class),
13                @KITTY_REGISTRY_PAIR(model = RandomModel.class, mapper = RandomMapper.class)
14        }
15)
16public class BasicDatabase extends KittyDatabase {
17
18    public static final String LOG_TAG = "BASIC DB DEMO";
19
20    /**
21     * KittyORM main database class that represents bootstrap and holder for all related with database
22     * components.
23     * <br> See {@link KittyDatabase#KittyDatabase(Context, String)} for more info.
24     *
25     * @param ctx
26     */
27    public BasicDatabase(Context ctx) {
28        super(ctx);
29    }
30
31}
 
 
 
Click to view AbstractRandomModel.class: 
 1public abstract class AbstractRandomModel extends KittyModel {
 2
 3    public static final String RND_INTEGER_CNAME = "rnd_int_custom_column_name";
 4    public static final String RND_ANIMAL_CNAME = "rndanimal";
 5
 6    @KITTY_COLUMN(
 7            isIPK = true,
 8            columnOrder = 0
 9    )
10    public Long id;
11
12    @KITTY_COLUMN(
13            columnOrder = 1
14    )
15    public int randomInt;
16
17    @KITTY_COLUMN(
18            columnOrder = 2,
19            columnName = RND_INTEGER_CNAME
20    )
21    public Integer randomInteger;
22
23    @KITTY_COLUMN(
24            columnOrder = 3,
25            columnName = RND_ANIMAL_CNAME
26    )
27    public Animals randomAnimal;
28
29    @KITTY_COLUMN(
30            columnOrder = 4,
31            columnAffinity = TypeAffinities.TEXT
32    )
33    public String randomAnimalName;
34}
 
 
 
Click to view RandomModel.class: 
 1@KITTY_TABLE
 2@KITTY_EXTENDED_CRUD(extendedCrudController = RandomMapper.class)
 3@INDEX(
 4        indexName = "random_animal_index",
 5        indexColumns = {AbstractRandomModel.RND_ANIMAL_CNAME}
 6)
 7public class RandomModel extends AbstractRandomModel {
 8
 9
10    public RandomModel() {
11        super();
12    }
13
14    @KITTY_COLUMN(columnOrder = 5)
15    public String randomAnimalSays;
16
17    @Override
18    public String toString() {
19        return new StringBuffer(64).append("[ id = ")
20                                            .append(id)
21                                            .append("; randomInt = ")
22                                            .append(Integer.toString(randomInt))
23                                            .append("; randomInteger = ")
24                                            .append(randomInteger)
25                                            .append("; randomAnimal = ")
26                                            .append(randomAnimal)
27                                            .append("; randomAnimnalLocalizedName = ")
28                                            .append(randomAnimalName)
29                                            .append("; randomAnimalSays = ")
30                                            .append(randomAnimalSays).append(" ]").toString();
31    }
32}
 
 
 
Click to view RandomMapper.class: 
 1package net.akaish.kittyormdemo.sqlite.basicdb;
 2
 3import net.akaish.kitty.orm.KittyMapper;
 4import net.akaish.kitty.orm.KittyModel;
 5import net.akaish.kitty.orm.configuration.conf.KittyTableConfiguration;
 6import net.akaish.kitty.orm.query.QueryParameters;
 7import net.akaish.kitty.orm.query.conditions.SQLiteCondition;
 8import net.akaish.kitty.orm.query.conditions.SQLiteConditionBuilder;
 9import net.akaish.kitty.orm.query.conditions.SQLiteOperator;
10import net.akaish.kitty.orm.util.KittyConstants;
11import net.akaish.kittyormdemo.sqlite.misc.Animals;
12
13import static net.akaish.kitty.orm.query.conditions.SQLiteOperator.AND;
14import static net.akaish.kitty.orm.query.conditions.SQLiteOperator.LESS_OR_EQUAL;
15import static net.akaish.kitty.orm.query.conditions.SQLiteOperator.LESS_THAN;
16import static net.akaish.kitty.orm.query.conditions.SQLiteOperator.GREATER_OR_EQUAL;
17import static net.akaish.kitty.orm.query.conditions.SQLiteOperator.GREATER_THAN;
18import static net.akaish.kittyormdemo.sqlite.basicdb.AbstractRandomModel.RND_ANIMAL_CNAME;
19
20import java.util.List;
21
22
23/**
24 * Created by akaish on 09.08.18.
25 * @author akaish (Denis Bogomolov)
26 */
27public class RandomMapper extends KittyMapper {
28
29    public <M extends KittyModel> RandomMapper(KittyTableConfiguration tableConfiguration,
30                                              M blankModelInstance,
31                                              String databasePassword) {
32        super(tableConfiguration, blankModelInstance, databasePassword);
33    }
34
35    protected SQLiteCondition getAnimalCondition(Animals animal) {
36        return new SQLiteConditionBuilder()
37                .addColumn(RND_ANIMAL_CNAME)
38                .addSQLOperator("=")
39                .addObjectValue(animal)
40                .build();
41    }
42
43    public long deleteByRandomIntegerRange(int start, int end) {
44        return deleteWhere("#?randomInt >= ? AND #?randomInt <= ?", start, end);
45    }
46
47    public long deleteByAnimal(Animals animal) {
48        return deleteWhere(getAnimalCondition(animal));
49    }
50
51    public List<RandomModel> findByAnimal(Animals animal, long offset, long limit, boolean groupingOn) {
52        SQLiteCondition condition = getAnimalCondition(animal);
53        QueryParameters qparam = new QueryParameters();
54        qparam.setLimit(limit).setOffset(offset);
55        if(groupingOn)
56            qparam.setGroupByColumns(RND_ANIMAL_CNAME);
57        else
58            qparam.setGroupByColumns(KittyConstants.ROWID);
59        return findWhere(condition, qparam);
60    }
61
62    public List<RandomModel> findByIdRange(long fromId, long toId, boolean inclusive, Long offset, Long limit) {
63        SQLiteCondition condition = new SQLiteConditionBuilder()
64                .addColumn("id")
65                .addSQLOperator(inclusive ? GREATER_OR_EQUAL : GREATER_THAN)
66                .addValue(fromId)
67                .addSQLOperator(AND)
68                .addColumn("id")
69                .addSQLOperator(inclusive ? LESS_OR_EQUAL : LESS_THAN)
70                .addValue(toId)
71                .build();
72        QueryParameters qparam = new QueryParameters();
73        qparam.setLimit(limit).setOffset(offset).setGroupByColumns(KittyConstants.ROWID);
74        return findWhere(condition, qparam);
75    }
76
77    public List<RandomModel> findAllRandomModels(Long offset, Long limit) {
78        QueryParameters qparam = new QueryParameters();
79        qparam.setLimit(limit).setOffset(offset).setGroupByColumns(KittyConstants.ROWID);
80        return findAll(qparam);
81    }
82
83}
 
 
 
Click to view ComplexRandomModel.class: 
  1@KITTY_TABLE
  2@KITTY_EXTENDED_CRUD(extendedCrudController = ComplexRandomMapper.class)
  3public class ComplexRandomModel extends AbstractRandomModel {
  4
  5    public ComplexRandomModel() {
  6        super();
  7    }
  8
  9
 10    // Primitives
 11    // (boolean, int, byte, double, long, short, float)
 12    @KITTY_COLUMN(columnOrder = 5)
 13    public boolean boolF;
 14
 15
 16    @KITTY_COLUMN(columnOrder = 6)
 17    public byte byteF;
 18
 19    @KITTY_COLUMN(columnOrder = 7)
 20    public double doubleF;
 21
 22    @KITTY_COLUMN(columnOrder = 8)
 23    public long longF;
 24
 25    @KITTY_COLUMN(columnOrder = 9)
 26    public short shortF;
 27
 28    @KITTY_COLUMN(columnOrder = 10)
 29    public float floatF;
 30
 31    // Byte array
 32    @KITTY_COLUMN(columnOrder = 11)
 33    public byte[] byteArray;
 34
 35    // String (TEXT) (String, BigDecimal, BigInteger, Enum)
 36    @KITTY_COLUMN(columnOrder = 12)
 37    public String stringF;
 38
 39    @KITTY_COLUMN(columnOrder = 13)
 40    public BigDecimal bigDecimalF;
 41
 42    @KITTY_COLUMN(columnOrder = 14)
 43    public BigInteger bigIntegerF;
 44
 45    @KITTY_COLUMN(columnOrder = 15)
 46    public Uri uriF;
 47
 48    @KITTY_COLUMN(columnOrder = 16)
 49    public File fileF;
 50
 51    @KITTY_COLUMN(columnOrder = 17)
 52    public Currency currencyF;
 53
 54    // SD
 55    @KITTY_COLUMN(
 56            columnOrder = 18,
 57            columnAffinity = TypeAffinities.TEXT
 58    )
 59    @KITTY_COLUMN_SERIALIZATION
 60    public AnimalSounds stringSDF;
 61
 62    @KITTY_COLUMN(columnOrder = 19)
 63    public SomeColours bitmapColour;
 64
 65    @KITTY_COLUMN(
 66            columnOrder = 20,
 67            columnAffinity = TypeAffinities.BLOB
 68    )
 69    @KITTY_COLUMN_SERIALIZATION
 70    public Bitmap byteArraySDF;
 71
 72    String stringSDFSerialize() {
 73        if(stringSDF == null) return null;
 74        return new GsonBuilder().create().toJson(stringSDF);
 75    }
 76
 77    AnimalSounds stringSDFDeserialize(String cvData) {
 78        if(cvData == null) return null;
 79        if(cvData.length() == 0) return null;
 80        return new GsonBuilder().create().fromJson(cvData, AnimalSounds.class);
 81    }
 82
 83    public byte[] byteArraySDFSerialize() {//byteArraySDFSerialize
 84        if(byteArraySDF == null) return null;
 85        ByteArrayOutputStream bmpStream = new ByteArrayOutputStream();
 86        byteArraySDF.compress(Bitmap.CompressFormat.PNG, 100, bmpStream);
 87        return bmpStream.toByteArray();
 88    }
 89
 90    public Bitmap byteArraySDFDeserialize(byte[] cursorData) {
 91        if(cursorData == null) return null;
 92        if(cursorData.length == 0) return null;
 93        return BitmapFactory.decodeByteArray(cursorData, 0, cursorData.length);
 94    }
 95
 96    // Primitive wrappers Boolean, Integer, Byte, Double, Short or Float
 97    @KITTY_COLUMN(columnOrder = 21)
 98    public Boolean boolFF;
 99
100
101    @KITTY_COLUMN(columnOrder = 22)
102    public Byte byteFF;
103
104    @KITTY_COLUMN(columnOrder = 23)
105    public Double doubleFF;
106
107    @KITTY_COLUMN(columnOrder = 24)
108    public Short shortFF;
109
110    @KITTY_COLUMN(columnOrder = 25)
111    public Float floatFF;
112
113
114    // Long represented types Long, Date, Calendar, Timestamp
115    @KITTY_COLUMN(columnOrder = 26)
116    public Long longFF;
117
118    @KITTY_COLUMN(columnOrder = 27)
119    public Date dateF;
120
121    @KITTY_COLUMN(columnOrder = 28)
122    public Calendar calendarF;
123
124    @KITTY_COLUMN(columnOrder = 29)
125    public Timestamp timestampF;
126
127    @Override
128    public String toString() {
129        StringBuffer out = new StringBuffer(256);
130        out.append("Long id : "+id+"\r\n");
131        out.append("int randomInt : "+randomInt+"\r\n");
132        out.append("String stringF : "+stringF+"\r\n");
133        out.append("BigInteger bigIntegerF : "+bigIntegerF+"\r\n");
134        out.append("SomeColours bitmapColour : "+bitmapColour+"\r\n");
135        out.append("Short shortFF : "+shortFF+"\r\n");
136        out.append("Timestamp timestampF (HReadable) : "+timestampF+"\r\n");
137        out.append("AnimalSounds stringSDF (HReadable) : "+stringSDFSerialize()+"\r\n");
138        out.append("Uri uriF : " + uriF+"\r\n");
139        out.append("Currency currencyF : " + currencyF.getSymbol()+"\r\n");
140        out.append("... \r\n");
141        return out.toString();
142    }
143
144    public String toShortString() {
145        StringBuffer out = new StringBuffer(256);
146        out.append("[ Long id : "+id+"; ");
147        out.append("int randomInt : "+randomInt+"; ");
148        out.append("String stringF : "+stringF+"; ");
149        out.append("BigInteger bigIntegerF : "+bigIntegerF+"; ");
150        out.append("SomeColours bitmapColour : "+bitmapColour+"; ");
151        out.append("Short shortFF : "+shortFF+"; ");
152        out.append("Timestamp timestampF (HReadable) : "+timestampF+"; ... ]");
153        return out.toString();
154    }
155
156    @Deprecated
157    public String toHTMLString() {
158        StringBuffer out = new StringBuffer(2048);
159        out.append("<br>Long id : "+id.toString()+"\r\n");
160        out.append("<br><b>PRIMITIVES</b>"+"\r\n");
161        out.append("<br>boolean boolF : "+Boolean.toString(boolF)+"\r\n");
162        out.append("<br>int randomInt : "+Integer.toString(randomInt)+"\r\n");
163        out.append("<br>byte byteF : "+Byte.toString(byteF)+"\r\n");
164        out.append("<br>double doubleF : "+Double.toString(doubleF)+"\r\n");
165        out.append("<br>long longF : "+Long.toString(longF)+"\r\n");
166        out.append("<br>short shortF : "+Short.toString(shortF)+"\r\n");
167        out.append("<br>float floatF : "+Float.toString(floatF)+"\r\n");
168        out.append("<br>byte[] byteArray : "+byteArrayToString(byteArray)+"\r\n");
169        out.append("<br><b>STRING AFFINITIES</b>"+"\r\n");
170        out.append("<br>String randomAnimalName : "+randomAnimalName+"\r\n");
171        out.append("<br>String stringF : "+stringF+"\r\n");
172        out.append("<br>BigDecimal bigDecimalF : "+bigDecimalF.toEngineeringString()+"\r\n");
173        out.append("<br>BigInteger bigIntegerF : "+bigIntegerF.toString()+"\r\n");
174        out.append("<br>Animals randomAnimal : "+randomAnimal.toString()+"\r\n");
175        out.append("<br><b>SERIALIZATION AND DESERIALIZATION</b>"+"\r\n");
176        out.append("<br>AnimalSounds stringSDF : "+stringSDFSerialize()+"\r\n");
177        out.append("<br>SomeColours bitmapColour : "+bitmapColour.toString()+"\r\n");
178        out.append("<br><b>PRIMITIVE WRAPPERS</b>"+"\r\n");
179        out.append("<br>Boolean boolFF : "+boolFF.toString()+"\r\n");
180        out.append("<br>Integer randomInteger : "+randomInteger.toString()+"\r\n");
181        out.append("<br>Byte byteFF : "+byteFF.toString()+"\r\n");
182        out.append("<br>Double doubleFF : "+doubleFF.toString()+"\r\n");
183        out.append("<br>Short shortFF : "+shortFF.toString()+"\r\n");
184        out.append("<br>Float floatFF :"+floatFF.toString()+"\r\n");
185        out.append("<br><b>LONG REPRESENTED TYPES</b>"+"\r\n");
186        out.append("<br>Long longFF : "+longFF.toString()+"\r\n");
187        out.append("<br>Date dateF : "+Long.toString(dateF.getTime())+"\r\n");
188        out.append("<br>Calendar calendarF : "+Long.toString(calendarF.getTimeInMillis())+"\r\n");
189        out.append("<br>Timestamp timestampF : "+Long.toString(timestampF.getTime())+"\r\n");
190        out.append("<br>Date dateF (HReadable) : "+dateF.toString()+"\r\n");
191        out.append("<br>Calendar calendarF (HReadable) : "+calendarF.getTime().toString()+"\r\n");
192        out.append("<br>Timestamp timestampF (HReadable) : "+timestampF.toString()+"\r\n");
193        return out.toString();
194    }
195
196    public String byteArrayToString(byte[] toString) {
197        String[] strings = new String[toString.length];
198        for(int i = 0; i < toString.length; i++) {
199            strings[i] = Byte.toString(toString[i]);
200        }
201        return KittyUtils.implodeWithCommaInBKT(strings);
202    }
203}
 
 
 
Click to view IndexesAndConstraintsModel.class: 
 1@KITTY_TABLE(tableName = "cai")
 2@FOREIGN_KEY_T(
 3        name = "CAI_FK",
 4        columns = {IndexesAndConstraintsModel.RANDOM_ID_CNAME},
 5        reference = @FOREIGN_KEY_REFERENCE(
 6                foreignTableName = "random",
 7                foreignTableColumns = {"id"},
 8                onUpdate = OnUpdateDeleteActions.CASCADE,
 9                onDelete = OnUpdateDeleteActions.CASCADE
10        )
11)
12@INDEX(indexColumns = {"creation_date"})
13public class IndexesAndConstraintsModel extends KittyModel {
14    static final String RANDOM_ID_CNAME = "rnd_id";
15
16    @KITTY_COLUMN(columnOrder = 0)
17    @PRIMARY_KEY
18    @NOT_NULL
19    public Long id;
20
21    @KITTY_COLUMN(columnOrder = 1)
22    @NOT_NULL
23    @UNIQUE
24    public Long rndId;
25
26    @KITTY_COLUMN(columnOrder = 2)
27    @CHECK(checkExpression = "animal IN (\"CAT\", \"TIGER\", \"LION\")") // only cats allowed to this party
28    public Animals animal;
29
30    @KITTY_COLUMN(columnOrder = 3)
31    @DEFAULT(signedInteger = 28) // You can choose for options for default declaration, if nothing set than 0 value would be used
32    @NOT_NULL
33    public Integer defaultNumber;
34
35    @KITTY_COLUMN(columnOrder = 4)
36    @DEFAULT(
37            predefinedLiteralValue = LiteralValues.CURRENT_DATE
38    )
39    @NOT_NULL
40    public String creationDate;
41
42    @KITTY_COLUMN(columnOrder = 5)
43    @DEFAULT(
44            predefinedLiteralValue = LiteralValues.CURRENT_TIMESTAMP
45    )
46    @ONE_COLUMN_INDEX(unique = true, indexName = "IAC_unique_index_creation_timestamp")
47    @NOT_NULL
48    public Timestamp creationTmstmp;
49
50    @Override
51    public String toString() {
52        StringBuilder sb = new StringBuilder(64);
53        sb.append("[ RowID = ").append(getRowID())
54                .append(" ; id = ").append(id)
55                .append(" ; rndId = ").append(rndId)
56                .append(" ; animal = ").append(animal)
57                .append(" ; defaultNumber = ").append(defaultNumber)
58                .append(" ; creationDate = ").append(creationDate)
59                .append(" ; creationTmstmp = ").append(creationTmstmp).append(" ]");
60        return sb.toString();
61    }
62}
 
 
 
Click to view RNDRandomModelFactory.class: 
 1public class RNDRandomModelFactory {
 2
 3    private final Context context;
 4    private final Random randomizer;
 5
 6    private final SparseArray<String> randomAnimalSays = new SparseArray<>();
 7    private final SparseArray<String> randomAnimalLocalizedName = new SparseArray<>();
 8
 9    public RNDRandomModelFactory(Context context) {
10        super();
11        this.context = context;
12        this.randomizer = new Random();
13
14        // Lol, getContext().getString() method is slow, calling for each new random model this method twice causes 55% of all execution time of generating new random model (!)
15        // Right now getting those string causes only 14% of execution time
16        randomAnimalSays.append(Animals.getLocalizedAnimalSaysResource(Animals.BEAR), context.getString(Animals.getLocalizedAnimalSaysResource(Animals.BEAR)));
17        randomAnimalSays.append(Animals.getLocalizedAnimalSaysResource(Animals.CAT), context.getString(Animals.getLocalizedAnimalSaysResource(Animals.CAT)));
18        randomAnimalSays.append(Animals.getLocalizedAnimalSaysResource(Animals.DOG), context.getString(Animals.getLocalizedAnimalSaysResource(Animals.DOG)));
19        randomAnimalSays.append(Animals.getLocalizedAnimalSaysResource(Animals.GOAT), context.getString(Animals.getLocalizedAnimalSaysResource(Animals.GOAT)));
20        randomAnimalSays.append(Animals.getLocalizedAnimalSaysResource(Animals.LION), context.getString(Animals.getLocalizedAnimalSaysResource(Animals.LION)));
21        randomAnimalSays.append(Animals.getLocalizedAnimalSaysResource(Animals.SHEEP), context.getString(Animals.getLocalizedAnimalSaysResource(Animals.SHEEP)));
22        randomAnimalSays.append(Animals.getLocalizedAnimalSaysResource(Animals.TIGER), context.getString(Animals.getLocalizedAnimalSaysResource(Animals.TIGER)));
23        randomAnimalSays.append(Animals.getLocalizedAnimalSaysResource(Animals.WOLF), context.getString(Animals.getLocalizedAnimalSaysResource(Animals.WOLF)));
24
25
26        randomAnimalLocalizedName.append(Animals.getLocalizedAnimalNameResource(Animals.BEAR), context.getString(Animals.getLocalizedAnimalNameResource(Animals.BEAR)));
27        randomAnimalLocalizedName.append(Animals.getLocalizedAnimalNameResource(Animals.CAT), context.getString(Animals.getLocalizedAnimalNameResource(Animals.CAT)));
28        randomAnimalLocalizedName.append(Animals.getLocalizedAnimalNameResource(Animals.DOG), context.getString(Animals.getLocalizedAnimalNameResource(Animals.DOG)));
29        randomAnimalLocalizedName.append(Animals.getLocalizedAnimalNameResource(Animals.GOAT), context.getString(Animals.getLocalizedAnimalNameResource(Animals.GOAT)));
30        randomAnimalLocalizedName.append(Animals.getLocalizedAnimalNameResource(Animals.LION), context.getString(Animals.getLocalizedAnimalNameResource(Animals.LION)));
31        randomAnimalLocalizedName.append(Animals.getLocalizedAnimalNameResource(Animals.SHEEP), context.getString(Animals.getLocalizedAnimalNameResource(Animals.SHEEP)));
32        randomAnimalLocalizedName.append(Animals.getLocalizedAnimalNameResource(Animals.TIGER), context.getString(Animals.getLocalizedAnimalNameResource(Animals.TIGER)));
33        randomAnimalLocalizedName.append(Animals.getLocalizedAnimalNameResource(Animals.WOLF), context.getString(Animals.getLocalizedAnimalNameResource(Animals.WOLF)));
34
35    }
36
37    public RandomModel newRandomModel() {
38        RandomModel out = new RandomModel();
39        out.randomInt = randomizer.nextInt();
40        out.randomInteger = randomizer.nextInt();
41        out.randomAnimal = Animals.rndAnimal(randomizer);
42        out.randomAnimalSays = randomAnimalSays.get(Animals.getLocalizedAnimalSaysResource(out.randomAnimal));
43        out.randomAnimalName = randomAnimalLocalizedName.get(Animals.getLocalizedAnimalNameResource(out.randomAnimal));
44        return out;
45    }
46}
 
 
 
Click to view Lesson2Tab1New.class: 
  1public class Lesson2Tab1New extends Lesson2BaseFragment {
  2
  3    private BasicDatabase db;
  4
  5    private EditText randomIntET;
  6    private EditText randomIntegerET;
  7
  8    private EditText randomAnimalNameET;
  9    private EditText randomAnimalSaysET;
 10
 11
 12
 13    private Button saveButton;
 14
 15
 16    public Lesson2Tab1New() {};
 17
 18    @Override
 19    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
 20        View rootView = inflater.inflate(R.layout.lesson2_tab1_new, container, false);
 21
 22
 23        randomAnimalNameET = (EditText) rootView.findViewById(R.id.l2_t1_et_animal_localised_name);
 24        randomAnimalSaysET = (EditText) rootView.findViewById(R.id.l2_t1_et_animal_says);
 25
 26        randomIntET = (EditText) rootView.findViewById(R.id.l2_t1_et_random_int);
 27        randomIntegerET = (EditText) rootView.findViewById(R.id.l2_t1_et_random_integer);
 28
 29
 30
 31        saveButton = (Button) rootView.findViewById(R.id._l2_t1_save_button);
 32        saveButton.setOnClickListener(new View.OnClickListener() {
 33            @Override
 34            public void onClick(View v) {
 35                go();
 36            }
 37        });
 38
 39        setUpExpandedList(
 40                rootView,
 41                R.id._l2_t1_expanded_panel_lw,
 42                R.id._l2_t1_expanded_panel_text,
 43                R.string._l2_t1_expanded_panel_text_pattern
 44        );
 45
 46        setAnimalSpinner(rootView, R.id.l2_t1_spinner, new AdapterView.OnItemSelectedListener() {
 47            @Override
 48            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
 49                String enumStringName = (String) animalSpinner.getAdapter().getItem(position);
 50                if(enumStringName.equals(animalAdapter.getItem(animalAdapter.getCount()))) {
 51                    // do nothing, skip spinner hint
 52                } else {
 53                    Animals animal = Animals.valueOf(enumStringName);
 54                    randomAnimalNameET.setText(Animals.getLocalizedAnimalNameResource(animal));
 55                    randomAnimalSaysET.setText(Animals.getLocalizedAnimalSaysResource(animal));
 56                }
 57            }
 58
 59            @Override
 60            public void onNothingSelected(AdapterView<?> parent) {
 61
 62            }
 63        });
 64
 65
 66        getDb().printPregeneratedCreateSchemaToLog("KittyORM BDB C");
 67        getDb().printPregeneratedDropSchemaToLog("KittyORM BDB D");
 68
 69        return rootView;
 70    }
 71
 72    void textWarnDialog() {
 73        getLessonActivity().showWarningDialog(R.string._warning_dialog_title, R.string._warning_dialog_test_message_big, R.string._warning_dialog_ok_button_text);
 74    }
 75
 76    void go() {
 77        String randomInt = randomIntET.getText().toString();
 78        String randomInteger = randomIntegerET.getText().toString();
 79        String animalEnumStringValue = animalSpinner.getSelectedItem().toString();
 80
 81        if(animalEnumStringValue.equals(animalAdapter.getItem(animalAdapter.getCount()))) {
 82            getLessonActivity().showWarningDialog(R.string._warning_dialog_title, R.string._l2_t1_warning_text, R.string._warning_dialog_ok_button_text);
 83            return;
 84        }
 85        if(randomInt == null || randomInteger == null) {
 86            getLessonActivity().showWarningDialog(R.string._warning_dialog_title, R.string._l2_t1_warning_text, R.string._warning_dialog_ok_button_text);
 87            return;
 88        }
 89        if(randomInt.length() == 0 || randomInteger.length() == 0) {
 90            getLessonActivity().showWarningDialog(R.string._warning_dialog_title, R.string._l2_t1_warning_text, R.string._warning_dialog_ok_button_text);
 91            return;
 92        }
 93        int rndInt = 0; Integer rndInteger = null;
 94        try {
 95            rndInt = Integer.parseInt(randomInt);
 96            rndInteger = Integer.valueOf(randomInteger);
 97        } catch (Exception e) {
 98            getLessonActivity().showWarningDialog(R.string._warning_dialog_title, R.string._l2_t1_warning_bad_input, R.string._warning_dialog_ok_button_text);
 99            return;
100        }
101        RandomModel toInsert = new RandomModel();
102        toInsert.randomInt = rndInt;
103        toInsert.randomInteger = rndInteger;
104        Animals animal = Animals.valueOf(animalEnumStringValue);
105        toInsert.randomAnimal = animal;
106        toInsert.randomAnimalName = getString(Animals.getLocalizedAnimalNameResource(animal));
107        toInsert.randomAnimalSays = getString(Animals.getLocalizedAnimalSaysResource(animal));
108        KittyMapper mapper = getMapper();
109        long rowid = mapper.insert(toInsert);
110        if(rowid > 0) {
111            addNewEventToExpandedPanel(format(getString(R.string._l2_t1_expanded_added), rowid, toInsert, mapper.countAll()));
112        } else {
113            addNewEventToExpandedPanel(format(getString(R.string._l2_t1_expanded_error), toInsert));
114        }
115        mapper.close();
116    }
117
118    @Override
119    public void onCreate(Bundle bundle) {
120        super.onCreate(bundle);
121    }
122
123    // Fab menu section
124
125    @Override
126    public View.OnClickListener helpFabMenuAction() {
127        return new View.OnClickListener() {
128            @Override
129            public void onClick(View v) {
130                ((KittyTutorialActivity)getActivity()).showWebViewDialog(LessonsUriConstants.L2_T1_TUTORIAL);
131            }
132        };
133    }
134
135    @Override
136    public View.OnClickListener sourceFabMenuAction() {
137        return new View.OnClickListener() {
138            @Override
139            public void onClick(View v) {
140                ((KittyTutorialActivity)getActivity()).showWebViewDialog(LessonsUriConstants.L2_T1_SOURCE);
141            }
142        };
143    }
144
145    @Override
146    public View.OnClickListener schemaFabMenuAction() {
147        return new View.OnClickListener() {
148            @Override
149            public void onClick(View v) {
150                ((KittyTutorialActivity)getActivity()).showWebViewDialog(LessonsUriConstants.L2_T1_SCHEMA);
151            }
152        };
153    }
154
155    @Override
156    protected int snackbarMessageResource() {
157        return R.string._l2_t1_snackbar_message;
158    }
159}