/*******************************************************************************
* Copyright (c) 2000-present Liferay, Inc. All rights reserved.
*
* This library is free software; you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or (at your option)
* any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
* details.
*
*******************************************************************************/
package com.liferay.ide.project.ui.upgrade;
import com.liferay.ide.project.ui.ProjectUI;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.lang.reflect.InvocationTargetException;
import org.eclipse.compare.CompareConfiguration;
import org.eclipse.compare.CompareEditorInput;
import org.eclipse.compare.CompareUI;
import org.eclipse.compare.IEditableContent;
import org.eclipse.compare.IModificationDate;
import org.eclipse.compare.IStreamContentAccessor;
import org.eclipse.compare.ITypedElement;
import org.eclipse.compare.structuremergeviewer.DiffNode;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.swt.graphics.Image;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
/**
* @author Simon Jiang
*/
public class LiferayUpgradeCompre
{
private final IPath soruceFile;
private final IPath targetFile;
private IWorkbenchWindow window;
private String fileName;
public LiferayUpgradeCompre( final IPath soruceFile, final IPath targetFile, String fileName )
{
this.fileName = fileName;
this.window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
this.soruceFile = soruceFile;
this.targetFile = targetFile;
}
protected File getSourceFile()
{
return soruceFile.toFile();
}
protected File getTargetFile()
{
return targetFile.toFile();
}
public void openCompareEditor()
{
final IWorkbenchPage workBenchPage = window.getActivePage();
ITypedElement left = null;
ITypedElement right = null;
try
{
left = new CompareItem( getSourceFile(), this.fileName );
right = new CompareItem( getTargetFile(), this.fileName + "_preview" );
openInCompare( left, right, workBenchPage );
}
catch( Exception e )
{
ProjectUI.logError( e );
}
}
private void openInCompare( final ITypedElement left, final ITypedElement right, IWorkbenchPage workBenchPage )
{
final CompareConfiguration configuration = new CompareConfiguration();
configuration.setLeftLabel( "Source File" );
configuration.setRightLabel( "Upgrade File" );
CompareUI.openCompareEditor( new CompareEditorInput( configuration)
{
@Override
protected Object prepareInput( final IProgressMonitor monitor )
throws InvocationTargetException, InterruptedException
{
DiffNode diffNode = new DiffNode( left, right );
return diffNode;
}
});
}
private class CompareItem implements ITypedElement,IStreamContentAccessor,IModificationDate,IEditableContent//,IResourceProvider
{
private File file;
private String name;
public CompareItem( File file, String name )
{
this.file = file;
this.name = name;
}
@Override
public String getName()
{
return name;
}
@Override
public Image getImage()
{
return null;
}
@Override
public String getType()
{
return TEXT_TYPE;
}
@Override
public long getModificationDate()
{
return 0;
}
@Override
public InputStream getContents() throws CoreException
{
try
{
return new FileInputStream( file );
}
catch( Exception e )
{
}
return null;
}
@Override
public boolean isEditable()
{
return false;
}
@Override
public void setContent( byte[] newContent )
{
}
@Override
public ITypedElement replace( ITypedElement dest, ITypedElement src )
{
return null;
}
}
}