co.edu.udea.iw.rtf.client.activity.CrearSolicitudActivity.java Source code

Java tutorial

Introduction

Here is the source code for co.edu.udea.iw.rtf.client.activity.CrearSolicitudActivity.java

Source

/*******************************************************************************
 * Copyright 2011 Google Inc. All Rights Reserved.
 *
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * 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.
 *******************************************************************************/
package co.edu.udea.iw.rtf.client.activity;

import java.util.List;

import co.edu.udea.iw.rtf.client.ClientFactory;
import co.edu.udea.iw.rtf.client.SolicitudesService;
import co.edu.udea.iw.rtf.client.dto.ProductoListado;
import co.edu.udea.iw.rtf.client.dto.SolicitudCreado;
import co.edu.udea.iw.rtf.client.dto.SucursalListado;
import co.edu.udea.iw.rtf.client.dto.TipoSolicitudListado;
import co.edu.udea.iw.rtf.client.place.CrearSolicitudPlace;
import co.edu.udea.iw.rtf.client.ui.CrearSolicitudView;

import com.google.gwt.activity.shared.AbstractActivity;
import com.google.gwt.event.dom.client.ChangeEvent;
import com.google.gwt.event.dom.client.ChangeHandler;
import com.google.gwt.event.shared.EventBus;
import com.google.gwt.place.shared.Place;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.AcceptsOneWidget;
import com.google.gwt.user.client.ui.DialogBox;
import com.google.gwt.user.client.ui.ListBox;

/**
 * Activities are started and stopped by an ActivityManager associated with a
 * container Widget. Esta actividad premite manejar la lgica de la
 * presentacion de la vista usada para permitir al cliente realizar una
 * solicitud a la empresa.
 * 
 * @author Juan David Agudelo jdaaa2009@gmail.com
 * @author Andres Felipe Vanegas anfevaloudea@gmail.com
 */
public class CrearSolicitudActivity extends AbstractActivity implements CrearSolicitudView.Presenter {
    /**
     * Used to obtain views, eventBus, placeController. Alternatively, could be
     * injected via GIN. ClientFactory injectada para manejar la lgica de
     * navegacin de la aplicacin web.
     */
    private ClientFactory clientFactory;

    /**
     * Crea un nuevo Activity para crear una nueva solicitud.
     * 
     * @param place
     *            el place asociado con la activity, contiene la informacin
     *            necesaria para inicializar la vista asociada con el Activity.
     * @param clientFactory
     *            Fabrica que se encarga de manejar las diferentes vistas de la
     *            aplicacin web.
     * */
    public CrearSolicitudActivity(CrearSolicitudPlace place, ClientFactory clientFactory) {
        this.clientFactory = clientFactory;
    }

    /**
     * Mtodo llamado cada vez que se incializa la actividad.
     * */
    @Override
    public void start(AcceptsOneWidget containerWidget, EventBus eventBus) {
        CrearSolicitudView view = clientFactory.getCrearSolicitudView();
        view.setPresenter(this);
        this.bind();
        containerWidget.setWidget(view.asWidget());
    }

    /**
     * Mtodo usado para unir los componentes de la actividad. En este mtodo
     * se realizan las inicializaciones y se usan los servicios remotos
     * requeridos por la vista.
     * */
    public void bind() {
        final CrearSolicitudView view = clientFactory.getCrearSolicitudView();
        view.getListBoxProducto().addChangeHandler(new ChangeHandler() {

            @Override
            public void onChange(ChangeEvent event) {
                // TODO Auto-generated method stub
                Boolean otroProductoVisible = view.getListBoxProducto().getSelectedIndex() == 0;
                view.getTextBoxOtroProducto().setVisible(otroProductoVisible);
                if (!otroProductoVisible) {
                    view.getTextBoxOtroProducto().setText("");
                }
            }
        });
        // obtiene lista de productos
        SolicitudesService.Util.getInstance().getProductos(new AsyncCallback<List<ProductoListado>>() {

            @Override
            public void onSuccess(List<ProductoListado> result) {
                view.getListBoxProducto().clear();
                view.getListBoxProducto().addItem("Lista de productos");
                for (ProductoListado producto : result) {
                    addProducto(producto);
                }
            }

            @Override
            public void onFailure(Throwable caught) {
            }
        });
        // obtiene lista de sucursales
        SolicitudesService.Util.getInstance().getSucursales(new AsyncCallback<List<SucursalListado>>() {

            @Override
            public void onSuccess(List<SucursalListado> result) {
                view.getListBoxSucursal().clear();
                view.getListBoxSucursal().addItem("Lista de sucursales");
                for (SucursalListado sucursal : result) {
                    addSucursal(sucursal);
                }
            }

            @Override
            public void onFailure(Throwable caught) {

            }
        });
        // obtiene lista de tipos de solicitud
        SolicitudesService.Util.getInstance().getTiposSolicitud(new AsyncCallback<List<TipoSolicitudListado>>() {

            @Override
            public void onSuccess(List<TipoSolicitudListado> result) {

                view.getListBoxTipoSolicitud().clear();
                view.getListBoxTipoSolicitud().addItem("Lista de solicitudes");
                for (TipoSolicitudListado tipoSolicitud : result) {
                    addTipoSolicitud(tipoSolicitud);
                }
            }

            @Override
            public void onFailure(Throwable caught) {

            }
        });
    }

