/*******************************************************************************
* Copyright (c) 2015 Pivotal, Inc.
* 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:
* Pivotal, Inc. - initial API and implementation
*******************************************************************************/
package org.springframework.ide.eclipse.boot.dash.views;
import java.io.StringWriter;
import java.text.DateFormat;
import java.util.Date;
import org.springframework.ide.eclipse.boot.dash.cloudfoundry.console.LogType;
import org.springframework.ide.eclipse.boot.dash.model.BootDashElement;
import org.springframework.ide.eclipse.boot.dash.model.BootDashModel;
/**
* Console manager for elements in a {@link BootDashModel}.
* <p/>
* Each {@link BootDashModel} should have its own console manager.
*
*/
public abstract class BootDashModelConsoleManager {
/**
* Opens the console for the given element. If console does not exist, a new
* one will be created.
*
* @param element
* @throws Exception
* if failure occurred while opening console (e.g. failed to
* create console, underlying process is terminated, etc..)
*/
public abstract void showConsole(BootDashElement element) throws Exception;
/**
* Opens the console for the given element. If console does not exist, a new
* one will be created.
*
* @param element
* @throws Exception
* if failure occurred while opening console (e.g. failed to
* create console, underlying process is terminated, etc..)
*/
public abstract void showConsole(String appName) throws Exception;
/**
* Write a message to an EXISTING console for the associated element.
*
* @param element
* @param message
*/
public void writeToConsole(BootDashElement element, String message, LogType type) throws Exception {
if (message != null) {
String bootMessage = asBootDashLog(message);
doWriteToConsole(element, bootMessage, type);
}
}
/**
* Write a message to an EXISTING console for the associated element.
*
* @param element
* @param message
*/
public void writeToConsole(String appName, String message, LogType type) throws Exception {
if (message != null) {
String bootMessage = asBootDashLog(message);
doWriteToConsole(appName, bootMessage, type);
}
}
protected abstract void doWriteToConsole(BootDashElement element, String bootDashMessage, LogType type)
throws Exception;
protected abstract void doWriteToConsole(String appName, String bootDashMessage, LogType type) throws Exception;
/**
* Resets console (including possibly clearing contents) without destroying
* the console.
* <p/>
* This allows "active" consoles to remain alive but display updated
* information
*
* @param appName
*/
public abstract void resetConsole(String appName);
public abstract void terminateConsole(String appName) throws Exception;
public abstract void reconnect(BootDashElement element) throws Exception;
protected String asBootDashLog(String message) {
Date date = new Date(System.currentTimeMillis());
String dateVal = DateFormat.getDateTimeInstance().format(date);
StringWriter writer = new StringWriter();
writer.append('[');
writer.append(dateVal);
writer.append(' ');
writer.append('-');
writer.append(' ');
writer.append("Boot Dashboard");
writer.append(']');
writer.append(' ');
writer.append('-');
writer.append(' ');
writer.append(message);
writer.append('\n');
return writer.toString();
}
}