/******************************************************************************* * Copyright (c) 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.client; import static org.eclipse.rap.rwt.internal.util.ParamCheck.notNullOrEmpty; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import org.eclipse.rap.json.JsonObject; import org.eclipse.rap.json.JsonObject.Member; import org.eclipse.rap.json.JsonValue; import org.eclipse.rap.rwt.RWT; import org.eclipse.rap.rwt.client.service.StartupParameters; import org.eclipse.rap.rwt.internal.remote.ConnectionImpl; import org.eclipse.rap.rwt.remote.AbstractOperationHandler; import org.eclipse.rap.rwt.remote.RemoteObject; public class StartupParametersImpl implements StartupParameters { private Map<String, List<String>> parameters; public StartupParametersImpl() { ConnectionImpl connection = ( ConnectionImpl )RWT.getUISession().getConnection(); RemoteObject remoteObject = connection.createServiceObject( "rwt.client.StartupParameters" ); remoteObject.setHandler( new StartupParametersOperationHandler() ); parameters = Collections.emptyMap(); } @Override public Collection<String> getParameterNames() { return Collections.unmodifiableSet( parameters.keySet() ); } @Override public String getParameter( String name ) { notNullOrEmpty( name, "name" ); List<String> values = parameters.get( name ); return values == null ? null : values.get( 0 ); } @Override public List<String> getParameterValues( String name ) { notNullOrEmpty( name, "name" ); List<String> values = parameters.get( name ); return values == null ? null : Collections.unmodifiableList( values ); } final class StartupParametersOperationHandler extends AbstractOperationHandler { @Override public void handleSet( JsonObject properties ) { JsonValue params = properties.get( "parameters" ); if( params != null ) { parameters = new HashMap<>(); for( Member member : params.asObject() ) { List<String> stringValues = new ArrayList<>(); for( JsonValue value : member.getValue().asArray() ) { stringValues.add( value.asString() ); } parameters.put( member.getName(), stringValues ); } } } } }