X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.maintenance%2Fsrc%2Forg%2Fargeo%2Fmaintenance%2Fbackup%2FLogicalRestore.java;h=a12bb41c907204c122dcf02be9a1032d0a88116e;hb=46cc2039ac20703c484aa994b830a2da113f2c97;hp=b430af6e1190d82818a6f2a0f6c0e0b8bca40f69;hpb=3c7803ca05e2b0276d635e64046d924d3f1884c9;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.maintenance/src/org/argeo/maintenance/backup/LogicalRestore.java b/org.argeo.maintenance/src/org/argeo/maintenance/backup/LogicalRestore.java index b430af6e1..a12bb41c9 100644 --- a/org.argeo.maintenance/src/org/argeo/maintenance/backup/LogicalRestore.java +++ b/org.argeo.maintenance/src/org/argeo/maintenance/backup/LogicalRestore.java @@ -11,13 +11,19 @@ import javax.jcr.Repository; import javax.jcr.RepositoryException; import javax.jcr.Session; -import org.apache.commons.io.FilenameUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.argeo.api.NodeConstants; +import org.argeo.api.NodeUtils; +import org.argeo.jcr.Jcr; import org.argeo.jcr.JcrException; import org.argeo.jcr.JcrUtils; import org.osgi.framework.BundleContext; /** Restores a backup in the format defined by {@link LogicalBackup}. */ public class LogicalRestore implements Runnable { + private final static Log log = LogFactory.getLog(LogicalRestore.class); + private final Repository repository; private final BundleContext bundleContext; private final Path basePath; @@ -31,15 +37,43 @@ public class LogicalRestore implements Runnable { @Override public void run() { Path workspaces = basePath.resolve(LogicalBackup.WORKSPACES_BASE); - try (DirectoryStream xmls = Files.newDirectoryStream(workspaces, "*.xml")) { - for (Path workspacePath : xmls) { - String workspaceName = FilenameUtils.getBaseName(workspacePath.getFileName().toString()); - Session session = JcrUtils.loginOrCreateWorkspace(repository, workspaceName); - try (InputStream in = Files.newInputStream(workspacePath)) { - session.getWorkspace().importXML("/", in, - ImportUUIDBehavior.IMPORT_UUID_COLLISION_REPLACE_EXISTING); - } finally { - JcrUtils.logoutQuietly(session); + try { + // import jcr:system first +// Session defaultSession = NodeUtils.openDataAdminSession(repository, null); +// try (DirectoryStream xmls = Files.newDirectoryStream( +// workspaces.resolve(NodeConstants.SYS_WORKSPACE + LogicalBackup.JCR_VERSION_STORAGE_PATH), +// "*.xml")) { +// for (Path xml : xmls) { +// try (InputStream in = Files.newInputStream(xml)) { +// defaultSession.getWorkspace().importXML(LogicalBackup.JCR_VERSION_STORAGE_PATH, in, +// ImportUUIDBehavior.IMPORT_UUID_COLLISION_REPLACE_EXISTING); +// if (log.isDebugEnabled()) +// log.debug("Restored " + xml + " to " + defaultSession.getWorkspace().getName() + ":"); +// } +// } +// } finally { +// Jcr.logout(defaultSession); +// } + + // non-system content + try (DirectoryStream workspaceDirs = Files.newDirectoryStream(workspaces)) { + for (Path workspacePath : workspaceDirs) { + String workspaceName = workspacePath.getFileName().toString(); + Session session = JcrUtils.loginOrCreateWorkspace(repository, workspaceName); + try (DirectoryStream xmls = Files.newDirectoryStream(workspacePath, "*.xml")) { + xmls: for (Path xml : xmls) { + if (xml.getFileName().toString().startsWith("rep:")) + continue xmls; + try (InputStream in = Files.newInputStream(xml)) { + session.getWorkspace().importXML("/", in, + ImportUUIDBehavior.IMPORT_UUID_COLLISION_REPLACE_EXISTING); + if (log.isDebugEnabled()) + log.debug("Restored " + xml + " to workspace " + workspaceName); + } + } + } finally { + Jcr.logout(session); + } } } } catch (IOException e) {