package thahn.java.agui.ide.eclipse.wizard; import java.io.File; import java.net.MalformedURLException; import java.net.URL; import java.util.MissingResourceException; import java.util.ResourceBundle; import net.sf.fjep.fatjar.popup.actions.BuildFatJar; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Platform; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.preference.PreferenceDialog; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.dialogs.PreferencesUtil; import org.eclipse.ui.internal.util.BundleUtility; import org.eclipse.ui.plugin.AbstractUIPlugin; import org.osgi.framework.Bundle; import org.osgi.framework.BundleContext; import thahn.java.agui.ide.eclipse.preferences.AguiPreferenceConstants; import thahn.java.agui.ide.eclipse.preferences.AguiPreferencePage; /** * The activator class controls the plug-in life cycle */ public class AguiPlugin extends AbstractUIPlugin { // The plug-in ID public static final String PLUGIN_ID = "thahn.java.agui.ide.eclipse.wizard"; //$NON-NLS-1$ // The shared instance private static AguiPlugin plugin; /** * The constructor */ public AguiPlugin() { try { resourceBundle = ResourceBundle.getBundle("net.sf.fjep.fatjar.FatjarPluginResources"); } catch (MissingResourceException x) { resourceBundle = null; } } /* * (non-Javadoc) * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext) */ public void start(BundleContext context) throws Exception { super.start(context); plugin = this; } /* * (non-Javadoc) * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext) */ public void stop(BundleContext context) throws Exception { plugin = null; super.stop(context); } /** * Returns the shared instance * * @return the shared instance */ public static AguiPlugin getDefault() { return plugin; } /** * Returns an image descriptor for the image file at the given * plug-in relative path * * @param path the path * @return the image descriptor */ public static ImageDescriptor getImageDescriptor(String path) { return imageDescriptorFromPlugin(PLUGIN_ID, path); } public static URL getBundleAbsolutePath(String path) { Bundle bundle = Platform.getBundle(PLUGIN_ID); if (!BundleUtility.isReady(bundle)) { return null; } // look for the image (this will check both the plugin and fragment folders URL fullPathString = BundleUtility.find(bundle, path); if (fullPathString == null) { try { fullPathString = new URL(path); } catch (MalformedURLException e) { return null; } } return fullPathString; } private void checkSdkLocation() { final Display disp = getDisplay(); disp.asyncExec(new Runnable() { @Override public void run() { Shell shell = disp.getActiveShell(); if (shell == null) { return; } String customLabel = null; customLabel = "Open Preferences"; String btnLabels[] = new String[customLabel == null ? 1 : 2]; btnLabels[0] = customLabel; btnLabels[btnLabels.length - 1] = IDialogConstants.CLOSE_LABEL; MessageDialog dialog = new MessageDialog( shell, // parent "Agui Sdk", null, // dialogTitleImage "Set Agui SDK Path", MessageDialog.WARNING, btnLabels, btnLabels.length - 1); int index = dialog.open(); if (customLabel != null && index == 0) { // switch(solution) { // case OPEN_ANDROID_PREFS: openAguiPrefs(); // break; // case OPEN_P2_UPDATE: // openP2Update(); // break; // // case OPEN_SDK_MANAGER: // openSdkManager(); // break; // } // } } } }); } /** * Returns the current display, if any * * @return the display */ public static Display getDisplay() { Display display = Display.getCurrent(); if (display != null) { return display; } return Display.getDefault(); } /** * Returns the shell, if any * * @return the shell, if any */ public static Shell getShell() { Display display = AguiPlugin.getDisplay(); Shell shell = display.getActiveShell(); if (shell == null) { Shell[] shells = display.getShells(); if (shells.length > 0) { shell = shells[0]; } } return shell; } public void workbenchStarted() { IPreferenceStore pref = getPreferenceStore(); String sdkLocation = pref.getString(AguiPreferenceConstants.P_SDK_LOCATION); if(sdkLocation == null || sdkLocation.trim().equals("")) { checkSdkLocation(); } // RuntimeJarLoader.loadJarIndDir(getToolsLibLocation()); } private void openAguiPrefs() { PreferenceDialog dialog = PreferencesUtil.createPreferenceDialogOn( getDisplay().getActiveShell(), AguiPreferencePage.PAGE_ID, //$NON-NLS-1$ preferencePageId null, // displayedIds null); // data dialog.open(); } public static void displayError(String title, String message) { MessageDialog dialog = new MessageDialog(getShell(), title, null, message, MessageDialog.ERROR, new String[] { "Ok", "Cancel" }, 0); dialog.open(); } //********************************************** // fat jar //********************************************** // The name of the One-JAR distribution being used. public static final String ONE_JAR_BOOT = "one-jar-boot-0.95.jar"; //Resource bundle. private ResourceBundle resourceBundle; // Property names in .fatjar file for each project. public final static String ONEJAR = "onejar"; public final static String ONEJAR_CHECKBOX = ONEJAR + ".checkbox"; public final static String ONEJAR_EXPAND = ONEJAR + ".expand"; public final static String ONEJAR_LICENSE_REQUIRED = ONEJAR + ".license.required"; /** * Returns the string from the plugin's resource bundle, * or 'key' if not found. */ public static String getResourceString(String key) { ResourceBundle bundle = getDefault().getResourceBundle(); try { return (bundle != null) ? bundle.getString(key) : key; } catch (MissingResourceException e) { return key; } } /** * Returns the plugin's resource bundle, */ public ResourceBundle getResourceBundle() { return resourceBundle; } /** * * @param wr * @param eFile * @param showWarning * @return null if no checkout request was needed (file does not exist or is writable), * if checkout was asked, status represents the resul (isOK()) */ public static IStatus askFileWriteAccess(IFile eFile) { IStatus result = null; if (eFile != null) { File f = eFile.getFullPath().toFile(); if (!f.canWrite()) { if (BuildFatJar.getScmAutoCheckout()) { IFile[] editFiles = new IFile[1]; editFiles[0] = eFile; Shell shell = new Shell(); result = ResourcesPlugin.getWorkspace().validateEdit(editFiles, shell); } } } return result; } }