org.eclipse.jst.jsf.facesconfig.ui.preference.GEMPreferences.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.jst.jsf.facesconfig.ui.preference.GEMPreferences.java

Source

/*******************************************************************************
 * Copyright (c) 2004, 2006 Sybase, Inc. and others.
 *
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *     Sybase, Inc. - initial API and implementation
 *******************************************************************************/
package org.eclipse.jst.jsf.facesconfig.ui.preference;

import org.eclipse.draw2d.ColorConstants;
import org.eclipse.jface.preference.BooleanFieldEditor;
import org.eclipse.jface.preference.ColorFieldEditor;
import org.eclipse.jface.preference.FieldEditorPreferencePage;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.IntegerFieldEditor;
import org.eclipse.jface.preference.PreferenceConverter;
import org.eclipse.jface.resource.ColorRegistry;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jst.jsf.facesconfig.ui.EditorPlugin;
import org.eclipse.swt.SWT;
import org.eclipse.swt.accessibility.AccessibleAdapter;
import org.eclipse.swt.accessibility.AccessibleEvent;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.RGB;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Group;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;

/**
 * This class represents a preference page that is contributed to the
 * Preferences dialog. By subclassing <samp>FieldEditorPreferencePage </samp>,
 * we can use the field support built into JFace that allows us to create a page
 * that is small and knows how to save, restore and apply itself.
 * <p>
 * This page is used to modify preferences only. They are stored in the
 * preference store that belongs to the main plug-in class. That way,
 * preferences can be accessed directly via the preference store.
 */

public final class GEMPreferences extends FieldEditorPreferencePage implements IWorkbenchPreferencePage {
    // appearance
    /**
     * Key for preference for whether or not the intro editor should be shown
     */
    public final static String SHOW_INTRO_EDITOR = "ShowIntroEditor"; //$NON-NLS-1$

    /**
     * use system colors preference
     */
    public final static String USE_SYSTEM_COLORS = "UseSystemColors"; //$NON-NLS-1$

    /**
     * canvas color preference
     */
    public final static String CANVAS_COLOR = "CanvasColor"; //$NON-NLS-1$

    /**
     * figure label font
     */
    public final static String FIGURE_LABEL_FONT = "FigureLabelFont"; //$NON-NLS-1$

    /**
     * 
     */
    public final static String FIGURE_LABEL_FONT_COLOR = "FigureLabelFontColor"; //$NON-NLS-1$

    /**
     * 
     */
    public final static String LABEL_PLACEMENT = "LabelPlacement"; //$NON-NLS-1$

    /**
     * 
     */
    public final static String INPUT_PORT_COLOR = "InputPortColor"; //$NON-NLS-1$

    /**
     * 
     */
    public final static String OUTPUT_PORT_COLOR = "OutputPortColor"; //$NON-NLS-1$

    /**
     * 
     */
    public final static String SHOW_LINE_LABELS = "ShowLineLabels"; //$NON-NLS-1$

    /**
     * 
     */
    public final static String LINE_LABEL_FONT = "LineLabelFont"; //$NON-NLS-1$

    /**
     * 
     */
    public final static String LINE_LABEL_FONT_COLOR = "LineLabelFontColor"; //$NON-NLS-1$

    /**
     * 
     */
    public final static String LINE_LABEL_COLOR = "LineLabelColor"; //$NON-NLS-1$

    /**
     * 
     */
    public final static String LINE_WIDTH = "LineWidth"; //$NON-NLS-1$

    /**
     * 
     */
    public final static String LINE_COLOR = "LineColor"; //$NON-NLS-1$

    /**
     * 
     */
    public final static String LINE_ROUTING = "LineRouting"; //$NON-NLS-1$

    /**
     * 
     */
    public final static String SNAP_TO_GRID = "SnapToGrid"; //$NON-NLS-1$

    /**
     * 
     */
    public final static String SNAP_TO_GEOMETRY = "SnapToGeometry"; //$NON-NLS-1$

