/******************************************************************************* * Copyright (c) 2010-2012, Zoltan Ujhelyi, Tamas Szabo, Istvan Rath and Daniel Varro * 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: * Zoltan Ujhelyi, Tamas Szabo - initial API and implementation *******************************************************************************/ package org.eclipse.incquery.tooling.ui.wizards; import java.util.List; import org.eclipse.core.runtime.IStatus; import org.eclipse.emf.ecore.EPackage; import org.eclipse.incquery.tooling.core.generator.genmodel.IEiqGenmodelProvider; import org.eclipse.incquery.tooling.ui.wizards.internal.ImportListAdapter; import org.eclipse.incquery.tooling.ui.wizards.internal.ImportListLabelProvider; import org.eclipse.incquery.tooling.ui.wizards.internal.ObjectListAdapter; import org.eclipse.incquery.tooling.ui.wizards.internal.ObjectListLabelProvider; import org.eclipse.incquery.tooling.ui.wizards.internal.ObjectParameter; import org.eclipse.jdt.internal.ui.dialogs.StatusInfo; import org.eclipse.jdt.internal.ui.dialogs.StatusUtil; import org.eclipse.jdt.internal.ui.wizards.dialogfields.ListDialogField; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; import com.google.inject.Inject; /** * Second page of the {@link NewEiqFileWizard} which allows to specify pattern parameters and imported {@link EPackage} * s. * * @author Tamas Szabo * */ @SuppressWarnings("restriction") public class NewEiqFileWizardPatternConfigurationPage extends WizardPage { private static final String TITLE = "EMF-IncQuery Query Definition Wizard"; private static final String PATTERN_NAME_SHOULD_BE_SPECIFIED = "Pattern name should be specified!"; private static final String PATTERN_NAME_MUST_BE_SPECIFIED = "Pattern name must be specified, if at least one parameter is set!"; private Text patternText; private ListDialogField<EPackage> importList; private ListDialogField<ObjectParameter> objectList; private ImportListLabelProvider importListLabelProvider; private ObjectListLabelProvider objectListLabelProvider; private ImportListAdapter importListAdapter; private ObjectListAdapter objectListAdapter; public boolean parameterSet; @Inject private IEiqGenmodelProvider metamodelProviderService; public NewEiqFileWizardPatternConfigurationPage() { super(TITLE); setTitle(TITLE); parameterSet = false; } private void createImportsControl(Composite parent, int nColumns) { String[] buttonLiterals = new String[] { "Add", "Remove" }; NewEiqFileWizardContainerConfigurationPage firstPage = (NewEiqFileWizardContainerConfigurationPage) this .getPreviousPage(); importListAdapter = new ImportListAdapter(firstPage, metamodelProviderService); importListLabelProvider = new ImportListLabelProvider(); importList = new ListDialogField<EPackage>(importListAdapter, buttonLiterals, importListLabelProvider); importList.setLabelText("&Imported packages:"); importList.setTableColumns(new ListDialogField.ColumnsDescription(new String[] { "EPackage" }, true)); importList.setRemoveButtonIndex(1); importList.doFillIntoGrid(parent, nColumns); } private void createObjectSelectionControl(Composite parent, int nColumns) { String[] buttonLiterals = new String[] { "Add", "Modify", "Remove" }; objectListAdapter = new ObjectListAdapter(this, importList); objectListLabelProvider = new ObjectListLabelProvider(); objectList = new ListDialogField<ObjectParameter>(objectListAdapter, buttonLiterals, objectListLabelProvider); objectList.setLabelText("&Pattern parameters:"); objectList.setTableColumns(new ListDialogField.ColumnsDescription(new String[] { "Name", "Type" }, true)); // disable modify button for an empty list objectList.enableButton(1, false); objectList.setRemoveButtonIndex(2); objectList.doFillIntoGrid(parent, nColumns); } @Override public void createControl(Composite parent) { int nColumns = 5; initializeDialogUnits(parent); Composite composite = new Composite(parent, SWT.NONE); composite.setFont(parent.getFont()); GridLayout layout = new GridLayout(); layout.numColumns = nColumns; composite.setLayout(layout); Label label = new Label(composite, SWT.NULL); label.setText("&Pattern name:"); patternText = new Text(composite, SWT.BORDER | SWT.SINGLE); patternText.setText(""); GridData gd_1 = new GridData(GridData.FILL_HORIZONTAL); gd_1.horizontalSpan = 3; patternText.setLayoutData(gd_1); patternText.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { validatePage(); } }); label = new Label(composite, SWT.SEPARATOR | SWT.HORIZONTAL); GridData gd_2 = new GridData(GridData.FILL_HORIZONTAL); gd_2.horizontalSpan = nColumns; label.setLayoutData(gd_2); createImportsControl(composite, nColumns); createObjectSelectionControl(composite, nColumns); setControl(composite); validatePage(); } public void validatePage() { StatusInfo si = new StatusInfo(StatusInfo.OK, ""); if (patternText != null) { String patternName = patternText.getText(); if (patternName == null || patternName.length() == 0) { if (parameterSet) { si.setError(PATTERN_NAME_MUST_BE_SPECIFIED); } else { si.setWarning(PATTERN_NAME_SHOULD_BE_SPECIFIED); } } } if (si.getSeverity() == IStatus.OK) { si.setInfo(""); } updateStatus(si); if (si.isError()) { setErrorMessage(si.getMessage()); } } protected void updateStatus(IStatus status) { setPageComplete(!status.matches(IStatus.ERROR)); StatusUtil.applyToStatusLine(this, status); } /** * Returns the name of the pattern specified in the wizard. * * @return the name of the pattern */ public String getPatternName() { return patternText.getText(); } /** * Returns the import list of {@link EPackage}s specified in the wizard. * * @return the list of imports */ public List<EPackage> getImports() { return importList.getElements(); } /** * Returns the list of pattern parameters specified in the wizard. * * @return the list of pattern parameters */ public List<ObjectParameter> getParameters() { return objectList.getElements(); } }