cz.cuni.mff.ms.brodecva.botnicek.ide.project.views.DefaultPrefixesSettingsTableModel.java Source code

Java tutorial

Introduction

Here is the source code for cz.cuni.mff.ms.brodecva.botnicek.ide.project.views.DefaultPrefixesSettingsTableModel.java

Source

/**
 * Copyright Vclav Brodec 2014.
 * 
 * This file is part of Botn?ek.
 * 
 * Botn?ek is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 * 
 * Botn?ek is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with Botn?ek.  If not, see <http://www.gnu.org/licenses/>.
 */
package cz.cuni.mff.ms.brodecva.botnicek.ide.project.views;

import java.net.URI;
import java.util.Map;
import java.util.TreeMap;

import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableMap;

import cz.cuni.mff.ms.brodecva.botnicek.ide.utils.resources.UiLocalizer;
import cz.cuni.mff.ms.brodecva.botnicek.ide.utils.swing.models.AbstractNameValueTableModel;
import cz.cuni.mff.ms.brodecva.botnicek.library.platform.AIML;
import cz.cuni.mff.ms.brodecva.botnicek.library.platform.XML;

/**
 * <p>
 * Model tabulky, kter obsahuje v prvnm sloupci URI prostoru jmen XML a v
 * druhm pak vchoz prefix, kter mu budou piazeny v dalm zpracovn.
 * </p>
 * <p>
 * Je vdy zajitno, e tabulka obsahuje njak prefix pro prostor jmen AIML a
 * njak prefix pro jeho schma.
 * </p>
 * <p>
 * Model nekontroluje uniktnost prefix. V takov situaci je lep ut prefixu
 * explicitn ve zdrojovm kdu. T se nelze spolehnout na validitu samotnch
 * etzc prefix podle pravidel XML.
 * </p>
 * 
 * @author Vclav Brodec
 * @version 1.0
 */
final class DefaultPrefixesSettingsTableModel extends AbstractNameValueTableModel<URI, String>
        implements PrefixesSettingsTableModel {

    private static final long serialVersionUID = 1L;

    /**
     * Vytvo przdn model (a na vchoz hodnoty).
     * 
     * @return model s vchozmi hodnotami
     */
    public static DefaultPrefixesSettingsTableModel create() {
        final TreeMap<URI, String> namespacesToPrefixes = new TreeMap<>();

        namespacesToPrefixes.put(URI.create(AIML.NAMESPACE_URI.getValue()), AIML.DEFAULT_PREFIX.getValue());
        namespacesToPrefixes.put(URI.create(XML.SCHEMA_NAMESPACE_URI.getValue()),
                XML.DEFAULT_SCHEMA_PREFIX.getValue());

        return create(namespacesToPrefixes);
    }

    /**
     * Vytvo model, kter nastavuje pro dan prostory jmen dodan prefixy.
     * 
     * @param namespacesToPrefixes
     *            zobrazen URI prostor jmen na prefixy
     * @return model
     * @throws IllegalArgumentException
     *             pokud zobrazen neobsahuje poloky pro povinn prostory jmen
     */
    public static DefaultPrefixesSettingsTableModel create(
            final Map<? extends URI, ? extends String> namespacesToPrefixes) {
        final ImmutableMap<URI, String> copy = ImmutableMap.copyOf(namespacesToPrefixes);

        Preconditions.checkArgument(copy.containsKey(URI.create(AIML.NAMESPACE_URI.getValue())));
        Preconditions.checkArgument(copy.containsKey(URI.create(XML.SCHEMA_NAMESPACE_URI.getValue())));

        return new DefaultPrefixesSettingsTableModel(namespacesToPrefixes);
    }

    private DefaultPrefixesSettingsTableModel(final Map<? extends URI, ? extends String> namespacesToPrefixes) {
        super(namespacesToPrefixes, UiLocalizer.print("NAMESPACE_COLUMN_NAME"),
                UiLocalizer.print("PREFIX_COLUMN_NAME"));
    }

    /*
     * (non-Javadoc)
     * 
     * @see
     * cz.cuni.mff.ms.brodecva.botnicek.ide.utils.swing.NameValueTableModel#
     * emptyValue()
     */
    @Override
    protected String defaultValue() {
        return "";
    }

    /*
     * (non-Javadoc)
     * 
     * @see javax.swing.table.TableModel#isCellEditable(int, int)
     */
    @Override
    public boolean isCellEditable(final int rowIndex, final int columnIndex) {
        if (columnIndex == 0) {
            final Object value = getValueAt(rowIndex, 0);
            if (value.equals(AIML.NAMESPACE_URI.getValue()) || value.equals(XML.SCHEMA_NAMESPACE_URI.getValue())) {
                return false;
            }
        }

        return super.isCellEditable(rowIndex, columnIndex);
    }

    /*
     * (non-Javadoc)
     * 
     * @see
     * cz.cuni.mff.ms.brodecva.botnicek.ide.utils.swing.NameValueTableModel#
     * nameOf(java.lang.String)
     */
    @Override
    protected URI nameOf(final String nameString) {
        return URI.create(nameString);
    }

    /*
     * (non-Javadoc)
     * 
     * @see cz.cuni.mff.ms.brodecva.botnicek.ide.utils.swing.models.
     * AbstractNameValueTableModel#update(java.util.Map)
     */
    @Override
    public void update(final Map<URI, String> namespacesToPrefixes) {
        final ImmutableMap<URI, String> copy = ImmutableMap.copyOf(namespacesToPrefixes);

        Preconditions.checkArgument(copy.containsKey(URI.create(AIML.NAMESPACE_URI.getValue())));
        Preconditions.checkArgument(copy.containsKey(URI.create(XML.SCHEMA_NAMESPACE_URI.getValue())));

        super.update(copy);
    }

    /*
     * (non-Javadoc)
     * 
     * @see
     * cz.cuni.mff.ms.brodecva.botnicek.ide.utils.swing.NameValueTableModel#
     * valueOf(java.lang.String)
     */
    @Override
    protected String valueOf(final String valueString) {
        return valueString;
    }
}