    /**
     * Mtodo usado para agregar un nuevo tipo de solicitud en la lista de
     * solicitudes incluida dentro de la vista.
     * 
     * @param tipoSolicitudListado
     *            la informacin requerida del tipo de solicitud.
     * */
    public void addTipoSolicitud(TipoSolicitudListado tipoSolicitudListado) {
        CrearSolicitudView view = clientFactory.getCrearSolicitudView();
        ListBox listBoxTiposSolicitud = view.getListBoxTipoSolicitud();
        StringBuilder sb = new StringBuilder(tipoSolicitudListado.getCodigo().toString());
        sb.append(". ").append(tipoSolicitudListado.getNombre());
        listBoxTiposSolicitud.addItem(sb.toString());
    }

    /**
     * Mtodo usado para agregar una nueva sucursal en la lista de sucursales
     * incluida dentro de la vista.
     * 
     * @param sucursalListado
     *            la informacin requerida de la sucursal.
     * */
    public void addSucursal(SucursalListado sucursalListado) {
        CrearSolicitudView view = clientFactory.getCrearSolicitudView();
        ListBox listBoxSucursales = view.getListBoxSucursal();
        StringBuilder sb = new StringBuilder(sucursalListado.getCodigo().toString());
        sb.append(". ").append(sucursalListado.getNombre());
        listBoxSucursales.addItem(sb.toString());
    }

    public Long getCodigoFromString(String stringCodigo) {
        if (stringCodigo == null) {
            return null;
        }
        return Long.parseLong(stringCodigo.substring(0, stringCodigo.indexOf(".")));
    }

    /**
     * Mtodo usado para agregar un nuevo producto en la lista de productos
     * incluida dentro de la vista.
     * 
     * @param productoListado
     *            la informacin requerida del producto.
     * */
    public void addProducto(ProductoListado productoListado) {
        CrearSolicitudView view = clientFactory.getCrearSolicitudView();
        ListBox listBoxProductos = view.getListBoxProducto();
        StringBuilder sb = new StringBuilder(productoListado.getCodigo().toString());
        sb.append(". ").append(productoListado.getNombre());
        listBoxProductos.addItem(sb.toString());
    }

    @Override
    public String mayStop() {
        return null;
    }

    /**
     * @see CrearSolicitudView.Presenter#goTo(Place)
     */
    public void goTo(Place place) {
        clientFactory.getPlaceController().goTo(place);
    }

    /**
     * Mtodo para saber si el objeto es vaci o null
     * 
     * @param s
     * @return
     */
    public Boolean isTextoVacio(Object s) {
        return s == null || "".equals(s);
    }

    /**
     * Mtodo para validar los campos, que no sea vaci
     * 
     * @return
     */

