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);
+    }
+}


Reply via email to