blob: 3e0ea3b84917079ca7e5aa3ea74520d9c52e6b1a [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2011 SAP AG
* All rights reserved. This program and the accompanying materials
* are 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:
* SAP AG - initial API and implementation
*******************************************************************************/
package org.eclipse.libra.framework.editor.integration.console.basic;
import java.io.IOException;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.debug.core.IStreamListener;
import org.eclipse.debug.core.model.IStreamMonitor;
import org.eclipse.debug.core.model.IStreamsProxy;
import org.eclipse.libra.framework.editor.core.IOSGiFrameworkConsole;
import org.eclipse.libra.framework.editor.integration.internal.IntegrationPlugin;
/**
* @author Kaloyan Raev
*/
public abstract class AbstractBasicOSGiFrameworkConsole implements IOSGiFrameworkConsole, IStreamListener {
private StringBuilder result;
protected abstract IStreamsProxy getProxy() throws CoreException;
public synchronized String executeCommand(String command) throws CoreException {
result = new StringBuilder();
try {
IStreamsProxy proxy = getProxy();
proxy.getOutputStreamMonitor().addListener(this);
proxy.write(command + "\n"); //$NON-NLS-1$
} catch (IOException e) {
throw new CoreException(IntegrationPlugin.newErrorStatus(e));
}
long startTime = System.currentTimeMillis();
int size = 0;
do {
size = result.length();
try {
wait(10);
} catch (InterruptedException e) {
throw new CoreException(IntegrationPlugin.newErrorStatus(e));
}
} while ((result.length() == 0 && System.currentTimeMillis() - startTime < 5000)
|| result.length() > size);
return result.toString();
}
public synchronized void streamAppended(String text, IStreamMonitor monitor) {
result.append(text);
}
}