Author: kmorin Date: 2014-01-24 12:39:51 +0100 (Fri, 24 Jan 2014) New Revision: 23 Url: http://forge.codelutin.com/projects/wlo/repository/revisions/23 Log: fixes #4166 Import des r?\195?\169f?\195?\169rentiels Modified: trunk/res/values-fr/strings.xml trunk/res/values/strings.xml trunk/src/fr/ifremer/wlo/models/referentials/imports/ImportUtil.java trunk/src/fr/ifremer/wlo/preferences/SettingsActivity.java Modified: trunk/res/values/strings.xml =================================================================== --- trunk/res/values/strings.xml 2014-01-24 10:26:23 UTC (rev 22) +++ trunk/res/values/strings.xml 2014-01-24 11:39:51 UTC (rev 23) @@ -96,6 +96,8 @@ <string name="preferences_import_no_external_storage_message">No externat storage is available.\nWould you like to import the data without saving the source file?</string> <string name="preferences_importing_referential">Importing referential data</string> + <string name="import_new_element_number">%s new items imported</string> + <!-- Contexts --> <string name="add_context">Create a new context</string> <string name="contexts_title">Contexts</string> Modified: trunk/res/values-fr/strings.xml =================================================================== --- trunk/res/values-fr/strings.xml 2014-01-24 10:26:23 UTC (rev 22) +++ trunk/res/values-fr/strings.xml 2014-01-24 11:39:51 UTC (rev 23) @@ -91,6 +91,8 @@ <string name="preferences_import_no_external_storage_message">Aucun stockage externe n\'est disponible.\nVoulez vous continuer sans sauvegarder le fichier d\'origine ?</string> <string name="preferences_importing_referential">Import des données du référentiel en cours</string> + <string name="import_new_element_number">%s nouveaux éléments importés</string> + <!-- Contexts --> <string name="add_context">Créer un nouveau contexte</string> <string name="contexts_title">Contextes</string> Modified: trunk/src/fr/ifremer/wlo/models/referentials/imports/ImportUtil.java =================================================================== --- trunk/src/fr/ifremer/wlo/models/referentials/imports/ImportUtil.java 2014-01-24 10:26:23 UTC (rev 22) +++ trunk/src/fr/ifremer/wlo/models/referentials/imports/ImportUtil.java 2014-01-24 11:39:51 UTC (rev 23) @@ -2,7 +2,14 @@ import android.content.Context; import android.util.Log; +import android.widget.Toast; +import com.google.common.base.Function; +import com.google.common.base.Preconditions; +import com.google.common.base.Predicate; +import com.google.common.collect.Collections2; import com.google.common.collect.Lists; +import fr.ifremer.wlo.R; +import fr.ifremer.wlo.models.referentials.HasCode; import fr.ifremer.wlo.storage.DataCache; import fr.ifremer.wlo.storage.WloSqlOpenHelper; import fr.ifremer.wlo.models.BaseModel; @@ -12,6 +19,7 @@ import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.InputStream; +import java.util.Collection; import java.util.List; /** @@ -24,166 +32,223 @@ public static final char CSV_SEPARATOR = ';'; - public static void importAges(Context context, String path) { + public static int importAges(Context context, String path) { try { - importAges(context, new FileInputStream(path)); + return importAges(context, new FileInputStream(path)); } catch (FileNotFoundException e) { Log.e(TAG, "File " + path + " not found", e); } + return 0; } - public static void importAges(Context context, InputStream inputStream) { + public static int importAges(Context context, InputStream inputStream) { AgeRowModel ageRowModel = new AgeRowModel(CSV_SEPARATOR); - importData(context, ageRowModel, inputStream); + int result = importData(context, ageRowModel, inputStream, DataCache.getAllAges(context)); DataCache.invalidateAges(); + return result; } - public static void importCommercialSpecies(Context context, String path) { + public static int importCommercialSpecies(Context context, String path) { try { - importCommercialSpecies(context, new FileInputStream(path)); + return importCommercialSpecies(context, new FileInputStream(path)); } catch (FileNotFoundException e) { Log.e(TAG, "File " + path + " not found", e); } + return 0; } - public static void importCommercialSpecies(Context context, InputStream inputStream) { + public static int importCommercialSpecies(Context context, InputStream inputStream) { CommercialSpeciesRowModel commercialSpeciesRowModel = new CommercialSpeciesRowModel(CSV_SEPARATOR); - importData(context, commercialSpeciesRowModel, inputStream); + int result = importData(context, commercialSpeciesRowModel, inputStream, DataCache.getAllCommercialSpecies(context)); DataCache.invalidateCommercialSpecies(); + return result; } - public static void importGenders(Context context, String path) { + public static int importGenders(Context context, String path) { try { - importGenders(context, new FileInputStream(path)); + return importGenders(context, new FileInputStream(path)); } catch (FileNotFoundException e) { Log.e(TAG, "File " + path + " not found", e); } + return 0; } - public static void importGenders(Context context, InputStream inputStream) { + public static int importGenders(Context context, InputStream inputStream) { GenderRowModel genderRowModel = new GenderRowModel(CSV_SEPARATOR); - importData(context, genderRowModel, inputStream); + int result = importData(context, genderRowModel, inputStream, DataCache.getAllGenders(context)); DataCache.invalidateGenders(); + return result; } - public static void importLocations(Context context, String path) { + public static int importLocations(Context context, String path) { try { - importLocations(context, new FileInputStream(path)); + return importLocations(context, new FileInputStream(path)); } catch (FileNotFoundException e) { Log.e(TAG, "File " + path + " not found", e); } + return 0; } - public static void importLocations(Context context, InputStream inputStream) { + public static int importLocations(Context context, InputStream inputStream) { LocationRowModel locationRowModel = new LocationRowModel(CSV_SEPARATOR); - importData(context, locationRowModel, inputStream); + int result = importData(context, locationRowModel, inputStream, DataCache.getAllLocations(context)); DataCache.invalidateLocations(); + return result; } - public static void importMaturities(Context context, String path) { + public static int importMaturities(Context context, String path) { try { - importMaturities(context, new FileInputStream(path)); + return importMaturities(context, new FileInputStream(path)); } catch (FileNotFoundException e) { Log.e(TAG, "File " + path + " not found", e); } + return 0; } - public static void importMaturities(Context context, InputStream inputStream) { + public static int importMaturities(Context context, InputStream inputStream) { MaturityRowModel maturityRowModel = new MaturityRowModel(CSV_SEPARATOR); - importData(context, maturityRowModel, inputStream); + int result = importData(context, maturityRowModel, inputStream, DataCache.getAllMaturities(context)); DataCache.invalidateMaturities(); + return result; } - public static void importMensurations(Context context, String path) { + public static int importMensurations(Context context, String path) { try { - importMensurations(context, new FileInputStream(path)); + return importMensurations(context, new FileInputStream(path)); } catch (FileNotFoundException e) { Log.e(TAG, "File " + path + " not found", e); } + return 0; } - public static void importMensurations(Context context, InputStream inputStream) { + public static int importMensurations(Context context, InputStream inputStream) { MensurationRowModel mensurationRowModel = new MensurationRowModel(CSV_SEPARATOR); - importData(context, mensurationRowModel, inputStream); + int result = importData(context, mensurationRowModel, inputStream, DataCache.getAllMensurations(context)); DataCache.invalidateMensurations(); + return result; } - public static void importMetiers(Context context, String path) { + public static int importMetiers(Context context, String path) { try { - importMetiers(context, new FileInputStream(path)); + return importMetiers(context, new FileInputStream(path)); } catch (FileNotFoundException e) { Log.e(TAG, "File " + path + " not found", e); } + return 0; } - public static void importMetiers(Context context, InputStream inputStream) { + public static int importMetiers(Context context, InputStream inputStream) { MetierRowModel metierRowModel = new MetierRowModel(CSV_SEPARATOR); - importData(context, metierRowModel, inputStream); + int result = importData(context, metierRowModel, inputStream, DataCache.getAllMetiers(context)); DataCache.invalidateMetiers(); + return result; } - public static void importPresentations(Context context, String path) { + public static int importPresentations(Context context, String path) { try { - importPresentations(context, new FileInputStream(path)); + return importPresentations(context, new FileInputStream(path)); } catch (FileNotFoundException e) { Log.e(TAG, "File " + path + " not found", e); } + return 0; } - public static void importPresentations(Context context, InputStream inputStream) { + public static int importPresentations(Context context, InputStream inputStream) { PresentationRowModel presentationRowModel = new PresentationRowModel(CSV_SEPARATOR); - importData(context, presentationRowModel, inputStream); + int result = importData(context, presentationRowModel, inputStream, DataCache.getAllPresentations(context)); DataCache.invalidatePresentations(); + return result; } - public static void importScientificSpecies(Context context, String path) { + public static int importScientificSpecies(Context context, String path) { try { - importScientificSpecies(context, new FileInputStream(path)); + return importScientificSpecies(context, new FileInputStream(path)); } catch (FileNotFoundException e) { Log.e(TAG, "File " + path + " not found", e); } + return 0; } - public static void importScientificSpecies(Context context, InputStream inputStream) { + public static int importScientificSpecies(Context context, InputStream inputStream) { ScientificSpeciesRowModel scientificSpeciesRowModel = new ScientificSpeciesRowModel(CSV_SEPARATOR); - importData(context, scientificSpeciesRowModel, inputStream); + int result = importData(context, scientificSpeciesRowModel, inputStream, DataCache.getAllScientificSpecies(context)); DataCache.invalidateScientificSpecies(); + return result; } - public static void importStates(Context context, String path) { + public static int importStates(Context context, String path) { try { - importStates(context, new FileInputStream(path)); + return importStates(context, new FileInputStream(path)); } catch (FileNotFoundException e) { Log.e(TAG, "File " + path + " not found", e); } + return 0; } - public static void importStates(Context context, InputStream inputStream) { + public static int importStates(Context context, InputStream inputStream) { StateRowModel stateRowModel = new StateRowModel(CSV_SEPARATOR); - importData(context, stateRowModel, inputStream); + int result = importData(context, stateRowModel, inputStream, DataCache.getAllStates(context)); DataCache.invalidateStates(); + return result; } - public static void importVessels(Context context, String path) { + public static int importVessels(Context context, String path) { try { - importVessels(context, new FileInputStream(path)); + return importVessels(context, new FileInputStream(path)); } catch (FileNotFoundException e) { Log.e(TAG, "File " + path + " not found", e); } + return 0; } - public static void importVessels(Context context, InputStream inputStream) { + public static int importVessels(Context context, InputStream inputStream) { VesselRowModel vesselRowModel = new VesselRowModel(CSV_SEPARATOR); - importData(context, vesselRowModel, inputStream); + int result = importData(context, vesselRowModel, inputStream, DataCache.getAllVessels(context)); DataCache.invalidateVessels(); + return result; } - protected static <M extends BaseModel> void importData(Context context, ImportModel<M> importModel, InputStream inputStream) { - WloSqlOpenHelper soh = new WloSqlOpenHelper(context); + protected static <M extends BaseModel> int importData(Context context, ImportModel<M> importModel, + InputStream inputStream, final Collection<M> actualReferential) { + Preconditions.checkNotNull(actualReferential); Import<M> importer = Import.newImport(importModel, inputStream); - List<M> models = Lists.newArrayList(importer.iterator()); - soh.saveData(models); - soh.close(); + Collection<M> models = Lists.newArrayList(importer.iterator()); + + if (!models.isEmpty()) { + Predicate<M> filter; + //if the models have a code attribute, check + M first = models.iterator().next(); + if (HasCode.class.isAssignableFrom(first.getClass())) { + Collection<HasCode> hasCodes = Collections2.transform(actualReferential, new Function<M, HasCode>() { + @Override + public HasCode apply(M m) { + return (HasCode) m; + } + }); + final Collection<String> codes = Collections2.transform(hasCodes, HasCode.GET_CODE_FUNCTION); + filter = new Predicate<M>() { + @Override + public boolean apply(M model) { + HasCode hasCode = (HasCode) model; + return !codes.contains(hasCode.getCode()); + } + }; + } else { + filter = new Predicate<M>() { + @Override + public boolean apply(M m) { + return !actualReferential.contains(m); + } + }; + } + + models = Collections2.filter(models, filter); + WloSqlOpenHelper soh = new WloSqlOpenHelper(context); + soh.saveData(models); + soh.close(); + } + importer.close(); + return models.size(); } } Modified: trunk/src/fr/ifremer/wlo/preferences/SettingsActivity.java =================================================================== --- trunk/src/fr/ifremer/wlo/preferences/SettingsActivity.java 2014-01-24 10:26:23 UTC (rev 22) +++ trunk/src/fr/ifremer/wlo/preferences/SettingsActivity.java 2014-01-24 11:39:51 UTC (rev 23) @@ -12,6 +12,7 @@ import android.preference.PreferenceFragment; import android.text.format.DateFormat; import android.util.Log; +import android.widget.Toast; import com.google.common.collect.BiMap; import com.google.common.collect.HashBiMap; import com.google.common.collect.Maps; @@ -224,52 +225,54 @@ String path = data.getStringExtra(FileDialog.RESULT_PATH); Log.d(TAG, path); final int updatedNb; + final int newNb; switch (requestCode) { case REQUEST_IMPORT_AGES: - ImportUtil.importAges(context, path); + newNb = ImportUtil.importAges(context, path); updatedNb = DataCache.getAllAges(context).size(); break; case REQUEST_IMPORT_COMMERCIAL_SPECIES: - ImportUtil.importCommercialSpecies(context, path); + newNb = ImportUtil.importCommercialSpecies(context, path); updatedNb = DataCache.getAllCommercialSpecies(context).size(); break; case REQUEST_IMPORT_GENDERS: - ImportUtil.importGenders(context, path); + newNb = ImportUtil.importGenders(context, path); updatedNb = DataCache.getAllGenders(context).size(); break; case REQUEST_IMPORT_LOCATIONS: - ImportUtil.importLocations(context, path); + newNb = ImportUtil.importLocations(context, path); updatedNb = DataCache.getAllLocations(context).size(); break; case REQUEST_IMPORT_MATURITIES: - ImportUtil.importMaturities(context, path); + newNb = ImportUtil.importMaturities(context, path); updatedNb = DataCache.getAllMaturities(context).size(); break; case REQUEST_IMPORT_MENSURATIONS: - ImportUtil.importMensurations(context, path); + newNb = ImportUtil.importMensurations(context, path); updatedNb = DataCache.getAllMensurations(context).size(); break; case REQUEST_IMPORT_METIERS: - ImportUtil.importMetiers(context, path); + newNb = ImportUtil.importMetiers(context, path); updatedNb = DataCache.getAllMetiers(context).size(); break; case REQUEST_IMPORT_PRESENTATIONS: - ImportUtil.importPresentations(context, path); + newNb = ImportUtil.importPresentations(context, path); updatedNb = DataCache.getAllPresentations(context).size(); break; case REQUEST_IMPORT_SCIENTIFIC_SPECIES: - ImportUtil.importScientificSpecies(context, path); + newNb = ImportUtil.importScientificSpecies(context, path); updatedNb = DataCache.getAllScientificSpecies(context).size(); break; case REQUEST_IMPORT_STATES: - ImportUtil.importStates(context, path); + newNb = ImportUtil.importStates(context, path); updatedNb = DataCache.getAllStates(context).size(); break; case REQUEST_IMPORT_VESSELS: - ImportUtil.importVessels(context, path); + newNb = ImportUtil.importVessels(context, path); updatedNb = DataCache.getAllVessels(context).size(); break; default: + newNb = 0; updatedNb = 0; } @@ -279,6 +282,8 @@ String key = requestCodeByPrefKey.inverse().get(requestCode); Preference filePicker = findPreference(key); filePicker.setSummary(getString(R.string.preferences_import_summary, updatedNb)); + + Toast.makeText(context, context.getString(R.string.import_new_element_number, newNb), Toast.LENGTH_SHORT).show(); } });