/******************************************************************************* * 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.core.util.FileUtil; import com.liferay.ide.project.core.util.ProjectUtil; import com.liferay.ide.project.core.util.SearchFilesVisitor; import com.liferay.ide.project.ui.ProjectUI; import com.liferay.ide.project.ui.dialog.JavaProjectSelectionDialog; import java.io.File; import java.util.ArrayList; import java.util.List; import org.apache.commons.io.FileUtils; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResourceProxy; import org.eclipse.jdt.core.IJavaProject; import org.eclipse.jface.resource.ImageRegistry; import org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider.IStyledLabelProvider; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerFilter; import org.eclipse.jface.window.Window; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Display; /** * @author Joye Luo * @author Simon Jiang */ public class LiferayLayouttplUpgradeTableViewCustomPart extends AbstractLiferayTableViewCustomPart { private class LayoutSearchFilesVistor extends SearchFilesVisitor { @Override public boolean visit( IResourceProxy resourceProxy ) { if( resourceProxy.getType() == IResource.FILE && resourceProxy.getName().endsWith( searchFileName ) ) { IResource resource = resourceProxy.requestResource(); if( resource.exists() ) { resources.add( (IFile) resource ); } } return true; } } @Override protected IFile[] getAvaiableUpgradeFiles( IProject project ) { List<IFile> files = new ArrayList<IFile>(); List<IFile> searchFiles = new LayoutSearchFilesVistor().searchFiles( project, ".tpl" ); files.addAll( searchFiles ); return files.toArray( new IFile[files.size()] ); } @Override protected IStyledLabelProvider getLableProvider() { return new LiferayUpgradeTabeViewLabelProvider( "Upgrade Layouttpl" ) { @Override public Image getImage( Object element ) { return this.getImageRegistry().get( "layout" ); } @Override protected void initalizeImageRegistry( ImageRegistry imageRegistry ) { imageRegistry.put( "layout", ProjectUI.imageDescriptorFromPlugin( ProjectUI.PLUGIN_ID, "/icons/e16/layout.png" ) ); } }; } private class LayoutProjectViewerFilter extends ViewerFilter { @Override public boolean select( Viewer viewer, Object parentElement, Object element ) { if( element instanceof IJavaProject ) { IProject project = ( (IJavaProject) element ).getProject(); if( project.getName().equals( "External Plug-in Libraries" ) ) { return false; } if( ProjectUtil.isLayoutTplProject( project ) ) { return true; } return false; } return false; } } @Override protected List<IProject> getSelectedProjects() { List<IProject> projects = new ArrayList<>(); final JavaProjectSelectionDialog dialog = new JavaProjectSelectionDialog( Display.getCurrent().getActiveShell(), new LayoutProjectViewerFilter() ); 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; projects.add( p.getProject() ); } } } } return projects; } @Override protected void createTempFile( final File srcFile, final File templateFile, final String projectName ) { try { String content = upgradeLayouttplContent( FileUtil.readContents( srcFile, true ) ); if( templateFile.exists() ) { templateFile.delete(); } templateFile.createNewFile(); FileUtil.writeFile( templateFile, content, projectName ); } catch( Exception e ) { ProjectUI.logError( e ); } } @Override protected boolean isNeedUpgrade( File srcFile ) { final String content = FileUtil.readContents( srcFile ); if( content != null && !content.equals( "" ) ) { if( content.contains( "row-fluid" ) || content.contains( "span" ) ) { return true; } } return false; } private String upgradeLayouttplContent( String content ) { if( content != null && !content.equals( "" ) ) { if( content.contains( "row-fluid" ) ) { content = content.replaceAll( "row-fluid", "row" ); } if( content.contains( "span" ) ) { content = content.replaceAll( "span", "col-md-" ); } } return content; } @Override protected void doUpgrade( File srcFile, IProject project ) { try { String content = upgradeLayouttplContent( FileUtil.readContents( srcFile, true ) ); FileUtils.writeStringToFile( srcFile, content, "UTF-8" ); } catch( Exception e ) { ProjectUI.logError( e ); } } }