Skip to content

Commit 1f0ec4d

Browse files
authored
Make the "Public" column on the ExperimentAnnotations tableinfo an ExprColumn (#405)
Make "Public" column in the ExperimentAnnotations table an ExprColumn so that it can be sorted and filtered.
1 parent 68c2026 commit 1f0ec4d

File tree

2 files changed

+36
-47
lines changed

2 files changed

+36
-47
lines changed

panoramapublic/src/org/labkey/panoramapublic/query/ExperimentAnnotationsTableInfo.java

Lines changed: 16 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
import org.labkey.api.security.permissions.Permission;
5252
import org.labkey.api.security.roles.FolderAdminRole;
5353
import org.labkey.api.security.roles.ProjectAdminRole;
54+
import org.labkey.api.security.roles.ReaderRole;
5455
import org.labkey.api.security.roles.Role;
5556
import org.labkey.api.security.roles.RoleManager;
5657
import org.labkey.api.settings.AppProps;
@@ -236,53 +237,7 @@ public void renderGridCellContents(RenderContext ctx, Writer out) throws IOExcep
236237
runCountColumn.setLabel("Skyline Docs");
237238
addColumn(runCountColumn);
238239

239-
var isPublicCol = wrapColumn("Public", getRealTable().getColumn("Id"));
240-
isPublicCol.setDisplayColumnFactory(colInfo -> new DataColumn(colInfo)
241-
{
242-
@Override
243-
public Object getValue(RenderContext ctx)
244-
{
245-
Integer experimentAnnotationsId = ctx.get(colInfo.getFieldKey(), Integer.class);
246-
ExperimentAnnotations expAnnotations = ExperimentAnnotationsManager.get(experimentAnnotationsId);
247-
if(expAnnotations != null)
248-
{
249-
return expAnnotations.isPublic() ? "Yes" : "No";
250-
}
251-
return "Row not found in ExperimentAnnotations for id " + experimentAnnotationsId;
252-
}
253-
@Override
254-
public Object getDisplayValue(RenderContext ctx)
255-
{
256-
return getValue(ctx);
257-
}
258-
@Override
259-
public @NotNull HtmlString getFormattedHtml(RenderContext ctx)
260-
{
261-
return HtmlString.of((String)getValue(ctx));
262-
}
263-
@Override
264-
public Class getValueClass()
265-
{
266-
return String.class;
267-
}
268-
@Override
269-
public Class getDisplayValueClass()
270-
{
271-
return String.class;
272-
}
273-
274-
@Override
275-
public boolean isFilterable()
276-
{
277-
return false;
278-
}
279-
280-
@Override
281-
public boolean isSortable()
282-
{
283-
return false;
284-
}
285-
});
240+
var isPublicCol = getIsPublicCol();
286241
addColumn(isPublicCol);
287242

288243
var licenseCol = wrapColumn("Data License", getRealTable().getColumn("Id"));
@@ -430,6 +385,20 @@ private ExprColumn getCatalogEntryCol()
430385
return col;
431386
}
432387

388+
private ExprColumn getIsPublicCol()
389+
{
390+
// Panorama Public dataset folders do not inherit permissions from the parent folder, so we don't need to worry about that case.
391+
SQLFragment isPublicColSql = new SQLFragment(" (SELECT CASE WHEN EXISTS (SELECT 1 FROM ")
392+
.append(CoreSchema.getInstance().getTableInfoRoleAssignments())
393+
.append(" WHERE userId = ? AND role = ? AND resourceId = ").append(ExprColumn.STR_TABLE_ALIAS + ".Container").append(")")
394+
.append(" THEN 'Yes' ELSE 'No' END ) ")
395+
.add(Group.groupGuests)
396+
.add(ReaderRole.class.getName());
397+
398+
ExprColumn isPublicCol = new ExprColumn(this, "Public", isPublicColSql, JdbcType.VARCHAR);
399+
return isPublicCol;
400+
}
401+
433402
@Override
434403
public String getName()
435404
{

panoramapublic/test/src/org/labkey/test/tests/panoramapublic/PanoramaPublicMakePublicTest.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import org.labkey.test.components.panoramapublic.TargetedMsExperimentWebPart;
1414
import org.labkey.test.pages.admin.PermissionsPage;
1515
import org.labkey.test.util.ApiPermissionsHelper;
16+
import org.labkey.test.util.DataRegionTable;
1617
import org.labkey.test.util.Ext4Helper;
1718
import org.labkey.test.util.PermissionsHelper;
1819
import org.openqa.selenium.NoSuchElementException;
@@ -42,6 +43,7 @@ public void testExperimentCopy()
4243
String experimentTitle = "This is an experiment to test making data public";
4344
String shortAccessUrl = setupFolderSubmitAndCopy(projectName, folderName, targetFolder, experimentTitle);
4445

46+
verifyIsPublicColumn(PANORAMA_PUBLIC, experimentTitle, false);
4547
verifyPermissions(projectName, folderName, PANORAMA_PUBLIC, targetFolder);
4648

4749
// Verify that the submitter can make the data public
@@ -63,6 +65,8 @@ public void testExperimentCopy()
6365
verifyMakePublic(PANORAMA_PUBLIC, targetFolder, SUBMITTER, true, true);
6466
verifyMakePublic(PANORAMA_PUBLIC, v1Folder, ADMIN_2, false);
6567

68+
verifyIsPublicColumn(PANORAMA_PUBLIC, experimentTitle, true);
69+
6670
// Data has been made public, and publication link and citation have been added. User should not able to resubmit
6771
goToProjectFolder(projectName, folderName);
6872
impersonate(SUBMITTER);
@@ -223,6 +227,22 @@ private void verifyPermissions(String userProject, String userFolder, String pan
223227
}
224228
}
225229

230+
private void verifyIsPublicColumn(String panoramaPublicProject, String experimentTitle, boolean isPublic)
231+
{
232+
if (isImpersonating())
233+
{
234+
stopImpersonating(true);
235+
}
236+
goToProjectHome(panoramaPublicProject);
237+
238+
DataRegionTable expListTable = DataRegionTable.findDataRegionWithinWebpart(this, "Targeted MS Experiment List");
239+
expListTable.ensureColumnsPresent("Title", "DataVersion", "Public");
240+
expListTable.setFilter("Title", "Equals", experimentTitle);
241+
expListTable.setFilter("DataVersion", "Equals", "1");
242+
assertEquals(1, expListTable.getDataRowCount());
243+
assertEquals(isPublic ? "Yes" : "No", expListTable.getDataAsText(0, "Public"));
244+
}
245+
226246
private String getReviewerEmail(String panoramaPublicProject, String panoramaPublicFolder)
227247
{
228248
// Get the reviewer's email from the notification messages

0 commit comments

Comments
 (0)