package smartResorts.client;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
import smartResorts.client.ayuda.PanelAyuda;
import smartResorts.client.ayuda.PanelBienvenida;
import smartResorts.client.eventos.congresos.PanelCongresos;
import smartResorts.client.galeria.PanelGalerias;
import smartResorts.client.materialpromocional.PanelMaterial;
import smartResorts.client.meetme.PanelMeetMe;
import smartResorts.client.reservas.Category;
import smartResorts.client.reservas.MyPopUp;
import smartResorts.client.reservas.WidgetsHorarios.PanelReservasGenerico;
import smartResorts.client.services.BotonServicio;
import smartResorts.client.services.ListadoServicios;
import smartResorts.client.services.PanelServices;
import smartResorts.client.services.SubServiceBean;
import smartResorts.client.services.Subservices;
import smartResorts.client.services.has_id_service;
import smartResorts.client.traducciones.PanelTraduccion;
import smartResorts.client.traducciones.Traducible;
import smartResorts.client.util.ApiCalls;
import smartResorts.client.util.StandardRequest;
import smartResorts.client.weddings.PanelWeddings;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.event.dom.client.ChangeEvent;
import com.google.gwt.event.dom.client.ChangeHandler;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.json.client.JSONObject;
import com.google.gwt.json.client.JSONParser;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.DockLayoutPanel;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.HorizontalSplitPanel;
import com.google.gwt.user.client.ui.ListBox;
import com.google.gwt.user.client.ui.PopupPanel;
import com.google.gwt.user.client.ui.ScrollPanel;
import com.google.gwt.user.client.ui.SimplePanel;
import com.google.gwt.user.client.ui.Widget;
import smartResorts.client.social.PanelSocial;
/**
* Quieres agregar un nuevo modulo-panel-servicio?, es muy sencillo.
*
*
* 1.- Solo hay que ir a la BBDD y agregar un id a la tabla sub-services.
* Si el subservicio va englobado en un servicio hay que poner el identificador
* como tal, si va en la barra superior está en la categoria "Otros".
*
*
* 2.- Hay que agregar el subservicio en el enumerado Subservices de GWT.
*
* 3.- Crear un "PanelDerecho" o FlowPanel o Popup que se lanzará cuando se invoca al
* servicio.
*
* 4.- Ir al metodo showPanel de esta clase y poner en la lista de enumerados el panel
* a lanzar en el caso de que se pulse el botón correspondiente.
*
*
*
*
* @author luigi
*
*/
@SuppressWarnings("deprecation")
public class Estructura extends FlowPanel implements has_id_service{
Subservices subservice;
final FlowPanel header = new FlowPanel();
SimplePanel logo = new SimplePanel();
final FlowPanel center = new FlowPanel();
private ListadoServicios left_panel;
final FlowPanel right_panel = new FlowPanel();
private PanelDerecho _ultimo_panel_activo = null;
public static int currentTranslation = 0;
public static Traducible current_box;
private HashMap chapuza_complejo = new HashMap();
private ListBox _complejos;
private Button logout = new Button();
private Button createComplex = new Button();
private Button adminStrings = new Button();
{
PopupPanel aux = new PopupPanel();
aux.setWidget(Log.getInstance());
aux.show();
aux.setWidth("200px");
aux.setHeight("100px");
}
final Login dialog_login = new Login(new MyCallback() {
@Override
public void onDone(String result) {
try{
Log.log("Va a montar la estructura");
montarEstructura();
}catch(Exception ex){
Log.log("Esto revienta");
}
}
@Override
public void onError(String t) {
}
});
public Estructura() {
setStyleName("estructura");
}
private void montarEstructura() {
left_panel = new ListadoServicios(this,false);
Log.log("Inicializando");
SmartResorts2_2.centrado_vertical.setVisible(true);
// Cabecera
header.setStyleName("cabecera");
add(header);
Log.log("Inicializando");
// Logo
logo.setStyleName("logo");
add(logo);
// Big menu
add(left_panel);
// Center
right_panel.setStyleName("center");
add(right_panel);
// Botones de la cabecera
final ArrayList cabeceraBotones = new ArrayList();
try{
LinkedList auxServices = Global.getSubServices();
for (int i = 0; i < auxServices.size();i++){
SubServiceBean sb = auxServices.get(i);
if (sb == null)
Log.log("Esto es nulo");
Log.log("Va a comprobar un boton");
if (sb.location() == 1){ // Hacer enum para la localizacion.
Subservices ss = Subservices.values()[sb.getId()];
Log.log("Va a configurar el id " + sb.getId());
final BotonServicio auxButton = new BotonServicio(ss);
auxButton.setText(sb.getName());
cabeceraBotones.add(auxButton);
auxButton.setStyleName("gwt-Button boton_cabecera boton_" + i);
auxButton.setVisible(true);
header.add(auxButton);
// Inicializamos el clickHandler.
auxButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
showPanel(auxButton.getId_service());
}
});
} // Del if.
}
Log.log("Inicializa los botones");
}catch(Exception ex){
Log.log("Peta al inicializar la cabecera");
Log.log(ex);
}
// Combo
if (Global.user_type == "MOBAIL" || Global.user_type == "CORPORATIVO") {
_complejos = new ListBox();
header.add(_complejos);
_complejos.addChangeHandler(new ChangeHandler() {
@Override
public void onChange(ChangeEvent event) {
new StandardRequest(ApiCalls.set_user_complex, new MyCallback() {
@Override
public void onError(String t) {}
@Override
public void onDone(String result) {
if (_ultimo_panel_activo != null)
_ultimo_panel_activo.reload();
Global.id_complex=_complejos.getValue(_complejos.getSelectedIndex());
}
},"id_complex="+_complejos.getValue(_complejos.getSelectedIndex()));
}
});
_complejos.clear();
chapuza_complejo.clear();
// Aqui va la peticion.
new StandardRequest(ApiCalls.get_complex_list, new MyCallback() {
@Override
public void onError(String t) {}
@Override
public void onDone(String result) {
JSONObject complejos = JSONParser.parseStrict(result).isObject();
Iterator it = complejos.keySet().iterator();
int i = 0;
while (it.hasNext()) {
String key = (String) it.next();
JSONObject complejo = complejos.get(key).isObject();
_complejos.addItem(complejo.get("name").isString().stringValue(), ""+complejo.get("id").isNumber().doubleValue());
chapuza_complejo.put(""+complejo.get("id").isNumber().doubleValue(), i);
i++;
}
_complejos.setSelectedIndex(chapuza_complejo.get(Global.id_complex));
}
},"");
}
//setPanel(new PanelSplash());
setPanel(new PanelDemo());
// Mostramos ayuda si no se ha marcado que el usuario no quiere volver a verla.
if (Global.show_wellcome){
PanelBienvenida pb = new PanelBienvenida();
pb.center();
pb.show();
}
}
public FlowPanel getHeader() {
return header;
}
public void setPanel(Widget w) {
right_panel.clear();
right_panel.add(w);
_ultimo_panel_activo = (PanelDerecho) w;
}
public void setPanelScroll(Widget w) {
setPanel(w);
/*
right_panel.clear();
right_panel.add(right_panel_scroll);
right_panel_scroll.clear();
right_panel_scroll.add(right_panel_scroll_content);
right_panel_scroll_content.clear();
right_panel_scroll_content.add(w);
_ultimo_panel_activo = (PanelDerecho) w;
*/
}
private void showPanel(Subservices ss){
Widget aux = null;
Log.log("Te va a mostrar un panel");
boolean useScrollPanel = false;
switch(ss){
case Info:aux = new PanelInfo();break;
case Excursiones: aux = new PanelExcursiones();break;
case Customer_alerts: aux = new PanelAlertasC(1);break;
case Pre_customer_alerts: aux = new PanelAlertasC(0);break;
case Post_costumer_alerts: aux = new PanelAlertasC(2);break;
case Estadisticas: aux = new PanelEstadisticasAlertas();break;
case Feedback: aux = new PanelFeedbackAlertas();break;
case Instalaciones: aux = new PanelInstalaciones();break;
case Actividades: aux = new PanelActividades();break;
case Mapa: aux = new PanelMapa();break;
case Habitaciones: aux = new PanelHabitaciones();break;
case Restaurantes: aux = new PanelReservasGenerico(Category.Restaurantes);break;
case Spas: aux = new PanelReservasGenerico(Category.Spas);break;
case Deportes: aux = new PanelReservasGenerico(Category.Deportes);break;
case Cliente: aux = new ReservasCliente();break;
case Social: aux = new PanelSocial();break;
case Empleados: aux = new PanelEmpleados();useScrollPanel = true;break;
case Clientes: aux = new PanelClientes();break;
case Post_costumers:aux = new PanelClientes(2);break;
case Tour_operators:aux = new PanelTourOperators();break;
case Filtros: aux = new PanelFiltros();break;
case Configuración:aux = new PanelConfiguration();break;
case Traducir: aux = (Estructura.currentTranslation == 0)?null:new PanelTraduccion(Estructura.currentTranslation);
if (aux == null)
Estructura.showMessage("Debe seleccionar un cuadro de texto para realizar una traducción a otro idioma");
break;
case Ayuda: aux = new PanelAyuda();break;
case Services: aux = new PanelServices();break;
case Publicar: SmartResorts2_2.publish();break;
case MeetMe: aux = new PanelMeetMe();break;
case Material_promocional: aux = new PanelMaterialPromocional();break;
case Paneles: aux = new PanelPaneles();break;
case Galerias: aux = new PanelGalerias();break;
case Congresos: aux = new PanelCongresos();break;
case Bodas: aux = new PanelWeddings();
// Servicios muertos.
//case Temas: aux = new PanelThemes();break; // Servicio muerto
// case Pantallas: aux = new PanelScreens();break; // Servicio muerto
}
if (aux == null)
Log.log("El panel es nulo");
else if (aux instanceof MyPopUp){
MyPopUp panel = (MyPopUp)aux;
/*panel.center();*/
panel.show();
} else if (aux instanceof PopUp2) {
PopUp2 panel = (PopUp2)aux;
panel.show();
}
else setPanel(aux);
}
@Override
public Subservices get_id_subservice() {
// TODO Auto-generated method stub
return subservice;
}
@Override
public void set_id_subservice(Subservices subservice) {
// Desde aqui invocamos al subservicio correspondiente.
this.subservice = subservice;
showPanel(Subservices.values()[subservice.ordinal()]);
}
}