package com.thinkbiganalytics.standardization; /*- * #%L * thinkbig-field-policy-core * %% * Copyright (C) 2017 ThinkBig Analytics * %% * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * #L% */ import com.google.common.base.Predicate; import com.google.common.collect.Iterables; import com.thinkbiganalytics.policy.AvailablePolicies; import com.thinkbiganalytics.policy.PolicyTransformException; import com.thinkbiganalytics.policy.rest.model.FieldStandardizationRule; import com.thinkbiganalytics.policy.standardization.DateTimeStandardizer; import com.thinkbiganalytics.policy.standardization.DefaultValueStandardizer; import com.thinkbiganalytics.policy.standardization.MaskLeavingLastFourDigitStandardizer; import com.thinkbiganalytics.policy.standardization.RemoveControlCharsStandardizer; import com.thinkbiganalytics.policy.standardization.SimpleRegexReplacer; import com.thinkbiganalytics.policy.standardization.StandardizationPolicy; import com.thinkbiganalytics.policy.standardization.StripNonNumeric; import com.thinkbiganalytics.policy.standardization.UppercaseStandardizer; import com.thinkbiganalytics.standardization.transform.StandardizationAnnotationTransformer; import org.junit.Assert; import org.junit.Test; import java.io.IOException; import java.util.List; /** */ public class TestStandardizationTransform { @Test public void testDefaultValue() throws IOException { String INPUT = "My Default"; DefaultValueStandardizer standardizer = new DefaultValueStandardizer(INPUT); FieldStandardizationRule uiModel = StandardizationAnnotationTransformer.instance().toUIModel(standardizer); DefaultValueStandardizer convertedPolicy = fromUI(uiModel, DefaultValueStandardizer.class); Assert.assertEquals(INPUT, convertedPolicy.getDefaultStr()); } @Test public void testDateTime() throws IOException { String FORMAT = "MM/dd/YYYY"; DateTimeStandardizer standardizer = new DateTimeStandardizer(FORMAT, DateTimeStandardizer.OutputFormats.DATETIME_NOMILLIS); FieldStandardizationRule uiModel = StandardizationAnnotationTransformer.instance().toUIModel(standardizer); DateTimeStandardizer convertedPolicy = fromUI(uiModel, DateTimeStandardizer.class); Assert.assertEquals(FORMAT, convertedPolicy.getInputDateFormat()); Assert.assertEquals(DateTimeStandardizer.OutputFormats.DATETIME_NOMILLIS, convertedPolicy.getOutputFormat()); } @Test public void testRemoveControlCharsStandardizer() throws IOException { RemoveControlCharsStandardizer standardizer = RemoveControlCharsStandardizer.instance(); FieldStandardizationRule uiModel = StandardizationAnnotationTransformer.instance().toUIModel(standardizer); RemoveControlCharsStandardizer convertedPolicy = fromUI(uiModel, RemoveControlCharsStandardizer.class); Assert.assertEquals(standardizer, convertedPolicy); } @Test public void testUppercaseStandardizer() throws IOException { UppercaseStandardizer standardizer = UppercaseStandardizer.instance(); FieldStandardizationRule uiModel = StandardizationAnnotationTransformer.instance().toUIModel(standardizer); UppercaseStandardizer convertedPolicy = fromUI(uiModel, UppercaseStandardizer.class); Assert.assertEquals(standardizer, convertedPolicy); } @Test public void testStripNonNumeric() throws IOException { StripNonNumeric standardizer = StripNonNumeric.instance(); FieldStandardizationRule uiModel = StandardizationAnnotationTransformer.instance().toUIModel(standardizer); StripNonNumeric convertedPolicy = fromUI(uiModel, StripNonNumeric.class); Assert.assertEquals(standardizer, convertedPolicy); } @Test public void testMaskLeavingLastFourDigitStandardizer() throws IOException { MaskLeavingLastFourDigitStandardizer standardizer = MaskLeavingLastFourDigitStandardizer.instance(); FieldStandardizationRule uiModel = StandardizationAnnotationTransformer.instance().toUIModel(standardizer); MaskLeavingLastFourDigitStandardizer convertedPolicy = fromUI(uiModel, MaskLeavingLastFourDigitStandardizer.class); Assert.assertEquals(standardizer, convertedPolicy); } @Test public void testSimpleRegexReplacer() throws IOException { String regex = "\\p{Cc}"; String replace = "REPLACE"; SimpleRegexReplacer standardizer = new SimpleRegexReplacer(regex, replace); FieldStandardizationRule uiModel = StandardizationAnnotationTransformer.instance().toUIModel(standardizer); SimpleRegexReplacer convertedPolicy = fromUI(uiModel, SimpleRegexReplacer.class); Assert.assertEquals(regex, convertedPolicy.getPattern().pattern()); Assert.assertEquals(replace, convertedPolicy.getReplacement()); Assert.assertEquals(true, convertedPolicy.isValid()); } @Test public void testUiCreation() { List<FieldStandardizationRule> standardizationRules = AvailablePolicies.discoverStandardizationRules(); FieldStandardizationRule defaultValue = Iterables.tryFind(standardizationRules, new Predicate<FieldStandardizationRule>() { @Override public boolean apply(FieldStandardizationRule fieldStandardizationRule) { return fieldStandardizationRule.getName().equalsIgnoreCase("Default Value"); } }).orNull(); defaultValue.getProperty("Default Value").setValue("a new default value"); DefaultValueStandardizer convertedPolicy = fromUI(defaultValue, DefaultValueStandardizer.class); Assert.assertEquals("a new default value", convertedPolicy.getDefaultStr()); } private <T extends StandardizationPolicy> T fromUI(FieldStandardizationRule uiModel, Class<T> policyClass) { try { StandardizationPolicy policy = StandardizationAnnotationTransformer.instance().fromUiModel(uiModel); return (T) policy; } catch (PolicyTransformException e) { e.printStackTrace(); ; } return null; } }