/** * Copyright (c) 2011, Thilo Planz. All rights reserved. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package v7cr; import java.util.Locale; import org.bson.types.ObjectId; import v7cr.v7db.BSONBackedObject; import v7cr.v7db.LocalizedString; import v7cr.v7db.SchemaDefinition; import v7cr.vaadin.DBCollectionContainer; import v7cr.vaadin.PossibleValuesColumnGenerator; import com.mongodb.BasicDBObject; import com.mongodb.DBCollection; import com.vaadin.data.Property.ValueChangeEvent; import com.vaadin.data.Property.ValueChangeListener; import com.vaadin.event.ItemClickEvent; import com.vaadin.event.ItemClickEvent.ItemClickListener; import com.vaadin.terminal.ThemeResource; import com.vaadin.ui.ComboBox; import com.vaadin.ui.Component; import com.vaadin.ui.CustomComponent; import com.vaadin.ui.TabSheet; import com.vaadin.ui.Table; import com.vaadin.ui.VerticalLayout; import com.vaadin.ui.TabSheet.Tab; @SuppressWarnings("serial") class ReviewList extends CustomComponent implements ItemClickListener, ValueChangeListener { private final String projectName; private final Table table; private transient Object filterStatus; ReviewList(String projectName) { setIcon(new ThemeResource("../runo/icons/16/note.png")); VerticalLayout vl = new VerticalLayout(); vl.setSizeFull(); ComboBox c = new ComboBox(); V7CR v7 = V7CR.getInstance(); Locale l = v7.getLocale(); SchemaDefinition sd = new Review("x", "x").getSchemaDefinition() .getFieldDefinition("s"); for (Object x : sd.getPossibleValues()) { c.addItem(x); c.setItemCaption(x, LocalizedString.get(sd .getPossibleValueMetaData(x), "caption", l)); } c.setImmediate(true); c.addListener(this); vl.addComponent(c); this.projectName = projectName; BSONBackedObject p = v7.load("projects", projectName); setCaption(p.getStringField("name")); table = new Table(); table.addGeneratedColumn("status", new PossibleValuesColumnGenerator( Review.getReviewSchemaDefinition(), "s", l)); vl.addComponent(table); setCompositionRoot(vl); reload(); table.addListener((ItemClickListener) this); } public void itemClick(ItemClickEvent event) { TabSheet tabs = (TabSheet) getParent(); Object iid = event.getItemId(); if (iid instanceof ObjectId) { // find existing tab int count = tabs.getComponentCount(); for (int i = 0; i < count; i++) { Component x = tabs.getTab(i).getComponent(); if (x instanceof ReviewTab && ((ReviewTab) x).reviewId.equals(iid)) { tabs.setSelectedTab(x); return; } } Tab t = tabs.addTab(new ReviewTab((ObjectId) iid)); t.setClosable(true); tabs.setSelectedTab(t.getComponent()); } } public void reload() { DBCollection coll = V7CR.getInstance().getDBCollection("reviews"); BasicDBObject filter = new BasicDBObject("p", projectName); if (filterStatus != null) filter.append("s", filterStatus); SchemaDefinition sd = Review.getReviewSchemaDefinition(); DBCollectionContainer reviews = new DBCollectionContainer(sd, coll, filter, "c", false); // BeanContainer<ObjectId, Review> reviews = new BeanContainer<ObjectId, // Review>( // Review.class); // reviews.setBeanIdProperty("id"); // for (BSONObject o : // V7CR.getInstance().getDBCollection("reviews").find( // new BasicDBObject("p", this.projectName)).sort( // new BasicDBObject("c", -1))) { // Review r = new Review(BSONBackedObjectLoader.wrap(o, null)); // reviews.addBean(r); // } table.setContainerDataSource(reviews); reviews.addContainerProperty("reviewee.n", String.class, null); reviews.addContainerProperty("svn.rev", String.class, null); Locale l = V7CR.getInstance().getLocale(); // table.setVisibleColumns(new String[] { "status", "reviewee.name", // "registrationDate", "title", "SVNLogEntry.revision" }); table.setVisibleColumns(new String[] { "status", "reviewee.n", "c", "t", "svn.rev" }); table.setColumnHeaders(new String[] { sd.getFieldCaption("s", l), sd.getFieldCaption("reviewee", l), sd.getFieldCaption("c", l), sd.getFieldCaption("t", l), sd.getFieldCaption("svn.fields.rev", l) }); table.setSortDisabled(true); } public void valueChange(ValueChangeEvent event) { filterStatus = event.getProperty().getValue(); reload(); } }