| /******************************************************************************* |
| * Copyright (c) 2012, 2015 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.remote; |
| |
| import java.io.Serializable; |
| import java.util.ArrayList; |
| import java.util.LinkedHashMap; |
| import java.util.List; |
| import java.util.Map; |
| |
| import org.eclipse.rap.rwt.RWT; |
| import org.eclipse.rap.rwt.SingletonUtil; |
| import org.eclipse.rap.rwt.service.UISession; |
| |
| |
| public class RemoteObjectRegistry implements Serializable { |
| |
| private final Map<String, RemoteObjectImpl> remoteObjects; |
| |
| RemoteObjectRegistry() { |
| // TODO [rst] This is a linked list in order to provide an ordered list of remote objects to |
| // iterate in the render phase. Once messages are rendered directly, this doesn't |
| // have to be a linked list anymore. |
| remoteObjects = new LinkedHashMap<>(); |
| } |
| |
| public static RemoteObjectRegistry getInstance() { |
| return getInstance( RWT.getUISession() ); |
| } |
| |
| public static RemoteObjectRegistry getInstance( UISession uiSession ) { |
| return SingletonUtil.getUniqueInstance( RemoteObjectRegistry.class, uiSession ); |
| } |
| |
| public void register( RemoteObjectImpl object ) { |
| String id = object.getId(); |
| if( remoteObjects.containsKey( id ) ) { |
| throw new IllegalArgumentException( "Remote object already registered, id: " + id ); |
| } |
| remoteObjects.put( id, object ); |
| } |
| |
| public void remove( RemoteObjectImpl object ) { |
| String id = object.getId(); |
| if( !remoteObjects.containsKey( id ) ) { |
| throw new IllegalArgumentException( "Remote object not found in registry, id: " + id ); |
| } |
| remoteObjects.remove( id ); |
| } |
| |
| public RemoteObjectImpl get( String id ) { |
| return remoteObjects.get( id ); |
| } |
| |
| public List<RemoteObjectImpl> getRemoteObjects() { |
| return new ArrayList<>( remoteObjects.values() ); |
| } |
| |
| } |