Files
sdrtrunk/src/main/java/io/github/dsheirer/radioreference/RadioReferenceService.java
Denny 9316599dec Updates pull request from Roman Tsypuk to convert the build system from
ant to gradle.  Removes linux and windows application launch scripts and
produces an executable jar with all resources included.
2017-12-17 07:28:06 -05:00

154 lines
5.3 KiB
Java

/*******************************************************************************
* sdrtrunk
* Copyright (C) 2014-2016 Dennis Sheirer
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>
*
******************************************************************************/
package io.github.dsheirer.radioreference;
import com.radioreference.api.soap2.AuthInfo;
import com.radioreference.api.soap2.RRWsdlLocator;
import com.radioreference.api.soap2.RRWsdlPortType;
import com.radioreference.api.soap2.UserFeedBroadcast;
import com.radioreference.api.soap2.UserInfo;
import org.apache.axis.AxisFault;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.xml.rpc.ServiceException;
import java.rmi.RemoteException;
import java.text.SimpleDateFormat;
public class RadioReferenceService
{
private final static Logger mLog = LoggerFactory.getLogger( RadioReferenceService.class );
private final SimpleDateFormat SDF = new SimpleDateFormat("MM-dd-yyyy");
public static final String SDRTRUNK_APP_KEY = "88969092";
public static final String RADIO_REFERENCE_API_VERSION = "14";
public static final String SOAP_RPC_RESPONSE_STYLE = "rpc";
private RRWsdlLocator mService = new RRWsdlLocator();
private RRWsdlPortType mClient;
private Long mAccountExpiration;
private AuthInfo mUserAuthorization;
/**
* Creates a SOAP web service client for interaction with the radioreference.com server.
*
* @param username for a premium subscriber
* @param password for a premium subscriber
* @throws ServiceException if the client can't be created
* @throws IllegalArgumentException if either the username or password is null or empty
*/
public RadioReferenceService(String username, String password) throws ServiceException
{
mClient = mService.getRRWsdlPort();
setAuthorizationInformation(username, password);
}
/**
* Sets new premium subscriber user credentials to authenticate to the server.
* @param username for a premium subscriber on radioreference.com
* @param password for a premium subscriber
*/
public void setAuthorizationInformation(String username, String password) throws IllegalArgumentException
{
if(username == null || username.isEmpty() || password == null || password.isEmpty())
{
throw new IllegalArgumentException("Username [" + username + "] and/or password [" + password +
"] cannot be null or empty");
}
mUserAuthorization = new AuthInfo(username, password, SDRTRUNK_APP_KEY, RADIO_REFERENCE_API_VERSION,
SOAP_RPC_RESPONSE_STYLE);
}
/**
* Indicates if the service has a non-null user authorization
*/
public void checkCredentials() throws IllegalArgumentException
{
if(mUserAuthorization == null)
{
throw new IllegalStateException("Authorization information (username/password) required");
}
}
/**
* Account expiration date
*
* @return expiration date in millis since epoch
* @throws AxisFault for remote server errors
* @throws IllegalStateException for null or empty login credentials
* @throws RemoteException for web service client errors
*/
public long getAccountExpirationDate() throws IllegalStateException, RemoteException
{
checkCredentials();
if(mAccountExpiration == null)
{
UserInfo userInfo = mClient.getUserData(mUserAuthorization);
if(userInfo != null)
{
String expiration = userInfo.getSubExpireDate();
if(expiration != null)
{
try
{
mAccountExpiration = SDF.parse(expiration).getTime();
}
catch(Exception e)
{
mLog.error("Couldn't parse account expiration date from web service response: " + expiration, e);
}
}
}
}
return mAccountExpiration;
}
/**
* Indicates if the radio reference user account is active (ie not expired)
*
* @throws IllegalStateException for null or empty login credentials
* @throws RemoteException for web service client errors
*/
public boolean isAccountActive() throws IllegalStateException, RemoteException
{
Long expiration = getAccountExpirationDate();
if(expiration != null)
{
return System.currentTimeMillis() < expiration;
}
return false;
}
public UserFeedBroadcast[] getUserFeedBroadcasts() throws IllegalArgumentException, RemoteException
{
checkCredentials();
return mClient.getUserFeedBroadcasts(mUserAuthorization);
}
}