ingo@4: package de.intevation.flys.client.client.ui; ingo@4: ingo@4: import com.google.gwt.core.client.GWT; ingo@97: import com.google.gwt.user.client.rpc.AsyncCallback; ingo@4: ingo@4: import com.smartgwt.client.widgets.Canvas; ingo@4: import com.smartgwt.client.widgets.Label; ingo@4: import com.smartgwt.client.widgets.grid.ListGrid; ingo@4: import com.smartgwt.client.widgets.grid.ListGridField; ingo@97: import com.smartgwt.client.widgets.grid.ListGridRecord; ingo@4: import com.smartgwt.client.widgets.layout.VLayout; raimund@79: import com.smartgwt.client.types.VerticalAlignment; ingo@4: ingo@4: import de.intevation.flys.client.shared.model.Collection; ingo@4: import de.intevation.flys.client.shared.model.CollectionRecord; ingo@97: import de.intevation.flys.client.shared.model.User; ingo@4: ingo@97: import de.intevation.flys.client.client.Config; ingo@211: import de.intevation.flys.client.client.FLYSConstants; ingo@97: import de.intevation.flys.client.client.event.CollectionChangeEvent; ingo@97: import de.intevation.flys.client.client.event.CollectionChangeHandler; ingo@97: import de.intevation.flys.client.client.services.UserCollectionsService; ingo@97: import de.intevation.flys.client.client.services.UserCollectionsServiceAsync; ingo@4: ingo@4: ingo@4: /** ingo@4: * The project list shows a list of projects of a specific user. ingo@4: * ingo@4: * @author Ingo Weinzierl ingo@4: */ ingo@97: public class ProjectList ingo@97: extends VLayout ingo@97: implements CollectionChangeHandler ingo@97: { ingo@4: /** The interface that provides i18n messages. */ ingo@211: private FLYSConstants messages = GWT.create(FLYSConstants.class); ingo@4: ingo@97: /** The UserService used to retrieve information about the current user. */ ingo@97: protected UserCollectionsServiceAsync userCollectionsService = ingo@97: GWT.create(UserCollectionsService.class); ingo@97: ingo@4: /** The user whose projects should be displayed.*/ ingo@4: protected User user; ingo@4: ingo@4: /** The grid that contains the project rows.*/ ingo@4: protected ListGrid grid; ingo@4: ingo@4: /** ingo@4: * The default constructor that creates a new ProjectList for a specific ingo@4: * user. ingo@4: * ingo@4: * @param user The user. ingo@4: */ ingo@4: public ProjectList(User user) { ingo@4: this.user = user; ingo@4: ingo@4: grid = new CollectionGrid(); ingo@4: initGrid(); ingo@97: init(); ingo@4: ingo@97: updateUserCollections(); ingo@4: } ingo@4: ingo@4: ingo@4: protected void initGrid() { ingo@4: grid.setEmptyMessage(messages.no_projects()); ingo@4: grid.setLoadingDataMessage(messages.load_projects()); ingo@4: grid.setShowRecordComponents(true); ingo@4: grid.setShowRecordComponentsByCell(true); ingo@4: grid.setCanRemoveRecords(false); ingo@4: grid.setShowHeader(false); ingo@4: grid.setWidth100(); ingo@97: grid.setHeight100(); ingo@4: ingo@4: ListGridField date = new ListGridField("date", "date"); ingo@4: ListGridField name = new ListGridField("name", "name"); ingo@4: ingo@97: date.setWidth(100); ingo@97: name.setWidth(195); ingo@4: ingo@97: grid.setFields(date, name); ingo@4: } ingo@4: ingo@4: ingo@4: /** ingo@4: * The init() method handles the layout stuff for this widget. ingo@4: */ ingo@4: protected void init() { ingo@4: setWidth(300); ingo@4: setHeight100(); ingo@4: setShowResizeBar(true); ingo@4: setShowEdges(false); ingo@4: setLayoutMargin(0); raimund@79: setLayoutAlign(VerticalAlignment.TOP); ingo@4: ingo@4: Label title = new Label(messages.projects()); ingo@4: title.setHeight("20"); ingo@4: title.setMargin(5); ingo@4: title.setWidth100(); raimund@79: title.setStyleName("fontLightSmall"); ingo@4: ingo@4: Canvas titleWrapper = new Canvas(); raimund@79: titleWrapper.setStyleName("bgBlueDark"); ingo@4: titleWrapper.setWidth100(); raimund@79: titleWrapper.setHeight("20px"); ingo@4: titleWrapper.addChild(title); ingo@4: ingo@4: Canvas gridWrapper = new Canvas(); ingo@4: gridWrapper.setPadding(0); ingo@4: titleWrapper.setWidth100(); ingo@4: gridWrapper.addChild(grid); ingo@4: ingo@4: addMember(titleWrapper); ingo@4: addMember(gridWrapper); ingo@4: } ingo@97: ingo@97: ingo@97: public void onCollectionChange(CollectionChangeEvent event) { ingo@97: GWT.log("ProjectList.onCollectionChange"); ingo@97: ingo@97: updateUserCollections(); ingo@97: } ingo@97: ingo@97: ingo@97: protected void updateUserCollections() { ingo@97: Config config = Config.getInstance(); ingo@97: String url = config.getServerUrl(); ingo@97: ingo@97: userCollectionsService.getUserCollections(url, user.identifier(), ingo@97: new AsyncCallback() { ingo@97: public void onFailure(Throwable caught) { ingo@97: GWT.log("Could not recieve a list of user collections."); ingo@97: GWT.log(caught.getMessage()); ingo@97: } ingo@97: ingo@97: public void onSuccess(Collection[] collections) { ingo@97: int num = collections != null ? collections.length : 0; ingo@97: ingo@97: GWT.log("Received " + num + " user collections."); ingo@97: ingo@97: if (num == 0) { ingo@97: return; ingo@97: } ingo@97: ingo@97: updateGrid(collections); ingo@97: } ingo@97: } ingo@97: ); ingo@97: } ingo@97: ingo@97: ingo@97: protected void clearGrid() { ingo@97: ListGridRecord[] records = grid.getRecords(); ingo@97: ingo@97: for (ListGridRecord record: records) { ingo@97: grid.removeData(record); ingo@97: } ingo@97: } ingo@97: ingo@97: ingo@97: protected void updateGrid(Collection[] collections) { ingo@97: clearGrid(); ingo@97: ingo@97: for (Collection c: collections) { ingo@97: grid.addData(new CollectionRecord(c)); ingo@97: } ingo@97: } ingo@4: } ingo@4: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :