// Path: app/src/mx/udlap/is522/tedroid/data/dao/impl/sqlite/ScoreSQLiteDAO.java
// public class ScoreSQLiteDAO extends SQLiteTemplate.DAOSupport implements ScoreDAO {
// 
//     /**
//      * Las tablas que soporta este DAO
//      * 
//      * @author Daniel Pedraza-Arcega
//      * @since 1.0
//      */
//     public static enum Table {
// 
//         CLASSIC, SPECIAL;
// 
//         private static final String TABLE_FORMAT = "score_%s";
// 
//         /** @return el nombre de la tabla. */
//         @SuppressLint("DefaultLocale")
//         protected String getTableName() {
//             return String.format(TABLE_FORMAT, name().toLowerCase());
//         }
//     }
// 
//     private static final String STR_SUBSTITUTION = "%s";
//     
//     private Table table;
// 
//     /**
//      * Crea un nuevo ScoreSQLiteDAO para la tabla dada.
//      * 
//      * @param which la tabla.
//      */
//     public ScoreSQLiteDAO(Table which) {
//         table = which;
//     }
//     
//     /** {@inheritDoc} */
//     @Override
//     public List<Score> readAllOrderedByPointsDesc() {
//         return getSQLiteTemplate().queryForList(
//                 String.format(getSqlString(R.string.score_readAllOrderedByPointsDesc_sql), STR_SUBSTITUTION, table.getTableName()), 
//                 new SQLiteTemplate.RowMapper<Score>() {
// 
//                     @Override
//                     public Score mapRow(Cursor cursor, int rowNum) {
//                         Score score = new Score();
//                         score.setObtainedAt(SQLiteUtils.getDateFromUnixTime(cursor, "obtained_at_unix"));
//                         score.setLevel(SQLiteUtils.getInteger(cursor, "level"));
//                         score.setLines(SQLiteUtils.getInteger(cursor, "lines"));
//                         score.setPoints(SQLiteUtils.getInteger(cursor, "points"));
//                         return score;
//                     }
//                 });
//     }
// 
//     /** {@inheritDoc} */
//     @Override
//     public Map<String, Integer> readSumOfLinesAndPoints() {
//         return getSQLiteTemplate().queryForSingleResult(
//                 String.format(getSqlString(R.string.score_readSumOfLinesAndPoints_sql), table.getTableName()), 
//                 new SQLiteTemplate.RowMapper<Map<String, Integer>>() {
// 
//                     @Override
//                     public Map<String, Integer> mapRow(Cursor cursor, int rowNum) {
//                         HashMap<String, Integer> row = new HashMap<>(2);
//                         row.put("lines_sum", SQLiteUtils.getInteger(cursor, "lines_sum"));
//                         row.put("points_sum", SQLiteUtils.getInteger(cursor, "points_sum"));
//                         return row;
//                     }
//                 });
//     }
// 
//     /** {@inheritDoc} */
//     @Override
//     public void save(Score score) {
//         getSQLiteTemplate().execute(String.format(getSqlString(R.string.score_insert_sql), table.getTableName()),
//                 new String[] { String.valueOf(score.getLevel()), String.valueOf(score.getLines()), String.valueOf(score.getPoints()) });
//     }
// 
//     /** {@inheritDoc} */
//     @Override
//     public void deleteAll() {
//         getSQLiteTemplate().execute(String.format(getSqlString(R.string.score_deleteAll_sql), table.getTableName()));
//     }
// }
// 
// Path: app/src/mx/udlap/is522/tedroid/data/source/TedroidSQLiteOpenHelper.java
// public class TedroidSQLiteOpenHelper extends SQLiteOpenHelper {
// 
//     private static final int CURRENT_VERSION = 2;
//     private static final String TAG = TedroidSQLiteOpenHelper.class.getSimpleName();
//     private static final String SCHEMA_FILE_FORMAT = "db/schema-v%s.sql";
//     private static final String NAME = "tedroid";
// 
//     private final int version;
//     private final Context context;
// 
//     /**
//      * Crea un nuevo objeto usando el context proporcionado.
//      * 
//      * @param context el contexto de la aplicación.
//      */
//     public TedroidSQLiteOpenHelper(Context context) {
//         super(context, NAME, null, CURRENT_VERSION);
//         this.context = context;
//         version = CURRENT_VERSION;
//     }
// 
//     @Override
//     public void onCreate(SQLiteDatabase database) {
//         try {
//             InputStream fileStream = context.getAssets().open(String.format(SCHEMA_FILE_FORMAT, version));
//             String[] statements = SQLFileParser.getSqlStatements(fileStream);
//             for (String statement : statements) database.execSQL(statement);
//         } catch (IOException | SQLException ex) {
//             Log.e(TAG, "Unable to execute schema", ex);
//         }
//     }
// 
//     @Override
//     public void onUpgrade(SQLiteDatabase database, int oldVersion, int newVersion) {
//         onCreate(database);
//     }
// 
//     /**
//      * Destruye la base datos de Tedroid.
//      * 
//      * @param context el contexto de la aplicación.
//      */
//     public static void destroyDb(Context context) {
//         context.deleteDatabase(NAME);
//     }
// }


