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 2015/09/29 23:59:20 UTC

svn commit: r1705936 - in /sling/trunk/tooling/ide: api-test/src/test/java/org/apache/sling/ide/serialization/ api/src/org/apache/sling/ide/transport/ eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/ eclipse-test/src/org/apache/sling/ide/te...

Author: rombert
Date: Tue Sep 29 21:59:19 2015
New Revision: 1705936

URL: http://svn.apache.org/viewvc?rev=1705936&view=rev
Log:
SLING-4458 - Resources not matching the filter can be deleted when
updating a node

Added the CommandContext parameter to the AddOrUpdateNodeCommand to make
it possible to access the Filter

Added:
    sling/trunk/tooling/ide/api/src/org/apache/sling/ide/transport/CommandContext.java
Modified:
    sling/trunk/tooling/ide/api-test/src/test/java/org/apache/sling/ide/serialization/StubRepository.java
    sling/trunk/tooling/ide/api/src/org/apache/sling/ide/transport/Repository.java
    sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/ResourceChangeCommandFactory.java
    sling/trunk/tooling/ide/eclipse-test/src/org/apache/sling/ide/test/impl/helpers/SpyRepository.java
    sling/trunk/tooling/ide/impl-resource/src/org/apache/sling/ide/impl/resource/transport/RepositoryImpl.java
    sling/trunk/tooling/ide/impl-vlt-test/src/test/java/org/apache/sling/ide/impl/vlt/AddOrUpdateNodeCommandTest.java
    sling/trunk/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/AddOrUpdateNodeCommand.java
    sling/trunk/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/VltRepository.java

Modified: sling/trunk/tooling/ide/api-test/src/test/java/org/apache/sling/ide/serialization/StubRepository.java
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/ide/api-test/src/test/java/org/apache/sling/ide/serialization/StubRepository.java?rev=1705936&r1=1705935&r2=1705936&view=diff
==============================================================================
--- sling/trunk/tooling/ide/api-test/src/test/java/org/apache/sling/ide/serialization/StubRepository.java (original)
+++ sling/trunk/tooling/ide/api-test/src/test/java/org/apache/sling/ide/serialization/StubRepository.java Tue Sep 29 21:59:19 2015
@@ -17,6 +17,7 @@
 package org.apache.sling.ide.serialization;
 
 import org.apache.sling.ide.transport.Command;
+import org.apache.sling.ide.transport.CommandContext;
 import org.apache.sling.ide.transport.FallbackNodeTypeRegistry;
 import org.apache.sling.ide.transport.FileInfo;
 import org.apache.sling.ide.transport.NodeTypeRegistry;
@@ -47,7 +48,7 @@ public class StubRepository implements R
     }
 
     @Override
