diff options
author | Paul Fullbright | 2013-04-08 13:41:31 +0000 |
---|---|---|
committer | Paul Fullbright | 2013-04-08 13:41:55 +0000 |
commit | 6b55ffc5e9731a03886a7e5713304f6f8ee2c433 (patch) | |
tree | e4a5f7c1729f9d166aa369d40d1a99dc7b13493c /common/plugins | |
parent | 64dfea83348929564979d8b8d580fd8263866f33 (diff) | |
download | webtools.dali-6b55ffc5e9731a03886a7e5713304f6f8ee2c433.tar.gz webtools.dali-6b55ffc5e9731a03886a7e5713304f6f8ee2c433.tar.xz webtools.dali-6b55ffc5e9731a03886a7e5713304f6f8ee2c433.zip |
oxm xml file wizard
Diffstat (limited to 'common/plugins')
6 files changed, 226 insertions, 1 deletions
diff --git a/common/plugins/org.eclipse.jpt.common.core/META-INF/MANIFEST.MF b/common/plugins/org.eclipse.jpt.common.core/META-INF/MANIFEST.MF index 3fd92bfaaa..b05f21fd03 100644 --- a/common/plugins/org.eclipse.jpt.common.core/META-INF/MANIFEST.MF +++ b/common/plugins/org.eclipse.jpt.common.core/META-INF/MANIFEST.MF @@ -9,7 +9,8 @@ Bundle-ActivationPolicy: lazy;exclude:="org.eclipse.jpt.common.core.internal.bun Bundle-ClassPath: . Bundle-Localization: plugin Bundle-RequiredExecutionEnvironment: J2SE-1.5 -Require-Bundle: org.eclipse.core.expressions;bundle-version="[3.4.0,4.0.0)", +Require-Bundle: org.eclipse.core.commands;bundle-version="[3.6.100,4.0.0)", + org.eclipse.core.expressions;bundle-version="[3.4.0,4.0.0)", org.eclipse.core.filebuffers;bundle-version="[3.4.0,4.0.0)", org.eclipse.core.resources;bundle-version="[3.4.0,4.0.0)", org.eclipse.core.runtime;bundle-version="[3.4.0,4.0.0)", diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/operations/AbstractJptFileCreationDataModelProvider.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/operations/AbstractJptFileCreationDataModelProvider.java index 44ea96a541..006ce4be8d 100644 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/operations/AbstractJptFileCreationDataModelProvider.java +++ b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/operations/AbstractJptFileCreationDataModelProvider.java @@ -16,6 +16,8 @@ import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.Status; +import org.eclipse.jdt.core.IJavaProject; +import org.eclipse.jdt.core.JavaCore; import org.eclipse.jpt.common.core.JptCommonCoreMessages; import org.eclipse.jpt.common.core.internal.plugin.JptCommonCorePlugin; import org.eclipse.jpt.common.core.internal.utility.PathTools; @@ -112,6 +114,11 @@ public abstract class AbstractJptFileCreationDataModelProvider IContainer container = this.getContainer(); return (container == null) ? null : container.getProject(); } + + protected IJavaProject getJavaProject() { + IProject project = getProject(); + return (project == null) ? null : JavaCore.create(project); + } /** * Return a best guess source location for the for the specified project diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/operations/AbstractJptFileCreationOperation.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/operations/AbstractJptFileCreationOperation.java new file mode 100644 index 0000000000..938d44b048 --- /dev/null +++ b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/operations/AbstractJptFileCreationOperation.java @@ -0,0 +1,112 @@ +package org.eclipse.jpt.common.core.internal.operations; + +import static org.eclipse.jpt.common.core.internal.operations.JptFileCreationDataModelProperties.*; +import org.eclipse.core.commands.ExecutionException; +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.runtime.CoreException; +import org.eclipse.core.runtime.IAdaptable; +import org.eclipse.core.runtime.IPath; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Path; +import org.eclipse.core.runtime.SubMonitor; +import org.eclipse.core.runtime.jobs.ISchedulingRule; +import org.eclipse.jpt.common.core.internal.utility.PathTools; +import org.eclipse.jpt.common.core.resource.xml.JptXmlResourceProvider; +import org.eclipse.wst.common.frameworks.datamodel.AbstractDataModelOperation; +import org.eclipse.wst.common.frameworks.datamodel.IDataModel; + +public abstract class AbstractJptFileCreationOperation + extends AbstractDataModelOperation { + + /** + * Will be null until container is created or verified to exist + */ + protected IContainer container; + + /** + * Will be null until file is created or verified to exist + */ + protected IFile file; + + + protected AbstractJptFileCreationOperation(IDataModel dataModel) { + super(dataModel); + } + + + @Override + public IStatus execute(IProgressMonitor monitor, IAdaptable info) throws ExecutionException { + SubMonitor sm = SubMonitor.convert(monitor, 5); + // Create folder if it does not exist + createContainer(sm.newChild(1)); + // Create file + createFile(sm.newChild(4)); + return OK_STATUS; + } + + protected IContainer getContainer() throws ExecutionException { + IPath containerPath = (IPath) getDataModel().getProperty(CONTAINER_PATH); + IContainer container = PathTools.getContainer(containerPath); + if (container == null) { + throw new ExecutionException("No container path specified"); //$NON-NLS-1$ + } + return container; + } + + protected IProject getProject() throws ExecutionException { + return getContainer().getProject(); + } + + /** + * This method will create the container as specified in the data model if it does not exist. + */ + protected void createContainer(IProgressMonitor monitor) throws ExecutionException { + IContainer container = getContainer(); + if (! container.exists()) { + if (container.getType() == IResource.PROJECT) { + throw new ExecutionException("Project does not exist"); //$NON-NLS-1$ + } + else if (container.getType() == IResource.FOLDER) { + try { + ((IFolder) container).create(true, true, monitor); + } + catch (CoreException e) { + throw new ExecutionException("Could not create folder", e); //$NON-NLS-1$ + } + } + else { + throw new ExecutionException("Container is not a project or folder"); //$NON-NLS-1$ + } + } + this.container = container; + } + + protected void createFile(IProgressMonitor monitor) throws ExecutionException { + String fileName = getDataModel().getStringProperty(FILE_NAME); + IFile newFile = this.container.getFile(new Path(fileName)); + JptXmlResourceProvider resourceProvider = getXmlResourceProvider(newFile); + try { + resourceProvider.createFileAndResource(getDataModel(), monitor); + } + catch (CoreException e) { + throw new ExecutionException("Could not create file", e); //$NON-NLS-1$ + } + this.file = newFile; + } + + @Override + public ISchedulingRule getSchedulingRule() { + try { + return this.getProject(); + } catch (ExecutionException ex) { + throw new RuntimeException(ex); + } + } + + protected abstract JptXmlResourceProvider getXmlResourceProvider(IFile file); +} diff --git a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/JavaProjectTools.java b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/JavaProjectTools.java index 313f9a05f3..83691eb756 100644 --- a/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/JavaProjectTools.java +++ b/common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/JavaProjectTools.java @@ -24,6 +24,8 @@ import org.eclipse.jpt.common.utility.internal.collection.CollectionTools; import org.eclipse.jpt.common.utility.internal.iterable.EmptyIterable; import org.eclipse.jpt.common.utility.internal.iterable.IterableTools; import org.eclipse.jpt.common.utility.internal.predicate.CriterionPredicate; +import org.eclipse.jpt.common.utility.predicate.Predicate; +import org.eclipse.jpt.common.utility.transformer.Transformer; /** * {@link IJavaProject} convenience methods. @@ -38,6 +40,28 @@ public final class JavaProjectTools { return null; } } + + /** + * Returns an iterable of *existing* {@link IPackageFragment}s for the given project that have + * the specified name + */ + public static Iterable<IPackageFragment> getPackageFragments( + final IJavaProject javaProject, final String packageName) { + + return IterableTools.filter( + IterableTools.transform( + getPackageFragmentRoots(javaProject), + new Transformer<IPackageFragmentRoot, IPackageFragment>() { + public IPackageFragment transform(IPackageFragmentRoot pfr) { + return pfr.getPackageFragment(packageName); + } + }), + new Predicate<IPackageFragment>() { + public boolean evaluate(IPackageFragment pf) { + return pf.exists(); + } + }); + } public static Iterable<IPackageFragmentRoot> getSourceFolders(IJavaProject javaProject) { return IterableTools.filter( diff --git a/common/plugins/org.eclipse.jpt.common.ui/META-INF/MANIFEST.MF b/common/plugins/org.eclipse.jpt.common.ui/META-INF/MANIFEST.MF index 1607c5623d..c7a5c4488f 100644 --- a/common/plugins/org.eclipse.jpt.common.ui/META-INF/MANIFEST.MF +++ b/common/plugins/org.eclipse.jpt.common.ui/META-INF/MANIFEST.MF @@ -22,6 +22,7 @@ Require-Bundle: org.eclipse.core.resources;bundle-version="[3.4.0,4.0.0)", org.eclipse.ui.ide;bundle-version="[3.4.0,4.0.0)", org.eclipse.ui.navigator;bundle-version="[3.3.100,4.0.0)", org.eclipse.ui.views.properties.tabbed;bundle-version="[3.4.0,4.0.0)", + org.eclipse.wst.common.frameworks;bundle-version="[1.2.200,2.0.0)", org.eclipse.wst.common.project.facet.ui;bundle-version="[1.3.0,2.0.0)" Import-Package: com.ibm.icu.text;version="4.0.1" Dali-Comment: *NO* EclipseLink friends! diff --git a/common/plugins/org.eclipse.jpt.common.ui/src/org/eclipse/jpt/common/ui/internal/wizards/NewJptFileWizardPage.java b/common/plugins/org.eclipse.jpt.common.ui/src/org/eclipse/jpt/common/ui/internal/wizards/NewJptFileWizardPage.java new file mode 100644 index 0000000000..8f9971e142 --- /dev/null +++ b/common/plugins/org.eclipse.jpt.common.ui/src/org/eclipse/jpt/common/ui/internal/wizards/NewJptFileWizardPage.java @@ -0,0 +1,80 @@ +/******************************************************************************* + * Copyright (c) 2010, 2011 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.common.ui.internal.wizards; + +import static org.eclipse.jpt.common.core.internal.operations.JptFileCreationDataModelProperties.*; +import org.eclipse.core.runtime.IPath; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.ui.dialogs.WizardNewFileCreationPage; +import org.eclipse.wst.common.frameworks.datamodel.IDataModel; + +public class NewJptFileWizardPage + extends WizardNewFileCreationPage { + + protected IDataModel dataModel; + + + public NewJptFileWizardPage( + String pageName, IStructuredSelection selection, IDataModel dataModel, + String title, String description) { + + super(pageName, selection); + init(dataModel); + setTitle(title); + setDescription(description); + } + + + protected void init(IDataModel dataModel) { + this.dataModel = dataModel; + IPath containerPath = (IPath) this.dataModel.getProperty(CONTAINER_PATH); + if (containerPath != null) { + setContainerFullPath(containerPath); + } + String fileName = (String) this.dataModel.getProperty(FILE_NAME); + if (fileName != null) { + setFileName(fileName); + } + } + + @Override + protected boolean validatePage() { + this.dataModel.setProperty(CONTAINER_PATH, getContainerFullPath()); + String fileName = getFileName(); + if( fileName != null && !fileName.toLowerCase().endsWith(".xml")) { //$NON-NLS-1$ + fileName = fileName + ".xml"; //$NON-NLS-1$ + } + this.dataModel.setProperty(FILE_NAME, fileName); + + boolean valid = super.validatePage(); + if (! valid) { + return valid; + } + + IStatus validationStatus = this.dataModel.validateProperty(CONTAINER_PATH); + if (validationStatus.isOK()) { + validationStatus = this.dataModel.validateProperty(FILE_NAME); + } + if (validationStatus.isOK()) { + setErrorMessage(null); + return true; + } + else if (validationStatus.getSeverity() == IStatus.WARNING) { + setErrorMessage(null); + setMessage(validationStatus.getMessage(), IStatus.WARNING); + return true; + } + else { + setErrorMessage(validationStatus.getMessage()); + return false; + } + } +} |