Ptidej-v5.2-master/POM Tests/data/ArgoUML_0.28/src/org/argouml/kernel/ProjectSettings.java
// $Id: ProjectSettings.java 16435 2008-12-23 19:24:35Z tfmorris $
// Copyright (c) 2006-2008 The Regents of the University of California. All
// Rights Reserved. Permission to use, copy, modify, and distribute this
// software and its documentation without fee, and without a written
// agreement is hereby granted, provided that the above copyright notice
// and this paragraph appear in all copies. This software program and
// documentation are copyrighted by The Regents of the University of
// California. The software program and documentation are supplied "AS
// IS", without any accompanying services from The Regents. The Regents
// does not warrant that the operation of the program will be
// uninterrupted or error-free. The end-user understands that the program
// was developed for research purposes and is advised not to rely
// exclusively on the program for any reason. IN NO EVENT SHALL THE
// UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT,
// SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS,
// ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF
// THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF
// SUCH DAMAGE. THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY
// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE
// PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF
// CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT,
// UPDATES, ENHANCEMENTS, OR MODIFICATIONS.

package org.argouml.kernel;

import java.awt.Font;
import java.beans.PropertyChangeEvent;

import org.argouml.application.events.ArgoDiagramAppearanceEvent;
import org.argouml.application.events.ArgoEventPump;
import org.argouml.application.events.ArgoEventTypes;
import org.argouml.application.events.ArgoNotationEvent;
import org.argouml.configuration.Configuration;
import org.argouml.configuration.ConfigurationKey;
import org.argouml.notation.Notation;
import org.argouml.notation.NotationName;
import org.argouml.notation.NotationProviderFactory2;
import org.argouml.notation.NotationSettings;
import org.argouml.uml.diagram.DiagramAppearance;
import org.argouml.uml.diagram.DiagramSettings;
import org.tigris.gef.undo.Memento;
import org.tigris.gef.undo.UndoManager;

/**
 * A datastructure for settings for a Project. <p>
 *
 * Most getters return a string, since they are used by "argo.tee".
 * This is also the reason all these attributes
 * are not part of a Map or something. <p>
 *
 * TODO: The header comment is currently not used - this function
 * is not completely implemented yet. How do we store this in the project?
 * Where should the user enter his header comment? See issue 4813.
 *
 * @author michiel
 */
public class ProjectSettings {

    // Default diagram settings
    private DiagramSettings diaDefault;

    // Default notation settings
    private NotationSettings npSettings;
    
    /** Setting to control whether stereotypes are shown in explorer view */
    private boolean showExplorerStereotypes;
    
    /* Generation preferences: */
    private String headerComment =
        "Your copyright and other header comments";


    /**
     * Create a new set of project settings,
     * based on the application defaults. <p>
     *
     * The constructor is not public, since this
     * class is only created from the Project..
     */
    ProjectSettings() {
        super();

        diaDefault = new DiagramSettings();
        npSettings = diaDefault.getNotationSettings();
        
        String notationLanguage =
            Notation.getConfiguredNotation().getConfigurationValue();
        // TODO: The concept of a single global notation language doesn't
        // work with multiple projects
        NotationProviderFactory2.setCurrentLanguage(notationLanguage);
        npSettings.setNotationLanguage(notationLanguage);
        
        diaDefault.setShowBoldNames(Configuration.getBoolean(
                Notation.KEY_SHOW_BOLD_NAMES));
        
        npSettings.setUseGuillemets(Configuration.getBoolean(
                Notation.KEY_USE_GUILLEMOTS, false));
        /*
         * The next one defaults to TRUE, to stay compatible with older
         * ArgoUML versions that did not have this setting:
         */
        npSettings.setShowAssociationNames(Configuration.getBoolean(
                Notation.KEY_SHOW_ASSOCIATION_NAMES, true));
        npSettings.setShowVisibilities(Configuration.getBoolean(
                Notation.KEY_SHOW_VISIBILITY));
        npSettings.setShowMultiplicities(Configuration.getBoolean(
                Notation.KEY_SHOW_MULTIPLICITY));
        npSettings.setShowInitialValues(Configuration.getBoolean(
                Notation.KEY_SHOW_INITIAL_VALUE));
        npSettings.setShowProperties(Configuration.getBoolean(
                Notation.KEY_SHOW_PROPERTIES));
        /*
         * The next ones defaults to TRUE, to stay compatible with older
         * ArgoUML versions that did not have this setting:
         */
        npSettings.setShowTypes(Configuration.getBoolean(
                Notation.KEY_SHOW_TYPES, true));
        
        // TODO: Why is this a notation setting?
        diaDefault.setShowBidirectionalArrows(!Configuration.getBoolean(
                Notation.KEY_HIDE_BIDIRECTIONAL_ARROWS, true));
        
        showExplorerStereotypes = Configuration.getBoolean(
                Notation.KEY_SHOW_STEREOTYPES);
        /*
         * The next one defaults to TRUE, despite that this is
         * NOT compatible with older ArgoUML versions
         * (before 0.24) that did
         * not have this setting - see issue 1395 for the rationale:
         */
        npSettings.setShowSingularMultiplicities(Configuration.getBoolean(
                Notation.KEY_SHOW_SINGULAR_MULTIPLICITIES, true));
        
        // TODO: Why is this a notation setting?
        diaDefault.setDefaultShadowWidth(Configuration.getInteger(
                Notation.KEY_DEFAULT_SHADOW_WIDTH, 1));

        diaDefault.setDefaultStereotypeView(Configuration.getInteger(
                ProfileConfiguration.KEY_DEFAULT_STEREOTYPE_VIEW,
                DiagramAppearance.STEREOTYPE_VIEW_TEXTUAL));

        /*
         * Diagram appearance settings:
         */
        diaDefault.setFontName(
                DiagramAppearance.getInstance().getConfiguredFontName());
        diaDefault.setFontSize(
                Configuration.getInteger(DiagramAppearance.KEY_FONT_SIZE));


    }

