/*******************************************************************************
* This file is protected by Copyright.
* Please refer to the COPYRIGHT file distributed with this source distribution.
*
* This file is part of REDHAWK IDE.
*
* 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 gov.redhawk.ide.ui.wizard;
import org.eclipse.core.filesystem.EFS;
import org.eclipse.core.filesystem.IFileInfo;
import org.eclipse.core.filesystem.IFileStore;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.Status;
import org.eclipse.jface.dialogs.DialogPage;
import org.eclipse.jface.dialogs.IMessageProvider;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.wizard.IWizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.dialogs.WizardNewProjectCreationPage;
import gov.redhawk.ui.validation.ProjectNameValidator;
import mil.jpeojtrs.sca.util.DceUuidUtil;
/**
* @since 8.0
*/
public class ScaProjectPropertiesWizardPage extends WizardNewProjectCreationPage implements IValidatableWizardPage, IWizardPage {
/**
* The string name of the resourceType of resource being created("Component", "Device", "Node", "Service" or "Waveform")
*/
private String resourceType = "";
/** Extension type of the associated resource */
private String resourceExtension = "";
private ContentsGroup contentsGroup;
private IDGroup idGroup;
private boolean showContentsGroup = true;
private boolean showComponentIDGroup = true;
private boolean showWorkingSetGroup = true;
protected ScaProjectPropertiesWizardPage(final String pageName, final String resourceType, final String resourceExtension) {
super(pageName);
this.resourceType = resourceType;
this.resourceExtension = resourceExtension;
}
public String getResourceType() {
return this.resourceType;
}
public String getResourceExtension() {
return this.resourceExtension;
}
public void setShowContentsGroup(final boolean value) {
this.showContentsGroup = value;
}
/**
* @since 9.1
*/
public void setShowComponentIDGroup(final boolean value) {
this.showComponentIDGroup = value;
}
/**
* @since 9.1
*/
public void setShowWorkingSetGroup(final boolean value) {
this.showWorkingSetGroup = value;
}
@Override
public void createControl(final Composite parent) {
super.createControl(parent);
final Composite dialogArea = (Composite) getControl();
// Custom Wizard settings
customCreateControl(dialogArea);
// Contents Group
if (this.showContentsGroup) {
createContentsGroup(dialogArea);
}
// ID Group
if (this.showComponentIDGroup) {
this.idGroup = new IDGroup(dialogArea, SWT.None, this.resourceType, this);
this.idGroup.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.FILL_HORIZONTAL));
}
// Working Set group
if (this.showWorkingSetGroup) {
String[] wsTypes = new String[1];
wsTypes[0] = "org.eclipse.ui.resourceWorkingSetPage";
createWorkingSetGroup(dialogArea, new StructuredSelection(), wsTypes);
}
setPageComplete(validatePage());
// Show description on opening
setErrorMessage(null);
setMessage((String) null);
}
/**
* @since 9.0
*/
protected void createContentsGroup(Composite parent) {
this.contentsGroup = new ContentsGroup(parent, SWT.None, this.resourceType, this.resourceExtension, this);
this.contentsGroup.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.FILL_HORIZONTAL));
}
public void customCreateControl(final Composite composite) {
return;
}
/**
* Returns the possibly null contents group
* @deprecated use {@link #isCreateNewResource()} instead if that is needed
* @return
*/
@Deprecated
public ContentsGroup getContentsGroup() {
return this.contentsGroup;
}
/**
*
* @return If a new resource is being created.
* @since 9.1
*/
public boolean isCreateNewResource() {
if (this.showContentsGroup) {
return this.contentsGroup.isCreateNewResource();
} else {
return true;
}
}
/**
* @since 9.1
*/
public IPath getExistingResourcePath() {
if (this.showContentsGroup) {
return this.contentsGroup.getExistingResourcePath();
} else {
return null;
}
}
/**
* @since 9.1
*/
public String getID() {
String id = null;
if (this.showComponentIDGroup) {
id = this.idGroup.getId();
} else {
id = DceUuidUtil.createDceUUID();
}
return id;
}
@Override
protected boolean validatePage() {
if (!super.validatePage()) {
return false;
}
IStatus status = Status.OK_STATUS;
if (this.contentsGroup != null) {
status = this.contentsGroup.validateGroup();
if (!status.isOK()) {
setMessage(status);
if (this.getWizard() instanceof IImportWizard) {
((IImportWizard) this.getWizard()).importSelected("");
}
return false;
}
}
if (this.getWizard() instanceof IImportWizard) {
String path = "";
if (this.contentsGroup != null && !this.contentsGroup.isCreateNewResource()) {
path = this.contentsGroup.getExistingResourcePath().toOSString();
}
((IImportWizard) this.getWizard()).importSelected(path);
}
if (this.showComponentIDGroup) {
status = this.idGroup.validateGroup();
if (!status.isOK()) {
setMessage(status);
return false;
}
}
ProjectNameValidator nameValidator = new ProjectNameValidator();
status = nameValidator.validate(getProjectName());
if (!status.isOK()) {
setMessage(status);
return false;
}
// Final check - if the target location exists and contains files, warn the user but allow it
try {
IFileStore fileStore = EFS.getStore(getLocationURI());
IFileInfo info = fileStore.fetchInfo();
if (info.exists() && info.isDirectory() && fileStore.childNames(EFS.NONE, new NullProgressMonitor()).length > 0) {
setMessage("The specified location already exists and contains files. They will become part of this project.", DialogPage.WARNING);
}
} catch (CoreException e) {
setMessage("Unable to check location: " + e.toString());
return false;
}
return true;
}
protected void setMessage(final IStatus status) {
int severity = 0;
switch (status.getSeverity()) {
case IStatus.WARNING:
severity = IMessageProvider.WARNING;
break;
case IStatus.ERROR:
severity = IMessageProvider.ERROR;
break;
case IStatus.INFO:
severity = IMessageProvider.INFORMATION;
break;
default:
break;
}
setMessage(status.getMessage(), severity);
}
@Override
public void validate() {
final boolean ok = validatePage();
if (ok) {
setMessage((String) null);
}
setPageComplete(ok);
}
}