    public boolean validarCampos() {
        boolean validar = true;
        CrearSolicitudView view = clientFactory.getCrearSolicitudView();
        if (isTextoVacio(view.getTextBoxNombresSolicitante().getText())) {
            view.getLabelNombresSolicitanteError().setText("El campo nombres es obligatorio.");
            validar = false;
        }
        if (isTextoVacio(view.getTextBoxApellidosSolicitante().getText())) {
            view.getLabelApellidosSolicitanteError().setText("El campo apellidos es obligatorio.");
            validar = false;
        }
        if (isTextoVacio(view.getTextBoxCorreoElectronico().getText())) {
            view.getLabelCorreoElectronicoError().setText("El correo eletronico es invlido.");
            validar = false;
        }
        if (!view.getTextBoxConfirmacionCorreo().getText().equals(view.getTextBoxCorreoElectronico().getText())) {
            view.getLabelConfirmacionCorreoError()
                    .setText("El correo electronico de confirmacion no coincide con el correo original.");
            validar = false;
        }
        if (isTextoVacio(view.getTextBoxTelefono().getText())) {
            view.getLabelTelefonoError().setText("El telefono es obligatorio.");
            validar = false;
        }
        if (isTextoVacio(view.getTextBoxTextoSolicitud().getText())) {
            view.getLabelTextSolicitudError().setText("El campo de texto de la solicitud es obligatorio.");
            validar = false;
        }
        if (view.getListBoxProducto().getSelectedIndex() == 0
                && isTextoVacio(view.getTextBoxOtroProducto().getText())) {
            view.getLabelProductoError()
                    .setText("Debe seleccionar un producto de la lista o especificar otro producto.");
            validar = false;
        }
        if (view.getListBoxSucursal().getSelectedIndex() == 0) {
            view.getLabelSucursalError().setText("Debe seleccionar una sucursal de la lista.");
            validar = false;
        }
        if (view.getListBoxTipoSolicitud().getSelectedIndex() == 0) {
            view.getLabelTipoSolicitudError().setText("Debe seleccionar una solicitud de la lista.");
            validar = false;
        }
        return validar;
    }

    /**
     * Mtodo para validar letras Nombres y Apellidos
     * 
     * @param nombres los nombres ingresados por el cliente.
     * @param apellidos los apellidos ingresados por el cliente.
     * @return true si los apellidos y nombres del cliente son
     * validos, false en caso contrario.
     */
    public Boolean validarLetras(String nombres, String apellidos) {
        CrearSolicitudView view = clientFactory.getCrearSolicitudView();
        Boolean valido = Boolean.TRUE;
        if (!nombres.matches("^([A-Za-z ])+$")) {
            view.getLabelNombresSolicitanteError()
                    .setText("Estimado Cliente.\n\n" + "El nombre debe contener solo letras.");
            valido = Boolean.FALSE;
        }
        if (!apellidos.matches("^([A-Za-z ])+$")) {
            view.getLabelApellidosSolicitanteError()
                    .setText("Estimado Cliente.\n\n" + "El apellido debe contener solo letras.");
            valido = Boolean.FALSE;
        }

        return valido;
    }

    /**
     * Mtodo para validar los nmeros Telfono y Celular...
     * 
     * @param tel telefono ingresado por el cliente.
     * @param cel celular ingresado por el cliente.
     * @return true si el celular y el telefono del usuario son validos,
     * false en caso contrario.
     */
    public Boolean validarNumeros(String tel, String cel) {
        CrearSolicitudView view = clientFactory.getCrearSolicitudView();
        Boolean valido = Boolean.TRUE;
        if (!tel.matches("^\\+?\\d{1,3}?[- .]?\\(?(?:\\d{2,3})\\)?[- .]?\\d\\d\\d[- .]?\\d\\d\\d\\d$")) {
            view.getLabelTelefonoError().setText(
                    "Estimado Cliente.\n\n" + "El Tel\u00e9fono debe contener solo n\u00FAmeros, sin espacios.");
            valido = Boolean.FALSE;
        }
        if (!cel.matches("^\\d*$")) {
            view.getLabelCelularError().setText("Estimado Cliente.\n\n"
                    + "El Celular debe contener solo n\u00FAmeros, sin espacios. O vac\u00edo");
            valido = Boolean.FALSE;
        }

        return valido;
    }

    /**
     * Mtodo para validar la direccin de correo electrnico
     * 
     * @param correo el correo del cliente.
     * @return true si el correo es valido, false en caso contrario.
     */
    public Boolean validarCorreo(String correo) {
        CrearSolicitudView view = clientFactory.getCrearSolicitudView();
        if (!correo.matches(
                "^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9-]+)*(\\.[A-Za-z]{2,})$")) {
            view.getLabelCorreoElectronicoError().setText("Estimado Cliente.\n\n"
                    + "La direcci\u00f3n de correo no es v\u00e1lida\n" + "Ejemplo: usuario@dominio.com");
            return Boolean.FALSE;
        }

        return Boolean.TRUE;
    }