    /**
     * Send all events required for post-load of project.<p>
     * @deprecated for 0.27.2 by tfmorris.  No replacement.  Diagrams/Figs are
     * now created with the correct initial settings.
     */
    @Deprecated
    public void init() {
        /*
         * Since this is (hopefully) a temporary solution, and nobody ever looks
         * at the type of notation event, we can simplify from sending every
         * existing event to one event only. But since there is no catch-all
         * event defined, we just make one up. Rationale: reduce the number of
         * total refreshes of the drawing.
         */
        init(true, Configuration.makeKey("notation", "all"));

        /*
         * Since this is (hopefully) a temporary solution, and nobody ever looks
         * at the type of the diagram appearance event, we can simplify from
         * sending every existing event to one event only. But since there is no
         * catch-all event defined, we just use one. Rationale: reduce the
         * number of total refreshes of the drawing.
         */
        fireDiagramAppearanceEvent(
                Configuration.makeKey("diagramappearance", "all"), 
                0, 0);

    }

    private void init(boolean value, ConfigurationKey key) {
        fireNotationEvent(key, value, value);
    }
    
    /**
     * @return the default diagram settings
     */
    public DiagramSettings getDefaultDiagramSettings() {
        return diaDefault;
    }

    /**
     * @return the default project wide notation settings
     */
    public NotationSettings getNotationSettings() {
        return npSettings;
    }

    /**
     * Used by "argo.tee".
     *
     * @return Returns the notation language.
     */
    public String getNotationLanguage() {
        return npSettings.getNotationLanguage();
    }

    /**
     * @return Return the notation name.
     */
    public NotationName getNotationName() {
        return Notation.findNotation(getNotationLanguage());
    }

    /**
     * @param newLanguage the notation language.
     * @return true if the notation is set - false if it does not exist
     */
    public boolean setNotationLanguage(final String newLanguage) {
        if (getNotationLanguage().equals(newLanguage)) {
            return true;
        }
        if (Notation.findNotation(newLanguage) == null) {
            /* This Notation is not available! */
            return false;
        }

        final String oldLanguage = getNotationLanguage();

        Memento memento = new Memento() {
            private final ConfigurationKey key = Notation.KEY_DEFAULT_NOTATION;

            public void redo() {
                npSettings.setNotationLanguage(newLanguage);
                NotationProviderFactory2.setCurrentLanguage(newLanguage);
                fireNotationEvent(key, oldLanguage, newLanguage);
            }

            public void undo() {
                npSettings.setNotationLanguage(oldLanguage);
                NotationProviderFactory2.setCurrentLanguage(oldLanguage);
                fireNotationEvent(key, newLanguage, oldLanguage);
            }
        };
        doUndoable(memento);
        return true;
    }

    private void doUndoable(Memento memento) {
        // TODO: This needs to be managing undo on a per-project basis
        // instead of using GEF's global undo manager
        if (UndoManager.getInstance().isGenerateMementos()) {
            UndoManager.getInstance().addMemento(memento);
        }
        memento.redo();
        ProjectManager.getManager().setSaveEnabled(true);
    }

    /**
     * @param nn the new notation language
     */
    public void setNotationLanguage(NotationName nn) {
        setNotationLanguage(nn.getConfigurationValue());
    }

    /**
     * Used by "argo.tee".
     *
     * @return Returns "true" if we show bold names.
     */
    public String getShowBoldNames() {
        return Boolean.toString(getShowBoldNamesValue());
    }

    /**
     * @return Returns <code>true</code> if we show bold names.
     * @deprecated for 0.27.2 by tfmorris.  Use {@link DiagramSettings}.
     */
    @Deprecated
    public boolean getShowBoldNamesValue() {
        return diaDefault.isShowBoldNames();
    }

    /**
     * @param showbold <code>true</code> if names are to be shown in bold font.
     * @deprecated for 0.27.2 by tfmorris.  Use {@link DiagramSettings}.
     */
    @Deprecated
    public void setShowBoldNames(String showbold) {
        setShowBoldNames(Boolean.valueOf(showbold).booleanValue());
    }

    /**
     * @param showem <code>true</code> if names are to be shown in bold font.
     * @deprecated for 0.27.2 by tfmorris.  Use {@link DiagramSettings}.
     */
    @Deprecated
    public void setShowBoldNames(final boolean showem) {
        if (diaDefault.isShowBoldNames() == showem) {
            return;
        }

        Memento memento = new Memento() {
            private final ConfigurationKey key = Notation.KEY_SHOW_BOLD_NAMES;

            public void redo() {
                diaDefault.setShowBoldNames(showem);
                fireNotationEvent(key, !showem, showem);
            }

            public void undo() {
                diaDefault.setShowBoldNames(!showem);
                fireNotationEvent(key, showem, !showem);
            }
        };
        doUndoable(memento);
    }

    /**
     * Used by "argo.tee".
     *
     * @see #getUseGuillemotsValue()
     * @return Returns "true" if we show guillemets.
     */
    public String getUseGuillemots() {
        return Boolean.toString(getUseGuillemotsValue());
    }

    /**
     * Get setting controlling whether guillemets (the double angle brackets
     * quotation mark characters from Unicode) are to be used for formatting
     * instead of two individual characters for each quote mark (e.g. >>). NOTE:
     * This affects not only the Diagrams, but also display in the explorer view
     * and other places.
     * 
     * @return Returns <code>true</code> if we show guillemets.
     */
    public boolean getUseGuillemotsValue() {
        return npSettings.isUseGuillemets();
    }
    

    /**
     * @see #getUseGuillemotsValue()
     * @param showem <code>true</code> if guillemets are to be used.
     */
    public void setUseGuillemots(String showem) {
        setUseGuillemots(Boolean.valueOf(showem).booleanValue());
    }

    /**
     * @see #getUseGuillemotsValue()
     * @param showem <code>true</code> if guillemets are to be shown.
     */
    public void setUseGuillemots(final boolean showem) {
        if (getUseGuillemotsValue() == showem) {
            return;
        }

        Memento memento = new Memento() {
            private final ConfigurationKey key = Notation.KEY_USE_GUILLEMOTS;

            public void redo() {
                npSettings.setUseGuillemets(showem);
                fireNotationEvent(key, !showem, showem);
            }

            public void undo() {
                npSettings.setUseGuillemets(!showem);
                fireNotationEvent(key, showem, !showem);
            }
        };
        doUndoable(memento);
    }

    /**
     * @return the left pointing guillemet, i.e. << or the one-character symbol
     * @deprecated for 0.27.2 by tfmorris. There's no need for a separate method
     *             for this. It can be easily handled in a format string using
     *             the results of {@link DiagramSettings#isUseGuillemets()}.
     */
    @Deprecated
    public String getLeftGuillemot() {
        return getUseGuillemotsValue() ? "\u00ab" : "<<";
    }

    /**
     * @return the right pointing guillemet, i.e. >> or the one-character symbol
     * @deprecated for 0.27.2 by tfmorris. There's no need for a separate method
     *             for this. It can be easily handled in a format string using
     *             the results of {@link DiagramSettings#isUseGuillemets()}.
     */
    @Deprecated
    public String getRightGuillemot() {
        return getUseGuillemotsValue() ? "\u00bb" : ">>";
    }

    /**
     * Used by "argo.tee".
     *
     * @return Returns "true" if we show association names.
     * @deprecated for 0.27.2 by tfmorris.  Use {@link NotationSettings}.
     */
    @Deprecated
    public String getShowAssociationNames() {
        return Boolean.toString(getShowAssociationNamesValue());
    }

    /**
     * @return Returns <code>true</code> if we show association names.
     * @deprecated for 0.27.2 by tfmorris.  Use {@link NotationSettings}.
     */
    @Deprecated
    public boolean getShowAssociationNamesValue() {
        return npSettings.isShowAssociationNames();
    }

    /**
     * @param showem <code>true</code> if association names are to be shown.
     * @deprecated for 0.27.2 by tfmorris.  Use {@link NotationSettings}.
     */
    @Deprecated
    public void setShowAssociationNames(String showem) {
        setShowAssociationNames(Boolean.valueOf(showem).booleanValue());
    }

