package org.org.eclipse.cheatsheet.commands.internal.jobs; import java.io.ByteArrayInputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactoryConfigurationError; import javax.xml.xpath.XPathExpressionException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.jobs.Job; import org.org.eclipse.core.utils.platform.jobs.BatchSimilarRule; import org.org.eclipse.core.utils.platform.tools.XmlToolBox; import org.org.eclipse.core.utils.platform.wizards.StatusInfo; public class RemoveNodeFromXmlFileFromFileSystemJob extends Job { private static String JOB_ID = "CheatSheet helper: remove node from xml file in filesystem"; private final String targetXPath; private final String targetFile; public RemoveNodeFromXmlFileFromFileSystemJob(String targetXPath, String targetFile) { super(JOB_ID); this.targetXPath = targetXPath; this.targetFile = targetFile; this.setPriority(Job.SHORT); this.setUser(true); this.setRule(new BatchSimilarRule(CheatSheetJobs.JOB_FAMILY)); } @Override protected IStatus run(IProgressMonitor monitor) { IStatus result = new StatusInfo(IStatus.OK, "XML File updated successfully."); try { generateFile(monitor); } catch (Throwable e) { monitor.setCanceled(true); result = new StatusInfo(IStatus.ERROR, "A problem occured while updating xml file:\n" + e.getMessage()); } monitor.done(); return result; } private void generateFile(IProgressMonitor monitor) throws IOException, XPathExpressionException, TransformerFactoryConfigurationError, TransformerException { StringBuilder originalFile = readOriginalFile(); InputStream inputStream = new ByteArrayInputStream(originalFile.toString().getBytes()); OutputStream outputStream = new FileOutputStream(targetFile); XmlToolBox.xPathRemoveNode(targetXPath, inputStream, outputStream); } private StringBuilder readOriginalFile() throws IOException { StringBuilder nodeDefinition = new StringBuilder(); InputStream nodeDefinitionInputStream = null; try { nodeDefinitionInputStream = new FileInputStream(targetFile); InputStreamReader reader = new InputStreamReader(nodeDefinitionInputStream, "UTF-8"); char[] buff = new char[256]; int numberRead = 0; while ((numberRead = reader.read(buff)) != -1) { for (int i = 0; i < numberRead; i++) { nodeDefinition.append(buff[i]); } } } finally { try { nodeDefinitionInputStream.close(); } catch (Throwable e) { } } return nodeDefinition; } }