/******************************************************************************* * Copyright (c) 2010 Neil Bartlett. * 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: * Neil Bartlett - initial API and implementation *******************************************************************************/ package bndtools.wizards.bndfile; import java.io.InputStream; import org.bndtools.api.BndtoolsConstants; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.jface.dialogs.ErrorDialog; import org.eclipse.jface.dialogs.IMessageProvider; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.ui.dialogs.WizardNewFileCreationPage; import aQute.bnd.build.Project; import bndtools.Plugin; public class NewBndFileWizardPage extends WizardNewFileCreationPage { private InputStream initialContents = null; public NewBndFileWizardPage(String pageName, IStructuredSelection selection) { super(pageName, selection != null ? selection : StructuredSelection.EMPTY); setTitle(Messages.NewBndFileWizardPage_title); } @Override protected String getNewFileLabel() { return Messages.NewBndFileWizardPage_labelBndFile; } @Override protected boolean validatePage() { boolean valid = super.validatePage(); if (!valid) return valid; String warning = null; String error = null; String fileName = getFileName(); IPath containerPath = getContainerFullPath(); IResource container = ResourcesPlugin.getWorkspace().getRoot().findMember(containerPath); IProject project = container.getProject(); try { if (project.hasNature(BndtoolsConstants.NATURE_ID)) { if (Project.BNDFILE.equalsIgnoreCase(fileName)) { error = Messages.NewBndFileWizardPage_errorReservedFilename; } } } catch (CoreException e) { ErrorDialog.openError(getShell(), Messages.NewBndFileWizardPage_titleError, null, new Status(IStatus.ERROR, Plugin.PLUGIN_ID, 0, Messages.NewBndFileWizardPage_errorCheckingBndNature, e)); } if (container.getType() != IResource.PROJECT) { warning = Messages.NewBndFileWizardPage_warningNotTopLevel; } try { if (!project.hasNature(BndtoolsConstants.NATURE_ID)) { warning = Messages.NewBndFileWizardPage_warningNonBndProject; } } catch (CoreException e) { ErrorDialog.openError(getShell(), Messages.NewBndFileWizardPage_titleError, null, new Status(IStatus.ERROR, Plugin.PLUGIN_ID, 0, Messages.NewBndFileWizardPage_errorCheckingBndNature, e)); } setMessage(warning, IMessageProvider.WARNING); setErrorMessage(error); return error == null; } @Override protected InputStream getInitialContents() { return initialContents; } void setInitialContents(InputStream initialContents) { this.initialContents = initialContents; } }