v7cr.ReviewList.java Source code

Java tutorial

Introduction

Here is the source code for v7cr.ReviewList.java

Source

/**
 * 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();
    }
}