org.eclipse.jst.jsf.validation.internal.facelet.FaceletValidationPreferences.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.jst.jsf.validation.internal.facelet.FaceletValidationPreferences.java

Source

/*******************************************************************************
 * Copyright (c) 2006 Oracle Corporation.
 * 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:
 *    Cameron Bateman/Oracle - initial API and implementation
 *    
 ********************************************************************************/
package org.eclipse.jst.jsf.validation.internal.facelet;

import org.eclipse.core.runtime.preferences.IScopeContext;
import org.eclipse.emf.common.util.Diagnostic;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jst.jsf.core.internal.IJSFPreferenceModel;
import org.eclipse.jst.jsf.core.internal.JSFCorePlugin;
import org.eclipse.jst.jsf.validation.internal.Severity;
import org.eclipse.jst.jsf.validation.internal.el.diagnostics.DiagnosticFactory;

/**
 * Model object for EL validation preferences
 * 
 * @author cbateman
 */
public class FaceletValidationPreferences implements IJSFPreferenceModel {
    private int[] _severities;

    /**
     * Loads the object from the preference store provided
     * 
     * @param prefStore
     */
    public void load(final IPreferenceStore prefStore) {
        loadSeverities(prefStore);
    }

    private void loadSeverities(final IPreferenceStore prefStore) {
        final int severities[] = getSeverities();
        for (int i = 0; i < FaceletDiagnosticFactory.NUM_IDS; i++) {
            final String key = getKeyById(i);
            if (!prefStore.contains(key)) {
                final int diagSeverity = getDefaultSeverity(i);
                final Severity severity = mapDiagToSeverity(diagSeverity);
                prefStore.setDefault(key, severity.toString());
            }
            final String storedSeverity = prefStore.getString(key);
            severities[i] = mapSeverityToDiag(storedSeverity);
        }
    }

    /**
     * Copies the object into the preference store but DOES NOT SAVE IT
     * 
     * @param prefStore
     */
    public void commit(final IPreferenceStore prefStore) {
        commitSeverities(prefStore);
    }

    private void commitSeverities(final IPreferenceStore prefStore) {
        final int severities[] = getSeverities();
        for (int i = 0; i < severities.length; i++) {
            final String key = getKeyById(i);
            prefStore.setValue(key, mapDiagToSeverity(severities[i]).toString());
        }
    }

    /**
     * Reverts the model to it's defaults. Does not commit to pref store.
     */
    public void setDefaults() {
        setProblemSeverityDefaults();
    }

    private void setProblemSeverityDefaults() {
        final int[] severities = getSeverities();
        for (int i = 0; i < DiagnosticFactory.NUM_IDS; i++) {
            severities[i] = getDefaultSeverity(i);
        }
    }

    public Object getValueByKey(final IScopeContext context, final String key) {
        // ignore context for now; will be used when we have project overrides
        try {
            final Severity severity = getSeverity(key);
            return severity.toString();
        } catch (final IllegalArgumentException e) {
            // getIdByKey will throw this exception if key is not a valid
            // severity key. Ignore the exception here and fall-through
        }
        return null; // not found
    }

    /*
     * (non-Javadoc)
     * 
     * @see
     * org.eclipse.jst.jsf.core.internal.IJSFPreferenceModel#getStoredValueByKey
     * (org.eclipse.core.runtime.preferences.IScopeContext, java.lang.String)
     */
    public Object getStoredValueByKey(final IScopeContext context, final String key) {
        // ignore context for now; will be used when we have project overrides
        try {
            return context.getNode("org.eclipse.jst.jsf.core").get(key, //$NON-NLS-1$
                    mapDiagToSeverity(getDefaultSeverity(getIdByKey(key))).toString());
        } catch (final IllegalArgumentException e) {
            // getIdByKey will throw this exception if key is not a valid
            // severity key. Ignore the exception here and fall-through
        }
        return null; // not found
    }

    /*
     * (non-Javadoc)
     * 
     * @see
     * org.eclipse.jst.jsf.core.internal.IJSFPreferenceModel#setValueByKey(org
     * .eclipse.core.runtime.preferences.IScopeContext, java.lang.String,
     * java.lang.Object)
     */
    public Object setValueByKey(final IScopeContext context, final String key, final Object value) {
        // ignore context for now; will be used when we have project overrides
        final Severity oldValue = getSeverity(key);
        setSeverity(key, (Severity) value);
        return oldValue;
    }

