Java tutorial
/* * Copyright 2008 Jeff Dwyer * * 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 com.apress.progwt.client.college.gui; import java.util.List; import com.allen_sauer.gwt.log.client.Log; import com.apress.progwt.client.college.ServiceCache; import com.apress.progwt.client.college.gui.ext.VerticalLabel; import com.apress.progwt.client.domain.Application; import com.apress.progwt.client.domain.ProcessType; import com.apress.progwt.client.domain.ProcessValue; import com.apress.progwt.client.domain.User; import com.google.gwt.gears.core.client.GearsException; import com.google.gwt.gears.workerpool.client.MessageHandler; import com.google.gwt.gears.workerpool.client.WorkerPool; import com.google.gwt.user.client.DeferredCommand; import com.google.gwt.user.client.IncrementalCommand; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.Grid; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.SimplePanel; public class MyApplications extends Composite implements MyPageTab { /** * These methods can actually take quite a while on some browsers. * Let's use the IncrementalCommand to load 1 row at a time and free * up the browser in between. * * The IncrementalCommand contract says that we'll keep getting calls * to execute() as long as we return true, so we just loop through the * applications and return false once we're done. * * @author Jeff Dwyer * */ private class AddApplicationRows implements IncrementalCommand { private List<Application> applications; private int currentIndex = 0; private int row; private User user; public AddApplicationRows(List<Application> applications, User user, int row) { this.applications = applications; this.user = user; this.row = row; } public boolean execute() { if (currentIndex >= applications.size()) { return false; } else { int col = 0; Application application = applications.get(currentIndex); mainGrid.setWidget(row, col, new SchoolLink(application.getSchool())); col++; ApplicationStatusChooserWidget statusChooser = new ApplicationStatusChooserWidget(application, serviceCache); mainGrid.setWidget(row, col, statusChooser); col++; for (ProcessType processType : user.getNonStatusProcessTypes()) { ProcessValue value = application.getProcess().get(processType); if (value == null) { value = new ProcessValue(); } ProcessValueEditWidget checkW = new ProcessCheckboxWidget(null, processType, value); mainGrid.setWidget(row, col, checkW); col++; } row++; currentIndex++; } return true; } } private Grid mainGrid; private SimplePanel mainP; // private User thisUser; private ServiceCache serviceCache; public MyApplications(ServiceCache serviceCache) { this.serviceCache = serviceCache; mainP = new SimplePanel(); mainP.add(new Label("Loading")); initWidget(mainP); } public void delete(Application application) { // TODO Auto-generated method stub } /** * This is an empty bit of code that just shows what a WorkerPool * might look like. This isn't a great fit for this class, becasue * Worker's can't have any access to the DOM. */ private void doWorkerPoolDemo() { WorkerPool wp = null; try { wp = new WorkerPool(new MessageHandler() { public void onMessageReceived(String message, int srcWorker) { Log.info("Message: " + message + " src:" + srcWorker); } }); wp.createWorkerFromString(""); } catch (GearsException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public String getHistoryName() { return "MyApplications"; } public void load(User user) { List<ProcessType> processTypes = user.getNonStatusProcessTypes(); List<Application> applications = user.getSchoolRankings(); mainGrid = new Grid(applications.size() + 1, processTypes.size() + 2); int row = 0; int col = 1; mainGrid.setWidget(0, col, new Label("Status")); col++; for (ProcessType processType : user.getNonStatusProcessTypes()) { mainGrid.setWidget(0, col, new VerticalLabel(processType.getName())); col++; } // doWorkerPoolDemo(); row++; DeferredCommand.addCommand(new AddApplicationRows(applications, user, row)); mainP.setWidget(mainGrid); } public void refresh() { // TODO Auto-generated method stub } }