From tchemit@users.nuiton.org Tue Oct 5 10:03:11 2010 From: tchemit@users.nuiton.org To: jaxx-commits@list.nuiton.org Subject: [Jaxx-commits] r2104 - trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing Date: Tue, 05 Oct 2010 10:03:11 +0200 Message-ID: <20101005080311.C8F0E1591C@nuiton.codelutin.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============2877381737914390445==" --===============2877381737914390445== Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Author: tchemit Date: 2010-10-05 10:03:11 +0200 (Tue, 05 Oct 2010) New Revision: 2104 Url: http://nuiton.org/repositories/revision/jaxx/2104 Log: Evolution #913: Remove deprecated EntityComboBoxHandler Removed: trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/EntityComboBox.jaxx trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/EntityComboBoxHandler.= java Deleted: trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/EntityComboBox.j= axx =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/EntityComboBox.jaxx 2= 010-10-04 18:12:49 UTC (rev 2103) +++ trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/EntityComboBox.jaxx 2= 010-10-05 08:03:11 UTC (rev 2104) @@ -1,139 +0,0 @@ - - - - =20 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - =20 - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Deleted: trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/EntityComboBoxHa= ndler.java =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/EntityComboBoxHandler= .java 2010-10-04 18:12:49 UTC (rev 2103) +++ trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/EntityComboBoxHandler= .java 2010-10-05 08:03:11 UTC (rev 2104) @@ -1,483 +0,0 @@ -/* - * #%L - * JAXX :: Widgets - *=20 - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2008 - 2010 CodeLutin - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as=20 - * published by the Free Software Foundation, either version 3 of the=20 - * License, or (at your option) any later version. - *=20 - * 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 General Lesser Public License for more details. - *=20 - * You should have received a copy of the GNU General Lesser Public=20 - * License along with this program. If not, see - * . - * #L% - */ - -package jaxx.runtime.swing; - -import java.awt.Component; -import jaxx.runtime.SwingUtil; -import jaxx.runtime.swing.editor.bean.BeanComboBoxHandler; -import org.apache.commons.beanutils.PropertyUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import static org.nuiton.i18n.I18n._; -import static org.nuiton.i18n.I18n.n_; - -import org.jdesktop.swingx.autocomplete.AutoCompleteDecorator; -import org.jdesktop.swingx.autocomplete.ObjectToStringConverter; - -import javax.swing.JPopupMenu; -import javax.swing.JRadioButtonMenuItem; -import javax.swing.JToggleButton; -import javax.swing.SwingUtilities; -import javax.swing.text.Document; -import javax.swing.text.JTextComponent; -import java.awt.Dimension; -import java.awt.event.FocusEvent; -import java.awt.event.FocusListener; -import java.beans.Introspector; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; -import java.beans.PropertyDescriptor; -import java.lang.reflect.Method; -import java.util.List; -import javax.swing.JComboBox; -import jaxx.runtime.decorator.Decorator; -import jaxx.runtime.decorator.JXPathDecorator; -import jaxx.runtime.decorator.MultiJXPathDecorator; -import jaxx.runtime.swing.renderer.DecoratorListCellRenderer; -import jaxx.runtime.decorator.DecoratorUtils; -import org.jdesktop.swingx.autocomplete.AutoCompletePropertyChangeListener; - -/** - * Le handler d'un {@link EntityComboBox}. - *

