/* * Copyright 2012 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://aws.amazon.com/apache2.0 * * or in the "license" file accompanying this file. This file 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 com.amazonaws.services.simpleworkflow.flow.examples.deployment; import java.util.ArrayList; import java.util.List; import com.amazonaws.services.simpleworkflow.flow.annotations.Asynchronous; import com.amazonaws.services.simpleworkflow.flow.annotations.Wait; import com.amazonaws.services.simpleworkflow.flow.core.Promise; import com.amazonaws.services.simpleworkflow.flow.core.Settable; public abstract class DeployableBase implements Deployable { private String host; List<Deployable> dependsOn = new ArrayList<Deployable>(); @Override public String getHost() { return host; } public void setHost(String host) { this.host = host; } protected void addDependsOn(List<? extends Deployable> deployable) { dependsOn.addAll(deployable); } private Settable<String> url = new Settable<String>(); @Override public void deploy() { List<Promise<?>> dependsOnPromises = new ArrayList<Promise<?>>(); for (Deployable deployable : dependsOn) { dependsOnPromises.add(deployable.getUrl()); } deploy(dependsOnPromises); } @Asynchronous private void deploy(@Wait List<Promise<?>> dependsOnPromises) { // chain links one promise to the result of the other one url.chain(deploySelf()); } @Override public Promise<String> getUrl() { return url; } /** * Perform actual deployment. * @return Url used to access this Deployable */ protected abstract Promise<String> deploySelf(); }