/*******************************************************************************
* 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 java.util.ArrayList;
import java.util.List;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Link;
import org.eclipse.swt.widgets.Table;
import com.liferay.ide.project.ui.ProjectUI;
import com.liferay.ide.project.ui.upgrade.animated.UpgradeView.PageNavigatorListener;
import com.liferay.ide.ui.util.SWTUtil;
/**
* @author Joye Luo
*/
public class SummaryPage extends Page implements SelectionChangedListener
{
public SummaryPage( Composite parent, int style, LiferayUpgradeDataModel dataModel )
{
super( parent, style, dataModel, SUMMARY_PAGE_ID, false );
Composite container = new Composite( this, SWT.NONE );
container.setLayout( new GridLayout( 2, false ) );
container.setLayoutData( new GridData( SWT.FILL, SWT.FILL, true, true ) );
tableViewer = new TableViewer( container );
tableViewer.setContentProvider( new TableViewContentProvider() );
tableViewer.setLabelProvider( new TableViewLabelProvider() );
tableViewer.getControl().setBackground( this.getDisplay().getSystemColor( SWT.COLOR_WIDGET_BACKGROUND ) );
tableViewer.addSelectionChangedListener( new ISelectionChangedListener()
{
@Override
public void selectionChanged( SelectionChangedEvent event )
{
final IStructuredSelection selection = (IStructuredSelection) event.getSelection();
if( !selection.isEmpty() )
{
if( selection.getFirstElement() instanceof TableViewElement )
{
final TableViewElement tableViewElement = (TableViewElement) selection.getFirstElement();
final int pageIndex = tableViewElement.pageIndex;
PageNavigateEvent navEvent = new PageNavigateEvent();
navEvent.setTargetPage( pageIndex );
for( PageNavigatorListener listener : naviListeners )
{
listener.onPageNavigate( navEvent );
}
}
}
}
} );
final Table table = tableViewer.getTable();
final GridData tableData = new GridData( SWT.FILL, SWT.FILL, true, false, 1, 1 );
tableData.heightHint = 155;
table.setLayoutData( tableData );
table.setLinesVisible( false );
createImages();
}
private TableViewer tableViewer;
private Image imageQuestion;
private class TableViewElement
{
private int pageIndex;
private String pageTitle;
private Image image;
public TableViewElement( String pageTitle, Image image, int pageIndex )
{
this.pageTitle = pageTitle;
this.image = image;
this.pageIndex = pageIndex;
}
}
private class TableViewContentProvider implements IStructuredContentProvider
{
@Override
public void dispose()
{
}
@Override
public void inputChanged( Viewer viewer, Object oldInput, Object newInput )
{
}
@Override
public Object[] getElements( Object inputElement )
{
if( inputElement instanceof TableViewElement[] )
{
return (TableViewElement[]) inputElement;
}
return new Object[] { inputElement };
}
}
class TableViewLabelProvider extends LabelProvider
{
@Override
public Image getImage( Object element )
{
TableViewElement tableViewElement = (TableViewElement) element;
return tableViewElement.image;
}
@Override
public String getText( Object element )
{
TableViewElement tableViewElement = (TableViewElement) element;
return tableViewElement.pageTitle;
}
}
private void createImages()
{
imageQuestion = ImageDescriptor.createFromURL(
ProjectUI.getDefault().getBundle().getEntry( "/images/question.png" ) ).createImage();
}
public void createSpecialDescriptor( Composite parent, int style )
{
final String descriptor = "Upgrade results are summarised in the following table.\n" +
"If there are still some steps failed or incompleted, you can go back to finish them.\n" +
"If all the steps are well-done, congratulations! You have finished the whole upgrade process.\n" +
"Now you can try to deploy your projects to Liferay portal. " +
"For more upgrade information, please see <a>From Liferay 6 to Liferay 7</a>.";
String url = "https://dev.liferay.com/develop/tutorials/-/knowledge_base/7-0/from-liferay-6-to-liferay-7";
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 "Summary";
}
@Override
public int getGridLayoutCount()
{
return 2;
}
@Override
public boolean getGridLayoutEqualWidth()
{
return false;
}
@Override
public void onSelectionChanged( int targetSelection )
{
setInput();
}
private void setInput()
{
List<TableViewElement> TableViewElementList = new ArrayList<TableViewElement>();
TableViewElement[] tableViewElements;
int pageNum = UpgradeView.getPageNumber();
for( int i = 1; i < pageNum - 1; i++ )
{
Page page = UpgradeView.getPage( i );
String pageTitle = page.getPageTitle();
int pageIndex = page.getIndex();
PageAction pageAction = page.getSelectedAction();
Image statusImage;
if( pageTitle.equals( "Ext and Theme Project" ) )
{
continue;
}
if( pageAction == null )
{
statusImage = imageQuestion;
}
else
{
statusImage = page.getSelectedAction().getBageImage();
}
TableViewElement tableViewElement = new TableViewElement( pageTitle, statusImage, pageIndex );
TableViewElementList.add( tableViewElement );
}
tableViewElements = TableViewElementList.toArray( new TableViewElement[TableViewElementList.size()] );
tableViewer.setInput( tableViewElements );
}
}