Filtro di ricerca Java

myblacksloth

Nuovo Utente
11 Feb 2017
1
0
1
Salve a tutti,
devo implementare un filtro di ricerca per questo programma
https://github.com/myblacksloth/javaPrograms/blob/master/HotelManagement/README.md
ma ho dei seri problemi a fare ciò...

Per adesso ho implementato un interfaccia grafica che in base alle voci selezionate passa parametri diversi al filtro di ricerca ma non so se questo modo vada bene.
Di seguito inserisco il codice:

oggetto restituito dal filtro di ricerca
Codice:
package com_antomau_HotelManagement.Structure.Finder;


import com_antomau_HotelManagement.MyObjects.MyRoom;
import com_antomau_HotelManagement.MyObjects.MyHotel;


/**
 * Created by Antonio Maulucci http://www.antomau.com on 09/02/17.
 */
public class FinderObj {


    //variabili
    MyRoom r;
    MyHotel h;


    public FinderObj(MyHotel h, MyRoom r)
    {






        this.h = h;


        this.r = r;


    }






    public MyHotel getHotel()
    {
        return h;
    }






    public MyRoom getRoom()
    {
        return r;
    }








    public void print()
    {
        System.out.println(h.getSerial() + " " + r.getType());
    }








}

metodo main, sezione di codice che passa i parametri da cercare al filtro di ricerca
Codice:
class findbListenerClass implements ActionListener
        {
            @Override
            public void actionPerformed(ActionEvent e)
            {
                contentPanel.removeAll();

                JPanel searchPanel = new JPanel();
                //
                searchPanel.setLayout(new BorderLayout());
                //
                //
                JPanel searchConsole = new JPanel();
                //
                searchConsole.setLayout(new GridLayout(1,2));
                //
                JPanel optionsConsole = new JPanel();
                optionsConsole.setLayout(new GridLayout(3,2));
                //
                JCheckBox pricebox = new JCheckBox("Price<=");
                JTextField pricef = new JTextField();
                JCheckBox tvbox = new JCheckBox("TV");
                JCheckBox airbox = new JCheckBox("Air Conditioner");
                JCheckBox fridgebox = new JCheckBox("Fridge");
                JCheckBox netbox = new JCheckBox("Internet connection");
                //
                optionsConsole.add(pricebox);
                optionsConsole.add(pricef);
                optionsConsole.add(tvbox);
                optionsConsole.add(airbox);
                optionsConsole.add(fridgebox);
                optionsConsole.add(netbox);
                //
                //
                //
                JButton fb = new JButton("Find");
                //
                //
                searchConsole.add(optionsConsole);
                searchConsole.add(fb);
                //
                //
                JPanel foundDataPanel = new JPanel();
                //
                //
                searchPanel.add(searchConsole, BorderLayout.NORTH);
                searchPanel.add(foundDataPanel, BorderLayout.CENTER);



                contentPanel.add(searchPanel);

                f.pack();





                //listener per il pulsante di ricerca
                class fbListenerClass implements ActionListener
                {
                    @Override
                    public void actionPerformed(ActionEvent e)
                    {

                        foundDataPanel.removeAll();

                        JLabel foundData = new JLabel();
                        //label per i dati cercati

                        //check sugli elementi da cercare
                        //passare i dati da cercare al metodo di ricerca

                        //impostare il risultato della ricerca come argomento della JLabel

                        //variabili di ricerca
                        boolean findprice=false;
                        int price=0;
                        boolean findtv=false;
                        boolean findair=false;
                        boolean findfridge=false;
                        boolean findnet=false;

                        if (pricebox.isSelected())
                        {
                            findprice=true;
                            price = Integer.parseInt(pricef.getText());
                        }

                        if (tvbox.isSelected()) findtv = true;

                        if (airbox.isSelected()) findair = true;

                        if (fridgebox.isSelected()) findfridge = true;

                        if (netbox.isSelected()) findnet = true;


                        //myMap.finder(findprice, price, findtv, findair, findfridge, findnet);

                        foundData.setText(myMap.findPrintResults(findprice, price, findtv, findair, findfridge, findnet));

                        foundDataPanel.add(foundData);

                        f.pack();

                    }
                }
                ActionListener fbListener = new fbListenerClass();
                fb.addActionListener(fbListener);







            }
        }
        ActionListener findbListener = new findbListenerClass();
        findb.addActionListener(findbListener);

