package com.brew.brewshop; import android.content.ContentProvider; import android.content.ContentValues; import android.database.Cursor; import android.net.Uri; import android.os.ParcelFileDescriptor; import android.util.Log; import com.brew.brewshop.storage.BrewStorage; import com.brew.brewshop.storage.recipes.Recipe; import com.brew.brewshop.storage.recipes.RecipeList; import com.brew.brewshop.xml.BeerXMLWriter; import java.io.File; import java.io.IOException; public class BrewProvider extends ContentProvider { public static final String SCHEME = "content"; public static final String AUTHORITY = "com.brew.brewshop.brewprovider"; public static final String RECIPES_XML = "recipes.xml"; public static final String RECIPE_ID = "id"; public static final String RECIPE_ID_DELIMITER = ","; private static final String TAG = BrewProvider.class.getName(); private BrewStorage mStorage; @Override public boolean onCreate() { mStorage = new BrewStorage(getContext()); return true; } @Override public ParcelFileDescriptor openFile(Uri uri, String mode) { RecipeList recipes = mStorage.retrieveRecipes(); RecipeList toSave = new RecipeList(); String idString = uri.getQueryParameter(RECIPE_ID); String[] idArray = idString.split(RECIPE_ID_DELIMITER); for (String id : idArray) { Log.d(TAG, "Adding recipe ID: " + Integer.parseInt(id)); toSave.add(recipes.findById(Integer.parseInt(id))); } ParcelFileDescriptor descriptor = null; try { File outputDir = getContext().getCacheDir(); File outputFile = File.createTempFile("recipes-", ".xml", outputDir); BeerXMLWriter beerXMLWriter = new BeerXMLWriter(getContext(), toSave.toArray(new Recipe[toSave.size()])); beerXMLWriter.writeRecipes(outputFile); descriptor = ParcelFileDescriptor.open(outputFile, ParcelFileDescriptor.MODE_READ_WRITE); outputFile.delete();//Not actually deleted until the descriptor is closed. } catch (IOException e) { e.printStackTrace(); } return descriptor; } @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { return null; } @Override public String getType(Uri uri) { return "application/xml"; } @Override public Uri insert(Uri uri, ContentValues values) { return null; } @Override public int delete(Uri uri, String selection, String[] selectionArgs) { return 0; } @Override public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { return 0; } }