PropertiesFileMergeViewer.java :  » IDE-Eclipse » jdt » org » eclipse » jdt » internal » ui » compare » Java Open Source

Java Open Source » IDE Eclipse » jdt 
jdt » org » eclipse » jdt » internal » ui » compare » PropertiesFileMergeViewer.java
/*******************************************************************************
 * Copyright (c) 2000, 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.jdt.internal.ui.compare;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.widgets.Composite;

import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.PropertyChangeEvent;

import org.eclipse.jface.text.IDocumentPartitioner;
import org.eclipse.jface.text.TextViewer;
import org.eclipse.jface.text.rules.FastPartitioner;
import org.eclipse.jface.text.source.SourceViewer;
import org.eclipse.jface.text.source.SourceViewerConfiguration;

import org.eclipse.compare.CompareConfiguration;
import org.eclipse.compare.contentmergeviewer.TextMergeViewer;

import org.eclipse.jdt.internal.ui.JavaPlugin;
import org.eclipse.jdt.internal.ui.propertiesfileeditor.IPropertiesFilePartitions;
import org.eclipse.jdt.internal.ui.propertiesfileeditor.PropertiesFilePartitionScanner;
import org.eclipse.jdt.internal.ui.propertiesfileeditor.PropertiesFileSourceViewerConfiguration;

/**
 * Properties file merge viewer.
 *
 * @since 3.1
 */
public class PropertiesFileMergeViewer extends TextMergeViewer {

  private List fSourceViewerConfigurations;

  private IPropertyChangeListener fPreferenceChangeListener;

  private IPreferenceStore fPreferenceStore;


  /**
   * Creates a properties file merge viewer under the given parent control.
   *
   * @param parent the parent control
   * @param configuration the configuration object
   */
  public PropertiesFileMergeViewer(Composite parent, CompareConfiguration configuration) {
    super(parent, SWT.LEFT_TO_RIGHT, configuration);
  }

  /*
   * @see org.eclipse.compare.contentmergeviewer.TextMergeViewer#configureTextViewer(org.eclipse.jface.text.TextViewer)
   */
  protected void configureTextViewer(TextViewer textViewer) {
    if (!(textViewer instanceof SourceViewer))
      return;

    if (fPreferenceStore == null) {
      fSourceViewerConfigurations= new ArrayList(3);
      fPreferenceStore= JavaPlugin.getDefault().getCombinedPreferenceStore();
      fPreferenceChangeListener= new IPropertyChangeListener() {
        public void propertyChange(PropertyChangeEvent event) {
          Iterator iter= fSourceViewerConfigurations.iterator();
          while (iter.hasNext())
            ((PropertiesFileSourceViewerConfiguration)iter.next()).handlePropertyChangeEvent(event);
          invalidateTextPresentation();
        }
      };
      fPreferenceStore.addPropertyChangeListener(fPreferenceChangeListener);
    }

    SourceViewerConfiguration sourceViewerConfiguration= new PropertiesFileSourceViewerConfiguration(JavaPlugin.getDefault().getJavaTextTools().getColorManager(), fPreferenceStore, null,
        getDocumentPartitioning());

    fSourceViewerConfigurations.add(sourceViewerConfiguration);
    ((SourceViewer)textViewer).configure(sourceViewerConfiguration);
  }

  /*
   * @see org.eclipse.compare.contentmergeviewer.TextMergeViewer#getDocumentPartitioner()
   */
  protected IDocumentPartitioner getDocumentPartitioner() {
    return new FastPartitioner(new PropertiesFilePartitionScanner(), IPropertiesFilePartitions.PARTITIONS);
  }

  /*
   * @see org.eclipse.compare.contentmergeviewer.TextMergeViewer#getDocumentPartitioning()
   * @since 3.3
   */
  protected String getDocumentPartitioning() {
    return IPropertiesFilePartitions.PROPERTIES_FILE_PARTITIONING;
  }

  /*
   * @see org.eclipse.compare.contentmergeviewer.ContentMergeViewer#getTitle()
   */
  public String getTitle() {
    return CompareMessages.PropertiesFileMergeViewer_title;
  }

  /*
   * @see org.eclipse.compare.contentmergeviewer.TextMergeViewer#handleDispose(org.eclipse.swt.events.DisposeEvent)
   * @since 3.5
   */
  protected void handleDispose(DisposeEvent event) {
    if (fPreferenceStore != null) {
      fPreferenceStore.removePropertyChangeListener(fPreferenceChangeListener);
      fPreferenceStore= null;
      fPreferenceChangeListener= null;
      fSourceViewerConfigurations= null;
    }
    super.handleDispose(event);
  }
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.