Android Open Source - android-core Database Factory






From Project

Back to project page android-core.

License

The source code is released under:

Apache License

If you think the Android project android-core listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/** 
 * [SIMINOV FRAMEWORK]// w  w w . j a  va  2 s. com
 * Copyright [2015] [Siminov Software Solution LLP|support@siminov.com]
 *
 * 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 siminov.core.database;

import java.util.Hashtable;
import java.util.Iterator;

import siminov.core.database.design.IDataTypeHandler;
import siminov.core.database.design.IDatabaseImpl;
import siminov.core.database.design.IQueryBuilder;
import siminov.core.exception.DatabaseException;
import siminov.core.model.DatabaseDescriptor;
import siminov.core.utils.ClassUtils;


/**
 * Exposes methods to create database instance based on Database Type needed. 
 * It has methods to GET DatabaseFactory, GET Database.
 */
public class DatabaseFactory {

  private static DatabaseFactory databaseFactory = null;
  private Hashtable<String, DatabaseBundle> databaseBundles = new Hashtable<String, DatabaseBundle> ();

  private String DATABASE_PACKAGE_NAME = "siminov.core.database";
  private String DATABASE_CLASS_NAME = "DatabaseImpl";
  private String DATABASE_QUERY_BUILDER = "QueryBuilder";
  private String DATABASE_DATA_TYPE_HANDLER = "DataTypeHandler";
  
  /**
   * Database Factory Private Constructor
   */
  private DatabaseFactory() {
    
  }
  
  /**
   * Get DatabaseFactory Instance.
   * @return DatabaseFactory Instance.
   */
  public static DatabaseFactory getInstance() {
    if(databaseFactory == null) {
      databaseFactory = new DatabaseFactory();
    }  
    
    return databaseFactory;
  }
  
  /**
   * Get IDatabase Instance.
   * @param databaseDescriptor DatabaseDescriptor Object.
   * @return IDatabase Object.
   * @throws DatabaseException If not able to create IDatabase instance.
   */
  public DatabaseBundle getDatabaseBundle(final DatabaseDescriptor databaseDescriptor) {
    if(databaseBundles.containsKey(databaseDescriptor.getDatabaseName())) {
      return databaseBundles.get(databaseDescriptor.getDatabaseName());
    }

    String type = databaseDescriptor.getType();
    String packageName = DATABASE_PACKAGE_NAME + "." + type;

    DatabaseBundle databaseBundle = getDatabaseBundle(packageName);
    databaseBundles.put(databaseDescriptor.getDatabaseName(), databaseBundle);
    
    return databaseBundle;
  }

  
  /**
   * Returns all database bundles.
   * @return Iterator<DatabaseHandler> All Database Bundle instances.
   */
  public Iterator<DatabaseBundle> getDatabaseBundles() {
    return databaseBundles.values().iterator();
  }

  /**
   * Removes database bundle instance.
   * @param databaseDescriptor Database descriptor instance object.
   */
  public void removeDatabaseBundle(final DatabaseDescriptor databaseDescriptor) {
    this.databaseBundles.remove(databaseDescriptor.getDatabaseName());
  }

  
  /**
   * Returns database bundle instance.
   * @param packageName Name of the package.
   * @return DatabaseBundle Instance of database bundle.
   */
  private DatabaseBundle getDatabaseBundle(String packageName) {
    
    IDatabaseImpl database = (IDatabaseImpl) ClassUtils.createClassInstance(packageName + "." + DATABASE_CLASS_NAME);
    IQueryBuilder queryBuilder = (IQueryBuilder) ClassUtils.createClassInstance(packageName + "." + DATABASE_QUERY_BUILDER);
    IDataTypeHandler dataTypeHandler = (IDataTypeHandler) ClassUtils.createClassInstance(packageName + "." + DATABASE_DATA_TYPE_HANDLER);
    
    DatabaseBundle databaseBundle = new DatabaseBundle();
    databaseBundle.setDatabase(database);
    databaseBundle.setQueryBuilder(queryBuilder);
    databaseBundle.setDataTypeHandler(dataTypeHandler);
    
    return databaseBundle;
  }
  
}




Java Source Code List

siminov.core.Constants.java
siminov.core.IInitializer.java
siminov.core.Initializer.java
siminov.core.Siminov.java
siminov.core.database.Clause.java
siminov.core.database.DatabaseBundle.java
siminov.core.database.DatabaseFactory.java
siminov.core.database.DatabaseHelper.java
siminov.core.database.DatabaseUtils.java
siminov.core.database.Database.java
siminov.core.database.Where.java
siminov.core.database.design.IAverageClause.java
siminov.core.database.design.IAverage.java
siminov.core.database.design.ICountClause.java
siminov.core.database.design.ICount.java
siminov.core.database.design.IDataTypeHandler.java
siminov.core.database.design.IDatabaseImpl.java
siminov.core.database.design.IDatabase.java
siminov.core.database.design.IDeleteClause.java
siminov.core.database.design.IDelete.java
siminov.core.database.design.IGroupConcatClause.java
siminov.core.database.design.IGroupConcat.java
siminov.core.database.design.IMaxClause.java
siminov.core.database.design.IMax.java
siminov.core.database.design.IMinClause.java
siminov.core.database.design.IMin.java
siminov.core.database.design.IQueryBuilder.java
siminov.core.database.design.ISelectClause.java
siminov.core.database.design.ISelect.java
siminov.core.database.design.ISumClause.java
siminov.core.database.design.ISum.java
siminov.core.database.design.ITotalClause.java
siminov.core.database.design.ITotal.java
siminov.core.database.sqlite.DataTypeHandler.java
siminov.core.database.sqlite.DatabaseImpl.java
siminov.core.database.sqlite.QueryBuilder.java
siminov.core.events.EventHandler.java
siminov.core.events.IDatabaseEvents.java
siminov.core.events.ISiminovEvents.java
siminov.core.exception.DatabaseException.java
siminov.core.exception.DeploymentException.java
siminov.core.exception.IException.java
siminov.core.exception.PrematureEndOfParseException.java
siminov.core.exception.SiminovCriticalException.java
siminov.core.exception.SiminovException.java
siminov.core.log.Log.java
siminov.core.model.ApplicationDescriptor.java
siminov.core.model.DatabaseDescriptor.java
siminov.core.model.DatabaseMappingDescriptor.java
siminov.core.model.IDescriptor.java
siminov.core.model.LibraryDescriptor.java
siminov.core.reader.ApplicationDescriptorReader.java
siminov.core.reader.DatabaseDescriptorReader.java
siminov.core.reader.DatabaseMappingDescriptorReader.java
siminov.core.reader.LibraryDescriptorReader.java
siminov.core.reader.QuickDatabaseMappingDescriptorReader.java
siminov.core.reader.SiminovSAXDefaultHandler.java
siminov.core.resource.ResourceManager.java
siminov.core.utils.ClassUtils.java
siminov.core.utils.EmptyIterator.java
siminov.core.utils.Utils.java