    /**
     * Metodo que permite borrar el texto escrito en los labels usados para
     * mostrar los errores dentro de la vista.
     * */
    public void clearErrors() {
        CrearSolicitudView view = clientFactory.getCrearSolicitudView();
        view.getLabelApellidosSolicitanteError().setText("");
        view.getLabelNombresSolicitanteError().setText("");
        view.getLabelCorreoElectronicoError().setText("");
        view.getLabelConfirmacionCorreoError().setText("");
        view.getLabelCelularError().setText("");
        view.getLabelTelefonoError().setText("");
        view.getLabelOtroProductoError().setText("");
        view.getLabelProductoError().setText("");
        view.getLabelSucursalError().setText("");
        view.getLabelTipoSolicitudError().setText("");
        view.getLabelTextSolicitudError().setText("");
    }

    /**
     * Metodo usado para poner en blanco los campos
     * del formulario.
     * */
    public void limpiar() {
        clearErrors();
        CrearSolicitudView view = clientFactory.getCrearSolicitudView();
        view.getTextBoxOtroProducto().setVisible(Boolean.TRUE);
        view.getTextBoxNombresSolicitante().setText("");
        view.getTextBoxApellidosSolicitante().setText("");
        view.getTextBoxCorreoElectronico().setText("");
        view.getTextBoxConfirmacionCorreo().setText("");
        view.getTextBoxTelefono().setText("");
        view.getTextBoxCelular().setText("");
        view.getTextBoxTextoSolicitud().setText("");
        view.getListBoxProducto().setItemSelected(0, true);
        view.getListBoxSucursal().setItemSelected(0, true);
        view.getListBoxTipoSolicitud().setItemSelected(0, true);
        view.getTextBoxOtroProducto().setText("");
    }

    /**
     * Mtodo usado para guardar una solicitud en la base de datos y comprobar
     * que los datos ingresados por el usuario son correctos.
     * */
    @Override
    public void guardarSolicitud() {

        CrearSolicitudView view = clientFactory.getCrearSolicitudView();
        this.clearErrors();
        if (validarCampos()) {
            if (validarLetras(view.getTextBoxNombresSolicitante().getText(),
                    view.getTextBoxApellidosSolicitante().getText())) {
                if (validarNumeros(view.getTextBoxTelefono().getText(), view.getTextBoxCelular().getText())) {
                    if (validarCorreo(view.getTextBoxCorreoElectronico().getText())) {

                        SolicitudCreado solicitudCreado = new SolicitudCreado();
                        solicitudCreado.setNombres(view.getTextBoxNombresSolicitante().getText());
                        solicitudCreado.setApellidos(view.getTextBoxApellidosSolicitante().getText());
                        solicitudCreado.setCorreoElectronico(view.getTextBoxCorreoElectronico().getText());
                        solicitudCreado.setConfirmacionCorreo(view.getTextBoxConfirmacionCorreo().getText());
                        solicitudCreado.setCelular(view.getTextBoxCelular().getText());
                        solicitudCreado.setOtroProducto(view.getTextBoxOtroProducto().getText());
                        solicitudCreado.setTelefono(view.getTextBoxTelefono().getText());
                        solicitudCreado.setTextoSolicitud(view.getTextBoxTextoSolicitud().getText());
                        solicitudCreado.setProducto(this.getCodigoFromString(view.getListBoxProducto()
                                .getItemText(view.getListBoxProducto().getSelectedIndex())));
                        solicitudCreado.setSucursal(this.getCodigoFromString(view.getListBoxSucursal()
                                .getItemText(view.getListBoxSucursal().getSelectedIndex())));
                        solicitudCreado.setTipoSolicitud(this.getCodigoFromString(view.getListBoxTipoSolicitud()
                                .getItemText(view.getListBoxTipoSolicitud().getSelectedIndex())));

                        final DialogBox dialogBox = view.getDialogBox();
                        SolicitudesService.Util.getInstance().guardarSolicitud(solicitudCreado,
                                new AsyncCallback<String>() {

                                    @Override
                                    public void onSuccess(String result) {
                                        dialogBox.setText(result);
                                        dialogBox.center();

                                    }

                                    @Override
                                    public void onFailure(Throwable caught) {
                                        dialogBox.setText(
                                                "Pedimos disculpas, su solicitud no ha podido ser procesada, intente mas tarde.");
                                        dialogBox.center();
                                    }
                                });
                    }
                }

            }

        }
    }

    /**
     * @see CrearSolicitudView.Presenter#limpiarFormulario()
     * */
    @Override
    public void limpiarFormulario() {
        // TODO Auto-generated method stub
        limpiar();

    }
}