
com.effektif.adapter.service.AbstractAdapterService Maven / Gradle / Ivy
/*
* Copyright 2014 Effektif GmbH.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.effektif.adapter.service;
import com.effektif.workflow.api.datasource.ItemReference;
import com.effektif.workflow.api.json.GenericType;
import com.effektif.workflow.impl.configuration.Brewable;
import com.effektif.workflow.impl.configuration.Brewery;
import com.effektif.workflow.impl.data.DataTypeService;
import com.effektif.workflow.impl.json.JsonStreamMapper;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.List;
public abstract class AbstractAdapterService implements AdapterService, Brewable {
private static final Logger log = LoggerFactory.getLogger(AbstractAdapterService.class);
protected DataTypeService dataTypeService;
protected JsonStreamMapper jsonMapper;
@Override
public void brew(Brewery brewery) {
dataTypeService = brewery.get(DataTypeService.class);
jsonMapper = brewery.get(JsonStreamMapper.class);
}
public Adapter refreshAdapter(String adapterId) {
Adapter adapter = getAdapter(adapterId);
if (adapter.url!=null) {
try {
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpGet request = new HttpGet(adapter.url+"/descriptors");
CloseableHttpResponse response = httpClient.execute(request);
int status = response.getStatusLine().getStatusCode();
if (200!=status) {
throw new RuntimeException("Adapter didn't get it and answered "+status);
}
HttpEntity httpEntity = response.getEntity();
if (httpEntity != null) {
InputStream inputStream = httpEntity.getContent();
InputStreamReader reader = new InputStreamReader(inputStream);
AdapterDescriptors adapterDescriptors = jsonMapper.read(reader, AdapterDescriptors.class);
adapter.setActivityDescriptors(adapterDescriptors);
saveAdapter(adapter);
}
} catch (IOException e) {
log.error("Problem while connecting to adapter: "+e.getMessage(), e);
}
}
return adapter;
}
public ExecuteResponse executeAdapterActivity(String adapterId, ExecuteRequest executeRequest) {
ExecuteResponse executeResponse = null;
Adapter adapter = getAdapter(adapterId);
if (adapter!=null) {
try {
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpPost request = new HttpPost(adapter.url+"/execute");
String requestEntityJsonString = jsonMapper.write(executeRequest);
request.setEntity(new StringEntity(requestEntityJsonString, ContentType.APPLICATION_JSON));
CloseableHttpResponse response = httpClient.execute(request);
AdapterStatus adapterStatus = null;
int status = response.getStatusLine().getStatusCode();
if (200!=status) {
log.error("Execution of adapter activity failed with http response code "+response.getStatusLine().toString());
adapterStatus = AdapterStatus.ERROR;
}
HttpEntity httpEntity = response.getEntity();
if (httpEntity != null) {
try {
InputStream inputStream = httpEntity.getContent();
InputStreamReader reader = new InputStreamReader(inputStream);
executeResponse = jsonMapper.read(reader, ExecuteResponse.class);
log.debug("Parsed adapter activity execute response");
} catch (Exception e) {
log.error("Problem while parsing the adapter activity execute response: "+e.getMessage(), e);
}
}
AdapterLog adapterLog = new AdapterLog(executeRequest, executeResponse);
updateAdapterExecution(adapterStatus, adapterLog);
} catch (IOException e) {
log.error("Problem while connecting to adapter: "+e.getMessage(), e);
}
}
return executeResponse;
}
@Override
public List findItems(String adapterId, FindItemsRequest findItemsRequest) {
List items = null;
Adapter adapter = getAdapter(adapterId);
if (adapter!=null) {
try {
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpPost request = new HttpPost(adapter.url+"/items");
String requestEntityJsonString = jsonMapper.write(findItemsRequest);
request.setEntity(new StringEntity(requestEntityJsonString, ContentType.APPLICATION_JSON));
CloseableHttpResponse response = httpClient.execute(request);
AdapterStatus adapterStatus = null;
int status = response.getStatusLine().getStatusCode();
if (200!=status) {
log.error("findItems of adapter "+adapterId+" failed with http response code "+response.getStatusLine().toString());
adapterStatus = AdapterStatus.ERROR;
}
HttpEntity httpEntity = response.getEntity();
if (httpEntity != null) {
try {
InputStream inputStream = httpEntity.getContent();
InputStreamReader reader = new InputStreamReader(inputStream);
items = jsonMapper.read(reader, new GenericType(List.class, ItemReference.class));
log.debug("Parsed adapter data source find items");
} catch (Exception e) {
log.error("Problem while parsing the adapter activity execute response: "+e.getMessage(), e);
}
}
// AdapterLog adapterLog = new AdapterLog(executeRequest, executeResponse);
// updateAdapterExecution(adapterStatus, adapterLog);
} catch (IOException e) {
log.error("Problem while connecting to adapter: "+e.getMessage(), e);
}
}
return items;
}
public void updateAdapterExecution(AdapterStatus adapterStatus, AdapterLog adapterLog) {
// TODO
}
public Adapter getAdapter(String adapterId) {
if (adapterId==null || "".equals(adapterId)) {
throw new RuntimeException("Adapter id may not be null or an empty string");
}
List adapters = findAdapters(new AdapterQuery().adapterId(adapterId));
if (adapters.isEmpty()) {
throw new RuntimeException("Adapter '"+adapterId+"' doesn't exist");
}
return adapters.get(0);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy