blob: 08425f5ab852f5aa8b901cc5f35c5fd39608423e [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.payara.spi;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.CancellationException;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.netbeans.modules.payara.tooling.admin.CommandListWebServices;
import org.netbeans.modules.payara.tooling.admin.ResultList;
import org.netbeans.modules.payara.tooling.admin.ServerAdmin;
import org.netbeans.modules.payara.common.PayaraLogger;
import org.netbeans.modules.payara.common.PayaraInstance;
/**
* Web service description.
* <p/>
* @author Peter Williams, Tomas Kraus
*/
public class WSDesc {
////////////////////////////////////////////////////////////////////////////
// Class attributes //
////////////////////////////////////////////////////////////////////////////
/** Local logger. */
private static final Logger LOGGER
= PayaraLogger.get(WSDesc.class);
/** URL extension for WSDL file URL. */
private static String WSDL_URL_EXTENSION = "?wsdl";
/** URL extension for URL for testing. */
private static String TEST_URL_EXTENSION = "?Tester";
////////////////////////////////////////////////////////////////////////////
// Static methods //
////////////////////////////////////////////////////////////////////////////
/**
* Build WSDL file URL from web service name.
* <p/>
* @return WSDL file URL.
*/
private static String buildWsdlUrl(String name) {
if (name == null)
throw new IllegalArgumentException(
"Parameter name shall not be null.");
StringBuilder sb = new StringBuilder(
name.length() + WSDL_URL_EXTENSION.length());
sb.append(name);
sb.append(WSDL_URL_EXTENSION);
return sb.toString();
}
/**
* Build URL for testing from web service name.
* <p/>
* @return URL for testing.
*/
private static String buildTestUrl(String name) {
if (name == null)
throw new IllegalArgumentException(
"Parameter name shall not be null.");
StringBuilder sb = new StringBuilder(
name.length() + TEST_URL_EXTENSION.length());
sb.append(name);
sb.append(TEST_URL_EXTENSION);
return sb.toString();
}
/**
* Fetch list of web service descriptions from given Payara instance.
* <p/>
* @param instance Payara instance from which to retrieve
* web service descriptions.
* @return List of web service descriptions retrieved from Payara server.
*/
public static List<WSDesc> getWebServices(PayaraInstance instance) {
List<WSDesc> wsList;
List<String> values = null;
Future<ResultList<String>> future =
ServerAdmin.<ResultList<String>>exec(instance,
new CommandListWebServices());
try {
ResultList<String> result = future.get();
values = result.getValue();
} catch (ExecutionException | InterruptedException | CancellationException ee) {
LOGGER.log(Level.INFO, ee.getMessage(), ee);
}
if (values != null && values.size() > 0) {
wsList = new ArrayList<WSDesc>(values.size());
for (String value : values) {
wsList.add(new WSDesc(value));
}
} else {
wsList = Collections.emptyList();
}
return wsList;
}
////////////////////////////////////////////////////////////////////////////
// Instance attributes //
////////////////////////////////////////////////////////////////////////////
/** Web Services Description Language file URL. */
private final String wsdlUrl;
/** URL for testing. */
private final String testUrl;
/** Web service name. */
private final String name;
////////////////////////////////////////////////////////////////////////////
// Constructors //
////////////////////////////////////////////////////////////////////////////
/**
* Creates an instance of web service description.
* <p/>
* @param name Web service name.
* @param wsdlUrl WSDL file URL.
* @param testUrl URL for testing.
*/
public WSDesc(final String name) {
this.name = name;
this.wsdlUrl = buildWsdlUrl(name);
this.testUrl = buildTestUrl(name);
}
////////////////////////////////////////////////////////////////////////////
// Getters //
////////////////////////////////////////////////////////////////////////////
/**
* Get web service name from web service description.
* <p/>
* @return Web service name.
*/
public String getName() {
return name;
}
/**
* Get URL for testing from web service description.
* <p/>
* @return URL for testing.
*/
public String getTestURL() {
return testUrl;
}
/**
* Get WSDL file URL from web service description.
* <p/>
* @return WSDL file URL.
*/
public String getWsdlUrl() {
return wsdlUrl;
}
}