/******************************************************************************* * 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.adt.core.model.internal; import com.liferay.ide.adt.core.ADTCore; import com.liferay.ide.adt.core.ADTUtil; import com.liferay.ide.adt.core.model.GenerateCustomServicesOp; import com.liferay.ide.adt.core.model.Library; import com.liferay.ide.core.util.CoreUtil; import com.liferay.mobile.sdk.core.MobileSDKBuilder; import com.liferay.mobile.sdk.core.MobileSDKCore; import com.liferay.mobile.sdk.core.PortalAPI; import java.io.File; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.CoreException; 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; import org.eclipse.sapphire.platform.StatusBridge; /** * @author Gregory Amerson * @author Kuo Zhang */ public class GenerateCustomServicesOpMethods { public static final Status execute( final GenerateCustomServicesOp op, final ProgressMonitor monitor ) { Status retval = null; final IProgressMonitor pm = ProgressMonitorBridge.create( monitor ); pm.beginTask( "Generating custom services...", 5 ); final IProject project = CoreUtil.getProject( op.getProjectName().content() ); final Map<String, File[]> libs = MobileSDKCore.getLibraryMap(); final ElementList<Library> libraries = op.getLibraries(); if( libraries.size() == 0 ) { libraries.insert().setContext( PortalAPI.NAME ); } final Map<String, String[]> buildSpec = new HashMap<String, String[]>(); boolean hasPortal = false; for( final Library library : libraries ) { final String context = library.getContext().content(); if( PortalAPI.NAME.equals( library.getContext().content() ) ) { hasPortal = true; buildSpec.put( context, null ); } else if( ! library.getEntity().empty() ) { final String entity = library.getEntity().content(); final String[] entities = buildSpec.get( context ); if( CoreUtil.isNullOrEmpty( entities ) ) { buildSpec.put( context, new String[] { entity } ); } else { final String[] newEntities = new String[ entities.length + 1 ]; System.arraycopy( entities, 0, newEntities, 0, entities.length ); newEntities[ entities.length ] = entity; buildSpec.put( context, newEntities ); } } } File[] customJars = null; if( ( hasPortal && buildSpec.keySet().size() > 1 ) || ( !hasPortal && buildSpec.keySet().size() > 0 ) ) { customJars = MobileSDKBuilder.buildJars( op.getUrl().content(), op.getPackage().content().toString(), buildSpec, pm ); } final List<File[]> files = new ArrayList<File[]>(); if( customJars != null ) { files.add( customJars ); } // if( hasPortal ) // { // add standard sdk and sources files.add( libs.get( "liferay-android-sdk-6.2.0.1" ) ); // } // else // { // files.add( libs.get( "liferay-android-sdk-6.2.0.1-core" ) ); // } try { ADTUtil.addLibsToAndroidProject( project, files, pm ); retval = Status.createOkStatus(); } catch( CoreException e ) { retval = StatusBridge.create( ADTCore.createErrorStatus( "Could not add mobile sdk libraries.", e ) ); } return retval; } public static void updateServerStatus( GenerateCustomServicesOp op ) { op.getStatus().service( StatusDerivedValueService.class ).updateStatus(); op.getSummary().service( SummaryDerivedValueService.class ).updateStatus(); } }