/**
* Copyright (c) 2011 Martin M Reed
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package net.hardisonbrewing.signingserver;
import java.util.Hashtable;
import net.hardisonbrewing.signingserver.service.icon.IconService;
import net.hardisonbrewing.signingserver.service.store.ModuleHandleStore;
import net.hardisonbrewing.signingserver.service.store.sig.SigStatusChangeListener;
import net.hardisonbrewing.signingserver.service.store.sig.SigStatusChangeListenerStore;
import net.hardisonbrewing.signingserver.service.store.sig.SigStatusStore;
import net.rim.blackberry.api.homescreen.HomeScreen;
import net.rim.device.api.io.transport.TransportInfo;
import net.rim.device.api.system.Application;
import net.rim.device.api.system.ApplicationDescriptor;
import net.rim.device.api.system.ApplicationManager;
import net.rim.device.api.system.Bitmap;
import net.rim.device.api.system.CodeModuleManager;
import net.rim.device.api.system.EventLogger;
import net.rim.device.api.ui.UiApplication;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class SigservApplication extends UiApplication {
private static final Logger log = LoggerFactory.getLogger( SigservApplication.class );
public static final String AUTO_RUN_ON_STARTUP = "AutoRunOnStartup";
public static final String BBM_REGISTER = "BBMRegister";
public static final String PUSH_STARTUP = "PushStartup";
public static final String PUSH_REGISTER = "PushRegister";
public static final String PUSH_UNREGISTER = "PushUnregister";
public static final String UPDATE_ICON_BITMAP = "UpdateIconBitmap";
public static final String UPDATE_ICON_STATE = "UpdateIconState";
public static void main( String[] args ) {
if ( log.isDebugEnabled() ) {
//HACK: workaround for a LoggerFactory so it will not be stripped out by obfuscation
log.debug( "Logger: " + org.slf4j.impl.LoggerFactoryBinder.class.getName() );
}
ApplicationDescriptor currentApplicationDescriptor = ApplicationDescriptor.currentApplicationDescriptor();
EventLogger.register( Settings.EVENT_LOG_ID, currentApplicationDescriptor.getModuleName(), EventLogger.VIEWER_STRING );
if ( args != null ) {
if ( args.length > 0 ) {
if ( AUTO_RUN_ON_STARTUP.equals( args[0] ) ) {
SigservAutorunApplication.mainAutoRunOnStartup( args );
return;
}
else if ( BBM_REGISTER.equals( args[0] ) ) {
SigservBBMApplication.mainAutoRegister( args );
return;
}
else if ( PUSH_STARTUP.equals( args[0] ) ) {
SigservPushApplication.mainStartup( args );
return;
}
else if ( PUSH_REGISTER.equals( args[0] ) ) {
SigservPushApplication.mainRegister( args );
return;
}
else if ( PUSH_UNREGISTER.equals( args[0] ) ) {
SigservPushApplication.mainUnregister( args );
return;
}
else if ( UPDATE_ICON_BITMAP.equals( args[0] ) ) {
logEvent( "Updating application icon to: " + args[1] );
Bitmap bitmap = IconService.getPreferredIcon( args[1] );
HomeScreen.updateIcon( bitmap );
logEvent( "Finished updating application icon" );
return;
}
else if ( UPDATE_ICON_STATE.equals( args[0] ) ) {
boolean newState = "true".equalsIgnoreCase( args[1] );
logEvent( "Updating application state to: " + newState );
IconService.setIconNewState( newState );
logEvent( "Finished updating application state" );
return;
}
}
}
final SigservApplication application = new SigservApplication();
application.invokeLater( new Runnable() {
public void run() {
application.bootloader();
}
} );
application.enterEventDispatcher();
}
public static final void logEvent( String text ) {
log.info( text );
EventLogger.logEvent( Settings.EVENT_LOG_ID, text.getBytes() );
}
public static final SigservApplication getSigservApplication() {
return (SigservApplication) Application.getApplication();
}
public static final ApplicationDescriptor getSystemApplicationDescriptor() {
int moduleHandle = ModuleHandleStore.get();
ApplicationDescriptor[] applicationDescriptors = CodeModuleManager.getApplicationDescriptors( moduleHandle );
for (int i = 0; i < applicationDescriptors.length; i++) {
int flags = applicationDescriptors[i].getFlags();
if ( ( flags & ApplicationDescriptor.FLAG_SYSTEM ) == ApplicationDescriptor.FLAG_SYSTEM ) {
return applicationDescriptors[i];
}
}
return applicationDescriptors[0];
}
public static void updateStoredStatus( Hashtable status ) {
SigStatusStore.put( status );
SigStatusChangeListener[] statusChangeListeners = SigStatusChangeListenerStore.get();
if ( statusChangeListeners != null ) {
for (int i = 0; i < statusChangeListeners.length; i++) {
statusChangeListeners[i].onStatusChange( status );
}
}
}
private void bootloader() {
pushScreen( new net.hardisonbrewing.signingserver.ui.HomeScreen() );
}
public void activate() {
IconService.setIconNewState( false );
super.activate();
}
public static final boolean hasSufficientCoverage() {
int[] transportTypes = TransportInfo.getAvailableTransportTypes();
for (int i = 0; i < transportTypes.length; i++) {
if ( TransportInfo.hasSufficientCoverage( i ) ) {
return true;
}
}
return false;
}
public static final void waitForStatup() {
log.info( "Waiting for device startup to finish" );
while (ApplicationManager.getApplicationManager().inStartup()) {
try {
Thread.sleep( 200 );
}
catch (InterruptedException e) {
// do nothing
}
}
log.info( "Device startup has finished" );
}
}