Author: rombert
Date: Fri Jul 19 15:02:40 2013
New Revision: 1504896

URL: http://svn.apache.org/r1504896
Log:
SLING-2793 - [Tooling] Align Eclipse tooling to proposed structure

Implement proper resource sync which obeys all delta kinds. Still need
to make a proper implementation of SlingContentModuleDelegate.members

Modified:
    
sling/whiteboard/asanso/plugins/eclipse/slingclipse-wst/src/org/apache/sling/ide/eclipse/wst/internal/SlingLaunchpadBehaviour.java

Modified: 
sling/whiteboard/asanso/plugins/eclipse/slingclipse-wst/src/org/apache/sling/ide/eclipse/wst/internal/SlingLaunchpadBehaviour.java
URL: 
http://svn.apache.org/viewvc/sling/whiteboard/asanso/plugins/eclipse/slingclipse-wst/src/org/apache/sling/ide/eclipse/wst/internal/SlingLaunchpadBehaviour.java?rev=1504896&r1=1504895&r2=1504896&view=diff
==============================================================================
--- 
sling/whiteboard/asanso/plugins/eclipse/slingclipse-wst/src/org/apache/sling/ide/eclipse/wst/internal/SlingLaunchpadBehaviour.java
 (original)
+++ 
sling/whiteboard/asanso/plugins/eclipse/slingclipse-wst/src/org/apache/sling/ide/eclipse/wst/internal/SlingLaunchpadBehaviour.java
 Fri Jul 19 15:02:40 2013
@@ -21,6 +21,7 @@ import java.net.URISyntaxException;
 import java.util.Arrays;
 
 import org.apache.sling.slingclipse.SlingclipsePlugin;
+import org.apache.sling.slingclipse.api.Command;
 import org.apache.sling.slingclipse.api.FileInfo;
 import org.apache.sling.slingclipse.api.Repository;
 import org.apache.sling.slingclipse.api.RepositoryInfo;
@@ -36,7 +37,10 @@ import org.eclipse.debug.core.ILaunch;
 import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
 import org.eclipse.wst.server.core.IModule;
 import org.eclipse.wst.server.core.IServer;
+import org.eclipse.wst.server.core.model.IModuleFile;
+import org.eclipse.wst.server.core.model.IModuleFolder;
 import org.eclipse.wst.server.core.model.IModuleResource;
