"First, solve the problem.
Then, write the code."
John Johnson
Java/JSF

Kompozytor Pizzy

[współbieżne] Producent - konsument
zamknięty:
maj 2011
zleceniodawca:
projekt autorski
Opis:

Strona napisana w technologii Java Server Faces na potrzeby pracy licencjackiej. Umożliwia ona składanie pizzy poprzez przeciąganie wybranych składników na ciasto. Dodatkowo podczas składania zamówienia uruchamiany jest mechanizm oparty na wzorcu projektowym 'Dekorator' tworzący pizzę 'wyjściową'. Podczas programowania strony zostały użyte komponenty z biblioteki PrimeFaces.

oto, jak wyglądała akcja nakładania składnika na ciasto od strony kontrolera:

public void onDrop(DragDropEvent ddEvent) {
        int id = Integer.parseInt(
                ddEvent.getDragId().substring(
                ddEvent.getDragId().indexOf(':') + 1,
                ddEvent.getDragId().lastIndexOf(':')));
        String nazwaSkladnika = SkladnikController.getNazwaSkladnika(id);
        int indeks = skladnikiWybrane.indexOf(nazwaSkladnika);

        if (indeks != -1) {
            facesMessage = new FacesMessage(FacesMessage.SEVERITY_WARN,
                    "Ostrzeżenie:", "Składnik '" + nazwaSkladnika + "' już był, przenoszę na wierzch.");
        } else {
            skladnikiWybrane.add(nazwaSkladnika);
            facesMessage = new FacesMessage(FacesMessage.SEVERITY_INFO,
                    "Dodano nowy składnik:", nazwaSkladnika);
        }
        FacesContext.getCurrentInstance().addMessage(null, facesMessage);
    }

Natomiast po złożeniu zamówienia uruchamiany był mechanizm tworzenia pizzy wykorzystujący obudowywanie istniejących obiektów (wzorzec Dekorator):

public void createPizza() {
        int i = 0;
        Pizza p = new Pizza();
        ArrayList lst = new ArrayList(); //lista typu skladnikogolny
        if (skladnikiWybrane.size() > 0) {
            lst.add(new SkladnikOgolny(p, skladnikiWybrane.get(0)));

            for (i = 1; i < skladnikiWybrane.size(); i++) {
                lst.add(new SkladnikOgolny(
                        lst.get(i - 1), skladnikiWybrane.get(i)));
            }
        }

        facesMessage = new FacesMessage(FacesMessage.SEVERITY_WARN,
                "(Dekorator)", "Tworzę pizzę i dekoruję składnikami...");
        FacesContext.getCurrentInstance().addMessage(null, facesMessage);

        if (skladnikiWybrane.isEmpty()) {
            this.podsumowanie = "Ciasto";
        } else {
            this.podsumowanie = lst.get(i - 1).getNazwa();
        }
    }
do góry