    /**
     * 
     */
    public final static String GRID_WIDTH = "GridWidth"; //$NON-NLS-1$

    /**
     * 
     */
    public final static String GRID_HEIGHT = "GridHeight"; //$NON-NLS-1$

    /**
     * 
     */
    public final static String GRID_COLOR = "GridColor"; //$NON-NLS-1$

    /**
     * 
     */
    public final static String LABEL_PLACEMENT_TOP = "Top"; //$NON-NLS-1$

    /**
     * 
     */
    public final static String LABEL_PLACEMENT_BOTTOM = "Bottom"; //$NON-NLS-1$

    /**
     * 
     */
    public final static String LABEL_PLACEMENT_LEFT = "Left"; //$NON-NLS-1$

    /**
     * 
     */
    public final static String LABEL_PLACEMENT_RIGHT = "Right"; //$NON-NLS-1$

    // 
    /**
     * "Direct" routing was intended for connections lines without bendpoints;
     * this has been removed because it is unnecessary.
     * public final static String LINE_ROUTING_DIRECT = "Direct";
     * "Manhattan" line routing creates orthogonal lines
     */
    public final static String LINE_ROUTING_MANHATTAN = "Manhattan"; //$NON-NLS-1$

    /**
     * "Manual" routing allows user to create bendpoints
     */
    public final static String LINE_ROUTING_MANUAL = "Manaul"; //$NON-NLS-1$

    private final static String[][] m_lineRoutingLabels = {
            // display, key
            // { GEMPlugin.getResourceString("CanvasPreferences.LABEL.Direct"),
            // LINE_ROUTING_DIRECT }, //$NON-NLS-1$ //$NON-NLS-2$
            { PreferenceMessages.CanvasPreferences_LABEL_Manual, LINE_ROUTING_MANUAL },
            { PreferenceMessages.CanvasPreferences_LABEL_Manhattan, LINE_ROUTING_MANHATTAN } };

    private final static String[][] m_labelPlacementLabels = {
            { PreferenceMessages.CanvasPreferences_LABEL_Top, LABEL_PLACEMENT_TOP },
            { PreferenceMessages.CanvasPreferences_LABEL_Bottom, LABEL_PLACEMENT_BOTTOM },
            { PreferenceMessages.CanvasPreferences_LABEL_Left, LABEL_PLACEMENT_LEFT },
            { PreferenceMessages.CanvasPreferences_LABEL_Right, LABEL_PLACEMENT_RIGHT } };

    private Group canvasGroup;

    private Group iconGroup;

    private Group lineGroup;

    private BooleanField useSystemColors;

    private ColorFieldEditor canvasColor;

    private BooleanField snapToGrid;

    private IntegerFieldEditor gridWidth;

    private IntegerFieldEditor gridHeight;

    private ColorFieldEditor gridColor;

    private BooleanField showLineLabels;

    private ColorFieldEditor lineLabelColor;

    private ColorFieldEditor lineColor;

    private ColorFontFieldEditor iconFont;

    private ColorFontFieldEditor lineFont;

    // private ColorFieldEditor inputPortColor;
    //
    // private ColorFieldEditor outputPortColor;

    // CR392586: resource leaks
    // at least keep leaks bounded...
    //   private static Hashtable resourceRegistry = new Hashtable();

    private class BooleanField extends BooleanFieldEditor {
        private Composite parent;

        /**
         * @param name
         * @param label
         * @param parent
         */
        public BooleanField(String name, String label, Composite parent) {
            super(name, label, parent);
            this.parent = parent;
        }

        /**
         * @return the change control button
         */
        public Button getButton() {
            return getChangeControl(parent);
        }
    }

    /**
     * Constructor
     */
    public GEMPreferences() {
        super(GRID);
        // FIXME: we should be encapsulating what pref store is used for all callers of this class
        setPreferenceStore(EditorPlugin.getDefault().getPreferenceStore());
        setDescription(PreferenceMessages.GEMPreferences_description);
    }

