Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Fullbright2013-04-08 13:41:31 +0000
committerPaul Fullbright2013-04-08 13:41:55 +0000
commit6b55ffc5e9731a03886a7e5713304f6f8ee2c433 (patch)
treee4a5f7c1729f9d166aa369d40d1a99dc7b13493c /common/plugins
parent64dfea83348929564979d8b8d580fd8263866f33 (diff)
downloadwebtools.dali-6b55ffc5e9731a03886a7e5713304f6f8ee2c433.tar.gz
webtools.dali-6b55ffc5e9731a03886a7e5713304f6f8ee2c433.tar.xz
webtools.dali-6b55ffc5e9731a03886a7e5713304f6f8ee2c433.zip
oxm xml file wizard
Diffstat (limited to 'common/plugins')
-rw-r--r--common/plugins/org.eclipse.jpt.common.core/META-INF/MANIFEST.MF3
-rw-r--r--common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/operations/AbstractJptFileCreationDataModelProvider.java7
-rw-r--r--common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/operations/AbstractJptFileCreationOperation.java112
-rw-r--r--common/plugins/org.eclipse.jpt.common.core/src/org/eclipse/jpt/common/core/internal/utility/JavaProjectTools.java24
-rw-r--r--common/plugins/org.eclipse.jpt.common.ui/META-INF/MANIFEST.MF1
-rw-r--r--common/plugins/org.eclipse.jpt.common.ui/src/org/eclipse/jpt/common/ui/internal/wizards/NewJptFileWizardPage.java80
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;
+ }
+ }
+}

Back to the top