/*******************************************************************************
* Copyright (c) 2011, 2013 EclipseSource 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:
* EclipseSource - initial API and implementation
*******************************************************************************/
package org.eclipse.rap.rwt.internal.protocol;
import org.eclipse.rap.rwt.internal.lifecycle.DisplayUtil;
import org.eclipse.rap.rwt.internal.remote.LifeCycleRemoteObject;
import org.eclipse.rap.rwt.internal.remote.RemoteObjectImpl;
import org.eclipse.rap.rwt.internal.remote.RemoteObjectRegistry;
import org.eclipse.rap.rwt.internal.util.ParamCheck;
import org.eclipse.rap.rwt.internal.lifecycle.WidgetUtil;
import org.eclipse.rap.rwt.remote.RemoteObject;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Widget;
/**
* The methods of this class are used to create remote objects, only for use in LCAs.
*
* @see RemoteObject
*/
public final class RemoteObjectFactory {
public static RemoteObject getRemoteObject( Widget widget ) {
ParamCheck.notNull( widget, "widget" );
return getForId( WidgetUtil.getId( widget ) );
}
public static RemoteObject getRemoteObject( Display display ) {
ParamCheck.notNull( display, "display" );
return getForId( DisplayUtil.getId( display ) );
}
public static RemoteObject getRemoteObject( String id ) {
ParamCheck.notNull( id, "id" );
return getForId( id );
}
public static RemoteObject createRemoteObject( Widget widget, String type ) {
ParamCheck.notNull( widget, "widget" );
ParamCheck.notNull( type, "type" );
return createForId( WidgetUtil.getId( widget ), type );
}
public static RemoteObject createRemoteObject( String id, String type ) {
ParamCheck.notNull( id, "id" );
ParamCheck.notNull( type, "type" );
return createForId( id, type );
}
private static RemoteObject createForId( String id, String type ) {
LifeCycleRemoteObject remoteObject = new LifeCycleRemoteObject( id, type );
RemoteObjectRegistry.getInstance().register( remoteObject );
return remoteObject;
}
private static RemoteObject getForId( String id ) {
RemoteObjectImpl remoteObject = RemoteObjectRegistry.getInstance().get( id );
// TODO [rst] Required for LCA tests, remove lazy initialization
if( remoteObject == null ) {
remoteObject = new LifeCycleRemoteObject( id, null );
RemoteObjectRegistry.getInstance().register( remoteObject );
}
return remoteObject;
}
private RemoteObjectFactory() {
// prevent instantiation
}
}