Java tutorial
/******************************************************************************* * Copyright (c) 2009 Andrey Loskutov. * 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 * Contributor: Stefan Seidel - initial API and implementation * Contributor: Andrey Loskutov - integration *******************************************************************************/ package de.loskutov.anyedit.actions; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.dialogs.MessageDialogWithToggle; import org.eclipse.jface.text.BadLocationException; import org.eclipse.jface.text.IDocument; import org.eclipse.osgi.util.NLS; import de.loskutov.anyedit.AnyEditToolsPlugin; import de.loskutov.anyedit.IAnyEditConstants; import de.loskutov.anyedit.Messages; import de.loskutov.anyedit.util.TextReplaceResultSet; public class ConvertUnicode extends AbstractReplaceAction { private static final int KEY_UNESCAPE = 0; private static final int KEY_ESCAPE = 1; private boolean warnAboutUnsupportedUnicode; private String charset; @Override protected void doTextOperation(IDocument doc, String actionID, TextReplaceResultSet resultSet) throws BadLocationException { warnAboutUnsupportedUnicode = warnAboutUnsupportedUnicode(); charset = getEditor().computeEncoding(); super.doTextOperation(doc, actionID, resultSet); } /** * @return */ private boolean warnAboutUnsupportedUnicode() { return AnyEditToolsPlugin.getDefault().getPreferenceStore() .getBoolean(IAnyEditConstants.WARN_ABOUT_UNSUPPORTED_UNICODE); } @Override protected String performReplace(String line, int actionKey) { if (KEY_ESCAPE == actionKey) { return textUtil.toUnicode(line); } String charsetToUse = warnAboutUnsupportedUnicode ? charset : null; try { return textUtil.fromUnicode(charsetToUse, line); } catch (UnsupportedOperationException e) { MessageDialogWithToggle dialogWithToggle = MessageDialogWithToggle.openYesNoQuestion( AnyEditToolsPlugin.getShell(), Messages.ConvertUnicode_title, NLS.bind(Messages.ConvertUnicode_warn, e.getMessage()), Messages.ConvertUnicode_toggleMessage, false, AnyEditToolsPlugin.getDefault().getPreferenceStore(), IAnyEditConstants.WARN_ABOUT_UNSUPPORTED_UNICODE); int returnCode = dialogWithToggle.getReturnCode(); // refresh the value, if user changed it warnAboutUnsupportedUnicode = warnAboutUnsupportedUnicode(); if (returnCode != IDialogConstants.YES_ID) { shouldStopReplace = true; return null; } // suppress any warning, just continue return textUtil.fromUnicode(null, line); } } @Override protected int getActionKey(String actionID) { return actionID.startsWith(ACTION_ID_UNICODIFY) ? KEY_ESCAPE : KEY_UNESCAPE; } }