package com.thinkbiganalytics.policy; /*- * #%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.thinkbiganalytics.policy.rest.model.BaseUiPolicyRule; import com.thinkbiganalytics.policy.rest.model.FieldStandardizationRule; import com.thinkbiganalytics.policy.rest.model.FieldValidationRule; import com.thinkbiganalytics.policy.standardization.StandardizationPolicy; import com.thinkbiganalytics.policy.validation.ValidationPolicy; import com.thinkbiganalytics.standardization.transform.StandardizationAnnotationTransformer; import com.thinkbiganalytics.validation.transform.ValidatorAnnotationTransformer; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; /** * Transform a User Interface policy to the domain object */ public class FieldPolicyTransformer { private com.thinkbiganalytics.policy.rest.model.FieldPolicy uiFieldPolicy; private FieldPolicyTransformerListener listener; public FieldPolicyTransformer(com.thinkbiganalytics.policy.rest.model.FieldPolicy uiFieldPolicy) { this.uiFieldPolicy = uiFieldPolicy; } public void setListener(FieldPolicyTransformerListener listener) { this.listener = listener; } public List<BaseFieldPolicy> getStandardizationAndValidationPolicies() { List<BaseFieldPolicy> policies = new ArrayList<>(); List<FieldStandardizationRule> standardization = uiFieldPolicy.getStandardization(); List<FieldValidationRule> validation = uiFieldPolicy.getValidation(); List<BaseUiPolicyRule> allUiPolicies = new ArrayList<>(); if(standardization != null){ allUiPolicies.addAll(standardization); } if(validation != null){ allUiPolicies.addAll(validation); } //ensure the sequence is set int idx = 0; for(BaseUiPolicyRule rule : allUiPolicies){ if(rule.getSequence() == null){ rule.setSequence(idx); } idx++; } Collections.sort(allUiPolicies, new Comparator<BaseUiPolicyRule>() { @Override public int compare(BaseUiPolicyRule o1, BaseUiPolicyRule o2) { if(o1 == null && o2 == null ){ return 0; } if(o1 == null && o2 != null){ return 1; } if(o1 != null && o2 == null){ return -1; } Integer sq1 = o1.getSequence(); Integer sq2 = o2.getSequence(); return sq1.compareTo(sq2); } }); if (allUiPolicies != null) { for (BaseUiPolicyRule rule : allUiPolicies) { try { if(rule instanceof FieldStandardizationRule){ StandardizationPolicy policy = StandardizationAnnotationTransformer.instance().fromUiModel((FieldStandardizationRule)rule); policies.add(policy); if (listener != null) { listener.onAddStandardizationPolicy(policy); } } else if(rule instanceof FieldValidationRule) { ValidationPolicy policy = ValidatorAnnotationTransformer.instance().fromUiModel((FieldValidationRule)rule); policies.add(policy); if (listener != null) { listener.onAddValidationPolicy(policy); } } } catch (PolicyTransformException e) { throw new RuntimeException(e); } } } return policies; } /** * Build the domain level policies attached to the field holding both the Standardization and Validation domain objects transformed from the user interface object */ public FieldPolicy buildPolicy() { return FieldPolicyBuilder.newBuilder().fieldName(uiFieldPolicy.getFieldName()).feedFieldName(uiFieldPolicy.getFeedFieldName()).setProfile(uiFieldPolicy.isProfile()).addPolicies(getStandardizationAndValidationPolicies()) .setPartitionColumn(uiFieldPolicy.isPartitionColumn()).build(); } }