/******************************************************************************* * 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.core.upgrade; import com.liferay.ide.project.core.AbstractUpgradeProjectHandler; import com.liferay.ide.project.core.UpgradeProjectHandlerReader; import com.liferay.ide.project.core.model.NamedItem; import com.liferay.ide.project.core.util.ProjectUtil; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.sapphire.ElementList; import org.eclipse.sapphire.modeling.ProgressMonitor; import org.eclipse.sapphire.modeling.Status; import org.eclipse.sapphire.platform.ProgressMonitorBridge; /** * @author Simon Jiang */ public class UpgradeLiferayProjectsOpMethods { public static final Status execute( final UpgradeLiferayProjectsOp op, final ProgressMonitor pm ) { Status retval = Status.createOkStatus(); final IProgressMonitor monitor = ProgressMonitorBridge.create( pm ); monitor.beginTask( "Upgrading Liferay plugin projects (this process may take several minutes)", 30 ); final ElementList<NamedItem> projectItems = op.getSelectedProjects(); final ElementList<NamedItem> upgradeActions = op.getSelectedActions(); final String runtimeName = op.getRuntimeName().content(); final List<String> projectItemNames = new ArrayList<String>(); final List<String> projectActionItems = new ArrayList<String>(); for( NamedItem projectItem : projectItems ) { projectItemNames.add( projectItem.getName().content() ); } for( NamedItem upgradeAction : upgradeActions ) { projectActionItems.add( upgradeAction.getName().content() ); } Status[] upgradeStatuses = performUpgrade( projectItemNames, projectActionItems, runtimeName, monitor ); for( Status s : upgradeStatuses ) { if( !s.ok() ) { retval = Status.createErrorStatus( "Some upgrade actions failed, please see Eclipse error log for more details" ); } } return retval; } private static HashMap<String, AbstractUpgradeProjectHandler> getActionMap( List<AbstractUpgradeProjectHandler> upgradeActions ) { HashMap<String, AbstractUpgradeProjectHandler> actionMaps = new HashMap<String,AbstractUpgradeProjectHandler>(); for( AbstractUpgradeProjectHandler upgradeHandler : upgradeActions) { actionMaps.put( upgradeHandler.getName(), upgradeHandler ); } return actionMaps; } private static final Status[] performUpgrade( final List<String> projectItems, final List<String> projectActions, final String runtimeName, final IProgressMonitor monitor ) { final List<Status> retval = new ArrayList<Status>(); int worked = 0; int workUnit = projectItems.size(); int actionUnit = projectActions.size(); int totalWork = 100; int perUnit = totalWork / ( workUnit * actionUnit ); monitor.beginTask( "Upgrading Project ", totalWork ); final UpgradeProjectHandlerReader upgradeLiferayProjectActionReader = new UpgradeProjectHandlerReader(); final HashMap<String, AbstractUpgradeProjectHandler> actionMap = getActionMap( upgradeLiferayProjectActionReader.getUpgradeActions() ); for( String projectItem : projectItems ) { if( projectItem != null ) { final IProject project = ProjectUtil.getProject( projectItem ); monitor.subTask( "Upgrading project " + project.getName() ); for( String action : projectActions ) { final AbstractUpgradeProjectHandler upgradeLiferayProjectAction = actionMap.get( action ); final Status status = upgradeLiferayProjectAction.execute( project, runtimeName, monitor, perUnit ); retval.add( status ); worked = worked + totalWork / ( workUnit * actionUnit ); monitor.worked( worked ); } } } return retval.toArray( new Status[0] ); } }