//------------------------------------------------------------------------------ // Copyright (c) 2005, 2007 IBM Corporation and others. // All rights reserved. This program and the accompanying materials // are made available under the terms of the Eclipse Public License v1.0 // which accompanies this distribution, and is available at // http://www.eclipse.org/legal/epl-v10.html // // Contributors: // IBM Corporation - initial implementation //------------------------------------------------------------------------------ package org.eclipse.epf.publishing.util; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.StringWriter; import java.net.URL; import java.util.Collection; import java.util.Iterator; import java.util.Locale; import java.util.Properties; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; import org.eclipse.core.runtime.FileLocator; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.epf.common.xml.XSLTProcessor; import org.eclipse.epf.diagram.core.services.DiagramManager; import org.eclipse.epf.library.layout.util.XmlElement; import org.eclipse.epf.library.layout.util.XmlHelper; import org.eclipse.epf.library.util.ResourceHelper; import org.eclipse.epf.persistence.util.PersistenceUtil; import org.eclipse.epf.publishing.PublishingPlugin; import org.eclipse.epf.uma.ContentCategory; import org.eclipse.epf.uma.CustomCategory; import org.eclipse.epf.uma.DescribableElement; import org.eclipse.epf.uma.MethodConfiguration; import org.eclipse.epf.uma.Process; /** * Helper utilities for publishing. * * @author Jinhua Xi * @author Kelvin Low * @since 1.0 */ public class PublishingUtil { /** * Zips the content of a directory into a JAR file. * <p> * Non-sub-folders are included. * * @param jarDir * the directory to be zipped * @param jarFile * the output JAR file * @throws IOException * if an error occurs while creating the JAR file */ public static void jarFiles(File jarDir, File jarFile) throws IOException { File[] files = jarDir.listFiles(); if (jarFile.exists()) { jarFile.delete(); } BufferedOutputStream bStream = new BufferedOutputStream( new FileOutputStream(jarFile)); ZipOutputStream zipperStream = new ZipOutputStream(bStream); byte[] bytes = new byte[4096]; for (int i = 0; i < files.length; i++) { File currentFile = files[i]; if (currentFile.isDirectory()) { continue; } ZipEntry currEntry = new ZipEntry(currentFile.getName()); zipperStream.putNextEntry(currEntry); BufferedInputStream biStream = new BufferedInputStream( new FileInputStream(currentFile)); while (biStream.available() > 0) { int num = biStream.read(bytes); zipperStream.write(bytes, 0, num); } biStream.close(); zipperStream.closeEntry(); } zipperStream.close(); bStream.close(); } /** * Generates the HTML content for a given XML element and XSL file path * * @param xmlElement * an object that contains the XML representation for a metod * element * @param xslPath * path to a XSL file * @return the output HTML */ public static String getHtml(XmlElement xmlElement, String xslPath) { try { // set the language attribute Locale locale = Locale.getDefault(); String lang = locale.getLanguage(); xmlElement.setAttribute("lang", lang); //$NON-NLS-1$ URL url = new URL(PublishingPlugin.getDefault().getInstallURL(), xslPath); if (url == null) { PublishingPlugin.getDefault().getLogger().logError( "Unable to access XSL template " + xslPath); //$NON-NLS-1$ return null; } String xslURI = FileLocator.resolve(url).getPath(); StringBuffer xml = new StringBuffer(); xml.append(XmlHelper.XML_HEADER).append(xmlElement.toXml()); Properties xslParams = PublishingPlugin.getDefault().getProperties( "/xsl/resources.properties"); //$NON-NLS-1$ // generate the HTML StringWriter sw = new StringWriter(); XSLTProcessor.transform(xslURI, xml.toString(), xslParams, sw); sw.flush(); // urls are encoded in XSLT output, decode it return ResourceHelper .decodeUrlsInContent(sw.getBuffer().toString()); } catch (Exception e) { PublishingPlugin.getDefault().getLogger().logError( "Unable to generate HTML", e); //$NON-NLS-1$ } return null; } /** * Checks whether a configuration contains a view that references a process. * * @param config * a method configuration * @param process * a capability pattern or delivery process * @return <code>true</code> if the configuration contains a view that * references a process */ public static boolean hasValidProcessView(MethodConfiguration config, Process process) { for (Iterator<ContentCategory> views = config.getProcessViews() .iterator(); views.hasNext();) { ContentCategory view = views.next(); if (view instanceof CustomCategory) { CustomCategory cc = (CustomCategory) view; for (Iterator<DescribableElement> it = cc .getCategorizedElements().iterator(); it.hasNext();) { DescribableElement element = it.next(); if (element instanceof Process) { if (((Process) element).getGuid() == process.getGuid()) { return true; } } } } } return false; } public static void unloadResources(Collection<Resource> resources) { //Runtime.getRuntime().gc(); //long m1 = Runtime.getRuntime().freeMemory()/1000000; PersistenceUtil.unload(resources); //Runtime.getRuntime().gc(); //long m2 = Runtime.getRuntime().freeMemory()/1000000; //System.out.println("*** " + Long.toString(m2-m1) + " MB freed by unloading resources"); } public static void disposeDiagramManagers(Collection<DiagramManager> mgrs, Collection<DiagramManager> keeplist) { for ( Iterator<DiagramManager> it = mgrs.iterator(); it.hasNext(); ) { DiagramManager mgr = it.next(); if ( keeplist == null || !keeplist.contains(mgr) ) { mgr.dispose(); } } } }