Author: tomekr
Date: Fri Sep 23 10:15:21 2016
New Revision: 1762044

URL: http://svn.apache.org/viewvc?rev=1762044&view=rev
Log:
OAK-4849: Refactor the MigrationCliArguments from implicit to explicit

Modified:
    
jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/CliUtils.java
    
jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/MigrationFactory.java
    
jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/OakUpgrade.java
    
jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/parser/DatastoreArguments.java
    
jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/parser/MigrationCliArguments.java
    
jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/parser/MigrationOptions.java
    
jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/parser/StoreArguments.java
    
jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/parser/StoreType.java
    
jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/blob/CopyBinariesTest.java
    
jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/parser/StoreArgumentsTest.java

Modified: 
jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/CliUtils.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/CliUtils.java?rev=1762044&r1=1762043&r2=1762044&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/CliUtils.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/CliUtils.java
 Fri Sep 23 10:15:21 2016
@@ -20,35 +20,15 @@ import java.io.IOException;
 import java.io.InputStream;
 
 import org.apache.commons.io.IOUtils;
-import org.apache.jackrabbit.oak.upgrade.cli.parser.CliArgumentException;
-import org.apache.jackrabbit.oak.upgrade.cli.parser.MigrationCliArguments;
-import org.apache.jackrabbit.oak.upgrade.cli.parser.OptionParserFactory;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import com.google.common.io.Closer;
 
