Initial checkin - WIP

This commit is contained in:
2023-05-05 16:57:54 -05:00
parent 6acf0bf93a
commit cc765c66d6
6 changed files with 394 additions and 31 deletions

View File

@ -0,0 +1,65 @@
/*
* QQQ - Low-code Application Framework for Engineers.
* Copyright (C) 2021-2022. Kingsrook, LLC
* 651 N Broad St Ste 205 # 6917 | Middletown DE 19709 | United States
* contact@kingsrook.com
* https://github.com/Kingsrook/
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero 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 Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.kingsrook.qqq.backend.core.actions.customizers;
import java.util.List;
import com.kingsrook.qqq.backend.core.model.actions.tables.delete.DeleteInput;
import com.kingsrook.qqq.backend.core.model.data.QRecord;
/*******************************************************************************
**
*******************************************************************************/
public abstract class AbstractPostDeleteCustomizer
{
protected DeleteInput deleteInput;
/*******************************************************************************
**
*******************************************************************************/
public abstract List<QRecord> apply(List<QRecord> records);
/*******************************************************************************
** Getter for deleteInput
**
*******************************************************************************/
public DeleteInput getDeleteInput()
{
return deleteInput;
}
/*******************************************************************************
** Setter for deleteInput
**
*******************************************************************************/
public void setDeleteInput(DeleteInput deleteInput)
{
this.deleteInput = deleteInput;
}
}

View File

@ -0,0 +1,111 @@
/*
* QQQ - Low-code Application Framework for Engineers.
* Copyright (C) 2021-2022. Kingsrook, LLC
* 651 N Broad St Ste 205 # 6917 | Middletown DE 19709 | United States
* contact@kingsrook.com
* https://github.com/Kingsrook/
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero 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 Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.kingsrook.qqq.backend.core.actions.customizers;
import java.io.Serializable;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.kingsrook.qqq.backend.core.model.actions.tables.update.UpdateInput;
import com.kingsrook.qqq.backend.core.model.data.QRecord;
/*******************************************************************************
**
*******************************************************************************/
public abstract class AbstractPostUpdateCustomizer
{
protected UpdateInput updateInput;
protected List<QRecord> oldRecordList;
private Map<Serializable, QRecord> oldRecordMap = null;
/*******************************************************************************
**
*******************************************************************************/
public abstract List<QRecord> apply(List<QRecord> records);
/*******************************************************************************
** Getter for updateInput
**
*******************************************************************************/
public UpdateInput getUpdateInput()
{
return updateInput;
}
/*******************************************************************************
** Setter for updateInput
**
*******************************************************************************/
public void setUpdateInput(UpdateInput updateInput)
{
this.updateInput = updateInput;
}
/*******************************************************************************
**
*******************************************************************************/
public void setOldRecordList(List<QRecord> oldRecordList)
{
this.oldRecordList = oldRecordList;
}
/*******************************************************************************
**
*******************************************************************************/
public List<QRecord> getOldRecordList()
{
return oldRecordList;
}
/*******************************************************************************
**
*******************************************************************************/
protected Map<Serializable, QRecord> getOldRecordMap()
{
if(oldRecordMap == null)
{
oldRecordMap = new HashMap<>();
for(QRecord qRecord : oldRecordList)
{
oldRecordMap.put(qRecord.getValue(updateInput.getTable().getPrimaryKeyField()), qRecord);
}
}
return (oldRecordMap);
}
}

View File

@ -0,0 +1,65 @@
/*
* QQQ - Low-code Application Framework for Engineers.
* Copyright (C) 2021-2022. Kingsrook, LLC
* 651 N Broad St Ste 205 # 6917 | Middletown DE 19709 | United States
* contact@kingsrook.com
* https://github.com/Kingsrook/
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero 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 Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.kingsrook.qqq.backend.core.actions.customizers;
import java.util.List;
import com.kingsrook.qqq.backend.core.model.actions.tables.delete.DeleteInput;
import com.kingsrook.qqq.backend.core.model.data.QRecord;
/*******************************************************************************
**
*******************************************************************************/
public abstract class AbstractPreDeleteCustomizer
{
protected DeleteInput deleteInput;
/*******************************************************************************
**
*******************************************************************************/
public abstract List<QRecord> apply(List<QRecord> records);
/*******************************************************************************
** Getter for deleteInput
**
*******************************************************************************/
public DeleteInput getDeleteInput()
{
return deleteInput;
}
/*******************************************************************************
** Setter for deleteInput
**
*******************************************************************************/
public void setDeleteInput(DeleteInput deleteInput)
{
this.deleteInput = deleteInput;
}
}

View File

@ -22,29 +22,51 @@
package com.kingsrook.qqq.backend.core.actions.customizers; package com.kingsrook.qqq.backend.core.actions.customizers;
import java.util.function.Consumer; import java.io.Serializable;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.kingsrook.qqq.backend.core.model.actions.tables.update.UpdateInput;
import com.kingsrook.qqq.backend.core.model.data.QRecord;
/******************************************************************************* /*******************************************************************************
** Object used by TableCustomizers enum (and similar enums in backend modules) **
** to assist with definition and validation of Customizers applied to tables.
*******************************************************************************/ *******************************************************************************/
public class TableCustomizer public abstract class AbstractPreUpdateCustomizer
{ {
private final String role; protected UpdateInput updateInput;
private final Class<?> expectedType; protected List<QRecord> oldRecordList;
private final Consumer<Object> validationFunction;
private Map<Serializable, QRecord> oldRecordMap = null;
/******************************************************************************* /*******************************************************************************
** **
*******************************************************************************/ *******************************************************************************/
public TableCustomizer(String role, Class<?> expectedType, Consumer<Object> validationFunction) public abstract List<QRecord> apply(List<QRecord> records);
/*******************************************************************************
** Getter for updateInput
**
*******************************************************************************/
public UpdateInput getUpdateInput()
{ {
this.role = role; return updateInput;
this.expectedType = expectedType; }
this.validationFunction = validationFunction;
/*******************************************************************************
** Setter for updateInput
**
*******************************************************************************/
public void setUpdateInput(UpdateInput updateInput)
{
this.updateInput = updateInput;
} }
@ -52,43 +74,38 @@ public class TableCustomizer
/******************************************************************************* /*******************************************************************************
** **
*******************************************************************************/ *******************************************************************************/
public TableCustomizer(String role, Class<?> expectedType) public void setOldRecordList(List<QRecord> oldRecordList)
{ {
this.role = role; this.oldRecordList = oldRecordList;
this.expectedType = expectedType;
this.validationFunction = null;
} }
/******************************************************************************* /*******************************************************************************
** Getter for role
** **
*******************************************************************************/ *******************************************************************************/
public String getRole() public List<QRecord> getOldRecordList()
{ {
return role; return oldRecordList;
} }
/******************************************************************************* /*******************************************************************************
** Getter for expectedType
** **
*******************************************************************************/ *******************************************************************************/
public Class<?> getExpectedType() protected Map<Serializable, QRecord> getOldRecordMap()
{ {
return expectedType; if(oldRecordMap == null)
{
oldRecordMap = new HashMap<>();
for(QRecord qRecord : oldRecordList)
{
oldRecordMap.put(qRecord.getValue(updateInput.getTable().getPrimaryKeyField()), qRecord);
}
} }
return (oldRecordMap);
/*******************************************************************************
** Getter for validationFunction
**
*******************************************************************************/
public Consumer<Object> getValidationFunction()
{
return validationFunction;
} }
} }

View File

@ -0,0 +1,68 @@
/*
* QQQ - Low-code Application Framework for Engineers.
* Copyright (C) 2021-2023. Kingsrook, LLC
* 651 N Broad St Ste 205 # 6917 | Middletown DE 19709 | United States
* contact@kingsrook.com
* https://github.com/Kingsrook/
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero 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 Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.kingsrook.qqq.backend.core.actions.customizers;
import java.util.List;
import com.kingsrook.qqq.backend.core.BaseTest;
import com.kingsrook.qqq.backend.core.context.QContext;
import com.kingsrook.qqq.backend.core.model.data.QRecord;
import com.kingsrook.qqq.backend.core.model.metadata.code.QCodeReference;
import com.kingsrook.qqq.backend.core.model.metadata.tables.QTableMetaData;
import com.kingsrook.qqq.backend.core.utils.TestUtils;
import org.junit.jupiter.api.Test;
/*******************************************************************************
** Unit test for AbstractPreUpdateCustomizer
*******************************************************************************/
class AbstractPreUpdateCustomizerTest extends BaseTest
{
/*******************************************************************************
**
*******************************************************************************/
@Test
void test()
{
QTableMetaData table = QContext.getQInstance().getTable(TestUtils.TABLE_NAME_PERSON_MEMORY);
table.withCustomizer(TableCustomizers.PRE_UPDATE_RECORD.getRole(), new QCodeReference(PreUpdate.class));
}
/*******************************************************************************
**
*******************************************************************************/
private static class PreUpdate extends AbstractPreUpdateCustomizer
{
/*******************************************************************************
**
*******************************************************************************/
@Override
public List<QRecord> apply(List<QRecord> records)
{
return null;
}
}
}

View File

@ -0,0 +1,37 @@
/*
* QQQ - Low-code Application Framework for Engineers.
* Copyright (C) 2021-2023. Kingsrook, LLC
* 651 N Broad St Ste 205 # 6917 | Middletown DE 19709 | United States
* contact@kingsrook.com
* https://github.com/Kingsrook/
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero 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 Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.kingsrook.qqq.backend.module.filesystem.base.actions;
/*******************************************************************************
** after a file is read, "customize" its contents - e.g., do regex, or append
** contents, or do whatever we like to it.
*******************************************************************************/
public abstract class AbstractPostReadFileCustomizer
{
/*******************************************************************************
**
*******************************************************************************/
public abstract String customizeFileContents(String s);
}