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.util; import com.liferay.ide.core.ILiferayConstants; import com.liferay.ide.core.ILiferayPortal; import com.liferay.ide.core.ILiferayProject; import com.liferay.ide.core.LiferayCore; import com.liferay.ide.core.util.CoreUtil; import com.liferay.ide.sdk.core.ISDKConstants; import com.liferay.ide.sdk.core.SDK; import com.liferay.ide.sdk.core.SDKUtil; import com.liferay.ide.server.core.ILiferayRuntime; import com.liferay.ide.server.core.ILiferayServer; import com.liferay.ide.server.core.LiferayServerCore; import com.liferay.ide.server.core.portal.PortalBundle; import com.liferay.ide.server.core.portal.PortalBundleFactory; import com.liferay.ide.server.remote.IRemoteServer; import com.liferay.ide.server.remote.IServerManagerConnection; import java.io.File; import java.io.IOException; import java.text.MessageFormat; import java.util.ArrayList; import java.util.Enumeration; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Properties; import java.util.Set; import java.util.jar.JarFile; import javax.xml.parsers.DocumentBuilderFactory; import org.apache.commons.configuration.PropertiesConfiguration; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.Status; import org.eclipse.debug.core.DebugException; import org.eclipse.debug.core.DebugPlugin; import org.eclipse.debug.core.ILaunch; import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; import org.eclipse.jdt.core.IJavaProject; import org.eclipse.jdt.internal.launching.StandardVMType; import org.eclipse.jdt.launching.IVMInstall; import org.eclipse.jdt.launching.JavaRuntime; import org.eclipse.wst.common.componentcore.ComponentCore; import org.eclipse.wst.common.componentcore.resources.IVirtualComponent; import org.eclipse.wst.common.project.facet.core.IFacetedProject; import org.eclipse.wst.common.project.facet.core.IProjectFacet; import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion; import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager; import org.eclipse.wst.common.project.facet.core.runtime.RuntimeManager; import org.eclipse.wst.common.project.facet.core.runtime.internal.BridgedRuntime; import org.eclipse.wst.server.core.IRuntime; import org.eclipse.wst.server.core.IRuntimeType; import org.eclipse.wst.server.core.IRuntimeWorkingCopy; import org.eclipse.wst.server.core.IServer; import org.eclipse.wst.server.core.ServerCore; import org.osgi.framework.Version; import org.osgi.framework.dto.BundleDTO; import org.w3c.dom.Document; import org.w3c.dom.Node; import org.w3c.dom.NodeList; /** * @author Gregory Amerson * @author Cindy Li * @author Tao Tao * @author Kuo Zhang * @author Simon Jiang */ @SuppressWarnings("restriction") public class ServerUtil { public static boolean bsnExists(String bsn, BundleDTO[] bundles) { if (bsn != null) { for (BundleDTO bundle : bundles) { if (bsn.equals(bundle.symbolicName)) { return true; } } } return false; } public static Map<String, String> configureAppServerProperties(ILiferayRuntime liferayRuntime) { return getSDKRequiredProperties(liferayRuntime); } public static Map<String, String> configureAppServerProperties(IProject project) throws CoreException { try { return getSDKRequiredProperties(ServerUtil.getLiferayRuntime(project)); } catch (CoreException e1) { throw new CoreException(LiferayServerCore.createErrorStatus(e1)); } } public static IStatus createErrorStatus(String msg) { return new Status(IStatus.ERROR, LiferayServerCore.PLUGIN_ID, msg); } public static IProject findProjectByContextName(String contextName) { IProject retval = null; if (!CoreUtil.isNullOrEmpty(contextName)) { for (IProject project : CoreUtil.getAllProjects()) { final IVirtualComponent c = ComponentCore.createComponent(project, true); if (c != null) { final Properties metaProperties = c.getMetaProperties(); if (metaProperties != null) { String contextRoot = metaProperties.getProperty("context-root"); //$NON-NLS-1$ if (contextName.equals(contextRoot)) { retval = project; break; } } } } } return retval; } public static Properties getAllCategories(IPath portalDir) { Properties retval = null; File implJar = portalDir.append("WEB-INF/lib/portal-impl.jar").toFile(); //$NON-NLS-1$ if (implJar.exists()) { try { JarFile jar = new JarFile(implJar); Properties categories = new Properties(); Properties props = new Properties(); props.load(jar.getInputStream(jar.getEntry("content/Language.properties"))); //$NON-NLS-1$ Enumeration<?> names = props.propertyNames(); while (names.hasMoreElements()) { String name = names.nextElement().toString(); if (name.startsWith("category.")) //$NON-NLS-1$ { categories.put(name, props.getProperty(name)); } } retval = categories; jar.close(); } catch (IOException e) { LiferayServerCore.logError(e); } } return retval; } public static IPath getAppServerDir(org.eclipse.wst.common.project.facet.core.runtime.IRuntime serverRuntime) { ILiferayRuntime runtime = (ILiferayRuntime) getRuntimeAdapter(serverRuntime, ILiferayRuntime.class); return runtime != null ? runtime.getAppServerDir() : null; } public static String getAppServerPropertyKey(String propertyAppServerDeployDir, ILiferayRuntime runtime) { String retval = null; try { final Version version = new Version(runtime.getPortalVersion()); final String type = runtime.getAppServerType(); if ((CoreUtil.compareVersions(version, ILiferayConstants.V6130) >= 0) || (CoreUtil.compareVersions(version, ILiferayConstants.V612) >= 0 && CoreUtil.compareVersions(version, ILiferayConstants.V6110) < 0)) { retval = MessageFormat.format(propertyAppServerDeployDir, "." + type + "."); //$NON-NLS-1$ //$NON-NLS-2$ } } catch (Exception e) { } finally { if (retval == null) { retval = MessageFormat.format(propertyAppServerDeployDir, "."); //$NON-NLS-1$ } } return retval; } public static Set<IRuntime> getAvailableLiferayRuntimes() { Set<IRuntime> retval = new HashSet<IRuntime>(); IRuntime[] runtimes = ServerCore.getRuntimes(); for (IRuntime rt : runtimes) { if (isLiferayRuntime(rt)) { retval.add(rt); } } return retval; } public static Properties getEntryCategories(IPath portalDir, String portalVersion) { Properties categories = getAllCategories(portalDir); Properties retval = new Properties(); final String myKey = "category.my"; //$NON-NLS-1$ final String categoryMy = categories.getProperty(myKey); if ((portalVersion == null) || (CoreUtil.compareVersions(new Version(portalVersion), ILiferayConstants.V620) < 0)) { final String portalKey = "category.portal"; //$NON-NLS-1$ final String serverKey = "category.server"; //$NON-NLS-1$ final String keyContent = "category.content"; //$NON-NLS-1$ retval.put(myKey, categoryMy + " Account Section"); //$NON-NLS-1$ retval.put(portalKey, categories.getProperty(portalKey) + " Section"); //$NON-NLS-1$ retval.put(serverKey, categories.getProperty(serverKey) + " Section"); //$NON-NLS-1$ retval.put(keyContent, categories.getProperty(keyContent) + " Section"); //$NON-NLS-1$ } else { final String keyUsers = "category.users"; //$NON-NLS-1$ final String keyApps = "category.apps"; //$NON-NLS-1$ final String keyConfig = "category.configuration"; //$NON-NLS-1$ final String keySites = "category.sites"; //$NON-NLS-1$ final String keySiteConfig = "category.site_administration.configuration"; //$NON-NLS-1$ final String keySiteContent = "category.site_administration.content"; //$NON-NLS-1$ final String keySitePages = "category.site_administration.pages"; //$NON-NLS-1$ final String keySiteUsers = "category.site_administration.users"; //$NON-NLS-1$ retval.put(myKey, categoryMy + " Account Administration"); //$NON-NLS-1$ retval.put(keyUsers, "Control Panel - " + categories.getProperty(keyUsers)); //$NON-NLS-1$ retval.put(keyApps, "Control Panel - " + categories.getProperty(keyApps)); //$NON-NLS-1$ retval.put(keyConfig, "Control Panel - " + categories.getProperty(keyConfig)); //$NON-NLS-1$ retval.put(keySites, "Control Panel - " + categories.getProperty(keySites)); //$NON-NLS-1$ retval.put(keySiteConfig, "Site Administration - " + categories.getProperty(keySiteConfig)); //$NON-NLS-1$ retval.put(keySiteContent, "Site Administration - " + categories.getProperty(keySiteContent)); //$NON-NLS-1$ retval.put(keySitePages, "Site Administration - " + categories.getProperty(keySitePages)); //$NON-NLS-1$ retval.put(keySiteUsers, "Site Administration - " + categories.getProperty(keySiteUsers)); //$NON-NLS-1$ } return retval; } public static IFacetedProject getFacetedProject(IProject project) { try { return ProjectFacetsManager.create(project); } catch (CoreException e) { return null; } } public static org.eclipse.wst.common.project.facet.core.runtime.IRuntime getFacetRuntime(IRuntime runtime) { return RuntimeManager.getRuntime(runtime.getName()); } public static IProjectFacet getLiferayFacet(IFacetedProject facetedProject) { for (IProjectFacetVersion projectFacet : facetedProject.getProjectFacets()) { if (isLiferayFacet(projectFacet.getProjectFacet())) { return projectFacet.getProjectFacet(); } } return null; } public static ILiferayRuntime getLiferayRuntime(BridgedRuntime bridgedRuntime) { if (bridgedRuntime != null) { String id = bridgedRuntime.getProperty("id"); //$NON-NLS-1$ if (id != null) { IRuntime runtime = ServerCore.findRuntime(id); if (isLiferayRuntime(runtime)) { return getLiferayRuntime(runtime); } } } return null; } public static ILiferayRuntime getLiferayRuntime(IProject project) throws CoreException { if (project == null) { return null; } IFacetedProject facetedProject = ProjectFacetsManager.create(project); if (facetedProject != null) { return (ILiferayRuntime) getRuntimeAdapter(facetedProject.getPrimaryRuntime(), ILiferayRuntime.class); } else { return null; } } public static ILiferayRuntime getLiferayRuntime(IRuntime runtime) { if (runtime != null) { return (ILiferayRuntime) runtime.createWorkingCopy().loadAdapter(ILiferayRuntime.class, null); } return null; } public static ILiferayRuntime getLiferayRuntime(IRuntime runtime, IProgressMonitor monitor) { return (ILiferayRuntime) runtime.loadAdapter(ILiferayRuntime.class, monitor); } public static ILiferayRuntime getLiferayRuntime(IServer server) { if (server != null) { return getLiferayRuntime(server.getRuntime()); } return null; } public static ILiferayRuntime getLiferayRuntime(String name) { return getLiferayRuntime(getRuntime(name)); } public static ILiferayServer getLiferayServer(IServer server, IProgressMonitor monitor) { ILiferayServer retval = null; if (server != null) { try { retval = (ILiferayServer) server.loadAdapter(ILiferayServer.class, monitor); } catch (Exception e) { } } return retval; } public static IPath getPortalDir(IJavaProject project) { return getPortalDir(project.getProject()); } public static IPath getPortalDir(IProject project) { IPath retval = null; final ILiferayProject liferayProject = LiferayCore.create(project); if (liferayProject != null) { final ILiferayPortal portal = liferayProject.adapt(ILiferayPortal.class); if (portal != null) { retval = portal.getAppServerPortalDir(); } } return retval; } public static Properties getPortletCategories(IPath portalDir) { Properties props = getAllCategories(portalDir); Properties categories = new Properties(); Enumeration<?> names = props.propertyNames(); String[] controlPanelCategories = { "category.my", //$NON-NLS-1$ "category.users", //$NON-NLS-1$ "category.apps", //$NON-NLS-1$ "category.configuration", //$NON-NLS-1$ "category.sites", //$NON-NLS-1$ "category.site_administration.configuration", //$NON-NLS-1$ "category.site_administration.content", //$NON-NLS-1$ "category.site_administration.pages", //$NON-NLS-1$ "category.site_administration.users" //$NON-NLS-1$ }; while (names.hasMoreElements()) { boolean isControlPanelCategory = false; String name = names.nextElement().toString(); for (String category : controlPanelCategories) { if (name.equals(category)) { isControlPanelCategory = true; break; } } if (!isControlPanelCategory) { categories.put(name, props.getProperty(name)); } } return categories; } public static IRuntime getRuntime(IProject project) throws CoreException { return (IRuntime) getRuntimeAdapter(ProjectFacetsManager.create(project).getPrimaryRuntime(), IRuntime.class); } public static PortalBundle getPortalBundle(IProject project) throws CoreException { SDK sdk = SDKUtil.getSDKFromProjectDir(project.getLocation().toFile()); IStatus status = sdk.validate(); if (!status.isOK()) { return null; } final Map<String, Object> appServerProperties = sdk.getBuildProperties(); final String appServerType = (String) (appServerProperties.get("app.server.type")); PortalBundleFactory factory = LiferayServerCore.getPortalBundleFactories(appServerType); if (factory != null) { final IPath path = factory.canCreateFromPath(appServerProperties); if (path != null) { PortalBundle bundle = factory.create(path); return bundle; } } return null; } public static IRuntime getRuntime(org.eclipse.wst.common.project.facet.core.runtime.IRuntime runtime) { return ServerCore.findRuntime(runtime.getProperty("id")); //$NON-NLS-1$ } public static IRuntime getRuntime(String runtimeName) { IRuntime retval = null; if (!CoreUtil.isNullOrEmpty(runtimeName)) { final IRuntime[] runtimes = ServerCore.getRuntimes(); if (runtimes != null) { for (final IRuntime runtime : runtimes) { if (runtimeName.equals(runtime.getName())) { retval = runtime; break; } } } } return retval; } public static IRuntimeWorkingCopy getRuntime(String runtimeTypeId, IPath location) { IRuntimeType runtimeType = ServerCore.findRuntimeType(runtimeTypeId); try { IRuntime runtime = runtimeType.createRuntime("runtime", null); //$NON-NLS-1$ IRuntimeWorkingCopy runtimeWC = runtime.createWorkingCopy(); runtimeWC.setName("Runtime"); //$NON-NLS-1$ runtimeWC.setLocation(location); return runtimeWC; } catch (CoreException e) { e.printStackTrace(); } return null; } public static Object getRuntimeAdapter(org.eclipse.wst.common.project.facet.core.runtime.IRuntime facetRuntime, Class<?> adapterClass) { if (facetRuntime != null) { String runtimeId = facetRuntime.getProperty("id"); //$NON-NLS-1$ for (org.eclipse.wst.server.core.IRuntime runtime : ServerCore.getRuntimes()) { if (runtime.getId().equals(runtimeId)) { if (IRuntime.class.equals(adapterClass)) { return runtime; } IRuntimeWorkingCopy runtimeWC = null; if (!runtime.isWorkingCopy()) { runtimeWC = runtime.createWorkingCopy(); } else { runtimeWC = (IRuntimeWorkingCopy) runtime; } return runtimeWC.loadAdapter(adapterClass, null); } } } return null; } public static Version getRuntimeVersion(IProject project) { Version retval = null; if (project != null) { final ILiferayProject liferayProject = LiferayCore.create(project); if (liferayProject != null) { final ILiferayPortal portal = liferayProject.adapt(ILiferayPortal.class); if (portal != null) { final String version = portal.getVersion(); if (version != null) { retval = new Version(version); } } } } return retval; } public static Map<String, String> getSDKRequiredProperties(ILiferayRuntime appServer) { Map<String, String> properties = new HashMap<String, String>(); String type = appServer.getAppServerType(); String dir = appServer.getAppServerDir().toOSString(); String deployDir = appServer.getAppServerDeployDir().toOSString(); String libGlobalDir = appServer.getAppServerLibGlobalDir().toOSString(); String parentDir = new File(dir).getParent(); String portalDir = appServer.getAppServerPortalDir().toOSString(); properties.put(ISDKConstants.PROPERTY_APP_SERVER_TYPE, type); final String appServerDirKey = getAppServerPropertyKey(ISDKConstants.PROPERTY_APP_SERVER_DIR, appServer); final String appServerDeployDirKey = getAppServerPropertyKey(ISDKConstants.PROPERTY_APP_SERVER_DEPLOY_DIR, appServer); final String appServerLibGlobalDirKey = getAppServerPropertyKey( ISDKConstants.PROPERTY_APP_SERVER_LIB_GLOBAL_DIR, appServer); final String appServerPortalDirKey = getAppServerPropertyKey(ISDKConstants.PROPERTY_APP_SERVER_PORTAL_DIR, appServer); properties.put(appServerDirKey, dir); properties.put(appServerDeployDirKey, deployDir); properties.put(appServerLibGlobalDirKey, libGlobalDir); //IDE-1268 need to always specify app.server.parent.dir, even though it is only useful in 6.1.2/6.2.0 or greater properties.put(ISDKConstants.PROPERTY_APP_SERVER_PARENT_DIR, parentDir); properties.put(appServerPortalDirKey, portalDir); return properties; } public static IServerManagerConnection getServerManagerConnection(IServer server, IProgressMonitor monitor) { return LiferayServerCore .getRemoteConnection((IRemoteServer) server.loadAdapter(IRemoteServer.class, monitor)); } public static IServer[] getServersForRuntime(IRuntime runtime) { List<IServer> serverList = new ArrayList<IServer>(); if (runtime != null) { IServer[] servers = ServerCore.getServers(); if (!CoreUtil.isNullOrEmpty(servers)) { for (IServer server : servers) { if (runtime.equals(server.getRuntime())) { serverList.add(server); } } } } return serverList.toArray(new IServer[0]); } public static String[] getServletFilterNames(IPath portalDir) throws Exception { List<String> retval = new ArrayList<String>(); File filtersWebXmlFile = portalDir.append("WEB-INF/liferay-web.xml").toFile(); //$NON-NLS-1$ if (!filtersWebXmlFile.exists()) { filtersWebXmlFile = portalDir.append("WEB-INF/web.xml").toFile(); //$NON-NLS-1$ } if (filtersWebXmlFile.exists()) { Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(filtersWebXmlFile); NodeList filterNameElements = document.getElementsByTagName("filter-name"); //$NON-NLS-1$ for (int i = 0; i < filterNameElements.getLength(); i++) { Node filterNameElement = filterNameElements.item(i); String content = filterNameElement.getTextContent(); if (!CoreUtil.isNullOrEmpty(content)) { retval.add(content.trim()); } } } return retval.toArray(new String[0]); } public static boolean hasFacet(IProject project, IProjectFacet checkProjectFacet) { boolean retval = false; if (project == null || checkProjectFacet == null) { return retval; } try { IFacetedProject facetedProject = ProjectFacetsManager.create(project); if (facetedProject != null && checkProjectFacet != null) { for (IProjectFacetVersion facet : facetedProject.getProjectFacets()) { IProjectFacet projectFacet = facet.getProjectFacet(); if (checkProjectFacet.equals(projectFacet)) { retval = true; break; } } } } catch (CoreException e) { } return retval; } public static boolean isExistingVMName(String name) { for (IVMInstall vm : JavaRuntime.getVMInstallType(StandardVMType.ID_STANDARD_VM_TYPE).getVMInstalls()) { if (vm.getName().equals(name)) { return true; } } return false; } public static boolean isExtProject(IProject project) { return hasFacet(project, ProjectFacetsManager.getProjectFacet("liferay.ext")); //$NON-NLS-1$ } public static boolean isLiferayFacet(IProjectFacet projectFacet) { return projectFacet != null && projectFacet.getId().startsWith("liferay"); //$NON-NLS-1$ } public static boolean isLiferayRuntime(BridgedRuntime bridgedRuntime) { if (bridgedRuntime != null) { String id = bridgedRuntime.getProperty("id"); //$NON-NLS-1$ if (id != null) { IRuntime runtime = ServerCore.findRuntime(id); return isLiferayRuntime(runtime); } } return false; } public static boolean isLiferayRuntime(IRuntime runtime) { return getLiferayRuntime(runtime) != null; } public static boolean isLiferayRuntime(IServer server) { return getLiferayRuntime(server) != null; } public static boolean isValidPropertiesFile(File file) { if (file == null || !file.exists()) { return false; } try { new PropertiesConfiguration(file); } catch (Exception e) { return false; } return true; } public static void terminateLaunchesForConfig(ILaunchConfigurationWorkingCopy config) throws DebugException { ILaunch[] launches = DebugPlugin.getDefault().getLaunchManager().getLaunches(); for (ILaunch launch : launches) { if (launch.getLaunchConfiguration().equals(config)) { launch.terminate(); } } } public static boolean verifyPath(final String verifyPath) { if (verifyPath == null) { return false; } final IPath verifyLocation = new Path(verifyPath); if (verifyLocation.toFile().exists() && verifyLocation.toFile().isDirectory()) { return true; } return false; } }