Java tutorial
/******************************************************************************* * Copyright (c) 2000-present Liferay, Inc. All rights reserved. * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation; either version 2.1 of the License, or (at your option) * any later version. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * *******************************************************************************/ package com.liferay.ide.server.ui; import com.liferay.ide.core.LiferayCore; import com.liferay.ide.core.util.CoreUtil; import com.liferay.ide.sdk.core.SDK; import com.liferay.ide.sdk.core.SDKManager; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FilenameFilter; import java.lang.reflect.Method; import java.util.Collections; import java.util.Date; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.preferences.IEclipsePreferences; import org.eclipse.core.runtime.preferences.InstanceScope; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.mylyn.commons.notifications.core.AbstractNotification; import org.eclipse.mylyn.commons.notifications.ui.AbstractUiNotification; import org.eclipse.mylyn.commons.notifications.ui.NotificationsUi; import org.eclipse.swt.graphics.Image; import org.eclipse.ui.PlatformUI; import org.eclipse.wst.server.core.IRuntime; import org.eclipse.wst.server.core.IServer; import org.eclipse.wst.server.core.IServerWorkingCopy; import org.eclipse.wst.server.core.ServerCore; import org.eclipse.wst.server.core.internal.Base; import org.eclipse.wst.server.core.internal.IMemento; import org.eclipse.wst.server.core.internal.IStartup; import org.eclipse.wst.server.core.internal.ResourceManager; import org.eclipse.wst.server.core.internal.Runtime; import org.eclipse.wst.server.core.internal.Server; import org.eclipse.wst.server.core.internal.XMLMemento; import org.eclipse.wst.server.core.model.ServerDelegate; import org.osgi.service.prefs.BackingStoreException; /** * @author Gregory Amerson */ @SuppressWarnings("restriction") public class ServerStartup implements IStartup { private static final String GLOBAL_SETTINGS_CHECKED = "global-settings-checked"; private AbstractNotification createImportGlobalSettingsNotification() { final Date date = new Date(); return new AbstractUiNotification("com.liferay.ide.server.ui.importglobalsettings") { @SuppressWarnings({ "rawtypes", "unchecked" }) public Object getAdapter(Class adapter) { return null; } @Override public Date getDate() { return date; } @Override public String getDescription() { return "Click above to learn more about importing those settings."; } @Override public String getLabel() { return "Previous Liferay IDE settings have been detected"; } @Override public Image getNotificationImage() { return LiferayServerUI.getDefault().getImageRegistry().get(LiferayServerUI.IMG_NOTIFICATION); } @Override public Image getNotificationKindImage() { return null; } @Override public void open() { boolean importSettings = MessageDialog.openQuestion( PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), "Previous Liferay IDE Settings Detected", "Settings from a previous Liferay IDE workspace have been detected such as: Plugins SDKS, Liferay runtimes, or Liferay servers. Do you want to import these settings now?"); if (importSettings) { importGlobalSettings(); } } }; } private SDK createSDKfromMemento(IMemento memento) { SDK sdk = new SDK(); sdk.setName(memento.getString("name")); sdk.setLocation(Path.fromPortableString(memento.getString("location")).makeAbsolute()); return sdk; } private boolean hasGlobalSettings() { final File globalSettingsDir = LiferayCore.GLOBAL_SETTINGS_PATH.toFile(); if (globalSettingsDir.exists()) { final File[] settings = globalSettingsDir.listFiles(new FilenameFilter() { public boolean accept(File dir, String name) { return name.toLowerCase().endsWith(".xml"); } }); return settings != null && settings.length > 0; } return false; } private void importGlobalRuntimes(File runtimesFile) { try { final IMemento runtimesMemento = XMLMemento.loadMemento(new FileInputStream(runtimesFile)); if (runtimesMemento != null) { final ResourceManager resourceManager = ResourceManager.getInstance(); final IMemento[] mementos = runtimesMemento.getChildren("runtime"); if (!CoreUtil.isNullOrEmpty(mementos)) { for (IMemento memento : mementos) { final Runtime runtime = new Runtime(null); try { final Method loadFromMemento = Base.class.getDeclaredMethod("loadFromMemento", IMemento.class, IProgressMonitor.class); if (loadFromMemento != null) { loadFromMemento.setAccessible(true); loadFromMemento.invoke(runtime, memento, null); if (ServerCore.findRuntime(runtime.getId()) == null) { final Method addRuntime = ResourceManager.class.getDeclaredMethod("addRuntime", IRuntime.class); if (addRuntime != null) { addRuntime.setAccessible(true); addRuntime.invoke(resourceManager, runtime); } } } } catch (Exception e) { LiferayServerUI.logError("Unable to load runtime from memento", e); } } } } } catch (FileNotFoundException e) { } } private void importGlobalSDKs(File sdksFile) { try { final SDKManager manager = SDKManager.getInstance(); final IMemento sdksMemento = XMLMemento.loadMemento(new FileInputStream(sdksFile)); if (sdksMemento != null) { final IMemento[] sdks = sdksMemento.getChildren("sdk"); if (!CoreUtil.isNullOrEmpty(sdks)) { for (IMemento sdkMemento : sdks) { final SDK newSDK = createSDKfromMemento(sdkMemento); if (newSDK != null) { final SDK existingSDK = manager.getSDK(newSDK.getName()); if (existingSDK == null) { manager.addSDK(newSDK); } } } } } } catch (FileNotFoundException e) { } } private void importGlobalServers(File serversFile) { try { final IMemento serversMemento = XMLMemento.loadMemento(new FileInputStream(serversFile)); if (serversMemento != null) { final ResourceManager resourceManager = ResourceManager.getInstance(); final IMemento[] mementos = serversMemento.getChildren("server"); if (!CoreUtil.isNullOrEmpty(mementos)) { for (IMemento memento : mementos) { final Server server = new Server(null); try { final Method loadFromMemento = Base.class.getDeclaredMethod("loadFromMemento", IMemento.class, IProgressMonitor.class); if (loadFromMemento != null) { loadFromMemento.setAccessible(true); loadFromMemento.invoke(server, memento, null); if (ServerCore.findServer(server.getId()) == null) { final Method addServer = ResourceManager.class.getDeclaredMethod("addServer", IServer.class); if (addServer != null) { addServer.setAccessible(true); addServer.invoke(resourceManager, server); final IServerWorkingCopy wc = server.createWorkingCopy(); ServerDelegate delegate = (ServerDelegate) wc .loadAdapter(ServerDelegate.class, null); delegate.importRuntimeConfiguration(wc.getRuntime(), null); wc.save(true, null); } } } } catch (Exception e) { LiferayServerUI.logError("Unable to load server from memento", e); } } } } } catch (FileNotFoundException e) { } } private void importGlobalSettings() { final File settingsDir = LiferayCore.GLOBAL_SETTINGS_PATH.toFile(); if (settingsDir.exists()) { final File sdks = new File(settingsDir, "sdks.xml"); if (sdks.exists()) { importGlobalSDKs(sdks); } final File runtimes = new File(settingsDir, "runtimes.xml"); if (runtimes.exists()) { importGlobalRuntimes(runtimes); } final File servers = new File(settingsDir, "servers.xml"); if (servers.exists()) { importGlobalServers(servers); } } } private boolean shouldCheckForGlobalSettings() { // IScopeContext[] scopes = new IScopeContext[] { InstanceScope.INSTANCE }; // // return !( Platform.getPreferencesService().getBoolean( // LiferayServerUI.PLUGIN_ID, GLOBAL_SETTINGS_CHECKED, false, scopes ) ); return false; // disabled } public void startup() { if (shouldCheckForGlobalSettings() && hasGlobalSettings()) { NotificationsUi.getService() .notify(Collections.singletonList(createImportGlobalSettingsNotification())); try { IEclipsePreferences prefs = InstanceScope.INSTANCE.getNode(LiferayServerUI.PLUGIN_ID); prefs.putBoolean(GLOBAL_SETTINGS_CHECKED, true); prefs.flush(); } catch (BackingStoreException e) { LiferayServerUI.logError("Unable to persist global-setting-checked pref", e); } } } }