package org.sigmah.offline.indexeddb; /* * #%L * Sigmah * %% * Copyright (C) 2010 - 2016 URD * %% * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public * License along with this program. If not, see * <http://www.gnu.org/licenses/gpl-3.0.html>. * #L% */ import com.google.gwt.user.client.rpc.AsyncCallback; import java.util.ArrayList; import java.util.List; import org.sigmah.offline.event.JavaScriptEvent; /** * Open request done on an already opened database. * * Reuse the given database instance instead of creating a new connection. * * @author Raphaƫl Calabro (rcalabro@ideia.fr) * @param <S> Type defining the schema of the database. */ public class AlreadyOpenedDatabaseRequest<S extends Enum<S> & Schema> implements OpenDatabaseRequest<S> { private final List<JavaScriptEvent<?>> handlers = new ArrayList<JavaScriptEvent<?>>(); private Database<S> result; /** * Creates an empty request. This is useful if an open request is pending. */ public AlreadyOpenedDatabaseRequest() { } /** * Creates a request that will immediatly returns the given database. * * @param database An already opened database. */ public AlreadyOpenedDatabaseRequest(Database<S> database) { this.result = database; } /** * {@inheritDoc} */ @Override public Database<S> getResult() { return result; } /** * Defines the database to use. * This will trigger the success handler. * * @param result An already opened database. */ public void setResult(Database<S> result) { this.result = result; for(final JavaScriptEvent<?> handler : handlers) { handler.onEvent(null); } } /** * {@inheritDoc} */ @Override public void addSuccessHandler(JavaScriptEvent<?> handler) { if(result != null) { handler.onEvent(null); } else { handlers.add(handler); } } /** * {@inheritDoc} */ @Override public void addCallback(AsyncCallback<Request> callback) { throw new UnsupportedOperationException("Not supported."); } }