Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'jaxb/plugins/org.eclipse.jpt.jaxb.ui/src/org/eclipse/jpt/jaxb/ui/internal/wizards/classesgen/ClassesGeneratorWizard.java')
-rw-r--r--jaxb/plugins/org.eclipse.jpt.jaxb.ui/src/org/eclipse/jpt/jaxb/ui/internal/wizards/classesgen/ClassesGeneratorWizard.java357
1 files changed, 357 insertions, 0 deletions
diff --git a/jaxb/plugins/org.eclipse.jpt.jaxb.ui/src/org/eclipse/jpt/jaxb/ui/internal/wizards/classesgen/ClassesGeneratorWizard.java b/jaxb/plugins/org.eclipse.jpt.jaxb.ui/src/org/eclipse/jpt/jaxb/ui/internal/wizards/classesgen/ClassesGeneratorWizard.java
new file mode 100644
index 0000000000..d637531a64
--- /dev/null
+++ b/jaxb/plugins/org.eclipse.jpt.jaxb.ui/src/org/eclipse/jpt/jaxb/ui/internal/wizards/classesgen/ClassesGeneratorWizard.java
@@ -0,0 +1,357 @@
+/*******************************************************************************
+* Copyright (c) 2010 Oracle. 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:
+* Oracle - initial API and implementation
+*******************************************************************************/
+package org.eclipse.jpt.jaxb.ui.internal.wizards.classesgen;
+
+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.WorkspaceJob;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.jdt.core.IJavaElement;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.jpt.jaxb.core.internal.ClassesGeneratorExtensionOptions;
+import org.eclipse.jpt.jaxb.core.internal.ClassesGeneratorOptions;
+import org.eclipse.jpt.jaxb.core.internal.GenerateJaxbClassesJob;
+import org.eclipse.jpt.jaxb.ui.JptJaxbUiPlugin;
+import org.eclipse.jpt.jaxb.ui.internal.JptJaxbUiIcons;
+import org.eclipse.jpt.jaxb.ui.internal.JptJaxbUiMessages;
+import org.eclipse.jpt.jaxb.ui.internal.wizards.JavaProjectWizardPage;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchWizard;
+
+/**
+ * ClassesGeneratorWizard
+ */
+public class ClassesGeneratorWizard extends Wizard implements IWorkbenchWizard {
+
+ private IJavaProject javaProject;
+ private String schemaPathOrUri;
+ protected IStructuredSelection selection;
+
+ private String destinationFolder;
+ private String targetPackage;
+ private String catalog;
+ private boolean usesMoxy;
+ private String[] bindingsFileNames;
+ private ClassesGeneratorOptions generatorOptions;
+ private ClassesGeneratorExtensionOptions generatorExtensionOptions;
+
+ private JavaProjectWizardPage projectWizardPage;
+ private SchemaWizardPage schemaWizardPage;
+
+ private ClassesGeneratorWizardPage settingsPage;
+ private ClassesGeneratorOptionsWizardPage optionsPage;
+ private ClassesGeneratorExtensionOptionsWizardPage extensionOptionsPage;
+ private boolean performsGeneration;
+
+ // ********** constructor **********
+
+ public ClassesGeneratorWizard() {
+ super();
+ this.performsGeneration = true;
+ }
+
+ public ClassesGeneratorWizard(IJavaProject javaProject, String xsdSchemaPath) {
+ super();
+ this.javaProject = javaProject;
+ this.schemaPathOrUri = xsdSchemaPath;
+
+ this.performsGeneration = false;
+ }
+
+ // ********** IWorkbenchWizard implementation **********
+
+ public void init(IWorkbench workbench, IStructuredSelection selection) {
+ this.selection = selection;
+
+ this.setWindowTitle(JptJaxbUiMessages.ClassesGeneratorWizard_title);
+ this.setDefaultPageImageDescriptor(JptJaxbUiPlugin.getImageDescriptor(JptJaxbUiIcons.CLASSES_GEN_WIZ_BANNER));
+ this.setNeedsProgressMonitor(true);
+ }
+
+ // ********** IWizard implementation **********
+
+ @Override
+ public void addPages() {
+ super.addPages();
+
+ if(this.selection != null) {
+ this.javaProject = this.getJavaProjectFromSelection(this.selection);
+
+ this.projectWizardPage = new JavaProjectWizardPage(this.javaProject);
+ this.projectWizardPage.setTitle(JptJaxbUiMessages.ClassesGeneratorProjectWizardPage_title);
+ this.projectWizardPage.setDescription(JptJaxbUiMessages.ClassesGeneratorProjectWizardPage_desc);
+ this.addPage(this.projectWizardPage);
+
+ // SchemaWizardPage
+ IFile schemaSelected = SchemaWizardPage.getSourceSchemaFromSelection(this.selection);
+ if(schemaSelected == null) {
+ this.schemaWizardPage = new SchemaWizardPage(this.selection);
+ this.addPage(this.schemaWizardPage);
+ }
+ else {
+ this.schemaPathOrUri = this.makeRelativeToProjectPath(schemaSelected.getFullPath());
+ }
+ }
+ this.settingsPage = this.buildClassesGeneratorPage();
+ this.optionsPage = this.buildClassesGeneratorOptionsPage();
+ this.extensionOptionsPage = this.buildExtensionOptionsPage();
+
+ this.addPage(this.settingsPage);
+ this.addPage(this.optionsPage);
+ this.addPage(this.extensionOptionsPage);
+ }
+
+ @Override
+ public boolean performFinish() {
+
+ WizardPage currentPage = (WizardPage)getContainer().getCurrentPage();
+ if(currentPage != null) {
+ if( ! currentPage.isPageComplete()) {
+ return false;
+ }
+ this.retrieveGeneratorSettings();
+ this.retrieveGeneratorOptions();
+ this.retrieveGeneratorExtensionOptions();
+
+ IFolder folder = this.getJavaProject().getProject().getFolder(this.destinationFolder);
+ this.createFolderIfNotExist(folder);
+ }
+
+ if(this.performsGeneration) {
+ if(this.displayOverridingClassesWarning(this.generatorOptions)) {
+ this.generateJaxbClasses();
+ }
+ }
+
+ return true;
+ }
+
+ @Override
+ public boolean canFinish() {
+ return (this.settingsPage.isPageComplete() &&
+ this.optionsPage.isPageComplete() &&
+ this.extensionOptionsPage.isPageComplete());
+ }
+
+ // ********** intra-wizard methods **********
+
+ public IJavaProject getJavaProject() {
+ if(this.projectWizardPage != null) {
+ this.javaProject = this.projectWizardPage.getJavaProject();
+ }
+ return this.javaProject;
+ }
+
+ public String getSchemaPathOrUri() {
+ if(this.schemaWizardPage != null) {
+ IFile schemaFile = this.schemaWizardPage.getSourceSchema();
+ if(schemaFile != null) {
+ return this.makeRelativeToProjectPath(schemaFile.getFullPath());
+ }
+ else {
+ return this.schemaWizardPage.getSourceURI();
+ }
+ }
+ return this.schemaPathOrUri;
+ }
+
+ private String makeRelativeToProjectPath(IPath path) {
+ IPath relativePath = path.makeRelativeTo(this.getJavaProject().getProject().getFullPath());
+ return relativePath.toOSString();
+ }
+
+ // ********** public methods **********
+
+ public String getDestinationFolder() {
+ return this.destinationFolder;
+ }
+
+ public String getTargetPackage() {
+ return this.targetPackage;
+ }
+
+ public String getCatalog() {
+ return this.catalog;
+ }
+
+ public boolean usesMoxy() {
+ return this.usesMoxy;
+ }
+
+ public String[] getBindingsFileNames() {
+ return this.bindingsFileNames;
+ }
+
+ public ClassesGeneratorOptions getGeneratorOptions() {
+ return this.generatorOptions;
+ }
+
+ public ClassesGeneratorExtensionOptions getGeneratorExtensionOptions() {
+ return this.generatorExtensionOptions;
+ }
+
+ // ********** internal methods **********
+
+ public IJavaProject getJavaProjectFromSelection(IStructuredSelection selection) {
+ if(selection == null) {
+ return null;
+ }
+ Object firstElement = selection.getFirstElement();
+ if(firstElement instanceof IJavaProject) {
+ return (IJavaProject)firstElement;
+ }
+ else if(firstElement instanceof IResource) {
+ IProject project = ((IResource) firstElement).getProject();
+ return getJavaProjectFrom(project);
+ }
+ else if(firstElement instanceof IJavaElement) {
+ return ((IJavaElement)firstElement).getJavaProject();
+ }
+ return null;
+ }
+
+ public IJavaProject getJavaProjectFrom(IProject project) {
+ return (IJavaProject)((IJavaElement)((IAdaptable)project).getAdapter(IJavaElement.class));
+ }
+
+ private boolean displayOverridingClassesWarning(ClassesGeneratorOptions generatorOptions) {
+
+ if( ! this.isOverridingClasses(generatorOptions)) {
+ return true;
+ }
+ return MessageDialog.openQuestion(
+ this.getShell(),
+ JptJaxbUiMessages.ClassesGeneratorUi_generatingClassesWarningTitle,
+ JptJaxbUiMessages.ClassesGeneratorUi_generatingClassesWarningMessage);
+ }
+
+ private boolean isOverridingClasses(ClassesGeneratorOptions generatorOptions) {
+ if(generatorOptions == null) {
+ throw new NullPointerException();
+ }
+ if(generatorOptions.showsVersion() || generatorOptions.showsHelp()) {
+ return false;
+ }
+ return true;
+ }
+
+ private void generateJaxbClasses() {
+ try {
+ WorkspaceJob job = new GenerateJaxbClassesJob(
+ this.getJavaProject(),
+ this.getSchemaPathOrUri(),
+ this.destinationFolder,
+ this.targetPackage,
+ this.catalog,
+ this.usesMoxy,
+ this.bindingsFileNames,
+ this.generatorOptions,
+ this.generatorExtensionOptions);
+ job.schedule();
+ }
+ catch(RuntimeException re) {
+ JptJaxbUiPlugin.log(re);
+
+ String msg = re.getMessage();
+ String message = (msg == null) ? re.toString() : msg;
+ this.logError(message);
+ }
+ }
+
+ private void retrieveGeneratorSettings() {
+ this.destinationFolder = this.settingsPage.getTargetFolder();
+ this.targetPackage = this.settingsPage.getTargetPackage();
+ this.catalog = this.settingsPage.getCatalog();
+ this.usesMoxy = this.settingsPage.usesMoxy();
+ this.bindingsFileNames = this.settingsPage.getBindingsFileNames();
+ }
+
+ private void retrieveGeneratorOptions() {
+ this.generatorOptions = new ClassesGeneratorOptions();
+
+ this.generatorOptions.setProxy(this.optionsPage.getProxy());
+ this.generatorOptions.setProxyFile(this.optionsPage.getProxyFile());
+
+ this.generatorOptions.setUsesStrictValidation(this.optionsPage.usesStrictValidation());
+ this.generatorOptions.setMakesReadOnly(this.optionsPage.makesReadOnly());
+ this.generatorOptions.setSuppressesPackageInfoGen(this.optionsPage.suppressesPackageInfoGen());
+ this.generatorOptions.setSuppressesHeaderGen(this.optionsPage.suppressesHeaderGen());
+ this.generatorOptions.setTargetIs20(this.optionsPage.getTarget());
+ this.generatorOptions.setIsVerbose(this.optionsPage.isVerbose());
+ this.generatorOptions.setIsQuiet(this.optionsPage.isQuiet());
+
+ this.generatorOptions.setTreatsAsXmlSchema(this.optionsPage.treatsAsXmlSchema());
+ this.generatorOptions.setTreatsAsRelaxNg(this.optionsPage.treatsAsRelaxNg());
+ this.generatorOptions.setTreatsAsRelaxNgCompact(this.optionsPage.treatsAsRelaxNgCompact());
+ this.generatorOptions.setTreatsAsDtd(this.optionsPage.treatsAsDtd());
+ this.generatorOptions.setTreatsAsWsdl(this.optionsPage.treatsAsWsdl());
+ this.generatorOptions.setShowsVersion(this.optionsPage.showsVersion());
+ this.generatorOptions.setShowsHelp(this.optionsPage.showsHelp());
+ }
+
+ private void retrieveGeneratorExtensionOptions() {
+
+ this.generatorExtensionOptions = new ClassesGeneratorExtensionOptions();
+
+ this.generatorExtensionOptions.setAllowsExtensions(this.extensionOptionsPage.allowsExtensions());
+ this.generatorExtensionOptions.setClasspath(this.extensionOptionsPage.getClasspath());
+ this.generatorExtensionOptions.setAdditionalArgs(this.extensionOptionsPage.getAdditionalArgs());
+ }
+
+ private ClassesGeneratorWizardPage buildClassesGeneratorPage() {
+
+ return new ClassesGeneratorWizardPage();
+ }
+
+ private ClassesGeneratorOptionsWizardPage buildClassesGeneratorOptionsPage() {
+ return new ClassesGeneratorOptionsWizardPage();
+ }
+
+ private ClassesGeneratorExtensionOptionsWizardPage buildExtensionOptionsPage() {
+ return new ClassesGeneratorExtensionOptionsWizardPage();
+ }
+
+ private void createFolderIfNotExist(IFolder folder) {
+ if( folder.exists()) {
+ return;
+ }
+ try {
+ folder.create(true, true, null);
+ }
+ catch (CoreException e) {
+ JptJaxbUiPlugin.log(e);
+
+ this.logError(NLS.bind(
+ JptJaxbUiMessages.ClassesGeneratorWizard_couldNotCreate,
+ folder.getProjectRelativePath().toOSString()));
+ }
+ }
+
+ protected void logError(String message) {
+ this.displayError(message);
+ }
+
+ private void displayError(String message) {
+ MessageDialog.openError(
+ this.getShell(),
+ JptJaxbUiMessages.ClassesGeneratorWizard_errorDialogTitle,
+ message
+ );
+ }
+}

Back to the top