org.codehaus.enunciate.samples.petclinic.app.client.Owners.java Source code

Java tutorial

Introduction

Here is the source code for org.codehaus.enunciate.samples.petclinic.app.client.Owners.java

Source

/*
 * Copyright 2007 Google Inc.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 * 
 * http://www.apache.org/licenses/LICENSE-2.0
 * 
 * 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 org.codehaus.enunciate.samples.petclinic.app.client;

import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.*;
import org.codehaus.enunciate.samples.petclinic.client.services.ClinicAsync;
import org.codehaus.enunciate.samples.petclinic.client.schema.Owner;
import org.codehaus.enunciate.samples.petclinic.client.schema.Pet;

import java.util.Collection;
import java.util.Iterator;

/**
 * Demonstrates the various text widgets.
 */
public class Owners extends ClinicComponent {

    public static ClinicComponentInfo init() {
        return new ClinicComponentInfo("Owners",
                "<h2>Owners</h2>" + "<p>You can search for owners by last name.  "
                        + "You can click on an owner name to see a list of that owner's pets.  "
                        + "Each action involves a GWT remote procedure call.</p>") {

            public ClinicComponent createInstance() {
                return new Owners();
            }

            public String getColor() {
                return "#2fba10";
            }
        };
    }

    public Owners() {
        final ClinicAsync clinic = ClinicAsync.Util.getInstance();
        FlowPanel searchPanel = new FlowPanel();
        final Grid grid = new Grid();
        final VerticalPanel layout = new VerticalPanel();
        final TextBox searchBox = new TextBox();
        searchPanel.add(searchBox);
        searchPanel.add(new Button("find", new ClickListener() {
            public void onClick(Widget widget) {
                if (searchBox.getText().length() > 0) {
                    clinic.findOwners(searchBox.getText(), new AsyncCallback<Collection<Owner>>() {
                        public void onSuccess(Collection<Owner> collection) {
                            if (collection.size() == 0) {
                                grid.resize(1, 1);
                                grid.setWidget(0, 0, new Label(
                                        "No owners of last name '" + searchBox.getText() + "' were found."));
                            } else {
                                grid.resize(collection.size() + 1, 4);
                                grid.setWidget(0, 0, new Label("name"));
                                grid.setWidget(0, 1, new Label("phone"));
                                grid.setWidget(0, 2, new Label("address"));
                                grid.setWidget(0, 3, new Label("city"));
                                grid.getCellFormatter().setWidth(0, 1, "12em");
                                grid.getCellFormatter().setHorizontalAlignment(0, 0, HasAlignment.ALIGN_CENTER);
                                grid.getCellFormatter().setHorizontalAlignment(0, 1, HasAlignment.ALIGN_CENTER);
                                grid.getCellFormatter().setHorizontalAlignment(0, 2, HasAlignment.ALIGN_CENTER);
                                grid.getCellFormatter().setHorizontalAlignment(0, 3, HasAlignment.ALIGN_CENTER);
                                grid.getRowFormatter().setStyleName(0, "clinic-tables-header");
                                int row = 1;
                                Iterator<Owner> it = collection.iterator();
                                while (it.hasNext()) {
                                    final Owner owner = it.next();
                                    final Label nameLabel = new Label(
                                            owner.getFirstName() + " " + owner.getLastName());
                                    nameLabel.addStyleName("clinic-clickable");
                                    nameLabel.addClickListener(new ClickListener() {
                                        public void onClick(Widget widget) {
                                            final DialogBox detailsPanel = new DialogBox(true);
                                            final VerticalPanel petList = new VerticalPanel();
                                            petList.add(new Label("Pets of " + nameLabel.getText() + ":"));
                                            detailsPanel.setWidget(petList);
                                            detailsPanel.setPopupPositionAndShow(new PopupPanel.PositionCallback() {
                                                public void setPosition(int offsetWidth, int offsetHeight) {
                                                    detailsPanel.setPopupPosition(nameLabel.getAbsoluteLeft(),
                                                            nameLabel.getAbsoluteTop());
                                                }
                                            });
                                            Iterator petsIt = owner.getPetIds().iterator();
                                            while (petsIt.hasNext()) {
                                                final Integer petId = (Integer) petsIt.next();
                                                clinic.loadPet(petId.intValue(), new AsyncCallback<Pet>() {
                                                    public void onSuccess(Pet response) {
                                                        petList.add(new Label("A " + response.getType().getName()
                                                                + " named " + response.getName() + "."));
                                                    }

                                                    public void onFailure(Throwable throwable) {
                                                        petList.add(new Label("Error loading pet " + petId + ": "
                                                                + throwable.getMessage()));
                                                    }
                                                });
                                            }
                                        }
                                    });
                                    grid.setWidget(row, 0, nameLabel);
                                    grid.setWidget(row, 1, new Label(owner.getTelephone()));
                                    grid.setWidget(row, 2, new Label(owner.getAddress()));
                                    grid.setWidget(row, 3, new Label(owner.getCity()));
                                    row++;
                                }
                            }
                        }

                        public void onFailure(Throwable throwable) {
                            grid.resize(1, 1);
                            grid.setWidget(0, 0, new Label("ERROR: " + throwable.getMessage()));
                        }
                    });
                }
            }
        }));
        layout.add(searchPanel);
        layout.add(grid);
        initWidget(layout);
    }

}