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.tomcat.core; import com.liferay.ide.core.util.CoreUtil; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.IPath; import org.eclipse.jdt.core.IClasspathAttribute; import org.eclipse.jdt.core.IClasspathEntry; import org.eclipse.jdt.core.JavaCore; import org.eclipse.jst.server.tomcat.core.internal.TomcatRuntimeClasspathProvider; import org.eclipse.wst.server.core.IRuntime; /** * @author Greg Amerson */ @SuppressWarnings("restriction") public class LiferayTomcatRuntimeClasspathProvider extends TomcatRuntimeClasspathProvider { private static final String[] JARS = { "portal-impl.jar", "portal-service.jar", "support-tomcat.jar", }; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ public LiferayTomcatRuntimeClasspathProvider() { super(); } private IClasspathEntry[] getUpdatedJavadocEntries(IClasspathEntry[] entries, ILiferayTomcatRuntime liferayTomcatRuntime) { List<IClasspathEntry> updatedEntries = new ArrayList<IClasspathEntry>(); String javadocURL = liferayTomcatRuntime.getJavadocURL(); if (javadocURL != null) { for (IClasspathEntry existingEntry : entries) { IPath path = existingEntry.getPath(); IClasspathEntry newEntry = null; for (String javadocJar : JARS) { if (path.lastSegment().equalsIgnoreCase(javadocJar)) { IClasspathAttribute[] extraAttrs = existingEntry.getExtraAttributes(); List<IClasspathAttribute> newExtraAttrs = new ArrayList<IClasspathAttribute>(); IClasspathAttribute javadocAttr = newJavadocAttr(javadocURL); newExtraAttrs.add(javadocAttr); if (!CoreUtil.isNullOrEmpty(extraAttrs)) { for (IClasspathAttribute attr : extraAttrs) { if (!attr.getName().equals(IClasspathAttribute.JAVADOC_LOCATION_ATTRIBUTE_NAME)) { newExtraAttrs.add(attr); } } } newEntry = JavaCore.newLibraryEntry(existingEntry.getPath(), existingEntry.getSourceAttachmentPath(), existingEntry.getSourceAttachmentRootPath(), existingEntry.getAccessRules(), newExtraAttrs.toArray(new IClasspathAttribute[0]), existingEntry.isExported()); break; } } if (newEntry != null) { updatedEntries.add(newEntry); } else { updatedEntries.add(existingEntry); } } } else { Collections.addAll(updatedEntries, entries); } return updatedEntries.toArray(new IClasspathEntry[0]); } private IClasspathEntry[] getUpdatedSourceEntries(IClasspathEntry[] entries, ILiferayTomcatRuntime liferayTomcatRuntime) { List<IClasspathEntry> updatedEntries = new ArrayList<IClasspathEntry>(); IPath sourceLocation = liferayTomcatRuntime.getSourceLocation(); if (sourceLocation != null) { for (IClasspathEntry existingEntry : entries) { IPath path = existingEntry.getPath(); IClasspathEntry newEntry = null; for (String sourceJar : JARS) { if (path.lastSegment().equalsIgnoreCase(sourceJar)) { IPath sourcePath = existingEntry.getSourceAttachmentPath(); if (sourcePath == null) { sourcePath = sourceLocation; } newEntry = JavaCore.newLibraryEntry(existingEntry.getPath(), sourcePath, existingEntry.getSourceAttachmentRootPath(), existingEntry.getAccessRules(), existingEntry.getExtraAttributes(), existingEntry.isExported()); break; } } if (newEntry != null) { updatedEntries.add(newEntry); } else { updatedEntries.add(existingEntry); } } } else { Collections.addAll(updatedEntries, entries); } return updatedEntries.toArray(new IClasspathEntry[0]); } private IClasspathAttribute newJavadocAttr(String url) { return JavaCore.newClasspathAttribute(IClasspathAttribute.JAVADOC_LOCATION_ATTRIBUTE_NAME, url); } @Override public IClasspathEntry[] resolveClasspathContainer(final IProject project, final IRuntime runtime) { IPath installPath = runtime.getLocation(); if (installPath == null) return new IClasspathEntry[0]; String runtimeId = runtime.getRuntimeType().getId(); IClasspathEntry[] entries = resolveClasspathContainerForPath(installPath, runtimeId); // IDE-483 ILiferayTomcatRuntime liferayTomcatRuntime = (ILiferayTomcatRuntime) runtime .loadAdapter(ILiferayTomcatRuntime.class, null); if (liferayTomcatRuntime != null) { if (liferayTomcatRuntime.getJavadocURL() != null) { entries = getUpdatedJavadocEntries(entries, liferayTomcatRuntime); } if (liferayTomcatRuntime.getSourceLocation() != null) { entries = getUpdatedSourceEntries(entries, liferayTomcatRuntime); } } return entries; } protected IClasspathEntry[] resolveClasspathContainerForPath(IPath installPath, String runtimeTypeId) { List<IClasspathEntry> list = new ArrayList<IClasspathEntry>(); if (runtimeTypeId.endsWith("60") || runtimeTypeId.endsWith("70") || //$NON-NLS-1$ //$NON-NLS-2$ installPath.append("lib").toFile().exists()) //$NON-NLS-1$ { IPath path = installPath.append("lib"); //$NON-NLS-1$ addLibraryEntries(list, path.toFile(), true); } // go through all classpath entries and remove some unneeded ones List<IClasspathEntry> optimizedList = new ArrayList<IClasspathEntry>(); List<String> excludes = Arrays.asList(ILiferayTomcatConstants.LIB_EXCLUDES); for (IClasspathEntry entry : list) { if (!excludes.contains(entry.getPath().lastSegment())) { optimizedList.add(entry); } } return (IClasspathEntry[]) optimizedList.toArray(new IClasspathEntry[optimizedList.size()]); } protected void updateClasspath(IProject project, IRuntime runtime) { // IJavaProject javaProject = JavaCore.create(project); } }