001 /* 002 * Copyright 2002-2004 the original author or authors. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); you may not 005 * use this file except in compliance with the License. You may obtain a copy of 006 * the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 012 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 013 * License for the specific language governing permissions and limitations under 014 * the License. 015 */ 016 package org.springframework.richclient.text; 017 018 import java.beans.PropertyChangeEvent; 019 import java.beans.PropertyChangeListener; 020 021 import javax.swing.JComponent; 022 import javax.swing.text.JTextComponent; 023 024 import org.springframework.binding.form.CommitListener; 025 import org.springframework.binding.form.FormModel; 026 import org.springframework.binding.value.CommitTrigger; 027 import org.springframework.richclient.form.builder.FormComponentInterceptor; 028 import org.springframework.richclient.form.builder.FormComponentInterceptorFactory; 029 import org.springframework.richclient.form.builder.support.AbstractFormComponentInterceptor; 030 031 /** 032 * @author oliverh 033 */ 034 public class TextComponentPopupInterceptorFactory implements FormComponentInterceptorFactory { 035 036 public TextComponentPopupInterceptorFactory() { 037 } 038 039 public FormComponentInterceptor getInterceptor(FormModel formModel) { 040 return new TextComponentPopupInterceptor(formModel); 041 } 042 043 private class TextComponentPopupInterceptor extends AbstractFormComponentInterceptor implements 044 PropertyChangeListener, CommitListener { 045 046 private CommitTrigger resetTrigger; 047 048 protected TextComponentPopupInterceptor(FormModel formModel) { 049 super(formModel); 050 } 051 052 public void processComponent(String propertyName, JComponent component) { 053 JComponent innerComp = getInnerComponent(component); 054 if (innerComp instanceof JTextComponent) { 055 TextComponentPopup.attachPopup((JTextComponent)innerComp, getResetTrigger()); 056 } 057 else if (innerComp instanceof TextComponentContainer) { 058 TextComponentPopup.attachPopup(((TextComponentContainer)innerComp).getComponent(), getResetTrigger()); 059 } 060 } 061 062 private CommitTrigger getResetTrigger() { 063 if (resetTrigger == null) { 064 resetTrigger = new CommitTrigger(); 065 registerListeners(); 066 } 067 return resetTrigger; 068 } 069 070 private void registerListeners() { 071 FormModel formModel = getFormModel(); 072 formModel.addCommitListener(this); 073 formModel.getFormObjectHolder().addValueChangeListener(this); 074 } 075 076 public void preCommit(FormModel formModel) { 077 // do nothing 078 } 079 080 public void postCommit(FormModel formModel) { 081 resetTrigger.commit(); 082 } 083 084 public void propertyChange(PropertyChangeEvent evt) { 085 resetTrigger.commit(); 086 } 087 088 } 089 }