+import org.eclipse.wst.server.core.model.IModuleResourceDelta;
 import org.eclipse.wst.server.core.model.ServerBehaviourDelegate;
 
 public class SlingLaunchpadBehaviour extends ServerBehaviourDelegate {
@@ -132,6 +136,7 @@ public class SlingLaunchpadBehaviour ext
         SlingLaunchpadConfiguration configuration = 
launchpadServer.getConfiguration();
 
         IModuleResource[] moduleResources = getResources(module);
+
         Repository repository = SlingclipsePlugin.getDefault().getRepository();
         try {
             // TODO configurable scheme?
@@ -145,29 +150,94 @@ public class SlingLaunchpadBehaviour ext
             // TODO handle error
         }
 
-        for (IModuleResource resource : moduleResources) {
-
-            IFile file = (IFile) resource.getAdapter(IFile.class);
-
-            IPath projectPath = file.getProject().getFullPath();
-            IPath filePath = file.getFullPath();
-            IPath relativePath = filePath.makeRelativeTo(projectPath);
-            IPath rootPath = relativePath.removeLastSegments(1); // TODO 
correct name
+        switch (deltaKind) {
+            case ServerBehaviourDelegate.CHANGED:
+                IModuleResourceDelta[] publishedResourceDelta = 
getPublishedResourceDelta(module);
+                for (IModuleResourceDelta resourceDelta : 
publishedResourceDelta) {
+                    if (resourceDelta.getModuleResource() instanceof 
IModuleFile) {
+                        switch (resourceDelta.getKind()) {
+                            case IModuleResourceDelta.ADDED:
+                            case IModuleResourceDelta.CHANGED:
+                            case IModuleResourceDelta.NO_CHANGE: // TODO is 
this needed?
+                                Result<?> result = addFileCommand(repository,
+                                        (IModuleFile) 
resourceDelta.getModuleResource()).execute();
+                                if (!result.isSuccess()) // TODO proper logging
+                                    throw new CoreException(new 
Status(Status.ERROR, "some.plugin", result.toString()));
+                                break;
+                            case IModuleResourceDelta.REMOVED:
+                                Result<?> deleteResult = 
removeFileCommand(repository,
+                                        (IModuleFile) 
resourceDelta.getModuleResource()).execute();
+                                if (!deleteResult.isSuccess()) // TODO proper 
logging
+                                    throw new CoreException(new 
Status(Status.ERROR, "some.plugin",
+                                            deleteResult.toString()));
+                                break;
+                        }
+                    }
+                }
+                break;
 
-            FileInfo info = new FileInfo(file.getLocation().toOSString(), 
rootPath.toOSString(),
-                    file.getName());
+            case ServerBehaviourDelegate.ADDED:
+            case ServerBehaviourDelegate.NO_CHANGE: // TODO is this correct ?
+                for (IModuleResource resource : moduleResources) {
 
-            System.out.println("For " + resource + " build fileInfo " + info);
+                    if (resource instanceof IModuleFile) {
+                        Result<?> result = addFileCommand(repository, 
(IModuleFile) resource).execute();
+                        if (!result.isSuccess()) // TODO proper logging
+                            throw new CoreException(new Status(Status.ERROR, 
"some.plugin", result.toString()));
+                    } else {
+                        // TODO log/barf
+                    }
+                }
+                break;
+            case ServerBehaviourDelegate.REMOVED:
+                for (IModuleResource resource : moduleResources) {
 
-            Result<Void> result = repository.newAddNodeCommand(info).execute();
-            if (!result.isSuccess())
-                throw new CoreException(new Status(Status.ERROR, 
"some.plugin", result.toString()));
+                    if (resource instanceof IModuleFile) {
+                        Result<?> result = removeFileCommand(repository, 
(IModuleFile) resource).execute();
+                        if (!result.isSuccess()) // TODO proper logging
+                            throw new CoreException(new Status(Status.ERROR, 
"some.plugin", result.toString()));
+                    } else {
+                        // TODO log/barf
+                    }
+                }
+                break;
         }
 
+
         // set state to published
         super.publishModule(kind, deltaKind, module, monitor);
     }
 
+    private Command<?> addFileCommand(Repository repository, IModuleFile 
resource) {
+        IFile file = (IFile) resource.getAdapter(IFile.class);
+
+        IPath projectPath = file.getProject().getFullPath();
+        IPath filePath = file.getFullPath();
+        IPath relativePath = filePath.makeRelativeTo(projectPath);
+        IPath rootPath = relativePath.removeLastSegments(1); // TODO correct 
name
+
+        FileInfo info = new FileInfo(file.getLocation().toOSString(), 
rootPath.toOSString(), file.getName());
+
+        System.out.println("For " + resource + " build fileInfo " + info);
+
+        return repository.newAddNodeCommand(info);
+    }
+
+    private Command<?> removeFileCommand(Repository repository, IModuleFile 
resource) {
+        IFile file = (IFile) resource.getAdapter(IFile.class);
+
+        IPath projectPath = file.getProject().getFullPath();
+        IPath filePath = file.getFullPath();
+        IPath relativePath = filePath.makeRelativeTo(projectPath);
+        IPath rootPath = relativePath.removeLastSegments(1); // TODO correct 
name
+
+        FileInfo info = new FileInfo(file.getLocation().toOSString(), 
rootPath.toOSString(), file.getName());
+
+        System.out.println("For " + resource + " build fileInfo " + info);
+
+        return repository.newDeleteNodeCommand(info);
+    }
+
     /*
      * (non-Javadoc)
      * 


Reply via email to