
org.spin.eca46.util.support.DKron Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of adempiere-business-processors Show documentation
Show all versions of adempiere-business-processors Show documentation
A project to convert all processors to process and call it from extern services
The newest version!
/*************************************************************************************
* Product: Adempiere ERP & CRM Smart Business Solution *
* Copyright (C) 2012-2018 E.R.P. Consultores y Asociados, C.A. *
* Contributor(s): Yamel Senih [email protected] *
* This program is free software: you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation, either version 3 of the License, or *
* (at your option) any later version. *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* You should have received a copy of the GNU General Public License *
* along with this program. If not, see . *
************************************************************************************/
package org.spin.eca46.util.support;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Entity;
import javax.ws.rs.client.Invocation;
import javax.ws.rs.core.HttpHeaders;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import org.adempiere.exceptions.AdempiereException;
import org.compiere.model.MScheduler;
import org.compiere.util.Env;
import org.compiere.util.Util;
import org.glassfish.jersey.client.ClientConfig;
import org.glassfish.jersey.client.HttpUrlConnectorProvider;
import org.json.JSONObject;
import org.spin.model.MADAppRegistration;
/**
* Util class for some helper methods
* @author Yamel Senih, [email protected], ERPCyA http://www.erpya.com
*/
public class DKron implements IExternalProcessor {
/** dKron Host */
private String dKronHost = null;
/** ADempier Token */
private String adempiereToken = null;
/** ADempiere Host */
private String adempiereHost = null;
/** ADempiere Endpoint */
private String adempiereEndpoint = null;
/** Registration Id */
private int registrationId = 0;
private final String ADEMPIERE_ENDPOINT = "adempiere_endpoint";
/**
* Validate connection
*/
private void validate() {
if(getAppRegistrationId() <= 0) {
throw new AdempiereException("@AD_AppRegistration_ID@ @NotFound@");
}
MADAppRegistration registration = MADAppRegistration.getById(Env.getCtx(), getAppRegistrationId(), null);
adempiereEndpoint = registration.getParameterValue(ADEMPIERE_ENDPOINT);
dKronHost = registration.getHost();
if(registration.getPort() > 0) {
dKronHost = dKronHost + ":" + registration.getPort();
}
}
@Override
public String testConnection() {
return "Ok";
}
@Override
public void setAppRegistrationId(int registrationId) {
this.registrationId = registrationId;
validate();
}
@Override
public int getAppRegistrationId() {
return registrationId;
}
@Override
public String exportProcessor(IProcessorEntity processor) {
// dKron Host
if(Util.isEmpty(dKronHost)) {
throw new AdempiereException("@Host@ @NotFound@");
}
// ADempiere Host
if(Util.isEmpty(adempiereHost)) {
throw new AdempiereException("ADempiere @Host@ @NotFound@");
}
// ADempiere Token
if(Util.isEmpty(adempiereToken)) {
throw new AdempiereException("@Token@ @NotFound@");
}
// ADempiere Endpoint
if(Util.isEmpty(adempiereEndpoint)) {
throw new AdempiereException("@Endpoint@ @NotFound@");
}
Invocation.Builder invocationBuilder = getClient().target(dKronHost)
.path("v1")
.path("jobs")
.request(MediaType.APPLICATION_JSON)
.header(HttpHeaders.ACCEPT, "application/json");
//
JSONObject jsonValue = new JSONObject(getRequestDefinition(processor));
Entity entity = Entity.json(jsonValue.toString());
Response response = invocationBuilder.post(entity);
if(response.getStatus() != 201
|| response.getStatus() != 200) {
String output = response.readEntity(String.class);
return output;
}
return null;
}
/**
* Get Definition for dKron request
* @param processor
* @return
*/
private Map getRequestDefinition(IProcessorEntity processor) {
Map data = new HashMap<>();
data.put("name", processor.getIdentifier());
data.put("displayname", processor.getDisplayName());
data.put("schedule", getSchedule(processor));
data.put("timezone", processor.getTimeZone());
data.put("disabled", !processor.isEnabled());
data.put("retries", 0);
data.put("concurrency", "forbid");
data.put("executor", "http");
Map executorConfig = new HashMap<>();
executorConfig.put("method", "POST");
executorConfig.put("url", getAdempiereService());
List headers = new ArrayList<>();
headers.add("\"Authorization: Bearer " + adempiereToken + "\"");
headers.add("\"Content-Type: application/json\"");
executorConfig.put("headers", headers.toString());
Map process = new HashMap<>();
process.put("\"process_code\"", "\"" + processor.getProcessCode() + "\"");
Map parameters = new HashMap<>();
parameters.put("\"key\"", "\"" + processor.getProcessorParameterCode() + "\"");
parameters.put("\"integer_value\"", processor.getProcessorParameterId());
List parameterList = new ArrayList<>();
parameterList.add(parameters.toString());
process.put("\"parameters\"", parameterList.toString());
Map body = new HashMap<>();
body.put("\"process\"", process.toString());
executorConfig.put("body", body.toString().replaceAll("=", ": "));
executorConfig.put("timeout", "60000");
executorConfig.put("expectCode", "200");
executorConfig.put("expectBody", "");
executorConfig.put("debug", "false");
data.put("executor_config", executorConfig);
return data;
}
private String getSchedule(IProcessorEntity processor) {
String schedule = null;
if(processor.getFrequency() <= 0) {
switch (processor.getFrequencyType()) {
case MScheduler.FREQUENCYTYPE_Hour:
schedule = "@hourly";
break;
case MScheduler.FREQUENCYTYPE_Minute:
schedule = "@minutely";
break;
case MScheduler.FREQUENCYTYPE_Secound:
schedule = "@every 1s";
break;
case MScheduler.FREQUENCYTYPE_Yearly:
schedule = "@yearly";
break;
case MScheduler.FREQUENCYTYPE_Monthly:
schedule = "@monthly";
break;
case MScheduler.FREQUENCYTYPE_Weekly:
schedule = "@weekly";
break;
case MScheduler.FREQUENCYTYPE_Day:
schedule = "@daily";
break;
case MScheduler.FREQUENCYTYPE_Biweekly:
schedule = "@every 48h";
break;
case MScheduler.FREQUENCYTYPE_Quarterly:
schedule = "@every 48h";
break;
default:
// Default hours
schedule = "@every " + processor.getFrequency() + "h";
break;
}
} else {
switch (processor.getFrequencyType()) {
case MScheduler.FREQUENCYTYPE_Hour:
schedule = "@every " + processor.getFrequency() + "h";
break;
case MScheduler.FREQUENCYTYPE_Minute:
schedule = "@every " + processor.getFrequency() + "m";
break;
case MScheduler.FREQUENCYTYPE_Secound:
schedule = "@every " + processor.getFrequency() + "s";
break;
case MScheduler.FREQUENCYTYPE_Yearly:
schedule = "@every " + processor.getFrequency() + "h";
break;
case MScheduler.FREQUENCYTYPE_Monthly:
schedule = "@every " + (processor.getFrequency() * 24 * 30) + "h";
break;
case MScheduler.FREQUENCYTYPE_Weekly:
schedule = "@every " + (processor.getFrequency() * 24 * 7) + "h";
break;
case MScheduler.FREQUENCYTYPE_Day:
schedule = "@every " + (processor.getFrequency() * 24) + "h";
break;
case MScheduler.FREQUENCYTYPE_Biweekly:
schedule = "@every " + (processor.getFrequency() * 24 * 60) + "h";
break;
case MScheduler.FREQUENCYTYPE_Quarterly:
schedule = "@every " + (processor.getFrequency() * 24 * 60) + "h";
break;
default:
// Default hours
schedule = "@every " + processor.getFrequency() + "h";
break;
}
}
return schedule;
}
/**
* Get client
* @return
*/
public Client getClient() {
return ClientBuilder.newClient(new ClientConfig())
.property(HttpUrlConnectorProvider.SET_METHOD_WORKAROUND, true);
}
@Override
public void setTokenAccess(String token) {
adempiereToken = token;
}
@Override
public void setHost(String host) {
adempiereHost = host;
}
private String getAdempiereService() {
return adempiereHost + adempiereEndpoint;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy