mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
164 lines
5.1 KiB
Java
164 lines
5.1 KiB
Java
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
package org.mozilla.gecko.sync.middleware;
|
|
|
|
import java.util.concurrent.ExecutorService;
|
|
|
|
import org.mozilla.gecko.sync.Logger;
|
|
import org.mozilla.gecko.sync.repositories.InactiveSessionException;
|
|
import org.mozilla.gecko.sync.repositories.InvalidSessionTransitionException;
|
|
import org.mozilla.gecko.sync.repositories.RepositorySession;
|
|
import org.mozilla.gecko.sync.repositories.RepositorySessionBundle;
|
|
import org.mozilla.gecko.sync.repositories.delegates.RepositorySessionBeginDelegate;
|
|
import org.mozilla.gecko.sync.repositories.delegates.RepositorySessionFinishDelegate;
|
|
import org.mozilla.gecko.sync.repositories.delegates.RepositorySessionGuidsSinceDelegate;
|
|
import org.mozilla.gecko.sync.repositories.delegates.RepositorySessionWipeDelegate;
|
|
|
|
public abstract class MiddlewareRepositorySession extends RepositorySession {
|
|
private static final String LOG_TAG = "MiddlewareSession";
|
|
protected final RepositorySession inner;
|
|
|
|
public MiddlewareRepositorySession(RepositorySession innerSession, MiddlewareRepository repository) {
|
|
super(repository);
|
|
this.inner = innerSession;
|
|
}
|
|
|
|
@Override
|
|
public void wipe(RepositorySessionWipeDelegate delegate) {
|
|
inner.wipe(delegate);
|
|
}
|
|
|
|
public class MiddlewareRepositorySessionBeginDelegate implements RepositorySessionBeginDelegate {
|
|
|
|
private MiddlewareRepositorySession outerSession;
|
|
private RepositorySessionBeginDelegate next;
|
|
|
|
public MiddlewareRepositorySessionBeginDelegate(MiddlewareRepositorySession outerSession, RepositorySessionBeginDelegate next) {
|
|
this.outerSession = outerSession;
|
|
this.next = next;
|
|
}
|
|
|
|
@Override
|
|
public void onBeginFailed(Exception ex) {
|
|
next.onBeginFailed(ex);
|
|
}
|
|
|
|
@Override
|
|
public void onBeginSucceeded(RepositorySession session) {
|
|
next.onBeginSucceeded(outerSession);
|
|
}
|
|
|
|
@Override
|
|
public RepositorySessionBeginDelegate deferredBeginDelegate(ExecutorService executor) {
|
|
final RepositorySessionBeginDelegate deferred = next.deferredBeginDelegate(executor);
|
|
return new RepositorySessionBeginDelegate() {
|
|
@Override
|
|
public void onBeginSucceeded(RepositorySession session) {
|
|
if (inner != session) {
|
|
Logger.warn(LOG_TAG, "Got onBeginSucceeded for session " + session + ", not our inner session!");
|
|
}
|
|
deferred.onBeginSucceeded(outerSession);
|
|
}
|
|
|
|
@Override
|
|
public void onBeginFailed(Exception ex) {
|
|
deferred.onBeginFailed(ex);
|
|
}
|
|
|
|
@Override
|
|
public RepositorySessionBeginDelegate deferredBeginDelegate(ExecutorService executor) {
|
|
return this;
|
|
}
|
|
};
|
|
}
|
|
}
|
|
|
|
public void begin(RepositorySessionBeginDelegate delegate) throws InvalidSessionTransitionException {
|
|
inner.begin(new MiddlewareRepositorySessionBeginDelegate(this, delegate));
|
|
}
|
|
|
|
public class MiddlewareRepositorySessionFinishDelegate implements RepositorySessionFinishDelegate {
|
|
private final MiddlewareRepositorySession outerSession;
|
|
private final RepositorySessionFinishDelegate next;
|
|
|
|
public MiddlewareRepositorySessionFinishDelegate(MiddlewareRepositorySession outerSession, RepositorySessionFinishDelegate next) {
|
|
this.outerSession = outerSession;
|
|
this.next = next;
|
|
}
|
|
|
|
@Override
|
|
public void onFinishFailed(Exception ex) {
|
|
next.onFinishFailed(ex);
|
|
}
|
|
|
|
@Override
|
|
public void onFinishSucceeded(RepositorySession session, RepositorySessionBundle bundle) {
|
|
next.onFinishSucceeded(outerSession, bundle);
|
|
}
|
|
|
|
@Override
|
|
public RepositorySessionFinishDelegate deferredFinishDelegate(ExecutorService executor) {
|
|
return this;
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void finish(RepositorySessionFinishDelegate delegate) throws InactiveSessionException {
|
|
inner.finish(new MiddlewareRepositorySessionFinishDelegate(this, delegate));
|
|
}
|
|
|
|
|
|
@Override
|
|
public synchronized void ensureActive() throws InactiveSessionException {
|
|
inner.ensureActive();
|
|
}
|
|
|
|
@Override
|
|
public synchronized boolean isActive() {
|
|
return inner.isActive();
|
|
}
|
|
|
|
@Override
|
|
public synchronized SessionStatus getStatus() {
|
|
return inner.getStatus();
|
|
}
|
|
|
|
@Override
|
|
public synchronized void setStatus(SessionStatus status) {
|
|
inner.setStatus(status);
|
|
}
|
|
|
|
@Override
|
|
public synchronized void transitionFrom(SessionStatus from, SessionStatus to)
|
|
throws InvalidSessionTransitionException {
|
|
inner.transitionFrom(from, to);
|
|
}
|
|
|
|
@Override
|
|
public void abort() {
|
|
inner.abort();
|
|
}
|
|
|
|
@Override
|
|
public void abort(RepositorySessionFinishDelegate delegate) {
|
|
inner.abort(new MiddlewareRepositorySessionFinishDelegate(this, delegate));
|
|
}
|
|
|
|
@Override
|
|
public void guidsSince(long timestamp, RepositorySessionGuidsSinceDelegate delegate) {
|
|
// TODO: need to do anything here?
|
|
inner.guidsSince(timestamp, delegate);
|
|
}
|
|
|
|
@Override
|
|
public void storeDone() {
|
|
inner.storeDone();
|
|
}
|
|
|
|
@Override
|
|
public void storeDone(long storeEnd) {
|
|
inner.storeDone(storeEnd);
|
|
}
|
|
} |