// ============================================================================ // // Copyright (C) 2006-2016 Talend Inc. - www.talend.com // // This source code is available under agreement available at // %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt // // You should have received a copy of the agreement // along with this program; if not, write to Talend SA // 9 rue Pages 92150 Suresnes, France // // ============================================================================ package com.amalto.workbench.compare; import java.io.BufferedInputStream; import java.io.ByteArrayInputStream; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.eclipse.compare.CompareConfiguration; import org.eclipse.compare.CompareUI; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IProjectDescription; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IWorkspace; import org.eclipse.core.resources.IWorkspaceRoot; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.jface.viewers.StructuredSelection; import com.amalto.workbench.utils.XmlUtil; public class CompareManager { private static Log log = LogFactory.getLog(CompareManager.class); static CompareManager instance = new CompareManager(); public static CompareManager getInstance() { return instance; } public IProject createProject(String label) { IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); IProject prj = root.getProject(label); if (prj.exists()) return prj; final IWorkspace workspace = ResourcesPlugin.getWorkspace(); final IProjectDescription desc = workspace.newProjectDescription(label); desc.setNatureIds(new String[] { MdmNature.ID }); desc.setComment("");//$NON-NLS-1$ try { prj.create(desc, null); prj.open(IResource.BACKGROUND_REFRESH, null); } catch (CoreException e) { log.error(e.getMessage(), e); } return prj; } public void compareTwoStream(String left, String right, boolean format, CompareHeadInfo compareHeadInfo, String leftLabel, String rightLabel, boolean leftEditable, boolean rightEditable) throws Exception { if (left == null || right == null) return; if (format) { left = XmlUtil.formatCompletely(left, "UTF-8");//$NON-NLS-1$ right = XmlUtil.formatCompletely(right, "UTF-8");//$NON-NLS-1$ } // prepare the two resources IProject prj = createProject("comparewithsvn");//$NON-NLS-1$ IFile leftF = prj.getFile("left");//$NON-NLS-1$ IFile rightF = prj.getFile("right");//$NON-NLS-1$ if (!leftF.exists()) leftF.create(new ByteArrayInputStream(left.getBytes()), IFile.FORCE, null); if (!rightF.exists()) rightF.create(new ByteArrayInputStream(right.getBytes()), IFile.FORCE, null); leftF.setContents(new ByteArrayInputStream(left.getBytes()), IFile.FORCE, null); rightF.setContents(new ByteArrayInputStream(right.getBytes()), IFile.FORCE, null); CompareConfiguration cc = new CompareConfiguration(); cc.setLeftEditable(leftEditable); cc.setRightEditable(rightEditable); if (leftLabel == null) leftLabel = "";//$NON-NLS-1$ cc.setLeftLabel(leftLabel); if (rightLabel == null) rightLabel = "";//$NON-NLS-1$ cc.setRightLabel(rightLabel); ResourceCompareInput input = new ResourceCompareInput(cc); StructuredSelection sel = new StructuredSelection(new IFile[] { leftF, rightF }); input.setSelection(sel, null); input.setCompareHeadInfo(compareHeadInfo); CompareUI.openCompareEditor(input); } public String getLeftContent() throws Exception { IProject prj = createProject("comparewithsvn");//$NON-NLS-1$ IFile leftF = prj.getFile("left");//$NON-NLS-1$ if (!leftF.exists()) return null; byte[] buf = new byte[1024]; StringBuffer sb = new StringBuffer(); BufferedInputStream in = new BufferedInputStream(leftF.getContents()); while (in.read(buf) > 0) { sb.append(new String(buf)); in.read(buf); } return sb.toString().trim(); } }