/*******************************************************************************
* 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.animated;
import com.liferay.ide.core.util.CoreUtil;
import com.liferay.ide.project.core.util.LiferayWorkspaceUtil;
import com.liferay.ide.project.ui.ProjectUI;
import com.liferay.ide.project.ui.dialog.CustomProjectSelectionDialog;
import com.liferay.ide.project.ui.upgrade.CustomJspConverter;
import com.liferay.ide.server.util.ServerUtil;
import com.liferay.ide.ui.util.SWTUtil;
import com.liferay.ide.ui.util.UIUtil;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FilenameFilter;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.InvocationTargetException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.compare.BufferedContent;
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.ITypedElement;
import org.eclipse.compare.structuremergeviewer.DiffNode;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.ITreeSelection;
import org.eclipse.jface.viewers.StyledCellLabelProvider;
import org.eclipse.jface.viewers.StyledString;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerCell;
import org.eclipse.jface.viewers.ViewerSorter;
import org.eclipse.jface.window.Window;
import org.eclipse.sapphire.Event;
import org.eclipse.sapphire.Listener;
import org.eclipse.sapphire.Property;
import org.eclipse.sapphire.ValuePropertyContentEvent;
import org.eclipse.sapphire.modeling.Status;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.SashForm;
import org.eclipse.swt.custom.ScrolledComposite;
import org.eclipse.swt.events.FocusEvent;
import org.eclipse.swt.events.FocusListener;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.DirectoryDialog;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Link;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.ISharedImages;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.ide.IDE.SharedImages;
import org.eclipse.wst.server.core.IRuntime;
import org.eclipse.wst.server.core.IServer;
/**
* @author Andy Wu
* @author Simon Jiang
*/
public class CustomJspPage extends Page
{
private class CompareItem extends BufferedContent implements ITypedElement, IModificationDate, IEditableContent
{
private String fileName;
private long time;
public CompareItem( String fileName )
{
this.fileName = fileName;
this.time = System.currentTimeMillis();
}
protected InputStream createStream() throws CoreException
{
try
{
return new FileInputStream( new File( fileName ) );
}
catch( FileNotFoundException e )
{
e.printStackTrace();
}
return new ByteArrayInputStream( new byte[0] );
}
public Image getImage()
{
return CompareUI.DESC_CTOOL_NEXT.createImage();
}
public long getModificationDate()
{
return time;
}
public String getName()
{
return fileName;
}
public String getType()
{
return ITypedElement.TEXT_TYPE;
}
public boolean isEditable()
{
return true;
}
public ITypedElement replace( ITypedElement dest, ITypedElement src )
{
return null;
}
public void writeFile()
{
this.writeFile( this.fileName, this.getContent() );
}
private void writeFile( String fileName, byte[] newContent )
{
FileOutputStream fos = null;
try
{
File file = new File( fileName );
if( file.exists() )
{
file.delete();
}
file.createNewFile();
fos = new FileOutputStream( file );
fos.write( newContent );
fos.flush();
}
catch( IOException e )
{
e.printStackTrace();
}
finally
{
try
{
fos.close();
}
catch( IOException e )
{
e.printStackTrace();
}
fos = null;
}
}
}
class LeftViewLabelProvider extends StyledCellLabelProvider
{
private String getFileName( File file )
{
String name = file.getName();
File html = new File( file, "html" );
if( html.exists() && html.isDirectory() )
{
return getProject( html ).getName();
}
else
{
return name.isEmpty() ? file.getPath() : name;
}
}
@Override
public void update( ViewerCell cell )
{
Object element = cell.getElement();
StyledString text = new StyledString();
File file = (File) element;
if( file.isDirectory() )
{
text.append( getFileName( file ) );
File html = new File( file, "html" );
if( html.exists() && html.isDirectory() )
{
cell.setImage( imageProject );
}
else
{
cell.setImage( imageFolder );
}
String[] files = file.list( new FilenameFilter()
{
@Override
public boolean accept( File dir, String name )
{
if( !name.startsWith( "." ) )
{
return true;
}
else
{
return false;
}
}
} );
if( files != null )
{
text.append( " (" + files.length + ") ", StyledString.COUNTER_STYLER );
}
}
else
{
cell.setImage( imageFile );
text.append( getFileName( file ) );
if( is62FileFound( file ) )
{
text.append( "(found)", StyledString.COUNTER_STYLER );
}
else
{
text.append( "(unfound)", StyledString.DECORATIONS_STYLER );
}
}
cell.setText( text.toString() );
cell.setStyleRanges( text.getStyleRanges() );
super.update( cell );
}
}
class RightViewLabelProvider extends StyledCellLabelProvider
{
private String getFileName( File file )
{
String name = file.getName();
if( name.equals( "resources" ) )
{
return file.getParentFile().getParentFile().getParentFile().getParentFile().getParentFile().getName();
}
else
{
return name.isEmpty() ? file.getPath() : name;
}
}
@Override
public void update( ViewerCell cell )
{
Object element = cell.getElement();
StyledString text = new StyledString();
File file = (File) element;
if( file.isDirectory() )
{
text.append( getFileName( file ) );
if( file.getName().endsWith( "resources" ) )
{
cell.setImage( imageProject );
}
else
{
cell.setImage( imageFolder );
}
String[] files = file.list( new FilenameFilter()
{
@Override
public boolean accept( File dir, String name )
{
if( !name.startsWith( "." ) )
{
return true;
}
else
{
return false;
}
}
} );
if( files != null )
{
text.append( " (" + files.length + ") ", StyledString.COUNTER_STYLER );
}
}
else
{
cell.setImage( imageFile );
text.append( getFileName( file ) );
if( is70FileFound( file ) )
{
text.append( "(found)", StyledString.COUNTER_STYLER );
}
else
{
text.append( "(unfound)", StyledString.DECORATIONS_STYLER );
}
}
cell.setText( text.toString() );
cell.setStyleRanges( text.getStyleRanges() );
super.update( cell );
}
}
class ViewContentProvider implements ITreeContentProvider
{
@Override
public void dispose()
{
}
@Override
public Object[] getChildren( Object parentElement )
{
File file = (File) parentElement;
File[] files = file.listFiles( new FilenameFilter()
{
@Override
public boolean accept( File dir, String name )
{
if( name.startsWith( "." ) )
{
return false;
}
return true;
}
} );
return files;
}
@Override
public Object[] getElements( Object inputElement )
{
return (File[]) inputElement;
}
@Override
public Object getParent( Object element )
{
File file = (File) element;
return file.getParentFile();
}
@Override
public boolean hasChildren( Object element )
{
File file = (File) element;
if( file.isDirectory() )
{
return true;
}
return false;
}
public void inputChanged( Viewer v, Object oldInput, Object newInput )
{
}
}
private static String defaultLocation;
private Image imageFile;
private Image imageFolder;
private Image imageProject;
private TreeViewer leftTreeViewer;
private TreeViewer rightTreeViewer;
private String staticPath = "/src/main/resources/META-INF/resources/";
private boolean hasLiferayWorkspace = false;
private Text projectLocation = null;
private ConvertedProjectLocationValidationService convertedProjectLocationValidation =
dataModel.getConvertedProjectLocation().service( ConvertedProjectLocationValidationService.class );
private class CustomJspFieldListener extends Listener
{
@Override
public void handle( Event event )
{
if( event instanceof ValuePropertyContentEvent )
{
ValuePropertyContentEvent propertyEvetn = (ValuePropertyContentEvent) event;
Property property = propertyEvetn.property();
Status validationStatus = Status.createOkStatus();
if( property.name().equals( "ConvertedProjectLocation" ) )
{
validationStatus = convertedProjectLocationValidation.compute();
String message = "ok";
if( !validationStatus.ok() )
{
message = validationStatus.message();
}
PageValidateEvent pe = new PageValidateEvent();
pe.setMessage( message );
pe.setType( PageValidateEvent.ERROR );
triggerValidationEvent( pe );
}
else if( property.name().equals( "ConvertLiferayWorkspace" ) )
{
if( dataModel.getConvertLiferayWorkspace().content( true ) )
{
updateDefaultLocation();
}
}
}
}
}
public CustomJspPage( Composite parent, int style, LiferayUpgradeDataModel dataModel )
{
super( parent, style, dataModel, CUSTOMJSP_PAGE_ID, true );
Composite container = new Composite( this, SWT.NONE );
container.setLayout( new GridLayout( 3, false ) );
container.setLayoutData( new GridData( GridData.FILL_HORIZONTAL ) );
Label label = new Label( container, SWT.NONE );
label.setText( "Converted Project Location:" );
projectLocation = new Text( container, SWT.BORDER );
projectLocation.setLayoutData( new GridData( GridData.FILL_HORIZONTAL ) );
projectLocation.setForeground( getDisplay().getSystemColor( SWT.COLOR_DARK_GRAY ) );
updateDefaultLocation();
projectLocation.addFocusListener( new FocusListener()
{
@Override
public void focusGained( FocusEvent e )
{
String input = ( (Text) e.getSource() ).getText();
if( input.equals( defaultLocation ) )
{
projectLocation.setText( "" );
}
projectLocation.setForeground( getDisplay().getSystemColor( SWT.COLOR_BLACK ) );
}
@Override
public void focusLost( FocusEvent e )
{
String input = ( (Text) e.getSource() ).getText();
if( CoreUtil.isNullOrEmpty( input ) )
{
projectLocation.setForeground( getDisplay().getSystemColor( SWT.COLOR_DARK_GRAY ) );
projectLocation.setText( defaultLocation );
}
}
} );
projectLocation.addModifyListener( new ModifyListener()
{
public void modifyText( ModifyEvent e )
{
dataModel.setConvertedProjectLocation( projectLocation.getText() );
}
} );
dataModel.setConvertedProjectLocation( projectLocation.getText() );
Button browseButton = new Button( container, SWT.PUSH );
browseButton.setText( "Browse..." );
browseButton.addSelectionListener( new SelectionAdapter()
{
@Override
public void widgetSelected( SelectionEvent e )
{
final DirectoryDialog dd = new DirectoryDialog( getShell() );
dd.setMessage( "Select Converted Project Location" );
final String selectedDir = dd.open();
if( selectedDir != null )
{
projectLocation.setText( selectedDir );
}
}
} );
Composite buttonContainer = new Composite( this, SWT.NONE );
buttonContainer.setLayout( new GridLayout( 3, false ) );
GridData buttonGridData = new GridData( SWT.CENTER, SWT.CENTER, true, true );
buttonGridData.widthHint = 130;
buttonGridData.heightHint = 35;
dataModel.getConvertedProjectLocation().attach( new CustomJspFieldListener() );
dataModel.getConvertLiferayWorkspace().attach( new CustomJspFieldListener() );
Button selectButton = new Button( buttonContainer, SWT.PUSH );
selectButton.setText( "Select Projects" );
selectButton.addSelectionListener( new SelectionAdapter()
{
@Override
public void widgetSelected( SelectionEvent e )
{
runConvertAction();
}
} );
Button refreshButton = new Button( buttonContainer, SWT.PUSH );
refreshButton.setText( "Refresh Results" );
refreshButton.addSelectionListener( new SelectionAdapter()
{
@Override
public void widgetSelected( SelectionEvent e )
{
refreshTreeViews();
}
} );
Button clearButton = new Button( buttonContainer, SWT.PUSH );
clearButton.setText( "Clear Results" );
clearButton.addSelectionListener( new SelectionAdapter()
{
@Override
public void widgetSelected( SelectionEvent e )
{
CustomJspConverter.clearConvertResults();
refreshTreeViews();
}
} );
SashForm sashForm = new SashForm( this, SWT.HORIZONTAL | SWT.H_SCROLL );
GridLayout sashLayout = new GridLayout( 1, false );
sashLayout.marginHeight = 0;
sashLayout.marginWidth = 0;
sashForm.setLayout( sashLayout );
GridData sashFormLayoutData = new GridData( GridData.FILL_BOTH );
sashForm.setLayoutData( sashFormLayoutData );
createChildren( sashForm );
sashForm.setWeights( new int[] { 1, 1 } );
refreshTreeViews();
}
public void compare(
final String originalFile, final String changedFile, final String leftLabel, final String rightLabel )
{
CompareConfiguration config = new CompareConfiguration();
config.setLeftEditable( false );
config.setLeftLabel( leftLabel );
config.setRightEditable( false );
config.setRightLabel( rightLabel );
CompareEditorInput editorInput = new CompareEditorInput( config )
{
CompareItem originalItem = new CompareItem( originalFile );
CompareItem changedItem = new CompareItem( changedFile );
@Override
protected Object prepareInput( IProgressMonitor monitor )
throws InvocationTargetException, InterruptedException
{
return new DiffNode( originalItem, changedItem );
}
@Override
public void saveChanges( IProgressMonitor pm ) throws CoreException
{
super.saveChanges( pm );
changedItem.writeFile();
}
};
editorInput.setTitle( "Jsp File Compare" );
CompareUI.openCompareEditor( editorInput );
}
private void createChildren( Composite container )
{
createImages();
createLeftPart( container );
createRightPart( container );
}
private Image createImage( String symbolicName )
{
Image image = PlatformUI.getWorkbench().getSharedImages().getImage( symbolicName );
if( image.isDisposed() )
{
image = PlatformUI.getWorkbench().getSharedImages().getImageDescriptor( symbolicName ).createImage();
}
return image;
}
private void createImages()
{
this.imageProject = createImage( SharedImages.IMG_OBJ_PROJECT );
this.imageFolder = createImage( ISharedImages.IMG_OBJ_FOLDER );
this.imageFile = createImage( ISharedImages.IMG_OBJ_FILE );
}
private void createLeftPart( Composite parent )
{
ScrolledComposite leftContainer = new ScrolledComposite( parent, SWT.H_SCROLL | SWT.V_SCROLL );
Composite leftPart = SWTUtil.createComposite( leftContainer, 1, 1, GridData.FILL_BOTH, 0, 0 );
FillLayout layout = new FillLayout();
layout.marginHeight = 0;
layout.marginWidth = 0;
leftContainer.setLayout( layout );
leftContainer.setMinSize( 410, 200 );
leftContainer.setExpandHorizontal( true );
leftContainer.setExpandVertical( true );
leftContainer.setContent( leftPart );
Label leftLabel = new Label( leftPart, SWT.NONE );
leftLabel.setText( "6.2 Custom JSPs (double-click to compare with 6.2)" );
leftTreeViewer = new TreeViewer( leftPart, SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER );
GridData gd = new GridData( SWT.FILL, SWT.FILL, true, true );
leftTreeViewer.getTree().setLayoutData( gd );
leftTreeViewer.setContentProvider( new ViewContentProvider() );
leftTreeViewer.setLabelProvider( new LeftViewLabelProvider() );
leftTreeViewer.addDoubleClickListener( new IDoubleClickListener()
{
@Override
public void doubleClick( DoubleClickEvent event )
{
ISelection selection = event.getSelection();
File file = (File) ( (ITreeSelection) selection ).getFirstElement();
if( file.isDirectory() )
{
return;
}
if( is62FileFound( file ) )
{
String[] paths = get62FilePaths( file );
compare( paths[0], paths[1], "6.2 original JSP", "custom JSP" );
}
else
{
MessageDialog.openInformation(
Display.getDefault().getActiveShell(), "file not found",
"there is no such file in liferay 62" );
}
}
} );
leftTreeViewer.setSorter( new ViewerSorter()
{
@Override
public int category( Object element )
{
File file = (File) element;
if( file.isDirectory() )
{
return -1;
}
else
{
return super.category( element );
}
}
} );
}
private void createRightPart( Composite parent )
{
ScrolledComposite rightContainer = new ScrolledComposite( parent, SWT.H_SCROLL | SWT.V_SCROLL );
Composite rightPart = SWTUtil.createComposite( rightContainer, 1, 1, GridData.FILL_BOTH, 0, 0 );
FillLayout layout = new FillLayout();
layout.marginHeight = 0;
layout.marginWidth = 0;
rightContainer.setLayout( layout );
rightContainer.setMinSize( 410, 200 );
rightContainer.setExpandHorizontal( true );
rightContainer.setExpandVertical( true );
rightContainer.setContent( rightPart );
Label rightLabel = new Label( rightPart, SWT.NONE );
rightLabel.setText( "New JSP (double-click to compare 6.2 with 7.x)" );
rightTreeViewer = new TreeViewer( rightPart, SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER );
GridData gd = new GridData( SWT.FILL, SWT.FILL, true, true );
rightTreeViewer.getTree().setLayoutData( gd );
rightTreeViewer.setContentProvider( new ViewContentProvider() );
rightTreeViewer.setLabelProvider( new RightViewLabelProvider() );
rightTreeViewer.addDoubleClickListener( new IDoubleClickListener()
{
@Override
public void doubleClick( DoubleClickEvent event )
{
ISelection selection = event.getSelection();
File file = (File) ( (ITreeSelection) selection ).getFirstElement();
if( file.isDirectory() )
{
return;
}
if( is70FileFound( file ) )
{
String[] paths = get70FilePaths( file );
compare( paths[0], paths[1], "6.2 original JSP", "New 7.x JSP in " + getProject( file ).getName() );
}
else
{
MessageDialog.openInformation(
Display.getDefault().getActiveShell(), "file not found", "there is no such file in liferay 7" );
}
}
} );
rightTreeViewer.setSorter( new ViewerSorter()
{
@Override
public int category( Object element )
{
File file = (File) element;
if( file.isDirectory() )
{
return -1;
}
else
{
return super.category( element );
}
}
} );
}
private String[] get62FilePaths( File file )
{
String filePath = file.getAbsolutePath();
IProject project = getProject( file );
String projectPath = project.getLocation().toOSString();
String customJsp = CustomJspConverter.getCustomJspPath( projectPath );
IFolder folder = project.getFolder( "docroot/" + customJsp );
if( !folder.exists() )
{
folder = project.getFolder( "src/main/webapp/" + customJsp );
}
java.nio.file.Path customJspPath = folder.getLocation().toFile().toPath();
java.nio.file.Path relativePath = customJspPath.relativize( file.toPath() );
String[] paths = new String[2];
paths[0] = null;
paths[1] = filePath;
File original62JspFile =
new File( getLiferay62ServerRootDirPath( getLiferay62ServerLocation() ) + relativePath.toString() );
if( original62JspFile.exists() )
{
paths[0] = original62JspFile.getAbsolutePath();
}
return paths;
}
private String[] get70FilePaths( File file )
{
IFolder resourceFolder = getProject(file).getFolder( staticPath );
java.nio.file.Path resourcePath = resourceFolder.getLocation().toFile().toPath();
java.nio.file.Path relativePath = resourcePath.relativize( file.toPath() );
String[] paths = new String[2];
IFile original62File = resourceFolder.getFile( "/.ignore/" + relativePath.toString() + ".62" );
IFile original70File = resourceFolder.getFile( relativePath.toString() );
if( original62File.exists() && original70File.exists() )
{
paths[0] = original62File.getLocation().toPortableString();
paths[1] = original70File.getLocation().toPortableString();
}
return paths;
}
private List<IProject> getHookProjects()
{
List<IProject> results = new ArrayList<IProject>();
IProject[] projects = CoreUtil.getAllProjects();
for( IProject project : projects )
{
String projectLocation = project.getLocation().toPortableString();
String customJsp = CustomJspConverter.getCustomJspPath( projectLocation );
if( !CoreUtil.empty( customJsp ) )
{
results.add( project );
}
}
return results;
}
private File[] getLeftTreeInputs()
{
String[] results = CustomJspConverter.getConvertResult( CustomJspConverter.sourcePrefix );
if( results == null )
{
return null;
}
int size = results.length;
List<File> list = new ArrayList<File>();
for( int i = 0; i < size; i++ )
{
String[] contents = results[i].split( ":" );
IProject project = CoreUtil.getProject( contents[0] );
String customJspPath = contents[1];
IFolder folder = project.getFolder( "docroot/" + customJspPath );
if( !folder.exists() )
{
folder = project.getFolder( "src/main/webapp/" + customJspPath );
}
IPath location = folder.getLocation();
if( location != null )
{
list.add( location.toFile() );
}
}
if( !list.isEmpty() )
{
return list.toArray( new File[0] );
}
else
{
return null;
}
}
private String getLiferay62ServerLocation()
{
return dataModel.getLiferay62ServerLocation().content( true );
}
private String getLiferay62ServerRootDirPath( String serverLocation )
{
if( CoreUtil.empty( serverLocation ) )
{
return null;
}
File bundleDir = new File( serverLocation );
String[] names = bundleDir.list( new FilenameFilter()
{
@Override
public boolean accept( File dir, String name )
{
if( name.startsWith( "tomcat-" ) )
{
return true;
}
return false;
}
} );
if( names != null && names.length == 1 )
{
return serverLocation + "/" + names[0] + "/webapps/ROOT/";
}
else
{
return null;
}
}
private IRuntime getLiferay70Runtime()
{
String serverName = dataModel.getLiferay70ServerName().content();
IServer server = ServerUtil.getServer( serverName );
if( server != null )
{
return server.getRuntime();
}
else
{
return null;
}
}
private File[] getRightTreeInputs()
{
String[] results = CustomJspConverter.getConvertResult( CustomJspConverter.resultPrefix );
if( results == null )
{
return null;
}
int size = results.length;
List<File> list = new ArrayList<File>();
for( int i = 0; i < size; i++ )
{
File file = new File( results[i], staticPath );
if( file.exists() )
{
list.add( file );
}
}
if( !list.isEmpty() )
{
return list.toArray( new File[0] );
}
else
{
return null;
}
}
private boolean is62FileFound( File file )
{
String[] paths = get62FilePaths( file );
if( paths[0] != null )
{
return true;
}
else
{
return false;
}
}
private boolean is70FileFound( File file )
{
String[] paths = get70FilePaths( file );
if( paths[0] != null )
{
return true;
}
else
{
return false;
}
}
private void updateDefaultLocation()
{
defaultLocation = CoreUtil.getWorkspaceRoot().getLocation().toPortableString();
try
{
hasLiferayWorkspace = LiferayWorkspaceUtil.hasLiferayWorkspace();
if( hasLiferayWorkspace )
{
IProject ws = LiferayWorkspaceUtil.getLiferayWorkspaceProject();
String modulesDir = LiferayWorkspaceUtil.getLiferayWorkspaceProjectModulesDir( ws );
defaultLocation = ws.getLocation().append( modulesDir ).toPortableString();
}
}
catch( CoreException e )
{
}
UIUtil.async( new Runnable()
{
@Override
public void run()
{
projectLocation.setText( defaultLocation );
}
} );
}
public void refreshTreeViews()
{
File[] leftInputs = getLeftTreeInputs();
leftTreeViewer.setInput( leftInputs );
File[] rightInputs = getRightTreeInputs();
rightTreeViewer.setInput( rightInputs );
}
private void runConvertAction()
{
CustomProjectSelectionDialog dialog = new CustomProjectSelectionDialog( UIUtil.getActiveShell() );
dialog.setProjects( getHookProjects() );
URL imageUrl = ProjectUI.getDefault().getBundle().getEntry( "/icons/e16/hook.png");
Image hookImage = ImageDescriptor.createFromURL( imageUrl ).createImage();
dialog.setImage( hookImage );
dialog.setTitle( "Custom JSP Hook Project" );
dialog.setMessage( "Select Custom JSP Hook Project" );
List<IProject> hookProjects = new ArrayList<>();
if( dialog.open() == Window.OK )
{
final Object[] selectedProjects = dialog.getResult();
if( selectedProjects != null )
{
for( Object project : selectedProjects )
{
if( project instanceof IJavaProject )
{
IJavaProject p = (IJavaProject) project;
hookProjects.add( p.getProject() );
}
}
}
}
int size = hookProjects.size();
if( size < 1 )
{
return;
}
String[] sourcePaths = new String[size];
for( int i = 0; i < size; i++ )
{
sourcePaths[i] = hookProjects.get( i ).getLocation().toOSString();
}
CustomJspConverter converter = new CustomJspConverter();
IRuntime liferay70Runtime = getLiferay70Runtime();
String liferay62ServerLocation = getLiferay62ServerLocation();
if( liferay70Runtime == null )
{
MessageDialog.openError(
Display.getDefault().getActiveShell(), "could not convert", "countn't find liferay 7.x server" );
return;
}
converter.setLiferay70Runtime( liferay70Runtime );
converter.setLiferay62ServerLocation( liferay62ServerLocation );
converter.setUi( this );
String targetPath = dataModel.getConvertedProjectLocation().content().toPortableString();
boolean isLiferayWorkapce = false;
if( targetPath.equals( defaultLocation ) && hasLiferayWorkspace )
{
isLiferayWorkapce = true;
}
converter.doExecute( sourcePaths, targetPath, isLiferayWorkapce );
}
public void createSpecialDescriptor( Composite parent, int style )
{
final String descriptor =
"This step will help you to convert projects with custom jsp hooks to modules or fragments.";
String url = "";
Link link = SWTUtil.createHyperLink( this, style, descriptor, 1, url );
link.setLayoutData( new GridData( SWT.FILL, SWT.BEGINNING, true, false, 2, 1 ) );
}
@Override
public String getPageTitle()
{
return "Convert Custom JSP Hooks";
}
private IProject getProject( File file )
{
IWorkspaceRoot ws = CoreUtil.getWorkspaceRoot();
final IResource[] containers = ws.findContainersForLocationURI( file.toURI() );
IResource resource = null;
for( IResource container : containers )
{
if( resource == null )
{
resource = container;
}
else
{
if( container.getProjectRelativePath().segmentCount() < resource.getProjectRelativePath().segmentCount() )
{
resource = container;
}
}
}
return resource.getProject();
}
}