blob: 3cae0075d51da65a3917153340f1a9286e68e74c [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.sling.ide.eclipse.sightly.ui.internal;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.wizard.Wizard;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.ui.INewWizard;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.dialogs.WizardNewFileCreationPage;
import org.eclipse.ui.ide.IDE;
import org.eclipse.ui.statushandlers.StatusManager;
public abstract class AbstractNewSightlyFileWizard extends Wizard implements INewWizard {
private IWorkbench workbench;
protected WizardNewFileCreationPage fileCreationPage;
private String pageTitle;
private String wizardDescription;
public AbstractNewSightlyFileWizard(String pageTitle, String wizardDescription) {
this.pageTitle = pageTitle;
this.wizardDescription = wizardDescription;
}
public void init(IWorkbench workbench, IStructuredSelection selection) {
this.workbench = workbench;
fileCreationPage = new WizardNewFileCreationPage(pageTitle, selection) {
@Override
protected InputStream getInitialContents() {
String contents = AbstractNewSightlyFileWizard.this.getInitialContents();
return new ByteArrayInputStream(contents.getBytes());
}
@Override
protected boolean validatePage() {
return super.validatePage() && validateFileToBeCreated() ;
}
};
if ( getInitialFileName() != null ) {
fileCreationPage.setFileName(getInitialFileName());
}
fileCreationPage.setTitle("Sightly");
fileCreationPage.setDescription(wizardDescription);
fileCreationPage.setImageDescriptor(SharedImages.SIGHTLY_WIZARD_BANNER);
setWindowTitle(pageTitle);
addPage(fileCreationPage);
}
@Override
public boolean performFinish() {
if (!fileCreationPage.isPageComplete()) {
return false;
}
IFile file = fileCreationPage.createNewFile();
// copied from BasicNewFileResourceWizard
// Open editor on new file.
IWorkbenchWindow dw = workbench.getActiveWorkbenchWindow();
try {
if (dw != null) {
IWorkbenchPage page = dw.getActivePage();
if (page != null) {
IDE.openEditor(page, file, true);
}
}
} catch (PartInitException e) {
StatusManager.getManager().handle(
new Status(IStatus.WARNING, Constants.PLUGIN_ID, "Failed opening " + file + " in an editor", e),
StatusManager.SHOW | StatusManager.LOG);
}
return true;
}
protected abstract String getInitialContents();
/**
* Allows sub-classes to hook in the validation process for the file
*
* <p>Only invoked if the superclass validation is successful. If this method
* returns false it <b>must</b> invoke {@link WizardPage#setErrorMessage(String)}
* on the <tt>fileCreationPage</tt> field to notify the user of what must be changed</tt>.
*
* @return true if the file to be created is valid, false otherwise
*/
protected boolean validateFileToBeCreated() {
return true;
}
protected String getInitialFileName() {
return null;
}
}