If you are using an older version of Topcat you may need to apply some migrations to your database. These can be found in the “migrations/” directory within the Topcat release.
For MySQL:
CREATE TABLE `CONFVAR` ( `NAME` varchar(255) NOT NULL, `VALUE` text, PRIMARY KEY (`NAME`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; ALTER TABLE `DOWNLOAD` ADD `THE_SIZE` bigint(20) DEFAULT NULL;
For Oracle:
CREATE TABLE CONFVAR ( NAME varchar(255) NOT NULL, VALUE clob, PRIMARY KEY (NAME) ); ALTER TABLE DOWNLOAD ADD THE_SIZE NUMBER(19, 0) DEFAULT 0 NOT NULL;
Topcat is configured in two main places:
The backend configuration consists of two files:
The frontend configuration consists of three files:
Note: ’#’s are comments.
# Derby Database !db.target = derby !db.driver = org.apache.derby.jdbc.ClientDataSource !db.url = jdbc:derby:topcat;create\\=true !db.username = APP !db.password = APP # MySQL Database db.target = mysql db.url = jdbc:mysql://localhost:3306/topcat db.driver = com.mysql.jdbc.jdbc2.optional.MysqlDataSource db.username = icat db.password = icat secure = true container = Glassfish home = /home/fisher/pf/glassfish4 port = 4848 # Email setup see http://docs.oracle.com/cd/E26576_01/doc.312/e24938/create-javamail-resource.htm#GSRFM00035 mail.enable = true mail.host=smtp.example.com mail.user=user@example.com mail.from=no-reply@example.com #see https://javamail.java.net/nonav/docs/api/ for list of properties mail.property=mail.smtp.port="25":mail.smtp.from="no-reply@example.com"
Note: ’#’s are comments.
# enable send email mail.enable=true # The email subject. Tokens available are: # ${userName} - user username # ${email} - user email # ${facilityName} - the facility key (defined in frontend config) # ${preparedId} - the prepared Id of the download request # ${fileName} - the download name # ${size} - the download size # ${downloadUrl} - the download url mail.subject=TopCAT Download ${fileName} Ready # The email body message for https downloads. All subject tokens as above are available. mail.body.https=Hi ${userName},\n\nYour ${size} download ${fileName} has been prepared and is ready for download at ${downloadUrl}.\n\nThank you for using TopCAT. # The email body message for https downloads. All subject tokens as above are available. mail.body.globus=Hi ${userName}, \n\nYour ${size} Globus download ${fileName} is ready. Please see https:/example.com/#/globus-faq for more information on how to download using Globus.\n\nThank you for using TopCAT # The email body message for smartclient downloads. All subject tokens as above are available. mail.body.smartclient=Hi ${userName}, \n\nYour ${size} SmartClient download ${fileName} is ready. Please check your smartclient home directory for your files.\n\nThank you for using TopCAT # The email body message for SCARF downloads. All subject tokens as above are available. mail.body.scarf=Hi ${userName}, \n\nYour ${size} SCARF download ${fileName} is ready. Please see https:/example.com/#/scarf-faq for more information on how to download using SCARF.\n\nThank you for using TopCAT # The maximum number of datafiles for a getStatus call to the IDS for two level storage ids.getStatus.max=100 # The delay in seconds before polling starts. This delay is to gives the ids a chance to do its thing before we query it poll.delay=600 # The wait time in seconds between each poll to the IDS. poll.interval.wait=600 # A list of usernames that can use the admin REST API and Topcat admin user interface adminUserNames=simple/root, uows/elz087, asd345, ldap/fgh123
A high level overview of the topcat.json file is as follows:
{ "site": {...}, "facilities": {...} }
from the above example there are two attributes defined:
If we expand the attributes in high level overview we can get a medium overview as follows:
{ "site": { "topcatUrl": "https://example.com", "home" : "my-data", "enableEuCookieLaw" : true, "paging" : {...}, "breadcrumb": {...}, "serviceStatus": {...}, "maintenanceMode": {...}, "search": {...}, "browse":{...}, "cart":{...}, "myDownloads":{...}, "pages" : [...] }, "facilities": [ { "name": "DLS", "title": "Diamond Light Source", "icatUrl": "https://example.com", "idsUrl": "https://example.com", "hierarchy": [...], "authenticationTypes": [...], "downloadTransportTypes": [...], "admin":{...}, "myData": {...}, "browse":{...} } ] }
from the above following attributes defined:
Specifies the paging type configuration i.e. for either paged or infinite scroll.
An example configuration for infinite scrolling:
{ "site": { "paging" : { "pagingType": "scroll", "scrollPageSize": 50, "scrollRowFromEnd": 10 } } }
An example configuration for standard page based pagination:
{ "site": { "paging" : { "pagingType": "page", "paginationNumberOfRows": 10, "paginationPageSizes": [ 10, 25, 50, 100, 1000 ] } } }
Specifies global breadcrumb options.
An example breadcrumb configuration:
{ "site": { "breadcrumb": { "maxTitleLength": 30 } } }
Specifies the structure of the search results and search fields for searching across facilities.
An example (partial) configuration:
{ "site": { "search": { "enableParameters": false, "enableSamples": false, "gridOptions": { "investigation": {...}, "dataset": {...}, "datafile": {...} } } } }
Specifies the structure of the root of “browse” section of the site. This only applies to a Topcat with multiple facilities.
An example (partial) configuration:
{ "site": { "browse":{ "gridOptions": {...}, "metaTabs": [...] } } }
Specifies the structure of the cart.
An example (partial) configuration:
{ "site": { "cart":{ "maxDatafileCount": 1000000, "maxTotalSize": 1000000000000, "gridOptions": {...} } } }
Specifies the structure of ‘downloads’ dialog box.
An example (partial) configuration:
{ "site": { "myDownloads":{ "gridOptions": {...} } } }
Allows you to define information pages e.g. “About Us” or “Contact” etc…
An example configuration:
{ "site": { "pages" : [ { "url" : "/about", "stateName": "about", "addToNavBar": { "linkLabel" : "MAIN_NAVIGATION.ABOUT", "align" : "left" }, "contents": "PAGE.ABOUT.HTML" } ] } }
The entity heierachy of the browse section.
An example configuration:
{ "facilities": [ { "hierarchy": [ "facility", "proposal", "investigation", "dataset", "datafile" ] } ] }
The above configuration will make the user browse via “facility” > “proposal” > “investigation” > “dataset” > “datafile”.
Specifies the authentication plugins to be used e.g. LDAP
An example configuration:
{ "facilities": [ { "authenticationTypes": [ { "title": "Simple", "plugin": "simple" }, { "title": "DB", "plugin": "db" } ] } ] }
Specifies the download delivery methods e.g. ‘https’ (via a browser) or ‘globus’ (a type of glorified ftp to deal with large files).
An example configuration:
{ "facilities": [ { "downloadTransportTypes": [ { "type" : "https", "idsUrl": "https://fdsgos11.fds.rl.ac.uk" }, { "type" : "globus", "idsUrl": "https://fdsgos11.fds.rl.ac.uk" }, { "type" : "scarf", "idsUrl": "https://dls-ids01.scarf.rl.ac.uk" } ] ] } }
Defines the structure of admin interface. This interface is only available to admin users (specified in topcat.properties).
An example (partial) configuration:
{ "facilities": [ { "admin":{ "gridOptions": {...} } } ] }
Specifies the structure of the “My Data” section.
An example (partial) configuration:
{ "facilities": [ { "myData": { "entityType" : "investigation", "gridOptions": {...} } } ] }
Specifies the structure of the hierachical browse section.
An example (partial) configuration:
{ "facilities": [ { "browse": { "investigation": { "gridOptions": {...}, "metaTabs": [...] }, "proposal": {...}, "dataset": {...}, "datafile": {...} } } ] }
General principles configuring the gridOptions.
An example configuration:
"gridOptions": { "enableSelection": true, "columnDefs": [ { "field": "visitId", "link": true, "breadcrumb": true }, { "field": "size" }, { "field": "datasetCount" }, { "field": "datafileCount" }, { "field": "investigationInstrument.fullName" }, { "field": "startDate", "excludeFuture": true, "sort": { "direction": "desc", "priority": 1 } }, { "field": "endDate" } ] }
General principles configuring the metaTabs.
An example configuration:
"metaTabs": [ { "title": "METATABS.DATASET.TABTITLE", "items": [ { "field": "name" }, { "field": "description" }, { "label": "METATABS.DATASET.START_DATE", "field": "startDate", "template": "{{content.value | date:'yyyy-MM-dd'}}" }, { "label": "METATABS.DATASET.END_DATE", "field": "endDate", "template": "{{content.value | date:'yyyy-MM-dd'}}" } ] }, { "title": "METATABS.DATASET_TYPE.TABTITLE", "items": [ { "field": "datasetType.name" }, { "field": "datasetType.description" } ] } ]
Topcat defines the following jpql variables - which if used from any icat entity type will automatically work out any joins required to create a jpql statement for fetching the data from icat:
To get a better understanding of what these jpql variables refer to please view the icat schema documentation.