CTLE-433: updates to support extensiv integration

This commit is contained in:
Tim Chamberlain
2023-05-17 20:57:03 -05:00
parent 0b996ef008
commit 7e1a7c7fd7
4 changed files with 60 additions and 101 deletions

View File

@ -35,7 +35,6 @@ import com.kingsrook.qqq.backend.core.actions.dashboard.widgets.NoCodeWidgetRend
import com.kingsrook.qqq.backend.core.actions.tables.InsertAction; import com.kingsrook.qqq.backend.core.actions.tables.InsertAction;
import com.kingsrook.qqq.backend.core.actions.tables.QueryAction; import com.kingsrook.qqq.backend.core.actions.tables.QueryAction;
import com.kingsrook.qqq.backend.core.actions.tables.UpdateAction; import com.kingsrook.qqq.backend.core.actions.tables.UpdateAction;
import com.kingsrook.qqq.backend.core.context.QContext;
import com.kingsrook.qqq.backend.core.exceptions.QException; import com.kingsrook.qqq.backend.core.exceptions.QException;
import com.kingsrook.qqq.backend.core.logging.QLogger; import com.kingsrook.qqq.backend.core.logging.QLogger;
import com.kingsrook.qqq.backend.core.model.actions.processes.ProcessState; import com.kingsrook.qqq.backend.core.model.actions.processes.ProcessState;
@ -66,7 +65,6 @@ import com.kingsrook.qqq.backend.core.state.UUIDAndTypeStateKey;
import com.kingsrook.qqq.backend.core.utils.CollectionUtils; import com.kingsrook.qqq.backend.core.utils.CollectionUtils;
import com.kingsrook.qqq.backend.core.utils.StringUtils; import com.kingsrook.qqq.backend.core.utils.StringUtils;
import com.kingsrook.qqq.backend.core.utils.ValueUtils; import com.kingsrook.qqq.backend.core.utils.ValueUtils;
import com.kingsrook.qqq.backend.core.utils.collections.MapBuilder;
import org.apache.commons.lang.BooleanUtils; import org.apache.commons.lang.BooleanUtils;
@ -114,17 +112,6 @@ public class RunProcessAction
} }
runProcessOutput.setProcessUUID(runProcessInput.getProcessUUID()); runProcessOutput.setProcessUUID(runProcessInput.getProcessUUID());
/////////////////////////////////////////////////////////////////////////////////
// if this process has defined backend variant data, put that into the session //
/////////////////////////////////////////////////////////////////////////////////
if(runProcessInput.getProcessMetaData() != null && runProcessInput.getProcessMetaData().getBackendVariant() != null)
{
String backendVariant = runProcessInput.getProcessMetaData().getBackendVariant();
Serializable backendVariantValue = runProcessInput.getProcessMetaData().getBackendVariantValue();
LOG.trace("Found Backend Variant [" + backendVariant + "] with a value of [" + backendVariantValue + "], putting into QSession.");
QContext.getQSession().setBackendVariants(MapBuilder.of(backendVariant, backendVariantValue));
}
UUIDAndTypeStateKey stateKey = new UUIDAndTypeStateKey(UUID.fromString(runProcessInput.getProcessUUID()), StateType.PROCESS_STATUS); UUIDAndTypeStateKey stateKey = new UUIDAndTypeStateKey(UUID.fromString(runProcessInput.getProcessUUID()), StateType.PROCESS_STATUS);
ProcessState processState = primeProcessState(runProcessInput, stateKey, process); ProcessState processState = primeProcessState(runProcessInput, stateKey, process);

View File

@ -22,7 +22,6 @@
package com.kingsrook.qqq.backend.core.model.metadata.processes; package com.kingsrook.qqq.backend.core.model.metadata.processes;
import java.io.Serializable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
@ -55,9 +54,6 @@ public class QProcessMetaData implements QAppChildMetaData, MetaDataWithPermissi
private BasepullConfiguration basepullConfiguration; private BasepullConfiguration basepullConfiguration;
private QPermissionRules permissionRules; private QPermissionRules permissionRules;
private String backendVariant;
private Serializable backendVariantValue;
private List<QStepMetaData> stepList; // these are the steps that are ran, by-default, in the order they are ran in private List<QStepMetaData> stepList; // these are the steps that are ran, by-default, in the order they are ran in
private Map<String, QStepMetaData> steps; // this is the full map of possible steps private Map<String, QStepMetaData> steps; // this is the full map of possible steps
@ -548,66 +544,4 @@ public class QProcessMetaData implements QAppChildMetaData, MetaDataWithPermissi
qInstance.addProcess(this); qInstance.addProcess(this);
} }
/*******************************************************************************
** Getter for backendVariant
*******************************************************************************/
public String getBackendVariant()
{
return (this.backendVariant);
}
/*******************************************************************************
** Setter for backendVariant
*******************************************************************************/
public void setBackendVariant(String backendVariant)
{
this.backendVariant = backendVariant;
}
/*******************************************************************************
** Fluent setter for backendVariant
*******************************************************************************/
public QProcessMetaData withBackendVariant(String backendVariant)
{
this.backendVariant = backendVariant;
return (this);
}
/*******************************************************************************
** Getter for backendVariantValue
*******************************************************************************/
public Serializable getBackendVariantValue()
{
return (this.backendVariantValue);
}
/*******************************************************************************
** Setter for backendVariantValue
*******************************************************************************/
public void setBackendVariantValue(Serializable backendVariantValue)
{
this.backendVariantValue = backendVariantValue;
}
/*******************************************************************************
** Fluent setter for backendVariantValue
*******************************************************************************/
public QProcessMetaData withBackendVariantValue(Serializable backendVariantValue)
{
this.backendVariantValue = backendVariantValue;
return (this);
}
} }