    /**
     * @param showem <code>true</code> if association names are to be shown.
     * @deprecated for 0.27.2 by tfmorris.  Use {@link NotationSettings}.
     */
    @Deprecated
    public void setShowAssociationNames(final boolean showem) {
        if (npSettings.isShowAssociationNames() == showem) {
            return;
        }

        Memento memento = new Memento() {
            private final ConfigurationKey key = 
                Notation.KEY_SHOW_ASSOCIATION_NAMES;

            public void redo() {
                npSettings.setShowAssociationNames(showem);
                fireNotationEvent(key, !showem, showem);
            }

            public void undo() {
                npSettings.setShowAssociationNames(!showem);
                fireNotationEvent(key, showem, !showem);
            }
        };
        doUndoable(memento);
    }

    /**
     * Used by "argo.tee".
     *
     * @return Returns "true" if we show visibilities.
     * @deprecated for 0.27.2 by tfmorris. Use {@link NotationSettings}.
     */
    @Deprecated
    public String getShowVisibility() {
        return Boolean.toString(getShowVisibilityValue());
    }

    /**
     * @return Returns <code>true</code> if we show visibilities.
     * @deprecated for 0.27.2 by tfmorris. Use {@link NotationSettings}.
     */
    @Deprecated
    public boolean getShowVisibilityValue() {
        return npSettings.isShowVisibilities();
    }

    /**
     * @param showem <code>true</code> if visibilities are to be shown.
     * @deprecated for 0.27.2 by tfmorris. Use {@link NotationSettings}.
     */
    @Deprecated
    public void setShowVisibility(String showem) {
        setShowVisibility(Boolean.valueOf(showem).booleanValue());
    }

    /**
     * @param showem <code>true</code> if visibilities are to be shown.
     * @deprecated for 0.27.2 by tfmorris. Use {@link NotationSettings}.
     */
    @Deprecated
    public void setShowVisibility(final boolean showem) {
        if (npSettings.isShowVisibilities() == showem) {
            return;
        }

        Memento memento = new Memento() {
            private final ConfigurationKey key = Notation.KEY_SHOW_VISIBILITY;

            public void redo() {
                npSettings.setShowVisibilities(showem);
                fireNotationEvent(key, !showem, showem);
            }

            public void undo() {
                npSettings.setShowVisibilities(!showem);
                fireNotationEvent(key, showem, !showem);
            }
        };
        doUndoable(memento);
    }

    /**
     * Used by "argo.tee".
     *
     * @return Returns "true" if we show multiplicities.
     * @deprecated for 0.27.2 by tfmorris.  Use {@link NotationSettings}.
     */
    @Deprecated
    public String getShowMultiplicity() {
        return Boolean.toString(getShowMultiplicityValue());
    }

    /**
     * @return Returns <code>true</code> if we show multiplicities.
     * @deprecated for 0.27.2 by tfmorris.  Use {@link NotationSettings}.
     */
    @Deprecated
    public boolean getShowMultiplicityValue() {
        return npSettings.isShowMultiplicities();
    }

    /**
     * @param showem <code>true</code> if multiplicity is to be shown.
      * @deprecated for 0.27.2 by tfmorris.  Use {@link NotationSettings}.
     */
    @Deprecated
    public void setShowMultiplicity(String showem) {
        setShowMultiplicity(Boolean.valueOf(showem).booleanValue());
    }

    /**
     * @param showem <code>true</code> if the multiplicity is to be shown.
     * @deprecated for 0.27.2 by tfmorris.  Use {@link NotationSettings}.
     */
    @Deprecated
    public void setShowMultiplicity(final boolean showem) {
        if (npSettings.isShowMultiplicities() == showem) {
            return;
        }

        Memento memento = new Memento() {
            private final ConfigurationKey key = Notation.KEY_SHOW_MULTIPLICITY;

            public void redo() {
                npSettings.setShowMultiplicities(showem);
                fireNotationEvent(key, !showem, showem);
            }

            public void undo() {
                npSettings.setShowMultiplicities(!showem);
                fireNotationEvent(key, showem, !showem);
            }
        };
        doUndoable(memento);
    }

    /**
     * Used by "argo.tee".
     *
     * @return Returns "true" if we show initial values.
     * @deprecated for 0.27.2 by tfmorris.  Use {@link NotationSettings}.
     */
    @Deprecated
    public String getShowInitialValue() {
        return Boolean.toString(getShowInitialValueValue());
    }

    /**
     * @return Returns <code>true</code> if we show initial values.
     * @deprecated for 0.27.2 by tfmorris.  Use {@link NotationSettings}.
     */
    @Deprecated
    public boolean getShowInitialValueValue() {
        return npSettings.isShowInitialValues();
    }

