package krasa.visualvm.action;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import krasa.visualvm.*;
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.Presentation;
public class StartVisualVMConsoleAction extends AnAction {
private VisualVMContext visualVMContext;
private boolean postConstructContextSet;
private long created;
public static volatile List<StartVisualVMConsoleAction> currentlyExecuted = new LinkedList<StartVisualVMConsoleAction>();
public StartVisualVMConsoleAction() {
}
public StartVisualVMConsoleAction(VisualVMContext visualVMContext) {
super("Start VisualVM", null, Resources.CONSOLE_RUN);
this.visualVMContext = visualVMContext;
created = System.currentTimeMillis();
currentlyExecuted.add(this);
LogHelper.print("created with " + visualVMContext, this);
}
@Override
public void update(AnActionEvent e) {
super.update(e);
final Presentation presentation = e.getPresentation();
if (!VisualVMContext.isValid(visualVMContext)) {
// presentation.setVisible(false);
presentation.setEnabled(false);
}
}
@Override
public void actionPerformed(final AnActionEvent e) {
if (!MyConfigurable.openSettingsIfNotConfigured(e.getProject())) {
return;
}
VisualVMHelper.startVisualVM(visualVMContext.getAppId(), visualVMContext.getJdkPath(), this);
}
public void setVisualVMContext(VisualVMContext visualVMContext) {
if (postConstructContextSet) {
LogHelper.print("setVisualVMContext false with " + visualVMContext, this);
} else {
postConstructContextSet = true;
LogHelper.print("setVisualVMContext " + visualVMContext, this);
this.visualVMContext = visualVMContext;
}
}
public long getCreated() {
return created;
}
public void setVisualVMContextToRecentlyCreated(VisualVMContext visualVMContext) {
LogHelper.print("#setVisualVMContextToRecentlyCreated" + visualVMContext, this);
Iterator<StartVisualVMConsoleAction> iterator = currentlyExecuted.iterator();
while (iterator.hasNext()) {
StartVisualVMConsoleAction next = iterator.next();
if (isRecentlyCreated(next)) {
next.setVisualVMContext(visualVMContext);
} else {
LogHelper.print("#setVisualVMContextToRecentlyCreated remove", this);
iterator.remove();
}
}
}
private boolean isRecentlyCreated(StartVisualVMConsoleAction next) {
long l = System.currentTimeMillis() - next.getCreated();
LogHelper.print("#isRecentlyCreated " + l + " " + next, this);
return l < ApplicationSettingsComponent.getInstance().getState().getDurationToSetContextToButtonAsLong();
}
@Override
public String toString() {
final StringBuilder sb = new StringBuilder();
sb.append("StartVisualVMConsoleAction");
sb.append("{visualVMContext=").append(visualVMContext);
sb.append(", created=").append(created);
sb.append('}');
return sb.toString();
}
}