    /**
     * Sets the default values of the preferences.
     */
    public static void initializeDefaults() {
        IPreferenceStore store = EditorPlugin.getDefault().getPreferenceStore();
        Font f = JFaceResources.getFontRegistry().get(JFaceResources.DEFAULT_FONT);

        store.setDefault(SHOW_INTRO_EDITOR, true);
        store.setDefault(USE_SYSTEM_COLORS, true);
        PreferenceConverter.setDefault(store, CANVAS_COLOR, new RGB(255, 255, 255));
        PreferenceConverter.setDefault(store, FIGURE_LABEL_FONT, f.getFontData());
        store.setDefault(LINE_WIDTH, 1);
        store.setDefault(LINE_ROUTING, getLineRoutingLabels()[0][1]);
        store.setDefault(SHOW_LINE_LABELS, true);
        PreferenceConverter.setDefault(store, LINE_COLOR, new RGB(0, 0, 0));
        PreferenceConverter.setDefault(store, LINE_LABEL_COLOR, new RGB(255, 255, 255));
        PreferenceConverter.setDefault(store, LINE_LABEL_FONT, f.getFontData());
        store.setDefault(SNAP_TO_GEOMETRY, true);
        store.setDefault(SNAP_TO_GRID, true);
        store.setDefault(GRID_WIDTH, 12);
        store.setDefault(GRID_HEIGHT, 12);
        PreferenceConverter.setDefault(store, GRID_COLOR, new RGB(230, 230, 230));
        store.setDefault(LABEL_PLACEMENT, LABEL_PLACEMENT_BOTTOM);
    }

    /**
     * Creates the field editors. Field editors are abstractions of the common
     * GUI blocks needed to manipulate various types of preferences. Each field
     * editor knows how to save and restore itself.
     */