    /**
     * @param showem <code>true</code> if initial values are to be shown.
     * @deprecated for 0.27.2 by tfmorris.  Use {@link NotationSettings}.
     */
    @Deprecated
    public void setShowInitialValue(String showem) {
        setShowInitialValue(Boolean.valueOf(showem).booleanValue());
    }

    /**
     * @param showem <code>true</code> if initial values are to be shown.
     * @deprecated for 0.27.2 by tfmorris.  Use {@link NotationSettings}.
     */
    @Deprecated
    public void setShowInitialValue(final boolean showem) {
        if (npSettings.isShowInitialValues() == showem) {
            return;
        }

        Memento memento = new Memento() {
            private final ConfigurationKey key =
                Notation.KEY_SHOW_INITIAL_VALUE;

            public void redo() {
                npSettings.setShowInitialValues(showem);
                fireNotationEvent(key, !showem, showem);
            }

            public void undo() {
                npSettings.setShowInitialValues(!showem);
                fireNotationEvent(key, showem, !showem);
            }
        };
        doUndoable(memento);
    }

    /**
     * Used by "argo.tee".
     *
     * @return Returns "true" if we show properties.
     * @deprecated for 0.27.2 by tfmorris.  Use {@link NotationSettings}.
     */
    @Deprecated
    public String getShowProperties() {
        return Boolean.toString(getShowPropertiesValue());
    }

    /**
     * @return Returns <code>true</code> if we show properties.
     * @deprecated for 0.27.2 by tfmorris.  Use {@link NotationSettings}.
     */
    @Deprecated
    public boolean getShowPropertiesValue() {
        return npSettings.isShowProperties();
    }

    /**
     * @param showem <code>true</code> if properties are to be shown.
     * @deprecated for 0.27.2 by tfmorris.  Use {@link NotationSettings}.
     */
    @Deprecated
    public void setShowProperties(String showem) {
        setShowProperties(Boolean.valueOf(showem).booleanValue());
    }

    /**
     * @param showem <code>true</code> if properties are to be shown.
     * @deprecated for 0.27.2 by tfmorris. Use {@link NotationSettings}.
     */
    @Deprecated
    public void setShowProperties(final boolean showem) {
        if (npSettings.isShowProperties() == showem) {
            return;
        }

        Memento memento = new Memento() {
            private final ConfigurationKey key =
                Notation.KEY_SHOW_PROPERTIES;

            public void redo() {
                npSettings.setShowProperties(showem);
                fireNotationEvent(key, !showem, showem);
            }

            public void undo() {
                npSettings.setShowProperties(!showem);
                fireNotationEvent(key, showem, !showem);
            }
        };
        doUndoable(memento);
    }

    /**
     * Used by "argo.tee".
     *
     * @return Returns "true" if we show types.
     * @deprecated for 0.27.2 by tfmorris. Use {@link NotationSettings}.
     */
    @Deprecated
    public String getShowTypes() {
        return Boolean.toString(getShowTypesValue());
    }

    /**
     * @return Returns <code>true</code> if we show types.
     * @deprecated for 0.27.2 by tfmorris. Use {@link NotationSettings}.
     */
    @Deprecated
    public boolean getShowTypesValue() {
        return npSettings.isShowTypes();
    }

    /**
     * @param showem <code>true</code> if types are to be shown.
     * @deprecated for 0.27.2 by tfmorris. Use {@link NotationSettings}.
     */
    @Deprecated
    public void setShowTypes(String showem) {
        setShowTypes(Boolean.valueOf(showem).booleanValue());
    }

    /**
     * @param showem <code>true</code> if types are to be shown.
     * @deprecated for 0.27.2 by tfmorris. Use {@link NotationSettings}.
     */
    @Deprecated
    public void setShowTypes(final boolean showem) {
        if (npSettings.isShowTypes() == showem) {
            return;
        }

        Memento memento = new Memento() {
            private final ConfigurationKey key = Notation.KEY_SHOW_TYPES;

            public void redo() {
                npSettings.setShowTypes(showem);
                fireNotationEvent(key, !showem, showem);
            }

            public void undo() {
                npSettings.setShowTypes(!showem);
                fireNotationEvent(key, showem, !showem);
            }
        };
        doUndoable(memento);
    }


    /**
     * Used by "argo.tee".
     *
     * @return Returns "true" if we show stereotypes in the explorer.
     */
    public String getShowStereotypes() {
        return Boolean.toString(getShowStereotypesValue());
    }

    /**
     * TODO: Is this used in places other than on Diagrams?  If so, it needs to
     * stay in ProjectSettings (as well as being a DiagramSetting).
     * 
     * @return Returns <code>true</code> if we show stereotypes in the explorer
     */
    public boolean getShowStereotypesValue() {
        return showExplorerStereotypes;
    }

