Commit c047c73a authored by Ubbo Veentjer's avatar Ubbo Veentjer
Browse files

Merge branch 'release/3.1.6' into main

parents 61883784 6947db17
Pipeline #163661 passed with stages
in 5 minutes and 34 seconds
......@@ -10,7 +10,7 @@ apply plugin: 'jacoco'
apply plugin: 'war'
group = 'info.textgrid.rep'
version = '3.1.5'
version = '3.1.6'
sourceCompatibility = '1.8'
repositories {
......
# Switchboard TEI und txt
# Switchboard
Die Integration des [Language Resource Switchboard](https://switchboard.clarin.eu/) in das TextGrid Repository ist ein wichtiger Schritt im Zuge des Zusammenwachsens der digitalen Forschungsdateninfrastrukturen innerhalb der Geistes- und Sozialwissenschaften ([CLARIAH](https://www.clariah.de/) und [SSHOC](https://www.sshopencloud.eu/)).
Auch für viele Analysen in der Literaturwissenschaft oder allgemein der Computerphilologie sind im Rahmen der Korpuserstellung und -vorbereitung Tools aus dem Bereich des Natural Language Processing und der linguistischen Annotation, die das Switchboard anbietet, sinnvoll.
\ No newline at end of file
Die Integration des [Language Resource Switchboard](https://switchboard.clarin.eu/) in das TextGrid Repository (TextGridRep) ist ein wichtiger Schritt im Zuge des Zusammenwachsens der digitalen Forschungsdateninfrastrukturen innerhalb der Geistes- und Sozialwissenschaften ([CLARIAH](https://www.clariah.de/) und [SSHOC](https://www.sshopencloud.eu/)).
Die im TextGridRep angebotenen Korpora sind vor allem für die Literaturwissenschaft oder allgemein die Computerphilologie relevant.
Für viele Analysen in diesen Bereichen sind im Rahmen der Korpuserstellung und -vorbereitung Tools aus dem Bereich des Natural Language Processing und der linguistischen Annotation, die das Switchboard anbietet, wichtig.
Wir ermöglichen durch die direkte Integration des Switchboards auf komfortable Weise mit Hilfe verschiedener Tools, Texte hinsichtlich linguistischer Merkmale automatisch annotieren und analysieren zu lassen. Dabei arbeitet das Switchboard mit Web-Applikationen; Downloads und Installationen sind folglich nicht nötig und sie greifen auf externe Server zu, so dass Anwender keine großen Rechenkapazitäten benötigen. Der Schritt, Texte aus dem TextGridRep herunterzuladen und dann wieder ins Switchboard hoch zu laden entfällt hiermit.
## Das Switchboard starten
Um die Analyse zu starten, öffnen Sie einen Text und klicken auf der linken Seite des Bildschirms auf das Switchboard (klicken Sie das blaue 🛈, gelangen Sie zu dieser Doku):
![Link zum Switchboard](images/Switchboard_Bild1_neu.png)
Im Anschluss werden Sie zur Seite des Switchboards weitergeleitet.
<!---Wie Sie sehen, gibt es zwei Möglichkeiten: "Switchboard (TEI)" und "Switchboard (txt)". Wählen Sie bitte entsprechend der Entscheidung, auf Grundlage welchen Dateiformats Sie eine Analyse vornehmen möchten. Das TEI-Format bietet im Üblichen eine größere Bandbreite verschiedener Auswertungsmöglichkeiten, allerdings kann es aktuell noch von wenigen Tools innerhalb des Switchboards verarbeitet werden. Außerdem sind zwar die meisten Texte im TextGridRep TEI-kodiert, jedoch noch nicht alle. Um auf möglichst viele verschiedene Tools zugreifen zu können, wählen Sie bitte das txt-Format.
Haben Sie sich für eine Variante des Switchboards entschieden, wechselt der Bildschirm zur Switchboard-Seite.-->
![Dokument- und Toolübersicht](images/Switchboard_Bild2a.png)
Im oberen Bereich Ihres Bildschirms (Pfeil 1) sehen Sie nun Ihre Eingaberessoure, also den Text, den Sie analysieren möchten. Daneben ist das Dateiformat ("Mediatype") verzeichnet. Daneben sehen Sie die ebenfalls automatisch zugewiesene Sprache ("Language"). In diesem Bereich müssen Sie keine Änderungen vornehmen. Prüfen Sie aber bitte, ob das Switchboard automatisch das korrekte Dateiformat und die korrekte Sprache ausgewählt hat und korrigieren Sie diese ggf. Das Switchboard schlägt automatisch eine Auswahl von Tools vor, die mit dem eingegebenen Dateiformat und der Sprache des Textes arbeiten können.
Sie sehen daher (Pfeile 2) verschiedene Tools und Dienste, die am ausgewählten Text automatische Analysen und Annotationen (z.B. Constituency Parsing, Dependency Parsing u.v.m.) durchführen können.
## Tools im Switchboard anwenden
![Toolbenutzung und -dokumentation](images/Switchboard_Bild2b.png)
Um ein Tool auf den ausgewählten Text anzuwenden, klicken Sie bitte auf den grünen "Start Tool"-Bereich (Pfeil 3). Sie werden auf die Website des jeweiligen Tools geleitet, das bereits Ihren Text geladen und zur Verarbeitung vorbereitet hat. Teilweise startet die Verarbeitung automatisch, teilweise müssen Sie diese noch selbst anstoßen. Wünschen Sie eine Dokumentation der Tools, klicken Sie bitte auf das blaue Symbol neben dem Toolnamen (Pfeil 4).
## Das Switchboard auf eigene Kollektionen anwenden
Bislang kann das Switchboard immer nur einen Text gleichzeitig verarbeiten – der Bedarf kann allerdings laut [Switchboard-FAQ-list](https://switchboard.clarin.eu/help) angemeldet werden. Daher haben Sie leider nicht – wie bei [Voyant](https://textgridrep.org/docs/voyant) – die Möglichkeit, das Switchboard auf Ihre selbsterstellte Kollektion in Ihrem [Regal](https://textgridrep.org/docs/shelf) anzuwenden.
## Referenzen
- [About the Language Ressource Switchboard](https://switchboard.clarin.eu/about)
- Claus Zinn, [The Language Resource Switchboard](https://www.mitpressjournals.org/doi/full/10.1162/coli_a_00329). Computational Linguistics 44(4), pages 631-639, December 2018.
- Claus Zinn. [A Bridge from EUDAT's B2DROP cloud service to CLARIN's Language Resource Switchboard](https://ep.liu.se/ecp/147/004/ecp17147004.pdf). Selected papers from the CLARIN Annual Conference 2017, Budapest, 18-20 September 2017, Linköping University Electronic Press vol. 147, pages 36-45, 2018.
- Claus Zinn. [The CLARIN Language Resource Switchboard](https://www.clarin.eu/sites/default/files/zinn-CLARIN2016_paper_26.pdf). CLARIN 2016 Annual Conference, Aix-en-Provence, France, 2016.
- Claus Zinn, Marie Hinrichs, Emanuel Dima, Dieter van Uytvanck. [The Switchboard specification](https://office.clarin.eu/v/CE-2015-0684-LR_switchboard_spec.pdf) (Milestone 2.2 of the CLARIN-PLUS project).
- Claus Zinn. [D2.5 LR Switchboard (software)](https://office.clarin.eu/v/CE-2016-0881-CLARINPLUS-D2_5.pdf). Deliverable in the CLARIN-PLUS project.
## Weitere Dokumentationen und Tutorials
Weitere Hilfe finden Sie auf der Switchboard-[Hilfeseite](https://switchboard.clarin.eu/help) sowie in den Dokumentationen der einzelnen Tools.
Eine Übersicht über alle im Switchboard angebotenen Dienste und Tools finden Sie [hier](https://switchboard.clarin.eu/tools).
## Kontakt
Haben Sie weitere Fragen zum Switchboard in TextGrid? Dann nehmen Sie bitte [Kontakt](https://textgrid.de/de/kontakt/) zu uns auf!
Bei Fragen zu den einzelnen im Switchboard angebotenen Tools konsultieren Sie bitte zuerst deren Dokumentation und wenden Sie sich dann gerne an die jeweiligen Entwickler.
\ No newline at end of file
# Unfortunately this document is available in German only. An English version will be available shortly.
\ No newline at end of file
# Unfortunately this document is available in German only. An English version will be available soon.
<!--- in Arbeit von Lukas
Achtung: Für Bilder die englische Textgrid-Version verwenden! Links prüfen! Korrekturlesen!
Ansonsten Übersetzung der deutschen Doku
# Switchboard
The integration of the [Language Resource Switchboard](https://switchboard.clarin.eu/) into the TextGrid Repository (TextGridRep) is an important step in the course of the merging of digital research data infrastructures within the humanities and social sciences ([CLARIAH](https://www.clariah.de/) and [SSHOC](https://www.sshopencloud.eu/)).
The corpora offered in the TextGridRep are primarily relevant for literary studies or for computer philology in general.
For many analyses in these fields, tools from the field of Natural Language Processing and linguistic annotation are important in the context of corpus creation and corpus preparation. The Switchboard offers a wide range of such tools.
Through the direct integration of the switchboard, we enable texts to be automatically analyzed and annotated for linguistic features in a convenient way using various tools.
The switchboard works with web applications; thus, downloads and installations are not necessary and the tools access external servers, which means that users do not require large computing capacities.
The step of downloading texts from the TextGridRep and then uploading them back to the switchboard is eliminated in this way.
## Starting the Switchboard
To start the program, open a text and click switchboard on the left side of your screen (by clicking the blue 🛈, you will get to this documentation):
![Link to the Switchboard](images/TODO.png) NEUER SCREENSHOT MIT ENGL. TEXT!
You will then be redirected to the switchboard page.
<!---Wie Sie sehen, gibt es zwei Möglichkeiten: "Switchboard (TEI)" und "Switchboard (txt)". Wählen Sie bitte entsprechend der Entscheidung, auf Grundlage welchen Dateiformats Sie eine Analyse vornehmen möchten. Das TEI-Format bietet im Üblichen eine größere Bandbreite verschiedener Auswertungsmöglichkeiten, allerdings kann es aktuell noch von wenigen Tools innerhalb des Switchboards verarbeitet werden. Außerdem sind zwar die meisten Texte im TextGridRep TEI-kodiert, jedoch noch nicht alle. Um auf möglichst viele verschiedene Tools zugreifen zu können, wählen Sie bitte das txt-Format.
Haben Sie sich für eine Variante des Switchboards entschieden, wechselt der Bildschirm zur Switchboard-Seite.-->
<!---![Document and tool overview](images/TODO.png) NEUER SCREENSHOT MIT ENGL. TEXT!
In the upper part of your screen (arrow 1) you will now see your input resource, i.e. the text you want to analyze.
The media format is listed next to it.
To the right, you will see the automatically assigned language.
You usually do not need to make any changes in this area.
However, please check if the switchboard has automatically selected the correct file format and language and correct them if necessary.
The switchboard automatically offers a selection of tools that can work with the entered file format and the language of the text.
As a result, you will see (arrows 2) various tools and services that can perform automatic analyses and annotations (e.g. Constituency Parsing, Dependency Parsing, etc.) of the selected text.
## Using tools
![Using tools and documentations of them](images/TODO.png) NEUER SCREENSHOT MIT ENGL. TEXT!
To apply a tool to your selected text, click on the green "Start Tool" button (arrow 3).
You will then be redirected to the website of the tool that has already loaded your text and prepared it for processing.
Sometimes the processing starts automatically, sometimes you have to start it by yourself.
If you wish documentation of the tools, please click on the blue symbol next to the tool name (arrow 4).
## Applying the Switchboard to your collections
Up to now, the switchboard can only process one text at a time – however, the demand can be announced according to the [Switchboard-FAQ-list](https://switchboard.clarin.eu/help).
Therefore you unfortunately do not have the possibility – as in [Voyant](https://textgridrep.org/docs/voyant?lang=en) – to apply the Switchboard to your self-created collection in your [shelf](https://textgridrep.org/docs/shelf?lang=en).
## References
- [About the Language Ressource Switchboard](https://switchboard.clarin.eu/about)
- Claus Zinn, [The Language Resource Switchboard](https://www.mitpressjournals.org/doi/full/10.1162/coli_a_00329). Computational Linguistics 44(4), pages 631-639, December 2018.
- Claus Zinn. [A Bridge from EUDAT's B2DROP cloud service to CLARIN's Language Resource Switchboard](https://ep.liu.se/ecp/147/004/ecp17147004.pdf). Selected papers from the CLARIN Annual Conference 2017, Budapest, 18-20 September 2017, Linköping University Electronic Press vol. 147, pages 36-45, 2018.
- Claus Zinn. [The CLARIN Language Resource Switchboard](https://www.clarin.eu/sites/default/files/zinn-CLARIN2016_paper_26.pdf). CLARIN 2016 Annual Conference, Aix-en-Provence, France, 2016.
- Claus Zinn, Marie Hinrichs, Emanuel Dima, Dieter van Uytvanck. [The Switchboard specification](https://office.clarin.eu/v/CE-2015-0684-LR_switchboard_spec.pdf) (Milestone 2.2 of the CLARIN-PLUS project).
- Claus Zinn. [D2.5 LR Switchboard (software)](https://office.clarin.eu/v/CE-2016-0881-CLARINPLUS-D2_5.pdf). Deliverable in the CLARIN-PLUS project.
## Further documentation and tutorials
Further help can be found at the [Switchboard help page](https://switchboard.clarin.eu/help) as well as at the documentations of the different tools.
An overview of all services and tools offered by the Switchboard can be found [here](https://switchboard.clarin.eu/tools).
## Contact
Do you have further questions concerning the Switchboard in TextGrid?
Please [contact](https://textgrid.de/en/kontakt/) us!
If you have questions about individual tools provided in the Switchboard, please first consult their documentation and feel free to contact their respective developers.
-->
\ No newline at end of file
......@@ -6,21 +6,21 @@ Der Service **Voyant in TextGrid** bietet die Möglichkeit, Texte direkt aus dem
## Analyse von einzelnen Texten aus TextGrid
Wenn ein Text aus dem TextGrid Repository angezeigt wird (z.B. [Wilhelm Meisters Wanderjahre oder Die Entsagenden](https://textgridrep.org/browse/-/browse/11h9j_0#) von [Johann Wolfgang von Goethe](https://textgridrep.org/search?filter=edition.agent.value%3aGoethe%2c+Johann+Wolfgang+von)), werden weitere Optionen auf dem rechten Menü angezeigt. Eine dieser Optionen ist es den Text mit Werkzeugen weiter zu bearbeiten oder analysieren. Hier finden Sie unter anderem Voyant:
Wenn ein Text aus dem TextGrid Repository angezeigt wird (z.B. [Wilhelm Meisters Wanderjahre oder Die Entsagenden](https://textgridrep.org/browse/-/browse/11h9j_0#) von [Johann Wolfgang von Goethe](https://textgridrep.org/search?filter=edition.agent.value%3aGoethe%2c+Johann+Wolfgang+von)), werden weitere Optionen auf dem rechten Menü angezeigt. Eine dieser Optionen ist es, den Text mit Werkzeugen weiter zu bearbeiten oder zu analysieren. Hier finden Sie unter anderem Voyant:
![Link zu Voyant](images/voyant-link.png)
Wenn die Benutzenden auf diese Seite auf "Voyant" klicken, wird Voyant automatisch mit dem ausgewählten Text geladen: in unserem Beispiel [Wilhelm Meisters Wanderjahre](https://voyant-tools.org/?input=https://textgridlab.org/1.0/tgcrud-public/rest/textgrid:11h9j.0/data):
Wenn die Benutzenden auf dieser Seite auf "Voyant" klicken, wird Voyant automatisch mit dem ausgewählten Text geladen: in unserem Beispiel [Wilhelm Meisters Wanderjahre](https://voyant-tools.org/?input=https://textgridlab.org/1.0/tgcrud-public/rest/textgrid:11h9j.0/data):
![Text in Voyant](images/single-text-voyant.png)
## Analyse von Textsammlungen (Korpora) aus TextGrid
Nicht nur einzelne Texte sondern komplette Korpora (Textsammlungen) können aus TextGrid Repository direkt in Voyant übertragen werden. Im [TextGrid Repository](https://textgridrep.org/repository.html) können mehrere Texte zu einem [Regal](/docs/shelf) hinzugefügt werden, um sich ein Korpus zusammenzustellen, das der eigenen Forschungsfrage angepasst ist. Dieses Regal bietet gleichwohl die Möglichkeit unter „Werkzeuge“ die ausgewählten Texte z. B. direkt mit den Voyant Tools zu analysieren.
Nicht nur einzelne Texte sondern komplette Korpora (Textsammlungen) können aus TextGrid Repository direkt in Voyant übertragen werden. Im [TextGrid Repository](https://textgridrep.org/repository.html) können mehrere Texte zu einem [Regal](/docs/shelf) hinzugefügt werden, um sich ein Korpus zusammenzustellen, das der eigenen Forschungsfrage angepasst ist. Dieses Regal bietet gleichwohl die Möglichkeit, unter „Werkzeuge“ die ausgewählten Texte z. B. direkt mit den Voyant Tools zu analysieren.
Beispielsweise kann man [12 dramatische Texte von Friedrich Schiller](https://textgridrep.org/search?query=&filter=work.genre%3Adrama&filter=edition.agent.value%3ASchiller%2C+Friedrich&start=10&limit=10&order=relevance) zu einem [Regal hinzufügen](/docs/shelf), und dann [diese Sammlung als gesammentes Korpus durch Voyant](https://voyant-tools.org/?input=https://textgridlab.org/1.0/aggregator/zip/textgrid:tz6r.0,textgrid:tz9d.0,textgrid:txtj.0,textgrid:tzgk.0,textgrid:tx4z.0,textgrid:tz39.0,textgrid:v0d8.0,textgrid:v0hv.0,textgrid:v0nx.0,textgrid:tz0c.0,textgrid:v0fv.0,textgrid:twt3.0?meta=false&only=text/xml) analysieren lassen:
Beispielsweise kann man [12 dramatische Texte von Friedrich Schiller](https://textgridrep.org/search?query=&filter=work.genre%3Adrama&filter=edition.agent.value%3ASchiller%2C+Friedrich&start=10&limit=10&order=relevance) zu einem [Regal hinzufügen](/docs/shelf), und dann [diese Sammlung als gesammeltes Korpus durch Voyant](https://voyant-tools.org/?input=https://textgridlab.org/1.0/aggregator/zip/textgrid:tz6r.0,textgrid:tz9d.0,textgrid:txtj.0,textgrid:tzgk.0,textgrid:tx4z.0,textgrid:tz39.0,textgrid:v0d8.0,textgrid:v0hv.0,textgrid:v0nx.0,textgrid:tz0c.0,textgrid:v0fv.0,textgrid:twt3.0?meta=false&only=text/xml) analysieren lassen:
![Textsammlung in Voyant](images/corpus-voyant.png)
......@@ -28,7 +28,7 @@ Um über weitere Funktionalitäten der Option „Regal“ zu erfahren, lesen Sie
## Mehrwert der Integration von Voyant in TextGrid
Die Integration ermöglicht die Nutzung von Voyant ohne weitere Vorkenntnisse. Somit müssen sich die Benutzenden mit der Verwaltung der Dokumente nicht befassen. Konkret bedeutet dies: Sie brauchen nicht, die Texte aus dem TextGrid Repository herunterzuladen, auf dem eigenen Gerät speichern und danach in Voyant erneut hochladen. Dieser Service wendet sich besonders an Lernende und Lehrende aus der Sprach- und Literaturwissenschaft, die einen Einstieg in die quantitative Analyse innerhalb der Textsammlungen des TextGrid Repository, wie z. B. der [Digitalen Bibliothek](https://textgrid.de/digitale-bibliothek) suchen. Beispielsweise können Lehrende den Link zu Voyant Tools, der via TextGridRep erzeugt wurde und eine bestimmte Textsammlung enthält, direkt an die Studierenden schicken.
Die Integration ermöglicht die Nutzung von Voyant ohne weitere Vorkenntnisse. Somit müssen sich die Benutzenden mit der Verwaltung der Dokumente nicht befassen. Konkret bedeutet dies: Sie müssen die Texte nicht aus dem TextGrid Repository herunterladen, auf dem eigenen Gerät speichern und danach in Voyant erneut hochladen. Dieser Service wendet sich besonders an Lernende und Lehrende aus der Sprach- und Literaturwissenschaft, die einen Einstieg in die quantitative Analyse innerhalb der Textsammlungen des TextGrid Repository, wie z. B. der [Digitalen Bibliothek](https://textgrid.de/digitale-bibliothek) suchen. Beispielsweise können Lehrende den Link zu Voyant Tools, der via TextGridRep erzeugt wurde und eine bestimmte Textsammlung enthält, direkt an die Studierenden schicken.
## Weitere Funktionalitäten von Voyant
Voyant in TextGrid zeigt für ausgewählte Texte Worthäufigkeiten, Verteilungen und Kookkurrenzen und erlaubt es, auf einfache Art Eigenschaften der ausgewählten Texte zu explorieren und zu visualisieren. So lassen sich stilistische Besonderheiten, wie die Verwendung von Wörtern in gegensätzlichen Zusammenhängen, Wortballungen an charakteristischen Stellen im Gesamtkorpus oder im Einzeltext, auf einen Blick erkennen und darstellen. Dies kann im Rahmen literaturwissenschaftlicher Analysen zur Unterstützung der Interpretation aus dem Close-Reading sein oder erst den Anstoß geben, einen oder viele Texte aus einem anderen quantitativen Blickwinkel zu betrachten.
......@@ -43,7 +43,7 @@ Voyant in TextGrid zeigt für ausgewählte Texte Worthäufigkeiten, Verteilungen
- [*Die Göttliche Komödie*](https://textgridrep.org/browse/m5s9_0) von [Dante Alighieri](https://textgridrep.org/search?filter=edition.agent.value%3aDante+Alighieri) (auf Deutsch), in [Voyant](https://voyant-tools.org/?input=https://textgridlab.org/1.0/tgcrud-public/rest/textgrid:m5s9.0/data)
- [*La Celestina (Tragicomedia de Calisto y Melibea)*](https://textgridrep.org/browse/3rxbp_0) von [Fernando de Rojas](https://textgridrep.org/search?filter=edition.agent.value%3aFernando+de+Rojas) (auf Spanisch), in [Voyant](https://voyant-tools.org/?input=https://textgridlab.org/1.0/tgcrud-public/rest/textgrid:3rxb4.0/data).
Für die Auswahl von Texten bietet sich ein Blick in die Inhalte des TextGridRep an, die [nach Autor](/facet/edition.agent.value?order=term:asc), [nach Genre](/facet/work.genre), [nach Dateityp](/facet/format) und [nach Projekt](https://textgridrep.org/facet/project.value) fegiltert werden können, an.
Für die Auswahl von Texten bietet sich ein Blick in die Inhalte des TextGridRep an, die [nach Autor](/facet/edition.agent.value?order=term:asc), [nach Genre](/facet/work.genre), [nach Dateityp](/facet/format) und [nach Projekt](https://textgridrep.org/facet/project.value) gefiltert werden können, an.
## Referenzen
......@@ -63,4 +63,4 @@ Es handelt sich dabei um eine Instanz der [Voyant Tools](https://voyant-tools.or
## Weitere Fragen?
Wenn Sie weitere Fragen nach der Integration von Voyant und TextGrid haben, nehmen Sie [Kontakt](https://textgrid.de/de/kontakt/) mit uns auf.
Wenn Sie weitere Fragen zur Integration von Voyant und TextGrid haben, nehmen Sie [Kontakt](https://textgrid.de/de/kontakt/) mit uns auf.
package info.textgrid.rep;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ResponseStatus;
@ResponseStatus(value=HttpStatus.NOT_FOUND, reason="No metadata found for this URI")
public class NothingFoundException extends RuntimeException{
private static final long serialVersionUID = 6908289670791711296L;
}
package info.textgrid.rep;
import java.util.Locale;
import javax.servlet.RequestDispatcher;
import javax.servlet.http.HttpServletRequest;
import org.springframework.boot.web.servlet.error.ErrorController;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
......@@ -13,6 +15,15 @@ public class TGRepErrorController implements ErrorController {
@RequestMapping("/error")
public String handleError(Model model, Locale locale, HttpServletRequest request) {
Object status = request.getAttribute(RequestDispatcher.ERROR_STATUS_CODE);
if (status != null) {
Integer statusCode = Integer.valueOf(status.toString());
if(statusCode == HttpStatus.NOT_FOUND.value()) {
return "error404";
}
}
if(request.getAttribute("javax.servlet.error.exception") != null) {
Exception exception = (Exception) request.getAttribute("javax.servlet.error.exception");
model.addAttribute("exception", exception.getMessage());
......
......@@ -5,6 +5,7 @@ import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.math.BigInteger;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
......@@ -13,6 +14,7 @@ import java.util.TreeMap;
import javax.ws.rs.client.ClientBuilder;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.cxf.helpers.IOUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
......@@ -106,7 +108,6 @@ public class BrowseController {
String format = metadata.getObject().getGeneric().getProvided().getFormat();
model.addAttribute("format", format);
/*
* Deliver different browse pages based on content type of textgridobject:
* aggregation, xml or image
......@@ -119,8 +120,9 @@ public class BrowseController {
handleImages(model, id);
} else if (format.equals("text/markdown")) {
handleMarkdown(model, id);
} else if (format.equals("text/plain")) {
handlePlaintext(model, id);
}
// add revisions info
listRevisions(model, id, metadata);
......@@ -190,27 +192,25 @@ public class BrowseController {
* @param id
*/
private List<ToolLink> addTeiTools(String id) {
// CLARIN Language Resource Switchboard (LRS)
List<ToolLink> tools = new ArrayList<ToolLink>();
try {
// XML
String xml4switchboard = URLEncoder.encode(tgrepConfig.getTextgridHost() + "/1.0/tgcrud-public/rest/" + id + "/data", "UTF-8");
tools.add(new ToolLink("Switchboard (TEI)", tgrepConfig.getToolSwitchboardHost() + "/" + xml4switchboard + "/application%2Ftei+xml", false));
// txt
String text4switchboard = URLEncoder.encode(tgrepConfig.getTextgridHost() + "/1.0/aggregator/text/" + id , "UTF-8");
tools.add(new ToolLink("Switchboard (txt)", tgrepConfig.getToolSwitchboardHost() + "/" + text4switchboard + "/text%2Fplain", false));
} catch (UnsupportedEncodingException e) {
log.error("error encoding url for switchboard", e);
}
// Voyant
tools.add(
new ToolLink("Voyant", tgrepConfig.getVoyantHost() + "/?input=" + tgrepConfig.getTextgridHost() + "/1.0/tgcrud-public/rest/" + id + "/data", false)
.setHelpLink("/docs/voyant")
);
// Annotate
tools.add(new ToolLink("Annotate", tgrepConfig.getToolAnnotateHost() + "/data.html?uri=" + id, false, "annotation-button"));
// CLARIN Language Resource Switchboard (LRS)
try {
//String xml4switchboard = URLEncoder.encode(tgrepConfig.getTextgridHost() + "/1.0/tgcrud-public/rest/" + id + "/data", "UTF-8");
String text4switchboard = URLEncoder.encode(tgrepConfig.getTextgridHost() + "/1.0/aggregator/text/" + id , "UTF-8");
tools.add(
new ToolLink("Switchboard", tgrepConfig.getToolSwitchboardHost() + "/" + text4switchboard + "/text%2Fplain", false)
.setHelpLink("/docs/switchboard")
);
} catch (UnsupportedEncodingException e) {
log.error("error encoding url for switchboard", e);
}
return tools;
}
......@@ -294,6 +294,26 @@ public class BrowseController {
model.addAttribute("htmlContent", content);
}
private void handlePlaintext(Model model, String id) {
InputStream contentStream;
String content;
try {
contentStream = this.tgcrudClient.read(id);
content = IOUtils.toString(contentStream, StandardCharsets.UTF_8.name());
} catch (CrudClientException e) {
//TODO: nicer error strings
log.error("error reading data from crud", e);
content = "error reading data from crud";
} catch (IOException e) {
//TODO: nicer error strings
log.error("error reading data", e);
content = "error reading data";
}
model.addAttribute("textContent", content);
}
private void listRevisions(Model model, String id, ResultType metadata) {
String baseUri = id.substring(0, id.indexOf("."));
Revisions revisions = tgsearchClient.listRevisions(id);
......
......@@ -12,6 +12,7 @@ import info.textgrid.namespaces.middleware.tgsearch.FacetResponse;
import info.textgrid.namespaces.middleware.tgsearch.Response;
import info.textgrid.namespaces.middleware.tgsearch.ResultType;
import info.textgrid.namespaces.middleware.tgsearch.Revisions;
import info.textgrid.rep.NothingFoundException;
@Service
......@@ -93,10 +94,15 @@ public class TgsearchClientService {
public ResultType getMetadata(String id) {
return searchClient.infoQuery()
List<ResultType> result = searchClient.infoQuery()
.setResolvePath(true)
.getMetadata(id)
.getResult().get(0);
.getResult();
if(result.size() == 0) {
throw new NothingFoundException();
}
return result.get(0);
}
......
......@@ -126,3 +126,8 @@ privpol=Datenschutzerklärung
documentation=Dokumentation
content=Inhalte
navigation=Navigation
by-author=...nach Autor
by-genre=...nach Genre
by-filetype=...nach Dateityp
by-project=...nach Projekt
......@@ -127,3 +127,8 @@ help=Help
documentation=Documentation
content=Content
navigation=Navigation
by-author=...by author
by-genre=...by genre
by-filetype=...by filetype
by-project=...by project
This diff is collapsed.
......@@ -4,6 +4,7 @@
<title>TextGrid Repository</title>
<meta name="viewport" content="initial-scale=1.0, width=device-width">
<meta charset="utf-8">
<link rel="shortcut icon" href="/favicon.ico"/>
<link rel="stylesheet" href="/css/custom.css">
</head>
......
......@@ -35,16 +35,16 @@
<a aria-labelledby="layout_18" href="/browse/root" role="menuitem" tabindex="">Repository</a>
</li>
<li class="" id="layout_18" role="presentation">
<a aria-labelledby="layout_18" href="/facet/edition.agent.value?order=term:asc" role="menuitem" tabindex="">...nach Autor</a>
<a aria-labelledby="layout_18" href="/facet/edition.agent.value?order=term:asc" role="menuitem" tabindex="">${i18n['by-author']}</a>
</li>
<li class="" id="layout_18" role="presentation">
<a aria-labelledby="layout_18" href="/facet/work.genre" role="menuitem" tabindex="">...nach Genre</a>
<a aria-labelledby="layout_18" href="/facet/work.genre" role="menuitem" tabindex="">${i18n['by-genre']}</a>
</li>
<li class="" id="layout_18" role="presentation">
<a aria-labelledby="layout_18" href="/facet/format" role="menuitem" tabindex="">...nach Dateityp</a>
<a aria-labelledby="layout_18" href="/facet/format" role="menuitem" tabindex="">${i18n['by-filetype']}</a>
</li>
<li class="" id="layout_18" role="presentation">
<a aria-labelledby="layout_18" href="/facet/project.value" role="menuitem" tabindex="">...nach Projekt</a>
<a aria-labelledby="layout_18" href="/facet/project.value" role="menuitem" tabindex="">${i18n['by-project']}</a>
</li>
</ul>
</li>
......@@ -69,6 +69,9 @@
<li class="" id="layout_18" role="presentation">
<a aria-labelledby="layout_18" href="/docs/voyant" role="menuitem" tabindex="">Voyant</a>
</li>
<li class="" id="layout_18" role="presentation">
<a aria-labelledby="layout_18" href="/docs/switchboard" role="menuitem" tabindex="">Switchboard</a>
</li>
<li class="" id="layout_18" role="presentation">
<a aria-labelledby="layout_18" href="/docs/errata" role="menuitem" tabindex="">Errata</a>
</li>
......
......@@ -255,6 +255,12 @@
${htmlContent}
</c:when>
<c:when test="${metadata.object.generic.provided.format eq 'text/plain'}">
<pre>
${textContent}
</pre>
</c:when>
<c:otherwise>
<p>${i18n['dont-know-what-todo']} ${format}</p>
<a target="_blank" href="${config.textgridHost}/1.0/tgcrud-public/rest/${metadata.object.generic.generated.textgridUri.value}/data">${i18n['open-html-in-new-window']}</a>
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment