/*******************************************************************************
* 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.action;
import com.liferay.ide.core.util.CoreUtil;
import com.liferay.ide.project.core.model.NewLiferayPluginProjectOp;
import com.liferay.ide.project.core.model.NewLiferayPluginProjectOpMethods;
import com.liferay.ide.project.core.model.Profile;
import com.liferay.ide.project.ui.wizard.NewLiferayPluginProjectWizard;
import org.eclipse.sapphire.ElementList;
import org.eclipse.sapphire.ui.Presentation;
import org.eclipse.sapphire.ui.def.DefinitionLoader;
import org.eclipse.sapphire.ui.forms.PropertyEditorActionHandler;
import org.eclipse.sapphire.ui.forms.swt.SapphireDialog;
import org.eclipse.sapphire.ui.forms.swt.SwtPresentation;
/**
* @author Gregory Amerson
*/
public class SelectActiveProfilesActionHandler extends PropertyEditorActionHandler
{
@Override
protected Object run( Presentation context )
{
if( context instanceof SwtPresentation )
{
final SwtPresentation swt = (SwtPresentation) context;
final NewLiferayPluginProjectOp op = getModelElement().nearest( NewLiferayPluginProjectOp.class );
final String previousActiveProfilesValue = op.getActiveProfilesValue().content();
// we need to rebuild the 'selected' list from what is specified in the 'activeProfiles' property
op.getSelectedProfiles().clear();
final String activeProfiles = op.getActiveProfilesValue().content();
if( ! CoreUtil.isNullOrEmpty( activeProfiles ) )
{
final String[] profileIds = activeProfiles.split( "," );
if( ! CoreUtil.isNullOrEmpty( profileIds ) )
{
for( String profileId : profileIds )
{
if( ! CoreUtil.isNullOrEmpty( profileId ) )
{
boolean foundExistingProfile = false;
for( Profile profile : op.getSelectedProfiles() )
{
if( profileId.equals( profile.getId().content() ) )
{
foundExistingProfile = true;
break;
}
}
if( ! foundExistingProfile )
{
Profile newlySelectedProfile = op.getSelectedProfiles().insert();
newlySelectedProfile.setId( profileId );
}
}
}
}
}
final SapphireDialog dialog =
new SapphireDialog( swt.shell(), op, DefinitionLoader.sdef(
NewLiferayPluginProjectWizard.class ).dialog( "SelectActiveProfiles" ) );
dialog.setBlockOnOpen( true );
final int result = dialog.open();
if( result == SapphireDialog.CANCEL )
{
// restore previous value
op.setActiveProfilesValue( previousActiveProfilesValue );
}
else
{
final ElementList<Profile> selectedProfiles = op.getSelectedProfiles();
NewLiferayPluginProjectOpMethods.updateActiveProfilesValue( op, selectedProfiles );
}
}
return null;
}
}