View File

@ -232,25 +232,7 @@ public abstract class AbstractTableSyncTransformStep extends AbstractTransformSt
/////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////
// query to see if we already have those records in the destination (to determine insert/update) // // query to see if we already have those records in the destination (to determine insert/update) //
/////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////
Map<Serializable, QRecord> existingRecordsByForeignKey = Collections.emptyMap(); Map<Serializable, QRecord> existingRecordsByForeignKey = getExistingRecordsByForeignKey(runBackendStepInput, destinationTableForeignKeyField, destinationTableName, sourceKeyList);
if(!sourceKeyList.isEmpty())
{
QueryInput queryInput = new QueryInput();
queryInput.setTableName(destinationTableName);
getTransaction().ifPresent(queryInput::setTransaction);
QQueryFilter filter = getExistingRecordQueryFilter(runBackendStepInput, sourceKeyList);
queryInput.setFilter(filter);
Collection<String> associationNamesToInclude = getAssociationNamesToInclude();
if(CollectionUtils.nullSafeHasContents(associationNamesToInclude))
{
queryInput.setIncludeAssociations(true);
queryInput.setAssociationNamesToInclude(associationNamesToInclude);
}
QueryOutput queryOutput = new QueryAction().execute(queryInput);
existingRecordsByForeignKey = CollectionUtils.recordsToMap(queryOutput.getRecords(), destinationTableForeignKeyField);
}
///////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////
// foreach source record, build the record we'll insert/update // // foreach source record, build the record we'll insert/update //
@ -348,6 +330,35 @@ public abstract class AbstractTableSyncTransformStep extends AbstractTransformSt
/*******************************************************************************
**
*******************************************************************************/
protected Map<Serializable, QRecord> getExistingRecordsByForeignKey(RunBackendStepInput runBackendStepInput, String destinationTableForeignKeyField, String destinationTableName, List<Serializable> sourceKeyList) throws QException
{
Map<Serializable, QRecord> existingRecordsByForeignKey = Collections.emptyMap();
if(!sourceKeyList.isEmpty())
{
QueryInput queryInput = new QueryInput();
queryInput.setTableName(destinationTableName);
getTransaction().ifPresent(queryInput::setTransaction);
QQueryFilter filter = getExistingRecordQueryFilter(runBackendStepInput, sourceKeyList);
queryInput.setFilter(filter);
Collection<String> associationNamesToInclude = getAssociationNamesToInclude();
if(CollectionUtils.nullSafeHasContents(associationNamesToInclude))
{
queryInput.setIncludeAssociations(true);
queryInput.setAssociationNamesToInclude(associationNamesToInclude);
}
QueryOutput queryOutput = new QueryAction().execute(queryInput);
existingRecordsByForeignKey = CollectionUtils.recordsToMap(queryOutput.getRecords(), destinationTableForeignKeyField);
}
return (existingRecordsByForeignKey);
}
/******************************************************************************* /*******************************************************************************
** **
*******************************************************************************/ *******************************************************************************/

View File

@ -73,6 +73,7 @@ import org.apache.http.HttpEntityEnclosingRequest;
import org.apache.http.HttpResponse; import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus; import org.apache.http.HttpStatus;
import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpEntityEnclosingRequestBase;
import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost; import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpPut; import org.apache.http.client.methods.HttpPut;
@ -103,6 +104,11 @@ public class BaseAPIActionUtil
public enum UpdateHttpMethod
{PUT, POST}
/******************************************************************************* /*******************************************************************************
** **
*******************************************************************************/ *******************************************************************************/
@ -321,8 +327,9 @@ public class BaseAPIActionUtil
{ {
try try
{ {
String url = buildTableUrl(table); String paramString = buildQueryStringForUpdate(table, recordList);
HttpPut request = new HttpPut(url); String url = buildTableUrl(table) + paramString;
HttpEntityEnclosingRequestBase request = getUpdateMethod().equals(UpdateHttpMethod.PUT) ? new HttpPut(url) : new HttpPost(url);
request.setEntity(recordsToEntity(table, recordList)); request.setEntity(recordsToEntity(table, recordList));
QHttpResponse response = makeRequest(table, request); QHttpResponse response = makeRequest(table, request);
@ -537,13 +544,23 @@ public class BaseAPIActionUtil
/*******************************************************************************
** method to build up a query string for updates based on a given QFilter object
**
*******************************************************************************/
protected String buildQueryStringForUpdate(QTableMetaData table, List<QRecord> recordList) throws QException
{
return ("");
}
/******************************************************************************* /*******************************************************************************
** method to build up a query string based on a given QFilter object ** method to build up a query string based on a given QFilter object
** **
*******************************************************************************/ *******************************************************************************/
protected String buildQueryStringForGet(QQueryFilter filter, Integer limit, Integer skip, Map<String, QFieldMetaData> fields) throws QException protected String buildQueryStringForGet(QQueryFilter filter, Integer limit, Integer skip, Map<String, QFieldMetaData> fields) throws QException
{ {
// todo: reasonable default action
return (""); return ("");
} }
@ -1148,4 +1165,14 @@ public class BaseAPIActionUtil
{ {
return (20); return (20);
} }
/*******************************************************************************
**
*******************************************************************************/
protected UpdateHttpMethod getUpdateMethod()
{
return (UpdateHttpMethod.PUT);
}
} }