blob: 887cf58592b2f0225cc8b9c4343f3f76e1e9f32a [file] [log] [blame]
/**
* Copyright (c) 2019 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.http.services.client;
import java.io.IOException;
import java.util.Collection;
import org.apache.log4j.Logger;
import org.eclipse.sensinact.studio.http.messages.snamessage.MsgSensinact;
import org.eclipse.sensinact.studio.http.messages.snamessage.actresponse.MsgActResponse;
import org.eclipse.sensinact.studio.http.messages.snamessage.actresponse.ObjectResponse;
import org.eclipse.sensinact.studio.http.messages.snamessage.getresponse.MsgGetResponse;
import org.eclipse.sensinact.studio.http.services.client.UIResult.DialogStatus;
import org.eclipse.sensinact.studio.model.resource.utils.ResourceDescriptor;
import org.eclipse.sensinact.studio.model.resource.utils.Segments;
import org.eclipse.sensinact.studio.resource.AccessMethodType;
import org.restlet.data.Parameter;
/**
* @author Etienne Gandrille
*/
public class StudioRequest {
private final ResourceDescriptor descriptor;
private final AccessMethodType type;
private static final Logger logger = Logger.getLogger(StudioRequest.class);
public StudioRequest(ResourceDescriptor descriptor, AccessMethodType type) {
this.descriptor = descriptor;
this.type = type;
}
public MsgSensinact sendRequest(Collection<Parameter> queryParameter){
Segments segments = new Segments.Builder().resource(descriptor).method(type).build();
try {
if (type.equals(AccessMethodType.GET))
return GatewayHttpClient.sendGetRequest(segments);
else if (type.equals(AccessMethodType.ACT))
return GatewayHttpClient.sendPostRequest(segments,null,queryParameter);
else
throw new IllegalArgumentException("BasicRequest not implemented with " + type.getName() + " method");
} catch (IOException e) {
throw new IllegalArgumentException("BasicRequest not implemented with " + type.getName() + " method");
}
}
public MsgSensinact sendRequest() throws IOException {
return sendRequest(null);
}
public UIResult sendRequestForIU() {
String title = descriptor.getDevice();
String message;
DialogStatus dialogType;
MsgSensinact response=null;
try {
response = sendRequest();
// errors 404,...
if (response instanceof MsgActResponse) {
MsgActResponse actResponse = (MsgActResponse) response;
ObjectResponse res = actResponse.getResponse();
if(res == null)
message = "ACTION SUCCEEDED";
else
message = res.getTask();
dialogType = DialogStatus.SUCCESS;
} else if (response instanceof MsgGetResponse) {
MsgGetResponse getResponse = (MsgGetResponse) response;
message = getResponse.getResponse().getValueAsString();
dialogType = DialogStatus.SUCCESS;
} else {
message = "Message type : " + response.getType();
dialogType = response.isValid() ? DialogStatus.SUCCESS : DialogStatus.ERROR;
}
} catch (Exception e) {
title = "Error";
message = e.getMessage();
dialogType = DialogStatus.ERROR;
}
logger.info(dialogType.toString() + " " + message);
return new UIResult(title, message, dialogType);
}
}