    /**
     * @param showem <code>true</code> if stereotypes are to be shown in the
     * explorer.
     */
    public void setShowStereotypes(String showem) {
        setShowStereotypes(Boolean.valueOf(showem).booleanValue());
    }

    /**
     * @param showem <code>true</code> if stereotypes are to be shown in the
     * explorer view.
     */
    public void setShowStereotypes(final boolean showem) {
        if (showExplorerStereotypes == showem) {
            return;
        }

        Memento memento = new Memento() {
            private final ConfigurationKey key = Notation.KEY_SHOW_STEREOTYPES;

            public void redo() {
                showExplorerStereotypes = showem;
                fireNotationEvent(key, !showem, showem);
            }

            public void undo() {
                showExplorerStereotypes = !showem;
                fireNotationEvent(key, showem, !showem);
            }
        };
        doUndoable(memento);
    }

    /**
     * Used by "argo.tee".
     *
     * @return Returns "true" if we show "1" Multiplicities.
     * @deprecated for 0.27.2 by tfmorris. Use {@link NotationSettings}.
     */
    @Deprecated
    public String getShowSingularMultiplicities() {
        return Boolean.toString(getShowSingularMultiplicitiesValue());
    }

    /**
     * @return Returns <code>true</code> if we show  "1" Multiplicities.
     * @deprecated for 0.27.2 by tfmorris.  Use {@link NotationSettings}.
     */
    @Deprecated
    public boolean getShowSingularMultiplicitiesValue() {
        return npSettings.isShowSingularMultiplicities();
    }

    /**
     * @param showem <code>true</code> if "1" Multiplicities are to be shown.
     * @deprecated for 0.27.2 by tfmorris.  Use {@link NotationSettings}.
     */
    @Deprecated
    public void setShowSingularMultiplicities(String showem) {
        setShowSingularMultiplicities(Boolean.valueOf(showem).booleanValue());
    }

    /**
     * @param showem <code>true</code> if "1" Multiplicities are to be shown.
     * @deprecated for 0.27.2 by tfmorris.  Use {@link NotationSettings}.
     */
    @Deprecated
    public void setShowSingularMultiplicities(final boolean showem) {
        if (npSettings.isShowSingularMultiplicities() == showem) {
            return;
        }

        Memento memento = new Memento() {
            private final ConfigurationKey key =
                Notation.KEY_SHOW_SINGULAR_MULTIPLICITIES;

            public void redo() {
                npSettings.setShowSingularMultiplicities(showem);
                fireNotationEvent(key, !showem, showem);
            }

            public void undo() {
                npSettings.setShowSingularMultiplicities(!showem);
                fireNotationEvent(key, showem, !showem);
            }
        };
        doUndoable(memento);
    }

    /**
     * Used by "argo.tee".
     *
     * @return Returns "true" if we show the arrows when
     * both association ends of an association are navigable.
     * @deprecated for 0.27.2 by tfmorris.  Use {@link DiagramSettings}.
     */
    @Deprecated
    public String getHideBidirectionalArrows() {
        return Boolean.toString(getHideBidirectionalArrowsValue());
    }

    /**
     * @return Returns <code>true</code> if we show the arrows when
     * both association ends of an association are navigable.

     * @deprecated for 0.27.2 by tfmorris.  Use {@link DiagramSettings}.
     */
    @Deprecated
    public boolean getHideBidirectionalArrowsValue() {
        return !diaDefault.isShowBidirectionalArrows();
    }

    /**
     * @param hideem <code>true</code> if both arrows are to be shown when
     * both association ends of an association are navigable.
     * @deprecated for 0.27.2 by tfmorris.  Use {@link DiagramSettings}.
     */
    @Deprecated
    public void setHideBidirectionalArrows(String hideem) {
        setHideBidirectionalArrows(Boolean.valueOf(hideem).booleanValue());
    }

    /**
     * @param hideem <code>true</code> if both arrows are to be shown when
     * both association ends of an association are navigable.
     * @deprecated for 0.27.2 by tfmorris.  Use {@link DiagramSettings}.
     */
    @Deprecated
    public void setHideBidirectionalArrows(final boolean hideem) {
        if (diaDefault.isShowBidirectionalArrows() == !hideem) {
            return;
        }

        Memento memento = new Memento() {
            private final ConfigurationKey key =
                Notation.KEY_HIDE_BIDIRECTIONAL_ARROWS;

            public void redo() {
                diaDefault.setShowBidirectionalArrows(!hideem);
                fireNotationEvent(key, !hideem, hideem);
            }

            public void undo() {
                diaDefault.setShowBidirectionalArrows(hideem);
                fireNotationEvent(key, hideem, !hideem);
            }
        };
        doUndoable(memento);
    }
    
