/* * SoapUI, Copyright (C) 2004-2016 SmartBear Software * * Licensed under the EUPL, Version 1.1 or - as soon as they will be approved by the European Commission - subsequent * versions of the EUPL (the "Licence"); * You may not use this work except in compliance with the Licence. * You may obtain a copy of the Licence at: * * http://ec.europa.eu/idabc/eupl * * Unless required by applicable law or agreed to in writing, software distributed under the Licence is * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the Licence for the specific language governing permissions and limitations * under the Licence. */ package com.eviware.soapui.model.util; import com.eviware.soapui.SoapUI; import com.eviware.soapui.impl.WorkspaceImpl; import com.eviware.soapui.impl.WorkspaceImplPanelBuilder; import com.eviware.soapui.impl.rest.RestMethod; import com.eviware.soapui.impl.rest.RestRequest; import com.eviware.soapui.impl.rest.RestResource; import com.eviware.soapui.impl.rest.RestService; import com.eviware.soapui.impl.rest.mock.RestMockAction; import com.eviware.soapui.impl.rest.mock.RestMockResponse; import com.eviware.soapui.impl.rest.mock.RestMockService; import com.eviware.soapui.impl.rest.panels.method.RestMethodPanelBuilder; import com.eviware.soapui.impl.rest.panels.mock.RestMockActionPanelBuilder; import com.eviware.soapui.impl.rest.panels.mock.RestMockResponsePanelBuilder; import com.eviware.soapui.impl.rest.panels.mock.RestMockServicePanelBuilder; import com.eviware.soapui.impl.rest.panels.request.RestRequestPanelBuilder; import com.eviware.soapui.impl.rest.panels.resource.RestResourcePanelBuilder; import com.eviware.soapui.impl.rest.panels.service.RestServicePanelBuilder; import com.eviware.soapui.impl.wsdl.WsdlInterface; import com.eviware.soapui.impl.wsdl.WsdlOperation; import com.eviware.soapui.impl.wsdl.WsdlProject; import com.eviware.soapui.impl.wsdl.WsdlRequest; import com.eviware.soapui.impl.wsdl.WsdlTestSuite; import com.eviware.soapui.impl.wsdl.loadtest.WsdlLoadTest; import com.eviware.soapui.impl.wsdl.mock.WsdlMockOperation; import com.eviware.soapui.impl.wsdl.mock.WsdlMockResponse; import com.eviware.soapui.impl.wsdl.mock.WsdlMockService; import com.eviware.soapui.impl.wsdl.panels.iface.WsdlInterfacePanelBuilder; import com.eviware.soapui.impl.wsdl.panels.loadtest.WsdlLoadTestPanelBuilder; import com.eviware.soapui.impl.wsdl.panels.mock.WsdlMockServicePanelBuilder; import com.eviware.soapui.impl.wsdl.panels.mockoperation.WsdlMockOperationPanelBuilder; import com.eviware.soapui.impl.wsdl.panels.mockoperation.WsdlMockResponsePanelBuilder; import com.eviware.soapui.impl.wsdl.panels.operation.WsdlOperationPanelBuilder; import com.eviware.soapui.impl.wsdl.panels.project.WsdlProjectPanelBuilder; import com.eviware.soapui.impl.wsdl.panels.request.WsdlRequestPanelBuilder; import com.eviware.soapui.impl.wsdl.panels.testcase.WsdlTestCasePanelBuilder; import com.eviware.soapui.impl.wsdl.panels.teststeps.DelayTestStepPanelBuilder; import com.eviware.soapui.impl.wsdl.panels.teststeps.GotoStepPanelBuilder; import com.eviware.soapui.impl.wsdl.panels.teststeps.GroovyScriptStepPanelBuilder; import com.eviware.soapui.impl.wsdl.panels.teststeps.HttpTestRequestPanelBuilder; import com.eviware.soapui.impl.wsdl.panels.teststeps.JdbcRequestTestStepPanelBuilder; import com.eviware.soapui.impl.wsdl.panels.teststeps.ManualTestStepPanelBuilder; import com.eviware.soapui.impl.wsdl.panels.teststeps.MockResponseStepPanelBuilder; import com.eviware.soapui.impl.wsdl.panels.teststeps.PropertiesStepPanelBuilder; import com.eviware.soapui.impl.wsdl.panels.teststeps.PropertyTransfersTestStepPanelBuilder; import com.eviware.soapui.impl.wsdl.panels.teststeps.RestTestRequestPanelBuilder; import com.eviware.soapui.impl.wsdl.panels.teststeps.WsdlRunTestCaseTestStepPanelBuilder; import com.eviware.soapui.impl.wsdl.panels.teststeps.WsdlTestRequestPanelBuilder; import com.eviware.soapui.impl.wsdl.panels.teststeps.amf.AMFRequestTestStepPanelBuilder; import com.eviware.soapui.impl.wsdl.panels.testsuite.WsdlTestSuitePanelBuilder; import com.eviware.soapui.impl.wsdl.testcase.WsdlTestCase; import com.eviware.soapui.impl.wsdl.teststeps.AMFRequestTestStep; import com.eviware.soapui.impl.wsdl.teststeps.HttpTestRequestStep; import com.eviware.soapui.impl.wsdl.teststeps.JdbcRequestTestStep; import com.eviware.soapui.impl.wsdl.teststeps.ManualTestStep; import com.eviware.soapui.impl.wsdl.teststeps.PropertyTransfersTestStep; import com.eviware.soapui.impl.wsdl.teststeps.RestTestRequestStep; import com.eviware.soapui.impl.wsdl.teststeps.WsdlDelayTestStep; import com.eviware.soapui.impl.wsdl.teststeps.WsdlGotoTestStep; import com.eviware.soapui.impl.wsdl.teststeps.WsdlGroovyScriptTestStep; import com.eviware.soapui.impl.wsdl.teststeps.WsdlMockResponseTestStep; import com.eviware.soapui.impl.wsdl.teststeps.WsdlPropertiesTestStep; import com.eviware.soapui.impl.wsdl.teststeps.WsdlRunTestCaseTestStep; import com.eviware.soapui.impl.wsdl.teststeps.WsdlTestRequestStep; import com.eviware.soapui.model.ModelItem; import com.eviware.soapui.model.PanelBuilder; import com.eviware.soapui.security.SecurityTest; import com.eviware.soapui.security.panels.SecurityTestPanelBuilder; import com.eviware.soapui.support.factory.SoapUIFactoryRegistryListener; import java.util.HashMap; import java.util.Map; /** * Registry of PanelBuilders * * @author ole.matzura */ public class PanelBuilderRegistry { private static Map<Class<? extends ModelItem>, PanelBuilder<? extends ModelItem>> builders = new HashMap<Class<? extends ModelItem>, PanelBuilder<? extends ModelItem>>(); @SuppressWarnings("unchecked") public static <T extends ModelItem> PanelBuilder<T> getPanelBuilder(T modelItem) { return (PanelBuilder<T>) builders.get(modelItem.getClass()); } public static <T extends ModelItem> void register(Class<T> modelItemClass, PanelBuilder<T> panelBuilder) { builders.put(modelItemClass, panelBuilder); } static { register(WorkspaceImpl.class, new WorkspaceImplPanelBuilder()); register(WsdlProject.class, new WsdlProjectPanelBuilder()); register(WsdlInterface.class, new WsdlInterfacePanelBuilder()); register(RestService.class, new RestServicePanelBuilder()); register(WsdlOperation.class, new WsdlOperationPanelBuilder()); register(RestResource.class, new RestResourcePanelBuilder()); register(RestMethod.class, new RestMethodPanelBuilder()); register(WsdlRequest.class, new WsdlRequestPanelBuilder()); register(RestRequest.class, new RestRequestPanelBuilder()); register(WsdlTestSuite.class, new WsdlTestSuitePanelBuilder<WsdlTestSuite>()); register(WsdlTestCase.class, new WsdlTestCasePanelBuilder<WsdlTestCase>()); register(WsdlLoadTest.class, new WsdlLoadTestPanelBuilder<WsdlLoadTest>()); register(WsdlMockService.class, new WsdlMockServicePanelBuilder()); register(WsdlMockOperation.class, new WsdlMockOperationPanelBuilder()); register(WsdlMockResponse.class, new WsdlMockResponsePanelBuilder()); register(RestMockService.class, new RestMockServicePanelBuilder()); register(RestMockAction.class, new RestMockActionPanelBuilder()); register(RestMockResponse.class, new RestMockResponsePanelBuilder()); register(WsdlGotoTestStep.class, new GotoStepPanelBuilder()); register(WsdlDelayTestStep.class, new DelayTestStepPanelBuilder()); register(ManualTestStep.class, new ManualTestStepPanelBuilder()); register(RestTestRequestStep.class, new RestTestRequestPanelBuilder()); register(HttpTestRequestStep.class, new HttpTestRequestPanelBuilder()); register(WsdlTestRequestStep.class, new WsdlTestRequestPanelBuilder()); register(WsdlPropertiesTestStep.class, new PropertiesStepPanelBuilder()); register(WsdlGroovyScriptTestStep.class, new GroovyScriptStepPanelBuilder()); register(PropertyTransfersTestStep.class, new PropertyTransfersTestStepPanelBuilder()); register(WsdlRunTestCaseTestStep.class, new WsdlRunTestCaseTestStepPanelBuilder()); register(WsdlMockResponseTestStep.class, new MockResponseStepPanelBuilder()); register(JdbcRequestTestStep.class, new JdbcRequestTestStepPanelBuilder()); register(AMFRequestTestStep.class, new AMFRequestTestStepPanelBuilder()); register(SecurityTest.class, new SecurityTestPanelBuilder<SecurityTest>()); for (PanelBuilderFactory factory : SoapUI.getFactoryRegistry().getFactories(PanelBuilderFactory.class)) { register(factory.getTargetModelItem(), factory.createPanelBuilder()); } SoapUI.getFactoryRegistry().addFactoryRegistryListener( new SoapUIFactoryRegistryListener() { @Override public void factoryAdded(Class<?> factoryType, Object factory) { if( factoryType.equals( PanelBuilderFactory.class )) { PanelBuilderFactory panelBuilderFactory = (PanelBuilderFactory) factory; register(panelBuilderFactory.getTargetModelItem(), panelBuilderFactory.createPanelBuilder()); } } @Override public void factoryRemoved(Class<?> factoryType, Object factory) { if( factoryType.equals( PanelBuilderFactory.class )) { unregister((PanelBuilderFactory) factory); } } }); } public static void unregister(PanelBuilderFactory factory) { builders.remove( factory.getTargetModelItem() ); } }