-    public Command<Void> newAddOrUpdateNodeCommand(FileInfo fileInfo, ResourceProxy resourceInfo,
+    public Command<Void> newAddOrUpdateNodeCommand(CommandContext context, FileInfo fileInfo, ResourceProxy resourceInfo,
             CommandExecutionFlag... flags) {
         return null;
     }

Added: sling/trunk/tooling/ide/api/src/org/apache/sling/ide/transport/CommandContext.java
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/ide/api/src/org/apache/sling/ide/transport/CommandContext.java?rev=1705936&view=auto
==============================================================================
--- sling/trunk/tooling/ide/api/src/org/apache/sling/ide/transport/CommandContext.java (added)
+++ sling/trunk/tooling/ide/api/src/org/apache/sling/ide/transport/CommandContext.java Tue Sep 29 21:59:19 2015
@@ -0,0 +1,37 @@
+/*
+ * 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.transport;
+
+import org.apache.sling.ide.filter.Filter;
+
+/**
+ * The <tt>CommandContext</tt> groups together various dependencies which are
+ * typicaly useful for <tt>Commands</tt>
+ *
+ */
+public class CommandContext {
+
+    private final Filter filter;
+
+    public CommandContext(Filter filter) {
+        this.filter = filter;
+    }
+
+    public Filter filter() {
+        return filter;
+    }
+}

Modified: sling/trunk/tooling/ide/api/src/org/apache/sling/ide/transport/Repository.java
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/ide/api/src/org/apache/sling/ide/transport/Repository.java?rev=1705936&r1=1705935&r2=1705936&view=diff
==============================================================================
--- sling/trunk/tooling/ide/api/src/org/apache/sling/ide/transport/Repository.java (original)
+++ sling/trunk/tooling/ide/api/src/org/apache/sling/ide/transport/Repository.java Tue Sep 29 21:59:19 2015
@@ -88,7 +88,7 @@ public interface Repository {
  	
     RepositoryInfo getRepositoryInfo();
 
-    Command<Void> newAddOrUpdateNodeCommand(FileInfo fileInfo, ResourceProxy resourceProxy,
+    Command<Void> newAddOrUpdateNodeCommand(CommandContext context, FileInfo fileInfo, ResourceProxy resourceProxy,
             CommandExecutionFlag... flags);
 
     /**

Modified: sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/ResourceChangeCommandFactory.java
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/ResourceChangeCommandFactory.java?rev=1705936&r1=1705935&r2=1705936&view=diff
==============================================================================
--- sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/ResourceChangeCommandFactory.java (original)
+++ sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/ResourceChangeCommandFactory.java Tue Sep 29 21:59:19 2015
@@ -39,6 +39,7 @@ import org.apache.sling.ide.serializatio
 import org.apache.sling.ide.serialization.SerializationKindManager;
 import org.apache.sling.ide.serialization.SerializationManager;
 import org.apache.sling.ide.transport.Command;
+import org.apache.sling.ide.transport.CommandContext;
 import org.apache.sling.ide.transport.FileInfo;
 import org.apache.sling.ide.transport.Repository;
 import org.apache.sling.ide.transport.RepositoryException;
@@ -91,13 +92,15 @@ public class ResourceChangeCommandFactor
         if (rai == null) {
             return null;
         }
+        
+        CommandContext context = new CommandContext(ProjectUtil.loadFilter(resource.getProject()));
 
         if (rai.isOnlyWhenMissing()) {
-            return repository.newAddOrUpdateNodeCommand(rai.getInfo(), rai.getResource(),
+            return repository.newAddOrUpdateNodeCommand(context, rai.getInfo(), rai.getResource(),
                     Repository.CommandExecutionFlag.CREATE_ONLY_WHEN_MISSING);
         }
 
-        return repository.newAddOrUpdateNodeCommand(rai.getInfo(), rai.getResource());
+        return repository.newAddOrUpdateNodeCommand(context, rai.getInfo(), rai.getResource());
     }
 
     /**
@@ -556,7 +559,7 @@ public class ResourceChangeCommandFactor
                     .trace("Found covering resource data ( repository path = {0} ) for resource at {1},  skipping deletion and performing an update instead",
                             coveringParentData.getPath(), resource.getFullPath());
             FileInfo info = createFileInfo(resource);
-            return repository.newAddOrUpdateNodeCommand(info, coveringParentData);
+            return repository.newAddOrUpdateNodeCommand(new CommandContext(filter), info, coveringParentData);
         }
         
         return repository.newDeleteNodeCommand(serializationManager.getRepositoryPath(resourceLocation));

Modified: sling/trunk/tooling/ide/eclipse-test/src/org/apache/sling/ide/test/impl/helpers/SpyRepository.java
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/ide/eclipse-test/src/org/apache/sling/ide/test/impl/helpers/SpyRepository.java?rev=1705936&r1=1705935&r2=1705936&view=diff
==============================================================================
--- sling/trunk/tooling/ide/eclipse-test/src/org/apache/sling/ide/test/impl/helpers/SpyRepository.java (original)
+++ sling/trunk/tooling/ide/eclipse-test/src/org/apache/sling/ide/test/impl/helpers/SpyRepository.java Tue Sep 29 21:59:19 2015
@@ -17,6 +17,7 @@
 package org.apache.sling.ide.test.impl.helpers;
 
 import org.apache.sling.ide.transport.Command;
+import org.apache.sling.ide.transport.CommandContext;
 import org.apache.sling.ide.transport.FallbackNodeTypeRegistry;
 import org.apache.sling.ide.transport.FileInfo;
 import org.apache.sling.ide.transport.NodeTypeRegistry;
@@ -37,7 +38,7 @@ public class SpyRepository implements Re
     }
 
     @Override
-    public Command<Void> newAddOrUpdateNodeCommand(FileInfo fileInfo, ResourceProxy resourceProxy,
+    public Command<Void> newAddOrUpdateNodeCommand(CommandContext context, FileInfo fileInfo, ResourceProxy resourceProxy,
             CommandExecutionFlag... flags) {
 
         return new SpyCommand<Void>(resourceProxy, fileInfo, null, SpyCommand.Kind.ADD_OR_UPDATE, flags);

Modified: sling/trunk/tooling/ide/impl-resource/src/org/apache/sling/ide/impl/resource/transport/RepositoryImpl.java
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/ide/impl-resource/src/org/apache/sling/ide/impl/resource/transport/RepositoryImpl.java?rev=1705936&r1=1705935&r2=1705936&view=diff
==============================================================================
--- sling/trunk/tooling/ide/impl-resource/src/org/apache/sling/ide/impl/resource/transport/RepositoryImpl.java (original)
+++ sling/trunk/tooling/ide/impl-resource/src/org/apache/sling/ide/impl/resource/transport/RepositoryImpl.java Tue Sep 29 21:59:19 2015
@@ -18,6 +18,7 @@ package org.apache.sling.ide.impl.resour
 
 import org.apache.commons.httpclient.HttpClient;
 import org.apache.sling.ide.transport.Command;
+import org.apache.sling.ide.transport.CommandContext;
 import org.apache.sling.ide.transport.FileInfo;
 import org.apache.sling.ide.transport.NodeTypeRegistry;
 import org.apache.sling.ide.transport.Repository;
@@ -64,7 +65,7 @@ public class RepositoryImpl implements R
 	}
 	
 	@Override
-    public Command<Void> newAddOrUpdateNodeCommand(final FileInfo fileInfo, ResourceProxy resource,
+    public Command<Void> newAddOrUpdateNodeCommand(CommandContext context, final FileInfo fileInfo, ResourceProxy resource,
             CommandExecutionFlag... flags) {
         if (flags.length != 0) {
             throw new UnsupportedOperationException("This implementation does not support any flags");

Modified: sling/trunk/tooling/ide/impl-vlt-test/src/test/java/org/apache/sling/ide/impl/vlt/AddOrUpdateNodeCommandTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/ide/impl-vlt-test/src/test/java/org/apache/sling/ide/impl/vlt/AddOrUpdateNodeCommandTest.java?rev=1705936&r1=1705935&r2=1705936&view=diff
==============================================================================
--- sling/trunk/tooling/ide/impl-vlt-test/src/test/java/org/apache/sling/ide/impl/vlt/AddOrUpdateNodeCommandTest.java (original)
+++ sling/trunk/tooling/ide/impl-vlt-test/src/test/java/org/apache/sling/ide/impl/vlt/AddOrUpdateNodeCommandTest.java Tue Sep 29 21:59:19 2015
@@ -43,12 +43,22 @@ import org.apache.commons.io.IOUtils;
 import org.apache.jackrabbit.commons.cnd.CndImporter;
 import org.apache.jackrabbit.commons.cnd.ParseException;
 import org.apache.jackrabbit.core.TransientRepository;
+import org.apache.sling.ide.filter.Filter;
+import org.apache.sling.ide.filter.FilterResult;
 import org.apache.sling.ide.log.Logger;
+import org.apache.sling.ide.transport.CommandContext;
 import org.apache.sling.ide.transport.ResourceProxy;
 import org.junit.Ignore;
 import org.junit.Test;
 
 public class AddOrUpdateNodeCommandTest {
+    
+    private static final CommandContext DEFAULT_CONTEXT = new CommandContext(new Filter() {
+        @Override
+        public FilterResult filter(String repositoryPath) {
+            return FilterResult.ALLOW;
+        }
+    });
 
     private static final String PROP_NAME = "jcr:title";
 
@@ -80,7 +90,7 @@ public class AddOrUpdateNodeCommandTest
                     resource.addProperty(PROP_NAME, newPropertyValues);
                 }
 
-                AddOrUpdateNodeCommand cmd = new AddOrUpdateNodeCommand(repo(), credentials(), null, resource, logger);
+                AddOrUpdateNodeCommand cmd = new AddOrUpdateNodeCommand(repo(), credentials(), DEFAULT_CONTEXT, null, resource, logger);
                 cmd.execute().get();
 
                 session().refresh(false);
@@ -146,7 +156,7 @@ public class AddOrUpdateNodeCommandTest
                 ResourceProxy resource = newResource("/content", "sling:Folder");
                 resource.getProperties().put("newProperty", "some/value");
 
-                AddOrUpdateNodeCommand cmd = new AddOrUpdateNodeCommand(repo(), credentials(), null, resource, logger);
+                AddOrUpdateNodeCommand cmd = new AddOrUpdateNodeCommand(repo(), credentials(), DEFAULT_CONTEXT, null, resource, logger);
                 cmd.execute().get();
 
                 session().refresh(false);
@@ -171,7 +181,7 @@ public class AddOrUpdateNodeCommandTest
 
                 ResourceProxy resource = newResource("/content", "nt:folder");
 
-                AddOrUpdateNodeCommand cmd = new AddOrUpdateNodeCommand(repo(), credentials(), null, resource, logger);
+                AddOrUpdateNodeCommand cmd = new AddOrUpdateNodeCommand(repo(), credentials(), DEFAULT_CONTEXT, null, resource, logger);
                 cmd.execute().get();
 
                 session().refresh(false);
@@ -198,7 +208,7 @@ public class AddOrUpdateNodeCommandTest
                 ResourceProxy resource = newResource("/content", "custom");
                 resource.getProperties().put("attribute", "some value");
 
-                AddOrUpdateNodeCommand cmd = new AddOrUpdateNodeCommand(repo(), credentials(), null, resource, logger);
+                AddOrUpdateNodeCommand cmd = new AddOrUpdateNodeCommand(repo(), credentials(), DEFAULT_CONTEXT, null, resource, logger);
                 cmd.execute().get();
 
                 session().refresh(false);
@@ -230,7 +240,7 @@ public class AddOrUpdateNodeCommandTest
 
                 ResourceProxy resource = newResource("/content", "nt:unstructured");
 
-                AddOrUpdateNodeCommand cmd = new AddOrUpdateNodeCommand(repo(), credentials(), null, resource, logger,
+                AddOrUpdateNodeCommand cmd = new AddOrUpdateNodeCommand(repo(), credentials(), DEFAULT_CONTEXT, null, resource, logger,
                         CREATE_ONLY_WHEN_MISSING);
                 cmd.execute().get();
 
@@ -252,7 +262,7 @@ public class AddOrUpdateNodeCommandTest
             public Void call() throws Exception {
                 ResourceProxy resource = newResource("/content", "nt:unstructured");
 
-                AddOrUpdateNodeCommand cmd = new AddOrUpdateNodeCommand(repo(), credentials(), null, resource, logger,
+                AddOrUpdateNodeCommand cmd = new AddOrUpdateNodeCommand(repo(), credentials(), DEFAULT_CONTEXT, null, resource, logger,
                         CREATE_ONLY_WHEN_MISSING);
                 cmd.execute().get();
 
@@ -274,7 +284,7 @@ public class AddOrUpdateNodeCommandTest
             public Void call() throws Exception {
                 ResourceProxy resource = new ResourceProxy("/content");
 
-                AddOrUpdateNodeCommand cmd = new AddOrUpdateNodeCommand(repo(), credentials(), null, resource, logger,
+                AddOrUpdateNodeCommand cmd = new AddOrUpdateNodeCommand(repo(), credentials(), DEFAULT_CONTEXT, null, resource, logger,
                         CREATE_ONLY_WHEN_MISSING);
                 cmd.execute().get();
 
@@ -301,7 +311,7 @@ public class AddOrUpdateNodeCommandTest
                 ResourceProxy resource = newResource("/content", "nt:folder");
                 resource.addProperty("jcr:mixinTypes", "mix:lastModified");
 
-                AddOrUpdateNodeCommand cmd = new AddOrUpdateNodeCommand(repo(), credentials(), null, resource, logger);
+                AddOrUpdateNodeCommand cmd = new AddOrUpdateNodeCommand(repo(), credentials(), DEFAULT_CONTEXT, null, resource, logger);
                 cmd.execute().get();
                 cmd.execute().get(); // second time since mixins are processed after properties so we need two
                                      // executions to
@@ -334,7 +344,7 @@ public class AddOrUpdateNodeCommandTest
                 resource.addProperty("jcr:mixinTypes", "mix:lastModified");
                 resource.addProperty("jcr:lastModifiedBy", "admin2");
 
-                AddOrUpdateNodeCommand cmd = new AddOrUpdateNodeCommand(repo(), credentials(), null, resource, logger);
+                AddOrUpdateNodeCommand cmd = new AddOrUpdateNodeCommand(repo(), credentials(), DEFAULT_CONTEXT, null, resource, logger);
                 cmd.execute().get();
                 cmd.execute().get(); // second time since mixins are processed after properties so we need two
                                      // executions to

Modified: sling/trunk/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/AddOrUpdateNodeCommand.java
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/AddOrUpdateNodeCommand.java?rev=1705936&r1=1705935&r2=1705936&view=diff
==============================================================================
--- sling/trunk/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/AddOrUpdateNodeCommand.java (original)
+++ sling/trunk/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/AddOrUpdateNodeCommand.java Tue Sep 29 21:59:19 2015
@@ -55,7 +55,9 @@ import javax.jcr.nodetype.PropertyDefini
 
 import org.apache.jackrabbit.vault.util.JcrConstants;
 import org.apache.jackrabbit.vault.util.Text;
+import org.apache.sling.ide.filter.FilterResult;
 import org.apache.sling.ide.log.Logger;
+import org.apache.sling.ide.transport.CommandContext;
 import org.apache.sling.ide.transport.FileInfo;
 import org.apache.sling.ide.transport.Repository.CommandExecutionFlag;
 import org.apache.sling.ide.transport.ResourceProxy;
@@ -65,12 +67,14 @@ public class AddOrUpdateNodeCommand exte
 
     private ResourceProxy resource;
     private FileInfo fileInfo;
+    private CommandContext context;
 
-    public AddOrUpdateNodeCommand(Repository jcrRepo, Credentials credentials, FileInfo fileInfo,
-            ResourceProxy resource, Logger logger, CommandExecutionFlag... flags) {
+    public AddOrUpdateNodeCommand(Repository jcrRepo, Credentials credentials, CommandContext context,
+            FileInfo fileInfo, ResourceProxy resource, Logger logger, CommandExecutionFlag... flags) {
 
         super(jcrRepo, credentials, resource.getPath(), logger, flags);
-
+        
+        this.context = context;
         this.fileInfo = fileInfo;
         this.resource = resource;
     }
@@ -139,7 +143,7 @@ public class AddOrUpdateNodeCommand exte
                 }
                 continue;
             }
-
+            
             getLogger()
                     .trace("Deleting node {0} as it is no longer present in the local checkout", child.getPath());
             child.remove();

Modified: sling/trunk/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/VltRepository.java
URL: http://svn.apache.org/viewvc/sling/trunk/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/VltRepository.java?rev=1705936&r1=1705935&r2=1705936&view=diff
==============================================================================
--- sling/trunk/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/VltRepository.java (original)
+++ sling/trunk/tooling/ide/impl-vlt/src/org/apache/sling/ide/impl/vlt/VltRepository.java Tue Sep 29 21:59:19 2015
@@ -22,6 +22,7 @@ import javax.jcr.RepositoryException;
 import org.apache.sling.ide.jcr.RepositoryUtils;
 import org.apache.sling.ide.log.Logger;
 import org.apache.sling.ide.transport.Command;
+import org.apache.sling.ide.transport.CommandContext;
 import org.apache.sling.ide.transport.FileInfo;
 import org.apache.sling.ide.transport.NodeTypeRegistry;
 import org.apache.sling.ide.transport.Repository;
@@ -85,9 +86,9 @@ public class VltRepository implements Re
     }
 
     @Override
-    public Command<Void> newAddOrUpdateNodeCommand(FileInfo fileInfo, ResourceProxy resource,
+    public Command<Void> newAddOrUpdateNodeCommand(CommandContext context, FileInfo fileInfo, ResourceProxy resource,
             CommandExecutionFlag... flags) {
-        return TracingCommand.wrap(new AddOrUpdateNodeCommand(jcrRepo, credentials, fileInfo, resource, logger, flags),
+        return TracingCommand.wrap(new AddOrUpdateNodeCommand(jcrRepo, credentials, context, fileInfo, resource, logger, flags),
                 eventAdmin);
     }