use of com.faltenreich.diaguard.shared.data.database.entity.FoodEaten in project Diaguard by Faltenreich.
the class CsvExport method doInBackground.
@Override
protected File doInBackground(Void... params) {
DateTime dateStart = config.getDateStart();
DateTime dateEnd = config.getDateEnd();
Category[] categories = config.getCategories();
boolean isBackup = config.isBackup();
File file = isBackup ? Export.getBackupFile(config, FileType.CSV) : Export.getExportFile(config);
try {
FileWriter fileWriter = new FileWriter(file);
CSVWriter writer = new CSVWriter(fileWriter, CsvMeta.CSV_DELIMITER);
if (isBackup) {
// Meta information to detect the data scheme in future iterations
String[] meta = new String[] { CsvMeta.CSV_KEY_META, Integer.toString(DatabaseHelper.getVersion()) };
writer.writeNext(meta);
List<Tag> tags = TagDao.getInstance().getAll();
for (Tag tag : tags) {
writer.writeNext(ArrayUtils.add(tag.getValuesForBackup(), 0, tag.getKeyForBackup()));
}
List<Food> foods = FoodDao.getInstance().getAllFromUser();
for (Food food : foods) {
writer.writeNext(ArrayUtils.add(food.getValuesForBackup(), 0, food.getKeyForBackup()));
}
}
List<Entry> entries = dateStart != null && dateEnd != null ? EntryDao.getInstance().getEntriesBetween(dateStart, dateEnd) : EntryDao.getInstance().getAll();
int position = 0;
for (Entry entry : entries) {
publishProgress(String.format(Locale.getDefault(), "%s %d/%d", config.getContext().getString(R.string.entry), position, entries.size()));
writer.writeNext(isBackup ? ArrayUtils.add(entry.getValuesForBackup(), 0, entry.getKeyForBackup()) : entry.getValuesForExport());
List<Measurement> measurements = categories != null ? EntryDao.getInstance().getMeasurements(entry, categories) : EntryDao.getInstance().getMeasurements(entry);
for (Measurement measurement : measurements) {
writer.writeNext(isBackup ? ArrayUtils.add(measurement.getValuesForBackup(), 0, measurement.getKeyForBackup()) : measurement.getValuesForExport());
if (isBackup && measurement instanceof Meal) {
Meal meal = (Meal) measurement;
for (FoodEaten foodEaten : meal.getFoodEaten()) {
if (foodEaten.getMeal() != null && foodEaten.getFood() != null) {
writer.writeNext(ArrayUtils.add(foodEaten.getValuesForBackup(), 0, foodEaten.getKeyForBackup()));
}
}
}
}
if (isBackup) {
List<EntryTag> entryTags = EntryTagDao.getInstance().getAll(entry);
for (EntryTag entryTag : entryTags) {
if (entryTag.getEntry() != null && entryTag.getTag() != null) {
writer.writeNext(ArrayUtils.add(entryTag.getValuesForBackup(), 0, entryTag.getKeyForBackup()));
}
}
}
position++;
}
writer.close();
} catch (IOException exception) {
Log.e(TAG, exception.toString());
}
return file;
}
use of com.faltenreich.diaguard.shared.data.database.entity.FoodEaten in project Diaguard by Faltenreich.
the class CsvImport method importFromVersion3_0.
@SuppressWarnings("ParameterCanBeLocal")
private void importFromVersion3_0(CSVReader reader, String[] nextLine) throws Exception {
Entry lastEntry = null;
Meal lastMeal = null;
while ((nextLine = reader.readNext()) != null) {
switch(nextLine[0]) {
case Tag.BACKUP_KEY:
if (nextLine.length >= 2) {
String tagName = nextLine[1];
if (TagDao.getInstance().getByName(tagName) == null) {
Tag tag = new Tag();
tag.setName(nextLine[1]);
TagDao.getInstance().createOrUpdate(tag);
}
}
break;
case Food.BACKUP_KEY:
if (nextLine.length >= 5) {
String foodName = nextLine[1];
Food food = FoodDao.getInstance().get(foodName);
if (food == null) {
food = new Food();
food.setName(foodName);
food.setBrand(nextLine[2]);
food.setIngredients(nextLine[3]);
food.setCarbohydrates(FloatUtils.parseNumber(nextLine[4]));
FoodDao.getInstance().createOrUpdate(food);
} else if (food.isDeleted()) {
// Reactivate previously deleted food that is being re-imported
food.setDeletedAt(null);
FoodDao.getInstance().createOrUpdate(food);
}
}
break;
case Entry.BACKUP_KEY:
lastMeal = null;
if (nextLine.length >= 3) {
DateTime parsedDateTime = DateTimeFormat.forPattern(Export.BACKUP_DATE_FORMAT).parseDateTime(nextLine[1]);
DateStrategy dateStrategy = this.dateStrategy != null ? this.dateStrategy : defaultDateStrategy;
DateTime dateTime = dateStrategy.convertDate(parsedDateTime);
lastEntry = new Entry();
lastEntry.setDate(dateTime);
String note = nextLine[2];
lastEntry.setNote(note != null && note.length() > 0 ? note : null);
lastEntry = EntryDao.getInstance().createOrUpdate(lastEntry);
break;
}
case Measurement.BACKUP_KEY:
if (lastEntry != null && nextLine.length >= 3) {
Category category = Helper.valueOf(Category.class, nextLine[1]);
if (category != null) {
try {
Measurement measurement = category.toClass().newInstance();
List<Float> valueList = new ArrayList<>();
for (int position = 2; position < nextLine.length; position++) {
String valueString = nextLine[position];
try {
valueList.add(FloatUtils.parseNumber(valueString));
} catch (NumberFormatException exception) {
Log.e(TAG, exception.toString());
}
}
float[] values = new float[valueList.size()];
for (int position = 0; position < valueList.size(); position++) {
values[position] = valueList.get(position);
}
measurement.setValues(values);
measurement.setEntry(lastEntry);
MeasurementDao.getInstance(category.toClass()).createOrUpdate(measurement);
if (measurement instanceof Meal) {
lastMeal = (Meal) measurement;
}
} catch (InstantiationException exception) {
Log.e(TAG, exception.toString());
} catch (IllegalAccessException exception) {
Log.e(TAG, exception.toString());
}
}
}
break;
case EntryTag.BACKUP_KEY:
if (lastEntry != null && nextLine.length >= 2) {
Tag tag = TagDao.getInstance().getByName(nextLine[1]);
if (tag != null) {
EntryTag entryTag = new EntryTag();
entryTag.setEntry(lastEntry);
entryTag.setTag(tag);
EntryTagDao.getInstance().createOrUpdate(entryTag);
}
}
break;
case FoodEaten.BACKUP_KEY:
if (lastMeal != null && nextLine.length >= 3) {
Food food = FoodDao.getInstance().get(nextLine[1]);
if (food != null) {
FoodEaten foodEaten = new FoodEaten();
foodEaten.setMeal(lastMeal);
foodEaten.setFood(food);
foodEaten.setAmountInGrams(FloatUtils.parseNumber(nextLine[2]));
FoodEatenDao.getInstance().createOrUpdate(foodEaten);
}
}
break;
}
}
}
use of com.faltenreich.diaguard.shared.data.database.entity.FoodEaten in project Diaguard by Faltenreich.
the class FoodInputView method addItem.
private void addItem(Food food) {
if (food != null) {
FoodEaten foodEaten = new FoodEaten();
foodEaten.setFood(food);
foodEaten.setMeal(meal);
addItem(foodEaten);
}
}
use of com.faltenreich.diaguard.shared.data.database.entity.FoodEaten in project Diaguard by Faltenreich.
the class FoodInputViewHolder method showNumberPicker.
private void showNumberPicker() {
if (getContext() instanceof AppCompatActivity) {
AppCompatActivity activity = (AppCompatActivity) getContext();
new NumberPickerDialog(getContext(), R.string.grams_milliliters_acronym, getAmountFromButton(), 1, 10000, (number) -> {
FoodEaten foodEaten = getItem();
foodEaten.setAmountInGrams(number.floatValue());
Events.post(new FoodEatenUpdatedEvent(foodEaten, getAdapterPosition()));
}).show(activity.getSupportFragmentManager());
}
}
use of com.faltenreich.diaguard.shared.data.database.entity.FoodEaten in project Diaguard by Faltenreich.
the class FoodHistoryListAdapter method onBindViewHolder.
@Override
public void onBindViewHolder(FoodHistoryViewHolder holder, int position) {
FoodEaten foodEaten = getItem(holder.getAdapterPosition());
holder.bind(foodEaten);
holder.itemView.setOnClickListener((view) -> listener.onItemSelected(foodEaten));
}
Aggregations