From dd61adf66cf90172347d2c44e4c8c5f8b79e818c Mon Sep 17 00:00:00 2001 From: Jarek Jarcec Cecho Date: Mon, 25 Mar 2013 13:33:15 -0700 Subject: [PATCH] SQOOP-947: Sqoop2: Introduce the concept of "sensitivity" input to all supported metadata structures (Abraham Elmahrek via Jarek Jarcec Cecho) --- .../apache/sqoop/client/core/Constants.java | 4 +- .../sqoop/client/utils/FormDisplayer.java | 48 +++++++++---------- .../apache/sqoop/client/utils/FormFiller.java | 38 +++++++++++---- .../main/resources/client-resource.properties | 2 +- .../sqoop/json/util/FormSerialization.java | 17 ++++--- .../org/apache/sqoop/model/FormUtils.java | 6 +-- .../org/apache/sqoop/model/MEnumInput.java | 4 +- .../java/org/apache/sqoop/model/MInput.java | 13 ++++- .../org/apache/sqoop/model/MIntegerInput.java | 4 +- .../org/apache/sqoop/model/MMapInput.java | 4 +- .../org/apache/sqoop/model/MStringInput.java | 24 +++------- .../apache/sqoop/json/TestConnectionBean.java | 11 +++++ .../org/apache/sqoop/model/TestFormUtils.java | 6 +-- .../sqoop/model/TestMAccountableEntity.java | 2 +- .../apache/sqoop/model/TestMConnection.java | 4 +- .../apache/sqoop/model/TestMEnumInput.java | 20 ++++++-- .../org/apache/sqoop/model/TestMForm.java | 14 +++--- .../org/apache/sqoop/model/TestMFormList.java | 6 +-- .../apache/sqoop/model/TestMIntegerInput.java | 25 +++++++--- .../org/apache/sqoop/model/TestMMapInput.java | 25 +++++++--- .../apache/sqoop/model/TestMNamedElement.java | 2 +- .../apache/sqoop/model/TestMStringInput.java | 2 +- .../sqoop/model/TestMValidatedElement.java | 4 +- .../derby/DerbyRepositoryHandler.java | 13 +++-- 24 files changed, 181 insertions(+), 117 deletions(-) diff --git a/client/src/main/java/org/apache/sqoop/client/core/Constants.java b/client/src/main/java/org/apache/sqoop/client/core/Constants.java index cc80df10..b93577c5 100644 --- a/client/src/main/java/org/apache/sqoop/client/core/Constants.java +++ b/client/src/main/java/org/apache/sqoop/client/core/Constants.java @@ -336,8 +336,8 @@ public class Constants { "formdisplayer.input"; public static final String RES_FORMDISPLAYER_TYPE = "formdisplayer.type"; - public static final String RES_FORMDISPLAYER_MASK = - "formdisplayer.mask"; + public static final String RES_FORMDISPLAYER_SENSITIVE = + "formdisplayer.sensitive"; public static final String RES_FORMDISPLAYER_SIZE = "formdisplayer.size"; public static final String RES_FORMDISPLAYER_POSSIBLE_VALUES = diff --git a/client/src/main/java/org/apache/sqoop/client/utils/FormDisplayer.java b/client/src/main/java/org/apache/sqoop/client/utils/FormDisplayer.java index 0609ae10..7cce7133 100644 --- a/client/src/main/java/org/apache/sqoop/client/utils/FormDisplayer.java +++ b/client/src/main/java/org/apache/sqoop/client/utils/FormDisplayer.java @@ -101,9 +101,9 @@ public static void displayFormsMetadata(List forms, println(bundle.getString(input.getHelpKey())); print(" %s: ", resourceString(Constants.RES_FORMDISPLAYER_TYPE)); println(input.getType()); + print(" %s: ", resourceString(Constants.RES_FORMDISPLAYER_SENSITIVE)); + println(input.isSensitive()); if (input.getType() == MInputType.STRING) { - print(" %s: ", resourceString(Constants.RES_FORMDISPLAYER_MASK)); - println(((MStringInput)input).isMasked()); print(" %s: ", resourceString(Constants.RES_FORMDISPLAYER_SIZE)); println(((MStringInput)input).getMaxLength()); } else if(input.getType() == MInputType.ENUM) { @@ -129,23 +129,27 @@ private static void displayForm(MForm form, ResourceBundle bundle) { print(bundle.getString(input.getLabelKey())); print(": "); if(!input.isEmpty()) { - // Based on the input type, let's perform specific load - switch (input.getType()) { - case STRING: - displayInputString((MStringInput) input); - break; - case INTEGER: - displayInputInteger((MIntegerInput) input); - break; - case MAP: - displayInputMap((MMapInput) input); - break; - case ENUM: - displayInputEnum((MEnumInput) input); - break; - default: - print("\n%s " + input.getType(), resourceString(Constants.RES_FORMDISPLAYER_UNSUPPORTED_DATATYPE)); - return; + if (input.isSensitive()) { + print("(%s)", resourceString(Constants.RES_FORMDISPLAYER_INPUT_SENSITIVE)); + } else { + // Based on the input type, let's perform specific load + switch (input.getType()) { + case STRING: + displayInputString((MStringInput) input); + break; + case INTEGER: + displayInputInteger((MIntegerInput) input); + break; + case MAP: + displayInputMap((MMapInput) input); + break; + case ENUM: + displayInputEnum((MEnumInput) input); + break; + default: + print("\n%s " + input.getType(), resourceString(Constants.RES_FORMDISPLAYER_UNSUPPORTED_DATATYPE)); + return; + } } } println(""); @@ -158,11 +162,7 @@ private static void displayForm(MForm form, ResourceBundle bundle) { * @param input String input */ private static void displayInputString(MStringInput input) { - if (input.isMasked()) { - print("(%s)", resourceString(Constants.RES_FORMDISPLAYER_INPUT_SENSITIVE)); - } else { - print(input.getValue()); - } + print(input.getValue()); } /** diff --git a/client/src/main/java/org/apache/sqoop/client/utils/FormFiller.java b/client/src/main/java/org/apache/sqoop/client/utils/FormFiller.java index f11b9d29..95d06122 100644 --- a/client/src/main/java/org/apache/sqoop/client/utils/FormFiller.java +++ b/client/src/main/java/org/apache/sqoop/client/utils/FormFiller.java @@ -203,7 +203,8 @@ private static boolean fillInputEnum(MEnumInput input, println(" " + i + " : " + value); - if(!input.isEmpty() && value.equals(input.getValue())) { + // Only show last choice if not sensitive + if(!input.isEmpty() && value.equals(input.getValue()) && !input.isSensitive()) { lastChoice = i; } } @@ -217,7 +218,12 @@ private static boolean fillInputEnum(MEnumInput input, } reader.flushConsole(); - String userTyped = reader.readLine(); + String userTyped; + if(input.isSensitive()) { + userTyped = reader.readLine('*'); + } else { + userTyped = reader.readLine(); + } if (userTyped == null) { return false; @@ -278,16 +284,23 @@ private static boolean fillInputMap(MMapInput input, while(true) { // Print all current items in each iteration + // However do not printout if this input contains sensitive information. println("There are currently " + values.size() + " values in the map:"); - for(Map.Entry entry : values.entrySet()) { - println(entry.getKey() + " = " + entry.getValue()); + if (!input.isSensitive()) { + for(Map.Entry entry : values.entrySet()) { + println(entry.getKey() + " = " + entry.getValue()); + } } // Special prompt for Map entry reader.printString("entry# "); reader.flushConsole(); - userTyped = reader.readLine(); + if(input.isSensitive()) { + userTyped = reader.readLine('*'); + } else { + userTyped = reader.readLine(); + } if(userTyped == null) { // Finish loading and return back to Sqoop shell @@ -365,11 +378,18 @@ private static boolean fillInputInteger(MIntegerInput input, generatePrompt(reader, bundle, input); // Fill already filled data when available - if(!input.isEmpty()) { + // However do not printout if this input contains sensitive information. + if(!input.isEmpty() && !input.isSensitive()) { reader.putString(input.getValue().toString()); } - String userTyped = reader.readLine(); + // Get the data + String userTyped; + if(input.isSensitive()) { + userTyped = reader.readLine('*'); + } else { + userTyped = reader.readLine(); + } if (userTyped == null) { return false; @@ -408,13 +428,13 @@ public static boolean fillInputString(MStringInput input, // Fill already filled data when available // However do not printout if this input contains sensitive information. - if(!input.isEmpty() && !input.isMasked()) { + if(!input.isEmpty() && !input.isSensitive()) { reader.putString(input.getValue()); } // Get the data String userTyped; - if(input.isMasked()) { + if(input.isSensitive()) { userTyped = reader.readLine('*'); } else { userTyped = reader.readLine(); diff --git a/client/src/main/resources/client-resource.properties b/client/src/main/resources/client-resource.properties index 734333ee..7e68c4f6 100644 --- a/client/src/main/resources/client-resource.properties +++ b/client/src/main/resources/client-resource.properties @@ -182,7 +182,7 @@ formdisplayer.label = Label formdisplayer.help = Help formdisplayer.input = Input formdisplayer.type = Type -formdisplayer.mask = Mask +formdisplayer.sensitive = Sensitive formdisplayer.size = Size formdisplayer.possible_values = Possible values formdisplayer.unsupported_datatype = Unsupported data type diff --git a/common/src/main/java/org/apache/sqoop/json/util/FormSerialization.java b/common/src/main/java/org/apache/sqoop/json/util/FormSerialization.java index 3f8f985a..048323b8 100644 --- a/common/src/main/java/org/apache/sqoop/json/util/FormSerialization.java +++ b/common/src/main/java/org/apache/sqoop/json/util/FormSerialization.java @@ -52,7 +52,7 @@ public final class FormSerialization { public static final String FORM_INPUTS = "inputs"; public static final String FORM_INPUT_NAME = "name"; public static final String FORM_INPUT_TYPE = "type"; - public static final String FORM_INPUT_MASK = "mask"; + public static final String FORM_INPUT_SENSITIVE = "sensitive"; public static final String FORM_INPUT_SIZE = "size"; public static final String FORM_INPUT_VALUE = "value"; public static final String FORM_INPUT_VALUES = "values"; @@ -95,11 +95,10 @@ public static JSONObject extractForm(MForm mForm, boolean skipSensitive) { input.put(ID, mInput.getPersistenceId()); input.put(FORM_INPUT_NAME, mInput.getName()); input.put(FORM_INPUT_TYPE, mInput.getType().toString()); + input.put(FORM_INPUT_SENSITIVE, mInput.isSensitive()); // String specific serialization if (mInput.getType() == MInputType.STRING) { - input.put(FORM_INPUT_MASK, - ((MStringInput)mInput).isMasked()); input.put(FORM_INPUT_SIZE, ((MStringInput)mInput).getMaxLength()); } @@ -112,7 +111,7 @@ public static JSONObject extractForm(MForm mForm, boolean skipSensitive) { // Serialize value if is there // Skip if sensitive - if (!mInput.isEmpty() && !(skipSensitive && ((MStringInput)mInput).isMasked())) { + if (!mInput.isEmpty() && !(skipSensitive && mInput.isSensitive())) { input.put(FORM_INPUT_VALUE, mInput.getUrlSafeValueString()); } @@ -153,25 +152,25 @@ public static MForm restoreForm(JSONObject form) { MInputType type = MInputType.valueOf((String) input.get(FORM_INPUT_TYPE)); String name = (String) input.get(FORM_INPUT_NAME); + Boolean sensitive = (Boolean) input.get(FORM_INPUT_SENSITIVE); MInput mInput = null; switch (type) { case STRING: { - boolean mask = (Boolean) input.get(FORM_INPUT_MASK); long size = (Long) input.get(FORM_INPUT_SIZE); - mInput = new MStringInput(name, mask, (short) size); + mInput = new MStringInput(name, sensitive.booleanValue(), (short) size); break; } case MAP: { - mInput = new MMapInput(name); + mInput = new MMapInput(name, sensitive.booleanValue()); break; } case INTEGER: { - mInput = new MIntegerInput(name); + mInput = new MIntegerInput(name, sensitive.booleanValue()); break; } case ENUM: { String values = (String) input.get(FORM_INPUT_VALUES); - mInput = new MEnumInput(name, values.split(",")); + mInput = new MEnumInput(name, sensitive.booleanValue(), values.split(",")); break; } } diff --git a/common/src/main/java/org/apache/sqoop/model/FormUtils.java b/common/src/main/java/org/apache/sqoop/model/FormUtils.java index e88216d6..80b10c80 100644 --- a/common/src/main/java/org/apache/sqoop/model/FormUtils.java +++ b/common/src/main/java/org/apache/sqoop/model/FormUtils.java @@ -139,11 +139,11 @@ private static MForm toForm(String formName, Class klass, Object object) { if(type == String.class) { input = new MStringInput(inputName, sensitive, maxLen); } else if (type.isAssignableFrom(Map.class)) { - input = new MMapInput(inputName); + input = new MMapInput(inputName, sensitive); } else if(type == Integer.class) { - input = new MIntegerInput(inputName); + input = new MIntegerInput(inputName, sensitive); } else if(type.isEnum()) { - input = new MEnumInput(inputName, ClassUtils.getEnumStrings(type)); + input = new MEnumInput(inputName, sensitive, ClassUtils.getEnumStrings(type)); } else { throw new SqoopException(ModelError.MODEL_004, "Unsupported type " + type.getName() + " for input " + fieldName); diff --git a/common/src/main/java/org/apache/sqoop/model/MEnumInput.java b/common/src/main/java/org/apache/sqoop/model/MEnumInput.java index 77598a82..12705a6d 100644 --- a/common/src/main/java/org/apache/sqoop/model/MEnumInput.java +++ b/common/src/main/java/org/apache/sqoop/model/MEnumInput.java @@ -32,8 +32,8 @@ public class MEnumInput extends MInput { */ String []values; - public MEnumInput(String name, String[] values) { - super(name); + public MEnumInput(String name, boolean sensitive, String[] values) { + super(name, sensitive); this.values = values; } diff --git a/common/src/main/java/org/apache/sqoop/model/MInput.java b/common/src/main/java/org/apache/sqoop/model/MInput.java index 96397e82..7d6215f3 100644 --- a/common/src/main/java/org/apache/sqoop/model/MInput.java +++ b/common/src/main/java/org/apache/sqoop/model/MInput.java @@ -21,12 +21,16 @@ * Represents a parameter input used by the connector for creating a connection * or a job object. * @param the value type associated with this parameter + * @param boolean whether or not the field contains sensitive information */ public abstract class MInput extends MValidatedElement { + private final boolean sensitive; + private T value; - protected MInput(String name) { + protected MInput(String name, boolean sensitive) { super(name); + this.sensitive = sensitive; } /** @@ -43,6 +47,13 @@ public T getValue() { return value; } + /** + * @return true if this string represents sensitive information + */ + public boolean isSensitive() { + return sensitive; + } + /** * @return a URL-safe string representation of the value */ diff --git a/common/src/main/java/org/apache/sqoop/model/MIntegerInput.java b/common/src/main/java/org/apache/sqoop/model/MIntegerInput.java index d281d7ef..d23ac311 100644 --- a/common/src/main/java/org/apache/sqoop/model/MIntegerInput.java +++ b/common/src/main/java/org/apache/sqoop/model/MIntegerInput.java @@ -24,8 +24,8 @@ */ public class MIntegerInput extends MInput { - public MIntegerInput(String name) { - super(name); + public MIntegerInput(String name, boolean sensitive) { + super(name, sensitive); } @Override diff --git a/common/src/main/java/org/apache/sqoop/model/MMapInput.java b/common/src/main/java/org/apache/sqoop/model/MMapInput.java index b4580221..704c1f85 100644 --- a/common/src/main/java/org/apache/sqoop/model/MMapInput.java +++ b/common/src/main/java/org/apache/sqoop/model/MMapInput.java @@ -24,8 +24,8 @@ public final class MMapInput extends MInput> { - public MMapInput(String name) { - super(name); + public MMapInput(String name, boolean sensitive) { + super(name, sensitive); } @Override diff --git a/common/src/main/java/org/apache/sqoop/model/MStringInput.java b/common/src/main/java/org/apache/sqoop/model/MStringInput.java index e96ec929..a437a259 100644 --- a/common/src/main/java/org/apache/sqoop/model/MStringInput.java +++ b/common/src/main/java/org/apache/sqoop/model/MStringInput.java @@ -20,35 +20,25 @@ import org.apache.sqoop.utils.UrlSafeUtils; /** - * Represents a String input. The boolean flag mask supplied + * Represents a String input. The boolean flag sensitive supplied * to its constructor can be used to indicate if the string should be masked * from user-view. This is helpful for creating input strings that represent * sensitive information such as passwords. */ public final class MStringInput extends MInput { - private final boolean mask; private final short maxLength; /** * @param name the parameter name - * @param mask a flag indicating if the string should be masked + * @param sensitive a flag indicating if the string should be masked * @param maxLength the maximum length of the string */ - public MStringInput(String name, boolean mask, short maxLength) { - super(name); - this.mask = mask; + public MStringInput(String name, boolean sensitive, short maxLength) { + super(name, sensitive); this.maxLength = maxLength; } - /** - * @return true if this string represents sensitive information that - * should be masked - */ - public boolean isMasked() { - return mask; - } - /** * @return the maximum length of this string type */ @@ -78,7 +68,7 @@ public boolean hasExtraInfo() { @Override public String getExtraInfoToString() { - return isMasked() + ":" + getMaxLength(); + return Short.toString(getMaxLength()); } @Override @@ -93,14 +83,14 @@ public boolean equals(Object other) { MStringInput msi = (MStringInput) other; return getName().equals(msi.getName()) - && (mask == msi.mask) + && (isSensitive() == msi.isSensitive()) && (maxLength == msi.maxLength); } @Override public int hashCode() { int result = 23 + 31 * getName().hashCode(); - result = 31 * result + (mask ? 1 : 0); + result = 31 * result + (isSensitive() ? 1 : 0); result = 31 * result + maxLength; return result; } diff --git a/common/src/test/java/org/apache/sqoop/json/TestConnectionBean.java b/common/src/test/java/org/apache/sqoop/json/TestConnectionBean.java index 5553554d..dd1d75b2 100644 --- a/common/src/test/java/org/apache/sqoop/json/TestConnectionBean.java +++ b/common/src/test/java/org/apache/sqoop/json/TestConnectionBean.java @@ -19,6 +19,7 @@ import org.apache.sqoop.model.MConnection; import org.apache.sqoop.model.MStringInput; +import org.json.simple.JSONArray; import org.json.simple.JSONObject; import org.json.simple.JSONArray; import org.json.simple.JSONValue; @@ -52,6 +53,16 @@ public void testSerialization() { ConnectionBean bean = new ConnectionBean(connection); JSONObject json = bean.extract(false); + // Check for sensitivity + JSONArray all = (JSONArray)json.get("all"); + JSONObject allItem = (JSONObject)all.get(0); + JSONArray connectors = (JSONArray)allItem.get("connector"); + JSONObject connector = (JSONObject)connectors.get(0); + JSONArray inputs = (JSONArray)connector.get("inputs"); + for (Object input1 : inputs) { + assertTrue(((JSONObject)input1).containsKey("sensitive")); + } + // "Move" it across network in text form String string = json.toJSONString(); diff --git a/common/src/test/java/org/apache/sqoop/model/TestFormUtils.java b/common/src/test/java/org/apache/sqoop/model/TestFormUtils.java index 85c65de6..08dfa7ba 100644 --- a/common/src/test/java/org/apache/sqoop/model/TestFormUtils.java +++ b/common/src/test/java/org/apache/sqoop/model/TestFormUtils.java @@ -184,9 +184,9 @@ protected List getForms() { // Form C inputs = new LinkedList>(); - inputs.add(new MIntegerInput("cForm.intValue")); - inputs.add(new MMapInput("cForm.map")); - inputs.add(new MEnumInput("cForm.enumeration", new String[]{"X", "Y"})); + inputs.add(new MIntegerInput("cForm.intValue", false)); + inputs.add(new MMapInput("cForm.map", false)); + inputs.add(new MEnumInput("cForm.enumeration", false, new String[]{"X", "Y"})); ret.add(new MForm("cForm", inputs)); return ret; diff --git a/common/src/test/java/org/apache/sqoop/model/TestMAccountableEntity.java b/common/src/test/java/org/apache/sqoop/model/TestMAccountableEntity.java index 1cde5cf2..4ea42b15 100644 --- a/common/src/test/java/org/apache/sqoop/model/TestMAccountableEntity.java +++ b/common/src/test/java/org/apache/sqoop/model/TestMAccountableEntity.java @@ -36,7 +36,7 @@ public class TestMAccountableEntity { @Test public void testInitialization() { List forms = new ArrayList(); - MIntegerInput input = new MIntegerInput("INTEGER-INPUT"); + MIntegerInput input = new MIntegerInput("INTEGER-INPUT", false); List> list = new ArrayList>(); list.add(input); MForm form = new MForm("FORMNAME", list); diff --git a/common/src/test/java/org/apache/sqoop/model/TestMConnection.java b/common/src/test/java/org/apache/sqoop/model/TestMConnection.java index a99b7dc0..c3469ff6 100644 --- a/common/src/test/java/org/apache/sqoop/model/TestMConnection.java +++ b/common/src/test/java/org/apache/sqoop/model/TestMConnection.java @@ -49,7 +49,7 @@ public void testInitialization() { private MConnectionForms connector1() { List forms = new ArrayList(); - MIntegerInput input = new MIntegerInput("INTEGER-INPUT"); + MIntegerInput input = new MIntegerInput("INTEGER-INPUT", false); List> list = new ArrayList>(); list.add(input); MForm form = new MForm("FORMNAME", list); @@ -59,7 +59,7 @@ private MConnectionForms connector1() { private MConnectionForms connector2() { List forms = new ArrayList(); - MMapInput input = new MMapInput("MAP-INPUT"); + MMapInput input = new MMapInput("MAP-INPUT", false); List> list = new ArrayList>(); list.add(input); MForm form = new MForm("form", list); diff --git a/common/src/test/java/org/apache/sqoop/model/TestMEnumInput.java b/common/src/test/java/org/apache/sqoop/model/TestMEnumInput.java index 1d86c132..a25016a8 100644 --- a/common/src/test/java/org/apache/sqoop/model/TestMEnumInput.java +++ b/common/src/test/java/org/apache/sqoop/model/TestMEnumInput.java @@ -33,19 +33,31 @@ public enum Enumeration { value1, value2} @Test public void testInitialization() { String[] values = { "value1", "value2" }; - MEnumInput input = new MEnumInput("NAME", values); + MEnumInput input = new MEnumInput("NAME", false, values); assertEquals("NAME", input.getName()); assertArrayEquals(values, input.getValues()); assertEquals(MInputType.ENUM, input.getType()); - MEnumInput input1 = new MEnumInput("NAME", values); + MEnumInput input1 = new MEnumInput("NAME", false, values); assertEquals(input1, input); String[] testVal = { "val", "test" }; - MEnumInput input2 = new MEnumInput("NAME1", testVal); + MEnumInput input2 = new MEnumInput("NAME1", false, testVal); assertFalse(input1.equals(input2)); - MEnumInput input3 = new MEnumInput("NAME", values); + MEnumInput input3 = new MEnumInput("NAME", false, values); input3.setValue(Enumeration.value1); assertEquals("value1", input3.getValue()); } + + /** + * Test for sensitivity + */ + @Test + public void testSensitivity() { + String[] values = { "value1", "value2" }; + MEnumInput input1 = new MEnumInput("NAME", false, values); + MEnumInput input2 = new MEnumInput("NAME", true, values); + assertFalse(input1.isSensitive()); + assertTrue(input2.isSensitive()); + } } diff --git a/common/src/test/java/org/apache/sqoop/model/TestMForm.java b/common/src/test/java/org/apache/sqoop/model/TestMForm.java index b7b1356e..0bd55d9d 100644 --- a/common/src/test/java/org/apache/sqoop/model/TestMForm.java +++ b/common/src/test/java/org/apache/sqoop/model/TestMForm.java @@ -50,15 +50,15 @@ public void testInitialization() { */ @Test public void testEquals() { - MInput input1 = new MIntegerInput("sqoopsqoop1"); - MInput input2 = new MIntegerInput("sqoopsqoop2"); + MInput input1 = new MIntegerInput("sqoopsqoop1", false); + MInput input2 = new MIntegerInput("sqoopsqoop2", false); List> list1 = new ArrayList>(); list1.add(input1); list1.add(input2); MForm mform1 = new MForm("form", list1); - MInput input3 = new MIntegerInput("sqoopsqoop1"); - MInput input4 = new MIntegerInput("sqoopsqoop2"); + MInput input3 = new MIntegerInput("sqoopsqoop1", false); + MInput input4 = new MIntegerInput("sqoopsqoop2", false); List> list2 = new ArrayList>(); list2.add(input3); list2.add(input4); @@ -68,10 +68,10 @@ public void testEquals() { @Test public void testGetInputs() { - MIntegerInput intInput = new MIntegerInput("Form.A"); - MMapInput mapInput = new MMapInput("Form.B"); + MIntegerInput intInput = new MIntegerInput("Form.A", false); + MMapInput mapInput = new MMapInput("Form.B", false); MStringInput stringInput = new MStringInput("Form.C", false, (short)3); - MEnumInput enumInput = new MEnumInput("Form.D", new String[] {"I", "V"}); + MEnumInput enumInput = new MEnumInput("Form.D", false, new String[] {"I", "V"}); List> inputs = new ArrayList>(); inputs.add(intInput); diff --git a/common/src/test/java/org/apache/sqoop/model/TestMFormList.java b/common/src/test/java/org/apache/sqoop/model/TestMFormList.java index 5f599ebd..bd21fcb0 100644 --- a/common/src/test/java/org/apache/sqoop/model/TestMFormList.java +++ b/common/src/test/java/org/apache/sqoop/model/TestMFormList.java @@ -33,8 +33,8 @@ public class TestMFormList { public void testGetInputs() { List forms = new LinkedList(); - MIntegerInput intInput = new MIntegerInput("Form1.A"); - MMapInput mapInput = new MMapInput("Form1.B"); + MIntegerInput intInput = new MIntegerInput("Form1.A", false); + MMapInput mapInput = new MMapInput("Form1.B", false); List> inputs = new ArrayList>(); inputs.add(intInput); @@ -42,7 +42,7 @@ public void testGetInputs() { forms.add(new MForm("Form1", inputs)); MStringInput stringInput = new MStringInput("Form2.C", false, (short)3); - MEnumInput enumInput = new MEnumInput("Form2.D", new String[] {"I", "V"}); + MEnumInput enumInput = new MEnumInput("Form2.D", false, new String[] {"I", "V"}); inputs = new ArrayList>(); inputs.add(stringInput); diff --git a/common/src/test/java/org/apache/sqoop/model/TestMIntegerInput.java b/common/src/test/java/org/apache/sqoop/model/TestMIntegerInput.java index 042158a8..1f38e6d6 100644 --- a/common/src/test/java/org/apache/sqoop/model/TestMIntegerInput.java +++ b/common/src/test/java/org/apache/sqoop/model/TestMIntegerInput.java @@ -33,7 +33,7 @@ public class TestMIntegerInput { */ @Test public void testInitialization() { - MIntegerInput input = new MIntegerInput("sqoopsqoop"); + MIntegerInput input = new MIntegerInput("sqoopsqoop", false); assertEquals("sqoopsqoop", input.getName()); assertEquals(MInputType.INTEGER, input.getType()); } @@ -44,13 +44,13 @@ public void testInitialization() { @Test public void testEquals() { // Positive test - MIntegerInput input1 = new MIntegerInput("sqoopsqoop"); - MIntegerInput input2 = new MIntegerInput("sqoopsqoop"); + MIntegerInput input1 = new MIntegerInput("sqoopsqoop", false); + MIntegerInput input2 = new MIntegerInput("sqoopsqoop", false); assertTrue(input1.equals(input2)); // Negative test - MIntegerInput input3 = new MIntegerInput("sqoopsqoop"); - MIntegerInput input4 = new MIntegerInput("sqoopsqoop1"); + MIntegerInput input3 = new MIntegerInput("sqoopsqoop", false); + MIntegerInput input4 = new MIntegerInput("sqoopsqoop1", false); assertFalse(input3.equals(input4)); } @@ -59,7 +59,7 @@ public void testEquals() { */ @Test public void testValue() { - MIntegerInput input1 = new MIntegerInput("sqoopsqoop"); + MIntegerInput input1 = new MIntegerInput("sqoopsqoop", false); input1.setValue(99); assertEquals(new Integer(99), input1.getValue()); input1.setEmpty(); @@ -71,7 +71,7 @@ public void testValue() { */ @Test public void testUrlSafe() { - MIntegerInput input1 = new MIntegerInput("sqoopsqoop"); + MIntegerInput input1 = new MIntegerInput("sqoopsqoop", false); input1.setValue(1001); // Getting URL safe string String tmp = input1.getUrlSafeValueString(); @@ -89,4 +89,15 @@ public void testNamedElement() { assertEquals("sqoopsqoop.label", input1.getLabelKey()); assertEquals("sqoopsqoop.help", input1.getHelpKey()); } + + /** + * Test for sensitivity + */ + @Test + public void testSensitivity() { + MIntegerInput input1 = new MIntegerInput("NAME", false); + MIntegerInput input2 = new MIntegerInput("NAME", true); + assertFalse(input1.isSensitive()); + assertTrue(input2.isSensitive()); + } } diff --git a/common/src/test/java/org/apache/sqoop/model/TestMMapInput.java b/common/src/test/java/org/apache/sqoop/model/TestMMapInput.java index 772f230b..eb877cfa 100644 --- a/common/src/test/java/org/apache/sqoop/model/TestMMapInput.java +++ b/common/src/test/java/org/apache/sqoop/model/TestMMapInput.java @@ -36,7 +36,7 @@ public class TestMMapInput { */ @Test public void testInitialization() { - MMapInput input = new MMapInput("sqoopsqoop"); + MMapInput input = new MMapInput("sqoopsqoop", false); assertEquals("sqoopsqoop", input.getName()); assertEquals(MInputType.MAP, input.getType()); } @@ -47,13 +47,13 @@ public void testInitialization() { @Test public void testEquals() { // Positive test - MMapInput input1 = new MMapInput("sqoopsqoop"); - MMapInput input2 = new MMapInput("sqoopsqoop"); + MMapInput input1 = new MMapInput("sqoopsqoop", false); + MMapInput input2 = new MMapInput("sqoopsqoop", false); assertTrue(input1.equals(input2)); // Negative test - MMapInput input3 = new MMapInput("sqoopsqoop"); - MMapInput input4 = new MMapInput("sqoopsqoop1"); + MMapInput input3 = new MMapInput("sqoopsqoop", false); + MMapInput input4 = new MMapInput("sqoopsqoop1", false); assertFalse(input3.equals(input4)); } @@ -62,7 +62,7 @@ public void testEquals() { */ @Test public void testValue() { - MMapInput input1 = new MMapInput("sqoopsqoop"); + MMapInput input1 = new MMapInput("sqoopsqoop", false); Map map1 = new HashMap(); input1.setValue(map1); assertEquals(map1, input1.getValue()); @@ -75,7 +75,7 @@ public void testValue() { */ @Test public void testUrlSafe() { - MMapInput input1 = new MMapInput("sqoopsqoop"); + MMapInput input1 = new MMapInput("sqoopsqoop", false); Map map1 = new HashMap(); input1.setValue(map1); // Getting URL safe string @@ -94,4 +94,15 @@ public void testNamedElement() { assertEquals("sqoopsqoop.label", input1.getLabelKey()); assertEquals("sqoopsqoop.help", input1.getHelpKey()); } + + /** + * Test for sensitivity + */ + @Test + public void testSensitivity() { + MMapInput input1 = new MMapInput("NAME", false); + MMapInput input2 = new MMapInput("NAME", true); + assertFalse(input1.isSensitive()); + assertTrue(input2.isSensitive()); + } } diff --git a/common/src/test/java/org/apache/sqoop/model/TestMNamedElement.java b/common/src/test/java/org/apache/sqoop/model/TestMNamedElement.java index fa6b9ad8..f336bab7 100644 --- a/common/src/test/java/org/apache/sqoop/model/TestMNamedElement.java +++ b/common/src/test/java/org/apache/sqoop/model/TestMNamedElement.java @@ -31,7 +31,7 @@ public class TestMNamedElement { */ @Test public void testInitialization() { - MNamedElement named = new MIntegerInput("SQOOP"); + MNamedElement named = new MIntegerInput("SQOOP", false); assertEquals("SQOOP", named.getName()); assertEquals("SQOOP.label", named.getLabelKey()); assertEquals("SQOOP.help", named.getHelpKey()); diff --git a/common/src/test/java/org/apache/sqoop/model/TestMStringInput.java b/common/src/test/java/org/apache/sqoop/model/TestMStringInput.java index 2ba9709c..2fe03354 100644 --- a/common/src/test/java/org/apache/sqoop/model/TestMStringInput.java +++ b/common/src/test/java/org/apache/sqoop/model/TestMStringInput.java @@ -34,7 +34,7 @@ public void testInitialization() { short len = 6; MStringInput input = new MStringInput("sqoopsqoop", true, len); assertEquals("sqoopsqoop", input.getName()); - assertEquals(true, input.isMasked()); + assertEquals(true, input.isSensitive()); assertEquals(len, input.getMaxLength()); assertEquals(MInputType.STRING, input.getType()); } diff --git a/common/src/test/java/org/apache/sqoop/model/TestMValidatedElement.java b/common/src/test/java/org/apache/sqoop/model/TestMValidatedElement.java index 8d075219..3fd5a95b 100644 --- a/common/src/test/java/org/apache/sqoop/model/TestMValidatedElement.java +++ b/common/src/test/java/org/apache/sqoop/model/TestMValidatedElement.java @@ -32,7 +32,7 @@ public class TestMValidatedElement { */ @Test public void testInitialization() { - MValidatedElement input = new MIntegerInput("input"); + MValidatedElement input = new MIntegerInput("input", false); assertEquals("input", input.getName()); assertEquals(Status.FINE, input.getValidationStatus()); } @@ -42,7 +42,7 @@ public void testInitialization() { */ @Test public void testValidationMessageStatus() { - MValidatedElement input = new MIntegerInput("input"); + MValidatedElement input = new MIntegerInput("input", false); // Default status assertEquals(Status.FINE, input.getValidationStatus()); // Set status and user message diff --git a/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbyRepositoryHandler.java b/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbyRepositoryHandler.java index 8af86b78..486635db 100644 --- a/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbyRepositoryHandler.java +++ b/repository/repository-derby/src/main/java/org/apache/sqoop/repository/derby/DerbyRepositoryHandler.java @@ -1369,13 +1369,12 @@ private void registerFormInputs(long formId, List> inputs, baseInputStmt.setLong(2, formId); baseInputStmt.setShort(3, inputIndex++); baseInputStmt.setString(4, input.getType().name()); + baseInputStmt.setBoolean(5, input.isSensitive()); // String specific column(s) if (input.getType().equals(MInputType.STRING)) { MStringInput strInput = (MStringInput) input; - baseInputStmt.setBoolean(5, strInput.isMasked()); baseInputStmt.setShort(6, strInput.getMaxLength()); } else { - baseInputStmt.setNull(5, Types.BOOLEAN); baseInputStmt.setNull(6, Types.INTEGER); } // Enum specific column(s) @@ -1494,7 +1493,7 @@ public void loadForms(List connectionForms, long inputForm = rsetInput.getLong(3); short inputIndex = rsetInput.getShort(4); String inputType = rsetInput.getString(5); - boolean inputStrMask = rsetInput.getBoolean(6); + boolean inputSensitivity = rsetInput.getBoolean(6); short inputStrLength = rsetInput.getShort(7); String inputEnumValues = rsetInput.getString(8); String value = rsetInput.getString(9); @@ -1504,16 +1503,16 @@ public void loadForms(List connectionForms, MInput input = null; switch (mit) { case STRING: - input = new MStringInput(inputName, inputStrMask, inputStrLength); + input = new MStringInput(inputName, inputSensitivity, inputStrLength); break; case MAP: - input = new MMapInput(inputName); + input = new MMapInput(inputName, inputSensitivity); break; case INTEGER: - input = new MIntegerInput(inputName); + input = new MIntegerInput(inputName, inputSensitivity); break; case ENUM: - input = new MEnumInput(inputName, inputEnumValues.split(",")); + input = new MEnumInput(inputName, inputSensitivity, inputEnumValues.split(",")); break; default: throw new SqoopException(DerbyRepoError.DERBYREPO_0006,