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

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

/*
* 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.indexeddb.IDBObjectStore;
import org.cruxframework.crux.core.client.db.indexeddb.IDBTransaction;
import org.cruxframework.crux.core.client.db.indexeddb.IDBTransaction.IDBTransactionMode;
import org.cruxframework.crux.core.client.db.indexeddb.events.IDBAbortEvent;
import org.cruxframework.crux.core.client.db.indexeddb.events.IDBCompleteEvent;
import org.cruxframework.crux.core.client.db.indexeddb.events.IDBErrorEvent;

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

/**
* CRUX INTERNAL CLASS. DO NOT USE IT DIRECTLY.
*
* Indexed DB implementation for Transaction Interface. Use the interface {@link Transaction} instead.
* @author Thiago da Rosa de Bustamante
*/
public class IDXTransaction extends Transaction
{
  private IDBTransaction transaction;
  protected final IDXAbstractDatabase db;

  protected IDXTransaction(final IDXAbstractDatabase db, String[] storeNames, Mode mode)
    {
    super(db, storeNames, mode);
    this.db = db;
    IDBTransactionMode idbMode;
    switch (mode)
        {
          case readWrite:
            idbMode = IDBTransactionMode.readwrite;
          break;
          default:
            idbMode = IDBTransactionMode.readonly;
        }
      if (db == null || !db.isOpen())
    {
      throw new DatabaseException(db.messages.databaseNotOpenedError());
    }
       
    transaction = db.db.getTransaction(storeNames, idbMode);
    transaction.onAbort(new IDBAbortEvent.Handler()
    {
      @Override
      public void onAbort(IDBAbortEvent event)
      {
        if (LogConfiguration.loggingIsEnabled())
        {
          logger.log(Level.INFO, IDXTransaction.this.db.messages.databaseTransactionAborted(IDXTransaction.this.db.getName()));
        }
        if (transactionCallback != null)
        {
          try
          {
            transactionCallback.onAbort();
          }
          catch (Exception e)
          {
            String message = IDXTransaction.this.db.messages.databaseTransactionError(IDXTransaction.this.db.getName(), e.getMessage());
            reportError(transactionCallback, message, e);
          }
        }
      }
    });
    transaction.onComplete(new IDBCompleteEvent.Handler()
    {
      @Override
      public void onComplete(IDBCompleteEvent event)
      {
        if (LogConfiguration.loggingIsEnabled())
        {
          logger.log(Level.INFO, IDXTransaction.this.db.messages.databaseTransactionCompleted(IDXTransaction.this.db.getName()));
        }
        if (transactionCallback != null)
        {
          try
          {
            transactionCallback.onComplete();
          }
          catch (Exception e)
          {
            String message = IDXTransaction.this.db.messages.databaseTransactionError(IDXTransaction.this.db.getName(), e.getMessage());
            reportError(transactionCallback, message, e);
          }
           
        }
      }
    });
    transaction.onError(new IDBErrorEvent.Handler()
    {
      @Override
      public void onError(IDBErrorEvent event)
      {
        String message = IDXTransaction.this.db.messages.databaseTransactionError(IDXTransaction.this.db.getName(), event.getName());
        if (LogConfiguration.loggingIsEnabled())
        {
          logger.log(Level.SEVERE, message);
        }
        if (transactionCallback != null)
        {
          transactionCallback.onError(message);
        }
      }
    });
    }
 
  /**
   * Retrieve an ObjectStore manipulated by the current transaction.
   * @param <K>
   * @param <V>
   * @param storeName
   * @return
   */
  @Override
  public <K, V> ObjectStore<K, V> getObjectStore(String storeName)
  {
    IDBObjectStore idbObjectStore = transaction.getObjectStore(storeName);
    return db.getObjectStore(storeName, idbObjectStore);
  }

  /**
   * Abort current transaction and rollback operations.
   */
  @Override
  public void abort()
  {
    transaction.abort();
  }
 
  /**
   * Retrieve a specialized object store for files handling.
   * @return
   */
  @Override
  public FileStore getFileStore()
  {
    IDBObjectStore idbObjectStore = transaction.getObjectStore(FileStore.OBJECT_STORE_NAME);
    return new IDXFileStore(db, idbObjectStore);
  }
}
TOP

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

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.