Package org.cruxframework.crux.core.client.db

Source Code of org.cruxframework.crux.core.client.db.IDXAbstractDatabase

/*
* Copyright 2013 cruxframework.org.
*
* 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 org.cruxframework.crux.core.client.db;

import java.util.logging.Level;

import org.cruxframework.crux.core.client.db.Transaction.Mode;
import org.cruxframework.crux.core.client.db.indexeddb.IDBDatabase;
import org.cruxframework.crux.core.client.db.indexeddb.IDBDeleteDBRequest;
import org.cruxframework.crux.core.client.db.indexeddb.IDBFactory;
import org.cruxframework.crux.core.client.db.indexeddb.IDBObjectStore;
import org.cruxframework.crux.core.client.db.indexeddb.IDBOpenDBRequest;
import org.cruxframework.crux.core.client.db.indexeddb.events.IDBBlockedEvent;
import org.cruxframework.crux.core.client.db.indexeddb.events.IDBDatabaseDeleteEvent;
import org.cruxframework.crux.core.client.db.indexeddb.events.IDBErrorEvent;
import org.cruxframework.crux.core.client.db.indexeddb.events.IDBOpenedEvent;
import org.cruxframework.crux.core.client.db.indexeddb.events.IDBUpgradeNeededEvent;
import org.cruxframework.crux.core.client.utils.StringUtils;

import com.google.gwt.logging.client.LogConfiguration;

/**
* CRUX INTERNAL CLASS. DO NOT USE IT DIRECTLY.
*
* Indexed DB implementation for Database Interface. Use the interface {@link Database} to define your databases.
* @author Thiago da Rosa de Bustamante
*/
public abstract class IDXAbstractDatabase extends AbstractDatabase
{
  protected IDBDatabase db = null;

  @Override
  public void close()
  {
    if (isOpen())
    {
      db.close();
      db = null;
    }
  }
 
    @Override
  public void delete(final DatabaseCallback callback)
  {
    if (StringUtils.isEmpty(getName()))
    {
      throw new DatabaseException(messages.databaseInvalidNameDBError(getName()));
    }
    IDBDeleteDBRequest deleteDatabase = IDBFactory.get().deleteDatabase(getName());
    deleteDatabase.onSuccess(new IDBDatabaseDeleteEvent.Handler()
    {
      @Override
      public void onDelete(IDBDatabaseDeleteEvent event)
      {
        db = null;
        if (callback != null)
        {
          callback.onSuccess();
        }
      }
    });
    deleteDatabase.onBlocked(new IDBBlockedEvent.Handler()
    {
      @Override
      public void onBlocked(IDBBlockedEvent event)
      {
        String message = messages.databaseBlocked(getName());
        if (LogConfiguration.loggingIsEnabled())
        {
          logger.log(Level.SEVERE, message);
        }
        if (callback != null)
        {
          callback.onError(message);
        }
        else if (errorHandler != null)
        {
          errorHandler.onError(message);
        }
      }
    });
    deleteDatabase.onError(new IDBErrorEvent.Handler()
    {
      @Override
      public void onError(IDBErrorEvent event)
      {
        String message = messages.databaseDeleteError(getName(), event.getName());
        if (LogConfiguration.loggingIsEnabled())
        {
          logger.log(Level.SEVERE, message);
        }
        if (callback != null)
        {
          callback.onError(message);
        }
        else if (errorHandler != null)
        {
          errorHandler.onError(message);
        }
      }
    });
  }

    @Override
    public boolean isOpen()
    {
      return db != null;
    }

    @Override
    public boolean isSupported()
    {
        return IDBFactory.isSupported();
    }
   
    @Override
    protected Transaction createTransaction(String[] storeNames, Mode mode)
    {
      return new IDXTransaction(this, storeNames, mode);
    }
   
    @Override
  protected void doOpen(final DatabaseCallback callback)
    {
      final IDBOpenDBRequest openDBRequest = IDBFactory.get().open(getName(), getVersion());
    openDBRequest.onSuccess(new IDBOpenedEvent.Handler()
    {
      @Override
      public void onSuccess(IDBOpenedEvent event)
      {
        db = event.getResult();
        if (LogConfiguration.loggingIsEnabled())
        {
          logger.log(Level.INFO, messages.databaseOpened(getName()));
        }
        if (callback != null)
        {
          callback.onSuccess();
        }
      }
    });
   
    openDBRequest.onBlocked(new IDBBlockedEvent.Handler()
    {
      @Override
      public void onBlocked(IDBBlockedEvent event)
      {
        String message = messages.databaseBlocked(getName());
        if (LogConfiguration.loggingIsEnabled())
        {
          logger.log(Level.SEVERE, message);
        }
        if (callback != null)
        {
          callback.onError(message);
        }
        else if (errorHandler != null)
        {
          errorHandler.onError(message);
        }
      }
    });
   
    openDBRequest.onError(new IDBErrorEvent.Handler()
    {
      @Override
      public void onError(IDBErrorEvent event)
      {
        String message = messages.databaseOpenError(getName(), event.getName());
        if (LogConfiguration.loggingIsEnabled())
        {
          logger.log(Level.SEVERE, message);
        }
        if (callback != null)
        {
          callback.onError(message);
        }
        else if (errorHandler != null)
        {
          errorHandler.onError(message);
        }
      }
    });
    openDBRequest.onUpgradeNeeded(new IDBUpgradeNeededEvent.Handler()
    {
      @Override
      public void onUpgradeNeeded(IDBUpgradeNeededEvent event)
      {
        db = event.getResult();
        try
        {
          if (LogConfiguration.loggingIsEnabled())
          {
            logger.log(Level.INFO, messages.databaseUpgrading(getName()));
          }
          updateDatabaseStructure(openDBRequest);
          if (LogConfiguration.loggingIsEnabled())
          {
            logger.log(Level.INFO, messages.databaseUpgraded(getName()));
          }
        }
        catch (RuntimeException e)
        {
          if (LogConfiguration.loggingIsEnabled())
          {
            logger.log(Level.SEVERE, messages.databaseUpgradeError(getName(), e.getMessage()), e);
          }
          throw e;
        }
      }
    });
    }
   
  protected abstract void updateDatabaseStructure(IDBOpenDBRequest openDBRequest);
  protected abstract <K, V> ObjectStore<K, V> getObjectStore(String storeName, IDBObjectStore idbObjectStore);
}
TOP

Related Classes of org.cruxframework.crux.core.client.db.IDXAbstractDatabase

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.