/******************************************************************************* | |
* 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.wst.sse.ui; | |
import org.eclipse.ui.editors.text.DefaultEncodingSupport; | |
import org.eclipse.ui.editors.text.IEncodingSupport; | |
import org.eclipse.ui.texteditor.StatusTextEditor; | |
import org.eclipse.wst.sse.ui.internal.ExtendedConfigurationBuilder; | |
/** | |
* An implementation that will try to use a <b>provisional</b> configuration | |
* if IEncodingSupport.class as a delegate. A delegate, if found, will be | |
* asked for encoding information before defaulting to the superclass | |
* implementation, but will be told to set the encoding after the superclass | |
* has. Delegates should not duplicate any functionality in the | |
* DefaultEncodingSupport implementation as they may be executed in addition | |
* to the default behavior. | |
*/ | |
class EncodingSupport extends DefaultEncodingSupport { | |
private String[] fConfigurationPoints = null; | |
/** The editor this support is associated with. */ | |
private StatusTextEditor fStatusTextEditor; | |
IEncodingSupport fSupportDelegate = null; | |
EncodingSupport(String[] configurationPoints) { | |
super(); | |
fConfigurationPoints = configurationPoints; | |
} | |
/* | |
* (non-Javadoc) | |
* | |
* @see org.eclipse.ui.editors.text.DefaultEncodingSupport#dispose() | |
*/ | |
public void dispose() { | |
super.dispose(); | |
if (fSupportDelegate instanceof DefaultEncodingSupport) { | |
((DefaultEncodingSupport) fSupportDelegate).dispose(); | |
} | |
fSupportDelegate = null; | |
fStatusTextEditor = null; | |
} | |
/* | |
* (non-Javadoc) | |
* | |
* @seeorg.eclipse.ui.editors.text.DefaultEncodingSupport# | |
* getDefaultEncoding() | |
*/ | |
public String getDefaultEncoding() { | |
IEncodingSupport delegate = getEncodingSupportDelegate(); | |
if (delegate != null) { | |
return delegate.getDefaultEncoding(); | |
} | |
return super.getDefaultEncoding(); | |
} | |
/* | |
* (non-Javadoc) | |
* | |
* @see org.eclipse.ui.editors.text.DefaultEncodingSupport#getEncoding () | |
*/ | |
public String getEncoding() { | |
IEncodingSupport delegate = getEncodingSupportDelegate(); | |
if (delegate != null) { | |
return delegate.getEncoding(); | |
} | |
return super.getEncoding(); | |
} | |
IEncodingSupport getEncodingSupportDelegate() { | |
if (fSupportDelegate == null) { | |
ExtendedConfigurationBuilder builder = ExtendedConfigurationBuilder.getInstance(); | |
for (int i = 0; fSupportDelegate == null && i < fConfigurationPoints.length; i++) { | |
fSupportDelegate = (IEncodingSupport) builder.getConfiguration(IEncodingSupport.class.getName(), fConfigurationPoints[i]); | |
} | |
} | |
return fSupportDelegate; | |
} | |
/* | |
* (non-Javadoc) | |
* | |
* @see | |
* org.eclipse.ui.editors.text.DefaultEncodingSupport#initialize(org.eclipse | |
* .ui.texteditor.StatusTextEditor) | |
*/ | |
public void initialize(StatusTextEditor textEditor) { | |
super.initialize(textEditor); | |
fStatusTextEditor = textEditor; | |
IEncodingSupport encodingSupportDelegate = getEncodingSupportDelegate(); | |
if (encodingSupportDelegate instanceof DefaultEncodingSupport) { | |
((DefaultEncodingSupport) encodingSupportDelegate).initialize(textEditor); | |
} | |
} | |
void reinitialize(String[] configurationPoints) { | |
if (fSupportDelegate instanceof DefaultEncodingSupport) { | |
((DefaultEncodingSupport) fSupportDelegate).dispose(); | |
} | |
fSupportDelegate = null; | |
fConfigurationPoints = configurationPoints; | |
IEncodingSupport encodingSupportDelegate = getEncodingSupportDelegate(); | |
if (encodingSupportDelegate instanceof DefaultEncodingSupport) { | |
((DefaultEncodingSupport) encodingSupportDelegate).initialize(fStatusTextEditor); | |
} | |
} | |
/* | |
* (non-Javadoc) | |
* | |
* @see org.eclipse.ui.editors.text.DefaultEncodingSupport#setEncoding | |
* (java.lang.String, boolean) | |
*/ | |
protected void setEncoding(String encoding, boolean overwrite) { | |
super.setEncoding(encoding, overwrite); | |
IEncodingSupport delegate = getEncodingSupportDelegate(); | |
if (delegate != null && overwrite) { | |
delegate.setEncoding(encoding); | |
} | |
} | |
} |