package org.plantuml.idea.action.context; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.PlatformDataKeys; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.fileEditor.FileDocumentManager; import com.intellij.openapi.fileEditor.FileEditorManager; import com.intellij.openapi.project.DumbAwareAction; import com.intellij.openapi.project.Project; import org.jetbrains.annotations.Nullable; import org.plantuml.idea.plantuml.PlantUml; import org.plantuml.idea.rendering.PlantUmlRenderer; import org.plantuml.idea.toolwindow.PlantUmlImageLabel; import org.plantuml.idea.util.UIUtils; import javax.swing.*; import java.awt.*; import java.io.File; import java.io.IOException; /** * @author Henady Zakalusky */ public abstract class ExternalOpenDiagramAction extends DumbAwareAction { protected static final Logger logger = Logger.getInstance(ExternalOpenDiagramAction.class); private PlantUml.ImageFormat imageFormat; public ExternalOpenDiagramAction(String text, @Nullable Icon icon, PlantUml.ImageFormat imageFormat) { super(text, text, icon); this.imageFormat = imageFormat; } @Override public void actionPerformed(AnActionEvent e) { String selectedSource = getSource(e.getProject()); String canonicalPath = null; try { File file = File.createTempFile("diagram-", "." + imageFormat.toString().toLowerCase()); canonicalPath = file.getCanonicalPath(); file.deleteOnExit(); PlantUmlRenderer.renderAndSave(selectedSource, UIUtils.getSelectedDir(FileEditorManager.getInstance(e.getProject()), FileDocumentManager.getInstance()), imageFormat, file.getAbsolutePath(), file.getName().replace(".", "-%03d."), UIUtils.getPlantUmlToolWindow(e.getProject()).getZoom(), getPage(e)); Desktop.getDesktop().open(file); } catch (IOException ex) { logger.error(canonicalPath, ex); } } protected int getPage(AnActionEvent e) { PlantUmlImageLabel data = (PlantUmlImageLabel) e.getData(PlatformDataKeys.CONTEXT_COMPONENT); return data.getPage(); } private String getSource(Project project) { return UIUtils.getSelectedSourceWithCaret(FileEditorManager.getInstance(project)); } }