/* * Copyright 2013, Arondor * * 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.arondor.common.reflection.gwt.client.view; import java.util.Collection; import java.util.logging.Logger; import com.arondor.common.reflection.gwt.client.presenter.ImplementingClassPresenter.Display; import com.google.gwt.event.dom.client.ChangeEvent; import com.google.gwt.event.dom.client.ChangeHandler; import com.google.gwt.event.logical.shared.ValueChangeHandler; import com.google.gwt.event.shared.HandlerRegistration; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.ListBox; public class ImplementingClassView extends Composite implements Display { private static final Logger LOG = Logger.getLogger(ImplementingClassView.class.getName()); private ListBox implementingListInput = new ListBox(); private String selectedClass = null; public ImplementingClassView() { initWidget(implementingListInput); } public void setImplementingClasses(Collection<String> implementingClasses) { LOG.finest("Selected classes : " + implementingClasses); implementingListInput.clear(); for (String implementingClass : implementingClasses) { implementingListInput.addItem(implementingClass); if (selectedClass != null && selectedClass.equals(implementingClass)) { implementingListInput.setSelectedIndex(implementingListInput.getItemCount() - 1); } } } private void doSelect(String className) { selectedClass = className; if (className == null) { return; } LOG.finest("Selecting class : " + className + " from a choice of " + implementingListInput.getItemCount() + " items"); for (int idx = 0; idx < implementingListInput.getItemCount(); idx++) { if (implementingListInput.getItemText(idx).equals(className)) { implementingListInput.setSelectedIndex(idx); return; } } implementingListInput.addItem(className); implementingListInput.setSelectedIndex(implementingListInput.getItemCount() - 1); // LOG.warning("Could not select class : " + className); } public HandlerRegistration addValueChangeHandler(final ValueChangeHandler<String> valueChangeHandler) { return implementingListInput.addChangeHandler(new ChangeHandler() { public void onChange(ChangeEvent event) { if (implementingListInput.getSelectedIndex() != -1) { String value = implementingListInput.getValue(implementingListInput.getSelectedIndex()); selectedClass = value; valueChangeHandler.onValueChange(new MyValueChangeEvent<String>(value)); } } }); } public void setBaseClassName(String baseClassName) { doSelect(baseClassName); } public void selectImplementingClass(String implementingClassName) { doSelect(implementingClassName); } }