Java tutorial
/* * * * Copyright (C) 2007 Pingtel Corp., certain elements licensed under a Contributor Agreement. * Contributors retain copyright to elements licensed under a Contributor Agreement. * Licensed to the User under the LGPL license. * * $ */ package org.sipfoundry.sipxconfig.site.gateway; import java.util.List; import org.apache.commons.lang.ArrayUtils; import org.apache.commons.lang.StringUtils; import org.apache.tapestry.IPage; import org.apache.tapestry.IRequestCycle; import org.apache.tapestry.annotations.Bean; import org.apache.tapestry.annotations.EventListener; import org.apache.tapestry.annotations.InitialValue; import org.apache.tapestry.annotations.InjectObject; import org.apache.tapestry.annotations.InjectPage; import org.apache.tapestry.annotations.Persist; import org.apache.tapestry.event.PageBeginRenderListener; import org.apache.tapestry.event.PageEvent; import org.apache.tapestry.valid.ValidatorException; import org.sipfoundry.sipxconfig.bridge.BridgeSbc; import org.sipfoundry.sipxconfig.components.PageWithCallback; import org.sipfoundry.sipxconfig.components.SipxValidationDelegate; import org.sipfoundry.sipxconfig.components.TapestryUtils; import org.sipfoundry.sipxconfig.dialplan.DialPlanContext; import org.sipfoundry.sipxconfig.dialplan.DialingRule; import org.sipfoundry.sipxconfig.gateway.FxoPort; import org.sipfoundry.sipxconfig.gateway.Gateway; import org.sipfoundry.sipxconfig.gateway.GatewayContext; import org.sipfoundry.sipxconfig.gateway.GatewayModel; import org.sipfoundry.sipxconfig.gateway.SipTrunk; import org.sipfoundry.sipxconfig.sbc.SbcDevice; import org.sipfoundry.sipxconfig.sbc.SbcDeviceManager; import org.sipfoundry.sipxconfig.setting.Setting; import org.sipfoundry.sipxconfig.setting.SettingSet; import org.sipfoundry.sipxconfig.site.gateway.port.PortSettings; /** * EditGateway */ public abstract class EditGateway extends PageWithCallback implements PageBeginRenderListener { public static final String PAGE = "gateway/EditGateway"; @InjectPage(value = PortSettings.PAGE) public abstract PortSettings getPortSettingsPage(); @InjectObject(value = "spring:dialPlanContext") public abstract DialPlanContext getDialPlanContext(); @InjectObject(value = "spring:gatewayContext") public abstract GatewayContext getGatewayContext(); @InjectObject(value = "spring:sbcDeviceManager") public abstract SbcDeviceManager getSbcDeviceManager(); @Bean public abstract SipxValidationDelegate getValidator(); @Persist public abstract Integer getGatewayId(); public abstract void setGatewayId(Integer id); @Persist("session") public abstract Gateway getTransientGateway(); public abstract void setTransientGateway(Gateway transientGateway); public abstract Gateway getGateway(); public abstract void setGateway(Gateway gateway); @Persist public abstract Integer getRuleId(); public abstract void setRuleId(Integer id); @Persist public abstract void setGatewayModel(GatewayModel model); public abstract GatewayModel getGatewayModel(); @Persist public abstract String getCurrentSettingSetName(); public abstract void setCurrentSettingSetName(String settingName); public abstract void setCurrentSettingSet(SettingSet currentSettingSet); public abstract SettingSet getCurrentSettingSet(); @InitialValue(value = "literal:config") public abstract void setActiveTab(String tab); public abstract String getActiveTab(); public abstract String getCurrentTab(); public abstract void setActiveSetting(String setting); public abstract void setSelectedSbcDevice(SbcDevice selectedSbcDevice); public abstract SbcDevice getSelectedSbcDevice(); /** * Names of the tabs that are not in navigation components */ public String[] getTabNames() { String[] tabs = new String[] { "config", "gcai", "dialplan" }; if (getGateway().getModel().getMaxPorts() > 0) { tabs = (String[]) ArrayUtils.add(tabs, 1, "ports"); } return tabs; } @EventListener(events = "onchange", targets = "sbcDeviceSelect") public void onSbcDeviceSelect() { setTransientGateway(getGateway()); } public void pageBeginRender(PageEvent event_) { if (getTransientGateway() != null) { setGateway(getTransientGateway()); } setTransientGateway(null); Gateway gateway = getGateway(); if (null != gateway) { return; } Integer id = getGatewayId(); GatewayContext gatewayContext = getGatewayContext(); if (null != id) { gateway = getGatewayContext().getGateway(id); if (gateway instanceof SipTrunk && gateway.getUseSipXBridge()) { setSelectedSbcDevice(gateway.getSbcDevice()); } } else { gateway = gatewayContext.newGateway(getGatewayModel()); } setGateway(gateway); setSettingProperties(getCurrentSettingSetName()); } public void editNonSettings(String tabId) { setCurrentSettingSetName(null); setActiveTab(tabId); } public void editSettings(Integer gatewayId, String settingPath) { setActiveTab("settings"); setGatewayId(gatewayId); setGateway(getGatewayContext().getGateway(gatewayId)); setSettingProperties(settingPath); } private void setSettingProperties(String settingPath) { SettingSet currentSettingSet = null; String currentSettingSetName = null; Setting settings = getGateway().getSettings(); // because setting path is persistent in session, guard against // path not relevant to this gateway's setting set if (settings != null && !StringUtils.isBlank(settingPath)) { currentSettingSet = (SettingSet) settings.getSetting(settingPath); if (currentSettingSet != null) { currentSettingSetName = currentSettingSet.getName(); } } setCurrentSettingSet(currentSettingSet); setCurrentSettingSetName(currentSettingSetName); } public void saveGateway() { if (!TapestryUtils.isValid(this)) { return; } saveValid(); } public void saveValid() { Gateway gateway = getGateway(); GatewayContext gatewayContext = getGatewayContext(); // set sbc device only for SipTrunk if (gateway instanceof SipTrunk) { SbcDevice sbcDevice = getSelectedSbcDevice(); if (sbcDevice != null) { gateway.setSbcDevice(sbcDevice); } else { if (gateway.getUseSipXBridge()) { List<BridgeSbc> sbcs = getSbcDeviceManager().getBridgeSbcs(); if (sbcs != null && sbcs.size() > 0) { gateway.setSbcDevice(getSbcDeviceManager().getBridgeSbcs().get(0)); } else { getValidator().record( new ValidatorException(getMessages().getMessage("msg.err.trunkingNotEnabled"))); return; } } } } gatewayContext.saveGateway(gateway); // attach gateway to current rule Integer ruleId = getRuleId(); if (null != ruleId) { DialPlanContext manager = getDialPlanContext(); DialingRule rule = manager.getRule(ruleId); rule.addGateway(gateway); manager.storeRule(rule); } // refresh gateway - it cannot be new any more if (getGatewayId() == null) { setGatewayId(gateway.getId()); setGateway(null); } } public IPage addPort() { Gateway gateway = getGateway(); gateway.addPort(new FxoPort()); getGatewayContext().saveGateway(gateway); int last = gateway.getPorts().size() - 1; FxoPort port = gateway.getPorts().get(last); return editPort(port.getId()); } public IPage editPort(Integer portId) { PortSettings editPortPage = getPortSettingsPage(); editPortPage.setParentSettingName(null); editPortPage.setPortId(portId); editPortPage.setRuleId(getRuleId()); editPortPage.setReturnPage(getPage()); return editPortPage; } public static EditGateway getEditPage(IRequestCycle cycle, Integer gatewayId, IPage returnPage, Integer ruleId) { EditGateway page = (EditGateway) cycle.getPage(PAGE); page.setGatewayModel(null); page.setGatewayId(gatewayId); page.setGateway(null); page.setCurrentSettingSetName(null); page.setRuleId(ruleId); page.setReturnPage(returnPage); page.setTransientGateway(null); return page; } public static EditGateway getAddPage(IRequestCycle cycle, GatewayModel model, IPage returnPage, Integer ruleId) { EditGateway page = (EditGateway) cycle.getPage(PAGE); page.setGatewayModel(model); page.setGatewayId(null); page.setGateway(null); page.setCurrentSettingSetName(null); page.setRuleId(ruleId); page.setReturnPage(returnPage); page.setTransientGateway(null); return page; } }