    /**
     * @param key
     * @return the severity
     */
    public Severity getSeverity(final String key) {
        final int severityDiag = _severities[getIdByKey(key)];
        final Severity severity = mapDiagToSeverity(severityDiag);
        return severity;
    }

    /**
     * @param key
     * @param severity
     */
    public void setSeverity(final String key, final Severity severity) {
        final int newSeverityDiag = mapSeverityToDiag(severity.toString());
        final int diagId = getIdByKey(key);
        _severities[diagId] = newSeverityDiag;
    }

    /**
     * @param diagnosticId
     * @return the severity as configured for diagnosticId. The value is
     *         relative to the Diagnostic class severity scheme
     */
    public final int getDiagnosticSeverity(final int diagnosticId) {
        return getSeverities()[diagnosticId];
    }

    private int[] getSeverities() {
        if (_severities == null) {
            _severities = new int[FaceletDiagnosticFactory.NUM_IDS];
        }
        return _severities;
    }

    /**
     * @param diagSeverity
     * @return a Severity preference value for a diagnostic severity
     */
    public static Severity mapDiagToSeverity(final int diagSeverity) {
        switch (diagSeverity) {
        case Diagnostic.ERROR:
            return Severity.ERROR;
        case Diagnostic.WARNING:
            return Severity.WARNING;
        default:
            return Severity.IGNORE;
        }
    }

    /**
     * @param severity
     * @return a Diagnostic severity level for a severity pref string
     */
    public static int mapSeverityToDiag(final String severity) {
        if ("error".equals(severity)) //$NON-NLS-1$
        {
            return Diagnostic.ERROR;
        } else if ("warning".equals(severity)) //$NON-NLS-1$
        {
            return Diagnostic.WARNING;
        } else if ("ignore".equals(severity)) //$NON-NLS-1$
        {
            return Diagnostic.OK;
        } else {
            throw new IllegalArgumentException("Invalid enum name: " + severity); //$NON-NLS-1$
        }
    }

    /**
     * @param diagnosticId
     * @return the default severity of a diagnostic
     */
    public static int getDefaultSeverity(final int diagnosticId) {
        switch (diagnosticId) {
        case FaceletDiagnosticFactory.CANNOT_FIND_FACELET_TAGLIB_ID:
            return Diagnostic.WARNING;
        default:
            throw new IllegalArgumentException("Diagnostic Id: " + diagnosticId + " is out of range"); //$NON-NLS-1$ //$NON-NLS-2$
        }
    }

    /**
     * @param diagnosticId
     * @return the preference key for the corresponding diagnosticId in the el
     *         DiagnosticFactory
     */
    public static String getKeyById(final int diagnosticId) {
        switch (diagnosticId) {
        case FaceletDiagnosticFactory.CANNOT_FIND_FACELET_TAGLIB_ID:
            return CANNOT_FIND_FACELET_TAGLIB;
        default:
            throw new IllegalArgumentException("Diagnostic Id: " + diagnosticId + " is out of range"); //$NON-NLS-1$ //$NON-NLS-2$
        }
    }

    /**
     * @param key
     * @return the preference key for the corresponding diagnosticId in the el
     *         DiagnosticFactory
     */
    public static int getIdByKey(final String key) {
        if (CANNOT_FIND_FACELET_TAGLIB.equals(key)) {
            return FaceletDiagnosticFactory.CANNOT_FIND_FACELET_TAGLIB_ID;
        }
        throw new IllegalArgumentException("Severity Key: " + key); //$NON-NLS-1$
    }

    /**
     * e.g. createQualifiedKeyName("foo") -> org.eclipse.jst.jsf.core.foo
     * 
     * @param baseName
     * @return a plugin qualified key given the baseName
     * 
     */
    private static String createQualifiedKeyName(final String baseName) {
        return JSFCorePlugin.PLUGIN_ID + "." + baseName; //$NON-NLS-1$
    }

    /**
     * preference key. Match to DiagnosticFactory constants
     */
    public final static String CANNOT_FIND_FACELET_TAGLIB = createQualifiedKeyName("CANNOT_FIND_FACELET_TAGLIB"); //$NON-NLS-1$
}