/*
* Jitsi, the OpenSource Java VoIP and Instant Messaging client.
*
* Copyright @ 2015 Atlassian Pty Ltd
*
* Licensed 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 net.java.sip.communicator.util.launchutils;
/**
* Registers as listener for kAEGetURL AppleScript events.
* And will handle any url coming from the OS by passing it to LaunchArgHandler.
*
* @author Lubomir Marinov
* @author Damian Minkov
*/
public class AEGetURLEventHandler
{
private LaunchArgHandler launchArgHandler;
/**
* The interface for the used callback.
*/
public interface IAEGetURLListener
{
/**
* Handle the URL event.
*
* @param url the URL
*/
void handleAEGetURLEvent (String url);
}
AEGetURLEventHandler(LaunchArgHandler launchArgHandler)
{
this.launchArgHandler = launchArgHandler;
try
{
setAEGetURLListener (new IAEGetURLListener ()
{
public void handleAEGetURLEvent (final String url)
{
new Thread()
{
@Override
public void run()
{
AEGetURLEventHandler.this.launchArgHandler.
handleArgs(new String[]{url});
}
}.start();
}
});
}
catch(Throwable err)
{
//we don't have logging here so dump to stderr
System.err.println(
"Warning: Failed to register our command line argument"
+ " handler. We won't be able to handle command line"
+ " arguments.");
err.printStackTrace();
}
}
/**
* Sets the (global) listener for kAEGetURL AppleScript events.
* <p>
* The listener should be prepared to handle any pending events before this
* method returns because such events may have already been sent by the
* operating system (e.g. when the application wasn't running and was
* started in order to handle such an event).
* </p>
*
* @param listener the {@link IAEGetURLListener} to be set as the (global)
* listener for kAEGetURL AppleScript events
*/
private static native void setAEGetURLListener (IAEGetURLListener listener);
}