blob: 7997723d6a5d02b5b8b8a3ad373223c40c8385a9 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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 org.netbeans.modules.maven.jaxws.actions;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.netbeans.api.project.FileOwnerQuery;
import org.netbeans.api.project.Project;
import org.netbeans.modules.j2ee.deployment.devmodules.api.Deployment;
import org.netbeans.modules.j2ee.deployment.devmodules.api.InstanceRemovedException;
import org.netbeans.modules.j2ee.deployment.devmodules.api.J2eePlatform;
import org.netbeans.modules.j2ee.deployment.devmodules.spi.J2eeModuleProvider;
import org.netbeans.modules.javaee.specs.support.api.JaxWs;
import org.netbeans.modules.javaee.specs.support.api.JaxWsStackSupport;
import org.netbeans.modules.maven.jaxws.WSStackUtils;
import org.netbeans.modules.maven.jaxws.nodes.JaxWsNode;
import org.netbeans.modules.websvc.api.support.LogUtils;
import org.netbeans.modules.websvc.wsstack.api.WSStack;
import org.openide.DialogDisplayer;
import org.openide.ErrorManager;
import org.openide.NotifyDescriptor;
import org.openide.awt.HtmlBrowser;
import org.openide.awt.StatusDisplayer;
import org.openide.filesystems.FileObject;
import org.openide.util.RequestProcessor;
import org.openide.util.HelpCtx;
import org.openide.util.NbBundle;
import org.openide.nodes.Node;
import org.openide.util.actions.NodeAction;
public class WsTesterPageAction extends NodeAction {
@Override
public String getName() {
return NbBundle.getMessage(WsTesterPageAction.class, "LBL_TesterPageAction");
}
@Override
public HelpCtx getHelpCtx() {
return HelpCtx.DEFAULT_HELP;
}
@Override
protected boolean asynchronous() {
return false;
}
@Override
protected void performAction(Node[] activatedNodes) {
JaxWsNode wsNode = activatedNodes[0].getLookup().lookup(JaxWsNode.class);
String wsdlURL = wsNode.getTesterPageURL();
try {
final URL url = new URL(wsdlURL);
if (url!=null) {
RequestProcessor.getDefault().post(new Runnable() {
@Override
public void run() {
boolean connectionOK=false;
try {
URLConnection connection = url.openConnection();
if (connection instanceof HttpURLConnection) {
HttpURLConnection httpConnection = (HttpURLConnection)connection;
try {
httpConnection.setRequestMethod("GET"); //NOI18N
httpConnection.connect();
int responseCode = httpConnection.getResponseCode();
// for secured web services the response code is 405: we should allow to show the response
if (HttpURLConnection.HTTP_OK == responseCode || HttpURLConnection.HTTP_BAD_METHOD == responseCode)
connectionOK=true;
} catch (java.net.ConnectException ex) {
// doing nothing - display warning
} finally {
httpConnection.disconnect();
}
// logging usage of action
Object[] params = new Object[2];
params[0] = LogUtils.WS_STACK_JAXWS;
params[1] = "TEST SOAP"; // NOI18N
LogUtils.logWsAction(params);
}
} catch (IOException ex) {
ErrorManager.getDefault().notify(ex);
}
if (connectionOK) {
HtmlBrowser.URLDisplayer.getDefault().showURL(url);
} else {
DialogDisplayer.getDefault().notify(
new NotifyDescriptor.Message(
NbBundle.getMessage(WsTesterPageAction.class,"MSG_UNABLE_TO_OPEN_TEST_PAGE",url),
NotifyDescriptor.WARNING_MESSAGE));
}
}
});
}
} catch (MalformedURLException ex) {
StatusDisplayer.getDefault().setStatusText(NbBundle.getMessage(WsTesterPageAction.class,
"TXT_TesterPageUrl", wsdlURL)); //NOI18N
}
}
@Override
protected boolean enable(Node[] activatedNodes) {
if (activatedNodes==null || activatedNodes.length==0) return false;
FileObject srcRoot = activatedNodes[0].getLookup().lookup(FileObject.class);
if (srcRoot!=null) {
Project project = FileOwnerQuery.getOwner(srcRoot);
if (project!=null) {
return isTesterPageSupported(project);
}
}
return false;
}
private boolean isTesterPageSupported(Project project) {
J2eeModuleProvider provider = project.getLookup().lookup(J2eeModuleProvider.class);
if (provider != null) {
String serverInstanceId = provider.getServerInstanceID();
if (serverInstanceId != null && !WSStackUtils.DEVNULL.equals(serverInstanceId)) { //NOI18N
//- dev null means, there's no server defined.. somehow it cannot really be null..
try {
J2eePlatform j2eePlatform = Deployment.getDefault().getServerInstance(serverInstanceId).getJ2eePlatform();
WSStack<JaxWs> wsStack = JaxWsStackSupport.getJaxWsStack(j2eePlatform);
return wsStack != null && wsStack.isFeatureSupported(JaxWs.Feature.TESTER_PAGE);
} catch (InstanceRemovedException ex) {
Logger.getLogger(getClass().getName()).log(Level.INFO, "Failed to find J2eePlatform", ex);
}
}
}
return false;
}
}