com.appspot.socialinquirer.client.view.TopicsViewImpl.java Source code

Java tutorial

Introduction

Here is the source code for com.appspot.socialinquirer.client.view.TopicsViewImpl.java

Source

/*
 * Copyright 2012 Nabeel Mukhtar 
 * 
 * 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.appspot.socialinquirer.client.view;

import java.util.ArrayList;

import com.appspot.socialinquirer.shared.dto.Tag;
import com.google.gwt.cell.client.AbstractCell;
import com.google.gwt.core.client.GWT;
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.uibinder.client.UiTemplate;
import com.google.gwt.user.cellview.client.CellList;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.Widget;
import com.google.gwt.view.client.ListDataProvider;
import com.google.gwt.view.client.ProvidesKey;
import com.google.gwt.view.client.SelectionChangeEvent;
import com.google.gwt.view.client.SelectionModel;
import com.google.gwt.view.client.SingleSelectionModel;

/**
 * The Class TopicsViewImpl.
 */
public class TopicsViewImpl extends Composite implements TopicsView {

    /** The ui binder. */
    private static TagsViewUiBinder uiBinder = GWT.create(TagsViewUiBinder.class);

    /** The presenter. */
    private Presenter presenter;

    /** The active tags list. */
    @UiField(provided = true)
    CellList<Tag> activeTagsList;

    /** The following tags list. */
    @UiField(provided = true)
    CellList<Tag> followingTagsList;

    /** The suggested tags list. */
    @UiField(provided = true)
    CellList<Tag> suggestedTagsList;

    /** The active provider. */
    private ListDataProvider<Tag> activeProvider;

    /** The following provider. */
    private ListDataProvider<Tag> followingProvider;

    /** The suggested provider. */
    private ListDataProvider<Tag> suggestedProvider;

    /** The selected tag. */
    private Tag selectedTag;

    /**
     * The Interface TagsViewUiBinder.
     */
    @UiTemplate("TopicsView.ui.xml")
    interface TagsViewUiBinder extends UiBinder<Widget, TopicsViewImpl> {
    }

    /**
     * Instantiates a new topics view impl.
     */
    public TopicsViewImpl() {
        activeTagsList = new CellList<Tag>(new TagCell());
        followingTagsList = new CellList<Tag>(new TagCell());
        suggestedTagsList = new CellList<Tag>(new TagCell());
        SelectionModel<Tag> tagSelectionModel = new SingleSelectionModel<Tag>(new ProvidesKey<Tag>() {

            @Override
            public Object getKey(Tag item) {
                return item.getTag();
            }
        });
        tagSelectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() {
            public void onSelectionChange(SelectionChangeEvent event) {
                setSelectedTag(getSelectedTag(activeTagsList));
            }
        });
        activeTagsList.setSelectionModel(tagSelectionModel);
        tagSelectionModel = new SingleSelectionModel<Tag>(new ProvidesKey<Tag>() {

            @Override
            public Object getKey(Tag item) {
                return item.getTag();
            }
        });

        tagSelectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() {
            public void onSelectionChange(SelectionChangeEvent event) {
                setSelectedTag(getSelectedTag(followingTagsList));
            }
        });
        followingTagsList.setSelectionModel(tagSelectionModel);
        tagSelectionModel = new SingleSelectionModel<Tag>(new ProvidesKey<Tag>() {

            @Override
            public Object getKey(Tag item) {
                return item.getTag();
            }
        });

        tagSelectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() {
            public void onSelectionChange(SelectionChangeEvent event) {
                setSelectedTag(getSelectedTag(suggestedTagsList));
            }
        });
        suggestedTagsList.setSelectionModel(tagSelectionModel);
        initWidget(uiBinder.createAndBindUi(TopicsViewImpl.this));
    }

    /**
     * Gets the selected tag.
     *
     * @param tagsList the tags list
     * @return the selected tag
     */
    public Tag getSelectedTag(CellList<Tag> tagsList) {
        for (Tag tag : tagsList.getVisibleItems()) {
            if (tagsList.getSelectionModel().isSelected(tag)) {
                this.selectedTag = tag;
            }
        }
        return selectedTag;
    }

    /* (non-Javadoc)
     * @see com.appspot.socialinquirer.client.view.TopicsView#setSelectedTag(com.appspot.socialinquirer.shared.dto.Tag)
     */
    public void setSelectedTag(Tag selectedTag) {
        this.selectedTag = selectedTag;
    }

    /*
     * (non-Javadoc)
     * 
     * @see com.appspot.linkedhub.client.view.ProjectView#setName(java.lang.String)
     */
    @Override
    public void setName(String name) {
        // TODO Auto-generated method stub

    }

    /*
     * (non-Javadoc)
     * 
     * @see com.appspot.linkedhub.client.view.ProjectView#setPresenter(com.appspot.linkedhub.client.view.ProjectView.Presenter)
     */
    @Override
    public void setPresenter(Presenter listener) {
        this.presenter = listener;
    }

    /* (non-Javadoc)
     * @see com.appspot.socialinquirer.client.view.TopicsView#setSuggestedTags(java.util.ArrayList)
     */
    @Override
    public void setSuggestedTags(ArrayList<Tag> suggestedTags) {
        suggestedProvider = new ListDataProvider<Tag>(suggestedTags);
        suggestedProvider.addDataDisplay(suggestedTagsList);
    }

    /* (non-Javadoc)
     * @see com.appspot.socialinquirer.client.view.TopicsView#setActiveTags(java.util.ArrayList)
     */
    @Override
    public void setActiveTags(ArrayList<Tag> userTags) {
        activeProvider = new ListDataProvider<Tag>(userTags);
        activeProvider.addDataDisplay(activeTagsList);
    }

    /* (non-Javadoc)
     * @see com.appspot.socialinquirer.client.view.TopicsView#setFollowingTags(java.util.ArrayList)
     */
    @Override
    public void setFollowingTags(ArrayList<Tag> userTags) {
        followingProvider = new ListDataProvider<Tag>(userTags);
        followingProvider.addDataDisplay(followingTagsList);
    }

    /**
     * The Class TagCell.
     */
    static class TagCell extends AbstractCell<Tag> {

        /**
         * Instantiates a new tag cell.
         */
        public TagCell() {
        }

        /*
         * (non-Javadoc)
         * 
         * @see com.google.gwt.cell.client.AbstractCell#render(java.lang.Object,
         *      java.lang.Object,
         *      com.google.gwt.safehtml.shared.SafeHtmlBuilder)
         */
        @Override
        public void render(com.google.gwt.cell.client.Cell.Context context, Tag value, SafeHtmlBuilder sb) {
            // Value can be null, so do a null check..
            if (value == null) {
                return;
            }

            sb.appendHtmlConstant("<table>");

            // Add the contact image.
            sb.appendHtmlConstant("<tr><td rowspan='3'>");
            sb.appendHtmlConstant("</td>");

            // Add the name and address.
            sb.appendHtmlConstant("<td style='font-size:95%;'>");
            sb.appendEscaped(value.getTag());
            sb.appendHtmlConstant("</td></tr><tr><td>");
            sb.appendEscaped(String.valueOf(value.getFreqency()));
            sb.appendHtmlConstant("</td></tr></table>");
        }
    }

}