/******************************************************************************* * 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. ******************************************************************************/ package com.openshift.internal.restclient.model; import java.util.Map; import org.jboss.dmr.ModelNode; import com.openshift.restclient.IClient; import com.openshift.restclient.ResourceKind; import com.openshift.restclient.model.route.IRoute; import com.openshift.restclient.model.route.ITLSConfig; import com.openshift.restclient.model.route.ITargetPort; /** * @author Jeff Cantrill */ public class Route extends KubernetesResource implements IRoute { private static final String ROUTE_HOST = "spec.host"; private static final String ROUTE_PATH = "spec.path"; private static final String ROUTE_KIND = "spec.to.kind"; private static final String ROUTE_SERVICE_NAME = "spec.to.name"; private static final String ROUTE_TLS = "spec.tls"; private static final String ROUTE_TLS_TERMINATION_TYPE = "spec.tls.termination"; private static final String ROUTE_TLS_CERTIFICATE = "spec.tls.certificate"; private static final String ROUTE_TLS_KEY = "spec.tls.key"; private static final String ROUTE_TLS_CACERT = "spec.tls.caCertificate"; private static final String ROUTE_TLS_DESTINATION_CACERT = "spec.tls.destinationCACertificate"; private static final String ROUTE_PORT = "spec.port"; private static final String ROUTE_PORT_TARGETPORT = "spec.port.targetPort"; public Route(ModelNode node, IClient client, Map<String, String[]> propertyKeys) { super(node, client, propertyKeys); } @Override public String getHost() { return asString(ROUTE_HOST); } @Override public void setHost(String host) { get(ROUTE_HOST).set(host); } @Override public String getPath() { return asString(ROUTE_PATH); } @Override public void setPath(String path) { get(ROUTE_PATH).set(path); } @Override public String getServiceName() { return asString(ROUTE_SERVICE_NAME); } @Override public void setServiceName(String serviceName) { get(ROUTE_SERVICE_NAME).set(serviceName); get(ROUTE_KIND).set(ResourceKind.SERVICE); } @Override public ITLSConfig getTLSConfig() { if(get(ROUTE_TLS).isDefined()){ return new TLSConfig(); } return null; } @Override public ITLSConfig createTLSConfig() { ITLSConfig config = getTLSConfig(); if(config == null) { get(ROUTE_TLS).set(new ModelNode()); config = new TLSConfig(); } return config; } @Override public ITargetPort getPort() { if (get(ROUTE_PORT).isDefined()) { return new TargetPort(); } return null; } @Override public ITargetPort createPort() { ITargetPort targetPort = getPort(); if (targetPort == null) { get(ROUTE_PORT).set(new ModelNode()); targetPort = new TargetPort(); } return targetPort; } @Override public String getURL() { String scheme = getTLSConfig() == null ? "http" : "https"; String path = getPath(); if(!path.startsWith("/")) { path = "/" + path; } return String.format("%s://%s%s", scheme, getHost(), path); } private class TLSConfig implements ITLSConfig { @Override public String getTerminationType() { return asString(ROUTE_TLS_TERMINATION_TYPE); } @Override public void setTerminationType(String type) { get(ROUTE_TLS_TERMINATION_TYPE).set(type); } @Override public String getCertificate() { return asString(ROUTE_TLS_CERTIFICATE); } @Override public void setCertificate(String certificate) { get(ROUTE_TLS_CERTIFICATE).set(certificate); } @Override public String getKey() { return asString(ROUTE_TLS_KEY); } @Override public void setKey(String key) { get(ROUTE_TLS_KEY).set(key); } @Override public String getCACertificate() { return asString(ROUTE_TLS_CACERT); } @Override public void setCACertificate(String caCertificate) { get(ROUTE_TLS_CACERT).set(caCertificate); } @Override public String getDestinationCertificate() { return asString(ROUTE_TLS_DESTINATION_CACERT); } @Override public void setDestinationCertificate(String destinationCertificate) { get(ROUTE_TLS_DESTINATION_CACERT).set(destinationCertificate); } } private class TargetPort implements ITargetPort { @Override public String getTargetPortName() { return asString(ROUTE_PORT_TARGETPORT); } @Override public void setTargetPortName(String portName) { get(ROUTE_PORT_TARGETPORT).set(portName); } @Override public Integer getTargetPort() { if (has(ROUTE_PORT_TARGETPORT)) { return asInt(ROUTE_PORT_TARGETPORT); } else { return -1; } } @Override public void setTargetPort(Integer port) { get(ROUTE_PORT_TARGETPORT).set(port); } } }