Java tutorial
/* * 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>"); } } }