/******************************************************************************* * Copyright (c) 2006-2007, Cloudsmith Inc. * The code, documentation and other materials contained herein have been * licensed under the Eclipse Public License - v 1.0 by the copyright holder * listed above, as the Initial Contributor under such license. The text of * such license is available at www.eclipse.org. ******************************************************************************/ package org.eclipse.buckminster.jnlp; import java.io.BufferedInputStream; import java.io.IOException; import java.io.InputStream; import java.lang.reflect.InvocationTargetException; import java.net.URL; import org.eclipse.buckminster.core.CorePlugin; import org.eclipse.buckminster.core.materializer.MaterializationContext; import org.eclipse.buckminster.core.metadata.model.BillOfMaterials; import org.eclipse.buckminster.core.mspec.model.MaterializationSpec; import org.eclipse.buckminster.core.parser.IParser; import org.eclipse.buckminster.runtime.IOUtils; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.OperationCanceledException; import org.eclipse.jface.operation.IRunnableWithProgress; import org.xml.sax.SAXException; public class MaterializerRunnable implements IRunnableWithProgress { private final MaterializationSpec m_mspec; private MaterializationContext m_context; public MaterializerRunnable(MaterializationSpec mspec) { m_mspec = mspec; } public MaterializationContext getContext() { return m_context; } public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { try { m_context = createContext(); JNLPMaterializationJob.runDelegated(m_context, monitor); IStatus status = m_context.getStatus(); if(status.getSeverity() == IStatus.ERROR) throw new CoreException(status); } catch(OperationCanceledException e) { throw new InterruptedException(); } catch(Throwable t) { throw new InvocationTargetException(t); } } private MaterializationContext createContext() throws CoreException, IOException, SAXException { URL url = m_mspec.getResolvedURL(); InputStream input = null; try { input = new BufferedInputStream(url.openStream()); IParser<BillOfMaterials> bomParser = CorePlugin.getDefault().getParserFactory().getBillOfMaterialsParser( true); BillOfMaterials bom = bomParser.parse(url.toString(), input); return new MaterializationContext(bom, m_mspec); } finally { IOUtils.close(input); } } }