package com.onpositive.gae.tools;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.Platform;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Link;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.IWorkbenchWindowActionDelegate;
import org.eclipse.ui.IWorkbenchWindowPulldownDelegate2;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.browser.IWebBrowser;
import org.eclipse.ui.forms.events.HyperlinkEvent;
import org.eclipse.ui.forms.events.IHyperlinkListener;
import org.eclipse.ui.forms.widgets.FormText;
import org.eclipse.ui.help.IWorkbenchHelpSystem;
public class AppBusterAction implements IWorkbenchWindowActionDelegate,
IWorkbenchWindowPulldownDelegate2 {
ArrayList<IMenuContributor> list = new ArrayList<IMenuContributor>();
public AppBusterAction() {
IConfigurationElement[] configurationElementsFor = Platform
.getExtensionRegistry().getConfigurationElementsFor(
"com.onpositive.gae.tools.core.menuConfigurationPart");
for (IConfigurationElement e : configurationElementsFor) {
try {
IMenuContributor c = (IMenuContributor) e
.createExecutableExtension("class");
list.add(c);
} catch (CoreException e1) {
//Activator.log(e1);
}
}
}
public void dispose() {
}
public void init(IWorkbenchWindow window) {
}
public void run(IAction action) {
IJavaProject javaProject = UIUtils.getJavaGaeProject();
if (javaProject != null) {
new ConfigureDialog(Display.getCurrent().getActiveShell(),
javaProject).open();
}
}
public void selectionChanged(IAction action, ISelection selection) {
}
public Menu getMenu(Control parent) {
MenuManager mn = new MenuManager();
// mn.add(new OpenAction("Open deployed application in internal browser",
// false));
mn.add(new OpenLogAction("View deployed application log ", false));
/*mn.add(new Action("Open application dashboard ") {
public void run() {
IJavaProject javaGaeProject = UIUtils.getJavaGaeProject();
if (javaGaeProject != null) {
String appId = GaeBridge.getAppId(javaGaeProject
.getProject());
if (appId == null || appId.trim().length() == 0) {
MessageDialog
.openError(
Display.getCurrent().getActiveShell(),
"Error",
"Please setup application id for "
+ javaGaeProject
.getElementName()
+ " before using open dashboard action");
return;
}
try {
IWebBrowser createBrowser = PlatformUI.getWorkbench()
.getBrowserSupport().createBrowser(SWT.NONE,
"appwrench", "Dashboard",
"Application dashboard");
try {
createBrowser.openURL(new URL(
"http://appengine.google.com/dashboard?&app_id="
+ appId));
} catch (MalformedURLException e) {
Activator.log(e);
}
} catch (PartInitException e) {
Activator.log(e);
}
}
}
});*/
mn.add(new Separator());
for (IMenuContributor m : list) {
m.contributeTo(mn);
mn.add(new Separator());
}
mn.add(new Action("About AppWrench") {
public void run() {
Dialog dialog = new Dialog(Display.getCurrent()
.getActiveShell()) {
protected Control createDialogArea(Composite parent) {
Composite createDialogArea = (Composite) super
.createDialogArea(parent);
GridLayout layout = new GridLayout(2, false);
layout.marginWidth = 0;
layout.marginHeight = 0;
createDialogArea.setLayout(layout);
ImageDescriptor imageDescriptorFromPlugin = Activator
.imageDescriptorFromPlugin(Activator.PLUGIN_ID,
"icons/onpositive.jpg");
final Image createImage = imageDescriptorFromPlugin
.createImage();
Label label = new Label(createDialogArea, SWT.NONE);
label.setImage(createImage);
createDialogArea
.addDisposeListener(new DisposeListener() {
public void widgetDisposed(DisposeEvent e) {
createImage.dispose();
}
});
FormText ft = new FormText(createDialogArea, SWT.NONE);
ft
.setText(
"<form><p><b>AppWrench 1.3</b></p><p>(c) Copyright <a>OnPositive Technologies, LLC. 2009-2010t</a>. All rights reserved.</p><p></p></form>",
true, true);
ft.addHyperlinkListener(new IHyperlinkListener() {
public void linkExited(HyperlinkEvent e) {
}
public void linkEntered(HyperlinkEvent e) {
}
public void linkActivated(HyperlinkEvent e) {
try {
PlatformUI
.getWorkbench()
.getBrowserSupport()
.getExternalBrowser()
.openURL(
new URL(
"http://onpositive.com"));
} catch (PartInitException e1) {
Activator.log(e1);
} catch (MalformedURLException e1) {
Activator.log(e1);
}
}
});
ft.setBackground(Display.getCurrent().getSystemColor(
SWT.COLOR_WHITE));
createDialogArea.setBackground(Display.getCurrent()
.getSystemColor(SWT.COLOR_WHITE));
return createDialogArea;
}
protected void createButtonsForButtonBar(Composite parent) {
GridLayout gridLayout = (GridLayout) parent.getLayout();
Composite c = new Composite(parent, SWT.NONE);
GridLayout layout = new GridLayout(2, false);
layout.marginHeight = 0;
c.setLayout(layout);
gridLayout.makeColumnsEqualWidth = false;
gridLayout.numColumns += 1;
Link l = new Link(c, SWT.NONE);
l.setText("<a>Open User guide</a> ");
l.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
IWorkbenchHelpSystem helpSystem = PlatformUI.getWorkbench().getHelpSystem();
helpSystem.displayHelpResource("/com.onpositive.gae.tools.core/html/overview.html");
}
});
Link l1 = new Link(c, SWT.NONE);
l1.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
try {
PlatformUI
.getWorkbench()
.getBrowserSupport()
.getExternalBrowser()
.openURL(
new URL(
"http://appwrench.onpositive.com"));
} catch (PartInitException e1) {
Activator.log(e1);
} catch (MalformedURLException e1) {
Activator.log(e1);
}
}
});
parent.setLayoutData(GridDataFactory.fillDefaults()
.grab(true, false).create());
c.setLayoutData(GridDataFactory.fillDefaults().grab(
true, false).create());
l1.setText("<a>Open product web site</a>");
Button createButton = createButton(parent,
IDialogConstants.OK_ID,
IDialogConstants.OK_LABEL, true);
createButton.setFocus();
}
};
dialog.open();
}
});
return mn.createContextMenu(parent);
}
public Menu getMenu(Menu parent) {
return new Menu(parent);
}
}