From f1e7a4c2e8f8ce2345d7b13d186fea0c62716240 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Francesco=20Chicchiricc=C3=B2?= Date: Mon, 22 Oct 2018 14:48:00 +0200 Subject: [PATCH] Simplifying CmdConnection#execute --- .../connid/bundles/cmd/CmdConfiguration.java | 2 ++ .../connid/bundles/cmd/CmdConnection.java | 18 +++++-------- .../connid/bundles/cmd/methods/CmdDelete.java | 19 +++++++++----- .../connid/bundles/cmd/methods/CmdExec.java | 26 +++++++++++-------- .../bundles/cmd/methods/CmdExecuteQuery.java | 14 +++++----- 5 files changed, 45 insertions(+), 34 deletions(-) diff --git a/src/main/java/net/tirasa/connid/bundles/cmd/CmdConfiguration.java b/src/main/java/net/tirasa/connid/bundles/cmd/CmdConfiguration.java index 0c5d58e..c50883f 100644 --- a/src/main/java/net/tirasa/connid/bundles/cmd/CmdConfiguration.java +++ b/src/main/java/net/tirasa/connid/bundles/cmd/CmdConfiguration.java @@ -22,6 +22,8 @@ public class CmdConfiguration extends AbstractConfiguration { + public static final String OBJECT_CLASS = "OBJECT_CLASS"; + private String createCmdPath = ""; private String updateCmdPath = ""; diff --git a/src/main/java/net/tirasa/connid/bundles/cmd/CmdConnection.java b/src/main/java/net/tirasa/connid/bundles/cmd/CmdConnection.java index b8c1af6..91366a0 100644 --- a/src/main/java/net/tirasa/connid/bundles/cmd/CmdConnection.java +++ b/src/main/java/net/tirasa/connid/bundles/cmd/CmdConnection.java @@ -16,7 +16,8 @@ package net.tirasa.connid.bundles.cmd; import java.io.IOException; -import java.util.Arrays; +import java.util.List; +import org.identityconnectors.common.Pair; import org.identityconnectors.common.logging.Log; public class CmdConnection { @@ -35,18 +36,13 @@ public static CmdConnection openConnection() { private CmdConnection() { } - public Process execute(final String path, final String[] envp) throws IOException { - LOG.info("Execute script {0} {1}", path, Arrays.asList(envp == null ? new String[0] : envp)); + public Process execute(final String path, final List> env) throws IOException { + LOG.info("Execute script {0} {1}", path, env); ProcessBuilder builder = new ProcessBuilder(path.split(" ")); - if (envp != null) { - for (String env : envp) { - String[] split = env.split("="); - if (split == null || split.length < 2) { - LOG.error("Could not parse {}", env); - } else { - builder.environment().put(split[0], split[1]); - } + if (env != null) { + for (Pair entry : env) { + builder.environment().put(entry.first, entry.second); } } diff --git a/src/main/java/net/tirasa/connid/bundles/cmd/methods/CmdDelete.java b/src/main/java/net/tirasa/connid/bundles/cmd/methods/CmdDelete.java index c8f3b8d..70750c4 100644 --- a/src/main/java/net/tirasa/connid/bundles/cmd/methods/CmdDelete.java +++ b/src/main/java/net/tirasa/connid/bundles/cmd/methods/CmdDelete.java @@ -15,6 +15,10 @@ */ package net.tirasa.connid.bundles.cmd.methods; +import java.util.ArrayList; +import java.util.List; +import net.tirasa.connid.bundles.cmd.CmdConfiguration; +import org.identityconnectors.common.Pair; import org.identityconnectors.common.logging.Log; import org.identityconnectors.framework.common.objects.ObjectClass; import org.identityconnectors.framework.common.objects.Uid; @@ -36,15 +40,18 @@ public CmdDelete(final ObjectClass oc, final String path, final Uid uid) { public void execDeleteCmd() { LOG.info("Executing deletion for {0}", uid); - + waitFor(exec(scriptPath, createEnv())); } - private String[] createEnv() { + private List> createEnv() { LOG.ok("Creating environment for deletion with:"); - LOG.ok("ObjectClass: {0}" , oc.getObjectClassValue()); - LOG.ok("Environment variable {0}: {1}" , uid.getName(), uid.getUidValue()); - - return new String[] {"OBJECT_CLASS=" + oc.getObjectClassValue(), uid.getName() + "=" + uid.getUidValue()}; + LOG.ok("ObjectClass: {0}", oc.getObjectClassValue()); + LOG.ok("Environment variable {0}: {1}", uid.getName(), uid.getUidValue()); + + List> env = new ArrayList>(); + env.add(new Pair(CmdConfiguration.OBJECT_CLASS, oc.getObjectClassValue())); + env.add(new Pair(uid.getName(), uid.getUidValue())); + return env; } } diff --git a/src/main/java/net/tirasa/connid/bundles/cmd/methods/CmdExec.java b/src/main/java/net/tirasa/connid/bundles/cmd/methods/CmdExec.java index aed87a6..4896714 100644 --- a/src/main/java/net/tirasa/connid/bundles/cmd/methods/CmdExec.java +++ b/src/main/java/net/tirasa/connid/bundles/cmd/methods/CmdExec.java @@ -19,7 +19,9 @@ import java.util.List; import java.util.Set; import net.tirasa.connid.bundles.cmd.CmdConnection; +import net.tirasa.connid.bundles.cmd.CmdConfiguration; import org.identityconnectors.common.IOUtil; +import org.identityconnectors.common.Pair; import org.identityconnectors.common.logging.Log; import org.identityconnectors.common.security.GuardedString; import org.identityconnectors.framework.common.exceptions.ConnectorException; @@ -39,7 +41,7 @@ public CmdExec(final ObjectClass oc) { this.oc = oc; } - protected Process exec(final String path, final String[] env) { + protected Process exec(final String path, final List> env) { try { return CmdConnection.openConnection().execute(path, env); } catch (Exception e) { @@ -48,20 +50,20 @@ protected Process exec(final String path, final String[] env) { } } - protected String[] createEnv(final Set attrs) { + protected List> createEnv(final Set attrs) { return createEnv(attrs, null); } - protected String[] createEnv(final Set attrs, final Uid uid) { - final List res = new ArrayList(); + protected List> createEnv(final Set attrs, final Uid uid) { + final List> env = new ArrayList>(); LOG.ok("Creating environment with:"); if (oc != null) { - LOG.ok("OBJECT_CLASS: {0}", oc.getObjectClassValue()); - res.add("OBJECT_CLASS=" + oc.getObjectClassValue()); + LOG.ok(CmdConfiguration.OBJECT_CLASS + ": {0}", oc.getObjectClassValue()); + env.add(new Pair(CmdConfiguration.OBJECT_CLASS, oc.getObjectClassValue())); } - for (final Attribute attr : attrs) { + for (Attribute attr : attrs) { if (attr.getValue() != null && !attr.getValue().isEmpty()) { LOG.ok("Environment variable {0}: {1}", attr.getName(), attr.getValue().get(0)); @@ -72,22 +74,24 @@ protected String[] createEnv(final Set attrs, final Uid uid) { @Override public void access(char[] clearChars) { - res.add(OperationalAttributes.PASSWORD_NAME + "=" + new String(clearChars)); + env.add(new Pair( + OperationalAttributes.PASSWORD_NAME, new String(clearChars))); } }); } } else { - res.add(attr.getName() + "=" + IOUtil.join(attr.getValue().toArray(), ',')); + env.add(new Pair( + attr.getName(), IOUtil.join(attr.getValue().toArray(), ','))); } } } if (uid != null && AttributeUtil.find(Uid.NAME, attrs) == null) { LOG.ok("Environment variable {0}: {1}", Uid.NAME, uid.getUidValue()); - res.add(Uid.NAME + "=" + uid.getUidValue()); + env.add(new Pair(Uid.NAME, uid.getUidValue())); } - return res.toArray(new String[res.size()]); + return env; } protected void waitFor(final Process proc) { diff --git a/src/main/java/net/tirasa/connid/bundles/cmd/methods/CmdExecuteQuery.java b/src/main/java/net/tirasa/connid/bundles/cmd/methods/CmdExecuteQuery.java index 0c4f947..977fab8 100644 --- a/src/main/java/net/tirasa/connid/bundles/cmd/methods/CmdExecuteQuery.java +++ b/src/main/java/net/tirasa/connid/bundles/cmd/methods/CmdExecuteQuery.java @@ -23,7 +23,9 @@ import java.util.List; import java.util.Map; import java.util.Properties; +import net.tirasa.connid.bundles.cmd.CmdConfiguration; import net.tirasa.connid.bundles.cmd.search.Operand; +import org.identityconnectors.common.Pair; import org.identityconnectors.common.StringUtil; import org.identityconnectors.common.logging.Log; import org.identityconnectors.common.security.GuardedString; @@ -88,17 +90,17 @@ public void execQuery() throws ConnectException { waitFor(proc); } - private String[] createEnv() { - final List attributes = new ArrayList(); + private List> createEnv() { + List> attributes = new ArrayList>(); LOG.ok("Creating environment for search with:"); - LOG.ok("OBJECT_CLASS: {0}", oc.getObjectClassValue()); + LOG.ok(CmdConfiguration.OBJECT_CLASS + ": {0}", oc.getObjectClassValue()); LOG.ok("Query filter {0}= {1}", filter.getAttributeName(), filter.getAttributeValue()); - attributes.add(filter.getAttributeName() + "=" + filter.getAttributeValue()); - attributes.add("OBJECT_CLASS=" + oc.getObjectClassValue()); + attributes.add(new Pair(filter.getAttributeName(), filter.getAttributeValue())); + attributes.add(new Pair(CmdConfiguration.OBJECT_CLASS, oc.getObjectClassValue())); - return attributes.toArray(new String[attributes.size()]); + return attributes; } private void fillUserHandler(final String searchScriptOutput) throws ConnectException {