    public void createFieldEditors() {

        // note, we aren't saving the reference.  It's assumed that parent
        // worries about destruction, persistence etc.
        addBooleanField(SHOW_INTRO_EDITOR, PreferenceMessages.EditorPreferences_LABEL_ShowIntroEditor,
                getFieldEditorParent());

        useSystemColors = addBooleanField(USE_SYSTEM_COLORS,
                PreferenceMessages.CanvasPreferenceTab_LABEL_UseSystemColors, getFieldEditorParent());

        canvasGroup = new Group(getFieldEditorParent(), SWT.NULL);
        lineGroup = new Group(getFieldEditorParent(), SWT.NULL);
        iconGroup = new Group(getFieldEditorParent(), SWT.NULL);

        canvasGroup.setText(PreferenceMessages.CanvasPreferenceTab_LABEL_Canvas);
        canvasColor = addColorField(CANVAS_COLOR, PreferenceMessages.CanvasPreferenceTab_LABEL_BackgroundColor,
                canvasGroup);
        // Fix for Bug 268443: [hotbug] FacesConfig Editor preferences page needs more info for screen readers
        // https://bugs.eclipse.org/bugs/show_bug.cgi?id=268443
        canvasColor.getColorSelector().getButton().getAccessible().addAccessibleListener(new AccessibleAdapter() {
            public void getName(final AccessibleEvent e) {
                e.result = PreferenceMessages.CanvasPreferenceTab_LABEL_BackgroundColor;
            }
        });

        addBooleanField(SNAP_TO_GEOMETRY, PreferenceMessages.CanvasPreferenceTab_LABEL_SnapToGeometry, canvasGroup);
        snapToGrid = addBooleanField(SNAP_TO_GRID, PreferenceMessages.CanvasPreferenceTab_LABEL_SnapToGrid,
                canvasGroup);
        gridColor = addColorField(GRID_COLOR, PreferenceMessages.CanvasPreferenceTab_LABEL_GridLineColor,
                canvasGroup);
        gridColor.getColorSelector().getButton().getAccessible().addAccessibleListener(new AccessibleAdapter() {
            public void getName(final AccessibleEvent e) {
                e.result = PreferenceMessages.CanvasPreferenceTab_LABEL_GridLineColor;
            }
        });
        gridWidth = addIntegerField(GRID_WIDTH, PreferenceMessages.CanvasPreferenceTab_LABEL_GridWidth,
                canvasGroup);
        gridHeight = addIntegerField(GRID_HEIGHT, PreferenceMessages.CanvasPreferenceTab_LABEL_GridHeight,
                canvasGroup);

        iconGroup.setText(PreferenceMessages.CanvasPreferenceTab_LABEL_IconGroup);
        iconFont = addFontField(FIGURE_LABEL_FONT, PreferenceMessages.CanvasPreferenceTab_LABEL_IconLabelFont,
                iconGroup);
        iconFont.getChangeControl(iconGroup).getAccessible().addAccessibleListener(new AccessibleAdapter() {
            public void getName(final AccessibleEvent e) {
                e.result = PreferenceMessages.CanvasPreferenceTab_LABEL_IconLabelFont;
            }
        });
        addComboField(LABEL_PLACEMENT, PreferenceMessages.CanvasPreferenceTab_LABEL_LabelPlacement,
                getLabelPlacementLabels(), iconGroup);
        // inputPortColor = addColorField(
        // INPUT_PORT_COLOR,
        // EditorPlugin
        // .getResourceString("CanvasPreferenceTab.LABEL.InputPortColor"),
        // iconGroup); //$NON-NLS-1$
        // outputPortColor = addColorField(
        // OUTPUT_PORT_COLOR,
        // EditorPlugin
        // .getResourceString("CanvasPreferenceTab.LABEL.OutputPortColor"),
        // iconGroup); //$NON-NLS-1$

        lineGroup.setText(PreferenceMessages.CanvasPreferenceTab_LABEL_LineGroup);
        showLineLabels = addBooleanField(SHOW_LINE_LABELS,
                PreferenceMessages.CanvasPreferenceTab_LABEL_ShowLineLabels, lineGroup);
        lineFont = addFontField(LINE_LABEL_FONT, PreferenceMessages.CanvasPreferenceTab_LABEL_LineLabelFont,
                lineGroup);
        lineFont.getChangeControl(lineGroup).getAccessible().addAccessibleListener(new AccessibleAdapter() {
            public void getName(final AccessibleEvent e) {
                e.result = PreferenceMessages.CanvasPreferenceTab_LABEL_LineLabelFont;
            }
        });
        lineLabelColor = addColorField(LINE_LABEL_COLOR,
                PreferenceMessages.CanvasPreferenceTab_LABEL_LineLabelColor, lineGroup);
        lineLabelColor.getColorSelector().getButton().getAccessible()
                .addAccessibleListener(new AccessibleAdapter() {
                    public void getName(final AccessibleEvent e) {
                        e.result = PreferenceMessages.CanvasPreferenceTab_LABEL_LineLabelColor;
                    }
                });

        lineColor = addColorField(LINE_COLOR, PreferenceMessages.CanvasPreferenceTab_LABEL_LineColor, lineGroup);
        lineColor.getColorSelector().getButton().getAccessible().addAccessibleListener(new AccessibleAdapter() {
            public void getName(final AccessibleEvent e) {
                e.result = PreferenceMessages.CanvasPreferenceTab_LABEL_LineColor;
            }
        });
        addIntegerField(LINE_WIDTH, PreferenceMessages.CanvasPreferenceTab_LABEL_LineWidth, lineGroup);
        addComboField(LINE_ROUTING, PreferenceMessages.CanvasPreferenceTab_LABEL_LineRouting,
                getLineRoutingLabels(), lineGroup);
    }

