/******************************************************************************* * Copyright (c) 2015 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.internal.restclient.model.build; import static com.openshift.internal.util.JBossDmrExtentions.*; import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; import java.util.stream.Collectors; import org.jboss.dmr.ModelNode; import org.jboss.dmr.ModelType; import com.openshift.internal.restclient.model.EnvironmentVariable; import com.openshift.internal.restclient.model.ModelNodeAdapter; import com.openshift.internal.restclient.model.properties.ResourcePropertyKeys; import com.openshift.internal.util.JBossDmrExtentions; import com.openshift.restclient.images.DockerImageURI; import com.openshift.restclient.model.IEnvironmentVariable; import com.openshift.restclient.model.build.BuildStrategyType; import com.openshift.restclient.model.build.ISourceBuildStrategy; /** * * @author Jeff Cantrill * */ public class SourceBuildStrategy extends ModelNodeAdapter implements ISourceBuildStrategy, ResourcePropertyKeys{ public static final String FROM_IMAGE = "sourceStrategy.from.name"; public static final String FROM_KIND = "sourceStrategy.from.kind"; public static final String FROM_NAMESPACE = "sourceStrategy.from.namespace"; public static final String SCRIPTS = "sourceStrategy.scripts"; public static final String INCREMENTAL = "sourceStrategy.incremental"; public static final String ENV = "sourceStrategy.env"; public SourceBuildStrategy(ModelNode node, Map<String, String []> propertyKeys) { super(node, propertyKeys); set(node, propertyKeys, TYPE, BuildStrategyType.SOURCE); } @Override public String getType() { return asString(getNode(), getPropertyKeys(), TYPE); } @Override public String getFromNamespace() { return asString(getNode(), getPropertyKeys(), FROM_NAMESPACE); } @Override public void setFromNamespace(String namespace) { set(getNode(), getPropertyKeys(), FROM_NAMESPACE, namespace); } @Override public String getFromKind() { return asString(getNode(),getPropertyKeys(), FROM_KIND); } @Override public void setFromKind(String kind) { set(getNode(),getPropertyKeys(), FROM_KIND, kind); } @Override public DockerImageURI getImage() { return new DockerImageURI(asString(getNode(), getPropertyKeys(), FROM_IMAGE)); } @Override public void setImage(DockerImageURI image) { set(getNode(), getPropertyKeys(), FROM_IMAGE, image.toString()); } @Override public String getScriptsLocation() { return asString(getNode(), getPropertyKeys(), SCRIPTS); } @Override public void setScriptsLocation(String location) { set(getNode(), getPropertyKeys(), SCRIPTS, location); } @Override public Collection<IEnvironmentVariable> getEnvVars() { String [] path = JBossDmrExtentions.getPath(getPropertyKeys(), ENV); ModelNode envNode = getNode().get(path); if(envNode.isDefined()) { return envNode.asList() .stream() .map(n-> new EnvironmentVariable(n, getPropertyKeys())) .collect(Collectors.toList()); } return Collections.emptyList(); } @Override public void setEnvVars(Collection<IEnvironmentVariable> envVars) { if(envVars == null) return; String [] path = JBossDmrExtentions.getPath(getPropertyKeys(), ENV); ModelNode envNode = getNode().get(path); envNode.clear(); envVars.forEach(v->envNode.add(ModelNode.fromJSONString(v.toJson()))); } @Override public Map<String, String> getEnvironmentVariables() { String [] path = JBossDmrExtentions.getPath(getPropertyKeys(), ENV); ModelNode env = getNode().get(path); Map<String, String> values = new HashMap<>(); if(env.getType() == ModelType.LIST){ for (ModelNode value : env.asList()) { values.put(value.get(NAME).asString(), value.get(VALUE).asString()); } } return values; } @Override public void setEnvironmentVariables(Map<String, String> envVars) { String [] path = JBossDmrExtentions.getPath(getPropertyKeys(), ENV); ModelNode env = getNode().get(path); env.clear(); for (Entry<String, String> entry : envVars.entrySet()) { ModelNode var = new ModelNode(); var.get(NAME).set(entry.getKey()); var.get(VALUE).set(entry.getValue()); env.add(var); } } @Override public boolean incremental() { return asBoolean(getNode(), getPropertyKeys(), INCREMENTAL); } @Override public void setIncremental(boolean isIncremental) { set(getNode(), getPropertyKeys(), INCREMENTAL, isIncremental); } }