    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.event.ActionListener;
    019    import ch.uzh.ifi.attempto.acewiki.Wiki;
    020    import ch.uzh.ifi.attempto.acewiki.core.ontology.OntologyElement;
    021    import ch.uzh.ifi.attempto.acewiki.core.ontology.TrAdjRole;
    022    import ch.uzh.ifi.attempto.ape.FunctionWords;
    023    import ch.uzh.ifi.attempto.echocomp.TextField;
    024    import ch.uzh.ifi.attempto.echocomp.WindowPane;
    025
    026    /**
    027     * This class represents a form to create or modify transitive adjectives.
    028     *
    029     * @author Tobias Kuhn
    030     */
    031    public class TrAdjForm extends FormPane {
    032
    033            private static final long serialVersionUID = -4367996031949560664L;
    034
    035            private TextField trAdjField = new TextField();
    036
    037            private TrAdjRole role;
    038
    039            /**
    040             * Creates a new form for transitive adjectives.
    041             *
    042             * @param role The role that is represented by the transitive adjective.
    043             * @param window The host window of the form.
    044             * @param wiki The wiki instance.
    045             * @param actionListener The actionlistener.
    046             */
    047            public TrAdjForm(TrAdjRole role, WindowPane window, Wiki wiki, ActionListener actionListener) {
    048                    super(window, wiki, actionListener);
    049                    this.role = role;
    050
    051                    setIconRow("role",
    052                                    "Every transitive adjective represents a certain relation between things. " +
    053                                    "For example, the transitive adjective \"located in\" relates things to their location. " +
    054                                    "Transitive adjectives should consists of an adjective that is followed by a preposition."
    055                            );
    056                    addRow("tr. adjective", trAdjField, "examples: located in, matched with, fond of", true);
    057
    058                    trAdjField.setText(role.getPrettyWord(0));
    059
    060                    ApplicationInstance.getActive().setFocusedComponent(trAdjField);
    061            }
    062
    063            /**
    064             * Creates a new creator window for transitive adjectives.
    065             *
    066             * @param wiki The wiki instance.
    067             * @param actionListener The actionlistener.
    068             * @return The new creator window.
    069             */
    070            public static WordEditorWindow createCreatorWindow(Wiki wiki, ActionListener actionListener) {
    071                    WordEditorWindow creatorWindow = WordEditorWindow.createCreatorWindow();
    072                    creatorWindow.addTab(new TrAdjForm(new TrAdjRole(), creatorWindow, wiki, actionListener));
    073                    return creatorWindow;
    074            }
    075
    076            /**
    077             * Creates a new editor window for transitive adjectives.
    078             *
    079             * @param role The role that is represented by the transitive adjective that should be edited.
    080             * @param wiki The wiki instance.
    081             * @return The new editor window.
    082             */
    083            public static WordEditorWindow createEditorWindow(TrAdjRole role, Wiki wiki) {
    084                    WordEditorWindow editorWindow = WordEditorWindow.createEditorWindow();
    085                    editorWindow.addTab(new TrAdjForm(role, editorWindow, wiki, wiki));
    086                    return editorWindow;
    087            }
    088
    089            protected void save() {
    090                    Wiki wiki = getWiki();
    091                    String name = normalize(trAdjField.getText());
    092                    String nameP = name.replace("_", " ");
    093
    094                    if (name.equals("")) {
    095                            wiki.log("edit", "error: no word defined");
    096                            showErrorMessage("No word defined: Please specify the transitive adjective.");
    097                            return;
    098                    }
    099                    if (!isValidString(name)) {
    100                            wiki.log("edit", "error: word contains invalid character");
    101                            showErrorMessage("Invalid character: Only a-z, A-Z, 0-9, -, and spaces are allowed, " +
    102                                    "and the first character must be one of a-z A-Z.");
    103                            return;
    104                    }
    105                    if (FunctionWords.isFunctionWord(name)) {
    106                            wiki.log("edit", "error: word is predefined");
    107                            showErrorMessage("'" + nameP + "' is a predefined word and cannot be used here.");
    108                            return;
    109                    }
    110                    OntologyElement oe = wiki.getOntology().get(name);
    111                    if (oe != null && oe != role) {
    112                            wiki.log("edit", "error: word is already used");
    113                            showErrorMessage("The word '" + nameP + "' is already used. Please use a different one.");
    114                            return;
    115                    }
    116                    role.setWords(name);
    117                    wiki.log("edit", "transitive adjective: " + name);
    118                    if (role.getOntology() == null) {
    119                            role.registerAt(getWiki().getOntology());
    120                    }
    121                    finished(role);
    122            }
    123
    124            public String toString() {
    125                    return "Transitive Adjective";
    126            }
    127
    128    }