First version of no-code dashboard widgets

This commit is contained in:
2023-02-13 10:30:51 -06:00
parent d9a17ac99b
commit ff6c2b7fa6
18 changed files with 1659 additions and 66 deletions

View File

@ -26,15 +26,18 @@ import java.io.Serializable;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.time.Instant;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.stream.Collectors;
import com.kingsrook.qqq.backend.core.actions.ActionHelper;
import com.kingsrook.qqq.backend.core.actions.QBackendTransaction;
import com.kingsrook.qqq.backend.core.actions.interfaces.QActionInterface;
import com.kingsrook.qqq.backend.core.exceptions.QException;
import com.kingsrook.qqq.backend.core.exceptions.QValueException;
import com.kingsrook.qqq.backend.core.logging.QLogger;
import com.kingsrook.qqq.backend.core.model.actions.AbstractTableActionInput;
import com.kingsrook.qqq.backend.core.model.actions.tables.aggregate.Aggregate;
@ -715,6 +718,11 @@ public abstract class AbstractRDBMSAction implements QActionInterface
clauses.add("(" + clause + ")");
if(field.getType().equals(QFieldType.DATE_TIME))
{
values = evaluateDateTimeParamValues(values);
}
params.addAll(values);
}
@ -723,6 +731,66 @@ public abstract class AbstractRDBMSAction implements QActionInterface
/*******************************************************************************
**
*******************************************************************************/
private List<Serializable> evaluateDateTimeParamValues(List<Serializable> values)
{
if(CollectionUtils.nullSafeIsEmpty(values))
{
return (values);
}
List<Serializable> rs = new ArrayList<>();
for(Serializable value : values)
{
if(value instanceof Instant)
{
rs.add(value);
}
else
{
try
{
Instant valueAsInstant = ValueUtils.getValueAsInstant(value);
rs.add(valueAsInstant);
}
catch(Exception e)
{
try
{
Optional<Instant> valueAsRelativeInstant = parseValueAsRelativeInstant(value);
rs.add(valueAsRelativeInstant.orElseThrow());
}
catch(Exception e2)
{
throw (new QValueException("Parameter value [" + value + "] could not be evaluated as an absolute or relative Instant"));
}
}
}
}
return (rs);
}
/*******************************************************************************
**
*******************************************************************************/
private Optional<Instant> parseValueAsRelativeInstant(Serializable value)
{
String valueString = ValueUtils.getValueAsString(value);
if(valueString == null)
{
return (Optional.empty());
}
// todo - use parser!!
return Optional.of(Instant.now());
}
/*******************************************************************************
**
*******************************************************************************/