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 2013/09/13 15:33:00 UTC
svn commit: r1522918 - in
/sling/branches/tooling-ide-vlt/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/internal:
ImportRepositoryContentAction.java ImportWizard.java
Author: rombert
Date: Fri Sep 13 13:32:59 2013
New Revision: 1522918
URL: http://svn.apache.org/r1522918
Log:
SLING-2989 - [Tooling] integrate with vlt once available
Moved the ImportRepositoryContentAction into its own separate class, for
reusability.
Added:
sling/branches/tooling-ide-vlt/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/internal/ImportRepositoryContentAction.java (with props)
Modified:
sling/branches/tooling-ide-vlt/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/internal/ImportWizard.java
Added: sling/branches/tooling-ide-vlt/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/internal/ImportRepositoryContentAction.java
URL: http://svn.apache.org/viewvc/sling/branches/tooling-ide-vlt/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/internal/ImportRepositoryContentAction.java?rev=1522918&view=auto
==============================================================================
--- sling/branches/tooling-ide-vlt/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/internal/ImportRepositoryContentAction.java (added)
+++ sling/branches/tooling-ide-vlt/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/internal/ImportRepositoryContentAction.java Fri Sep 13 13:32:59 2013
@@ -0,0 +1,327 @@
+/*
+ * 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.internal;
+
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.lang.reflect.InvocationTargetException;
+
+import org.apache.sling.ide.eclipse.core.ISlingLaunchpadServer;
+import org.apache.sling.ide.eclipse.core.ProjectUtil;
+import org.apache.sling.ide.eclipse.core.ServerUtil;
+import org.apache.sling.ide.eclipse.ui.internal.SerializationKindManager.SerializationKind;
+import org.apache.sling.ide.filter.Filter;
+import org.apache.sling.ide.filter.FilterLocator;
+import org.apache.sling.ide.filter.FilterResult;
+import org.apache.sling.ide.serialization.SerializationManager;
+import org.apache.sling.ide.transport.Command;
+import org.apache.sling.ide.transport.Repository;
+import org.apache.sling.ide.transport.RepositoryException;
+import org.apache.sling.ide.transport.ResourceProxy;
+import org.apache.sling.ide.transport.Result;
+import org.apache.sling.ide.util.PathUtil;
+import org.eclipse.core.resources.IFile;
+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.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.wst.server.core.IServer;
+
+// intentionally does not implement IRunnableWithProgress to cut dependency on JFace
+public class ImportRepositoryContentAction {
+
+ private final String repositoryPath;
+ private final IServer server;
+ private final IFile filterFile;
+ private final IPath projectRelativePath;
+ private final IProject project;
+ private SerializationManager serializationManager;
+
+ /**
+ * @param repositoryPath
+ * @param server
+ * @param filterFile
+ * @param projectRelativePath
+ * @param project
+ */
+ public ImportRepositoryContentAction(String repositoryPath, IServer server, IFile filterFile,
+ IPath projectRelativePath, IProject project, SerializationManager serializationManager) {
+ this.repositoryPath = repositoryPath;
+ this.server = server;
+ this.filterFile = filterFile;
+ this.projectRelativePath = projectRelativePath;
+ this.project = project;
+ this.serializationManager = serializationManager;
+ }
+
+ public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
+ Repository repository = ServerUtil.getRepository(server, monitor);
+
+ monitor.setTaskName("Loading configuration...");
+ ISlingLaunchpadServer launchpad = (ISlingLaunchpadServer) server.loadAdapter(
+ ISlingLaunchpadServer.class, monitor);
+
+ int oldPublishState = launchpad.getPublishState();
+ // TODO disabling publish does not work; since the publish is done async
+ // Not sure if there is a simple workaround. Anyway, the only side effect is that we
+ // make too many calls after the import, functionality is not affected
+ if (server.canPublish().isOK() && oldPublishState != ISlingLaunchpadServer.PUBLISH_STATE_NEVER) {
+ launchpad.setPublishState(ISlingLaunchpadServer.PUBLISH_STATE_NEVER, monitor);
+ }
+
+ SerializationKindManager skm;
+
+ try {
+ skm = new SerializationKindManager();
+ skm.init(repository);
+ } catch (RepositoryException e1) {
+ throw new InvocationTargetException(e1);
+ }
+
+ Filter filter = null;
+
+ FilterLocator filterLocator = Activator.getDefault().getFilterLocator();
+ InputStream contents = null;
+
+ if (filterFile != null && filterFile.exists()) {
+ try {
+ contents = filterFile.getContents();
+ } catch (CoreException e) {
+ throw new InvocationTargetException(e);
+ } finally {
+ if (contents != null) {
+ try {
+ contents.close();
+ } catch (IOException e) {
+ // don't care
+ }
+ }
+ }
+ }
+
+ try {
+ filter = filterLocator.loadFilter(contents);
+ } catch (IOException e) {
+ throw new InvocationTargetException(e);
+ }
+
+ monitor.worked(5);
+
+ try {
+
+ // TODO: We should try to make this give 'nice' progress feedback (aka here's what I'm
+ // processing)
+ monitor.setTaskName("Importing...");
+ monitor.worked(10);
+
+ // we create the root node and assume this is a folder
+ createRoot(project, projectRelativePath, repositoryPath);
+
+ crawlChildrenAndImport(repository, filter, repositoryPath, project, projectRelativePath, skm);
+
+ monitor.setTaskName("Import Complete");
+ monitor.worked(100);
+ } catch (Exception e) {
+ throw new InvocationTargetException(e);
+ } finally {
+ if (oldPublishState != ISlingLaunchpadServer.PUBLISH_STATE_NEVER) {
+ launchpad.setPublishState(oldPublishState, monitor);
+ }
+ monitor.done();
+ }
+
+ }
+
+ private void createRoot(final IProject project, final IPath projectRelativePath,
+ final String repositoryPath) throws CoreException {
+
+ IPath rootImportPath = projectRelativePath.append(repositoryPath);
+
+ for (int i = rootImportPath.segmentCount() - 1; i > 0; i--)
+ createFolder(project, rootImportPath.removeLastSegments(i));
+ }
+
+ /**
+ * Crawls the repository and recursively imports founds resources
+ *
+ * @param repository the sling repository to import from
+ * @param filter
+ * @param path the current path to import from
+ * @param project the project to create resources in
+ * @param projectRelativePath the path, relative to the project root, where the resources should be
+ * created
+ * @param skm
+ * @param tracer
+ * @throws JSONException
+ * @throws RepositoryException
+ * @throws CoreException
+ * @throws IOException
+ */
+ // TODO: This probably should be pushed into the service layer
+ private void crawlChildrenAndImport(Repository repository, Filter filter, String path,
+ IProject project, IPath projectRelativePath, SerializationKindManager skm)
+ throws RepositoryException, CoreException, IOException {
+
+ File contentSyncRoot = ProjectUtil.getSyncDirectoryFullPath(project).toFile();
+
+ System.out.println("crawlChildrenAndImport(" + repository + ", " + path + ", " + project + ", "
+ + projectRelativePath + ")");
+
+ ResourceProxy resource = executeCommand(repository.newListChildrenNodeCommand(path));
+ String primaryType = (String) resource.getProperties().get(Repository.JCR_PRIMARY_TYPE);
+
+ SerializationKind serializationKind = skm.getSerializationKind(primaryType);
+ System.out.println(primaryType + " -> " + serializationKind);
+
+ // TODO we should know all node types for which to create files and folders
+
+ String serializationPath = serializationManager.getSerializationFilePath(path);
+ switch (serializationKind) {
+ case FILE: {
+ importFile(repository, path, project, projectRelativePath);
+
+ ResourceProxy resourceToSerialize = executeCommand(repository
+ .newGetNodeContentCommand(path));
+
+ String out = serializationManager.buildSerializationData(contentSyncRoot,
+ resourceToSerialize, repository.getRepositoryInfo());
+ if (out != null) {
+ IPath directoryPath = projectRelativePath.append(path + ".dir");
+ createFolder(project, directoryPath);
+ // TODO remove hardcoding of .content.xml name here
+ createFile(project, directoryPath.append(".content.xml"), out.getBytes("UTF-8"));
+ }
+
+ break;
+ }
+ case FOLDER:
+ case METADATA_PARTIAL: {
+ createFolder(project, projectRelativePath.append(path));
+ ResourceProxy resourceToSerialize = executeCommand(repository
+ .newGetNodeContentCommand(path));
+
+ String out = serializationManager.buildSerializationData(contentSyncRoot,
+ resourceToSerialize, repository.getRepositoryInfo());
+ if (out != null) {
+ createFile(project, projectRelativePath.append(serializationPath),
+ out.getBytes("UTF-8"));
+ }
+ break;
+ }
+
+ case METADATA_FULL: {
+ ResourceProxy resourceToSerialize = executeCommand(repository
+ .newGetNodeContentCommand(path));
+
+ String out = serializationManager.buildSerializationData(contentSyncRoot,
+ resourceToSerialize, repository.getRepositoryInfo());
+
+ if (out != null) {
+ // TODO - picking the base name based on serialization kind is not supported by the
+ // API...
+ // so for now this is one big hack to have vlt-compatible checkouts
+ IPath serializationPathPath = Path.fromPortableString(serializationPath);
+ if (!resourceToSerialize.getPath().equals("/")
+ && serializationPath.endsWith(".content.xml")) {
+ String name = PathUtil.getName(path);
+ if (name.indexOf(':') != -1) {
+ name = '_' + name.replace(':', '_');
+ }
+ name += ".xml";
+ serializationPath = serializationPath.replace(".content.xml", name);
+
+ // some of the logic should be reused from AbstractArtifact
+ serializationPathPath = Path.fromPortableString(serializationPath)
+ .removeFirstSegments(1);
+ }
+
+ createFile(project, projectRelativePath.append(serializationPathPath),
+ out.getBytes("UTF-8"));
+ }
+ break;
+ }
+ }
+
+ System.out.println("Children: " + resource.getChildren());
+
+ if (serializationKind == SerializationKind.METADATA_FULL) {
+ return;
+ }
+
+ for (ResourceProxy child : resource.getChildren()) {
+
+ // TODO - still needed?
+ if (Repository.NT_RESOURCE.equals(child.getProperties().get(Repository.JCR_PRIMARY_TYPE))) {
+ continue;
+ }
+
+ if (filter != null) {
+ FilterResult filterResult = filter.filter(contentSyncRoot, child.getPath(),
+ repository.getRepositoryInfo());
+ if (filterResult == FilterResult.DENY) {
+ continue;
+ }
+ }
+
+ crawlChildrenAndImport(repository, filter, child.getPath(), project, projectRelativePath, skm);
+ }
+ }
+
+ private <T> T executeCommand(Command<T> command) throws RepositoryException {
+
+ Result<T> result = command.execute();
+ return result.get();
+ }
+
+ private void importFile(Repository repository, String path, IProject project, IPath destinationPath)
+ throws RepositoryException, CoreException {
+
+ System.out.println("importFile: " + path + " -> " + destinationPath);
+
+ byte[] node = executeCommand(repository.newGetNodeCommand(path));
+ createFile(project, destinationPath.append(path), node);
+ }
+
+ private void createFolder(IProject project, IPath destinationPath) throws CoreException {
+
+ IFolder destinationFolder = project.getFolder(destinationPath);
+ if (destinationFolder.exists())
+ return;
+
+ destinationFolder.create(true, true, null /* TODO progress monitor */);
+ }
+
+ private void createFile(IProject project, IPath path, byte[] node) throws CoreException {
+
+ IFile destinationFile = project.getFile(path);
+
+ System.out.println("Writing content file at " + path);
+
+ if (destinationFile.exists()) {
+ /* TODO progress monitor */
+ destinationFile.setContents(new ByteArrayInputStream(node), IResource.KEEP_HISTORY, null);
+ } else {
+ /* TODO progress monitor */
+ destinationFile.create(new ByteArrayInputStream(node), true, null);
+ }
+ }
+}
\ No newline at end of file
Propchange: sling/branches/tooling-ide-vlt/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/internal/ImportRepositoryContentAction.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: sling/branches/tooling-ide-vlt/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/internal/ImportRepositoryContentAction.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision Rev URL
Modified: sling/branches/tooling-ide-vlt/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/internal/ImportWizard.java
URL: http://svn.apache.org/viewvc/sling/branches/tooling-ide-vlt/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/internal/ImportWizard.java?rev=1522918&r1=1522917&r2=1522918&view=diff
==============================================================================
--- sling/branches/tooling-ide-vlt/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/internal/ImportWizard.java (original)
+++ sling/branches/tooling-ide-vlt/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/internal/ImportWizard.java Fri Sep 13 13:32:59 2013
@@ -16,35 +16,14 @@
*/
package org.apache.sling.ide.eclipse.ui.internal;
-import java.io.ByteArrayInputStream;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
import java.lang.reflect.InvocationTargetException;
-import org.apache.sling.ide.eclipse.core.ISlingLaunchpadServer;
-import org.apache.sling.ide.eclipse.core.ProjectUtil;
-import org.apache.sling.ide.eclipse.core.ServerUtil;
-import org.apache.sling.ide.eclipse.ui.internal.SerializationKindManager.SerializationKind;
-import org.apache.sling.ide.filter.Filter;
-import org.apache.sling.ide.filter.FilterLocator;
-import org.apache.sling.ide.filter.FilterResult;
import org.apache.sling.ide.serialization.SerializationManager;
-import org.apache.sling.ide.transport.Command;
-import org.apache.sling.ide.transport.Repository;
-import org.apache.sling.ide.transport.RepositoryException;
-import org.apache.sling.ide.transport.ResourceProxy;
-import org.apache.sling.ide.transport.Result;
-import org.apache.sling.ide.util.PathUtil;
import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.ResourcesPlugin;
-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.core.runtime.Status;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.jface.viewers.IStructuredSelection;
@@ -58,7 +37,8 @@ import org.eclipse.wst.server.core.IServ
* import.
*/
public class ImportWizard extends Wizard implements IImportWizard {
- private ImportWizardPage mainPage;
+
+ private ImportWizardPage mainPage;
private SerializationManager serializationManager;
/**
@@ -89,90 +69,15 @@ public class ImportWizard extends Wizard
final IPath projectRelativePath = destinationPath.removeFirstSegments(1);
final String repositoryPath = mainPage.getRepositoryPath();
final IFile filterFile = mainPage.getFilterFile();
+ IRunnableWithProgress runnable = new IRunnableWithProgress() {
+ @Override
+ public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
+ new ImportRepositoryContentAction(repositoryPath, server, filterFile, projectRelativePath, project,
+ serializationManager).run(monitor);
+ }
+ };
try {
- // TODO the headless logic should move to the service layer of reuse and testing
- getContainer().run(false, true, new IRunnableWithProgress() {
-
- @Override
- public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
- Repository repository = ServerUtil.getRepository(server, monitor);
-
- monitor.setTaskName("Loading configuration...");
- ISlingLaunchpadServer launchpad = (ISlingLaunchpadServer) server.loadAdapter(
- ISlingLaunchpadServer.class, monitor);
-
- int oldPublishState = launchpad.getPublishState();
- // TODO disabling publish does not work; since the publish is done async
- // Not sure if there is a simple workaround. Anyway, the only side effect is that we
- // make too many calls after the import, functionality is not affected
- if (server.canPublish().isOK() && oldPublishState != ISlingLaunchpadServer.PUBLISH_STATE_NEVER) {
- launchpad.setPublishState(ISlingLaunchpadServer.PUBLISH_STATE_NEVER, monitor);
- }
-
- SerializationKindManager skm;
-
- try {
- skm = new SerializationKindManager();
- skm.init(repository);
- } catch (RepositoryException e1) {
- throw new InvocationTargetException(e1);
- }
-
- Filter filter = null;
-
- FilterLocator filterLocator = Activator.getDefault().getFilterLocator();
- InputStream contents = null;
-
- if (filterFile != null && filterFile.exists()) {
- try {
- contents = filterFile.getContents();
- } catch (CoreException e) {
- throw new InvocationTargetException(e);
- } finally {
- if (contents != null) {
- try {
- contents.close();
- } catch (IOException e) {
- // don't care
- }
- }
- }
- }
-
- try {
- filter = filterLocator.loadFilter(contents);
- } catch (IOException e) {
- throw new InvocationTargetException(e);
- }
-
- monitor.worked(5);
-
- try {
-
- // TODO: We should try to make this give 'nice' progress feedback (aka here's what I'm
- // processing)
- monitor.setTaskName("Importing...");
- monitor.worked(10);
-
- // we create the root node and assume this is a folder
- createRoot(project, projectRelativePath, repositoryPath);
-
- crawlChildrenAndImport(repository, filter, repositoryPath, project, projectRelativePath, skm);
-
- monitor.setTaskName("Import Complete");
- monitor.worked(100);
- } catch (Exception e) {
- throw new InvocationTargetException(e);
- } finally {
- if (oldPublishState != ISlingLaunchpadServer.PUBLISH_STATE_NEVER) {
- launchpad.setPublishState(oldPublishState, monitor);
- }
- monitor.done();
- }
-
- }
-
- });
+ getContainer().run(false, true, runnable);
} catch (InvocationTargetException e) {
Throwable cause = e.getCause();
mainPage.setErrorMessage("Import error : " + cause.getMessage()
@@ -211,175 +116,4 @@ public class ImportWizard extends Wizard
super.addPages();
addPage(mainPage);
}
-
- private void createRoot(final IProject project, final IPath projectRelativePath, final String repositoryPath)
- throws CoreException {
-
- IPath rootImportPath = projectRelativePath.append(repositoryPath);
-
- for (int i = rootImportPath.segmentCount() - 1; i > 0; i--)
- createFolder(project, rootImportPath.removeLastSegments(i));
- }
-
- /**
- * Crawls the repository and recursively imports founds resources
- *
- * @param repository the sling repository to import from
- * @param filter
- * @param path the current path to import from
- * @param project the project to create resources in
- * @param projectRelativePath the path, relative to the project root, where the resources should be created
- * @param skm
- * @param tracer
- * @throws JSONException
- * @throws RepositoryException
- * @throws CoreException
- * @throws IOException
- */
- // TODO: This probably should be pushed into the service layer
- private void crawlChildrenAndImport(Repository repository, Filter filter, String path, IProject project,
- IPath projectRelativePath, SerializationKindManager skm) throws RepositoryException, CoreException, IOException {
-
- File contentSyncRoot = ProjectUtil.getSyncDirectoryFullPath(project).toFile();
-
- System.out.println("crawlChildrenAndImport(" + repository + ", " + path + ", " + project + ", "
- + projectRelativePath + ")");
-
- ResourceProxy resource = executeCommand(repository.newListChildrenNodeCommand(path));
- String primaryType = (String) resource.getProperties().get(Repository.JCR_PRIMARY_TYPE);
-
- SerializationKind serializationKind = skm.getSerializationKind(primaryType);
- System.out.println(primaryType + " -> " + serializationKind);
-
- // TODO we should know all node types for which to create files and folders
-
- String serializationPath = serializationManager.getSerializationFilePath(path);
- switch (serializationKind) {
- case FILE: {
- importFile(repository, path, project, projectRelativePath);
-
- ResourceProxy resourceToSerialize = executeCommand(repository.newGetNodeContentCommand(path));
-
- String out = serializationManager.buildSerializationData(contentSyncRoot, resourceToSerialize,
- repository.getRepositoryInfo());
- if (out != null) {
- IPath directoryPath = projectRelativePath.append(path + ".dir");
- createFolder(project, directoryPath);
- // TODO remove hardcoding of .content.xml name here
- createFile(project, directoryPath.append(".content.xml"), out.getBytes("UTF-8"));
- }
-
- break;
- }
- case FOLDER:
- case METADATA_PARTIAL: {
- createFolder(project, projectRelativePath.append(path));
- ResourceProxy resourceToSerialize = executeCommand(repository.newGetNodeContentCommand(path));
-
- String out = serializationManager.buildSerializationData(contentSyncRoot, resourceToSerialize,
- repository.getRepositoryInfo());
- if (out != null) {
- createFile(project,
- projectRelativePath.append(serializationPath),
- out.getBytes("UTF-8"));
- }
- break;
- }
-
- case METADATA_FULL: {
- ResourceProxy resourceToSerialize = executeCommand(repository.newGetNodeContentCommand(path));
-
- String out = serializationManager.buildSerializationData(contentSyncRoot, resourceToSerialize,
- repository.getRepositoryInfo());
-
- if (out != null) {
- // TODO - picking the base name based on serialization kind is not supported by the API...
- // so for now this is one big hack to have vlt-compatible checkouts
- IPath serializationPathPath = Path.fromPortableString(serializationPath);
- if (!resourceToSerialize.getPath().equals("/") && serializationPath.endsWith(".content.xml")) {
- String name = PathUtil.getName(path);
- if (name.indexOf(':') != -1) {
- name = '_' + name.replace(':', '_');
- }
- name += ".xml";
- serializationPath = serializationPath.replace(".content.xml", name);
-
- // some of the logic should be reused from AbstractArtifact
- serializationPathPath = Path.fromPortableString(serializationPath).removeFirstSegments(1);
- }
-
-
-
- createFile(project,
- projectRelativePath.append(serializationPathPath),
- out.getBytes("UTF-8"));
- }
- break;
- }
- }
-
- System.out.println("Children: " + resource.getChildren());
-
- if (serializationKind == SerializationKind.METADATA_FULL) {
- return;
- }
-
- for (ResourceProxy child : resource.getChildren()) {
-
- // TODO - still needed?
- if (Repository.NT_RESOURCE.equals(child.getProperties().get(Repository.JCR_PRIMARY_TYPE))) {
- continue;
- }
-
- if (filter != null) {
- FilterResult filterResult = filter.filter(contentSyncRoot, child.getPath(),
- repository.getRepositoryInfo());
- if (filterResult == FilterResult.DENY) {
- continue;
- }
- }
-
- crawlChildrenAndImport(repository, filter, child.getPath(), project,
- projectRelativePath, skm);
- }
- }
-
- private <T> T executeCommand(Command<T> command) throws RepositoryException {
-
- Result<T> result = command.execute();
- return result.get();
- }
-
- private void importFile(Repository repository, String path, IProject project, IPath destinationPath)
- throws RepositoryException, CoreException {
-
- System.out.println("importFile: " + path + " -> " + destinationPath);
-
- byte[] node = executeCommand(repository.newGetNodeCommand(path));
- createFile(project, destinationPath.append(path), node );
- }
-
- private void createFolder(IProject project, IPath destinationPath) throws CoreException{
-
- IFolder destinationFolder = project.getFolder(destinationPath);
- if ( destinationFolder.exists() )
- return;
-
- destinationFolder.create(true, true, null /* TODO progress monitor */);
- }
-
- private void createFile(IProject project, IPath path, byte[] node) throws CoreException {
-
- IFile destinationFile = project.getFile(path);
-
- System.out.println("Writing content file at " + path);
-
- if ( destinationFile.exists() ) {
- /* TODO progress monitor */
- destinationFile.setContents(new ByteArrayInputStream(node), IResource.KEEP_HISTORY, null);
- } else {
- /* TODO progress monitor */
- destinationFile.create(new ByteArrayInputStream(node), true, null);
- }
- }
}