/* * 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.util; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.URL; import net.rim.ejde.internal.core.ContextManager; import net.rim.ejde.internal.core.IConstants; import net.rim.ide.RIA; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.eclipse.core.runtime.IPath; import org.osgi.framework.Bundle; public class RIAUtils { static private final Logger _log = Logger.getLogger( RIAUtils.class ); static final private String[] dllNames = { "RIMIDEWin32Util.dll", "RIMUsbJni.dll" }; //$NON-NLS-1$ //$NON-NLS-2$ /** * Gets valid jde home based on the given <code>path</code>. The given <code>path</code> should not contain <b>"bin"</b>. * * @param path * of jde home * @return if the give <code>path</code> is a valid jde home, returns the full path of the jde home; otherwise, returns empty * string. */ static public String getValidJDEHome( String path ) { String root = path; if( StringUtils.isEmpty( root ) ) { return StringUtils.EMPTY; } // if "/bin" is already appended, we do not append it again if( !path.endsWith( IConstants.BIN_FOLD_NAME ) ) root = String.format( "%s%s%s", root, File.separator, IConstants.BIN_FOLD_NAME ); //$NON-NLS-1$ if( RIA.validateHomePath( root ) ) return root; return StringUtils.EMPTY; } public static void initDLLs() { IPath dllStoreLocation = ContextManager.PLUGIN.getStateLocation().append( "installDlls" ); //$NON-NLS-1$ File dllStoreFile = dllStoreLocation.toFile(); if( !dllStoreFile.exists() ) dllStoreFile.mkdir(); InputStream inputStream; OutputStream outputStream; File dllFile; byte[] buf; int numbytes; URL bundUrl; for( String dllFileName : dllNames ) { inputStream = null; outputStream = null; try { dllFile = dllStoreLocation.append( dllFileName ).toFile(); Bundle bundle = ContextManager.PLUGIN.getBundle(); if( !dllFile.exists() || bundle.getLastModified() > dllFile.lastModified() ) { bundUrl = bundle.getResource( dllFileName ); if( bundUrl == null ) continue; inputStream = bundUrl.openStream(); outputStream = new FileOutputStream( dllFile ); buf = new byte[ 4096 ]; numbytes = 0; while( ( numbytes = inputStream.read( buf ) ) > 0 ) outputStream.write( buf, 0, numbytes ); } } catch( IOException t ) { _log.error( t.getMessage(), t ); } finally { try { if( inputStream != null ) inputStream.close(); if( outputStream != null ) outputStream.close(); } catch( IOException t ) { _log.error( t.getMessage(), t ); } } } // end for } // end initRIADLLs public static boolean canSwitchRIA() { RIA ria = RIA.getCurrentDebugger(); if( ria == null ) { return true; } if( ria.isDebuggerAttached() || ria.isSimulatorRunning() ) { return false; } return true; } }