/**
 * Copyright (c) 2018 CEA.
 * 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:
 *     CEA - initial API and implementation and/or initial documentation
 */
package org.eclipse.sensinact.studio.model.manager.http;

import java.util.List;

import org.eclipse.sensinact.studio.http.client.snamessage.MsgSensinact;
import org.eclipse.sensinact.studio.http.client.subscribe.agent.Agent;
import org.restlet.Response;
import org.restlet.data.Status;
import org.restlet.resource.Post;

/**
 * @author Etienne Gandrille
 */
public class GatewayHttpServerRouteNew extends GatewayHttpServerRoute {

	@Post("json")
	public Response getValue(String params) {
		return super.getValue(params);
	}

	@Override
	protected Status notify(String id, List<MsgSensinact> messages) {
		return Agent.getInstance().callbackRecieved(id, messages);
	}
}
