Package org.testng.eclipse.refactoring

Source Code of org.testng.eclipse.refactoring.ConvertToYamlAction

package org.testng.eclipse.refactoring;

import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.Path;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.handlers.HandlerUtil;
import org.testng.eclipse.util.Utils;
import org.testng.internal.Yaml;
import org.testng.xml.Parser;
import org.testng.xml.XmlSuite;
import org.xml.sax.SAXException;

import javax.xml.parsers.ParserConfigurationException;

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.util.Collection;
import java.util.Iterator;

/**
* Convert a TestNG XML file to YAML.
*
* @author Cedric Beust <cedric@beust.com>
*/
public class ConvertToYamlAction extends AbstractHandler {

  public Object execute(ExecutionEvent event) throws ExecutionException {
    IStructuredSelection selection =
        (IStructuredSelection) HandlerUtil.getActiveMenuSelection(event);
    Iterator it = selection.iterator();
    while (it.hasNext()) {
      Object o = it.next();
      if (o instanceof IAdaptable) {
        IFile file = (IFile) ((IAdaptable) o).getAdapter(IFile.class);
        if (file != null) {
          IPath location = file.getLocation();
          Parser p = new Parser(location.toOSString());
          p.setLoadClasses(false);

          try {
            Collection<XmlSuite> suites = p.parse();
            StringBuilder yamlSb = Yaml.toYaml(suites.iterator().next());

            IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
            IPath yamlPath =
                new Path(file.getProject().getName() + "/"
                    + file.getProjectRelativePath().toString().replace(".xml", ".yaml"));
            IFile yamlFile = root.getFile(yamlPath);
            ByteArrayInputStream is = new ByteArrayInputStream(yamlSb.toString().getBytes("UTF-8"));
            yamlFile.create(is, true /* force */, new NullProgressMonitor());
            Utils.openFile(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(),
                yamlFile, new NullProgressMonitor());
          } catch (ParserConfigurationException e1) {
            e1.printStackTrace();
          } catch (SAXException e1) {
            e1.printStackTrace();
          } catch (IOException e1) {
            e1.printStackTrace();
          } catch (CoreException e) {
            e.printStackTrace();
          }
        }
      }
    }

    return null;
  }

}
TOP

Related Classes of org.testng.eclipse.refactoring.ConvertToYamlAction

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.