/*******************************************************************************
 * Copyright (c) 2008 IBM Corporation 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:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/

package org.eclipse.jst.jsp.core.internal.validation;

import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.ProjectScope;
import org.eclipse.core.runtime.preferences.IEclipsePreferences;
import org.eclipse.core.runtime.preferences.InstanceScope;
import org.eclipse.jst.jsp.core.internal.JSPCorePlugin;
import org.eclipse.jst.jsp.core.internal.preferences.JSPCorePreferenceNames;


/**
 * Utility class for reading fragment validation preferences/properties.
 * JSPFContentProperties does not respect the project override preference.
 * 
 */
class FragmentValidationTools {
	/**
	 * @param resource
	 * @return whether to perform validation on a fragment, returning the
	 *         project-specific preference only of project-specific values are
	 *         enabled
	 */
	static boolean shouldValidateFragment(IResource resource) {
		String qualifier = JSPCorePlugin.getDefault().getBundle().getSymbolicName();

		IProject project = null;
		if (resource.getType() == IResource.PROJECT) {
			project = (IProject) resource;
		}
		else {
			project = resource.getProject();
		}
		if (project != null) {
			IEclipsePreferences node = new ProjectScope(project).getNode(qualifier);
			// first, check whether project specific settings are to be used
			boolean useProjectSettings = node.getBoolean(JSPCorePreferenceNames.VALIDATION_USE_PROJECT_SETTINGS, false);
			if (useProjectSettings) {
				// only if so, return that value
				return node.getBoolean(JSPCorePreferenceNames.VALIDATE_FRAGMENTS, true);
			}
			// if not, return the workspace value
		}
		return new InstanceScope().getNode(qualifier).getBoolean(JSPCorePreferenceNames.VALIDATE_FRAGMENTS, true);
	}
}