    protected void initialize() {
        // Color use: Default canvas colors should pick up system defaults
        // enable or disable all of the color and font selection controls in the
        // preference dialog
        // depending on whether the "Use System Colors" checkbox is selected.
        super.initialize();

        ((GridLayout) getFieldEditorParent().getLayout()).numColumns = 2;

        canvasGroup.setLayout(new GridLayout(3, false));
        canvasGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_BEGINNING));
        canvasColor.fillIntoGrid(canvasGroup, 3);
        gridColor.fillIntoGrid(canvasGroup, 3);

        iconGroup.setLayout(new GridLayout(3, false));
        iconGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_BEGINNING));
        iconFont.fillIntoGrid(iconGroup, 3);

        lineGroup.setLayout(new GridLayout(3, false));
        lineGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_BEGINNING));
        lineColor.fillIntoGrid(lineGroup, 3);
        lineLabelColor.fillIntoGrid(lineGroup, 3);
        lineFont.fillIntoGrid(lineGroup, 3);

        boolean userColorsValue = !useSystemColors.getBooleanValue();
        boolean showLineLabelsValue = showLineLabels.getBooleanValue();
        boolean snapToGridValue = snapToGrid.getBooleanValue();
        canvasColor.setEnabled(userColorsValue, canvasGroup);
        gridColor.setEnabled(snapToGridValue && userColorsValue, canvasGroup);
        iconFont.setEnabled(userColorsValue, iconGroup);
        // inputPortColor.setEnabled(userColorsValue, iconGroup);
        // outputPortColor.setEnabled(userColorsValue, iconGroup);
        lineColor.setEnabled(userColorsValue, lineGroup);
        lineLabelColor.setEnabled(showLineLabelsValue && userColorsValue, lineGroup);
        lineFont.setEnabled(showLineLabelsValue && userColorsValue, lineGroup);
        gridWidth.setEnabled(snapToGridValue, canvasGroup);
        gridHeight.setEnabled(snapToGridValue, canvasGroup);

        useSystemColors.getButton().addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) {
                boolean userColorsValue_ = !useSystemColors.getBooleanValue();
                boolean showLineLabelsValue_ = showLineLabels.getBooleanValue();
                boolean snapToGridValue_ = snapToGrid.getBooleanValue();

                canvasColor.setEnabled(userColorsValue_, canvasGroup);
                gridColor.setEnabled(snapToGridValue_ && userColorsValue_, canvasGroup);
                iconFont.setEnabled(userColorsValue_, iconGroup);
                // inputPortColor.setEnabled(userColorsValue,
                // iconGroup);
                // outputPortColor.setEnabled(userColorsValue,
                // iconGroup);
                lineColor.setEnabled(userColorsValue_, lineGroup);
                lineLabelColor.setEnabled(showLineLabelsValue_ && userColorsValue_, lineGroup);
                lineFont.setEnabled(showLineLabelsValue_ && userColorsValue_, lineGroup);
            }
        });

        showLineLabels.getButton().addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) {
                boolean userColorsValue_ = !useSystemColors.getBooleanValue();
                boolean showLineLabelsValue_ = showLineLabels.getBooleanValue();
                lineLabelColor.setEnabled(showLineLabelsValue_ && userColorsValue_, lineGroup);
                lineFont.setEnabled(showLineLabelsValue_ && userColorsValue_, lineGroup);
            }
        });

        snapToGrid.getButton().addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) {
                boolean userColorsValue_ = !useSystemColors.getBooleanValue();
                boolean snapToGridValue_ = snapToGrid.getBooleanValue();

                gridColor.setEnabled(snapToGridValue_ && userColorsValue_, canvasGroup);
                gridWidth.setEnabled(snapToGridValue_, canvasGroup);
                gridHeight.setEnabled(snapToGridValue_, canvasGroup);
            }
        });

    }

    public void init(IWorkbench workbench) {
        // no initialization
    }

    private ColorFieldEditor addColorField(String name, String labelText, Composite parent) {
        ColorFieldEditor f = new ColorFieldEditor(name, labelText, parent);
        addField(f);
        return f;
    }

    private ComboFieldEditor addComboField(String name, String labelText, String[][] entryNamesAndValues,
            Composite parent) {
        ComboFieldEditor f = new ComboFieldEditor(name, labelText, entryNamesAndValues, parent);
        addField(f);
        return f;
    }

    private IntegerFieldEditor addIntegerField(String name, String labelText, Composite parent) {
        IntegerFieldEditor f = new IntegerFieldEditor(name, labelText, parent);
        addField(f);
        return f;
    }

    private BooleanField addBooleanField(String name, String labelText, Composite parent) {
        BooleanField f = new BooleanField(name, labelText, parent);
        addField(f);
        return f;
    }

    //   private StringFieldEditor addStringField(String name, String labelText,
    //         Composite parent) {
    //      StringFieldEditor f = new StringFieldEditor(name, labelText, parent);
    //      addField(f);
    //      return f;
    //   }

    // protected NumberField addNumberField(String name, String labelText,
    // Composite parent)
    // {
    // NumberField f = new NumberField(name,labelText,parent);
    // addField(f);
    // return f;
    // }

    private ColorFontFieldEditor addFontField(String name, String labelText, Composite parent) {
        ColorFontFieldEditor f = new ColorFontFieldEditor(name, labelText, parent);
        addField(f);
        return f;
    }

    private static String[][] getLineRoutingLabels() {
        return m_lineRoutingLabels;
    }

    private static String[][] getLabelPlacementLabels() {
        return m_labelPlacementLabels;
    }

    //   private static void propagateProperty(String property, EditPart part) {
    //      Iterator iter = part.getChildren().iterator();
    //      while (iter.hasNext()) {
    //         EditPart child = (EditPart) iter.next();
    //         Figure fig = (Figure) ((GraphicalEditPart) child).getFigure();
    //         GEMPreferences.propagateProperty(property, fig);
    //         propagateProperty(property, child);
    //      }
    //   }

    /**
     * @return true if the preference is set to show the introduction
     * editor.  false otherwise.
     */
    public static boolean getShowIntroEditor() {
        IPreferenceStore store = EditorPlugin.getDefault().getPreferenceStore();
        return store.getBoolean(SHOW_INTRO_EDITOR);
    }

    /**
     * @param store
     * @param property
     * @return the color property for the key 'property'
     */
    public static Color getColor(IPreferenceStore store, String property) {
        boolean useSystemColors = store.getBoolean(USE_SYSTEM_COLORS);

        Color c = ColorConstants.black;
        if (useSystemColors) {
            if (GRID_COLOR.equals(property))
                // c = ColorConstants.buttonDarkest;
                c = ColorConstants.button;
            if (LINE_COLOR.equals(property))
                c = ColorConstants.listForeground;
            if (LINE_LABEL_FONT_COLOR.equals(property))
                c = ColorConstants.listForeground;
            if (LINE_LABEL_COLOR.equals(property))
                c = ColorConstants.listBackground;
            if (CANVAS_COLOR.equals(property))
                c = ColorConstants.listBackground;
            if (INPUT_PORT_COLOR.equals(property))
                c = ColorConstants.listForeground;
            if (OUTPUT_PORT_COLOR.equals(property))
                c = ColorConstants.listForeground;
            if (FIGURE_LABEL_FONT_COLOR.equals(property))
                c = ColorConstants.listForeground;
        } else {
            // CR392586: resource leaks
            RGB rgb = PreferenceConverter.getColor(store, property);
            ColorRegistry registry = JFaceResources.getColorRegistry();
            if (registry.get(rgb.toString()) != null)
                return registry.get(rgb.toString());
            registry.put(rgb.toString(), rgb);
            c = registry.get(rgb.toString());
        }
        return c;
    }

    //   // CR392586: resource leaks
    //   private static Font getFont(IPreferenceStore store, String property) {
    //      FontData fd = PreferenceConverter.getFontData(store, property);
    //      FontRegistry registry = JFaceResources.getFontRegistry();
    //      if (!registry.get(fd.toString()).equals(registry.defaultFont()))
    //         return registry.get(fd.toString());
    //
    //      registry.put(fd.toString(), new FontData[] {fd});
    //      return registry.get(fd.toString());
    //   }

    //   private static void propagateProperty(String property, Figure fig) {
    //      IPreferenceStore store = EditorPlugin.getDefault().getPreferenceStore();
    //      WindowFigure window = null;
    //      IconFigure icon = null;
    //      LinkFigure link = null;
    //      if (fig instanceof CompoundNodeFigure) {
    //         window = ((CompoundNodeFigure) fig).getWindowFigure();
    //         icon = ((CompoundNodeFigure) fig).getIconFigure();
    //      } else if (fig instanceof WindowFigure)
    //         window = (WindowFigure) fig;
    //      else if (fig instanceof LinkFigure)
    //         link = (LinkFigure) fig;
    //
    //      if (property != null && property.equals(USE_SYSTEM_COLORS))
    //         // reload all properties - it's easiest
    //         property = null;
    //
    //      if (property == null || SNAP_TO_GRID.equals(property)) {
    //         boolean b = store.getBoolean(SNAP_TO_GRID);
    //         WindowFigure.defaultGridEnabled = b;
    //
    //         if (window != null)
    //            window.getGridLayer().setVisible(b);
    //      }
    //
    //      if (property == null || GRID_WIDTH.equals(property)
    //            || GRID_HEIGHT.equals(property)) {
    //         Dimension d = new Dimension(store.getInt(GRID_WIDTH), store
    //               .getInt(GRID_HEIGHT));
    //         WindowFigure.defaultGridSpacing = d;
    //
    //         if (window != null)
    //            window.getGridLayer().setSpacing(d);
    //      }
    //
    //      if (property == null || GRID_COLOR.equals(property)) {
    //         Color c = getColor(store, GRID_COLOR);
    //         WindowFigure.defaultGridColor = c;
    //
    //         if (window != null)
    //            window.getGridLayer().setForegroundColor(c);
    //      }
    //
    //      // TODO: since the line router is managed by the EditPart for the
    //      // container figure, setting the line routing style in the WindowFigure
    //      // does not change the line routing immediately. The editor must be
    //      // restarted for line routing to take effect.
    //      if (property == null || LINE_ROUTING.equals(property)) {
    //         String s = store.getString(LINE_ROUTING);
    //         int style;
    //         if (LINE_ROUTING_MANHATTAN.equals(s))
    //            style = WindowFigure.LINE_ROUTING_MANHATTAN;
    //         else
    //            style = WindowFigure.LINE_ROUTING_MANUAL;
    //
    //         WindowFigure.defaultLineRoutingStyle = style;
    //         if (window != null)
    //            window.setLineRoutingStyle(style);
    //      }
    //
    //      if (property == null || LINE_WIDTH.equals(property)) {
    //         int w = store.getInt(LINE_WIDTH);
    //         LinkFigure.defaultLineWidth = w;
    //
    //         if (link != null)
    //            link.setLineWidth(w);
    //      }
    //
    //      if (property == null || LINE_COLOR.equals(property)) {
    //         Color c = getColor(store, LINE_COLOR);
    //         LinkFigure.defaultLineColor = c;
    //
    //         if (link != null)
    //            link.setForegroundColor(c);
    //      }
    //
    //      if (property == null || SHOW_LINE_LABELS.equals(property)) {
    //         boolean b = store.getBoolean(SHOW_LINE_LABELS);
    //         LinkFigure.defaultLabelVisible = b;
    //
    //         if (link != null)
    //            link.setLabelVisible(b);
    //      }
    //
    //      if (property == null || LINE_LABEL_FONT.equals(property)
    //            || LINE_LABEL_FONT_COLOR.equals(property)) {
    //         // CR392586: resource leaks
    //         Font f = getFont(store, LINE_LABEL_FONT);
    //         Color c = getColor(store, LINE_LABEL_FONT_COLOR);
    //         LinkFigure.defaultFont = f;
    //         LinkFigure.defaultLabelForeground = c;
    //
    //         if (link != null) {
    //            link.setFont(f);
    //            link.setLabelForeground(c);
    //         }
    //      }
    //
    //      if (property == null || LINE_LABEL_COLOR.equals(property)) {
    //         Color c = getColor(store, LINE_LABEL_COLOR);
    //         LinkFigure.defaultLabelBackground = c;
    //
    //         if (link != null)
    //            link.setLabelBackground(c);
    //      }
    //
    //      if (property == null || CANVAS_COLOR.equals(property)) {
    //         Color c = getColor(store, CANVAS_COLOR);
    //         WindowFigure.defaultBackgroundColor = c;
    //
    //         if (window != null)
    //            window.setBackgroundColor(c);
    //         if (icon != null)
    //            icon.setBackgroundColor(c);
    //      }
    //
    //      if (property == null || INPUT_PORT_COLOR.equals(property)) {
    //         Color c = getColor(store, INPUT_PORT_COLOR);
    //         InputPortFigure.defaultForegroundColor = c;
    //
    //         if (fig instanceof InputPortFigure)
    //            fig.setForegroundColor(c);
    //      }
    //
    //      if (property == null || OUTPUT_PORT_COLOR.equals(property)) {
    //         Color c = getColor(store, OUTPUT_PORT_COLOR);
    //         OutputPortFigure.defaultForegroundColor = c;
    //
    //         if (fig instanceof OutputPortFigure)
    //            fig.setForegroundColor(c);
    //      }
    //
    //      if (property == null || FIGURE_LABEL_FONT.equals(property)
    //            || FIGURE_LABEL_FONT_COLOR.equals(property)) {
    //         // CR392586: resource leaks
    //         Font f = getFont(store, FIGURE_LABEL_FONT);
    //         Color c = getColor(store, FIGURE_LABEL_FONT_COLOR);
    //         IconFigure.defaultFont = f;
    //         IconFigure.defaultForegroundColor = c;
    //         WindowFigure.defaultFont = f;
    //         WindowFigure.defaultForegroundColor = c;
    //
    //         if (window != null) {
    //            window.setFont(f);
    //            window.setForegroundColor(c);
    //         }
    //         if (icon != null) {
    //            icon.setFont(f);
    //            icon.setForegroundColor(c);
    //         }
    //         if (fig instanceof IconFigure) {
    //            fig.setFont(f);
    //            fig.setForegroundColor(c);
    //         }
    //      }
    //
    //      if (property == null || LABEL_PLACEMENT.equals(property)) {
    //         int placement = PositionConstants.SOUTH;
    //         String s = store.getString(LABEL_PLACEMENT);
    //         if (LABEL_PLACEMENT_TOP.equals(s))
    //            placement = PositionConstants.NORTH;
    //         if (LABEL_PLACEMENT_BOTTOM.equals(s))
    //            placement = PositionConstants.SOUTH;
    //         if (LABEL_PLACEMENT_LEFT.equals(s))
    //            placement = PositionConstants.WEST;
    //         if (LABEL_PLACEMENT_RIGHT.equals(s))
    //            placement = PositionConstants.EAST;
    //         IconFigure.defaultTextPlacement = placement;
    //
    //         if (icon != null)
    //            icon.setTextPlacement(placement);
    //         if (fig instanceof IconFigure)
    //            ((IconFigure) fig).setTextPlacement(placement);
    //      }
    //
    //      Iterator iter = fig.getChildren().iterator();
    //      while (iter.hasNext()) {
    //         Figure child = (Figure) iter.next();
    //         propagateProperty(property, child);
    //      }
    //   }
}