keith-turner commented on a change in pull request #361: ACCUMULO-4784 - Create 
builder for Connector
URL: https://github.com/apache/accumulo/pull/361#discussion_r166728454
 
 

 ##########
 File path: 
core/src/main/java/org/apache/accumulo/core/client/impl/ConnectorImpl.java
 ##########
 @@ -193,4 +224,222 @@ public synchronized ReplicationOperations 
replicationOperations() {
 
     return replicationops;
   }
+
+  public static class ConnectorBuilderImpl implements InstanceArgs, 
PropertyOptions, ConnectionInfoOptions, AuthenticationArgs, ConnectionOptions, 
SslOptions,
+      SaslOptions, ConnectorFactory {
+
+    private Properties properties = new Properties();
+    private AuthenticationToken token = null;
+
+    @Override
+    public Connector build() throws AccumuloException, 
AccumuloSecurityException {
+      return ConnectionInfoFactory.getConnector(new 
ConnectionInfoImpl(properties, token));
+    }
+
+    @Override
+    public ConnectionInfo info() {
+      return new ConnectionInfoImpl(properties, token);
+    }
+
+    @Override
+    public AuthenticationArgs forInstance(String instanceName, String 
zookeepers) {
+      setProperty(ClientProperty.INSTANCE_NAME, instanceName);
+      setProperty(ClientProperty.INSTANCE_ZOOKEEPERS, zookeepers);
+      return this;
+    }
+
+    @Override
+    public SslOptions withTruststore(String path) {
+      setProperty(ClientProperty.SSL_TRUSTSTORE_PATH, path);
+      return this;
+    }
+
+    @Override
+    public SslOptions withTruststore(String path, String password, String 
type) {
+      setProperty(ClientProperty.SSL_TRUSTSTORE_PATH, path);
+      setProperty(ClientProperty.SSL_TRUSTSTORE_PASSWORD, password);
+      setProperty(ClientProperty.SSL_TRUSTSTORE_TYPE, type);
+      return this;
+    }
+
+    @Override
+    public SslOptions withKeystore(String path) {
+      setProperty(ClientProperty.SSL_KEYSTORE_PATH, path);
+      return this;
+    }
+
+    @Override
+    public SslOptions withKeystore(String path, String password, String type) {
+      setProperty(ClientProperty.SSL_KEYSTORE_PATH, path);
+      setProperty(ClientProperty.SSL_KEYSTORE_PASSWORD, password);
+      setProperty(ClientProperty.SSL_KEYSTORE_TYPE, type);
+      return this;
+    }
+
+    @Override
+    public SslOptions useJsse() {
+      setProperty(ClientProperty.SSL_USE_JSSE, "true");
+      return this;
+    }
+
+    @Override
+    public ConnectionOptions withZkTimeout(int timeout) {
+      setProperty(ClientProperty.INSTANCE_ZOOKEEPERS_TIMEOUT_SEC, 
Integer.toString(timeout));
+      return this;
+    }
+
+    @Override
+    public SslOptions withSsl() {
+      setProperty(ClientProperty.SSL_ENABLED, "true");
+      return this;
+    }
+
+    @Override
+    public SaslOptions withSasl() {
+      setProperty(ClientProperty.SASL_ENABLED, "true");
+      return this;
+    }
+
+    @Override
+    public ConnectionOptions withBatchWriterConfig(BatchWriterConfig 
batchWriterConfig) {
+      setProperty(ClientProperty.BATCH_WRITER_MAX_MEMORY_BYTES, 
batchWriterConfig.getMaxMemory());
+      setProperty(ClientProperty.BATCH_WRITER_MAX_LATENCY_SEC, 
batchWriterConfig.getMaxLatency(TimeUnit.SECONDS));
+      setProperty(ClientProperty.BATCH_WRITER_MAX_TIMEOUT_SEC, 
batchWriterConfig.getTimeout(TimeUnit.SECONDS));
+      setProperty(ClientProperty.BATCH_WRITER_MAX_WRITE_THREADS, 
batchWriterConfig.getMaxWriteThreads());
+      setProperty(ClientProperty.BATCH_WRITER_DURABILITY, 
batchWriterConfig.getDurability().toString());
+      return this;
+    }
+
+    @Override
+    public SaslOptions withPrimary(String kerberosServerPrimary) {
+      setProperty(ClientProperty.SASL_KERBEROS_SERVER_PRIMARY, 
kerberosServerPrimary);
+      return this;
+    }
+
+    @Override
+    public SaslOptions withQop(String qualityOfProtection) {
+      setProperty(ClientProperty.SASL_QOP, qualityOfProtection);
+      return this;
+    }
+
+    @Override
+    public ConnectorFactory usingProperties(String configFile) {
+      Properties properties = new Properties();
+      try (InputStream is = new FileInputStream(configFile)) {
+        properties.load(is);
+      } catch (IOException e) {
+        throw new IllegalArgumentException(e);
+      }
+      return usingProperties(properties);
+    }
+
+    @Override
+    public ConnectorFactory usingProperties(Properties properties) {
+      this.properties = properties;
+      String authMethod = 
ClientProperty.AUTH_METHOD.getValue(properties).toLowerCase();
+      switch (authMethod) {
+        case "password":
+          String password = ClientProperty.AUTH_PASSWORD.getValue(properties);
+          Objects.nonNull(password);
+          this.token = new PasswordToken(password);
+          this.properties.remove(ClientProperty.AUTH_PASSWORD);
+          break;
+        case "kerberos":
+          String principal = ClientProperty.AUTH_USERNAME.getValue(properties);
+          String keytabPath = 
ClientProperty.AUTH_KERBEROS_KEYTAB_PATH.getValue(properties);
+          Objects.nonNull(principal);
+          Objects.nonNull(keytabPath);
+          try {
+            this.token = new KerberosToken(principal, new File(keytabPath));
 
 Review comment:
   KerberosToken also has a constructor that does not take a keytab file path, 
so should this be required?

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


With regards,
Apache Git Services

Reply via email to