All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.sarxos.webcam.ds.ipcam.IpCamDeviceRegistry Maven / Gradle / Ivy

package com.github.sarxos.webcam.ds.ipcam;

import java.net.MalformedURLException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;

import com.github.sarxos.webcam.Webcam;
import com.github.sarxos.webcam.WebcamDevice;
import com.github.sarxos.webcam.WebcamDiscoveryService;
import com.github.sarxos.webcam.WebcamException;


/**
 * Class used to register IP camera devices.
 *
 * @author Bartosz Firyn (SarXos)
 */
public class IpCamDeviceRegistry {

	/**
	 * Contains IP cameras.
	 */
	private static final List DEVICES = new ArrayList();

	/**
	 * Register IP camera.
	 *
	 * @param ipcam the IP camera to be register
	 * @return IP camera device
	 */
	public static IpCamDevice register(IpCamDevice ipcam) {

		for (WebcamDevice d : DEVICES) {
			String name = ipcam.getName();
			if (d.getName().equals(name)) {
				throw new WebcamException(String.format("Webcam with name '%s' is already registered", name));
			}
		}

		DEVICES.add(ipcam);

		rescan();

		return ipcam;
	}

	public static IpCamDevice register(String name, String url, IpCamMode mode) throws MalformedURLException {
		return register(new IpCamDevice(name, url, mode));
	}

	public static IpCamDevice register(String name, URL url, IpCamMode mode) {
		return register(new IpCamDevice(name, url, mode));
	}

	public static IpCamDevice register(String name, String url, IpCamMode mode, IpCamAuth auth) throws MalformedURLException {
		return register(new IpCamDevice(name, url, mode, auth));
	}

	/**
	 * Register new IP camera device.
	 *
	 * @param name the name of the device
	 * @param url the URL to be used
	 * @param mode the camera mode to be used
	 * @param auth the optional settings if device supports authentication
	 * @return Return newly created IP camera device object
	 */
	public static IpCamDevice register(String name, URL url, IpCamMode mode, IpCamAuth auth) {
		return register(new IpCamDevice(name, url, mode, auth));
	}

	/**
	 * Is device registered?
	 *
	 * @param ipcam the IP camera device
	 * @return True if device is registsred, false otherwise
	 */
	public static boolean isRegistered(IpCamDevice ipcam) {

		if (ipcam == null) {
			throw new IllegalArgumentException("IP camera device cannot be null");
		}

		Iterator di = DEVICES.iterator();
		while (di.hasNext()) {
			if (di.next().getName().equals(ipcam.getName())) {
				return true;
			}
		}

		return false;
	}

	/**
	 * Is device with given name registered?
	 *
	 * @param name the name of device
	 * @return True if device is registered, false otherwise
	 */
	public static boolean isRegistered(String name) {

		if (name == null) {
			throw new IllegalArgumentException("Device name cannot be null");
		}

		Iterator di = DEVICES.iterator();
		while (di.hasNext()) {
			if (di.next().getName().equals(name)) {
				return true;
			}
		}

		return false;
	}

	/**
	 * Is device with given URL registered?
	 *
	 * @param url the URL used by device
	 * @return True if device is registered, false otherwise
	 */
	public static boolean isRegistered(URL url) {

		if (url == null) {
			throw new IllegalArgumentException("Camera device URL cannot be null");
		}

		try {
			return isRegistered(url.toURI());
		} catch (URISyntaxException e) {
			throw new WebcamException(e);
		}
	}

	/**
	 * Is device with given URL registered?
	 *
	 * @param uri the URI used by device
	 * @return True if device is registered, false otherwise
	 */
	public static boolean isRegistered(URI uri) {

		if (uri == null) {
			throw new IllegalArgumentException("Camera device URI cannot be null");
		}

		for (IpCamDevice d : DEVICES) {

			// URL.euals() method is broken and thus we shall not depend on
			// it, the best w/a is to use URI instead

			try {
				if (d.getURL().toURI().equals(uri)) {
					return true;
				}
			} catch (URISyntaxException e) {
				throw new WebcamException(e);
			}
		}

		return false;
	}

	/**
	 * Unregister IP camera.
	 *
	 * @param ipcam the IP camera to be unregister
	 * @return True if IP camera device has been unregistered, false otherwise
	 */
	public static boolean unregister(IpCamDevice ipcam) {
		try {
			return DEVICES.remove(ipcam);
		} finally {
			rescan();
		}
	}

	/**
	 * Run discovery service once if device has been removed to trigger disconnected webcam
	 * discovery event and keep webcams list up-to-date.
	 */
	private static void rescan() {
		WebcamDiscoveryService discovery = Webcam.getDiscoveryServiceRef();
		if (discovery != null) {
			discovery.scan();
		}
	}

	/**
	 * Unregister IP camera with given name.
	 * 
	 * @param name the name of IP camera to be unregister
	 * @return True if device has been registered, false otherwise
	 */
	public static boolean unregister(String name) {
		Iterator di = DEVICES.iterator();
		while (di.hasNext()) {
			IpCamDevice d = di.next();
			if (d.getName().equals(name)) {
				di.remove();
				rescan();
				return true;
			}
		}
		return false;
	}

	/**
	 * Get all registered IP cameras.
	 *
	 * @return Collection of registered IP cameras
	 */
	public static List getIpCameras() {
		return Collections.unmodifiableList(DEVICES);
	}

	/**
	 * Removes all registered devices.
	 */
	public static void unregisterAll() {
		DEVICES.clear();
		rescan();
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy