/******************************************************************************* * Copyright (c) 2008, 2010 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.equinox.internal.p2.garbagecollector; import java.util.Map; import org.eclipse.equinox.app.IApplication; import org.eclipse.equinox.app.IApplicationContext; import org.eclipse.equinox.p2.core.*; import org.eclipse.equinox.p2.engine.IProfile; import org.eclipse.equinox.p2.engine.IProfileRegistry; /** * @since 1.0 */ public class Application implements IApplication { private static final String DEFAULT_PROFILE_ID = "SDKProfile"; //$NON-NLS-1$ private String profileId; private IProvisioningAgent agent; /* * Return the profile with the given id, or null if not found. */ private IProfile getProfile(String id) { IProfileRegistry profileRegistry = (IProfileRegistry) agent.getService(IProfileRegistry.SERVICE_NAME); return profileRegistry == null ? null : profileRegistry.getProfile(id); } /* (non-Javadoc) * @see org.eclipse.equinox.app.IApplication#start(org.eclipse.equinox.app.IApplicationContext) */ public Object start(IApplicationContext context) throws Exception { Map<?, ?> allArgs = context.getArguments(); String[] args = (String[]) allArgs.get(IApplicationContext.APPLICATION_ARGS); processArguments(args); // if the user didn't give us a profile id, then use the default SDK one if (profileId == null) profileId = DEFAULT_PROFILE_ID; initializeServices(); IProfile profile = getProfile(profileId); if (profile == null) throw new IllegalArgumentException("\"" + profileId + "\" is not a valid profile identifier."); //$NON-NLS-1$//$NON-NLS-2$ GarbageCollector gc = (GarbageCollector) agent.getService(GarbageCollector.SERVICE_NAME); gc.runGC(profile); agent.stop(); return null; } private void initializeServices() throws ProvisionException { IProvisioningAgentProvider provider = GCActivator.getService(IProvisioningAgentProvider.class); agent = provider.createAgent(null); } /* (non-Javadoc) * @see org.eclipse.equinox.app.IApplication#stop() */ public void stop() { // nothing to do } /* * Iterate over the command-line arguments and pull out the ones which are important to us. */ public void processArguments(String[] args) throws Exception { if (args == null) return; for (int i = 0; i < args.length; i++) { String opt = args[i]; // check for args with parameters. If we are at the last argument or if the next // one has a '-' as the first character, then we can't have an arg with a parm so continue. if (i == args.length - 1 || args[i + 1].startsWith("-")) //$NON-NLS-1$ continue; String arg = args[++i]; if (opt.equalsIgnoreCase("-profile")) //$NON-NLS-1$ profileId = arg; } } }