Merge branch 'master' into 14431-metadata
authorPawel Kowalczyk <pawel.kowalczyk@contractors.roche.com>
Fri, 9 Nov 2018 09:06:55 +0000 (10:06 +0100)
committerPawel Kowalczyk <pawel.kowalczyk@contractors.roche.com>
Fri, 9 Nov 2018 09:06:55 +0000 (10:06 +0100)
refs #14431

Arvados-DCO-1.1-Signed-off-by: Pawel Kowalczyk <pawel.kowalczyk@contractors.roche.com>

src/store/advanced-tab/advanced-tab.ts
src/views-components/advanced-tab-dialog/advanced-tab-dialog.tsx
src/views-components/advanced-tab-dialog/metadataTab.tsx
src/views/process-panel/process-information-card.tsx

index 1fa86c816c86762b48b31d6a8ceffad6856ea71c..ba0cf77db75e6fc2bcacc8183e5bff2d551e902e 100644 (file)
@@ -20,6 +20,7 @@ export const ADVANCED_TAB_DIALOG = 'advancedTabDialog';
 export interface AdvancedTabDialogData {
     apiResponse: any;
     metadata: any;
+    uuid: string;
     pythonHeader: string;
     pythonExample: string;
     cliGetHeader: string;
@@ -50,6 +51,7 @@ export const openAdvancedTabDialog = (uuid: string) =>
         const { resources } = getState();
         const kind = extractUuidKind(uuid);
         const data = getResource<any>(uuid)(resources);
+        const user = await services.userService.get(data.ownerUuid);
         const metadata = await services.linkService.list({
             filters: new FilterBuilder()
                 .addEqual('headUuid', uuid)
@@ -57,46 +59,13 @@ export const openAdvancedTabDialog = (uuid: string) =>
         });
         if (data) {
             if (kind === ResourceKind.COLLECTION) {
-                const dataCollection: AdvancedTabDialogData = {
-                    apiResponse: collectionApiResponse(data),
-                    metadata,
-                    pythonHeader: pythonHeader(CollectionData.COLLECTION),
-                    pythonExample: pythonExample(data.uuid, GroupContentsResourcePrefix.COLLECTION),
-                    cliGetHeader: cliGetHeader(CollectionData.COLLECTION),
-                    cliGetExample: cliGetExample(data.uuid, GroupContentsResourcePrefix.COLLECTION),
-                    cliUpdateHeader: cliUpdateHeader(CollectionData.COLLECTION, CollectionData.STORAGE_CLASSES_CONFIRMED),
-                    cliUpdateExample: cliUpdateExample(data.uuid, CollectionData.COLLECTION, data.storageClassesConfirmed, CollectionData.STORAGE_CLASSES_CONFIRMED),
-                    curlHeader: curlHeader(CollectionData.COLLECTION, CollectionData.STORAGE_CLASSES_CONFIRMED),
-                    curlExample: curlExample(data.uuid, GroupContentsResourcePrefix.COLLECTION, data.storageClassesConfirmed, CollectionData.COLLECTION, CollectionData.STORAGE_CLASSES_CONFIRMED)
-                };
+                const dataCollection: AdvancedTabDialogData = advancedTabData(uuid, metadata, user, collectionApiResponse, data, CollectionData.COLLECTION, GroupContentsResourcePrefix.COLLECTION, CollectionData.STORAGE_CLASSES_CONFIRMED, data.storageClassesConfirmed);
                 dispatch(dialogActions.OPEN_DIALOG({ id: ADVANCED_TAB_DIALOG, data: dataCollection }));
             } else if (kind === ResourceKind.PROCESS) {
-                const dataProcess: AdvancedTabDialogData = {
-                    apiResponse: containerRequestApiResponse(data),
-                    metadata,
-                    pythonHeader: pythonHeader(ProcessData.CONTAINER_REQUEST),
-                    pythonExample: pythonExample(data.uuid, GroupContentsResourcePrefix.PROCESS),
-                    cliGetHeader: cliGetHeader(ProcessData.CONTAINER_REQUEST),
-                    cliGetExample: cliGetExample(data.uuid, GroupContentsResourcePrefix.PROCESS),
-                    cliUpdateHeader: cliUpdateHeader(ProcessData.CONTAINER_REQUEST, ProcessData.OUTPUT_NAME),
-                    cliUpdateExample: cliUpdateExample(data.uuid, ProcessData.CONTAINER_REQUEST, data.outputName, ProcessData.OUTPUT_NAME),
-                    curlHeader: curlHeader(ProcessData.CONTAINER_REQUEST, ProcessData.OUTPUT_NAME),
-                    curlExample: curlExample(data.uuid, GroupContentsResourcePrefix.PROCESS, data.outputName, ProcessData.CONTAINER_REQUEST, ProcessData.OUTPUT_NAME)
-                };
+                const dataProcess: AdvancedTabDialogData = advancedTabData(uuid, metadata, user, containerRequestApiResponse, data, ProcessData.CONTAINER_REQUEST, GroupContentsResourcePrefix.PROCESS, ProcessData.OUTPUT_NAME, data.outputName);
                 dispatch(dialogActions.OPEN_DIALOG({ id: ADVANCED_TAB_DIALOG, data: dataProcess }));
             } else if (kind === ResourceKind.PROJECT) {
-                const dataProject: AdvancedTabDialogData = {
-                    apiResponse: groupRequestApiResponse(data),
-                    metadata,
-                    pythonHeader: pythonHeader(ProjectData.GROUP),
-                    pythonExample: pythonExample(data.uuid, GroupContentsResourcePrefix.PROJECT),
-                    cliGetHeader: cliGetHeader(ProjectData.GROUP),
-                    cliGetExample: cliGetExample(data.uuid, GroupContentsResourcePrefix.PROJECT),
-                    cliUpdateHeader: cliUpdateHeader(ProjectData.GROUP, ProjectData.DELETE_AT),
-                    cliUpdateExample: cliUpdateExample(data.uuid, ProjectData.GROUP, data.deleteAt, ProjectData.DELETE_AT),
-                    curlHeader: curlHeader(ProjectData.GROUP, ProjectData.DELETE_AT),
-                    curlExample: curlExample(data.uuid, GroupContentsResourcePrefix.PROJECT, data.deleteAt, ProjectData.GROUP, ProjectData.DELETE_AT)
-                };
+                const dataProject: AdvancedTabDialogData = advancedTabData(uuid, metadata, user, groupRequestApiResponse, data, ProjectData.GROUP, GroupContentsResourcePrefix.PROJECT, ProjectData.DELETE_AT, data.deleteAt);
                 dispatch(dialogActions.OPEN_DIALOG({ id: ADVANCED_TAB_DIALOG, data: dataProject }));
             }
         } else {
@@ -104,6 +73,23 @@ export const openAdvancedTabDialog = (uuid: string) =>
         }
     };
 
