/*
* Copyright (c) 2010-2012 Research In Motion Limited. All rights reserved.
*
* This program and the accompanying materials are made available
* under the terms of the Eclipse Public License, Version 1.0,
* which accompanies this distribution and is available at
*
* http://www.eclipse.org/legal/epl-v10.html
*
*/
package net.rim.ejde.internal.core;
import java.io.IOException;
import net.rim.ejde.internal.launching.DeviceProfileManager;
import net.rim.ejde.internal.model.BlackBerrySDKInstall;
import net.rim.ejde.internal.model.BlackBerryVMInstallType;
import net.rim.ejde.internal.util.VMToolsUtils;
import net.rim.ejde.internal.util.VMUtils;
import org.apache.log4j.Logger;
import org.eclipse.jdt.launching.IVMInstall;
import org.eclipse.jdt.launching.IVMInstallChangedListener;
import org.eclipse.jdt.launching.JavaRuntime;
import org.eclipse.jdt.launching.PropertyChangeEvent;
/**
* The Class RuntimeInstallsHandler.
*
* @author cmalinescu, jheifetz
*/
public final class RuntimeInstallsHandler implements IVMInstallChangedListener {
static private final Logger _log = Logger.getLogger( RuntimeInstallsHandler.class );
static private RuntimeInstallsHandler INSTANCE;
/**
* Gets the single instance of RuntimeInstallsHandler.
*
* @return single instance of RuntimeInstallsHandler
*/
static synchronized RuntimeInstallsHandler getInstance() {
if( null == INSTANCE ) {
INSTANCE = new RuntimeInstallsHandler();
JavaRuntime.addVMInstallChangedListener( INSTANCE );
}
return INSTANCE;
}
/**
* Removes the instance.
*/
static public void removeInstance() {
JavaRuntime.removeVMInstallChangedListener( INSTANCE );
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jdt.launching.IVMInstallChangedListener#defaultVMInstallChanged (org.eclipse.jdt.launching.IVMInstall,
* org.eclipse.jdt.launching.IVMInstall)
*/
@Override
public void defaultVMInstallChanged( final IVMInstall previous, final IVMInstall current ) {
_log.debug( "VM: *SWITCH* from [" + ( previous == null ? "NULL" : previous.getId() + "$" + previous.getName() )
+ "] to [" + ( current == null ? "NULL" : current.getId() + "$" + current.getName() ) + "]" );
EJDEEventNotifier.getInstance().notifyWorkspaceJREChange( previous, current );
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jdt.launching.IVMInstallChangedListener#vmAdded(org.eclipse .jdt.launching.IVMInstall)
*/
@Override
public void vmAdded( final IVMInstall vm ) {
_log.debug( "VM: *ADDED* [" + vm.getId() + "$" + vm.getInstallLocation() + "]" );
try {
VMToolsUtils.addVMTools( vm );
} catch( IOException ioe ) {
_log.error( "Error Updating Signature Tool", ioe );
}
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jdt.launching.IVMInstallChangedListener#vmChanged(org.eclipse .jdt.launching.PropertyChangeEvent)
*/
@Override
public void vmChanged( final PropertyChangeEvent event ) {
String property = event.getProperty();
Object oldValue = event.getOldValue(), newValue = event.getNewValue();
String oldValueStrRepr, newValueStrRepr;
oldValueStrRepr = null != oldValue ? oldValue.toString() : "";
newValueStrRepr = null != newValue ? newValue.toString() : "";
_log.debug( "Event [" + property + "] for: *OLD* was[" + oldValueStrRepr + "] *NEW* is [" + newValueStrRepr + "]." );
// Reload the device profiles when the VM changes
if( event.getSource() instanceof BlackBerrySDKInstall ) {
BlackBerrySDKInstall sourceVM = (BlackBerrySDKInstall) event.getSource();
if( property.equals( BlackBerryVMInstallType.ATTR_DEFINITION_FILE ) ) {
if( !oldValue.equals( newValue ) ) {
DeviceProfileManager.getInstance().reloadDeviceInfo( sourceVM );
EJDEEventNotifier.getInstance().notifyJREDefinitionChanged( sourceVM );
}
}
}
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jdt.launching.IVMInstallChangedListener#vmRemoved(org.eclipse .jdt.launching.IVMInstall)
*/
@Override
public void vmRemoved( final IVMInstall vm ) {
_log.debug( "VM: *REMOVED* [" + vm.getId() + "$" + vm.getName() + "]" );
VMUtils.removeSignKeysFromCache( vm );
try {
VMToolsUtils.removeVMTools( vm );
} catch( IOException ioe ) {
_log.error( "Error Updating Signature Tool", ioe );
}
}
}