- * Note: ce handler n'est pas staeless et n'est donc pas partageable entre p= lusieurs ui. - * - * @param le type des objet contenus dans le mod=C3=A8le du composant. - *=20 - * @author tchemit - * @see EntityComboBox - * @deprecated since 2.2, use now {@link BeanComboBoxHandler}. - */ -@Deprecated -public class EntityComboBoxHandler implements PropertyChangeListener { - - public static final Log log =3D LogFactory.getLog(EntityComboBoxHandler.= class); - public static final String SELECTED_ITEM_PROPERTY =3D "selectedItem"; - public static final String INDEX_PROPERTY =3D "index"; - public static final String AUTO_COMPLETE_PROPERTY =3D "autoComplete"; - public static final String DATA_PROPERTY =3D "data"; - /** ui if the handler */ - protected EntityComboBox ui; - /** the mutator method on the property of boxed bean in the ui */ - protected Method mutator; - /** the original document of the combbo box editor (keep it to make poss= ible undecorate) */ - protected Document originalDocument; - /** the convertor used to auto-complete */ - protected ObjectToStringConverter convertor; - /** the decorator of data */ - protected MultiJXPathDecorator decorator; - protected boolean init; - - public EntityComboBoxHandler(EntityComboBox ui) { - this.ui =3D ui; - } - protected final FocusListener EDITOR_TEXT_COMP0NENT_FOCUSLISTENER =3D ne= w FocusListener() { - - @Override - public void focusGained(FocusEvent e) { - if (log.isDebugEnabled()) { - log.debug("close popup from " + e); - } - ui.getPopup().setVisible(false); - } - - @Override - public void focusLost(FocusEvent e) { - } - }; - - /** - * Initialise le handler de l'ui - * - * @param decorator le decorateur a utiliser - * @param data la liste des donn=C3=A9es a g=C3=A9rer - */ - public void init(JXPathDecorator decorator, List data) { - - if (init) { - throw new IllegalStateException("can not init the handler twice"= ); - } - init =3D true; - if (decorator =3D=3D null) { - throw new NullPointerException("can not have a null decorator as= parameter"); - } - - JAXXButtonGroup indexes =3D ui.getIndexes(); - - MultiJXPathDecorator d; - if (decorator instanceof MultiJXPathDecorator) { - // should clone decorator ? - d =3D (MultiJXPathDecorator) decorator; - } else { - d =3D DecoratorUtils.newMultiJXPathDecorator(decorator.getIntern= alClass(), decorator.getInitialExpression(), " - "); - } - this.decorator =3D d; - - // init combobox renderer base on given decorator - ui.getCombobox().setRenderer(new DecoratorListCellRenderer(d)); - - convertor =3D newDecoratedObjectToStringConverter(d); - - // keep a trace of original document (to make possible reverse autom= -complete)=20 - JTextComponent editorComponent =3D (JTextComponent) ui.getCombobox()= .getEditor().getEditorComponent(); - originalDocument =3D editorComponent.getDocument(); - - // build popup - preparePopup(d); - - ui.autoComplete =3D true; - - ui.addPropertyChangeListener(this); - - // set datas - ui.setData(data); - - // select sort button - indexes.setSelectedButton(ui.getIndex()); - } - - /** Toggle the popup visible state. */ - public void togglePopup() { - boolean newValue =3D !ui.getPopup().isVisible(); - - if (log.isTraceEnabled()) { - log.trace(newValue); - } - - if (!newValue) { - if (ui.getPopup() !=3D null) { - ui.getPopup().setVisible(false); - } - return; - } - SwingUtilities.invokeLater(new Runnable() { - - @Override - public void run() { - ui.getPopup().pack(); - Dimension dim =3D ui.getPopup().getPreferredSize(); - JToggleButton invoker =3D ui.getChangeDecorator(); - ui.getPopup().show(invoker, (int) (invoker.getPreferredSize(= ).getWidth() - dim.getWidth()), invoker.getHeight()); - } - }); - } - - /** - * Modifie l'=C3=A9tat autoComplete de l'ui. - * - * @param oldValue l'ancienne valeur - * @param newValue la nouvelle valeur - */ - protected void setAutoComplete(Boolean oldValue, Boolean newValue) { - oldValue =3D oldValue !=3D null && oldValue; - newValue =3D newValue !=3D null && newValue; - if (oldValue =3D=3D newValue) { - return; - } - if (log.isDebugEnabled()) { - log.debug("autocomplete state : <" + oldValue + " to " + newValu= e + ">"); - } - if (!newValue) { - JTextComponent editorComponent =3D (JTextComponent) ui.getCombob= ox().getEditor().getEditorComponent(); - editorComponent.removeFocusListener(EDITOR_TEXT_COMP0NENT_FOCUSL= ISTENER); - undecorate(ui.getCombobox(), originalDocument); - } else { - decorate(ui.getCombobox(), convertor); - JTextComponent editorComponent =3D (JTextComponent) ui.getCombob= ox().getEditor().getEditorComponent(); - editorComponent.addFocusListener(EDITOR_TEXT_COMP0NENT_FOCUSLIST= ENER); - } - } - - /** - * Modifie l'index du d=C3=A9corateur - * - * @param oldValue l'ancienne valeur - * @param newValue la nouvelle valeur - */ - @SuppressWarnings({"unchecked"}) - protected void setIndex(Integer oldValue, Integer newValue) { - if (newValue.equals(oldValue)) { - return; - } - if (log.isDebugEnabled()) { - log.debug("check state : <" + oldValue + " to " + newValue + ">"= ); - } - - // change decorator context - decorator.setContextIndex(newValue); - - // keep selected item - Object previousSelectedItem =3D ui.getSelectedItem(); - Boolean wasAutoComplete =3D ui.isAutoComplete(); - - if (wasAutoComplete) { - ui.setAutoComplete(false); - } - - // remove autocomplete - if (previousSelectedItem !=3D null) { - ui.getCombobox().setSelectedItem(null); - ui.selectedItem =3D null; - } - - - try { - // Sort data with the decorator jxpath tokens. - DecoratorUtils.sort(decorator, ui.getData(), newValue); - } catch (Exception e) { - log.warn(e.getMessage(), e); - //System.out.println("newValue :: "+decorator+" : "+newValue); - //System.out.println("datas :: "+ui.getData()); - } - - // reload the model - SwingUtil.fillComboBox(ui.getCombobox(), ui.getData(), null); - - if (wasAutoComplete) { - ui.setAutoComplete(true); - } - - if (previousSelectedItem !=3D null) { - ui.setSelectedItem(previousSelectedItem); - } - - ui.getCombobox().requestFocus(); - } - - /** - * Modifie la valeur s=C3=A9lectionn=C3=A9e dans la liste d=C3=A9roulant= e. - * - * @param oldValue l'ancienne valeur - * @param newValue la nouvelle valeur - */ - protected void setSelectedItem(Object oldValue, Object newValue) { - if (ui.getBean() =3D=3D null) { - return; - } - - if (newValue =3D=3D null) { - if (ui.getCombobox().getSelectedItem() =3D=3D null) { - return; - } - ui.getCombobox().setSelectedItem(null); - - if (ui.isAutoComplete()) { - ui.setAutoComplete(false); - ui.setAutoComplete(true); - } - - if (oldValue =3D=3D null) { - return; - } - } - if (log.isDebugEnabled()) { - log.debug(ui.getProperty() + " on " + ui.getBean().getClass() + = " :: " + oldValue + " to " + newValue); - } - - try { - Method mut =3D getMutator(); - if (mut !=3D null) { - mut.invoke(ui.getBean(), newValue); - } - } catch (Exception e) { - throw new RuntimeException(e); - } - } - - /** @return le document de l'=C3=A9diteur avant compl=C3=A9tion. */ - public Document getOriginalDocument() { - return originalDocument; - } - - public MultiJXPathDecorator getDecorator() { - return decorator; - } - - /** - * Creation de l'ui pour modifier le d=C3=A9corateur. - * - * @param decorator le decorateur a utiliser - */ - protected void preparePopup(MultiJXPathDecorator decorator) { - String selectedTip =3D ui.getSelectedToolTipText(); - if (selectedTip =3D=3D null) { - // use default selected tip text - selectedTip =3D EntityComboBox.DEFAULT_SELECTED_TOOLTIP; - } - String notSelectedTip =3D ui.getNotSelectedToolTipText(); - if (notSelectedTip =3D=3D null) { - // use default selected tip text - notSelectedTip =3D EntityComboBox.DEFAULT_NOT_SELECTED_TOOLTIP; - } - JPopupMenu popup =3D ui.getPopup(); - - //Container container =3D ui.getIndexesContainer(); - for (int i =3D 0, max =3D decorator.getNbContext(); i < max; i++) { - String property =3D ui.getI18nPrefix() + decorator.getProperty(i= ); - String propertyI18n =3D _(property); - JRadioButtonMenuItem button =3D new JRadioButtonMenuItem(propert= yI18n); - button.putClientProperty(JAXXButtonGroup.BUTTON8GROUP_CLIENT_PRO= PERTY, ui.getIndexes()); - button.putClientProperty(JAXXButtonGroup.VALUE_CLIENT_PROPERTY, = i); - popup.add(button); - if (selectedTip !=3D null) { - button.putClientProperty(JAXXButtonGroup.SELECTED_TIP_CLIENT= _PROPERTY, _(selectedTip, propertyI18n)); - } - if (notSelectedTip !=3D null) { - button.putClientProperty(JAXXButtonGroup.NOT_SELECTED_TIP_CL= IENT_PROPERTY, _(notSelectedTip, propertyI18n)); - } - button.setSelected(false); - ui.getIndexes().add(button); - } - String title =3D ui.getPopupTitleText(); - if (title =3D=3D null) { - // use default popup title - title =3D EntityComboBox.DEFAULT_POPUP_LABEL; - - Class internalClass =3D decorator.getInternalClass(); - String beanI18nKey; - if (internalClass =3D=3D null) { - beanI18nKey =3D n_("bean.unknown.type"); - } else { - beanI18nKey =3D ui.getI18nPrefix() + Introspector.decapitali= ze(internalClass.getSimpleName()); - } - String beanI18n =3D _(beanI18nKey); - title =3D _(title, beanI18n); - } else { - title =3D _(title); - } - ui.getPopupLabel().setText(title); - ui.getPopup().setLabel(title); - ui.getPopup().invalidate(); - } - - public Class getTargetClass() { - Method m =3D getMutator(); - return m =3D=3D null ? null : m.getParameterTypes()[0]; - } - - /** @return le mutateur a utiliser pour modifier le bean associ=C3=A9. */ - protected Method getMutator() { - if (mutator =3D=3D null) { - Object bean =3D ui.getBean(); - if (bean =3D=3D null) { - throw new NullPointerException("could not find bean in " + u= i); - } - String property =3D ui.getProperty(); - if (property =3D=3D null) { - throw new NullPointerException("could not find property in "= + ui); - } - - try { - PropertyDescriptor descriptor =3D PropertyUtils.getPropertyD= escriptor(bean, property); - if (descriptor !=3D null) { - mutator =3D descriptor.getWriteMethod(); - } - } catch (Exception e) { - throw new RuntimeException(e); - } - } - return mutator; - } - - /** - * Encapsule un {@link Decorator} dans un {@link ObjectToStringConverter= }. - * - * @param decorator le decorateur a encapsuler. - * @return le converter encapsule dans un {@link ObjectToStringConverter} - */ - public static ObjectToStringConverter newDecoratedObjectToStringConverte= r(final Decorator decorator) { - - return new ObjectToStringConverter() { - - @Override - public String getPreferredStringForItem(Object item) { - return item instanceof String ? (String) item : item =3D=3D = null ? "" : decorator.toString(item); - } - }; - } - - /** - * Ajout l'auto-compl=C3=A9tion sur une liste d=C3=A9roulante, en utilis= ant le - * converteur donn=C3=A9 pour afficher les donn=C3=A9es. - * - * @param combo la combo =C3=A0 d=C3=A9corer - * @param convertor le converter utilis=C3=A9 pour afficher les donn=C3= =A9es. - */ - public static void decorate(JComboBox combo, ObjectToStringConverter con= vertor) { - - AutoCompleteDecorator.decorate(combo, convertor); - } - - /** - * D=C3=A9sactive l'aut-compl=C3=A9tion sur une liste d=C3=A9roulante, e= n y repositionnant - * le mod=C3=A8le du document d'=C3=A9dition d'avant auto-compl=C3=A9tio= n. - * - * @param combo la liste d=C3=A9roulante =C3=A0 d=C3=A9corer - * @param originalDocument le document original de l'=C3=A9dtieur de la - * liste d=C3=A9roulante. - */ - public static void undecorate(JComboBox combo, Document originalDocument= ) { - - // has not to be editable - combo.setEditable(false); - - // configure the text component=3Deditor component - Component c =3D combo.getEditor().getEditorComponent(); - JTextComponent editorComponent =3D (JTextComponent) c; - editorComponent.setDocument(originalDocument); - editorComponent.setText(null); - //remove old property change listener - for (PropertyChangeListener l : c.getPropertyChangeListeners("editor= ")) { - if (l instanceof AutoCompletePropertyChangeListener) { - c.removePropertyChangeListener("editor", l); - } - } - } - - @Override - public void propertyChange(PropertyChangeEvent evt) { - String propertyName =3D evt.getPropertyName(); - - if (SELECTED_ITEM_PROPERTY.equals(propertyName)) { - setSelectedItem(evt.getOldValue(), evt.getNewValue()); - return; - } - - if (INDEX_PROPERTY.equals(propertyName)) { - setIndex((Integer) evt.getOldValue(), (Integer) evt.getNewValue(= )); - return; - } - if (AUTO_COMPLETE_PROPERTY.equals(propertyName)) { - setAutoComplete((Boolean) evt.getOldValue(), (Boolean) evt.getNe= wValue()); - return; - } - if (DATA_PROPERTY.equals(propertyName)) { - // list has changed, force reload of index - setIndex(-1, ui.getIndex()); - } - - } -} --===============2877381737914390445==--