import android.content.Context;
import mx.udlap.is522.tedroid.data.dao.impl.sqlite.ScoreSQLiteDAO;
import mx.udlap.is522.tedroid.data.source.TedroidSQLiteOpenHelper;
/*
 * Copyright 2014 Tedroid developers
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package mx.udlap.is522.tedroid.data.dao.impl;



/**
 * Fabrica de Data Access Object.
 * 
 * @author Daniel Pedraza-Arcega
 * @since 1.0
 */
public class DAOFactory {

    private final Context context;

    /**
     * Crea una nueva fabrica.
     * 
     * @param context el contexto de la aplicación.
     */
    public DAOFactory(Context context) {
// Path: app/src/mx/udlap/is522/tedroid/data/dao/impl/sqlite/ScoreSQLiteDAO.java
// public class ScoreSQLiteDAO extends SQLiteTemplate.DAOSupport implements ScoreDAO {
// 
//     /**
//      * Las tablas que soporta este DAO
//      * 
//      * @author Daniel Pedraza-Arcega
//      * @since 1.0
//      */
//     public static enum Table {
// 
//         CLASSIC, SPECIAL;
// 
//         private static final String TABLE_FORMAT = "score_%s";
// 
//         /** @return el nombre de la tabla. */
//         @SuppressLint("DefaultLocale")
//         protected String getTableName() {
//             return String.format(TABLE_FORMAT, name().toLowerCase());
//         }
//     }
// 
//     private static final String STR_SUBSTITUTION = "%s";
//     
//     private Table table;
// 
//     /**
//      * Crea un nuevo ScoreSQLiteDAO para la tabla dada.
//      * 
//      * @param which la tabla.
//      */
//     public ScoreSQLiteDAO(Table which) {
//         table = which;
//     }
//     
//     /** {@inheritDoc} */
//     @Override
//     public List<Score> readAllOrderedByPointsDesc() {
//         return getSQLiteTemplate().queryForList(
//                 String.format(getSqlString(R.string.score_readAllOrderedByPointsDesc_sql), STR_SUBSTITUTION, table.getTableName()), 
//                 new SQLiteTemplate.RowMapper<Score>() {
// 
//                     @Override
//                     public Score mapRow(Cursor cursor, int rowNum) {
//                         Score score = new Score();
//                         score.setObtainedAt(SQLiteUtils.getDateFromUnixTime(cursor, "obtained_at_unix"));
//                         score.setLevel(SQLiteUtils.getInteger(cursor, "level"));
//                         score.setLines(SQLiteUtils.getInteger(cursor, "lines"));
//                         score.setPoints(SQLiteUtils.getInteger(cursor, "points"));
//                         return score;
//                     }
//                 });
//     }
// 
//     /** {@inheritDoc} */
//     @Override
//     public Map<String, Integer> readSumOfLinesAndPoints() {
//         return getSQLiteTemplate().queryForSingleResult(
//                 String.format(getSqlString(R.string.score_readSumOfLinesAndPoints_sql), table.getTableName()), 
//                 new SQLiteTemplate.RowMapper<Map<String, Integer>>() {
// 
//                     @Override
//                     public Map<String, Integer> mapRow(Cursor cursor, int rowNum) {
//                         HashMap<String, Integer> row = new HashMap<>(2);
//                         row.put("lines_sum", SQLiteUtils.getInteger(cursor, "lines_sum"));
//                         row.put("points_sum", SQLiteUtils.getInteger(cursor, "points_sum"));
//                         return row;
//                     }
//                 });
//     }
// 
//     /** {@inheritDoc} */
//     @Override
//     public void save(Score score) {
//         getSQLiteTemplate().execute(String.format(getSqlString(R.string.score_insert_sql), table.getTableName()),
//                 new String[] { String.valueOf(score.getLevel()), String.valueOf(score.getLines()), String.valueOf(score.getPoints()) });
//     }
// 
//     /** {@inheritDoc} */
//     @Override
//     public void deleteAll() {
//         getSQLiteTemplate().execute(String.format(getSqlString(R.string.score_deleteAll_sql), table.getTableName()));
//     }
// }
// 
// Path: app/src/mx/udlap/is522/tedroid/data/source/TedroidSQLiteOpenHelper.java
// public class TedroidSQLiteOpenHelper extends SQLiteOpenHelper {
// 
//     private static final int CURRENT_VERSION = 2;
//     private static final String TAG = TedroidSQLiteOpenHelper.class.getSimpleName();
//     private static final String SCHEMA_FILE_FORMAT = "db/schema-v%s.sql";
//     private static final String NAME = "tedroid";
// 
//     private final int version;
//     private final Context context;
// 
//     /**
//      * Crea un nuevo objeto usando el context proporcionado.
//      * 
//      * @param context el contexto de la aplicación.
//      */
//     public TedroidSQLiteOpenHelper(Context context) {
//         super(context, NAME, null, CURRENT_VERSION);
//         this.context = context;
//         version = CURRENT_VERSION;
//     }
// 
//     @Override
//     public void onCreate(SQLiteDatabase database) {
//         try {
//             InputStream fileStream = context.getAssets().open(String.format(SCHEMA_FILE_FORMAT, version));
//             String[] statements = SQLFileParser.getSqlStatements(fileStream);
//             for (String statement : statements) database.execSQL(statement);
//         } catch (IOException | SQLException ex) {
//             Log.e(TAG, "Unable to execute schema", ex);
//         }
//     }
// 
//     @Override
//     public void onUpgrade(SQLiteDatabase database, int oldVersion, int newVersion) {
//         onCreate(database);
//     }
// 
//     /**
//      * Destruye la base datos de Tedroid.
//      * 
//      * @param context el contexto de la aplicación.
//      */
//     public static void destroyDb(Context context) {
//         context.deleteDatabase(NAME);
//     }
// }


// Path: app/src/mx/udlap/is522/tedroid/data/dao/impl/DAOFactory.java
import android.content.Context;
import mx.udlap.is522.tedroid.data.dao.impl.sqlite.ScoreSQLiteDAO;
import mx.udlap.is522.tedroid.data.source.TedroidSQLiteOpenHelper;

/*
 * Copyright 2014 Tedroid developers
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package mx.udlap.is522.tedroid.data.dao.impl;



/**
 * Fabrica de Data Access Object.
 * 
 * @author Daniel Pedraza-Arcega
 * @since 1.0
 */
public class DAOFactory {

    private final Context context;

    /**
     * Crea una nueva fabrica.
     * 
     * @param context el contexto de la aplicación.
     */
    public DAOFactory(Context context) {
        this.context = context;