Author: rombert
Date: Thu Oct 2 20:36:56 2014
New Revision: 1629064
URL: http://svn.apache.org/r1629064
Log:
SLING-4000 - Add error marker on the project when content sync root does
not exist
Added:
sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/ProjectDescriptionManager.java
- copied, changed from r1629060,
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/internal/validation/ContentProjectValidator.java
Modified:
sling/trunk/tooling/ide/eclipse-core/plugin.xml
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/SlingContentFacetInstallDelegate.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=1629064&r1=1629063&r2=1629064&view=diff
==============================================================================
--- sling/trunk/tooling/ide/eclipse-core/plugin.xml (original)
+++ sling/trunk/tooling/ide/eclipse-core/plugin.xml Thu Oct 2 20:36:56 2014
@@ -213,4 +213,19 @@
</include>
</validator>
</extension>
+
+ <extension
+ id="contentProjectValidator"
+ point="org.eclipse.wst.validation.validatorV2"
+ name="Sling Content Project Validator">
+ <validator
class="org.apache.sling.ide.eclipse.internal.validation.ContentProjectValidator">
+ <include>
+ <rules>
+ <facet
+ id="sling.content">
+ </facet>
+ </rules>
+ </include>
+ </validator>
+ </extension>
</plugin>
Copied:
sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/ProjectDescriptionManager.java
(from r1629060,
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/ProjectDescriptionManager.java?p2=sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/ProjectDescriptionManager.java&p1=sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/SlingBundleFacetInstallDelegate.java&r1=1629060&r2=1629064&rev=1629064&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/ProjectDescriptionManager.java
Thu Oct 2 20:36:56 2014
@@ -22,31 +22,33 @@ import org.eclipse.core.resources.IProje
import org.eclipse.core.resources.IProjectDescription;
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 {
+/**
+ * The <tt>ProjectDescriptionManager</tt> exposes convenient APIs for managing
a project's description
+ *
+ */
+public class ProjectDescriptionManager {
private static final String VALIDATION_BUILDER_NAME =
"org.eclipse.wst.validation.validationbuilder";
- @Override
- public void execute(IProject project, IProjectFacetVersion facetVersion,
Object config, IProgressMonitor monitor)
- throws CoreException {
+ private final Logger logger;
- Logger pluginLogger = Activator.getDefault().getPluginLogger();
+ public ProjectDescriptionManager(Logger logger) {
+ this.logger = logger;
+ }
- pluginLogger.trace("Installing facet {0} on project {1}",
facetVersion, project);
+ public void enableValidationBuilderAndCommand(IProject project,
IProgressMonitor monitor) throws CoreException {
IProjectDescription description = project.getDescription();
ICommand[] builders = description.getBuildSpec();
for (ICommand builder : builders) {
if (builder.getBuilderName().equals(VALIDATION_BUILDER_NAME)) {
- pluginLogger.trace("Validation builder already installed,
skipping");
+ logger.trace("Validation builder already installed, skipping");
return;
}
}
- pluginLogger.trace("Installing validation builder");
+ logger.trace("Installing validation builder");
ICommand[] newBuilders = new ICommand[builders.length + 1];
System.arraycopy(builders, 0, newBuilders, 0, builders.length);
@@ -58,8 +60,6 @@ public class SlingBundleFacetInstallDele
project.setDescription(description, monitor);
- pluginLogger.trace("Installed validation builder");
-
+ logger.trace("Installed validation builder");
}
-
}
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=1629064&r1=1629063&r2=1629064&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
Thu Oct 2 20:36:56 2014
@@ -17,9 +17,7 @@
package org.apache.sling.ide.eclipse.core.internal;
import org.apache.sling.ide.log.Logger;
-import org.eclipse.core.resources.ICommand;
import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IProjectDescription;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.wst.common.project.facet.core.IDelegate;
@@ -27,8 +25,6 @@ import org.eclipse.wst.common.project.fa
public class SlingBundleFacetInstallDelegate implements IDelegate {
- private static final String VALIDATION_BUILDER_NAME =
"org.eclipse.wst.validation.validationbuilder";
-
@Override
public void execute(IProject project, IProjectFacetVersion facetVersion,
Object config, IProgressMonitor monitor)
throws CoreException {
@@ -37,29 +33,7 @@ public class SlingBundleFacetInstallDele
pluginLogger.trace("Installing facet {0} on project {1}",
facetVersion, project);
- IProjectDescription description = project.getDescription();
- ICommand[] builders = description.getBuildSpec();
- for (ICommand builder : builders) {
- if (builder.getBuilderName().equals(VALIDATION_BUILDER_NAME)) {
- pluginLogger.trace("Validation builder already installed,
skipping");
- return;
- }
- }
-
- pluginLogger.trace("Installing validation builder");
-
- ICommand[] newBuilders = new ICommand[builders.length + 1];
- System.arraycopy(builders, 0, newBuilders, 0, builders.length);
- ICommand validationCommand = description.newCommand();
- validationCommand.setBuilderName(VALIDATION_BUILDER_NAME);
- newBuilders[newBuilders.length - 1] = validationCommand;
-
- description.setBuildSpec(newBuilders);
-
- project.setDescription(description, monitor);
-
- pluginLogger.trace("Installed validation builder");
-
+ new
ProjectDescriptionManager(pluginLogger).enableValidationBuilderAndCommand(project,
monitor);
}
}
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=1629064&r1=1629063&r2=1629064&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
Thu Oct 2 20:36:56 2014
@@ -16,6 +16,7 @@
*/
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;
@@ -28,7 +29,11 @@ public class SlingContentFacetInstallDel
public void execute(IProject project, IProjectFacetVersion facetVersion,
Object config, IProgressMonitor monitor)
throws CoreException {
- // nothing for now
+ Logger pluginLogger = Activator.getDefault().getPluginLogger();
+
+ pluginLogger.trace("Installing facet {0} on project {1}",
facetVersion, project);
+
+ new
ProjectDescriptionManager(pluginLogger).enableValidationBuilderAndCommand(project,
monitor);
}
}
Added:
sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/internal/validation/ContentProjectValidator.java
URL:
http://svn.apache.org/viewvc/sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/internal/validation/ContentProjectValidator.java?rev=1629064&view=auto
==============================================================================
---
sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/internal/validation/ContentProjectValidator.java
(added)
+++
sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/internal/validation/ContentProjectValidator.java
Thu Oct 2 20:36:56 2014
@@ -0,0 +1,80 @@
+/*
+ * 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.internal.validation;
+
+import org.apache.sling.ide.eclipse.core.ProjectUtil;
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.wst.validation.AbstractValidator;
+import org.eclipse.wst.validation.ValidationEvent;
+import org.eclipse.wst.validation.ValidationResult;
+import org.eclipse.wst.validation.ValidationState;
+import org.eclipse.wst.validation.ValidatorMessage;
+
+/**
+ * The <tt>ContentProjectValidator</tt> validates that the defined content
sync root of a project exists and is a
+ * directory
+ *
+ */
+public class ContentProjectValidator extends AbstractValidator {
+
+ private boolean okToValidate = false;
+
+ @Override
+ public void validationStarting(IProject project, ValidationState state,
IProgressMonitor monitor) {
+
+ okToValidate = true;
+ }
+
+ @Override
+ public ValidationResult validate(ValidationEvent event, ValidationState
state, IProgressMonitor monitor) {
+
+ ValidationResult res = new ValidationResult();
+
+ if (!okToValidate) {
+ return res;
+ }
+
+ okToValidate = false;
+
+ IResource resource = event.getResource();
+
+ IProject project = resource.getProject();
+ IPath syncDir = ProjectUtil.getSyncDirectoryValue(project);
+
+ IResource member = project.findMember(syncDir);
+ if (member == null) {
+ addValidatorMessage(res, project, "Configured sync dir " + syncDir
+ " does not exist");
+ } else if (member.getType() != IResource.FOLDER) {
+ addValidatorMessage(res, project, "Configured sync dir " + syncDir
+ " is not a directory");
+ }
+
+ return res;
+ }
+
+ private void addValidatorMessage(ValidationResult res, IProject project,
String msg) {
+
+ ValidatorMessage message = ValidatorMessage.create(msg, project);
+ message.setAttribute(IMarker.LOCATION, project.getName());
+ message.setAttribute(IMarker.SEVERITY, IMarker.SEVERITY_ERROR);
+
+ res.add(message);
+ }
+}