Anlegen neuer Metadaten-Felder in FORMS
Voraussetzungen
1. Das neue Metadaten-Feld muss zunächst in den beiden Dateien labels.json
von to.science.api und to.science.labels definiert werden
(siehe vorherige Seite).
Übernahme der Definition des neuen Feldes aus den
labels.json
in dielabels.json
von to.science.formsKopieren der labels.conf in das installationsverzeichnis von to.science.forms
ja wirklich…

Vorgehen
In den folgenden Java-Klassen müssen zunächst Erweiterungen in Form von Variablen-Deklarationen vorgenommen werden, damit das neue Feld auch in den Formularen funktioniert.
to.science.forms.services.ZettelFields.Java
to.science.forms.model.ZettelModel.Java
1. In ZettelFields
werden zunächst Verweise auf die Inhalte der labels.conf
erzeugt. Dafür werden “Etikett”-Instanzen angelegt.
Ist das neue Feld wie im Beispiel academicDegree
als wiederholbares Literal angelegt, werden folgende Deklarationen benötigt:
Das ZF am Ende der Variablen-Deklaration weißt darauf hin, dass es sich um ein “ZettelField” handeln soll.
public static Etikett academicDegreeZF =
ZettelHelper.etikett.getEtikett("https://d-nb.info/standards/elementset/gnd#academicDegree");
public static Etikett academicDegreeIndexZF =
ZettelHelper.etikett.getEtikett("http://hbz-nrw.de/regal#academicDegreeIndex");
In der
ZettelModel.Java
werden ebenfalls neue Variablen-Deklarationen als erzeugt
public abstract class ZettelModel {
private List<String> academicDegree = new ArrayList<>();
private String academicDegreeIndex;
Die neuen Variablen benötigen
GETTER, SETTER
und im Fall derArrayList
eine add-Methode:
public abstract class ZettelModel {
public void setAcademicDegree(List<String> AcademicDegree ) {
this.academicDegree = academicDegree;
}
public List<String> getAcademicDegree(){
return this.academicDegree;
}
public String getAcademicDegreeIndex() {
return academicDegreeIndex;
}
public void setAcademicDegreeIndex(String AcademicDegreeIndex) {
this.academicDegreeIndex = academicDegreeIndex;
}
4. Anschließend werden die in ZettelField
deklarierten Variablen importiert.
Ggf. wäre es hier ziemlich sinnvoll, sie nicht einzeln zu importieren?
import static services.ZettelFields.academicTitleZF;
import static services.ZettelFields.academicTitleIndexZF;
Sie werden in der Methode
getMappingForDeserialization
benötigt und verbinden die Felder mit den ZettelField-Variablen:
protected Map<String, Consumer<Object>> getMappingForDeserialization() {
String regalApi = Play.application().configuration().getString("regalApi");
Map<String, Consumer<Object>> dict = new LinkedHashMap<>();
[...]
dict.put(academicDegreeZF.uri, (in) -> addAcademicDegree((String) in));
dict.put(academicDegreeIndexZF.uri, (in) -> setAcademicDegreeIndex((String) in));
[...]
}