<commit_before>/*******************************************************************************
 * Copyright (c) 2013,  <NAME>
 * 
 * Permission is hereby granted, free of charge, to any person obtaining
 * a copy of this software and associated documentation files (the
 * "Software"), to deal in the Software without restriction, including
 * without limitation the rights to use, copy, modify, merge, publish,
 * distribute, sublicense, and/or sell copies of the Software, and to
 * permit persons to whom the Software is furnished to do so, subject to
 * the following conditions:
 * 
 * The above copyright notice and this permission notice shall be
 * included in all copies or substantial portions of the Software.
 * 
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 ******************************************************************************/
package com.jockeyjs;

import android.webkit.WebView;
import android.webkit.WebViewClient;
import com.jockeyjs.converter.JsonConverter;

/**
 * The primary interface for communicating between a WebView and the local android activity.
 * 
 * @author Paul
 *
 */
public interface Jockey {

	/**
	 * An interface for the app to check the incoming source of an event.
	 * 
	 * @author Paul
	 *
	 */
	interface OnValidateListener {
		boolean validate(String host);
	}

	/**
	 * Attaches one or more handlers to this jockey instance so that is may receive events of the provided type
	 * from a webpage
	 * 
	 * @param type
	 * @param handler
	 */
	void on(String type, JockeyHandler ... handler);
	
	/**
	 * Removes all handlers of the specified name
	 * 
	 * @param type
	 */
	void off(String type);
	
	
	/**
	 * Sends a new event to the webview
	 * 
	 * Equivalent to calling send(type, toWebView, null, null);
	 * 
	 * @param type
	 * @param toWebView
	 */
	void send(String type, WebView toWebView);
	
	
	/**
	 * Sends a new event to the webview with the included payload
	 * 
	 * Equivalent to calling send(type, toWebView, payload, null)
	 * 
	 * @param type
	 * @param toWebView
	 * @param withPayload
	 */
	void send(String type, WebView toWebView, Object withPayload);
	
	
	/**
	 * Sends the new event to the webview and registers a callback to listen for the returned value
	 * 
	 * Equivalent to calling send(type, toWebView, null, complete)
	 * 
	 * @param type
	 * @param toWebView
	 * @param complete
	 */
	void send(String type, WebView toWebView, JockeyCallback complete);
	
	
	/**
	 * Sends the new event to the webview with a payload and a callback to listen for the webpage response.
	 * 
	 * @param type
	 * @param toWebView
	 * @param withPayload
	 * @param complete
	 */
	void send(String type, WebView toWebView, Object withPayload, JockeyCallback complete);
	
	/**
	 * Triggers the callback on the webview with the appropriate messageId
	 * 
	 * @param webView
	 * @param messageId
	 */
	void triggerCallbackOnWebView(WebView webView, int messageId);
	
	/**
	 * Configures the WebView to be able to receive and send events with Jockey
	 * 
	 * @param webView
	 */
	void configure(WebView webView);

	/**
	 * Returns if the Jockey implementation handles the event
	 * 
	 * @param string
	 * @return
	 */
	boolean handles(String string);
	
	
	/**
	 * Sets the listener that will be called when validation needs to be performed
	 * on the incoming host before a redirect
	 * 
	 * @param listener
	 */
	void setOnValidateListener(OnValidateListener listener);

	void setWebViewClient(WebViewClient client);
	
	final class Builder {

		private JsonConverter _converter;
		public Jockey build() {
			JockeyImpl jockey = new DefaultJockeyImpl();
			jockey.setConverter(_converter);
			return jockey;
		}

		public Builder converter(JsonConverter converter) {
			_converter = converter;
			return this;
		}

	}
}<commit_msg>Throw IllegalStateException if converter is null<commit_after>/*******************************************************************************
 * Copyright (c) 2013,  <NAME>
 * 
 * Permission is hereby granted, free of charge, to any person obtaining
 * a copy of this software and associated documentation files (the
 * "Software"), to deal in the Software without restriction, including
 * without limitation the rights to use, copy, modify, merge, publish,
 * distribute, sublicense, and/or sell copies of the Software, and to
 * permit persons to whom the Software is furnished to do so, subject to
 * the following conditions:
 * 
 * The above copyright notice and this permission notice shall be
 * included in all copies or substantial portions of the Software.
 * 
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 ******************************************************************************/
package com.jockeyjs;

import android.webkit.WebView;
import android.webkit.WebViewClient;
import com.jockeyjs.converter.JsonConverter;

/**
 * The primary interface for communicating between a WebView and the local android activity.
 * 
 * @author Paul
 *
 */
public interface Jockey {

	/**
	 * An interface for the app to check the incoming source of an event.
	 * 
	 * @author Paul
	 *
	 */
	interface OnValidateListener {
		boolean validate(String host);
	}

	/**
	 * Attaches one or more handlers to this jockey instance so that is may receive events of the provided type
	 * from a webpage
	 * 
	 * @param type
	 * @param handler
	 */
	void on(String type, JockeyHandler ... handler);
	
	/**
	 * Removes all handlers of the specified name
	 * 
	 * @param type
	 */
	void off(String type);
	
	
	/**
	 * Sends a new event to the webview
	 * 
	 * Equivalent to calling send(type, toWebView, null, null);
	 * 
	 * @param type
	 * @param toWebView
	 */
	void send(String type, WebView toWebView);
	
	
	/**
	 * Sends a new event to the webview with the included payload
	 * 
	 * Equivalent to calling send(type, toWebView, payload, null)
	 * 
	 * @param type
	 * @param toWebView
	 * @param withPayload
	 */
	void send(String type, WebView toWebView, Object withPayload);
	
	
	/**
	 * Sends the new event to the webview and registers a callback to listen for the returned value
	 * 
	 * Equivalent to calling send(type, toWebView, null, complete)
	 * 
	 * @param type
	 * @param toWebView
	 * @param complete
	 */
	void send(String type, WebView toWebView, JockeyCallback complete);
	
	
	/**
	 * Sends the new event to the webview with a payload and a callback to listen for the webpage response.
	 * 
	 * @param type
	 * @param toWebView
	 * @param withPayload
	 * @param complete
	 */
	void send(String type, WebView toWebView, Object withPayload, JockeyCallback complete);
	
	/**
	 * Triggers the callback on the webview with the appropriate messageId
	 * 
	 * @param webView
	 * @param messageId
	 */
	void triggerCallbackOnWebView(WebView webView, int messageId);
	
	/**
	 * Configures the WebView to be able to receive and send events with Jockey
	 * 
	 * @param webView
	 */
	void configure(WebView webView);

	/**
	 * Returns if the Jockey implementation handles the event
	 * 
	 * @param string
	 * @return
	 */
	boolean handles(String string);
	
	
	/**
	 * Sets the listener that will be called when validation needs to be performed
	 * on the incoming host before a redirect
	 * 
	 * @param listener
	 */
	void setOnValidateListener(OnValidateListener listener);

	void setWebViewClient(WebViewClient client);
	
	final class Builder {

		private JsonConverter _converter;
		public Jockey build() {
			if (_converter == null) {
				throw new IllegalStateException("Converter required");
			}
			JockeyImpl jockey = new DefaultJockeyImpl();
			jockey.setConverter(_converter);
			return jockey;
		}

		public Builder converter(JsonConverter converter) {
			_converter = converter;
			return this;
		}

	}
}
{'fraction_non_alphanumeric': 0.11019123134328358, 'fraction_numerical': 0.0009328358208955224, 'mean_word_length': 3.6563517915309447, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 5, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1115002', 'n_tokens_mistral': 2508, 'n_tokens_neox': 2176, 'n_words': 984}