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.alloy.core.webresources; import com.liferay.ide.alloy.core.AlloyCore; import com.liferay.ide.core.ILiferayPortal; import com.liferay.ide.core.ILiferayProject; import com.liferay.ide.core.LiferayCore; import com.liferay.ide.project.core.util.ProjectUtil; import java.io.File; import java.io.IOException; import java.net.URL; import java.util.Collection; import java.util.HashSet; import java.util.Map; import java.util.WeakHashMap; import org.apache.commons.io.FileUtils; import org.eclipse.core.resources.IFile; import org.eclipse.core.runtime.FileLocator; import org.eclipse.core.runtime.IPath; import org.eclipse.wst.html.webresources.core.providers.IWebResourcesContext; import org.eclipse.wst.html.webresources.core.providers.IWebResourcesFileSystemProvider; /** * @author Gregory Amerson */ public class PortalResourcesProvider implements IWebResourcesFileSystemProvider { private static final Map<IPath, Collection<File>> fileCache = new WeakHashMap<IPath, Collection<File>>(); @Override public File[] getResources(IWebResourcesContext context) { File[] retval = null; final IFile htmlFile = context.getHtmlFile(); final ILiferayProject project = LiferayCore.create(htmlFile.getProject()); if (htmlFile != null && project != null) { final ILiferayPortal portal = project.adapt(ILiferayPortal.class); if (portal != null && ProjectUtil.isPortletProject(htmlFile.getProject())) { final IPath portalDir = portal.getAppServerPortalDir(); if (portalDir != null) { final IPath cssPath = portalDir.append("html/themes/_unstyled/css"); if (cssPath.toFile().exists()) { synchronized (fileCache) { final Collection<File> cachedFiles = fileCache.get(cssPath); if (cachedFiles != null) { retval = cachedFiles.toArray(new File[0]); } else { final Collection<File> files = FileUtils.listFiles(cssPath.toFile(), new String[] { "css", "scss" }, true); final Collection<File> cached = new HashSet<File>(); for (File file : files) { if (file.getName().endsWith("scss")) { final File cachedFile = new File(file.getParent(), ".sass-cache/" + file.getName().replaceAll("scss$", "css")); if (cachedFile.exists()) { cached.add(file); } } } files.removeAll(cached); if (files != null) { retval = files.toArray(new File[0]); } fileCache.put(cssPath, files); } } } } } else if (portal != null && ProjectUtil.isLayoutTplProject(htmlFile.getProject())) { // return the static css resource for layout template names based on the version final String version = portal.getVersion(); try { if (version != null && (version.startsWith("6.0") || version.startsWith("6.1"))) { retval = createLayoutHelperFiles("resources/layouttpl-6.1.css"); } else if (version != null) { retval = createLayoutHelperFiles("resources/layouttpl-6.2.css"); } } catch (IOException e) { AlloyCore.logError("Unable to load layout template helper css files", e); } } } return retval; } private File[] createLayoutHelperFiles(String path) throws IOException { final URL url = FileLocator.toFileURL(AlloyCore.getDefault().getBundle().getEntry(path)); return new File[] { new File(url.getFile()) }; } }