filtro di ricerca
Codice:
public ArrayList<FinderObj> finder(boolean findprice, int price, boolean findtv, boolean findair, boolean findfridge, boolean findnet)
    {
        ArrayList<FinderObj> results = new ArrayList<FinderObj>();


        //ottenere il keyset della mappa
        Set<MyHotel> mySet = getSet();


        //esplorare il set per ottenere la lista delle stanze per ogni hotel
        for (MyHotel hh : mySet)
        {
            //ottengo la lista delle stanze corrispondenti all'hotel hh
            RoomsList rr = theMap.get(hh);


            //scorrere la lista a caccia dei dati delle singole stanze
            //ottengo un iteratore per la lista
            RoomsListIterator myIterator = rr.listIterator();


            while (myIterator.hasNext()) //fintanto che l'iteratore rileva un'ulteriore nodo nella lista
            {


                MyRoom currentRoom = myIterator.next();


                int found = 1; //1 if found or 0 if not found
                /*
                si sfrutta la moltiplicazione di 0 e 1
                la variabile trovato inizialmente e' 1
                se la stanza corrente corrsiponde a quella cercata il moltiplicatore viene moltiplicato * 1 > ergo il risultato non cambia
                se invece la stanza corrente non rispecchia i criteri di ricerca il moltiplicatore viene moltiplicato * 0 > ergo il risultato rimarra' per sempre 0 perche'
                1*1=1 trovato
                1*0=0 non trovato
                0*1=0 trovato
                in tale modo la vriabile sara' 1 solo se tutti gli elementi sono stati trovati
                 */






                if (findprice)
                {
                    if (currentRoom.getPrice() <= price) found*=1;
                    else found*=0;
                }


                if (findtv)
                {
                    if (currentRoom.getTv()) found*=1;
                    else found*=0;
                }


                if (findair)
                {
                    if (currentRoom.getAirConditioner()) found*=1;
                    else found*=0;
                }


                if (findfridge)
                {
                    if (currentRoom.getFridge()) found*=1;
                    else found*=0;
                }


                if (findnet)
                {
                    if (currentRoom.getInternet()) found*=1;
                    else found*=0;
                }




                if (found==1)
                {
                    FinderObj foundElement = new FinderObj(hh, currentRoom);


                    results.add(foundElement); //se il risultato della ricerca e' 1 aggiungo la stanza corrente all'arraylist
                }




            }




        }


        System.out.println(results.toString()); //debug


        return results;
    }

metodo che inserisce in una stringa i risultati della ricerca, tale stringa genera una tabella in HTML

Codice:
public String findPrintResults(boolean findprice, int price, boolean findtv, boolean findair, boolean findfridge, boolean findnet)
    {


        ArrayList<FinderObj> results = finder(findprice, price, findtv, findair, findfridge, findnet);


        String stringResults = "";


        stringResults += "<html><table border\1\">";


        stringResults += "<tr><th>Room type</th><th>Available rooms</th><th>Price</th><th>TV</th><th>airCond</th><th>Fridge</th><th>Internet</th></tr>";






        //inserisco i risultati della ricerca in una stringa che formatta una tabella in html da impostare come argomento di una jlabel
        for (FinderObj fo : results)
        {
            MyRoom mr = fo.getRoom();


            stringResults += "<tr><td><b>Hotel:</b></td><td colspan=\"6\">" + fo.getHotel().getSerial() + " -- " + fo.getHotel().getName() + " -- " + fo.getHotel().getAddress() + " -- " + fo.getHotel().getCity() + " -- " + fo.getHotel().getCountry() + " -- " + fo.getHotel().getPhone() + " -- " + fo.getHotel().getFax() + "</td></tr>";


            stringResults += "<tr><td>" + mr.getType() + "</td><td>" + mr.getNum() + "</td><td>" + mr.getPrice() + "</td><td>" + mr.getTv() + "</td><td>" + mr.getAirConditioner() + "</td><td>" + mr.getFridge() + "</td><td>" + mr.getInternet() + "</td></tr>";


        }




        stringResults += "</table></html>";


        return stringResults;
    }