    /**
     * Used by "argo.tee".
     *
     * @return Returns the shadow width.
     * @deprecated for 0.27.2 by tfmorris.  Use {@link DiagramSettings}.
     */
    @Deprecated
    public String getDefaultShadowWidth() {
        return Integer.valueOf(getDefaultShadowWidthValue()).toString();
    }

    /**
     * @return Returns the shadow width.
      * @deprecated for 0.27.2 by tfmorris.  Use {@link DiagramSettings}.
     */
    @Deprecated
    public int getDefaultShadowWidthValue() {
        return diaDefault.getDefaultShadowWidth();
    }

    /**
     * @param newWidth The Shadow Width.
     * @deprecated for 0.27.2 by tfmorris.  Use {@link DiagramSettings}.
     */
    @Deprecated
    public void setDefaultShadowWidth(final int newWidth) {
        final int oldValue = diaDefault.getDefaultShadowWidth();
        if (oldValue == newWidth) {
            return;
        }

        Memento memento = new Memento() {
            private final ConfigurationKey key =
                Notation.KEY_DEFAULT_SHADOW_WIDTH;

            public void redo() {
                diaDefault.setDefaultShadowWidth(newWidth);
                fireNotationEvent(key, oldValue, newWidth);
            }

            public void undo() {
                diaDefault.setDefaultShadowWidth(oldValue);
                fireNotationEvent(key, newWidth, oldValue);
            }
        };
        doUndoable(memento);
    }

    /**
     * @param width The shadow width to set.
     * @deprecated for 0.27.2 by tfmorris.  Use {@link DiagramSettings}.
     */
    @Deprecated
    public void setDefaultShadowWidth(String width) {
        setDefaultShadowWidth(Integer.parseInt(width));
    }

    /**
     * Used by "argo.tee".
     *
     * @return Returns the default stereotype view
     * @deprecated for 0.27.2 by tfmorris.  Use {@link DiagramSettings}.
     */
    @Deprecated
    public String getDefaultStereotypeView() {
        return Integer.valueOf(getDefaultStereotypeViewValue()).toString();
    }

    /**
     * @return Returns the default stereotype view
     * @deprecated for 0.27.2 by tfmorris.  Use {@link DiagramSettings}.
     */
    @Deprecated
    public int getDefaultStereotypeViewValue() {
        return diaDefault.getDefaultStereotypeViewInt();
    }


    /**
     * No longer used by "argo.tee". All uses deprecated.
     * 
     * @return the output directory name
     * @deprecated for 0.27.2 by tfmorris. This is a user setting, not a project
     *             setting.
     */
    @Deprecated
    public String getGenerationOutputDir() {
        return "";
    }

    /**
     * @param od the output directory name
     * @deprecated for 0.27.2 by tfmorris. This is a user setting, not a project
     *             setting. Any uses will be ignored.
     */
    @Deprecated
    public void setGenerationOutputDir(@SuppressWarnings("unused") String od) {
        // ignored
    }

    /**
     * @return the header comment string
     */
    public String getHeaderComment() {
        return headerComment;
    }

    /**
     * @param newView the default stereotype view
     * @deprecated for 0.27.2 by tfmorris.  Use {@link DiagramSettings}.
     */
    @Deprecated
    public void setDefaultStereotypeView(final int newView) {
        final int oldValue = diaDefault.getDefaultStereotypeViewInt();
        if (oldValue == newView) {
            return;
        }

        Memento memento = new Memento() {
            private final ConfigurationKey key =
                ProfileConfiguration.KEY_DEFAULT_STEREOTYPE_VIEW;

            public void redo() {
                diaDefault.setDefaultStereotypeView(newView);
                fireNotationEvent(key, oldValue, newView);
            }

            public void undo() {
                diaDefault.setDefaultStereotypeView(oldValue);
                fireNotationEvent(key, newView, oldValue);
            }
        };
        doUndoable(memento);
    }

    /**
     * @param c the header comment string
     */
    public void setHeaderComment(String c) { headerComment = c; }


    /**
     * Convenience methods to fire notation configuration change events.
     *
     * @param key the ConfigurationKey that is related to the change
     * @param oldValue the old value
     * @param newValue the new value
     */
    private void fireNotationEvent(
            ConfigurationKey key, int oldValue, int newValue) {
        fireNotationEvent(key, Integer.toString(oldValue),
                Integer.toString(newValue));
    }

    /**
     * Convenience methods to fire notation configuration change events.
     *
     * @param key the ConfigurationKey that is related to the change
     * @param oldValue the old value
     * @param newValue the new value
     */
    private void fireNotationEvent(ConfigurationKey key, boolean oldValue,
            boolean newValue) {
        fireNotationEvent(key, Boolean.toString(oldValue),
                Boolean.toString(newValue));
    }