-import joptsimple.OptionParser;
-import joptsimple.OptionSet;
-
 public class CliUtils {
 
     private static final Logger log = 
LoggerFactory.getLogger(OakUpgrade.class);
 
-    public static MigrationCliArguments parseOrExit(OptionParser op, String... 
args) {
-        try {
-            OptionSet options = op.parse(args);
-            if (options.has(OptionParserFactory.HELP) || 
options.nonOptionArguments().isEmpty()) {
-                displayUsage();
-                return null;
-            }
-            return new MigrationCliArguments(options);
-        } catch (Exception e) {
-            System.exit(getReturnCode(e));
-            return null;
-        }
-    }
-
     public static void displayUsage() throws IOException {
         System.out.println(getUsage().replace("${command}", "java -jar 
oak-run-*-jr2.jar upgrade"));
     }
@@ -62,18 +42,6 @@ public class CliUtils {
         }
     }
 
-    public static int getReturnCode(Exception e) {
-        if (e.getMessage() != null) {
-            System.err.println(e.getMessage());
-        }
-        if (e instanceof CliArgumentException) {
-            return ((CliArgumentException) e).getExitCode();
-        } else {
-            e.printStackTrace(System.err);
-            return 1;
-        }
-    }
-
     public static void handleSigInt(final Closer closer) {
         Runtime.getRuntime().addShutdownHook(new Thread() {
             @Override

Modified: 
jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/MigrationFactory.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/MigrationFactory.java?rev=1762044&r1=1762043&r2=1762044&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/MigrationFactory.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/MigrationFactory.java
 Fri Sep 23 10:15:21 2016
@@ -29,6 +29,7 @@ import org.apache.jackrabbit.oak.spi.com
 import org.apache.jackrabbit.oak.spi.state.NodeStore;
 import org.apache.jackrabbit.oak.upgrade.RepositorySidegrade;
 import org.apache.jackrabbit.oak.upgrade.RepositoryUpgrade;
+import org.apache.jackrabbit.oak.upgrade.cli.parser.CliArgumentException;
 import org.apache.jackrabbit.oak.upgrade.cli.parser.DatastoreArguments;
 import org.apache.jackrabbit.oak.upgrade.cli.parser.MigrationOptions;
 import org.apache.jackrabbit.oak.upgrade.cli.parser.StoreArguments;
@@ -42,37 +43,40 @@ public class MigrationFactory {
 
     protected final StoreArguments stores;
 
+    protected final DatastoreArguments datastores;
+
     protected final Closer closer;
 
-    public MigrationFactory(MigrationOptions options, StoreArguments stores, 
Closer closer) {
+    public MigrationFactory(MigrationOptions options, StoreArguments stores, 
DatastoreArguments datastores, Closer closer) {
         this.options = options;
         this.stores = stores;
+        this.datastores = datastores;
         this.closer = closer;
     }
 
-    public RepositoryUpgrade createUpgrade() throws IOException, 
RepositoryException {
+    public RepositoryUpgrade createUpgrade() throws IOException, 
RepositoryException, CliArgumentException {
         RepositoryContext src = stores.getSrcStore().create(closer);
         BlobStore srcBlobStore = new DataStoreBlobStore(src.getDataStore());
         NodeStore dstStore = createTarget(closer, srcBlobStore);
         return createUpgrade(src, dstStore);
     }
 
-    public RepositorySidegrade createSidegrade() throws IOException {
-        BlobStore srcBlobStore = 
stores.getDatastores().getSrcBlobStore().create(closer);
+    public RepositorySidegrade createSidegrade() throws IOException, 
CliArgumentException {
+        BlobStore srcBlobStore = datastores.getSrcBlobStore().create(closer);
         NodeStore srcStore = stores.getSrcStore().create(srcBlobStore, closer);
         NodeStore dstStore = createTarget(closer, srcBlobStore);
         return createSidegrade(srcStore, dstStore);
     }
 
     protected NodeStore createTarget(Closer closer, BlobStore srcBlobStore) 
throws IOException {
-        BlobStore dstBlobStore = 
stores.getDatastores().getDstBlobStore(srcBlobStore).create(closer);
+        BlobStore dstBlobStore = 
datastores.getDstBlobStore(srcBlobStore).create(closer);
         NodeStore dstStore = stores.getDstStore().create(dstBlobStore, closer);
         return dstStore;
     }
 
     protected RepositoryUpgrade createUpgrade(RepositoryContext source, 
NodeStore dstStore) {
         RepositoryUpgrade upgrade = new RepositoryUpgrade(source, dstStore);
-        
upgrade.setCopyBinariesByReference(stores.getDatastores().getBlobMigrationCase()
 == DatastoreArguments.BlobMigrationCase.COPY_REFERENCES);
+        upgrade.setCopyBinariesByReference(datastores.getBlobMigrationCase() 
== DatastoreArguments.BlobMigrationCase.COPY_REFERENCES);
         upgrade.setCopyVersions(options.getCopyVersions());
         upgrade.setCopyOrphanedVersions(options.getCopyOrphanedVersions());
         if (options.getIncludePaths() != null) {

Modified: 
jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/OakUpgrade.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/OakUpgrade.java?rev=1762044&r1=1762043&r2=1762044&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/OakUpgrade.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/OakUpgrade.java
 Fri Sep 23 10:15:21 2016
@@ -25,8 +25,11 @@ import javax.jcr.RepositoryException;
 import com.google.common.collect.Lists;
 import com.google.common.io.Closer;
 
+import joptsimple.OptionSet;
 import org.apache.jackrabbit.oak.spi.lifecycle.CompositeInitializer;
 import org.apache.jackrabbit.oak.spi.lifecycle.RepositoryInitializer;
+import org.apache.jackrabbit.oak.upgrade.cli.parser.CliArgumentException;
+import org.apache.jackrabbit.oak.upgrade.cli.parser.DatastoreArguments;
 import org.apache.jackrabbit.oak.upgrade.cli.parser.MigrationCliArguments;
 import org.apache.jackrabbit.oak.upgrade.cli.parser.MigrationOptions;
 import org.apache.jackrabbit.oak.upgrade.cli.parser.OptionParserFactory;
@@ -35,19 +38,39 @@ import org.apache.jackrabbit.oak.upgrade
 public class OakUpgrade {
 
     public static void main(String... args) throws IOException {
-        MigrationCliArguments cliArguments = 
CliUtils.parseOrExit(OptionParserFactory.create(), args);
-        if (cliArguments == null) {
-            return;
+        OptionSet options = OptionParserFactory.create().parse(args);
+        try {
+            MigrationCliArguments cliArguments = new 
MigrationCliArguments(options);
+            if (cliArguments.hasOption(OptionParserFactory.HELP) || 
cliArguments.getArguments().isEmpty()) {
+                CliUtils.displayUsage();
+                return;
+            }
+            migrate(cliArguments);
+        } catch(CliArgumentException e) {
+            if (e.getMessage() != null) {
+                System.err.println(e.getMessage());
+            }
+            System.exit(e.getExitCode());
         }
-        migrate(cliArguments);
     }
 
-    public static void migrate(MigrationCliArguments argumentParser) throws 
IOException {
-        MigrationOptions options = argumentParser.getOptions();
-        StoreArguments stores = argumentParser.getStoreArguments();
+    public static void migrate(MigrationCliArguments argumentParser) throws 
IOException, CliArgumentException {
+        MigrationOptions options = new MigrationOptions(argumentParser);
+        options.logOptions();
+
+        StoreArguments stores = new StoreArguments(options, 
argumentParser.getArguments());
+        stores.logOptions();
+
+        boolean srcEmbedded = stores.srcUsesEmbeddedDatastore();
+        DatastoreArguments datastores = new DatastoreArguments(options, 
stores, srcEmbedded);
+
+        migrate(options, stores, datastores);
+    }
+
+    public static void migrate(MigrationOptions options, StoreArguments 
stores, DatastoreArguments datastores) throws IOException, CliArgumentException 
{
         Closer closer = Closer.create();
         CliUtils.handleSigInt(closer);
-        MigrationFactory factory = new MigrationFactory(options, stores, 
closer);
+        MigrationFactory factory = new MigrationFactory(options, stores, 
datastores, closer);
         try {
             if (stores.getSrcStore().isJcr2()) {
                 upgrade(factory);
@@ -61,11 +84,11 @@ public class OakUpgrade {
         }
     }
 
-    private static void upgrade(MigrationFactory migrationFactory) throws 
IOException, RepositoryException {
+    private static void upgrade(MigrationFactory migrationFactory) throws 
IOException, RepositoryException, CliArgumentException {
         migrationFactory.createUpgrade().copy(createCompositeInitializer());
     }
 
-    private static void sidegrade(MigrationFactory migrationFactory) throws 
IOException, RepositoryException {
+    private static void sidegrade(MigrationFactory migrationFactory) throws 
IOException, RepositoryException, CliArgumentException {
         migrationFactory.createSidegrade().copy();
     }
 

Modified: 
jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/parser/DatastoreArguments.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/parser/DatastoreArguments.java?rev=1762044&r1=1762043&r2=1762044&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/parser/DatastoreArguments.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/parser/DatastoreArguments.java
 Fri Sep 23 10:15:21 2016
@@ -32,16 +32,6 @@ import java.io.IOException;
 import java.util.Map;
 
 import static com.google.common.collect.Maps.newHashMap;
-import static 
org.apache.jackrabbit.oak.upgrade.cli.parser.OptionParserFactory.COPY_BINARIES;
-import static 
org.apache.jackrabbit.oak.upgrade.cli.parser.OptionParserFactory.DST_FBS;
-import static 
org.apache.jackrabbit.oak.upgrade.cli.parser.OptionParserFactory.DST_FDS;
-import static 
org.apache.jackrabbit.oak.upgrade.cli.parser.OptionParserFactory.DST_S3;
-import static 
org.apache.jackrabbit.oak.upgrade.cli.parser.OptionParserFactory.DST_S3_CONFIG;
-import static 
org.apache.jackrabbit.oak.upgrade.cli.parser.OptionParserFactory.IGNORE_MISSING_BINARIES;
-import static 
org.apache.jackrabbit.oak.upgrade.cli.parser.OptionParserFactory.SRC_FBS;
-import static 
org.apache.jackrabbit.oak.upgrade.cli.parser.OptionParserFactory.SRC_FDS;
-import static 
org.apache.jackrabbit.oak.upgrade.cli.parser.OptionParserFactory.SRC_S3;
-import static 
org.apache.jackrabbit.oak.upgrade.cli.parser.OptionParserFactory.SRC_S3_CONFIG;
 import static 
org.apache.jackrabbit.oak.upgrade.cli.parser.StoreType.JCR2_DIR_XML;
 
 /**
@@ -84,11 +74,14 @@ public class DatastoreArguments {
 
     private final BlobMigrationCase blobMigrationCase;
 
-    private final MigrationCliArguments parser;
+    private final MigrationOptions options;
 
-    public DatastoreArguments(MigrationCliArguments parser, StoreArguments 
storeArguments) throws CliArgumentException {
+    private final boolean srcEmbedded;
+
+    public DatastoreArguments(MigrationOptions options, StoreArguments 
storeArguments, boolean srcEmbedded) throws CliArgumentException {
         this.storeArguments = storeArguments;
-        this.parser = parser;
+        this.options = options;
+        this.srcEmbedded = srcEmbedded;
 
         try {
             blobMigrationCase = discoverBlobMigrationCase();
@@ -102,8 +95,8 @@ public class DatastoreArguments {
         }
 
         try {
-            definedSrcBlob = isSrcBlobStoreDefined() ? 
getDefinedSrcBlobStore() : null;
-            definedDstBlob = isDstBlobStoreDefined() ? 
getDefinedDstBlobStore() : null;
+            definedSrcBlob = options.isSrcBlobStoreDefined() ? 
getDefinedSrcBlobStore() : null;
+            definedDstBlob = options.isDstBlobStoreDefined() ? 
getDefinedDstBlobStore() : null;
         } catch(IOException e) {
             log.error("Can't read the blob configuration", e);
             throw new CliArgumentException(1);
@@ -114,7 +107,7 @@ public class DatastoreArguments {
 
     public BlobStoreFactory getSrcBlobStore() throws IOException {
         BlobStoreFactory result;
-        if (isSrcBlobStoreDefined()) {
+        if (options.isSrcBlobStoreDefined()) {
             result = definedSrcBlob;
         } else if (blobMigrationCase == BlobMigrationCase.COPY_REFERENCES) {
             result = new MissingBlobStoreFactory();
@@ -127,9 +120,9 @@ public class DatastoreArguments {
 
     public BlobStoreFactory getDstBlobStore(BlobStore srcBlobStore) throws 
IOException {
         BlobStoreFactory result;
-        if (isDstBlobStoreDefined()) {
+        if (options.isDstBlobStoreDefined()) {
             result = definedDstBlob;
-        } else if (blobMigrationCase == BlobMigrationCase.COPY_REFERENCES && 
(isSrcBlobStoreDefined() || storeArguments.getSrcType() == JCR2_DIR_XML)) {
+        } else if (blobMigrationCase == BlobMigrationCase.COPY_REFERENCES && 
(options.isSrcBlobStoreDefined() || storeArguments.getSrcType() == 
JCR2_DIR_XML)) {
             result = new ConstantBlobStoreFactory(srcBlobStore);
         } else if (blobMigrationCase == BlobMigrationCase.COPY_REFERENCES) {
             result = new MissingBlobStoreFactory();
@@ -141,34 +134,26 @@ public class DatastoreArguments {
         return result;
     }
 
-    public boolean isSrcBlobStoreDefined() {
-        return parser.hasOption(SRC_FBS) || (parser.hasOption(SRC_S3_CONFIG) 
&& parser.hasOption(SRC_S3)) || (parser.hasOption(SRC_FDS));
-    }
-
-    public boolean isDstBlobStoreDefined() {
-        return parser.hasOption(DST_FBS) || (parser.hasOption(DST_S3_CONFIG) 
&& parser.hasOption(DST_S3)) || parser.hasOption(DST_FDS);
-    }
-
     private BlobStoreFactory getDefinedSrcBlobStore() throws IOException {
-        boolean ignoreMissingBinaries = 
parser.hasOption(IGNORE_MISSING_BINARIES);
-        if (parser.hasOption(SRC_FBS)) {
-            return new FileBlobStoreFactory(parser.getOption(SRC_FBS));
-        } else if (parser.hasOption(SRC_S3_CONFIG) && 
parser.hasOption(SRC_S3)) {
-            return new S3DataStoreFactory(parser.getOption(SRC_S3_CONFIG), 
parser.getOption(SRC_S3), ignoreMissingBinaries);
-        } else if (parser.hasOption(SRC_FDS)) {
-            return new FileDataStoreFactory(parser.getOption(SRC_FDS), 
ignoreMissingBinaries);
+        boolean ignoreMissingBinaries = options.isIgnoreMissingBinaries();
+        if (options.isSrcFbs()) {
+            return new FileBlobStoreFactory(options.getSrcFbs());
+        } else if (options.isSrcS3()) {
+            return new S3DataStoreFactory(options.getSrcS3Config(), 
options.getSrcS3(), ignoreMissingBinaries);
+        } else if (options.isSrcFds()) {
+            return new FileDataStoreFactory(options.getSrcFds(), 
ignoreMissingBinaries);
         } else {
             return null;
         }
     }
 
     private BlobStoreFactory getDefinedDstBlobStore() throws IOException {
-        if (parser.hasOption(DST_FBS)) {
-            return new FileBlobStoreFactory(parser.getOption(DST_FBS));
-        } else if (parser.hasOption(DST_S3_CONFIG) && 
parser.hasOption(DST_S3)) {
-            return new S3DataStoreFactory(parser.getOption(DST_S3_CONFIG), 
parser.getOption(DST_S3), false);
-        } else if (parser.hasOption(DST_FDS)) {
-            return new FileDataStoreFactory(parser.getOption(DST_FDS), false);
+        if (options.isDstFbs()) {
+            return new FileBlobStoreFactory(options.getDstFbs());
+        } else if (options.isDstS3()) {
+            return new S3DataStoreFactory(options.getDstS3Config(), 
options.getDstS3(), false);
+        } else if (options.isDstFds()) {
+            return new FileDataStoreFactory(options.getDstFds(), false);
         } else {
             return null;
         }
@@ -211,10 +196,9 @@ public class DatastoreArguments {
     }
 
     private BlobMigrationCase discoverBlobMigrationCase() throws IOException {
-        boolean srcDefined = isSrcBlobStoreDefined() || 
storeArguments.getSrcType() == JCR2_DIR_XML;
-        boolean dstDefined = isDstBlobStoreDefined();
-        boolean srcEmbedded = !storeArguments.srcHasExternalBlobReferences();
-        boolean copyBinaries = parser.hasOption(COPY_BINARIES);
+        boolean srcDefined = options.isSrcBlobStoreDefined() || 
storeArguments.getSrcType() == JCR2_DIR_XML;
+        boolean dstDefined = options.isDstBlobStoreDefined();
+        boolean copyBinaries = options.isCopyBinaries();
 
         boolean srcSegment = storeArguments.getSrcType().isSegment();
         boolean dstSegment = storeArguments.getDstType().isSegment();

Modified: 
jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/parser/MigrationCliArguments.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/parser/MigrationCliArguments.java?rev=1762044&r1=1762043&r2=1762044&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/parser/MigrationCliArguments.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/parser/MigrationCliArguments.java
 Fri Sep 23 10:15:21 2016
@@ -27,15 +27,9 @@ public final class MigrationCliArguments
 
     private final List<String> arguments;
 
-    private final MigrationOptions migrationOptions;
-
-    private final StoreArguments storeArguments;
-
     public MigrationCliArguments(OptionSet options) throws 
CliArgumentException {
         this.options = options;
-        arguments = getNonOptionArguments();
-        migrationOptions = new MigrationOptions(this);
-        storeArguments = new StoreArguments(this);
+        this.arguments = getNonOptionArguments();
     }
 
     private List<String> getNonOptionArguments() {
@@ -67,15 +61,7 @@ public final class MigrationCliArguments
         }
     }
 
-    public MigrationOptions getOptions() {
-        return migrationOptions;
-    }
-
-    public StoreArguments getStoreArguments() {
-        return storeArguments;
-    }
-
-    List<String> getArguments() {
+    public List<String> getArguments() {
         return arguments;
     }
 }

Modified: 
jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/parser/MigrationOptions.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/parser/MigrationOptions.java?rev=1762044&r1=1762043&r2=1762044&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/parser/MigrationOptions.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/parser/MigrationOptions.java
 Fri Sep 23 10:15:21 2016
@@ -21,6 +21,7 @@ import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.Calendar;
 
+import org.apache.commons.lang.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -58,6 +59,30 @@ public class MigrationOptions {
 
     private final boolean ignoreMissingBinaries;
 
+    private final String srcUser;
+
+    private final String srcPassword;
+
+    private final String dstUser;
+
+    private final String dstPassword;
+
+    private final String srcFbs;
+
+    private final String srcFds;
+
+    private final String srcS3Config;
+
+    private final String srcS3;
+
+    private final String dstFbs;
+
+    private final String dstFds;
+
+    private final String dstS3Config;
+
+    private final String dstS3;
+
     public MigrationOptions(MigrationCliArguments args) {
         this.disableMmap = args.hasOption(OptionParserFactory.DISABLE_MMAP);
         this.copyBinaries = args.hasOption(OptionParserFactory.COPY_BINARIES);
@@ -79,16 +104,30 @@ public class MigrationOptions {
         } else {
             this.copyOrphanedVersions = epoch;
         }
-        this.includePaths = 
split(args.getOption(OptionParserFactory.INCLUDE_PATHS));
-        this.excludePaths = 
split(args.getOption(OptionParserFactory.EXCLUDE_PATHS));
-        this.mergePaths = 
split(args.getOption(OptionParserFactory.MERGE_PATHS));
+        this.includePaths = 
args.getOptionList(OptionParserFactory.INCLUDE_PATHS);
+        this.excludePaths = 
args.getOptionList(OptionParserFactory.EXCLUDE_PATHS);
+        this.mergePaths = args.getOptionList(OptionParserFactory.MERGE_PATHS);
         this.includeIndex = args.hasOption(OptionParserFactory.INCLUDE_INDEX);
         this.failOnError = args.hasOption(OptionParserFactory.FAIL_ON_ERROR);
         this.earlyShutdown = 
args.hasOption(OptionParserFactory.EARLY_SHUTDOWN);
         this.skipInitialization = 
args.hasOption(OptionParserFactory.SKIP_INIT);
         this.skipNameCheck = 
args.hasOption(OptionParserFactory.SKIP_NAME_CHECK);
         this.ignoreMissingBinaries = 
args.hasOption(OptionParserFactory.IGNORE_MISSING_BINARIES);
-        logOptions();
+
+        this.srcUser = args.getOption(OptionParserFactory.SRC_USER);
+        this.srcPassword = args.getOption(OptionParserFactory.SRC_USER);
+        this.dstUser = args.getOption(OptionParserFactory.DST_USER);
+        this.dstPassword = args.getOption(OptionParserFactory.DST_PASSWORD);
+
+        this.srcFbs = args.getOption(OptionParserFactory.SRC_FBS);
+        this.srcFds = args.getOption(OptionParserFactory.SRC_FDS);
+        this.srcS3 = args.getOption(OptionParserFactory.SRC_S3);
+        this.srcS3Config = args.getOption(OptionParserFactory.SRC_S3_CONFIG);
+
+        this.dstFbs = args.getOption(OptionParserFactory.DST_FBS);
+        this.dstFds = args.getOption(OptionParserFactory.DST_FDS);
+        this.dstS3 = args.getOption(OptionParserFactory.DST_S3);
+        this.dstS3Config = args.getOption(OptionParserFactory.DST_S3_CONFIG);
     }
 
     public boolean isCopyBinaries() {
@@ -147,7 +186,87 @@ public class MigrationOptions {
         return ignoreMissingBinaries;
     }
 
-    private void logOptions() {
+    public String getSrcUser() {
+        return srcUser;
+    }
+
+    public String getSrcPassword() {
+        return srcPassword;
+    }
+
+    public String getDstUser() {
+        return dstUser;
+    }
+
+    public String getDstPassword() {
+        return dstPassword;
+    }
+
+    public String getSrcFbs() {
+        return srcFbs;
+    }
+
+    public String getSrcFds() {
+        return srcFds;
+    }
+
+    public String getSrcS3Config() {
+        return srcS3Config;
+    }
+
+    public String getSrcS3() {
+        return srcS3;
+    }
+
+    public String getDstFbs() {
+        return dstFbs;
+    }
+
+    public String getDstFds() {
+        return dstFds;
+    }
+
+    public String getDstS3Config() {
+        return dstS3Config;
+    }
+
+    public String getDstS3() {
+        return dstS3;
+    }
+
+    public boolean isSrcFds() {
+        return StringUtils.isNotBlank(srcFds);
+    }
+
+    public boolean isSrcFbs() {
+        return StringUtils.isNotBlank(srcFbs);
+    }
+
+    public boolean isSrcS3() {
+        return StringUtils.isNotBlank(srcS3) && 
StringUtils.isNotBlank(srcS3Config);
+    }
+
+    public boolean isDstFds() {
+        return StringUtils.isNotBlank(dstFds);
+    }
+
+    public boolean isDstFbs() {
+        return StringUtils.isNotBlank(dstFbs);
+    }
+
+    public boolean isDstS3() {
+        return StringUtils.isNotBlank(dstS3) && 
StringUtils.isNotBlank(dstS3Config);
+    }
+
+    public boolean isSrcBlobStoreDefined() {
+        return isSrcFbs() || isSrcFds() || isSrcS3();
+    }
+
+    public boolean isDstBlobStoreDefined() {
+        return isDstFbs() || isDstFds() || isDstS3();
+    }
+
+    public void logOptions() {
         if (disableMmap) {
             log.info("Disabling memory mapped file access for Segment Store");
         }
@@ -200,14 +319,6 @@ public class MigrationOptions {
 
     }
 
-    private static String[] split(String list) {
-        if (list == null) {
-            return null;
-        } else {
-            return list.split(",");
-        }
-    }
-
     private static Calendar parseVersionCopyArgument(String string) {
         final Calendar calendar;
 

Modified: 
jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/parser/StoreArguments.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/parser/StoreArguments.java?rev=1762044&r1=1762043&r2=1762044&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/parser/StoreArguments.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/parser/StoreArguments.java
 Fri Sep 23 10:15:21 2016
@@ -44,44 +44,37 @@ public class StoreArguments {
 
     private static final Logger log = 
LoggerFactory.getLogger(StoreArguments.class);
 
-    private final MigrationCliArguments parser;
+    private final MigrationOptions options;
 
     private final StoreDescriptor src;
 
     private final StoreDescriptor dst;
 
-    private final DatastoreArguments datastores;
-
     private Boolean srcHasExternalBlobRefs;
 
-    public StoreArguments(MigrationCliArguments parser) throws 
CliArgumentException {
-        this.parser = parser;
-
-        List<StoreDescriptor> descriptors = 
createStoreDescriptors(parser.getArguments());
+    public StoreArguments(MigrationOptions options, List<String> arguments) 
throws CliArgumentException {
+        this.options = options;
+        List<StoreDescriptor> descriptors = createStoreDescriptors(arguments);
 
         src = descriptors.get(0);
         dst = descriptors.get(1);
+    }
 
+    public void logOptions() {
         log.info("Source: {}", src);
         log.info("Destination: {}", dst);
 
         if (dst.getType() == SEGMENT) {
             logSegmentVersion();
         }
-
-        datastores = new DatastoreArguments(parser, this);
     }
 
     public StoreFactory getSrcStore() {
-        return src.getFactory(MigrationDirection.SRC, parser);
+        return src.getFactory(MigrationDirection.SRC, options);
     }
 
     public StoreFactory getDstStore() {
-        return dst.getFactory(MigrationDirection.DST, parser);
-    }
-
-    public DatastoreArguments getDatastores() {
-        return datastores;
+        return dst.getFactory(MigrationDirection.DST, options);
     }
 
     public StoreType getSrcType() {
@@ -111,11 +104,11 @@ public class StoreArguments {
         return src.getPaths();
     }
 
-    boolean srcHasExternalBlobReferences() throws IOException {
+    public boolean srcUsesEmbeddedDatastore() throws IOException {
         if (srcHasExternalBlobRefs == null) {
-            srcHasExternalBlobRefs = 
src.getFactory(StoreArguments.MigrationDirection.SRC, 
parser).hasExternalBlobReferences();
+            srcHasExternalBlobRefs = 
src.getFactory(StoreArguments.MigrationDirection.SRC, 
options).hasExternalBlobReferences();
         }
-        return srcHasExternalBlobRefs;
+        return !srcHasExternalBlobRefs;
     }
 
     private static List<StoreDescriptor> createStoreDescriptors(List<String> 
arguments) throws CliArgumentException {
@@ -250,8 +243,8 @@ public class StoreArguments {
             return type;
         }
 
-        public StoreFactory getFactory(MigrationDirection direction, 
MigrationCliArguments arguments) {
-            return type.createFactory(paths, direction, arguments);
+        public StoreFactory getFactory(MigrationDirection direction, 
MigrationOptions options) {
+            return type.createFactory(paths, direction, options);
         }
 
         @Override

Modified: 
jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/parser/StoreType.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/parser/StoreType.java?rev=1762044&r1=1762043&r2=1762044&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/parser/StoreType.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-upgrade/src/main/java/org/apache/jackrabbit/oak/upgrade/cli/parser/StoreType.java
 Fri Sep 23 10:15:21 2016
@@ -37,7 +37,7 @@ public enum StoreType {
         }
 
         @Override
-        public StoreFactory createFactory(String[] paths, MigrationDirection 
direction, MigrationCliArguments arguments) {
+        public StoreFactory createFactory(String[] paths, MigrationDirection 
direction, MigrationOptions migrationOptions) {
             throw new UnsupportedOperationException();
         }
 
@@ -53,7 +53,7 @@ public enum StoreType {
         }
 
         @Override
-        public StoreFactory createFactory(String[] paths, MigrationDirection 
direction, MigrationCliArguments arguments) {
+        public StoreFactory createFactory(String[] paths, MigrationDirection 
direction, MigrationOptions migrationOptions) {
             throw new UnsupportedOperationException();
         }
 
@@ -69,7 +69,7 @@ public enum StoreType {
         }
 
         @Override
-        public StoreFactory createFactory(String[] paths, MigrationDirection 
direction, MigrationCliArguments arguments) {
+        public StoreFactory createFactory(String[] paths, MigrationDirection 
direction, MigrationOptions migrationOptions) {
             return new StoreFactory(new Jackrabbit2Factory(paths[0], 
paths[1]));
         }
 
@@ -85,17 +85,17 @@ public enum StoreType {
         }
 
         @Override
-        public StoreFactory createFactory(String[] paths, MigrationDirection 
direction, MigrationCliArguments arguments) {
+        public StoreFactory createFactory(String[] paths, MigrationDirection 
direction, MigrationOptions migrationOptions) {
             String username, password;
             if (direction == MigrationDirection.SRC) {
-                username = arguments.getOption(OptionParserFactory.SRC_USER);
-                password = 
arguments.getOption(OptionParserFactory.SRC_PASSWORD);
+                username = migrationOptions.getSrcUser();
+                password = migrationOptions.getSrcPassword();
             } else {
-                username = arguments.getOption(OptionParserFactory.DST_USER);
-                password = 
arguments.getOption(OptionParserFactory.DST_PASSWORD);
+                username = migrationOptions.getDstUser();
+                password = migrationOptions.getDstPassword();
             }
             return new StoreFactory(
-                    new JdbcFactory(paths[0], 
arguments.getOptions().getCacheSizeInMB(), username, password));
+                    new JdbcFactory(paths[0], 
migrationOptions.getCacheSizeInMB(), username, password));
         }
 
         @Override
@@ -110,8 +110,8 @@ public enum StoreType {
         }
 
         @Override
-        public StoreFactory createFactory(String[] paths, MigrationDirection 
direction, MigrationCliArguments arguments) {
-            return new StoreFactory(new MongoFactory(paths[0], 
arguments.getOptions().getCacheSizeInMB()));
+        public StoreFactory createFactory(String[] paths, MigrationDirection 
direction, MigrationOptions migrationOptions) {
+            return new StoreFactory(new MongoFactory(paths[0], 
migrationOptions.getCacheSizeInMB()));
         }
 
         @Override
@@ -126,9 +126,9 @@ public enum StoreType {
         }
 
         @Override
-        public StoreFactory createFactory(String[] paths, MigrationDirection 
direction, MigrationCliArguments arguments) {
+        public StoreFactory createFactory(String[] paths, MigrationDirection 
direction, MigrationOptions migrationOptions) {
             String path = removeStart(paths[0], SEGMENT_OLD_PREFIX);
-            return new StoreFactory(new SegmentFactory(path, 
arguments.getOptions().isDisableMmap()));
+            return new StoreFactory(new SegmentFactory(path, 
migrationOptions.isDisableMmap()));
         }
 
         @Override
@@ -143,8 +143,8 @@ public enum StoreType {
         }
 
         @Override
-        public StoreFactory createFactory(String[] paths, MigrationDirection 
direction, MigrationCliArguments arguments) {
-            return new StoreFactory(new SegmentTarFactory(paths[0], 
arguments.getOptions().isDisableMmap()));
+        public StoreFactory createFactory(String[] paths, MigrationDirection 
direction, MigrationOptions migrationOptions) {
+            return new StoreFactory(new SegmentTarFactory(paths[0], 
migrationOptions.isDisableMmap()));
         }
 
         @Override
@@ -164,7 +164,7 @@ public enum StoreType {
 
     public abstract boolean matches(String argument);
 
-    public abstract StoreFactory createFactory(String[] paths, 
MigrationDirection direction, MigrationCliArguments arguments);
+    public abstract StoreFactory createFactory(String[] paths, 
MigrationDirection direction, MigrationOptions migrationOptions);
 
     public abstract boolean isSupportLongNames();
 

Modified: 
jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/blob/CopyBinariesTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/blob/CopyBinariesTest.java?rev=1762044&r1=1762043&r2=1762044&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/blob/CopyBinariesTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/blob/CopyBinariesTest.java
 Fri Sep 23 10:15:21 2016
@@ -25,7 +25,6 @@ import java.util.Collection;
 import java.util.List;
 
 import com.google.common.base.Joiner;
-import joptsimple.OptionSet;
 import org.apache.jackrabbit.oak.spi.state.NodeStore;
 import org.apache.jackrabbit.oak.upgrade.cli.AbstractOak2OakTest;
 import org.apache.jackrabbit.oak.upgrade.cli.OakUpgrade;
@@ -38,7 +37,9 @@ import org.apache.jackrabbit.oak.upgrade
 import org.apache.jackrabbit.oak.upgrade.cli.parser.CliArgumentException;
 import org.apache.jackrabbit.oak.upgrade.cli.parser.DatastoreArguments;
 import org.apache.jackrabbit.oak.upgrade.cli.parser.MigrationCliArguments;
+import org.apache.jackrabbit.oak.upgrade.cli.parser.MigrationOptions;
 import org.apache.jackrabbit.oak.upgrade.cli.parser.OptionParserFactory;
+import org.apache.jackrabbit.oak.upgrade.cli.parser.StoreArguments;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -180,10 +181,12 @@ public class CopyBinariesTest extends Ab
         String[] args = getArgs();
         log.info("oak2oak {}", Joiner.on(' ').join(args));
         try {
-            OptionSet options = OptionParserFactory.create().parse(args);
-            MigrationCliArguments cliArgs = new MigrationCliArguments(options);
-            OakUpgrade.migrate(cliArgs);
-            assertEquals(blobMigrationCase, 
cliArgs.getStoreArguments().getDatastores().getBlobMigrationCase());
+            MigrationCliArguments cliArgs = new 
MigrationCliArguments(OptionParserFactory.create().parse(args));
+            MigrationOptions options = new MigrationOptions(cliArgs);
+            StoreArguments stores = new StoreArguments(options, 
cliArgs.getArguments());
+            DatastoreArguments datastores = new DatastoreArguments(options, 
stores, stores.srcUsesEmbeddedDatastore());
+            OakUpgrade.migrate(options, stores, datastores);
+            assertEquals(blobMigrationCase, datastores.getBlobMigrationCase());
         } catch(CliArgumentException e) {
             if (blobMigrationCase == 
DatastoreArguments.BlobMigrationCase.UNSUPPORTED) {
                 return;

Modified: 
jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/parser/StoreArgumentsTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/parser/StoreArgumentsTest.java?rev=1762044&r1=1762043&r2=1762044&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/parser/StoreArgumentsTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-upgrade/src/test/java/org/apache/jackrabbit/oak/upgrade/cli/parser/StoreArgumentsTest.java
 Fri Sep 23 10:15:21 2016
@@ -16,14 +16,14 @@
  */
 package org.apache.jackrabbit.oak.upgrade.cli.parser;
 
-import joptsimple.OptionSet;
 import org.junit.Test;
 
 public class StoreArgumentsTest {
 
     @Test(expected =  CliArgumentException.class)
     public void testSameRepositoryFails() throws CliArgumentException {
-        OptionSet options = OptionParserFactory.create().parse( "my/repo", 
"my/repo");
-        new MigrationCliArguments(options);
+        MigrationCliArguments parsed = new 
MigrationCliArguments(OptionParserFactory.create().parse("my/repo", "my/repo"));
+        MigrationOptions options = new MigrationOptions(parsed);
+        new StoreArguments(options, parsed.getArguments());
     }
 }



Reply via email to