blob: 97bfeba6cedc6c1e5cddb1be8dded65eb8f92ef0 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2011-2016 EclipseSource Muenchen GmbH and others.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Alexandra Buzila - initial API and implementation
******************************************************************************/
package org.eclipse.emf.ecp.view.model.presentation;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
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.Path;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.jface.dialogs.IMessageProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.dialogs.WizardNewFileCreationPage;
/**
* @author Alexandra Buzila
*
*/
/**
* This is the first page of the wizard. <!-- begin-user-doc --> <!--
* end-user-doc -->
*
* @generated
*/
public class ViewModelWizardNewFileCreationPage extends
WizardNewFileCreationPage {
/**
* The supported extensions for created files. <!-- begin-user-doc --> <!--
* end-user-doc -->
*
* @generated
*/
public static final List<String> FILE_EXTENSIONS = Collections
.unmodifiableList(Arrays.asList(ViewEditorPlugin.INSTANCE
.getString("_UI_ViewEditorFilenameExtensions").split( //$NON-NLS-1$
"\\s*,\\s*"))); //$NON-NLS-1$
/**
* A formatted list of supported file extensions, suitable for display. <!--
* begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
public static final String FORMATTED_FILE_EXTENSIONS = ViewEditorPlugin.INSTANCE
.getString("_UI_ViewEditorFilenameExtensions").replaceAll( //$NON-NLS-1$
"\\s*,\\s*", ", "); //$NON-NLS-1$ //$NON-NLS-2$
private EClass eClass;
private final IStructuredSelection selection;
/**
* @return the eClass
*/
public EClass getEClass() {
return eClass;
}
/**
* @param eClass the eClass to set
*/
public void setEClass(EClass eClass) {
this.eClass = eClass;
}
/**
* Pass in the selection. <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
public ViewModelWizardNewFileCreationPage(String pageId,
IStructuredSelection selection) {
super(pageId, selection);
this.selection = selection;
}
/**
* {@inheritDoc}
*
* @see org.eclipse.ui.dialogs.WizardNewFileCreationPage#setVisible(boolean)
*/
@Override
public void setVisible(boolean visible) {
super.setVisible(visible);
if (visible) {
// Try and get the resource selection to determine a current directory
// for the file dialog.
if (selection != null && !selection.isEmpty()) {
// Get the resource...
final Object selectedElement = selection.iterator().next();
if (selectedElement instanceof IResource) {
// Get the resource parent, if its a file.
IResource selectedResource = (IResource) selectedElement;
if (selectedResource.getType() == IResource.FILE) {
selectedResource = selectedResource.getParent();
}
// This gives us a directory...
if (selectedResource instanceof IFolder
|| selectedResource instanceof IProject) {
// Set this for the container.
setContainerFullPath(selectedResource
.getFullPath());
}
// Make up a unique new name here.
final String defaultModelBaseFilename = eClass.getName();
final String defaultModelFilenameExtension = FILE_EXTENSIONS
.get(0);
String modelFilename = defaultModelBaseFilename + "." //$NON-NLS-1$
+ defaultModelFilenameExtension;
for (int i = 1; ((IContainer) selectedResource)
.findMember(modelFilename) != null; ++i) {
modelFilename = defaultModelBaseFilename + i + "." //$NON-NLS-1$
+ defaultModelFilenameExtension;
}
setFileName(modelFilename);
setPageComplete(true);
}
}
} else {
setPageComplete(false);
}
}
/**
* {@inheritDoc}
*
* @see org.eclipse.ui.dialogs.WizardNewFileCreationPage#createControl(org.eclipse.swt.widgets.Composite)
*/
@Override
public void createControl(Composite parent) {
super.createControl(parent);
}
/**
* The framework calls this to see if the file is correct. <!--
* begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
@Override
protected boolean validatePage() {
if (super.validatePage()) {
// validate extension
final String extension = new Path(getFileName()).getFileExtension();
if (extension == null || !FILE_EXTENSIONS.contains(extension)) {
final String key = FILE_EXTENSIONS.size() > 1 ? "_WARN_FilenameExtensions" //$NON-NLS-1$
: "_WARN_FilenameExtension"; //$NON-NLS-1$
setErrorMessage(ViewEditorPlugin.INSTANCE.getString(key,
new Object[] { FORMATTED_FILE_EXTENSIONS }));
return false;
}
// validate selected project
checkProjectNature();
return true;
}
return false;
}
private void checkProjectNature() {
if (getModelFile() == null) {
return;
}
final IProject project = getModelFile().getProject();
try {
if (!project.hasNature("org.eclipse.pde.PluginNature")) { //$NON-NLS-1$
setMessage(ViewEditorPlugin.INSTANCE.getString("_WARN_PluginProject"), IMessageProvider.WARNING); //$NON-NLS-1$
}
} catch (final CoreException ex) {
// do nothing
}
}
/**
* <!-- begin-user-doc --> <!-- end-user-doc -->
*
* @generated
*/
public IFile getModelFile() {
if (getControl() == null || getContainerFullPath() == null || getFileName() == null) {
return null;
}
return ResourcesPlugin.getWorkspace().getRoot()
.getFile(getContainerFullPath().append(getFileName()));
}
}