]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.cms/src/org/argeo/cms/internal/backup/RepositoryMigration.java
Don't use context user to generate path.
[lgpl/argeo-commons.git] / org.argeo.cms / src / org / argeo / cms / internal / backup / RepositoryMigration.java
1 package org.argeo.cms.internal.backup;
2
3 import java.security.PrivilegedExceptionAction;
4 import java.util.Map;
5
6 import javax.jcr.Credentials;
7 import javax.jcr.Repository;
8 import javax.jcr.RepositoryException;
9 import javax.jcr.Session;
10
11 import org.argeo.cms.maintenance.DataMigration;
12 import org.argeo.jcr.JcrUtils;
13
14 /** Migrate data between two workspaces, at JCR level. */
15 public class RepositoryMigration implements PrivilegedExceptionAction<Boolean> {
16 private final Repository sourceRepository;
17 private final Repository targetRepository;
18 private final DataMigration dataMigration;
19
20 private Credentials sourceCredentials = null;
21 private Credentials targetCredentials = null;
22
23 public RepositoryMigration(Repository sourceRepository,
24 Repository targetRepository, DataMigration dataMigration) {
25 this.sourceRepository = sourceRepository;
26 this.targetRepository = targetRepository;
27 this.dataMigration = dataMigration;
28 }
29
30 @Override
31 public Boolean run() throws Exception {
32 Map<String, String> wk = dataMigration.workspacesToMigrate();
33 if (wk == null)
34 return migrate(sourceRepository, null, targetRepository, null);
35 else {
36 for (String sourceWorkspace : wk.keySet()) {
37 String targetWorkspace = wk.get(sourceWorkspace);
38 boolean ok = migrate(sourceRepository, sourceWorkspace,
39 targetRepository, targetWorkspace);
40 if (!ok)
41 return false;
42 }
43 return true;
44 }
45 }
46
47 protected final boolean migrate(Repository sourceRepository,
48 String sourceWorkspace, Repository targetRepository,
49 String targetWorkspace) throws RepositoryException {
50 Session source = null, target = null;
51 try {
52 source = sourceRepository.login(sourceCredentials, sourceWorkspace);
53 target = targetRepository.login(targetCredentials, targetWorkspace);
54 return dataMigration.migrate(source, target);
55 } finally {
56 JcrUtils.logoutQuietly(source);
57 JcrUtils.logoutQuietly(target);
58 }
59 }
60
61 public void setSourceCredentials(Credentials sourceCredentials) {
62 this.sourceCredentials = sourceCredentials;
63 }
64
65 public void setTargetCredentials(Credentials targetCredentials) {
66 this.targetCredentials = targetCredentials;
67 }
68
69 }