    001    // This file is part of the Attempto Java Packages.
    002    // Copyright 2008, Attempto Group, University of Zurich (see http://attempto.ifi.uzh.ch).
    003    //
    004    // The Attempto Java Packages is free software: you can redistribute it and/or modify it under the
    005    // terms of the GNU Lesser General Public License as published by the Free Software Foundation,
    006    // either version 3 of the License, or (at your option) any later version.
    007    //
    008    // The Attempto Java Packages is distributed in the hope that it will be useful, but WITHOUT ANY
    009    // WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
    010    // PURPOSE. See the GNU Lesser General Public License for more details.
    011    //
    012    // You should have received a copy of the GNU Lesser General Public License along with the Attempto
    013    // Java Packages. If not, see http://www.gnu.org/licenses/.
    014
    015    package ch.uzh.ifi.attempto.acewiki.gui.editor;
    016
    017    import nextapp.echo2.app.ApplicationInstance;
    018    import nextapp.echo2.app.CheckBox;
    019    import nextapp.echo2.app.ResourceImageReference;
    020    import nextapp.echo2.app.event.ActionListener;
    021    import ch.uzh.ifi.attempto.acewiki.Wiki;
    022    import ch.uzh.ifi.attempto.acewiki.core.ontology.Individual;
    023    import ch.uzh.ifi.attempto.acewiki.core.ontology.OntologyElement;
    024    import ch.uzh.ifi.attempto.ape.FunctionWords;
    025    import ch.uzh.ifi.attempto.echocomp.TextField;
    026    import ch.uzh.ifi.attempto.echocomp.WindowPane;
    027
    028    /**
    029     * This class represents a form to create or modify proper names.
    030     *
    031     * @author Tobias Kuhn
    032     */
    033    public class ProperNameForm extends FormPane {
    034
    035            private static final long serialVersionUID = 7860047859937196093L;
    036
    037            private TextField nameField = new TextField();
    038            private CheckBox defArticleCheckBox = new CheckBox();
    039
    040            private Individual ind;
    041
    042            /**
    043             * Creates a new proper name form.
    044             *
    045             * @param ind The individual that is represented by the proper name.
    046             * @param window The host window of the form.
    047             * @param wiki The wiki instance.
    048             * @param actionListener The actionlistener.
    049             */
    050            public ProperNameForm(Individual ind, WindowPane window, Wiki wiki, ActionListener actionListener) {
    051                    super(window, wiki, actionListener);
    052                    this.ind = ind;
    053
    054                    setIconRow("individual",
    055                                    "Every proper name represents a certain individual. " +
    056                                    "The country \"Switzerland\", the person \"Bob Dylan\", the river \"Nile\", " +
    057                                    "and the organization \"United Nations\" are typical examples for such individuals. " +
    058                                    "Some proper names require a definite article (\"the Nile\", \"the United Nations\") " +
    059                                    "and others do not (\"Switzerland\", \"Bob Dylan\")."
    060                            );
    061                    addRow("proper name", nameField, "examples: Switzerland, Bob Dylan, Nile, United Nations", true);
    062                    addRow("definite article", defArticleCheckBox, "examples: the Nile, the United Nations", false);
    063
    064                    nameField.setText(ind.getPrettyWord(1));
    065                    defArticleCheckBox.setSelected(ind.hasDefiniteArticle());
    066                    defArticleCheckBox.setStateIcon(new ResourceImageReference("ch/uzh/ifi/attempto/acewiki/gui/img/notchecked.png"));
    067                    defArticleCheckBox.setSelectedStateIcon(new ResourceImageReference("ch/uzh/ifi/attempto/acewiki/gui/img/checked.png"));
    068
    069                    ApplicationInstance.getActive().setFocusedComponent(nameField);
    070            }
    071
    072            /**
    073             * Creates a new creator window for proper names.
    074             *
    075             * @param wiki The wiki instance.
    076             * @param actionListener The actionlistener.
    077             * @return The new creator window.
    078             */
    079            public static WordEditorWindow createCreatorWindow(Wiki wiki, ActionListener actionListener) {
    080                    WordEditorWindow creatorWindow = WordEditorWindow.createCreatorWindow();
    081                    creatorWindow.addTab(new ProperNameForm(new Individual(), creatorWindow, wiki, actionListener));
    082                    return creatorWindow;
    083            }
    084
    085            /**
    086             * Creates a new editor window for proper names.
    087             *
    088             * @param ind The individual that is represented by the proper name that should be edited.
    089             * @param wiki The wiki instance.
    090             * @return The new editor window.
    091             */
    092            public static WordEditorWindow createEditorWindow(Individual ind, Wiki wiki) {
    093                    WordEditorWindow editorWindow = WordEditorWindow.createEditorWindow();
    094                    editorWindow.addTab(new ProperNameForm(ind, editorWindow, wiki, wiki));
    095                    return editorWindow;
    096            }
    097
    098            protected void save() {
    099                    Wiki wiki = getWiki();
    100                    String name = normalize(nameField.getText());
    101                    if (name.toLowerCase().startsWith("the_")) {
    102                            name = name.substring(4);
    103                    }
    104                    String nameP = name.replace("_", " ");
    105
    106                    if (name.equals("")) {
    107                            wiki.log("edit", "error: no word defined");
    108                            showErrorMessage("No proper name defined: Please specify a name.");
    109                            return;
    110                    }
    111                    if (!isValidString(name)) {
    112                            wiki.log("edit", "error: word contains invalid character");
    113                            showErrorMessage("Invalid character: Only a-z, A-Z, 0-9, -, and spaces are allowed, " +
    114                                    "and the first character must be one of a-z A-Z.");
    115                            return;
    116                    }
    117                    if (FunctionWords.isFunctionWord(name)) {
    118                            wiki.log("edit", "error: word is predefined");
    119                            showErrorMessage("'" + nameP + "' is a predefined word and cannot be used here.");
    120                            return;
    121                    }
    122                    OntologyElement oe = wiki.getOntology().get(name);
    123                    if (oe != null && oe != ind) {
    124                            wiki.log("edit", "error: word is already used");
    125                            showErrorMessage("The word '" + nameP + "' is already used. Please use a different one.");
    126                            return;
    127                    }
    128                    String word = name;
    129                    if (defArticleCheckBox.isSelected()) {
    130                            word = "the " + name;
    131                    }
    132                    ind.setWords(word, name);
    133                    wiki.log("edit", "proper name: " + word);
    134                    if (ind.getOntology() == null) {
    135                            ind.registerAt(getWiki().getOntology());
    136                    }
    137                    finished(ind);
    138            }
    139
    140            public String toString() {
    141                    return "Proper Name";
    142            }
    143
    144    }