/******************************************************************************* * Copyright (c) 2012 BMW Car IT 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 *******************************************************************************/ package org.jnario.ui.wizards; import java.io.ByteArrayInputStream; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.jdt.core.IJavaElement; import org.eclipse.jdt.core.JavaModelException; import org.eclipse.jdt.internal.ui.dialogs.TextFieldNavigationHandler; import org.eclipse.jdt.internal.ui.wizards.dialogfields.DialogField; import org.eclipse.jdt.internal.ui.wizards.dialogfields.LayoutUtil; import org.eclipse.jdt.internal.ui.wizards.dialogfields.StringDialogField; import org.eclipse.jdt.ui.wizards.NewTypeWizardPage; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Link; import org.eclipse.swt.widgets.Text; @SuppressWarnings("restriction") public abstract class NewJnarioFileWizardPageOne extends NewTypeWizardPage { private static final String PAGE_NAME = "NewTestCaseCreationWizardPage"; private Link fLink; private Label fImage; private IResource fResource; private JnarioFileCreator featureCreator; private StringDialogField descriptionDialogField; public NewJnarioFileWizardPageOne(JnarioFileCreator featureCreator) { super(true, PAGE_NAME); this.featureCreator = featureCreator; setTitle("Jnario " + title()); setDescription("Select the name of the new " + title() + " file."); descriptionDialogField = new StringDialogField(); descriptionDialogField.setLabelText(title() + ":"); } protected abstract String title(); public void init(IStructuredSelection selection) { IJavaElement element = getInitialJavaElement(selection); initContainerPage(element); initTypePage(element); updateStatus(getStatusList()); } @Override protected void handleFieldChanged(String fieldName) { super.handleFieldChanged(fieldName); if (fieldName.equals(CONTAINER)) { updateBuildPathMessage(); } updateStatus(getStatusList()); } protected IStatus[] getStatusList() { return new IStatus[] { fContainerStatus, fPackageStatus, fTypeNameStatus, fModifierStatus, fSuperClassStatus }; } public void createControl(Composite parent) { initializeDialogUnits(parent); Composite composite = new Composite(parent, SWT.NONE); int nColumns = 4; GridLayout layout = new GridLayout(); layout.numColumns = nColumns; composite.setLayout(layout); createContainerControls(composite, nColumns); createPackageControls(composite, nColumns); createTypeNameControls(composite, nColumns); createSeparator(composite, nColumns); createDescriptionControls(composite, nColumns); setControl(composite); // set default and focus Dialog.applyDialogFont(composite); setFocus(); } protected void createDescriptionControls(Composite composite, int nColumns) { descriptionDialogField.setText(""); descriptionDialogField.doFillIntoGrid(composite, nColumns - 1); DialogField.createEmptySpace(composite); Text text = descriptionDialogField.getTextControl(null); LayoutUtil.setWidthHint(text, getMaxFieldWidth()); TextFieldNavigationHandler.install(text); } private void updateBuildPathMessage() { if (fLink == null || fLink.isDisposed()) { return; } String message = null; fLink.setVisible(message != null); fImage.setVisible(message != null); } @Override public boolean canFlipToNextPage() { return false; } public void createType(IProgressMonitor monitor) { if (monitor == null) { monitor = new NullProgressMonitor(); } if (!getPackageFragment().exists()) { try { getPackageFragmentRoot().createPackageFragment( getPackageFragment().getElementName(), true, monitor); } catch (JavaModelException e) { displayError("Could not create package", e.getMessage()); } } IResource res = getPackageFragment().getResource(); IFile specFile = null; specFile = ((IFolder) res).getFile(getTypeName() + "." + fileExtension()); //$NON-NLS-1$ try { String contents = featureCreator.create(getJavaProject(), descriptionDialogField.getText(), getPackageFragment(), monitor); specFile.create(new ByteArrayInputStream(contents.getBytes()), true, monitor); this.fResource = specFile; } catch (CoreException e) { displayError("Could not create " + title(), e.getMessage()); } } protected abstract String fileExtension(); public IResource getResource() { return fResource; } private void displayError(final String title, final String message) { Display.getDefault().syncExec(new Runnable() { public void run() { MessageDialog.openError(getShell(), title, message); } }); } public void setSpecDescription(String text) { descriptionDialogField.setText(text); } public String getDescriptionFieldValue() { return descriptionDialogField.getText(); } }