/******************************************************************************* * Copyright (c) 2001, 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 *******************************************************************************/ // Based on version 1.6 of original xsdeditor package org.eclipse.wst.xsd.ui.internal.wizards; import java.util.regex.Pattern; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.osgi.util.TextProcessor; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.StyledText; import org.eclipse.swt.graphics.FontData; import org.eclipse.swt.graphics.GC; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.PlatformUI; import org.eclipse.wst.xsd.ui.internal.editor.XSDEditorCSHelpIds; import org.eclipse.wst.xsd.ui.internal.editor.XSDEditorPlugin; import org.eclipse.wst.xsd.ui.internal.util.ViewUtility; public class RegexTestingPage extends WizardPage { /* Validator from xerces package. */ // private RegularExpression validator; /* Displays the status of the match. */ private Label matchLabel; /* The regex. */ private Text value; /* The string the user is trying to match against the regex. */ private StyledText testString; public RegexTestingPage() { super(XSDEditorPlugin.getXSDString("_UI_REGEX_WIZARD_TESTING_PAGE_TITLE")); setTitle(XSDEditorPlugin.getXSDString("_UI_REGEX_WIZARD_TESTING_PAGE_TITLE")); setDescription(XSDEditorPlugin.getXSDString("_UI_REGEX_WIZARD_TESTING_PAGE_DESCRIPTION")); } public void createControl(Composite parent) { Composite composite = ViewUtility.createComposite(parent, 1); PlatformUI.getWorkbench().getHelpSystem().setHelp(composite, XSDEditorCSHelpIds.REGEX_TEST_PAGE); matchLabel = new Label(composite, SWT.WRAP); matchLabel.setText(XSDEditorPlugin.getXSDString("_UI_REGEX_WIZARD_TESTING_PAGE_DESCRIPTION")); FontData[] fontData = matchLabel.getFont().getFontData(); GridData dataF = new GridData(); dataF.widthHint = 400; dataF.heightHint = 6 * fontData[0].getHeight(); matchLabel.setLayoutData(dataF); Composite controls = new Composite(composite, SWT.NONE); GridLayout controlsLayout = new GridLayout(); controlsLayout.numColumns = 2; controls.setLayout(controlsLayout); controls.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); new Label(controls, SWT.LEFT).setText(XSDEditorPlugin.getXSDString("_UI_REGEX_WIZARD_REGEX_LABEL")); value = new Text(controls, SWT.BORDER | SWT.READ_ONLY); value.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); new Label(controls, SWT.LEFT).setText(XSDEditorPlugin.getXSDString("_UI_REGEX_WIZARD_SAMPLE_TEXT")); testString = new StyledText(controls, SWT.SINGLE | SWT.BORDER); PlatformUI.getWorkbench().getHelpSystem().setHelp(testString, XSDEditorCSHelpIds.REGEX_SAMPLE_TEXT); testString.addListener(SWT.Modify, new TestStringListener()); testString.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); controls.pack(); Label separator = new Label(composite, SWT.SEPARATOR | SWT.HORIZONTAL); GC gc = new GC(separator); Point pointSize = gc.stringExtent(XSDEditorPlugin.getXSDString("_UI_REGEX_WIZARD_TESTING_PAGE_DESCRIPTION")); GridData gd = new GridData(); gd.widthHint = pointSize.x / 2 + gc.getAdvanceWidth('M')*11; gd.horizontalAlignment= GridData.FILL; separator.setLayoutData(gd); composite.pack(); setControl(composite); } private String getPatternValue() { return ( (RegexCompositionPage)getPreviousPage() ).getPattern().getLexicalValue(); } private String getFlags() { return ( (RegexCompositionPage)getPreviousPage() ).getFlags(); } public void setVisible(boolean visible) { super.setVisible(visible); getFlags(); value.setText(TextProcessor.process(getPatternValue())); updateMatchStatus(); testString.setFocus(); } class TestStringListener implements Listener { public void handleEvent(Event e) { updateMatchStatus(); } } private void updateMatchStatus() { if (Pattern.matches(getPatternValue(), testString.getText())) { // matchLabel.setText(XSDEditorPlugin.getXSDString("_UI_REGEX_WIZARD_MATCHES")); setMessage(XSDEditorPlugin.getXSDString("_UI_REGEX_WIZARD_MATCHES"), 1); } else { setMessage(XSDEditorPlugin.getXSDString("_UI_REGEX_WIZARD_DOES_NOT_MATCH"), 2); // matchLabel.setText(XSDEditorPlugin.getXSDString("_UI_REGEX_WIZARD_DOES_NOT_MATCH")); } } }