/*******************************************************************************
* 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.restclient.capability.resources;
import java.io.InputStream;
import com.openshift.restclient.capability.IBinaryCapability;
import com.openshift.restclient.model.IPod;
/**
* Defines if a pod can support port forwarding
* @author Andre Dietisheim
*
*/
public interface IRSyncable extends IBinaryCapability {
/**
* Synchronize the give {@code destination} with the given {@code source}
* @param source the source of the rsync
* @param destination the destination of the rsync
* @param options the options to pass to the underlying {@code oc rsync} command
* @return the underlying {@link Process} streams to be displayed in a console.
*/
InputStream sync(Peer source, Peer destination, OpenShiftBinaryOption... options);
/**
* Stop rsync'ing, forcibly if necessary.
*/
void stop();
public class PodPeer extends Peer {
private static final char NAMESPACE_POD_SEPARATOR = '/';
private static final char POD_PATH_SEPARATOR = ':';
private IPod pod;
public PodPeer(String location, IPod pod) {
super(location);
this.pod = pod;
}
@Override
public String getParameter() {
return new StringBuilder()
.append(pod.getName())
.append(POD_PATH_SEPARATOR)
.append(super.getParameter())
.append(" -n ")
.append(pod.getNamespace())
.toString();
}
@Override
public String getLocation() {
return new StringBuilder()
.append(pod.getNamespace())
.append(NAMESPACE_POD_SEPARATOR)
.append(pod.getName())
.append(POD_PATH_SEPARATOR)
.append(super.getParameter())
.toString();
}
@Override
public boolean isPod() {
return true;
}
}
public class LocalPeer extends Peer {
public LocalPeer(String location) {
super(location);
}
public boolean isPod() {
return false;
}
}
public abstract class Peer {
private String location;
private Peer(String location) {
this.location = location;
}
public String getParameter() {
return location;
}
public String getLocation() {
return getParameter();
}
public abstract boolean isPod();
}
/**
* Indicates if the {@link Process} completed or not
*
* @return <code>true</code> if the {@link Process} completed,
* <code>false</code> otherwise.
*/
boolean isDone();
/**
* @return the {@link Process} exit value when it completed, {@code -1} if
* it's still running
*/
int exitValue();
/**
* Blocks until the process is done.
*
* @throws InterruptedException
* if the current thread is interrupted while waiting
*/
void await() throws InterruptedException;
}