package eu.ttbox.androgister.ui.core.crud; import android.app.Activity; import android.app.Fragment; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.widget.Toast; import de.greenrobot.dao.AbstractDao; import eu.ttbox.androgister.AndroGisterApplication; import eu.ttbox.androgister.R; import eu.ttbox.androgister.domain.DaoSession; import eu.ttbox.androgister.domain.DomainModel; import eu.ttbox.androgister.ui.core.validator.Form; public abstract class EntityEditFragment<T extends DomainModel> extends Fragment { private static final String TAG = "EntityEditFragment"; // Service private AbstractDao<T, Long> entityDao; private Form formValidator; // Instance public T entity; // =========================================================== // Constructors // =========================================================== @Override public void onActivityCreated(Bundle savedInstanceState) { Log.d(TAG, "onActivityCreated BEGIN"); super.onActivityCreated(savedInstanceState); // Service entityDao = getEntityDao(); // Form formValidator = createValidator(getActivity()); // Load Data // Bundle args = getArguments(); // loadEntity(args); } // =========================================================== // Menu // =========================================================== @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.admin_edit_menu, menu); super.onCreateOptionsMenu(menu, inflater); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.menu_admin_edit_save: onSaveClick(); return true; case R.id.menu_admin_edit_cancel: onCancelClick(); return true; case R.id.menu_admin_edit_delete: onDeleteClick(); return true; } return false; } // =========================================================== // Services // =========================================================== public DaoSession getDaoSession() { AndroGisterApplication app = (AndroGisterApplication) getActivity().getApplication(); return app.getDaoSession(); } public abstract AbstractDao<T, Long> getEntityDao(); public abstract Form createValidator(Context context); // =========================================================== // Bindings // =========================================================== public abstract void bindView(T entity); public abstract T bindValue(T entity); // =========================================================== // Load // =========================================================== public void handleIntent(Intent intent) { loadEntity(intent.getExtras()); } private void loadEntity(Bundle args) { if (args != null && args.containsKey(Intent.EXTRA_UID)) { Long entityId = args.getLong(Intent.EXTRA_UID); Log.d(TAG, "Edit Entity Id : " + entityId); entity = entityDao.load(entityId); bindView(entity); } else { Log.d(TAG, "Prepare new Entity"); // prepare for insert entity = prepareInsert(args); } } public abstract T prepareInsert(Bundle args); // =========================================================== // Action // =========================================================== public void onCancelClick() { getActivity().setResult(Activity.RESULT_CANCELED); getActivity().finish(); } public void onDeleteClick() { if (entity != null && entity.getId() != null) { entityDao.delete(entity); getActivity().setResult(Activity.RESULT_OK); } else { getActivity().setResult(Activity.RESULT_CANCELED); } getActivity().finish(); } public void onSaveClick() { if (formValidator.validate()) { bindValue(entity); // save if (entity.getId() != null) { entityDao.update(entity); Log.d(TAG, "Entity Updated Id :" + entity.getId()); } else { long productId = entityDao.insert(entity); Log.d(TAG, "Entity Inserted Id : " + productId + " ===> propagate to Entity Id : " + entity.getId()); } // productDao.insertOrReplace(entity); getActivity().setResult(Activity.RESULT_OK); getActivity().finish(); } else { Toast.makeText(getActivity(), "Invalid Form", Toast.LENGTH_LONG).show(); } } }