Sprachen

Eine SWT Anwendung um eine Menü mit openTMS Funktionen erweitern - Teil 2

Als zweiten Beitrag zum Thema "Eine SWT Anwendung um eine Menü mit openTMS Funktionen erweitern" werde ich nun zeigen, wie man eine Combo Box mit den vorhanden Datenquellen füllt. Zur Erinnerung: "Ich will das am Beispiel des Araya Bilingual Term Extracors zeigen (sh. dazu http://www.heartsome.de/de/termextraction.php). Das Werkzeug extrahiert aus einer TMX Datei mögliche bilinguale Terminologiekandidaten (also Übersetzungen). Die aktuelle Version ist auf TMX Dateien beschränkt. Es wäre natürlich schöner, wenn man auf beliebige Datenquellen zurückgreifen kann und daraus die Termpaare ermitteln kann. Was liegt näher als dazu die Funktionen von openTMS Data Sources zu verwenden, die einen einheitlichen Zugriff auf unterschiedliche Datenquellen ermöglichen."

Im letzte Beitrag habe ich das "OpenTMS Data Source Functions" Menu in eine SWT Menuleiste eingebaut werden. So sieht die Menüleiste nach dieser Änderung aus.
.
Nun soll der Terminologiextraktionsdialog

um die Möglichkeit der Auswahl einer openTMS Datenquelle alternativ zur Angabe einer TMX Datei erweitert werden.

Auch das ist mit ein paar Zeilen Code erledigt


...
        

Als erstes hole ich mir die Namen aller erzeugten Datenquellen.

        Vector openTMSDatabases = de.folt.models.datamodel.DataSourceInstance.getOpenTMSDatabases();
        openTMSDataSourceCombo = new Combo(filesComposite, SWT.DROP_DOWN | SWT.READ_ONLY);
        openTMSDataSourceCombo.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL));
        

Die Combobox mit den Datenquellen befüllen.

        for (int i = 0; i < openTMSDatabases.size(); i++)
        {
            openTMSDataSourceCombo.add(openTMSDatabases.get(i));
        }
...
        

Hier ggf. irgendwelche Aktionen auslösen, wenn ein Combobox Eintrag selektiert wird.

        openTMSDataSourceCombo.addSelectionListener(new SelectionAdapter()
        {
            public void widgetSelected(SelectionEvent e)
            {
                ...
            }
        });
...

Nach diese Änderung sieht der Dialog nun so aus:

Nachdem man die Checkbox for openTMS Datenquellen selektiert hat, kann man nun die gewünschte Datenquelle auswählen.

Im ursprünglichen Dialog konnte mit dem Knopf "Zähle TMX TU Einträge" die Anzahl der Einträge in der TMX Datei ermittelt werden. Dies will ich nun um die Möglichkeit erweitern auch die Anzahl der Einträge in der Datenquelle anzuzeigen. Auch das ist nicht schwierig:
...

countTmxBrowseSource ist ein SWT Button, der das Zählen auslöst.

        countTmxBrowseSource = new Button(langComposite, SWT.PUSH);
        countTmxBrowseSource.setText(Messages.getString("countfiledialog.title"));
        countTmxBrowseSource.addSelectionListener(new SelectionAdapter()
        {
            public void widgetSelected(SelectionEvent e)
            {
                if (sourceNameText.equals(""))
                    return;
                Cursor cursor = shell.getCursor();
                int iNum = 0;
                int iBucks = 1;
                shell.setCursor(new Cursor(shell.getDisplay(), SWT.CURSOR_WAIT));
                shell.setText(Messages.getString("ExtractionDialogue"));
                if (!openTMSDatabasesCheckbox.getSelection())
                {

Hier steht der Code zum Zählen der Einträge in einer TMX Datei.

        }         
                else
                {

numFragments ist Textfenster (SWT Text). Es zeigt die gezählten Einträge an.

                    numFragments.setText(-1 + " / " + -1);
                    try
                    {
                        sourceDocument = openTMSDataSourceCombo.getText();

Holen der Data Source Instanz mit dem ausgewählten Data Source Namen.

                        DataSource datasource = de.folt.models.datamodel.DataSourceInstance.createInstance(sourceDocument);

Fehlerfall...

                        if (datasource == null)
                        {
                            numFragments.setText(-2 + " / " + -2);
                            shell.setCursor(cursor);
                            return;
                        }
                        iNum = 0;
 

Starte Zählen der Einträge. Zuerst die Enumeration der Datenquelle initialisieren und dann solange durchlaufen, bis alle Einträge abgearbeitet sind.

                        datasource.initEnumeration();
                        while (datasource.hasMoreElements())
                        {
                            de.folt.models.datamodel.MultiLingualObject multi = datasource.nextElement();
                            iNum++;
                            numFragments.setText(iNum + " / " + iBucks);
                        }
                    }
                    catch (OpenTMSException e1)
                    {
                        numFragments.setText(-99 + " / " + -99);
                        e1.printStackTrace();
                        shell.setCursor(cursor);
                        return;
                    }
                }

Nun die Anzahl im Dialog final anzeigen.

                numFragments.setText(iNum + " / " + iBucks);
                ...
            }
        });
...

Resüme: Mit ein paar Zeilen Code und einem Aufwand von etwa zwei Stunden (ohne das Schreiben dieses Beitrags) konnte der Araya Bilinguale Terminologie Extraktor entscheidend erweitert werden. In Zukunft kann das Werkzeug jede beliebige Datenquelle, die von openTMS unterstützt wird, analysieren. Ohne weiteren Aufwand. Ein Kosten/Nutzenverhältnis, das sich gelohnt hat. Ohne das openTMS Plugin hätte für jeden Datentyp eine Extra-Implementierung und Funktion erstellt werden müssen. Der Aufwand wäre sicher sehr viel höher gewesen. Der Einsatz von openTMS hat sich also gelohnt! Das Ergebnis (die Testversion) kann unter http://www.heartsome.de/de/termextraction.php heruntergeladen werden.

Der angekündigte Beitrag über die Fuzzy Suche erscheint demnächst!

Dr. Klemens Waldhör klemens.waldhoer @ opentms.de - Heartsome Europe GmbH www.heartsome.de