Skip to content

Commit 04783ac

Browse files
authored
Minor refactor to remove RequestType generic type parameter (#3158)
## Rationale `RequestType` generic type parameter on `Command` is no longer supported ## Related Pull Requests - LabKey/labkey-api-java#95
1 parent 5e71acd commit 04783ac

7 files changed

Lines changed: 79 additions & 34 deletions

File tree

‎src/org/labkey/remoteapi/SimpleFormCommand.java‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
import java.util.List;
2828
import java.util.Map;
2929

30-
public class SimpleFormCommand extends Command<CommandResponse, HttpUriRequest>
30+
public class SimpleFormCommand extends Command<CommandResponse>
3131
{
3232
private final Map<String, String> _formData;
3333

‎src/org/labkey/remoteapi/query/ImportExperimentDataCommand.java‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@ public class ImportExperimentDataCommand extends ImportDataCommand
2828
{
2929
private AuditLogHelper.AuditBehaviorType _auditBehavior;
3030
private Boolean _crossTypeImport;
31-
private String _containerPath;
31+
32+
private final String _containerPath;
3233

3334
public ImportExperimentDataCommand(String schemaName, String queryName, String containerPath)
3435
{
@@ -76,5 +77,4 @@ protected HttpPost createRequest(URI uri) {
7677
}
7778
return post;
7879
}
79-
8080
}

‎src/org/labkey/test/stress/ApiTestCommand.java‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
import java.io.Reader;
3535
import java.net.URI;
3636

37-
class ApiTestCommand extends Command<CommandResponse, HttpUriRequest>
37+
class ApiTestCommand extends Command<CommandResponse>
3838
{
3939
private final String _url;
4040
private final String _type;

‎src/org/labkey/test/tests/ClientAPITest.java‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717

1818
import org.apache.commons.lang3.StringUtils;
1919
import org.apache.commons.lang3.math.NumberUtils;
20-
import org.apache.hc.client5.http.classic.methods.HttpGet;
20+
import org.apache.hc.client5.http.classic.methods.HttpUriRequest;
2121
import org.jetbrains.annotations.NotNull;
2222
import org.jetbrains.annotations.Nullable;
2323
import org.json.JSONObject;
@@ -58,9 +58,9 @@
5858
import org.labkey.test.util.PortalHelper;
5959
import org.labkey.test.util.StudyHelper;
6060
import org.labkey.test.util.TestDataGenerator;
61-
import org.labkey.test.util.data.TestDataUtils;
6261
import org.labkey.test.util.UIUserHelper;
6362
import org.labkey.test.util.WikiHelper;
63+
import org.labkey.test.util.data.TestDataUtils;
6464
import org.labkey.test.util.query.QueryUtils;
6565
import org.openqa.selenium.JavascriptExecutor;
6666
import org.openqa.selenium.TimeoutException;
@@ -1481,9 +1481,9 @@ private void runCommand(Connection cn, SimpleGetCommand source, String requestCo
14811481
SimpleGetCommand cmd = new SimpleGetCommand(source.getControllerName(), source.getActionName())
14821482
{
14831483
@Override
1484-
protected HttpGet getHttpRequest(Connection connection, String folderPath) throws URISyntaxException
1484+
protected HttpUriRequest getHttpRequest(Connection connection, String folderPath) throws URISyntaxException
14851485
{
1486-
HttpGet request = super.getHttpRequest(connection, folderPath);
1486+
HttpUriRequest request = super.getHttpRequest(connection, folderPath);
14871487
request.setHeader("Content-Type", requestContentType);
14881488

14891489
return request;

‎src/org/labkey/test/tests/JavaClientApiTest.java‎

Lines changed: 63 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,9 @@
3131
import org.labkey.remoteapi.domain.GetDomainDetailsCommand;
3232
import org.labkey.remoteapi.domain.PropertyDescriptor;
3333
import org.labkey.remoteapi.domain.SaveDomainCommand;
34+
import org.labkey.remoteapi.query.BaseQueryCommand;
3435
import org.labkey.remoteapi.query.DeleteRowsCommand;
36+
import org.labkey.remoteapi.query.ExecuteSqlCommand;
3537
import org.labkey.remoteapi.query.Filter;
3638
import org.labkey.remoteapi.query.InsertRowsCommand;
3739
import org.labkey.remoteapi.query.SaveRowsResponse;
@@ -70,6 +72,7 @@
7072
import org.labkey.test.util.PermissionsHelper.PrincipalType;
7173
import org.labkey.test.util.PortalHelper;
7274

75+
import java.io.IOException;
7376
import java.util.ArrayList;
7477
import java.util.Arrays;
7578
import java.util.Collections;
@@ -570,7 +573,7 @@ public void testImpersonateUser() throws Exception
570573
// stop impersonation
571574
StopImpersonatingCommand stopCmd = new StopImpersonatingCommand();
572575
CommandResponse stopResp = stopCmd.execute(cn, PROJECT_NAME);
573-
assertEquals(302, stopResp.getStatusCode());
576+
assertEquals(200, stopResp.getStatusCode());
574577

575578
// check whoami
576579
who = new WhoAmICommand().execute(cn, PROJECT_NAME);
@@ -608,6 +611,7 @@ public void testImpersonationConnection() throws Exception
608611
cn.stopImpersonating();
609612
}
610613

614+
// Also tests SelectRowCommand and ExecuteSqlCommand
611615
@Test
612616
public void testSaveRowsApiCommand() throws Exception
613617
{
@@ -741,18 +745,7 @@ public void testSaveRowsApiCommand() throws Exception
741745
// Verify players list after operations
742746
{
743747
var selectRowsCommand = new SelectRowsCommand(schemaName, playersListName);
744-
selectRowsCommand.addSort(new Sort("JerseyNumber", Sort.Direction.ASCENDING));
745-
746-
var resp = selectRowsCommand.execute(conn, PROJECT_NAME);
747-
assertEquals(3, resp.getRowCount());
748-
749-
var players = resp.getRows();
750-
assertEquals(19, players.get(0).get("jerseyNumber")); // verify case-insensitive
751-
assertEquals("Seattle Mariners", players.get(0).get("Team"));
752-
assertEquals(24, players.get(1).get("Jerseynumber")); // verify case-insensitive
753-
assertEquals("Seattle Mariners", players.get(1).get("Team"));
754-
assertEquals(44, players.get(2).get("JerseyNumber"));
755-
assertEquals("New York Yankees", players.get(2).get("Team"));
748+
verifyJerseys(conn, selectRowsCommand, 3);
756749
}
757750

758751
// Verify teams list after operations
@@ -773,6 +766,63 @@ public void testSaveRowsApiCommand() throws Exception
773766
assertEquals("San Francisco", teams.get(2).get("City"));
774767
assertEquals("Giants", teams.get(2).get("Team"));
775768
}
769+
770+
// Test ExecuteSqlCommand basic SELECT
771+
{
772+
var executeSqlCommand = new ExecuteSqlCommand(schemaName, "SELECT * FROM " + schemaName + "." + ExecuteSqlCommand.quoteIdentifier(playersListName));
773+
var resp = verifyJerseys(conn, executeSqlCommand, 3);
774+
// setIncludeMetadata(true), the default, should result in metadata and column model
775+
assertNotNull(resp.getMetaData());
776+
assertNotNull(resp.getColumnModel()); // setIncludeMetadata(true), the default
777+
}
778+
779+
// Test ExecuteSqlCommand includeMetadata, offset, and maxRows properties
780+
{
781+
var executeSqlCommand = new ExecuteSqlCommand(schemaName, "SELECT * FROM " + schemaName + "." + ExecuteSqlCommand.quoteIdentifier(playersListName));
782+
executeSqlCommand.addSort(new Sort("JerseyNumber", Sort.Direction.ASCENDING));
783+
executeSqlCommand.setIncludeMetadata(false);
784+
executeSqlCommand.setOffset(2);
785+
executeSqlCommand.setMaxRows(1);
786+
var resp = verifyJerseys(conn, executeSqlCommand, 1);
787+
// setIncludeMetadata(false) should result in no metadata or column model
788+
assertNull(resp.getMetaData());
789+
assertNull(resp.getColumnModel());
790+
}
791+
792+
// Test ExecuteSqlCommand parameterized query
793+
{
794+
var executeSqlCommand = new ExecuteSqlCommand(schemaName,
795+
"PARAMETERS\n" +
796+
"(\n" +
797+
" Number INTEGER\n" +
798+
")\nSELECT * FROM " + schemaName + "." + ExecuteSqlCommand.quoteIdentifier(playersListName) +
799+
"\nWHERE JerseyNumber = Number");
800+
executeSqlCommand.setQueryParameters(Map.of("Number", "44"));
801+
verifyJerseys(conn, executeSqlCommand, 1);
802+
}
803+
}
804+
805+
private SelectRowsResponse verifyJerseys(Connection conn, BaseQueryCommand<SelectRowsResponse> command, int expectedCount) throws IOException, CommandException
806+
{
807+
command.addSort(new Sort("JerseyNumber", Sort.Direction.ASCENDING));
808+
var resp = command.execute(conn, PROJECT_NAME);
809+
var players = resp.getRows();
810+
assertEquals(expectedCount, players.size());
811+
812+
// Phelps (the Yankee) is always the last player
813+
var lastPlayer = players.getLast();
814+
assertEquals(44, lastPlayer.get("JerseyNumber"));
815+
assertEquals("New York Yankees", lastPlayer.get("Team"));
816+
817+
if (expectedCount == 3)
818+
{
819+
assertEquals(19, players.get(0).get("jerseyNumber")); // verify case-insensitive
820+
assertEquals("Seattle Mariners", players.get(0).get("Team"));
821+
assertEquals(24, players.get(1).get("Jerseynumber")); // verify case-insensitive
822+
assertEquals("Seattle Mariners", players.get(1).get("Team"));
823+
}
824+
825+
return resp;
776826
}
777827

778828
@Override

‎src/org/labkey/test/tests/SimpleModuleTest.java‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -446,7 +446,7 @@ private void doTestColumnValidators() throws Exception
446446
deleteCmd.execute(createDefaultConnection(), getProjectName());
447447
}
448448

449-
private void submitAndTestExpectedFailure(Command<?, ?> cmd, String expectedError) throws Exception
449+
private void submitAndTestExpectedFailure(Command<?> cmd, String expectedError) throws Exception
450450
{
451451
try
452452
{

‎src/org/labkey/test/tests/list/ListTest.java‎

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -958,7 +958,7 @@ private int lookupListAuditRowId(Connection cn, String listName) throws Exceptio
958958
SelectRowsResponse rs = cmd.execute(cn, getProjectName());
959959
if (rs.getRows().isEmpty())
960960
throw new AssertionError("No ListAuditEvent for " + listName);
961-
return ((Number) rs.getRows().get(0).get("RowId")).intValue();
961+
return ((Number) rs.getRows().getFirst().get("RowId")).intValue();
962962
}
963963

964964
/* Issue 23487: add regression coverage for batch insert into list with multiple errors
@@ -1092,9 +1092,9 @@ public void testRemoveColumnOverAPI() throws Exception
10921092
public void testChangeListNameOverAPI() throws Exception
10931093
{
10941094
List<FieldDefinition> cols = Arrays.asList(
1095-
new FieldDefinition("name", ColumnType.String),
1096-
new FieldDefinition("title", ColumnType.String),
1097-
new FieldDefinition("dewey", ColumnType.Decimal)
1095+
new FieldDefinition("name", ColumnType.String),
1096+
new FieldDefinition("title", ColumnType.String),
1097+
new FieldDefinition("dewey", ColumnType.Decimal)
10981098
);
10991099
String listName = "remoteAPIBeforeRename";
11001100
TestDataGenerator dgen = new TestDataGenerator("lists", listName, getProjectName())
@@ -1114,7 +1114,6 @@ public void testChangeListNameOverAPI() throws Exception
11141114
@Test
11151115
public void testChangeListName()
11161116
{
1117-
11181117
String listNameBefore = TestDataGenerator.randomDomainName("Before Rename", DomainUtils.DomainKind.IntList);
11191118

11201119
_listHelper.createList(PROJECT_VERIFY, listNameBefore,
@@ -1962,19 +1961,19 @@ private List<Map<String, Object>> getListAuditEventsSince(String listName, int p
19621961
).getRows();
19631962
}
19641963

1965-
private List<String> getQueryFormFieldNamesDecoded()
1964+
private List<String> getQueryFormFieldNamesDecoded()
19661965
{
19671966
ArrayList<String> ret = new ArrayList<>();
19681967
Locator.tag("input").attributeStartsWith("name", "quf_")
19691968
.findElements(getDriver()).stream()
19701969
.map(el -> el.getDomAttribute("name"))
19711970
.map(s -> s.substring(4))
1972-
.forEach(name -> ret.add(name));
1971+
.forEach(ret::add);
19731972
Locator.tag("input").attributeStartsWith("name", "%_quf_")
19741973
.findElements(getDriver()).stream()
19751974
.map(el -> el.getDomAttribute("name"))
19761975
.map(name -> EscapeUtil.decode(name.substring(6)))
1977-
.forEach(name -> ret.add(name));
1976+
.forEach(ret::add);
19781977
return ret;
19791978
}
19801979

@@ -2017,12 +2016,10 @@ public void testTrickyCharacterFields() throws IOException
20172016
// These validate Issue 52069 Issue 52070 Issue 52071
20182017
testTricky("Tricky Field Character", false);
20192018
testTricky("TrickyField Character Auto Key", true);
2020-
20212019
}
20222020

20232021
private void testTricky(String listName, boolean autoKey) throws IOException
20242022
{
2025-
20262023
String keyField = "Key Field \"`~!@#$%^&*()_-+={}[]|\\:;<>,.?/\u5668\u9aa8";
20272024
String keyField_Bulk = "\"" + keyField.replace("\"", "\"\"") + "\"" ;
20282025
String intField = "Int Field \"`~!@#$%^&*()_-+={}[]|\\:;<>,.?/\u00a5\u00e6";
@@ -2141,7 +2138,6 @@ private void testTricky(String listName, boolean autoKey) throws IOException
21412138
expectedValues.add(Map.of(EscapeUtil.fieldKeyEncodePart(keyField), "3",
21422139
EscapeUtil.fieldKeyEncodePart(intField), "300",
21432140
EscapeUtil.fieldKeyEncodePart(trickyField), "303"));
2144-
21452141
}
21462142
else
21472143
{
@@ -2232,7 +2228,6 @@ private void testTricky(String listName, boolean autoKey) throws IOException
22322228
assertEquals(String.format("Row detail for column '%s' not as expected.", expectedFields.get(i)),
22332229
expectedFields.get(i), actualFields.get(i));
22342230
}
2235-
22362231
}
22372232

22382233
private void validateDataRegionTableForTricky(List<Map<String, String>> expectedValue)

0 commit comments

Comments
 (0)