View Javadoc

1   /*
2    *  soapUI, copyright (C) 2004-2008 eviware.com 
3    *
4    *  soapUI is free software; you can redistribute it and/or modify it under the 
5    *  terms of version 2.1 of the GNU Lesser General Public License as published by 
6    *  the Free Software Foundation.
7    *
8    *  soapUI is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without 
9    *  even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
10   *  See the GNU Lesser General Public License for more details at gnu.org.
11   */
12  
13  package com.eviware.soapui;
14  
15  import java.io.File;
16  import java.io.FileInputStream;
17  
18  import com.eviware.soapui.config.SoapuiSettingsDocumentConfig;
19  import com.eviware.soapui.impl.rest.panels.request.inspectors.representations.RestRepresentationsInspectorFactory;
20  import com.eviware.soapui.impl.wsdl.actions.iface.tools.support.SwingToolHost;
21  import com.eviware.soapui.model.settings.Settings;
22  import com.eviware.soapui.model.workspace.Workspace;
23  import com.eviware.soapui.support.UISupport;
24  import com.eviware.soapui.support.editor.inspectors.attachments.AttachmentsInspectorFactory;
25  import com.eviware.soapui.support.editor.inspectors.aut.AutInspectorFactory;
26  import com.eviware.soapui.support.editor.inspectors.httpheaders.HttpHeadersInspectorFactory;
27  import com.eviware.soapui.support.editor.inspectors.script.ScriptInspectorFactory;
28  import com.eviware.soapui.support.editor.inspectors.ssl.SSLInspectorFactory;
29  import com.eviware.soapui.support.editor.inspectors.wsa.WsaInspectorFactory;
30  import com.eviware.soapui.support.editor.inspectors.wss.WssInspectorFactory;
31  import com.eviware.soapui.support.editor.registry.InspectorRegistry;
32  import com.eviware.x.form.XFormFactory;
33  import com.eviware.x.impl.swing.SwingFormFactory;
34  
35  public class SwingSoapUICore extends DefaultSoapUICore
36  {
37  	public SwingSoapUICore()
38  	{
39  		super();
40  	}
41  
42  	public SwingSoapUICore(String root, String settingsFile)
43  	{
44  		super(root, settingsFile);
45  	}
46  
47  	public void prepareUI()
48  	{
49  		UISupport.setToolHost(new SwingToolHost());
50  		XFormFactory.Factory.instance = new SwingFormFactory();
51  	}
52  
53  	public void afterStartup(Workspace workspace)
54  	{
55  		InspectorRegistry inspectorRegistry = InspectorRegistry.getInstance();
56  		inspectorRegistry.addFactory(new ScriptInspectorFactory());
57  		inspectorRegistry.addFactory(new AutInspectorFactory());
58  		inspectorRegistry.addFactory(new HttpHeadersInspectorFactory());
59  		inspectorRegistry.addFactory(new AttachmentsInspectorFactory());
60  		inspectorRegistry.addFactory(new SSLInspectorFactory());
61  		inspectorRegistry.addFactory(new WssInspectorFactory());
62  		inspectorRegistry.addFactory(new WsaInspectorFactory());
63  		inspectorRegistry.addFactory(new RestRepresentationsInspectorFactory());
64  
65  		String actionsDir = System.getProperty("soapui.ext.actions");
66  		addExternalActions(actionsDir == null ? getRoot() == null ? "actions" : getRoot() + File.separatorChar
67  				+ "actions" : actionsDir, getExtensionClassLoader());
68  	}
69  
70  	@Override
71  	protected Settings initSettings(String fileName)
72  	{
73  		String fn = fileName;
74  
75  		if (!new File(fileName).exists())
76  		{
77  			try
78  			{
79  				fileName = importSettingsOnStartup(fileName);
80  			}
81  			catch (Exception e)
82  			{
83  				e.printStackTrace();
84  			}
85  		}
86  
87  		Settings result = super.initSettings(fileName);
88  
89  		if (!fileName.equals(fn))
90  			setSettingsFile(fn);
91  
92  		return result;
93  	}
94  
95  	protected String importSettingsOnStartup(String fileName) throws Exception
96  	{
97  		if (UISupport.getDialogs().confirm("Missing soapUI Settings, import from existing installation?",
98  				"Import Preferences"))
99  		{
100 			while (true)
101 			{
102 				File settingsFile = UISupport.getFileDialogs().open(null, "Import Preferences", ".xml",
103 						"soapUI settings XML", fileName);
104 				if (settingsFile != null)
105 				{
106 					try
107 					{
108 						SoapuiSettingsDocumentConfig.Factory.parse(settingsFile);
109 						log.info("imported soapui-settings from [" + settingsFile.getAbsolutePath() + "]");
110 						return settingsFile.getAbsolutePath();
111 					}
112 					catch (Exception e)
113 					{
114 						if (!UISupport.getDialogs().confirm(
115 								"Error loading settings from [" + settingsFile.getAbsolutePath() + "]\r\nspecify another?",
116 								"Error Importing"))
117 						{
118 							break;
119 						}
120 					}
121 				}
122 			}
123 		}
124 
125 		return fileName;
126 	}
127 
128 	private void addExternalActions(String folder, ClassLoader classLoader)
129 	{
130 		File[] actionFiles = new File(folder).listFiles();
131 		if (actionFiles != null)
132 		{
133 			for (File actionFile : actionFiles)
134 			{
135 				if (actionFile.isDirectory())
136 				{
137 					addExternalActions(actionFile.getAbsolutePath(), classLoader);
138 					continue;
139 				}
140 
141 				if (!actionFile.getName().toLowerCase().endsWith("-actions.xml"))
142 					continue;
143 
144 				try
145 				{
146 					log.info("Adding actions from [" + actionFile.getAbsolutePath() + "]");
147 
148 					SoapUI.getActionRegistry().addConfig(new FileInputStream(actionFile), classLoader);
149 				}
150 				catch (Exception e)
151 				{
152 					SoapUI.logError(e);
153 				}
154 			}
155 		}
156 	}
157 }