/*
* Copyright 2003-2012 Yusuke Yamamoto
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package samurai.swing;
import samurai.tail.LogMonitor;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import java.io.File;
import java.io.IOException;
public abstract class LogRenderer extends JPanel implements LogMonitor {
private boolean hideOnClose;
private SamuraiPanel samuraiPanel;
private boolean added = false;
public LogRenderer(boolean hideOnClose, SamuraiPanel samuraiPanel) {
this.hideOnClose = hideOnClose;
this.samuraiPanel = samuraiPanel;
}
public synchronized void close() {
currentVersion++;
if (added && hideOnClose) {
samuraiPanel.removePane(this);
added = false;
}
}
protected void showMe(String message) {
if (!added) {
samuraiPanel.addPane(message, this);
added = true;
}
}
protected void hideMe(){
if(added){
samuraiPanel.removePane(this);
}
}
public void onLine(File file, String line, long filepointer) {
}
int currentVersion = 0;
public void logStarted(File file, long filePointer) {
if (hideOnClose) {
close();
}
currentVersion++;
}
public void clearBuffer(){
}
public void logEnded(File file, long filepointer) {
}
public void logWillEnd(File file, long filepointer) {
}
public void logContinued(File file, long filepointer) {
}
public void onException(File file, IOException ioe) {
}
protected void invokeLater(Runnable runnable) {
if (SwingUtilities.isEventDispatchThread() || !this.isDisplayable()) {
runnable.run();
} else {
SwingUtilities.invokeLater(new VersionAwareTask(runnable, currentVersion));
}
}
class VersionAwareTask implements Runnable {
int version;
Runnable target;
VersionAwareTask(Runnable target, int version) {
this.target = target;
this.version = version;
}
public void run() {
if (currentVersion == version) {
target.run();
}
}
}
}