+const advancedTabData = (uuid: string, metadata: any, user: any, apiResponseKind: any, data: any, resourceKind: CollectionData | ProcessData | ProjectData, resourcePrefix: GroupContentsResourcePrefix, resourceKindProperty: CollectionData | ProcessData | ProjectData, property: any) => {
+    return {
+        uuid,
+        user,
+        metadata,
+        apiResponse: apiResponseKind(data),
+        pythonHeader: pythonHeader(resourceKind),
+        pythonExample: pythonExample(uuid, resourcePrefix),
+        cliGetHeader: cliGetHeader(resourceKind),
+        cliGetExample: cliGetExample(uuid, resourcePrefix),
+        cliUpdateHeader: cliUpdateHeader(resourceKind, resourceKindProperty),
+        cliUpdateExample: cliUpdateExample(uuid, resourceKind, property, resourceKind),
+        curlHeader: curlHeader(resourceKind, resourceKindProperty),
+        curlExample: curlExample(uuid, resourcePrefix, property, resourceKind, resourceKindProperty),
+    };
+};
+
 const pythonHeader = (resourceKind: string) =>
     `An example python command to get a ${resourceKind} using its uuid:`;
 
index 3b3ca6d4345a29538b9dfd54468024bd68d779c6..9a31a69ed0c1786e4397b82b20f26c0940926a5b 100644 (file)
@@ -59,7 +59,9 @@ export const AdvancedTabDialog = compose(
                 cliUpdateHeader,
                 cliUpdateExample,
                 curlHeader,
-                curlExample
+                curlExample,
+                uuid,
+                user
             } = this.props.data;
             return <Dialog
                 open={open}
