Skip to content

Commit

Permalink
Merge pull request #14 from adam-vessey/fix/term-installation-and-id
Browse files Browse the repository at this point in the history
Term installation and reporting
  • Loading branch information
rosiel authored Sep 23, 2022
2 parents 791028e + 4ffe7bb commit ed854d5
Show file tree
Hide file tree
Showing 3 changed files with 115 additions and 45 deletions.
68 changes: 36 additions & 32 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,56 +1,60 @@
# Islandora FITS
Config module to make Islandora aware of FITS microservice



## Installation
#### Install this module
Install and enable this module in the usual way. On installation the module will
add a context causing the creation of A FITs media when an Original File media is ingested.

Install and enable this module in the usual way. On installation the module will
add a context causing the creation of A FITS media when an Original File media is ingested; however, this process is
predicated on the existence of an `islandora_media_use` term with an external URI of `https://projects.iq.harvard.
edu/fits`--the `islandora_fits_tags` migration might be executed to create such a term.

#### Install FITS Webservice
FITS xmls are generated from an easily installed web service.
FITS XMLs are generated from an easily installed web service.
Get the latest fits.zip and fits.war from https://projects.iq.harvard.edu/fits/downloads
(on my box I had to install a missing zip library with
(on my box I had to install a missing zip library with
‘sudo apt-get install php7.1-zip’)

Install following their instructions.
Copy the .war file to your webapps directory and test.
Edit the catalina.properties file on the Drupal server by adding the
following two lines to the bottom of the file-
Copy the `.war` file to your webapps directory and test.
Edit the `catalina.properties` file on the Drupal server by adding the
following two lines to the bottom of the file:

```properties
fits.home=/\<path-to-fits>/fits

shared.loader=/\<path-to-fits>/fits/lib/*.jar
```

Restart Tomcat and test with

`curl -k -F datafile="@/path/to/myfile.jpg" http://example.com:8080/fits/examine`
Restart Tomcat and test with:
```bash
curl -k -F datafile="@/path/to/myfile.jpg" http://example.com:8080/fits/examine
```
(note: the ‘@’ is required.)

#### Installing Microservice
Get code from https://github.com/roblib/CrayFits and install. This code can live anywhere, including an external server,
but most installations will have it at /var/www/html.

The App runs by entering php bin/console server:start *:8050 in the App
root folder.
The server is stopped with php bin/console server:stop.
On a production machine you'd probably want to configure an additional
#### Installing Microservice
Get code from https://github.com/roblib/CrayFits and install. This code can live anywhere, including an external server,
but most installations will have it at `/var/www/html`.

The App runs by entering:
```bash
php bin/console server:start *:8050
```
in the App root folder.
The server is stopped with:
```bash
php bin/console server:stop
```
On a production machine you'd probably want to configure an additional
port in Apache.


Note: The location of the fits webserver is stored in the .env file in the
root dir of the Symfony app. This will have to be reconfigured if the Fits
server is anywhere other than localhost:8080/fits

Note: The location of the FITS webserver is stored in the `.env` file in the
root dir of the Symfony app. This will have to be reconfigured if the FITS
server is anywhere other than `localhost:8080/fits`

#### Adding FITs requests to the queue
Copy the file `assets/ca.islandora.alpaca.connector.ocr.blueprint.xml`
Copy the file `assets/ca.islandora.alpaca.connector.ocr.blueprint.xml`
to `/opt/karak/deploy` on your server. There is no need to restart.


#### Adding Checksum to Display
A pseudo field with the computed checksum can be added to Repository Item
display. Navigate to `admin/structure/types/manage/islandora_object/display`
to enable or disable display of `File Checksum`.
A pseudo field with the computed checksum can be added to Repository Item
display. Navigate to `admin/structure/types/manage/islandora_object/display`
to enable or disable display of `File Checksum`.
67 changes: 54 additions & 13 deletions islandora_fits.install
Original file line number Diff line number Diff line change
Expand Up @@ -6,25 +6,22 @@
*/



use Drupal\taxonomy\Entity\Term;
use Drupal\field\Entity\FieldConfig;

/**
* Implements hook_install().
*/
function islandora_fits_install() {
$term_name = 'FITS File';
$test_terms = taxonomy_term_load_multiple_by_name($term_name);
if (!$test_terms) {
$term = Term::create([
'parent' => [],
'name' => $term_name,
'vid' => 'islandora_media_use',
'description' => 'Technical Metadata associated with an original media file',
'field_external_uri' => ['uri' => 'https://projects.iq.harvard.edu/fits'],
])->save();
function islandora_fits_install($is_syncing) {

if (!_islandora_fits_term_exists()) {
$callable = $is_syncing ? [\Drupal::messenger(), 'addStatus'] : [\Drupal::messenger(), 'addWarning'];
$callable(t('A term in the taxonomy @vid with the URI @uri does not appear to exist. The @migration_id migration can be executed to create it.', [
'@vid' => 'islandora_media_use',
'@uri' => 'https://projects.iq.harvard.edu/fits',
'@migration_id' => 'islandora_fits_tags',
]));
}

// Add xml extension if it doesn't already exist.
$field = FieldConfig::load("media.file.field_media_file");
if ($field) {
Expand All @@ -37,3 +34,47 @@ function islandora_fits_install() {
}
}
}

/**
* Implements hook_requirements().
*/
function islandora_fits_requirements($phase) : array {
$requirements = [];

if ($phase == 'runtime') {
$term_exists = _islandora_fits_term_exists();
$requirements['islandora_fits_term_exists'] = [
'title' => t('FITS Term Exists'),
'value' => $term_exists ? t('Exists') : t('Does not exist'),
'description' => t('Whether or not a term with the URI targeted by default FITS derivative configuration exists. If derivative configurations were made to target another URI, this can probably be ignored.'),
'severity' => $term_exists ? REQUIREMENT_OK : REQUIREMENT_WARNING
];
}

return $requirements;
}

/**
* Helper; determine if a term with the target URI exists.
*
* @return bool
* TRUE if a term (at least one) with the target URI exists; otherwise, FALSE.
*
* @throws \Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException
* @throws \Drupal\Component\Plugin\Exception\PluginNotFoundException
*/
function _islandora_fits_term_exists() {
$table_exists = \Drupal::database()->schema()->tableExists('taxonomy_term__field_external_uri');
if (!$table_exists) {
// XXX: If the table does not exist, then avoid attempting to make a query
// making use of the non-existent table.
return FALSE;
}

$query = \Drupal::entityTypeManager()->getStorage('taxonomy_term')->getQuery()
->condition('vid', 'islandora_media_use')
->condition('field_external_uri.uri', 'https://projects.iq.harvard.edu/fits')
->count();
$count = $query->execute();
return $count > 0;
}
25 changes: 25 additions & 0 deletions migrations/islandora_fits_tags.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
---
id: islandora_fits_tags
migration_tags:
- islandora
migration_group: islandora
label: "FITS Term(s)"
source:
plugin: embedded_data
data_rows:
- vid: islandora_media_use
name: FITS File
description: Technical Metadata associated with an original media file
uri: https://projects.iq.harvard.edu/fits
ids:
uri:
type: string
process:
vid: vid
name: name
description: description
field_external_uri/uri: uri
destination:
plugin: entity:taxonomy_term
migration_dependencies:
required: { }

0 comments on commit ed854d5

Please sign in to comment.