All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.openshift.client.ApplicationBuilder Maven / Gradle / Ivy

The newest version!
/******************************************************************************* 
 * Copyright (c) 2013 Red Hat, Inc. 
 * Distributed under license by Red Hat, Inc. All rights reserved. 
 * This program is made available under the terms of the 
 * Eclipse Public License v1.0 which accompanies this distribution, 
 * and is available at http://www.eclipse.org/legal/epl-v10.html 
 * 
 * Contributors: 
 * Red Hat, Inc. - initial API and implementation 
 ******************************************************************************/
package com.openshift.client;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.Map;

import com.openshift.client.cartridge.ICartridge;
import com.openshift.client.cartridge.IEmbeddableCartridge;
import com.openshift.client.cartridge.IStandaloneCartridge;
import com.openshift.internal.client.utils.Assert;

public class ApplicationBuilder {

	private IDomain domain;
	
	public ApplicationBuilder(IDomain domain) {
		this.domain = domain;
	}
	
	public NamedBuilder setName(String name) {
		return new NamedBuilder(name);
	}
	
	public class NamedBuilder {
		
		private String name;
		
		protected NamedBuilder(String name) {
			this.name = name;
		}

		public NamedTypedCartridgeBuilder setStandaloneCartridge(IStandaloneCartridge standaloneCartridge) {
			return new NamedTypedCartridgeBuilder(name, standaloneCartridge);
		}

		public NamedUnTypedCartridgeBuilder setCartridges(Collection cartridges) {
			Assert.isTrue(cartridges != null
					&& !cartridges.isEmpty());
			return new NamedUnTypedCartridgeBuilder(name, cartridges);
		}
	}
	
	protected abstract class AbstractNamedCartridgeBuilder {
		
		protected String name;
		protected IGearProfile gearProfile;
		protected ApplicationScale applicationScale;
		protected String initialGitUrl;
		protected int timeout = IHttpClient.NO_TIMEOUT;
		protected Map environmentVariables;
		
		AbstractNamedCartridgeBuilder(String name) {
			this.name = name;
		}

		public B setGearProfile(IGearProfile gearProfile) {
			this.gearProfile = gearProfile;
			return (B) this;
		}
		
		public B setApplicationScale(ApplicationScale applicationScale) {
			this.applicationScale = applicationScale;
			return (B) this;
		}

		public B setInitialGitUrl(String initialGitUrl) {
			this.initialGitUrl = initialGitUrl;
			return (B) this;
		}

		public B setTimeout(int timeout) {
			this.timeout = timeout;
			return (B) this;
		}
		
		public B setEnvironmentVariables(Map environmentVariables) {
			this.environmentVariables = environmentVariables;
			return (B) this;
		}
	}
	
	public class NamedTypedCartridgeBuilder extends AbstractNamedCartridgeBuilder {
		
		private IStandaloneCartridge standaloneCartridge;
		private Collection embeddableCartridges;
		
		NamedTypedCartridgeBuilder(String name, IStandaloneCartridge standaloneCartridge) {
			super(name);
			this.standaloneCartridge = standaloneCartridge;
		}

		public NamedTypedCartridgeBuilder setEmbeddableCartridges(IEmbeddableCartridge... embeddableCartridges) {
			if (embeddableCartridges == null) {
				return this;
			}
			this.embeddableCartridges = Arrays.asList(embeddableCartridges);
			return this;
		}

		public IApplication build() {
			return domain.createApplication(name, applicationScale, gearProfile, initialGitUrl, timeout, environmentVariables,
					createCartridges(standaloneCartridge, embeddableCartridges));
		}

		protected ICartridge[] createCartridges(IStandaloneCartridge standaloneCartridge, Collection embeddableCartridges) {
			List cartridges = new ArrayList();
			cartridges.add(standaloneCartridge);
			if (embeddableCartridges != null
					&& !embeddableCartridges.isEmpty()) {
				cartridges.addAll(embeddableCartridges);
			}
			return (ICartridge[]) cartridges.toArray(new ICartridge[cartridges.size()]);
		}
	}
	
	public class NamedUnTypedCartridgeBuilder extends AbstractNamedCartridgeBuilder {
		
		private Collection cartridges;
		
		NamedUnTypedCartridgeBuilder(String name, Collection cartridges) {
			super(name);
			this.cartridges = cartridges;
		}

		public IApplication build() {
			return domain.createApplication(name, applicationScale, gearProfile, initialGitUrl, timeout, environmentVariables,
					cartridges.toArray(new ICartridge[cartridges.size()]));
		}
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy