blob: cf9d36f50754a6a7688376a0792b1ceab652140e [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2007,2008 Chase Technology Ltd - http://www.chasetechnology.co.uk 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:
* Doug Satchwell (Chase Technology Ltd) - initial API and implementation
* David Carver - STAR - bug 223557 - Added Images contributed by Holger Voorman
*******************************************************************************/
package org.eclipse.wst.xsl.internal.debug.ui.tabs.main;
import java.io.ByteArrayInputStream;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
import org.eclipse.debug.ui.ILaunchConfigurationTab;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.wst.xsl.debug.internal.util.XSLDebugPluginImages;
import org.eclipse.wst.xsl.debug.internal.util.XSLPluginImageHelper;
import org.eclipse.wst.xsl.internal.debug.ui.XSLDebugUIPlugin;
import org.eclipse.wst.xsl.internal.debug.ui.XSLLaunchConfigurationTab;
import org.eclipse.wst.xsl.launching.XSLLaunchConfigurationConstants;
import org.eclipse.wst.xsl.launching.config.LaunchPipeline;
import org.eclipse.wst.xsl.launching.config.LaunchTransform;
public class XSLMainTab extends XSLLaunchConfigurationTab
{
private final InputFileBlock inputFileBlock;
private final TransformsBlock transformsBlock;
private final ParametersBlock parametersBlock;
public LaunchPipeline pipeline;
// private RenderBlock renderBlock;
// private OutputBlock outputBlock;
public XSLMainTab()
{
IResource[] resourceContext = getContext();
IFile inputFile = getXMLInput(resourceContext);
inputFileBlock = new InputFileBlock(inputFile);
transformsBlock = new TransformsBlock();
parametersBlock = new ParametersBlock(transformsBlock);
// renderBlock = new RenderBlock();
// outputBlock = new OutputBlock();
setBlocks(new ILaunchConfigurationTab[]
{ inputFileBlock, transformsBlock, parametersBlock }); // ,renderBlock,outputBlock});
}
@Override
public void createControl(Composite parent)
{
super.createControl(parent);
Composite comp = (Composite) getControl();
GridLayout layout = new GridLayout(1, false);
comp.setLayout(layout);
inputFileBlock.createControl(comp);
transformsBlock.createControl(comp);
parametersBlock.createControl(comp);
// renderBlock.createControl(comp);
// outputBlock.createControl(comp);
}
@Override
public void setDefaults(ILaunchConfigurationWorkingCopy configuration)
{
LaunchPipeline lp = new LaunchPipeline();
IResource[] resourceContext = getContext();
IFile[] stylesheets = getXSLStylesheets(resourceContext);
for (IFile file : stylesheets)
{
LaunchTransform lt = new LaunchTransform(file.getFullPath().toPortableString(), LaunchTransform.RESOURCE_TYPE);
lp.addTransformDef(lt);
}
savePipeline(configuration, lp);
super.setDefaults(configuration);
}
@Override
public void initializeFrom(ILaunchConfiguration configuration)
{
pipeline = null;
try
{
String s = configuration.getAttribute(XSLLaunchConfigurationConstants.ATTR_PIPELINE, (String) null);
if (s != null && s.length() > 0)
{
ByteArrayInputStream inputStream = new ByteArrayInputStream(s.getBytes());
pipeline = LaunchPipeline.fromXML(inputStream);
}
else
{
pipeline = new LaunchPipeline();
}
}
catch (CoreException e)
{
XSLDebugUIPlugin.log(e);
}
transformsBlock.setPipeline(pipeline);
super.initializeFrom(configuration);
}
@Override
public void performApply(ILaunchConfigurationWorkingCopy configuration)
{
super.performApply(configuration);
savePipeline(configuration, pipeline);
}
private void savePipeline(ILaunchConfigurationWorkingCopy configuration, LaunchPipeline pipeline)
{
try
{
configuration.setAttribute(XSLLaunchConfigurationConstants.ATTR_PIPELINE, pipeline.toXML());
}
catch (CoreException e)
{
XSLDebugUIPlugin.log(e);
}
}
public String getName()
{
return MainTabMessages.XSLMainTab_TabName;
}
private static IResource[] getContext()
{
// IProject[] projects =
// ResourcesPlugin.getWorkspace().getRoot().getProjects();
// project.setInput( projects);
// String s = configuration.getAttribute(
// IXSLTLaunchConfiguration.PROJECT, "");
// IProject project = null;
// if( s.equals(""))
// {
// if( projects.length>0)
// {
// project = projects[ 0];
// }
// }
// else
// project = ResourcesPlugin.getWorkspace().getRoot().getProject( s);
IWorkbenchPage page = XSLDebugUIPlugin.getActivePage();
List<Object> resources = new ArrayList<Object>();
if (page != null)
{
// use selections to find the project
ISelection selection = page.getSelection();
if (selection != null && !selection.isEmpty() && selection instanceof IStructuredSelection)
{
IStructuredSelection ss = (IStructuredSelection) selection;
for (Iterator<?> iter = ss.iterator(); iter.hasNext();)
{
Object element = iter.next();
if (element instanceof IResource)
resources.add(element);
}
return (IResource[]) resources.toArray(new IResource[0]);
}
// use current editor to find the project
IEditorPart part = page.getActiveEditor();
if (part != null)
{
IEditorInput input = part.getEditorInput();
IFile file = (IFile) input.getAdapter(IFile.class);
if (file != null)
return new IResource[]
{ file };
}
}
return new IResource[0];
}
private IFile getXMLInput(IResource[] context)
{
for (IResource resource : context)
{
if (resource instanceof IFile && ("xml".equalsIgnoreCase(resource.getFileExtension()) || "xhtml".equalsIgnoreCase(resource.getFileExtension()))) //$NON-NLS-1$ //$NON-NLS-2$
return (IFile) resource;
}
return null;
}
private IFile[] getXSLStylesheets(IResource[] context)
{
List<IResource> stylesheets = new ArrayList<IResource>();
for (IResource resource : context)
{
if (resource instanceof IFile && "xsl".equalsIgnoreCase(resource.getFileExtension())) //$NON-NLS-1$
stylesheets.add(resource);
}
return (IFile[]) stylesheets.toArray(new IFile[0]);
}
@Override
public Image getImage() {
return XSLPluginImageHelper.getInstance().getImage(XSLDebugPluginImages.IMG_MAIN_TAB);
}
}