/* * Copyright 2003,2004 Colin Crist * * 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 hermes.browser.dialog; import hermes.Domain; import hermes.HermesRuntimeException; import hermes.browser.HermesBrowser; import hermes.config.DestinationConfig; import hermes.config.PropertySetConfig; import java.awt.BorderLayout; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import javax.jms.Destination; import javax.swing.BorderFactory; import javax.swing.JPanel; import javax.swing.JTabbedPane; import javax.swing.border.BevelBorder; import javax.swing.border.Border; import javax.xml.bind.JAXBException; import org.apache.commons.beanutils.PropertyUtils; import org.apache.log4j.Logger; import com.jidesoft.grid.Property; import com.jidesoft.grid.PropertyPane; import com.jidesoft.grid.PropertyTable; import com.jidesoft.grid.PropertyTableModel; import com.jidesoft.swing.JideTabbedPane; /** * @author colincrist@hermesjms.com * @version $Id: DestinationPropertyConfigPanel.java,v 1.2 2004/07/21 19:46:15 * colincrist Exp $ */ public class DestinationPropertyConfigPanel extends JPanel { private static final long serialVersionUID = 8657526639099576759L; private static final Logger log = Logger.getLogger(DestinationPropertyConfigPanel.class); private static final String NAME = "Name"; private static final String SHORT_NAME = "ShortName"; private static final String SELECTOR = "Selector"; private static final String ISQUEUE = "Domain"; private static final String DURABLE = "Durable"; private static final String DURABLE_CLIENT = "DurableName"; private static final String USERNAME = "Username" ; private static final String PASSWORD = "Password" ; private static final String NAME_INFO = "The name of the queue/topic or the binding in JNDI"; private static final String SHORT_NAME_INFO = "An alterative name you may wish to use for display purposes, for example if the real name is too long"; private static final String ISQUEUE_INFO = "The queue or the topic domain"; private static final String DURABLE_INFO = "Make a durable subscription if a topic"; private static final String DURABLE_CLIENT_INFO = "The subscription name to use if this is a durable subscription to a topic."; private static final String SELECTOR_INFO = "The selector to use when browsing from the queue or subscribing to the topic."; private static final String USERNAME_INFO = "Override the username from the sessions configuration" ; private static final String PASSWORD_INFO = "Override the password from the sessions configuration" ; private DestinationConfig config; private PropertyTable propertyTable; private PropertyTableModel propertyTableModel; private PropertyPane propertyPane; private Property nameProperty; private Property shortNameProperty; private Property selectorProperty; private Property domainProperty; private Property durableProperty; private Property durableClientIDProperty; private Property usernameProperty ; private Property passwordProperty ; private List onOK = new ArrayList(); private Destination bean; private JideTabbedPane tabbedPane = new JideTabbedPane(); private JPanel generalPanel = new JPanel(); private BeanPropertyPanel beanPropertyPanel; public DestinationPropertyConfigPanel(String hermesId, Destination bean, DestinationConfig config) { try { this.bean = bean; this.config = config; final Border border = BorderFactory.createBevelBorder(BevelBorder.RAISED); setLayout(new BorderLayout()); add(tabbedPane); generalPanel.setLayout(new BorderLayout()); if (bean != null) { beanPropertyPanel = new BeanPropertyPanel(bean, true, false); beanPropertyPanel.init(); beanPropertyPanel.setBorder(BorderFactory.createTitledBorder(border, "Provider Properties")); } generalPanel.setBorder(BorderFactory.createTitledBorder(border, "Hermes Properties")); tabbedPane.add("Hermes", generalPanel); if (bean != null) { tabbedPane.add("Provider", beanPropertyPanel); } tabbedPane.setTabPlacement(JTabbedPane.BOTTOM); init(); } catch (IllegalAccessException e) { throw new HermesRuntimeException(e); } catch (InvocationTargetException e) { throw new HermesRuntimeException(e); } catch (NoSuchMethodException e) { throw new HermesRuntimeException(e); } } @SuppressWarnings("unchecked") public void init() { nameProperty = new JidePropertyImpl(NAME, NAME_INFO, String.class, config.getName()); shortNameProperty = new JidePropertyImpl(SHORT_NAME, SHORT_NAME_INFO, String.class, config.getShortName()); selectorProperty = new JidePropertyImpl(SELECTOR, SELECTOR_INFO, String.class, config.getSelector()); domainProperty = new JidePropertyImpl(ISQUEUE, ISQUEUE_INFO, Domain.class, Domain.getDomain(config.getDomain())); durableProperty = new JidePropertyImpl(DURABLE, DURABLE_INFO, Boolean.class, Boolean.valueOf(config.isDurable())); durableClientIDProperty = new JidePropertyImpl(DURABLE_CLIENT, DURABLE_CLIENT_INFO, String.class, config.getClientID()); usernameProperty = new JidePropertyImpl(USERNAME, USERNAME_INFO, String.class, config.getUsername()) ; passwordProperty = new JidePropertyImpl(PASSWORD, PASSWORD_INFO, String.class, config.getPassword()) ; Runnable doOnOK = new Runnable() { public void run() { log.debug("config=" + config); if (nameProperty.getValue() != null && !nameProperty.getValue().equals("")) { config.setName(nameProperty.getValue().toString()); } if (shortNameProperty.getValue() != null && !shortNameProperty.getValue().equals("")) { config.setShortName(shortNameProperty.getValue().toString()); } else { config.setShortName(null); } if (selectorProperty.getValue() != null && !selectorProperty.getValue().equals("")) { config.setSelector(selectorProperty.getValue().toString()); } else { config.setSelector(null); } if (durableProperty.getValue() != null) { config.setDurable(((Boolean) durableProperty.getValue()).booleanValue()); } if (domainProperty.getValue() != null) { Domain domain = (Domain) domainProperty.getValue(); config.setDomain(domain.getId()); } if (durableClientIDProperty.getValue() != null && !durableClientIDProperty.getValue().equals("")) { config.setClientID(durableClientIDProperty.getValue().toString()); } else { config.setClientID(null); } if (usernameProperty.getValue() != null && !usernameProperty.getValue().equals("")) { config.setUsername(usernameProperty.getValue().toString()); } else { config.setUsername(null); } if (passwordProperty.getValue() != null && !passwordProperty.getValue().equals("")) { config.setPassword(passwordProperty.getValue().toString()); } else { config.setPassword(null); } } }; onOK.add(doOnOK); // // Build the model and create the table... List model = new ArrayList(); model.add(nameProperty); model.add(shortNameProperty); model.add(selectorProperty); model.add(domainProperty); model.add(durableProperty); model.add(durableClientIDProperty); model.add(usernameProperty) ; model.add(passwordProperty) ; propertyTableModel = new PropertyTableModel(model); propertyTable = new PropertyTable(propertyTableModel); propertyTable.expandAll(); propertyPane = new PropertyPane(propertyTable); generalPanel.add(propertyPane, BorderLayout.CENTER); } public void doOK() { if (beanPropertyPanel != null) { log.debug("config=" + config); beanPropertyPanel.doOK(); if (beanPropertyPanel.getChanges().size() > 0) { if (config.getProperties() == null) { // @@TODO Fix. config.setProperties(new PropertySetConfig()); } try { HermesBrowser.getConfigDAO().updatePropertySet(config.getProperties(), beanPropertyPanel.getChanges()); } catch (JAXBException e) { log.error(e.getMessage(), e); } } } for (Iterator iter = onOK.iterator(); iter.hasNext();) { Runnable r = (Runnable) iter.next(); r.run(); } } public void doCancel() { // NOP } public Class getPropertyType(String propertyName) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException { if (bean == null) { return String.class; } return PropertyUtils.getPropertyDescriptor(bean, propertyName).getPropertyType(); } public void addOKAction(Runnable r) { onOK.add(r); } }