/* * Copyright (C) 2012 Red Hat, Inc. and/or its affiliates. * * 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.jboss.errai.config.rebind; import com.google.gwt.core.ext.GeneratorContext; import com.google.gwt.core.ext.TreeLogger; import org.jboss.errai.common.client.api.Assert; import java.util.concurrent.Future; /** * @author Mike Brock */ public class AsyncGenerationJob { private final Runnable runIfStarting; private final Runnable runIfStarted; private final TreeLogger treeLogger; private final GeneratorContext generatorContext; private final Class<?> interfaceType; private AsyncGenerationJob(Builder builder) { this.runIfStarted = builder.runIfStarted; this.runIfStarting = builder.runIfStarting; this.treeLogger = Assert.notNull("treeLogger cannot be null", builder.treeLogger); this.generatorContext = Assert.notNull("generatorContext cannot be null", builder.generatorContext); this.interfaceType = Assert.notNull("interfaceType cannot be null", builder.interfaceType); } public static Builder createBuilder() { return new Builder(); } public static class Builder { private Runnable runIfStarting; private Runnable runIfStarted; private GeneratorContext generatorContext; private TreeLogger treeLogger; private Class<?> interfaceType; public Builder runIfStarting(Runnable runnable) { this.runIfStarting = runnable; return this; } public Builder runIfStarted(Runnable runnable) { this.runIfStarted = runnable; return this; } public Builder generatorContext(GeneratorContext context) { this.generatorContext = context; return this; } public Builder treeLogger(TreeLogger treeLogger) { this.treeLogger = treeLogger; return this; } public Builder interfaceType(Class<?> interfaceType) { this.interfaceType = interfaceType; return this; } public AsyncGenerationJob build() { return new AsyncGenerationJob(this); } } void notifyStarting() { if (runIfStarting != null) { runIfStarting.run(); } } void notifyStarted() { if (runIfStarted != null) { runIfStarted.run(); } } public TreeLogger getTreeLogger() { return treeLogger; } public GeneratorContext getGeneratorContext() { return generatorContext; } public Class<?> getInterfaceType() { return interfaceType; } public Future<String> submit() { return AsyncGenerators.getFutureFor(this); } }