You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ro...@apache.org on 2017/05/09 10:46:54 UTC
svn commit: r1794532 - in /sling/trunk/tooling/ide: eclipse-core/
eclipse-core/src/org/apache/sling/ide/eclipse/core/
eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/
eclipse-m2e-test/src/org/apache/sling/ide/eclipse/m2e/ eclipse-m2e-ui/ ec...
Author: rombert
Date: Tue May 9 10:46:53 2017
New Revision: 1794532
URL: http://svn.apache.org/viewvc?rev=1794532&view=rev
Log:
SLING-6830 - Provide a custom navigator for provisioning model feature files
The custom contribution is only enabled for Maven projects. There are no UI
additions for this feature (yet) as I think this will only be used with Maven.
Added:
sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/BaseFacetInstallDelegate.java
- copied, changed from r1794531, sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/SlingBundleFacetInstallDelegate.java
sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/EmptyDelegate.java
- copied, changed from r1794531, sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/SlingBundleFacetUninstallDelegate.java
sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/SlingLaunchpadFacetInstallDelegate.java
- copied, changed from r1794531, sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/FileVaultMetaInfRootFolder.java
sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/SlingLaunchpadFacetUninstallDelegate.java
- copied, changed from r1794531, sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/FileVaultMetaInfRootFolder.java
sling/trunk/tooling/ide/eclipse-m2e-test/src/org/apache/sling/ide/eclipse/m2e/MavenProjectUtilsTest.java
sling/trunk/tooling/ide/eclipse-m2e-test/src/org/apache/sling/ide/eclipse/m2e/slingstart-simple-pom.xml
sling/trunk/tooling/ide/eclipse-m2e-ui/src/org/apache/sling/ide/eclipse/m2e/internal/SlingstartProjectConfigurator.java
sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/BaseRootFolderContentProvider.java
sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/ProvisioningModelContentProvider.java
- copied, changed from r1794531, sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/SlingContentFacetUninstallDelegate.java
sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/ProvisioningModelLabelProvider.java
- copied, changed from r1794531, sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/FileVaultMetaInfLabelProvider.java
sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/ProvisioningModelRootFolder.java
- copied, changed from r1794531, sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/FileVaultMetaInfRootFolder.java
sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/RootFolder.java
- copied, changed from r1794531, sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/FileVaultMetaInfRootFolder.java
Modified:
sling/trunk/tooling/ide/eclipse-core/plugin.xml
sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/ConfigurationHelper.java
sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/ProjectUtil.java
sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/ProjectHelper.java
sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/SlingBundleFacetInstallDelegate.java
sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/SlingBundleFacetUninstallDelegate.java
sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/SlingContentFacetInstallDelegate.java
sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/SlingContentFacetUninstallDelegate.java
sling/trunk/tooling/ide/eclipse-m2e-ui/lifecycle-mapping-metadata.xml
sling/trunk/tooling/ide/eclipse-m2e-ui/plugin.xml
sling/trunk/tooling/ide/eclipse-m2e-ui/src/org/apache/sling/ide/eclipse/m2e/internal/MavenProjectUtils.java
sling/trunk/tooling/ide/eclipse-test/src/org/apache/sling/ide/test/impl/ProjectUtilTest.java
sling/trunk/tooling/ide/eclipse-ui/plugin.xml
sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/FileVaultMetaInfContentProvider.java
sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/FileVaultMetaInfLabelProvider.java
sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/FileVaultMetaInfRootFolder.java
Modified: sling/trunk/tooling/ide/eclipse-core/plugin.xml
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/ide/eclipse-core/plugin.xml?rev=1794532&r1=1794531&r2=1794532&view=diff
==============================================================================
--- sling/trunk/tooling/ide/eclipse-core/plugin.xml (original)
+++ sling/trunk/tooling/ide/eclipse-core/plugin.xml Tue May 9 10:46:53 2017
@@ -87,6 +87,21 @@
<action facet="sling.bundle" version="1.0" type="UNINSTALL">
<delegate class="org.apache.sling.ide.eclipse.core.internal.SlingBundleFacetUninstallDelegate"/>
</action>
+
+ <project-facet id="sling.launchpad">
+ <label>Launchpad module</label>
+ <description>Packaging module which contains a provisioning model which can be assembled into a launchpad.</description>
+ </project-facet>
+
+ <project-facet-version facet="sling.launchpad" version="1.0"/>
+
+ <action facet="sling.launchpad" version="1.0" type="INSTALL">
+ <delegate class="org.apache.sling.ide.eclipse.core.internal.SlingLaunchpadFacetInstallDelegate"/>
+ </action>
+
+ <action facet="sling.launchpad" version="1.0" type="UNINSTALL">
+ <delegate class="org.apache.sling.ide.eclipse.core.internal.SlingLaunchpadFacetUninstallDelegate"/>
+ </action>
</extension>
<!-- Define the Sling launchpad runtime type -->
Modified: sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/ConfigurationHelper.java
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/ConfigurationHelper.java?rev=1794532&r1=1794531&r2=1794532&view=diff
==============================================================================
--- sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/ConfigurationHelper.java (original)
+++ sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/ConfigurationHelper.java Tue May 9 10:46:53 2017
@@ -55,4 +55,17 @@ public class ConfigurationHelper {
aBundleProject.refreshLocal(IResource.DEPTH_INFINITE, new NullProgressMonitor());
}
+ public static void convertToLaunchpadProject(IProject project, IPath modelsDirectoryPath) throws CoreException {
+
+ IProjectFacet facet = ProjectFacetsManager.getProjectFacet("sling.launchpad");
+ IFacetedProject fp2 = ProjectFacetsManager.create(project, true, null);
+ fp2.installProjectFacet(facet.getLatestVersion(), null, null);
+ project.refreshLocal(IResource.DEPTH_INFINITE, new NullProgressMonitor());
+
+ if ( modelsDirectoryPath != null ) {
+ ProjectUtil.setProvisioningModelPath(project, modelsDirectoryPath);
+ }
+
+
+ }
}
Modified: sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/ProjectUtil.java
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/ProjectUtil.java?rev=1794532&r1=1794531&r2=1794532&view=diff
==============================================================================
--- sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/ProjectUtil.java (original)
+++ sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/ProjectUtil.java Tue May 9 10:46:53 2017
@@ -43,6 +43,8 @@ import org.osgi.service.prefs.BackingSto
public abstract class ProjectUtil {
private static final String PROPERTY_SYNC_ROOT = Activator.PLUGIN_ID + ".content_sync_root";
+ private static final String PROPERTY_PROVISIONING_MODEL_DIR = Activator.PLUGIN_ID + ".provisioning_model_dir";
+
private static final String PROPERTY_SYNC_ROOT_DEFAULT_VALUE = "jcr_root";
private static final QualifiedName PROPERTY_SYNC_ROOT_OLD = new QualifiedName(Activator.PLUGIN_ID, "sync_root");
@@ -149,17 +151,49 @@ public abstract class ProjectUtil {
*/
public static void setSyncDirectoryPath(IProject project, IPath path) {
- IScopeContext projectScope = new ProjectScope(project);
+ setPathPersistentProperty(project, path, PROPERTY_SYNC_ROOT);
+ }
+
+ private static void setPathPersistentProperty(IProject project, IPath path, String propertyName) {
+
+ IScopeContext projectScope = new ProjectScope(project);
IEclipsePreferences projectNode = projectScope.getNode(Activator.PLUGIN_ID);
if ( projectNode != null ) {
- projectNode.put(PROPERTY_SYNC_ROOT, path.toPortableString());
+ projectNode.put(propertyName, path.toPortableString());
try {
projectNode.flush();
} catch (BackingStoreException e) {
Activator.getDefault().getPluginLogger().error(e.getMessage(), e);
}
}
- }
+ }
+
+ public static IPath getProvisioningModelPath(IProject project) {
+
+ if ( project == null || !project.isOpen() || !ProjectHelper.isLaunchpadProject(project)) {
+ return null;
+ }
+
+ IScopeContext projectScope = new ProjectScope(project);
+ IEclipsePreferences projectNode = projectScope.getNode(Activator.PLUGIN_ID);
+ if ( projectNode == null ) {
+ return null;
+ }
+
+ String propertyValue = projectNode.get(PROPERTY_PROVISIONING_MODEL_DIR, null);
+ if ( propertyValue == null ) {
+ return null;
+ }
+
+ return Path.fromPortableString(propertyValue);
+ }
+
+ public static void setProvisioningModelPath(IProject project, IPath modelPath) {
+
+ setPathPersistentProperty(project, modelPath, PROPERTY_PROVISIONING_MODEL_DIR);
+
+ }
+
/**
* Loads a filter for the specified project
Copied: sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/BaseFacetInstallDelegate.java (from r1794531, sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/SlingBundleFacetInstallDelegate.java)
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/BaseFacetInstallDelegate.java?p2=sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/BaseFacetInstallDelegate.java&p1=sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/SlingBundleFacetInstallDelegate.java&r1=1794531&r2=1794532&rev=1794532&view=diff
==============================================================================
--- sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/SlingBundleFacetInstallDelegate.java (original)
+++ sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/BaseFacetInstallDelegate.java Tue May 9 10:46:53 2017
@@ -23,17 +23,31 @@ import org.eclipse.core.runtime.IProgres
import org.eclipse.wst.common.project.facet.core.IDelegate;
import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;
-public class SlingBundleFacetInstallDelegate implements IDelegate {
-
- @Override
- public void execute(IProject project, IProjectFacetVersion facetVersion, Object config, IProgressMonitor monitor)
- throws CoreException {
-
+/**
+ * Support class for facet installations
+ *
+ * <p>By default, the <tt>enableValidationBuilderAndCommand</tt> is set to true</p>
+ *
+ */
+class BaseFacetInstallDelegate implements IDelegate {
+
+ private boolean enableValidationBuilderAndCommand = true;
+
+ public void setEnableValidationBuilderAndCommand(boolean enableValidationBuilderAndCommand) {
+ this.enableValidationBuilderAndCommand = enableValidationBuilderAndCommand;
+ }
+
+ @Override
+ public void execute(IProject project, IProjectFacetVersion facetVersion, Object config, IProgressMonitor monitor)
+ throws CoreException {
+
Logger pluginLogger = Activator.getDefault().getPluginLogger();
pluginLogger.trace("Installing facet {0} on project {1}", facetVersion, project);
- new ProjectDescriptionManager(pluginLogger).enableValidationBuilderAndCommand(project, monitor);
- }
+ if ( enableValidationBuilderAndCommand ) {
+ new ProjectDescriptionManager(pluginLogger).enableValidationBuilderAndCommand(project, monitor);
+ }
+ }
}
Copied: sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/EmptyDelegate.java (from r1794531, sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/SlingBundleFacetUninstallDelegate.java)
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/EmptyDelegate.java?p2=sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/EmptyDelegate.java&p1=sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/SlingBundleFacetUninstallDelegate.java&r1=1794531&r2=1794532&rev=1794532&view=diff
==============================================================================
--- sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/SlingBundleFacetUninstallDelegate.java (original)
+++ sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/EmptyDelegate.java Tue May 9 10:46:53 2017
@@ -22,12 +22,11 @@ import org.eclipse.core.runtime.IProgres
import org.eclipse.wst.common.project.facet.core.IDelegate;
import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;
-public class SlingBundleFacetUninstallDelegate implements IDelegate {
+class EmptyDelegate implements IDelegate {
- @Override
- public void execute(IProject arg0, IProjectFacetVersion arg1, Object arg2, IProgressMonitor arg3)
- throws CoreException {
-
- }
+ @Override
+ public void execute(IProject arg0, IProjectFacetVersion arg1, Object arg2, IProgressMonitor arg3)
+ throws CoreException {
+ }
}
Modified: sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/ProjectHelper.java
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/ProjectHelper.java?rev=1794532&r1=1794531&r2=1794532&view=diff
==============================================================================
--- sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/ProjectHelper.java (original)
+++ sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/ProjectHelper.java Tue May 9 10:46:53 2017
@@ -140,6 +140,10 @@ public class ProjectHelper {
return FacetHelper.containsFacet(project, SlingContentModuleFactory.SLING_CONTENT_FACET_ID);
}
+ public static boolean isLaunchpadProject(IProject project) {
+ return FacetHelper.containsFacet(project, "sling.launchpad");
+ }
+
public static IJavaProject asJavaProject(IProject project) {
return JavaCore.create(project);
}
Modified: sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/SlingBundleFacetInstallDelegate.java
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/SlingBundleFacetInstallDelegate.java?rev=1794532&r1=1794531&r2=1794532&view=diff
==============================================================================
--- sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/SlingBundleFacetInstallDelegate.java (original)
+++ sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/SlingBundleFacetInstallDelegate.java Tue May 9 10:46:53 2017
@@ -16,24 +16,9 @@
*/
package org.apache.sling.ide.eclipse.core.internal;
-import org.apache.sling.ide.log.Logger;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.wst.common.project.facet.core.IDelegate;
-import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;
-
-public class SlingBundleFacetInstallDelegate implements IDelegate {
-
- @Override
- public void execute(IProject project, IProjectFacetVersion facetVersion, Object config, IProgressMonitor monitor)
- throws CoreException {
-
- Logger pluginLogger = Activator.getDefault().getPluginLogger();
-
- pluginLogger.trace("Installing facet {0} on project {1}", facetVersion, project);
-
- new ProjectDescriptionManager(pluginLogger).enableValidationBuilderAndCommand(project, monitor);
- }
+public class SlingBundleFacetInstallDelegate extends BaseFacetInstallDelegate {
+ public SlingBundleFacetInstallDelegate() {
+ setEnableValidationBuilderAndCommand(true);
+ }
}
Modified: sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/SlingBundleFacetUninstallDelegate.java
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/SlingBundleFacetUninstallDelegate.java?rev=1794532&r1=1794531&r2=1794532&view=diff
==============================================================================
--- sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/SlingBundleFacetUninstallDelegate.java (original)
+++ sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/SlingBundleFacetUninstallDelegate.java Tue May 9 10:46:53 2017
@@ -16,18 +16,6 @@
*/
package org.apache.sling.ide.eclipse.core.internal;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.wst.common.project.facet.core.IDelegate;
-import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;
-
-public class SlingBundleFacetUninstallDelegate implements IDelegate {
-
- @Override
- public void execute(IProject arg0, IProjectFacetVersion arg1, Object arg2, IProgressMonitor arg3)
- throws CoreException {
-
- }
+public class SlingBundleFacetUninstallDelegate extends EmptyDelegate {
}
Modified: sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/SlingContentFacetInstallDelegate.java
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/SlingContentFacetInstallDelegate.java?rev=1794532&r1=1794531&r2=1794532&view=diff
==============================================================================
--- sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/SlingContentFacetInstallDelegate.java (original)
+++ sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/SlingContentFacetInstallDelegate.java Tue May 9 10:46:53 2017
@@ -16,24 +16,6 @@
*/
package org.apache.sling.ide.eclipse.core.internal;
-import org.apache.sling.ide.log.Logger;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.wst.common.project.facet.core.IDelegate;
-import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;
-
-public class SlingContentFacetInstallDelegate implements IDelegate {
-
- @Override
- public void execute(IProject project, IProjectFacetVersion facetVersion, Object config, IProgressMonitor monitor)
- throws CoreException {
-
- Logger pluginLogger = Activator.getDefault().getPluginLogger();
-
- pluginLogger.trace("Installing facet {0} on project {1}", facetVersion, project);
-
- new ProjectDescriptionManager(pluginLogger).enableValidationBuilderAndCommand(project, monitor);
- }
+public class SlingContentFacetInstallDelegate extends BaseFacetInstallDelegate {
}
Modified: sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/SlingContentFacetUninstallDelegate.java
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/SlingContentFacetUninstallDelegate.java?rev=1794532&r1=1794531&r2=1794532&view=diff
==============================================================================
--- sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/SlingContentFacetUninstallDelegate.java (original)
+++ sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/SlingContentFacetUninstallDelegate.java Tue May 9 10:46:53 2017
@@ -16,17 +16,6 @@
*/
package org.apache.sling.ide.eclipse.core.internal;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.wst.common.project.facet.core.IDelegate;
-import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;
-
-public class SlingContentFacetUninstallDelegate implements IDelegate {
-
- @Override
- public void execute(IProject arg0, IProjectFacetVersion arg1, Object arg2, IProgressMonitor arg3)
- throws CoreException {
- }
+public class SlingContentFacetUninstallDelegate extends EmptyDelegate {
}
Copied: sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/SlingLaunchpadFacetInstallDelegate.java (from r1794531, sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/FileVaultMetaInfRootFolder.java)
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/SlingLaunchpadFacetInstallDelegate.java?p2=sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/SlingLaunchpadFacetInstallDelegate.java&p1=sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/FileVaultMetaInfRootFolder.java&r1=1794531&r2=1794532&rev=1794532&view=diff
==============================================================================
--- sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/FileVaultMetaInfRootFolder.java (original)
+++ sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/SlingLaunchpadFacetInstallDelegate.java Tue May 9 10:46:53 2017
@@ -14,24 +14,11 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.sling.ide.eclipse.ui.nav.model;
+package org.apache.sling.ide.eclipse.core.internal;
-import org.eclipse.core.resources.IFolder;
+public class SlingLaunchpadFacetInstallDelegate extends BaseFacetInstallDelegate {
-public class FileVaultMetaInfRootFolder {
-
- private final IFolder folder;
-
- public FileVaultMetaInfRootFolder(IFolder folder) {
- this.folder = folder;
- }
-
- @Override
- public String toString() {
- return folder.getProjectRelativePath().toString();
- }
-
- public IFolder getFolder() {
- return folder;
- }
+ public SlingLaunchpadFacetInstallDelegate() {
+ setEnableValidationBuilderAndCommand(false);
+ }
}
Copied: sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/SlingLaunchpadFacetUninstallDelegate.java (from r1794531, sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/FileVaultMetaInfRootFolder.java)
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/SlingLaunchpadFacetUninstallDelegate.java?p2=sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/SlingLaunchpadFacetUninstallDelegate.java&p1=sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/FileVaultMetaInfRootFolder.java&r1=1794531&r2=1794532&rev=1794532&view=diff
==============================================================================
--- sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/FileVaultMetaInfRootFolder.java (original)
+++ sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/SlingLaunchpadFacetUninstallDelegate.java Tue May 9 10:46:53 2017
@@ -14,24 +14,8 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.sling.ide.eclipse.ui.nav.model;
+package org.apache.sling.ide.eclipse.core.internal;
-import org.eclipse.core.resources.IFolder;
+public class SlingLaunchpadFacetUninstallDelegate extends EmptyDelegate {
-public class FileVaultMetaInfRootFolder {
-
- private final IFolder folder;
-
- public FileVaultMetaInfRootFolder(IFolder folder) {
- this.folder = folder;
- }
-
- @Override
- public String toString() {
- return folder.getProjectRelativePath().toString();
- }
-
- public IFolder getFolder() {
- return folder;
- }
}
Added: sling/trunk/tooling/ide/eclipse-m2e-test/src/org/apache/sling/ide/eclipse/m2e/MavenProjectUtilsTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/ide/eclipse-m2e-test/src/org/apache/sling/ide/eclipse/m2e/MavenProjectUtilsTest.java?rev=1794532&view=auto
==============================================================================
--- sling/trunk/tooling/ide/eclipse-m2e-test/src/org/apache/sling/ide/eclipse/m2e/MavenProjectUtilsTest.java (added)
+++ sling/trunk/tooling/ide/eclipse-m2e-test/src/org/apache/sling/ide/eclipse/m2e/MavenProjectUtilsTest.java Tue May 9 10:46:53 2017
@@ -0,0 +1,61 @@
+/*
+ * 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.m2e;
+
+import static org.hamcrest.CoreMatchers.equalTo;
+
+import java.util.concurrent.Callable;
+import java.util.concurrent.TimeUnit;
+
+import org.apache.sling.ide.eclipse.core.ProjectUtil;
+import org.apache.sling.ide.eclipse.m2e.impl.helpers.MavenProjectAdapter;
+import org.apache.sling.ide.test.impl.helpers.Poller;
+import org.apache.sling.ide.test.impl.helpers.TemporaryProject;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
+import org.junit.Rule;
+import org.junit.Test;
+
+public class MavenProjectUtilsTest {
+
+ @Rule
+ public TemporaryProject projectRule = new TemporaryProject();
+
+ @Test
+ public void inferDefaultProvisioningModelDirectories() throws Exception {
+
+ IPath modelsDir = Path.fromPortableString("src/main/provisioning");
+
+ // create project
+ final IProject launchpadProject = projectRule.getProject();
+
+ MavenProjectAdapter project = new MavenProjectAdapter(launchpadProject);
+ project.createOrUpdateFile(Path.fromPortableString("pom.xml"), getClass().getResourceAsStream("slingstart-simple-pom.xml"));
+ project.ensureDirectoryExists(modelsDir);
+ project.convertToMavenProject();
+
+ // conversion should enable the slingstart configurator and set the provisioning model path
+ new Poller(TimeUnit.MINUTES.toMillis(1)).pollUntil(new Callable<IPath>() {
+ @Override
+ public IPath call() throws Exception {
+ return ProjectUtil.getProvisioningModelPath(launchpadProject);
+ }
+ }, equalTo(modelsDir));
+
+ }
+}
Added: sling/trunk/tooling/ide/eclipse-m2e-test/src/org/apache/sling/ide/eclipse/m2e/slingstart-simple-pom.xml
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/ide/eclipse-m2e-test/src/org/apache/sling/ide/eclipse/m2e/slingstart-simple-pom.xml?rev=1794532&view=auto
==============================================================================
--- sling/trunk/tooling/ide/eclipse-m2e-test/src/org/apache/sling/ide/eclipse/m2e/slingstart-simple-pom.xml (added)
+++ sling/trunk/tooling/ide/eclipse-m2e-test/src/org/apache/sling/ide/eclipse/m2e/slingstart-simple-pom.xml Tue May 9 10:46:53 2017
@@ -0,0 +1,29 @@
+<!--
+ 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.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.sling.ide.testing</groupId>
+ <artifactId>simple-launchpad</artifactId>
+ <version>1.0.0-SNAPSHOT</version>
+ <packaging>slingstart</packaging>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.sling</groupId>
+ <artifactId>slingstart-maven-plugin</artifactId>
+ <version>1.7.0</version>
+ <extensions>true</extensions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
\ No newline at end of file
Modified: sling/trunk/tooling/ide/eclipse-m2e-ui/lifecycle-mapping-metadata.xml
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/ide/eclipse-m2e-ui/lifecycle-mapping-metadata.xml?rev=1794532&r1=1794531&r2=1794532&view=diff
==============================================================================
--- sling/trunk/tooling/ide/eclipse-m2e-ui/lifecycle-mapping-metadata.xml (original)
+++ sling/trunk/tooling/ide/eclipse-m2e-ui/lifecycle-mapping-metadata.xml Tue May 9 10:46:53 2017
@@ -88,5 +88,20 @@
</ignore>
</action>
</pluginExecution>
+ <pluginExecution>
+ <pluginExecutionFilter>
+ <groupId>org.apache.sling</groupId>
+ <artifactId>slingstart-maven-plugin</artifactId>
+ <versionRange>[1.0.0,)</versionRange>
+ <goals>
+ <goal>package</goal>
+ </goals>
+ </pluginExecutionFilter>
+ <action>
+ <configurator>
+ <id>org.apache.sling.ide.eclipse.m2e.slingstartConfigurator</id>
+ </configurator>
+ </action>
+ </pluginExecution>
</pluginExecutions>
</lifecycleMappingMetadata>
\ No newline at end of file
Modified: sling/trunk/tooling/ide/eclipse-m2e-ui/plugin.xml
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/ide/eclipse-m2e-ui/plugin.xml?rev=1794532&r1=1794531&r2=1794532&view=diff
==============================================================================
--- sling/trunk/tooling/ide/eclipse-m2e-ui/plugin.xml (original)
+++ sling/trunk/tooling/ide/eclipse-m2e-ui/plugin.xml Tue May 9 10:46:53 2017
@@ -65,6 +65,10 @@
id="org.apache.sling.ide.eclipse.m2e.configurator"
class="org.apache.sling.ide.eclipse.m2e.internal.ContentPackageProjectConfigurator"
name="Sling Content Package Configurator" />
+ <configurator
+ id="org.apache.sling.ide.eclipse.m2e.slingstartConfigurator"
+ class="org.apache.sling.ide.eclipse.m2e.internal.SlingstartProjectConfigurator"
+ name="Sling Launchpad Configurator" />
</extension>
<!-- generic error marker (not bound to any quick fixes) for errors in any project configurators -->
Modified: sling/trunk/tooling/ide/eclipse-m2e-ui/src/org/apache/sling/ide/eclipse/m2e/internal/MavenProjectUtils.java
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/ide/eclipse-m2e-ui/src/org/apache/sling/ide/eclipse/m2e/internal/MavenProjectUtils.java?rev=1794532&r1=1794531&r2=1794532&view=diff
==============================================================================
--- sling/trunk/tooling/ide/eclipse-m2e-ui/src/org/apache/sling/ide/eclipse/m2e/internal/MavenProjectUtils.java (original)
+++ sling/trunk/tooling/ide/eclipse-m2e-ui/src/org/apache/sling/ide/eclipse/m2e/internal/MavenProjectUtils.java Tue May 9 10:46:53 2017
@@ -16,12 +16,18 @@
*/
package org.apache.sling.ide.eclipse.m2e.internal;
+import java.util.ArrayList;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.maven.model.Dependency;
+import org.apache.maven.model.Plugin;
import org.apache.maven.model.Resource;
import org.apache.maven.project.MavenProject;
+import org.codehaus.plexus.util.xml.Xpp3Dom;
public class MavenProjectUtils {
@@ -54,6 +60,36 @@ public class MavenProjectUtils {
return DEFAULT_SERVLET_API_VERSION;
}
+ /**
+ * Returns a set of candidate locations for the project's model directory
+ *
+ * <p>The heuristics are based on the logic from <tt>org.apache.sling.maven.slingstart.ModelPreprocessor</tt>.
+ * The returned values may or may not exist on the filesystem, it is up to the client to check that.
+ * The values are ordered from the most likely to the least likely, so clients should iterate
+ * the returned candidates in order and pick the first one that exists.</p>
+ *
+ * @param mavenProject the project, must not be null
+ * @return an ordered set of candidates, never empty
+ */
+ public static Set<String> getModelDirectoryCandidateLocations(MavenProject mavenProject) {
+
+ List<String> candidates = new ArrayList<>();
+ candidates.add("src/main/provisioning");
+ candidates.add("src/test/provisioning");
+
+ Plugin slingstartPlugin = mavenProject.getPlugin("org.apache.sling:slingstart-maven-plugin");
+ if ( slingstartPlugin != null && slingstartPlugin.getConfiguration() instanceof Xpp3Dom ) {
+ Xpp3Dom config = (Xpp3Dom) slingstartPlugin.getConfiguration();
+ Xpp3Dom modelDir = config.getChild("modelDirectory");
+ if ( modelDir != null ) {
+ candidates.add(0, modelDir.getValue());
+ }
+ }
+
+ return new LinkedHashSet<>(candidates);
+
+ }
+
private MavenProjectUtils() {
}
Added: sling/trunk/tooling/ide/eclipse-m2e-ui/src/org/apache/sling/ide/eclipse/m2e/internal/SlingstartProjectConfigurator.java
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/ide/eclipse-m2e-ui/src/org/apache/sling/ide/eclipse/m2e/internal/SlingstartProjectConfigurator.java?rev=1794532&view=auto
==============================================================================
--- sling/trunk/tooling/ide/eclipse-m2e-ui/src/org/apache/sling/ide/eclipse/m2e/internal/SlingstartProjectConfigurator.java (added)
+++ sling/trunk/tooling/ide/eclipse-m2e-ui/src/org/apache/sling/ide/eclipse/m2e/internal/SlingstartProjectConfigurator.java Tue May 9 10:46:53 2017
@@ -0,0 +1,52 @@
+/*
+ * 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.m2e.internal;
+
+import java.util.Set;
+
+import org.apache.sling.ide.eclipse.core.ConfigurationHelper;
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.m2e.core.project.configurator.ProjectConfigurationRequest;
+
+public class SlingstartProjectConfigurator extends AbstractProjectConfigurator {
+
+ @Override
+ public void configure(ProjectConfigurationRequest request, IProgressMonitor monitor) throws CoreException {
+
+ IProject project = request.getProject();
+ Set<String> candidates = MavenProjectUtils.getModelDirectoryCandidateLocations(request.getMavenProject());
+ IPath modelsPath = null;
+
+ for ( String candidate : candidates ) {
+ IPath candidatePath = Path.fromPortableString(candidate);
+ IFolder modelsFolder = project.getFolder(candidatePath);
+ if ( modelsFolder.exists() ) {
+ modelsPath = candidatePath;
+ break;
+ }
+ }
+
+ trace("Configuring project {0} with models path {1}", project.getName(), modelsPath);
+
+ ConfigurationHelper.convertToLaunchpadProject(request.getProject(), modelsPath);
+ }
+}
Modified: sling/trunk/tooling/ide/eclipse-test/src/org/apache/sling/ide/test/impl/ProjectUtilTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/ide/eclipse-test/src/org/apache/sling/ide/test/impl/ProjectUtilTest.java?rev=1794532&r1=1794531&r2=1794532&view=diff
==============================================================================
--- sling/trunk/tooling/ide/eclipse-test/src/org/apache/sling/ide/test/impl/ProjectUtilTest.java (original)
+++ sling/trunk/tooling/ide/eclipse-test/src/org/apache/sling/ide/test/impl/ProjectUtilTest.java Tue May 9 10:46:53 2017
@@ -58,7 +58,6 @@ public class ProjectUtilTest {
project.createVltFilterWithRoots();
// create content sync dir
project.ensureDirectoryExists(Path.fromPortableString("jcr_root"));
-
}
@Test
@@ -115,4 +114,32 @@ public class ProjectUtilTest {
assertThat("sync_root not obeyed after old store for property was deleted",
ProjectUtil.getSyncDirectory(contentProject).getProjectRelativePath(), equalTo(contentSyncPath));
}
+
+ @Test
+ public void noModelsDirectory() throws Exception {
+
+ assertThat("provisioning model path", ProjectUtil.getProvisioningModelPath(contentProject), nullValue());
+ }
+
+ @Test
+ public void existingModelsDirectoryWithoutLaunchpadNature() throws Exception {
+
+ IPath modelPath = Path.fromPortableString("src/main/provisioning");
+ project.ensureDirectoryExists(modelPath);
+ ProjectUtil.setProvisioningModelPath(contentProject, modelPath);
+
+ assertThat("provisioning model path", ProjectUtil.getProvisioningModelPath(contentProject), nullValue());
+ }
+
+ @Test
+ public void existingModelsDirectoryWithLaunchpadNature() throws Exception {
+
+ project.installFacet("sling.launchpad", "1.0");
+
+ IPath modelPath = Path.fromPortableString("src/main/provisioning");
+ project.ensureDirectoryExists(modelPath);
+ ProjectUtil.setProvisioningModelPath(contentProject, modelPath);
+
+ assertThat("provisioning model path", ProjectUtil.getProvisioningModelPath(contentProject), equalTo(modelPath));
+ }
}
Modified: sling/trunk/tooling/ide/eclipse-ui/plugin.xml
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/ide/eclipse-ui/plugin.xml?rev=1794532&r1=1794531&r2=1794532&view=diff
==============================================================================
--- sling/trunk/tooling/ide/eclipse-ui/plugin.xml (original)
+++ sling/trunk/tooling/ide/eclipse-ui/plugin.xml Tue May 9 10:46:53 2017
@@ -230,6 +230,7 @@
<contentExtension pattern="org.apache.sling.ide.eclipse-ui.javaEEFilter" />
<contentExtension pattern="org.apache.sling.ide.eclipse-ui.navigatorJcrContent" />
<contentExtension pattern="org.apache.sling.ide.eclipse-ui.navigatorVaultMetaInf" />
+ <contentExtension pattern="org.apache.sling.ide.eclipse-ui.navigatorProvisioningModel" />
<contentExtension pattern="org.apache.sling.ide.eclipse-ui.linkHelper"/>
</includes>
</viewerContentBinding>
@@ -350,7 +351,38 @@
</and>
</possibleChildren>
</navigatorContent>
- </extension>
+ <!-- content provider for provisioning model -->
+ <navigatorContent id="org.apache.sling.ide.eclipse-ui.navigatorProvisioningModel"
+ name="Provisioning Model"
+ appearsBefore="org.eclipse.jst.jee.ui.ejb"
+ contentProvider="org.apache.sling.ide.eclipse.ui.nav.ProvisioningModelContentProvider"
+ labelProvider="org.apache.sling.ide.eclipse.ui.nav.ProvisioningModelLabelProvider"
+ icon="icons/obj16/sling_misc.gif">
+ <triggerPoints>
+ <and>
+ <!-- only trigger for Sling Launchpad Projects -->
+ <adapt type="org.eclipse.core.resources.IResource">
+ <test property="org.eclipse.wst.common.project.facet.core.projectFacet" value="sling.launchpad"/>
+ </adapt>
+ <or>
+ <!-- and either IProject or ProvisioningModelRootFolder -->
+ <instanceof value="org.eclipse.core.resources.IProject" />
+ <instanceof value="org.apache.sling.ide.eclipse.ui.nav.model.ProvisioningModelRootFolder" />
+ </or>
+ </and>
+ </triggerPoints>
+ <possibleChildren>
+ <and>
+ <!-- only trigger for Sling Launchpad Projects -->
+ <adapt type="org.eclipse.core.resources.IResource">
+ <test property="org.eclipse.wst.common.project.facet.core.projectFacet" value="sling.launchpad"/>
+ </adapt>
+ <instanceof
+ value="org.eclipse.core.resources.IResource" />
+ </and>
+ </possibleChildren>
+ </navigatorContent>
+ </extension>
<extension
point="org.eclipse.core.runtime.adapters">
<factory
@@ -407,6 +439,9 @@
<test
property="org.eclipse.wst.common.project.facet.core.projectFacet"
value="sling.bundle"/>
+ <test
+ property="org.eclipse.wst.common.project.facet.core.projectFacet"
+ value="sling.launchpad"/>
</or>
</not>
</definition>
Added: sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/BaseRootFolderContentProvider.java
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/BaseRootFolderContentProvider.java?rev=1794532&view=auto
==============================================================================
--- sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/BaseRootFolderContentProvider.java (added)
+++ sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/BaseRootFolderContentProvider.java Tue May 9 10:46:53 2017
@@ -0,0 +1,96 @@
+/*
+ * 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.ui.nav;
+
+import org.apache.sling.ide.eclipse.ui.internal.Activator;
+import org.apache.sling.ide.eclipse.ui.nav.model.RootFolder;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.Viewer;
+
+public abstract class BaseRootFolderContentProvider<T extends RootFolder> implements ITreeContentProvider {
+
+ protected static final Object[] NO_CHILDREN = new Object[0];
+ private final Class<T> klazz;
+
+ public BaseRootFolderContentProvider(Class<T> klazz) {
+ this.klazz = klazz;
+ }
+
+ @Override
+ public boolean hasChildren(Object parentElement) {
+ // the getChildren is not expensive, therefore we leverage that here
+ return getChildren(parentElement) != null;
+ }
+
+ @Override
+ public Object[] getChildren(Object parentElement) {
+ if ( parentElement == null ) {
+ return NO_CHILDREN;
+ }
+
+ // expose the contribution directly below the project
+ if (parentElement instanceof IProject) {
+ IProject project = (IProject) parentElement;
+ RootFolder folder = findRootFolder(project);
+ if (folder != null) {
+ return new Object[] { folder };
+ }
+ } else if (klazz.isAssignableFrom(parentElement.getClass())) {
+ RootFolder rootFolder = (RootFolder) parentElement;
+ try {
+ return rootFolder.members();
+ } catch (CoreException e) {
+ Activator.getDefault().getPluginLogger().error(
+ "Could not list members of " + rootFolder, e);
+ }
+ }
+ return NO_CHILDREN;
+ }
+
+ @Override
+ public Object getParent(Object element) {
+ if (element instanceof IResource) {
+ IResource resource = (IResource) element;
+ RootFolder rootFolder = findRootFolder(resource.getProject());
+ if (rootFolder != null) {
+ return rootFolder.findMember(resource.getFullPath());
+ }
+ }
+ return null;
+ }
+
+
+ @Override
+ public void dispose() {
+
+ }
+
+ @Override
+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+
+ }
+
+ @Override
+ public Object[] getElements(Object inputElement) {
+ return null;
+ }
+
+ protected abstract T findRootFolder(IProject project);
+}
Modified: sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/FileVaultMetaInfContentProvider.java
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/FileVaultMetaInfContentProvider.java?rev=1794532&r1=1794531&r2=1794532&view=diff
==============================================================================
--- sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/FileVaultMetaInfContentProvider.java (original)
+++ sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/FileVaultMetaInfContentProvider.java Tue May 9 10:46:53 2017
@@ -18,22 +18,21 @@ package org.apache.sling.ide.eclipse.ui.
import org.apache.sling.ide.eclipse.core.ProjectUtil;
import org.apache.sling.ide.eclipse.core.internal.ProjectHelper;
-import org.apache.sling.ide.eclipse.ui.internal.Activator;
import org.apache.sling.ide.eclipse.ui.nav.model.FileVaultMetaInfRootFolder;
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.Path;
-import org.eclipse.jface.viewers.ITreeContentProvider;
-import org.eclipse.jface.viewers.Viewer;
-public class FileVaultMetaInfContentProvider implements ITreeContentProvider {
+public class FileVaultMetaInfContentProvider extends BaseRootFolderContentProvider<FileVaultMetaInfRootFolder> {
- private static final String FILEVAULT_METAINF_PATH = "META-INF/vault";
- private static final Object[] NO_CHILDREN = new Object[0];
+ private static final String FILEVAULT_METAINF_PATH = "META-INF/vault";
+
+ public FileVaultMetaInfContentProvider() {
+ super(FileVaultMetaInfRootFolder.class);
+ }
- private FileVaultMetaInfRootFolder getFileVaultMetaInfFolder(IProject project) {
+ @Override
+ protected FileVaultMetaInfRootFolder findRootFolder(IProject project) {
if (ProjectHelper.isContentProject(project)) {
IFolder syncDir = ProjectUtil.getSyncDirectory(project);
if (syncDir != null) {
@@ -43,62 +42,6 @@ public class FileVaultMetaInfContentProv
}
}
}
- return null;
- }
-
- @Override
- public void dispose() {
- }
-
- @Override
- public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+ return null;
}
-
- @Override
- public Object[] getElements(Object inputElement) {
- return null;
- }
-
- @Override
- public Object[] getChildren(Object parentElement) {
- final Object[] children;
- // expose the filevault meta-inf directly below the project
- if (parentElement instanceof IProject) {
- IProject project = (IProject) parentElement;
- FileVaultMetaInfRootFolder folder = getFileVaultMetaInfFolder(project);
- if (folder != null) {
- children = new Object[1];
- children[0] = folder;
- return children;
- }
- } else if (parentElement instanceof FileVaultMetaInfRootFolder) {
- FileVaultMetaInfRootFolder fileVaultMetaInfRootFolder = (FileVaultMetaInfRootFolder) parentElement;
- try {
- return fileVaultMetaInfRootFolder.getFolder().members();
- } catch (CoreException e) {
- Activator.getDefault().getPluginLogger().error(
- "Could not list members of folder " + fileVaultMetaInfRootFolder.getFolder().getName(), e);
- }
- }
- return NO_CHILDREN;
- }
-
- @Override
- public Object getParent(Object element) {
- if (element instanceof IResource) {
- IResource resource = (IResource) element;
- FileVaultMetaInfRootFolder fileVaultMetaInfoFolder = getFileVaultMetaInfFolder(resource.getProject());
- if (fileVaultMetaInfoFolder != null) {
- return fileVaultMetaInfoFolder.getFolder().findMember(resource.getFullPath()) != null;
- }
- }
- return null;
- }
-
- @Override
- public boolean hasChildren(Object parentElement) {
- // the getChildren is not expensive, therefore we leverage that here
- return getChildren(parentElement) != null;
- }
-
}
Modified: sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/FileVaultMetaInfLabelProvider.java
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/FileVaultMetaInfLabelProvider.java?rev=1794532&r1=1794531&r2=1794532&view=diff
==============================================================================
--- sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/FileVaultMetaInfLabelProvider.java (original)
+++ sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/FileVaultMetaInfLabelProvider.java Tue May 9 10:46:53 2017
@@ -68,7 +68,7 @@ public class FileVaultMetaInfLabelProvid
public String getText(Object element) {
if (element instanceof FileVaultMetaInfRootFolder) {
FileVaultMetaInfRootFolder fileVaultMetaInfRootFolder = (FileVaultMetaInfRootFolder) element;
- return fileVaultMetaInfRootFolder.getFolder().getProjectRelativePath().toPortableString();
+ return fileVaultMetaInfRootFolder.getProjectRelativePath().toPortableString();
}
return null;
}
Copied: sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/ProvisioningModelContentProvider.java (from r1794531, sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/SlingContentFacetUninstallDelegate.java)
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/ProvisioningModelContentProvider.java?p2=sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/ProvisioningModelContentProvider.java&p1=sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/SlingContentFacetUninstallDelegate.java&r1=1794531&r2=1794532&rev=1794532&view=diff
==============================================================================
--- sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/SlingContentFacetUninstallDelegate.java (original)
+++ sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/ProvisioningModelContentProvider.java Tue May 9 10:46:53 2017
@@ -14,19 +14,30 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.sling.ide.eclipse.core.internal;
+package org.apache.sling.ide.eclipse.ui.nav;
+import org.apache.sling.ide.eclipse.core.ProjectUtil;
+import org.apache.sling.ide.eclipse.ui.nav.model.ProvisioningModelRootFolder;
+import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.wst.common.project.facet.core.IDelegate;
-import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion;
+import org.eclipse.core.runtime.IPath;
-public class SlingContentFacetUninstallDelegate implements IDelegate {
+public class ProvisioningModelContentProvider extends BaseRootFolderContentProvider<ProvisioningModelRootFolder> {
+ public ProvisioningModelContentProvider() {
+ super(ProvisioningModelRootFolder.class);
+ }
+
@Override
- public void execute(IProject arg0, IProjectFacetVersion arg1, Object arg2, IProgressMonitor arg3)
- throws CoreException {
+ protected ProvisioningModelRootFolder findRootFolder(IProject project) {
+
+ IPath modelDirPath = ProjectUtil.getProvisioningModelPath(project);
+
+ IFolder folder = project.getFolder(modelDirPath);
+ if ( !folder.exists() ) {
+ return null;
+ }
+
+ return new ProvisioningModelRootFolder(folder);
}
-
}
Copied: sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/ProvisioningModelLabelProvider.java (from r1794531, sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/FileVaultMetaInfLabelProvider.java)
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/ProvisioningModelLabelProvider.java?p2=sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/ProvisioningModelLabelProvider.java&p1=sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/FileVaultMetaInfLabelProvider.java&r1=1794531&r2=1794532&rev=1794532&view=diff
==============================================================================
--- sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/FileVaultMetaInfLabelProvider.java (original)
+++ sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/ProvisioningModelLabelProvider.java Tue May 9 10:46:53 2017
@@ -16,7 +16,7 @@
*/
package org.apache.sling.ide.eclipse.ui.nav;
-import org.apache.sling.ide.eclipse.ui.nav.model.FileVaultMetaInfRootFolder;
+import org.apache.sling.ide.eclipse.ui.nav.model.ProvisioningModelRootFolder;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.swt.graphics.Image;
@@ -25,17 +25,12 @@ import org.eclipse.ui.PlatformUI;
/**
* Mostly copied from org.eclipse.ui.internal.ide.dialogs.FileFolderSelectionDialog.FileLabelProvider.
- *
*/
-public class FileVaultMetaInfLabelProvider implements ILabelProvider {
+public class ProvisioningModelLabelProvider implements ILabelProvider {
private static final Image IMG_FOLDER = PlatformUI.getWorkbench().getSharedImages()
.getImage(ISharedImages.IMG_OBJ_FOLDER);
-
- public FileVaultMetaInfLabelProvider() {
- super();
- }
-
+
@Override
public void addListener(ILabelProviderListener listener) {
@@ -58,17 +53,18 @@ public class FileVaultMetaInfLabelProvid
@Override
public Image getImage(Object element) {
- if (element instanceof FileVaultMetaInfRootFolder) {
- return IMG_FOLDER;
- }
- return null;
+ if ( element instanceof ProvisioningModelRootFolder ) {
+ return IMG_FOLDER;
+ }
+
+ return null;
}
@Override
public String getText(Object element) {
- if (element instanceof FileVaultMetaInfRootFolder) {
- FileVaultMetaInfRootFolder fileVaultMetaInfRootFolder = (FileVaultMetaInfRootFolder) element;
- return fileVaultMetaInfRootFolder.getFolder().getProjectRelativePath().toPortableString();
+ if (element instanceof ProvisioningModelRootFolder) {
+ ProvisioningModelRootFolder rootFolder = (ProvisioningModelRootFolder) element;
+ return rootFolder.getProjectRelativePath().toPortableString();
}
return null;
}
Modified: sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/FileVaultMetaInfRootFolder.java
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/FileVaultMetaInfRootFolder.java?rev=1794532&r1=1794531&r2=1794532&view=diff
==============================================================================
--- sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/FileVaultMetaInfRootFolder.java (original)
+++ sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/FileVaultMetaInfRootFolder.java Tue May 9 10:46:53 2017
@@ -17,8 +17,11 @@
package org.apache.sling.ide.eclipse.ui.nav.model;
import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
-public class FileVaultMetaInfRootFolder {
+public class FileVaultMetaInfRootFolder implements RootFolder{
private final IFolder folder;
@@ -27,11 +30,24 @@ public class FileVaultMetaInfRootFolder
}
@Override
+ public IResource[] members() throws CoreException {
+ return folder.members();
+ }
+
+ @Override
+ public IResource findMember(IPath path) {
+ return folder.findMember(path);
+ }
+
+ @Override
+ public IPath getProjectRelativePath() {
+ return folder.getProjectRelativePath();
+ }
+
+ @Override
public String toString() {
return folder.getProjectRelativePath().toString();
}
- public IFolder getFolder() {
- return folder;
- }
+
}
Copied: sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/ProvisioningModelRootFolder.java (from r1794531, sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/FileVaultMetaInfRootFolder.java)
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/ProvisioningModelRootFolder.java?p2=sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/ProvisioningModelRootFolder.java&p1=sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/FileVaultMetaInfRootFolder.java&r1=1794531&r2=1794532&rev=1794532&view=diff
==============================================================================
--- sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/FileVaultMetaInfRootFolder.java (original)
+++ sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/ProvisioningModelRootFolder.java Tue May 9 10:46:53 2017
@@ -17,12 +17,15 @@
package org.apache.sling.ide.eclipse.ui.nav.model;
import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
-public class FileVaultMetaInfRootFolder {
+public class ProvisioningModelRootFolder implements RootFolder {
private final IFolder folder;
- public FileVaultMetaInfRootFolder(IFolder folder) {
+ public ProvisioningModelRootFolder(IFolder folder) {
this.folder = folder;
}
@@ -30,8 +33,19 @@ public class FileVaultMetaInfRootFolder
public String toString() {
return folder.getProjectRelativePath().toString();
}
-
- public IFolder getFolder() {
- return folder;
- }
+
+ @Override
+ public IResource findMember(IPath path) {
+ return folder.findMember(path);
+ }
+
+ @Override
+ public IPath getProjectRelativePath() {
+ return folder.getProjectRelativePath();
+ }
+
+ @Override
+ public IResource[] members() throws CoreException {
+ return folder.members();
+ }
}
Copied: sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/RootFolder.java (from r1794531, sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/FileVaultMetaInfRootFolder.java)
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/RootFolder.java?p2=sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/RootFolder.java&p1=sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/FileVaultMetaInfRootFolder.java&r1=1794531&r2=1794532&rev=1794532&view=diff
==============================================================================
--- sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/FileVaultMetaInfRootFolder.java (original)
+++ sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/model/RootFolder.java Tue May 9 10:46:53 2017
@@ -16,22 +16,13 @@
*/
package org.apache.sling.ide.eclipse.ui.nav.model;
-import org.eclipse.core.resources.IFolder;
-
-public class FileVaultMetaInfRootFolder {
-
- private final IFolder folder;
-
- public FileVaultMetaInfRootFolder(IFolder folder) {
- this.folder = folder;
- }
-
- @Override
- public String toString() {
- return folder.getProjectRelativePath().toString();
- }
-
- public IFolder getFolder() {
- return folder;
- }
-}
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+
+public interface RootFolder {
+
+ public IResource[] members() throws CoreException;
+ public IResource findMember(IPath path);
+ public IPath getProjectRelativePath();
+}
\ No newline at end of file