/*******************************************************************************
* 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.restclient;
import java.net.URL;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import com.openshift.restclient.api.ITypeFactory;
import com.openshift.restclient.authorization.IAuthorizationContext;
import com.openshift.restclient.capability.ICapable;
import com.openshift.restclient.model.IList;
import com.openshift.restclient.model.IResource;
import com.openshift.restclient.model.JSONSerializeable;
/**
* Client is the the simplest interface for interacting with the OpenShift
* master server.
*
* @author Jeff Cantrill
*
*/
public interface IClient extends ICapable, Cloneable {
/*
* Watch for changes
*
* @param namespace The namespace to watch for changes in
* @param listener The listener to be notified on events
* @param kids The kinds to watch for
*/
IWatcher watch(String namespace, IOpenShiftWatchListener listener, String...kinds);
/*
* Watch for changes
*
* @param namespace The namespace to watch for changes in
* @param listener The listener to be notified on events
* @param kids The kinds to watch for
*/
IWatcher watch(IOpenShiftWatchListener listener, String...kinds);
/**
* Lists all possible resources of the given kind in the default namespace
* @param kind
* @return
*/
<T extends IResource> List<T> list(String kind);
/**
* Lists the given given resource kind scoping it to a specific namespace
*
* @param kind
* @param labels The label used to filter the resource
* @return
*/
<T extends IResource> List<T> list(String kind, Map<String, String> labels);
/**
* Lists the given given resource kind scoping it to a specific namespace
*
* @param kind
* @param namespace The namespace to scope the possible results of this list
* @return
*/
<T extends IResource> List<T> list(String kind, String namespace);
/**
* Lists the given given resource kind scoping it to a specific namespace
*
* @param kind
* @param namespace The namespace to scope the possible results of this list
* @param labels The label used to filter the resource
* @return
*/
<T extends IResource> List<T> list(String kind, String namespace, Map<String, String> labels);
/**
* Lists the given given resource kind scoping it to a specific namespace
*
* @param kind
* @param namespace The namespace to scope the possible results of this list
* @param labelQuery The label used to filter the resource
* @return
*/
<T extends IResource> List<T> list(String kind, String namespace, String labelQuery);
/**
*
* @param kind
* @param name
* @param namespace
* @return
* @throws OpenShiftException if operation not supported for resource type
*/
<T extends IResource> T get(String kind, String name, String namespace);
/**
*
* @return A raw list of the kind in the given namespace (e.g. ServiceList)
*/
IList get(String kind, String namespace);
/**
* Creates the given resource in the namespace defined on the
* resource or the default namspace if undefined
* @param resource
* @return
* @throws UnsupportedOperationException if the resource is a list
*/
<T extends IResource> T create(T resource);
/**
* Creates the given resource in the given namespace
* @param resource
* @param namespace
* @return
*/
<T extends IResource> T create(T resource, String namespace);
/**
* Creates the given resource in the given namespace using the subresource
* @param kind
* @param namespace
* @param name
* @param subresource
* @param payload
* @return
*/
<T extends IResource> T create(String kind, String namespace, String name, String subresource, IResource payload);
/**
* Creates a list of resources in the given namespace
* @param list The resource definitions
* @param namespace the namespace for the resources
* @return A collection of the resources created or the status
* instance of why the creation failed.
* @throws OpenShiftException if a status can not be determined from
* the exception
*/
Collection<IResource> create(IList list, String namespace);
/**
* Updates the given resource
* @param resource
* @return
* @throws UnsupportedOperationException if the resource is a list
*/
<T extends IResource> T update(T resource);
/**
* Deletes the given resource.
* @param resource
* @throws UnsupportedOperationException if the resource is a list
*/
<T extends IResource> void delete(T resource);
/**
* Raw execution of a request
* @param httpMethod HttpMethod (e.g. POST)
* @param kind
* @param namespace
* @param name
* @param subresource subresource or capability
* @param payload the payload to sumit. only valid on non-get operations
* @return
*
*/
<T extends IResource> T execute(String httpMethod, String kind, String namespace, String name, String subresource, IResource payload);
/**
* Raw execution of a request
* @param httpMethod HttpMethod (e.g. POST)
* @param kind
* @param namespace
* @param name
* @param subresource subresource or capability
* @param payload the payload to sumit. only valid on non-get operations
* @param params map of query parameters
* @return
*
*/
<T extends IResource> T execute(String httpMethod, String kind, String namespace, String name, String subresource, IResource payload, Map<String, String> params);
/**
* Raw execution of a request
* @param httpMethod HttpMethod (e.g. POST)
* @param kind
* @param namespace
* @param name
* @param subresource subresource or capability
* @param subcontext additional subContext (e.g. jolokia endpoint)
* Raw execution of a request that requires consumers to handle the response
* @return
*/
<T extends IResource> T execute(String httpMethod, String kind, String namespace, String name, String subresource, IResource payload, String subcontext);
/**
* @param factory The factory to use for interpreting the response
* @param httpMethod HttpMethod (e.g. POST)
* @param kind
* @param namespace
* @param name
* @param subresource subresource or capability
* @param payload the payload to sumit. only valid on non-get operations
* @param subContext additional subContext
* @param params
* @return the raw payload string
*/
<T extends Object> T execute(ITypeFactory factory, String httpMethod, String kind, String namespace, String name,
String subresource, String subContext, JSONSerializeable payload,
Map<String, String> params);
/**
*
* @return the base URL of this endpoint
*/
URL getBaseURL();
/**
*
* @param resource
* @return the uri to the resource (e.g. for crafting webhooks)
*/
String getResourceURI(IResource resource);
/**
* Returns the OpenShift API version for this client
* @return
* @throws UnsupportedVersionException
* @throws {@link UnauthorizedException}
*/
String getOpenShiftAPIVersion() throws UnsupportedVersionException;
/**
* The authorization context for this client.
* @return The context which will never be null
*/
IAuthorizationContext getAuthorizationContext();
/**
* Returns the resource factory used to create resources based on the
* response from the server
* @return
*/
IResourceFactory getResourceFactory();
/**
* Adapt this class to the given type
* @param klass
* @return an instance of the class or null if it can not
*/
default <T> T adapt(Class<T> klass) {
return null;
};
/**
* Query the server to determine if it
* is ready
* @return
* @throws OpenShiftException
*/
String getServerReadyStatus();
IClient clone();
}