    /**
     * Convenience methods to fire notation configuration change events.
     *
     * @param key the ConfigurationKey that is related to the change
     * @param oldValue the old value
     * @param newValue the new value
     */
    private void fireNotationEvent(ConfigurationKey key, String oldValue,
            String newValue) {
        ArgoEventPump.fireEvent(new ArgoNotationEvent(
                ArgoEventTypes.NOTATION_CHANGED, new PropertyChangeEvent(this,
                        key.getKey(), oldValue, newValue)));
    }

    /**
     * Convenience methods to fire diagram appearance
     * configuration change events.
     *
     * @param key the ConfigurationKey that is related to the change
     * @param oldValue the old value
     * @param newValue the new value
     */
    private void fireDiagramAppearanceEvent(ConfigurationKey key, int oldValue,
            int newValue) {
        fireDiagramAppearanceEvent(key, Integer.toString(oldValue), Integer
                .toString(newValue));
    }


    /**
     * Convenience methods to fire diagram appearance
     * configuration change events.
     *
     * @param key the ConfigurationKey that is related to the change
     * @param oldValue the old value
     * @param newValue the new value
     */
    private void fireDiagramAppearanceEvent(ConfigurationKey key,
            String oldValue, String newValue) {
        ArgoEventPump.fireEvent(new ArgoDiagramAppearanceEvent(
                ArgoEventTypes.DIAGRAM_FONT_CHANGED, new PropertyChangeEvent(
                        this, key.getKey(), oldValue, newValue)));
    }

    /**
     * Diagram font name. <p>
     *
     * Used by "argo.tee".
     *
     * @return diagram font name.
     * @deprecated for 0.27.2 by tfmorris.  Use {@link DiagramSettings}.
     */
    @Deprecated
    public String getFontName() {
        return diaDefault.getFontName();
    }

    /**
     * Diagram font name.
     * @param newFontName diagram font name.
     * @deprecated for 0.27.2 by tfmorris.  Use {@link DiagramSettings}.
     */
    @Deprecated
    public void setFontName(String newFontName) {
        String old = diaDefault.getFontName();
        diaDefault.setFontName(newFontName);

        fireDiagramAppearanceEvent(DiagramAppearance.KEY_FONT_NAME, old,
                newFontName);
    }

    /**
     * Diagram font size. <p>
     *
     * Used by "argo.tee".
     *
     * @return diagram font size.
     * @deprecated for 0.27.2 by tfmorris.  Use {@link DiagramSettings}.
     */
    @Deprecated
    public int getFontSize() {
        return diaDefault.getFontSize();
    }

    /**
     * Diagram font size.
     * @param newFontSize diagram font size.
     * @deprecated for 0.27.2 by tfmorris.  Use {@link DiagramSettings}.
     */
    @Deprecated
    public void setFontSize(int newFontSize) {
        int old = diaDefault.getFontSize();
        diaDefault.setFontSize(newFontSize);

        fireDiagramAppearanceEvent(DiagramAppearance.KEY_FONT_SIZE, old,
                newFontSize);
    }


    /**
     * Returns the Plain diagram font which corresponds
     * to selected parameters.
     *
     * @return plain diagram font
     * @deprecated for 0.27.2 by tfmorris.  Use {@link DiagramSettings}.
     */
    @Deprecated
    public Font getFontPlain() {
        return diaDefault.getFontPlain();
    }

    /**
     * Returns the Italic diagram font which corresponds
     * to selected parameters.
     *
     * @return italic diagram font
     * @deprecated for 0.27.2 by tfmorris.  Use {@link DiagramSettings}.
     */
    @Deprecated
    public Font getFontItalic() {
        return diaDefault.getFontItalic();
    }

    /**
     * Returns the Bold diagram font which corresponds
     * to selected parameters.
     *
     * @return bold diagram font
      * @deprecated for 0.27.2 by tfmorris.  Use {@link DiagramSettings}.
     */
    @Deprecated
    public Font getFontBold() {
        return diaDefault.getFontBold();
    }

    /**
     * Returns the Bold-Italic diagram font which corresponds
     * to selected parameters.
     *
     * @return bold-italic diagram font
     * @deprecated for 0.27.2 by tfmorris.  Use {@link DiagramSettings}.
     */
    @Deprecated
    public Font getFontBoldItalic() {
        return diaDefault.getFontBoldItalic();
    }

    /**
     * Utility function to convert a font style integer into a Font.
     *
     * @param fontStyle the style; see the predefined constants in Font
     * @return the Font that corresponds to the style
     * @deprecated for 0.27.2 by tfmorris.  Use {@link DiagramSettings}.
     */
    @Deprecated
    public Font getFont(int fontStyle) {
        return diaDefault.getFont(fontStyle);
    }
}