Il risultato è:
Schermata_2017_02_09_alle_16_52_52.png


È corretto un filtro di ricerca implementato in questo modo?
 
Discussioni simili
Autore Titolo Forum Risposte Data
motleyrulez Ricerca filtro con Ajax PHP 1
V Semplice barra di ricerca con filtro categorie prodotti E-Commerce 0
sandropochi [PHP] Form per creare filtro di ricerca su DB PHP 8
A Filtro body per motore di ricerca PHP 0
N Access: Filtro su maschera MS Access 0
A Problema filtro fluidifica Photoshop Photoshop 1
A filtro su tabella jQuery 3
Q Filtro effetti di luce Photoshop 1
R Filtro multiplo di selezione Sql PHP 2
Shyson Spostare filtro php di WordPress WordPress 0
felino Filtro Aqua FP3 9" 3/4: quale cartuccia scegliere? Discussioni Varie 0
J [MS Access] Filtro su combo in sottomaschera MS Access 11
C filtro rendering effetti di luce photoshop Photoshop 0
H [Photoshop] Filtro Nik Dfine non funziona. Photoshop 1
M [PHP] Filtro da TXT con collegamento ipertestuale PHP 13
M [PHP] o [APACHE] - Filtro geo per accesso sito PHP 6
S [PHP] filtro PHP 25
R Filtro login tramite mac-address su apache2 SSL Apache 1
A [Photoshop] Problema filtro fluidifica Photoshop 1
webmachine [JS] Filtro Prodotti jQuery 5
I [Photoshop] Che filtro è questo? Photoshop 1
P Filtro selettore e variabile jQuery 2
M [PHP - MYSQL] Mantenere filtro query in tabelle paginate PHP 3
P Filtro dipinto a olio Photoshop CC Photoshop 1
B Filtro per advanced custom fields WordPress 0
G Con Photoshop per applicare la Nitidezza (Filtro>Nitidezza) Photoshop 1
G Filtro per record sottomaschera MS Access 8
J Creare un filtro Javascript 24
I filtro tabella between and / or PHP 8
I Datagrid Jquery PHP, mi servirebbero alcune soluzioni... Insrimento immagine e filtro PHP 2
D Filtro su una datagridview ASP.NET 1
I Filtro maschera tramite combobox Database 0
C Creare un filtro in base alle checkbox selezionate Javascript 15
Sevenjeak JFileChooser: inserire in nome file l'estensione del filtro Java 5
W Problemi con filtro tabella HTML Javascript 0
asevenx applicare filtro anti spam PHP 6
davidec Disabilitare il filtro XSS (cross site scripting) via PHP PHP 3
Z Filtro su pagine protette Classic ASP 6
G filtro in php con Drupal CMS (Content Management System) 3
F Filtro Antispam Hotmail Sicurezza e Virus 6
G Come rimettere filtro mostra in Thunderbird 2 Windows e Software 0
D filtro sql su campo data PHP 1
I filtro in asp su una query di Access Classic ASP 1
S Filtro alpha per lo sfondo di un box HTML e CSS 3
A filtro data nulla Database 0
W Filtro dati PHP 1
I filtro in query access MS Access 2
S filtro Database 0
F access ricerca record con apostrofo. MS Access 0
C Ricerca Prodotti Woocommerce Javascript 0

Discussioni simili