content: /*******************************************************************************
   * Copyright (c) 2000, 2007 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.wst.jsdt.internal.ui.preferences;
  
  import org.eclipse.core.resources.IProject;
  import org.eclipse.core.resources.ProjectScope;
  import org.eclipse.core.runtime.IPath;
  import org.eclipse.core.runtime.preferences.DefaultScope;
  import org.eclipse.core.runtime.preferences.IEclipsePreferences;
  import org.eclipse.core.runtime.preferences.IScopeContext;
  import org.eclipse.core.runtime.preferences.InstanceScope;
  import org.eclipse.ui.preferences.IWorkingCopyManager;
  import org.osgi.service.prefs.BackingStoreException;
  
  /**
   * 
   */
  public class PreferencesAccess {
  	
  	public static PreferencesAccess getOriginalPreferences() {
  		return new PreferencesAccess();
  	}
  	
  	public static PreferencesAccess getWorkingCopyPreferences(IWorkingCopyManager workingCopyManager) {
  		return new WorkingCopyPreferencesAccess(workingCopyManager);
  	}
  		
  	private PreferencesAccess() {
  		// can only extends in this file
  	}
  	
  	public IScopeContext getDefaultScope() {
  		return new DefaultScope();
  	}
  	
  	public IScopeContext getInstanceScope() {
  		return new InstanceScope();
  	}
  	
  	public IScopeContext getProjectScope(IProject project) {
  		return new ProjectScope(project);
  	}
  	
  	public void applyChanges() throws BackingStoreException {
  	}
  	
  	
  	private static class WorkingCopyPreferencesAccess extends PreferencesAccess {
  		
  		private final IWorkingCopyManager fWorkingCopyManager;
  
  		private WorkingCopyPreferencesAccess(IWorkingCopyManager workingCopyManager) {
  			fWorkingCopyManager= workingCopyManager;
  		}
  		
  		private final IScopeContext getWorkingCopyScopeContext(IScopeContext original) {
  			return new WorkingCopyScopeContext(fWorkingCopyManager, original);
  		}
  		
  		public IScopeContext getDefaultScope() {
  			return getWorkingCopyScopeContext(super.getDefaultScope());
  		}
  		
  		public IScopeContext getInstanceScope() {
  			return getWorkingCopyScopeContext(super.getInstanceScope());
  		}
  		
  		public IScopeContext getProjectScope(IProject project) {
  			return getWorkingCopyScopeContext(super.getProjectScope(project));
  		}
  		
  		/* (non-Javadoc)
  		 * @see org.eclipse.wst.jsdt.internal.ui.preferences.PreferencesAccess#applyChanges()
  		 */
  		public void applyChanges() throws BackingStoreException {
  			fWorkingCopyManager.applyChanges();
  		}
  	}
  	
  	
  	private static class WorkingCopyScopeContext implements IScopeContext {
  		
  		private final IWorkingCopyManager fWorkingCopyManager;
  		private final IScopeContext fOriginal;
  
  		public WorkingCopyScopeContext(IWorkingCopyManager workingCopyManager, IScopeContext original) {
  			fWorkingCopyManager= workingCopyManager;
  			fOriginal= original;	
  		}
  
  		/* (non-Javadoc)
  		 * @see org.eclipse.core.runtime.preferences.IScopeContext#getName()
  		 */
  		public String getName() {
  			return fOriginal.getName();
  		}
  
  		/* (non-Javadoc)
  		 * @see org.eclipse.core.runtime.preferences.IScopeContext#getNode(java.lang.String)
  		 */
  		public IEclipsePreferences getNode(String qualifier) {
  			return fWorkingCopyManager.getWorkingCopy(fOriginal.getNode(qualifier));
  		}
  
  		/* (non-Javadoc)
  		 * @see org.eclipse.core.runtime.preferences.IScopeContext#getLocation()
  		 */
  		public IPath getLocation() {
  			return fOriginal.getLocation();
  		}
  	}
  
  
  }
  