@@ -76,7 +78,7 @@ export const AdvancedTabDialog = compose(
                 </Tabs>
                 <DialogContent className={classes.content}>
                     {value === 0 && <div>{dialogContentExample(apiResponse, classes)}</div>}
-                    {value === 1 && <div>{metadata.items.length > 0 ? <MetadataTab items={metadata.items}/>: dialogContentHeader('(No metadata links found)')}</div>}
+                    {value === 1 && <div>{metadata.items.length > 0 ? <MetadataTab items={metadata.items} uuid={uuid} user={user} /> : dialogContentHeader('(No metadata links found)')}</div>}
                     {value === 2 && dialogContent(pythonHeader, pythonExample, classes)}
                     {value === 3 && <div>
                         {dialogContent(cliGetHeader, cliGetExample, classes)}
index 788b10d3a01ca26e4a311f0cda71c4088ae55db4..6250a7ad643c5cd48aba090a26a36312586f5572 100644 (file)
@@ -4,6 +4,7 @@
 
 import * as React from "react";
 import { Table, TableHead, TableCell, TableRow, TableBody, StyleRulesCallback, WithStyles, withStyles } from '@material-ui/core';
+import { UserResource } from "~/models/user";
 
 type CssRules = 'cell';
 
@@ -24,6 +25,8 @@ interface MetadataTable {
 
 interface MetadataProps {
     items: MetadataTable[];
+    user: UserResource;
+    uuid: string;
 }
 
 export const MetadataTab = withStyles(styles)((props: MetadataProps & WithStyles<CssRules>) =>
@@ -44,9 +47,9 @@ export const MetadataTab = withStyles(styles)((props: MetadataProps & WithStyles
                     <TableCell className={props.classes.cell}>{it.uuid}</TableCell>
                     <TableCell className={props.classes.cell}>{it.linkClass}</TableCell>
                     <TableCell className={props.classes.cell}>{it.name}</TableCell>
-                    <TableCell className={props.classes.cell}>{it.tailUuid}</TableCell>
-                    <TableCell className={props.classes.cell}>{it.headUuid}</TableCell>
-                    <TableCell className={props.classes.cell}>{JSON.stringify(it.properties, null, 2)}</TableCell>
+                    <TableCell className={props.classes.cell}>{props.user ? `User: ${props.user.firstName} ${props.user.lastName}` : it.tailUuid}</TableCell>
+                    <TableCell className={props.classes.cell}>{it.headUuid === props.uuid ? 'this' : it.headUuid}</TableCell>
+                    <TableCell className={props.classes.cell}>{JSON.stringify(it.properties)}</TableCell>
                 </TableRow>
             )}
         </TableBody>
index 7fcabcbb094f279580b08f8afe01406ede0af290..532af6964ebff5f363f26a651e7e3e4ea0dbfe3f 100644 (file)
@@ -75,7 +75,6 @@ type ProcessInformationCardProps = ProcessInformationCardDataProps & WithStyles<
 export const ProcessInformationCard = withStyles(styles, { withTheme: true })(
     ({ classes, process, onContextMenu, theme }: ProcessInformationCardProps) =>
         <Card className={classes.card}>
-        {console.log(process)}
             <CardHeader
                 classes={{
                     content: classes.title,