Advertisement
Guest User

Untitled

a guest
Mar 30th, 2017
310
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 8.39 KB | None | 0 0
  1. package com.mundodescuento.model.response.form;
  2.  
  3. import android.support.annotation.NonNull;
  4. import android.support.design.widget.TextInputLayout;
  5. import android.util.Patterns;
  6. import android.view.LayoutInflater;
  7. import android.view.View;
  8. import android.view.ViewGroup;
  9. import android.widget.ArrayAdapter;
  10. import android.widget.CheckBox;
  11. import android.widget.EditText;
  12. import android.widget.Spinner;
  13. import android.widget.TextView;
  14.  
  15. import com.mundodescuento.R;
  16.  
  17. import java.util.LinkedList;
  18.  
  19. /**
  20.  * Created by Pato on 8/10/16.
  21.  */
  22. public abstract class LeadFormFieldType {
  23.  
  24.     private final boolean isRequired;
  25.     private final String label;
  26.  
  27.     public LeadFormFieldType(FormResponseDataTemplatefieldsLeadfield field) {
  28.         isRequired = field.isRequired();
  29.         label = field.getLabel();
  30.     }
  31.  
  32. //    public static LeadFormFieldType buildFromType(LeadFormField field) {
  33. //        String type = field.getBasicType();
  34. //        return buildFromBasicType(field, type);
  35. //    }
  36.  
  37.     @NonNull
  38.     protected static LeadFormFieldType buildFromBasicType(FormResponseDataTemplatefieldsLeadfield field, String type) {
  39.         switch (type.toLowerCase()) {
  40.             case "number":
  41.                 return new NumberField(field);
  42.             case "bool":
  43.             case "boolean":
  44.                 return new BooleanField(field);
  45.             case "email"://El pola puede ser la verga
  46.             case "mail":
  47.                 return new EmailField(field);
  48.             case "phone":
  49.                 return new PhoneField(field);
  50.             case "list":
  51.                 return new ListField(field);
  52.             case "string":
  53.             default:
  54.                 return new StringField(field);
  55.         }
  56.     }
  57.  
  58.     public boolean hasError() {
  59.         return isRequired() && !isValid();
  60.     }
  61.  
  62.     public String requiredExtra() {
  63.         return !isRequired() ? " (Opcional)" : "";
  64.     }
  65.  
  66.     protected String getLabel() {
  67.         return label;
  68.     }
  69.  
  70.     protected boolean isRequired() {
  71.         return true;
  72.         //return isRequired;
  73.     }
  74.  
  75.     public abstract View inflateView(LayoutInflater inflater, ViewGroup parent);
  76.  
  77.     public abstract String getInsertedValue();
  78.  
  79.     public abstract boolean isValid();
  80.  
  81.     public abstract void showValidationError();
  82.  
  83.     public abstract void hideError();
  84.  
  85.     public static LeadFormFieldType buildFromType(FormResponseDataTemplatefieldsLeadfield formResponseDataTemplatefieldsLeadfield) {
  86.         return LeadFormFieldType.buildFromBasicType(formResponseDataTemplatefieldsLeadfield, formResponseDataTemplatefieldsLeadfield.getDataType());
  87.     }
  88.  
  89.     public static class StringField extends LeadFormFieldType {
  90.  
  91.         private EditText et;
  92.  
  93.         public StringField(FormResponseDataTemplatefieldsLeadfield field) {
  94.             super(field);
  95.         }
  96.  
  97.         @Override
  98.         public View inflateView(LayoutInflater inflater, ViewGroup parent) {
  99.             View view = inflater.inflate(R.layout.layout_form_field_string, parent, false);
  100.             et = (EditText) view.findViewById(R.id.etField);
  101.             ((TextInputLayout) view.findViewById(R.id.tiLyt)).setHint(getLabel() + requiredExtra());
  102.             return view;
  103.         }
  104.  
  105.         @Override
  106.         public String getInsertedValue() {
  107.             return et.getText().toString();
  108.         }
  109.  
  110.         @Override
  111.         public boolean isValid() {
  112.             return getInsertedValue().length() > 1;
  113.         }
  114.  
  115.         @Override
  116.         public void showValidationError() {
  117.             et.setError("El valor ingresado no es valido");
  118.         }
  119.  
  120.         @Override
  121.         public void hideError() {
  122.             et.setError(null);
  123.         }
  124.  
  125.     }
  126.  
  127.     private static class NumberField extends LeadFormFieldType {
  128.         private EditText et;
  129.  
  130.         public NumberField(FormResponseDataTemplatefieldsLeadfield field) {
  131.             super(field);
  132.         }
  133.  
  134.         @Override
  135.         public View inflateView(LayoutInflater inflater, ViewGroup parent) {
  136.             View view = inflater.inflate(R.layout.layout_form_field_number, parent, false);
  137.             et = (EditText) view.findViewById(R.id.etField);
  138.             ((TextInputLayout) view.findViewById(R.id.tiLyt)).setHint(getLabel() + requiredExtra());
  139.             return view;
  140.         }
  141.  
  142.         @Override
  143.         public String getInsertedValue() {
  144.             return et.getText().toString();
  145.         }
  146.  
  147.         @Override
  148.         public boolean isValid() {
  149.             return getInsertedValue().length() > 1;
  150.         }
  151.  
  152.         @Override
  153.         public void showValidationError() {
  154.             et.setError("El valor ingresado no es valido");
  155.         }
  156.  
  157.         @Override
  158.         public void hideError() {
  159.             et.setError(null);
  160.         }
  161.     }
  162.  
  163.     private static class PhoneField extends NumberField {
  164.  
  165.         public PhoneField(FormResponseDataTemplatefieldsLeadfield field) {
  166.             super(field);
  167.         }
  168.  
  169.         @Override
  170.         public boolean isValid() {
  171.             return getInsertedValue().length() > 7;
  172.         }
  173.     }
  174.  
  175.     private static class EmailField extends StringField {
  176.         public EmailField(FormResponseDataTemplatefieldsLeadfield field) {
  177.             super(field);
  178.         }
  179.  
  180.         @Override
  181.         public boolean isValid() {
  182.             return Patterns.EMAIL_ADDRESS.matcher(getInsertedValue()).matches();
  183.         }
  184.     }
  185.  
  186.     private static class BooleanField extends LeadFormFieldType {
  187.         private CheckBox checkbox;
  188.  
  189.         public BooleanField(FormResponseDataTemplatefieldsLeadfield field) {
  190.             super(field);
  191.         }
  192.  
  193.         @Override
  194.         public View inflateView(LayoutInflater inflater, ViewGroup parent) {
  195.             View view = inflater.inflate(R.layout.layout_form_field_boolean, parent, false);
  196.             checkbox = (CheckBox) view.findViewById(R.id.chkField);
  197.             TextView textField = (TextView) view.findViewById(R.id.textField);
  198.             textField.setText(getLabel() + requiredExtra());
  199.             textField.setOnClickListener(new View.OnClickListener() {
  200.                 @Override
  201.                 public void onClick(View v) {
  202.                     checkbox.toggle();
  203.                 }
  204.             });
  205.             return view;
  206.         }
  207.  
  208.         @Override
  209.         public String getInsertedValue() {
  210.             return String.valueOf(checkbox.isChecked());
  211.         }
  212.  
  213.         @Override
  214.         public boolean isValid() {
  215.             return true;
  216.         }
  217.  
  218.         @Override
  219.         public void showValidationError() {
  220.         }
  221.  
  222.         @Override
  223.         public void hideError() {
  224.         }
  225.     }
  226.  
  227.     private static class ListField extends LeadFormFieldType {
  228.         private final LinkedList<String> labels;
  229.         private final LinkedList<String> keys;
  230.         private Spinner spinner;
  231.         private TextView textField;
  232.  
  233.         public ListField(FormResponseDataTemplatefieldsLeadfield field) {
  234.             super(field);
  235.             labels = new LinkedList<>();
  236.             keys = new LinkedList<>();
  237.  
  238.             keys.add(null);
  239.             labels.add("Elegí una opción");
  240.  
  241.             for (LeadFormField.FieldOption option : field.getOptions()) {
  242.                 keys.add(option.getKey());
  243.                 labels.add(option.getValue());
  244.             }
  245.         }
  246.  
  247.         @Override
  248.         public View inflateView(LayoutInflater inflater, ViewGroup parent) {
  249.             View view = inflater.inflate(R.layout.layout_form_field_list, parent, false);
  250.  
  251.             textField = (TextView) view.findViewById(R.id.textField);
  252.             textField.setText(getLabel() + requiredExtra());
  253.  
  254.             spinner = (Spinner) view.findViewById(R.id.spinnerField);
  255.  
  256.             ArrayAdapter<String> adapter = new ArrayAdapter<>(inflater.getContext(), android.R.layout.simple_spinner_item, labels);
  257.             spinner.setAdapter(adapter);
  258.  
  259.             return view;
  260.         }
  261.  
  262.         @Override
  263.         public String getInsertedValue() {
  264.             return keys.get(spinner.getSelectedItemPosition());
  265.         }
  266.  
  267.         @Override
  268.         public boolean isValid() {
  269.             return getInsertedValue() != null;
  270.         }
  271.  
  272.         @Override
  273.         public void showValidationError() {
  274.             textField.setError("Elegí un elemento de la lista");
  275.         }
  276.  
  277.         @Override
  278.         public void hideError() {
  279.             textField.setError(null);
  280.         }
  281.     }
  282. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement