Package de.dfki.km.text20.services.trackingdevices.eyes.impl.mouse

Source Code of de.dfki.km.text20.services.trackingdevices.eyes.impl.mouse.MouseTrackingDeviceProviderImpl$MouseTrackingDevice

/*
* TrackingDeviceImpl.java
*
* Copyright (c) 2010, Ralf Biedert, DFKI. All rights reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301  USA
*
*/
package de.dfki.km.text20.services.trackingdevices.eyes.impl.mouse;

import java.awt.MouseInfo;
import java.awt.Point;
import java.awt.PointerInfo;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
import java.util.logging.Logger;

import net.xeoh.plugins.base.annotations.Capabilities;
import net.xeoh.plugins.base.annotations.PluginImplementation;
import de.dfki.km.text20.services.trackingdevices.eyes.EyeTrackingDevice;
import de.dfki.km.text20.services.trackingdevices.eyes.EyeTrackingDeviceInfo;
import de.dfki.km.text20.services.trackingdevices.eyes.EyeTrackingDeviceProvider;
import de.dfki.km.text20.services.trackingdevices.eyes.EyeTrackingDeviceType;
import de.dfki.km.text20.services.trackingdevices.eyes.EyeTrackingEvent;
import de.dfki.km.text20.services.trackingdevices.eyes.EyeTrackingEventValidity;
import de.dfki.km.text20.services.trackingdevices.eyes.EyeTrackingListener;
import de.dfki.km.text20.trackingserver.eyes.remote.TrackingCommand;
import de.dfki.km.text20.trackingserver.eyes.remote.options.SendCommandOption;

/**
* @author rb
*
*/
@PluginImplementation
public class MouseTrackingDeviceProviderImpl implements EyeTrackingDeviceProvider {
    /**
     * Uses the mouse as a tracking device
     *
     * @author rb
     */
    private static class MouseTrackingDevice implements EyeTrackingDevice {

        /**
         * Manages acces to the listener.
         */
        final Lock listenerLock = new ReentrantLock();

        /**
         * List of listeners we inform.
         */
        final List<EyeTrackingListener> trackingListener = new ArrayList<EyeTrackingListener>();

        /**
         * Construct a standard MouseTrackigDevice which will start instantly.
         */
        MouseTrackingDevice() {
            final Thread t = new Thread(new Runnable() {

                @Override
                public void run() {
                    while (true) {

                        final PointerInfo pointerInfo = MouseInfo.getPointerInfo();

                        // Obtain information from the mouse
                        final Point point = pointerInfo.getLocation();

                        final EyeTrackingEvent event = createEvent(point);

                        MouseTrackingDevice.this.listenerLock.lock();
                        // And dispatch it to the listener
                        for (int i = 0; i < MouseTrackingDevice.this.trackingListener.size(); i++) {
                            final EyeTrackingListener l = MouseTrackingDevice.this.trackingListener.get(i);
                            l.newTrackingEvent(event);
                        }
                        MouseTrackingDevice.this.listenerLock.unlock();

                        // Sleep some time ...
                        try {
                            Thread.sleep(50);
                        } catch (final InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                }

            });
            t.setDaemon(true);
            t.start();
        }

        /* (non-Javadoc)
         * @see de.dfki.km.augmentedtext.services.trackingdevices.TrackingDevice#addTrackingListener(de.dfki.km.augmentedtext.services.trackingdevices.TrackingListener)
         */
        @Override
        public void addTrackingListener(final EyeTrackingListener listener) {
            this.listenerLock.lock();
            try {
                this.trackingListener.add(listener);
            } finally {
                this.listenerLock.unlock();
            }
        }

        public EyeTrackingEvent createEvent(final Point p) {
            return new EyeTrackingEvent() {

                long et = System.currentTimeMillis();

                @Override
                public boolean areValid(final EyeTrackingEventValidity... validities) {
                    return true;
                }

                @Override
                public long getEventTime() {
                    return this.et;
                }

                @Override
                public Point getGazeCenter() {
                    return p;
                }

                @Override
                public float[] getHeadPosition() {
                    return new float[] { 0f, 0f, 0.5f };
                }

                @Override
                public float getLeftEyeDistance() {
                    // TODO Auto-generated method stub
                    return 0;
                }

                @Override
                public float[] getLeftEyePosition() {
                    return new float[] { 0f, 0f, 0.5f };
                }

                @Override
                public float getPupilSizeLeft() {
                    // TODO Auto-generated method stub
                    return 0;
                }

                @Override
                public float getPupilSizeRight() {
                    // TODO Auto-generated method stub
                    return 0;
                }

                @Override
                public float getRightEyeDistance() {
                    // TODO Auto-generated method stub
                    return 0;
                }

                @Override
                public float[] getRightEyePosition() {
                    return new float[] { 0f, 0f, 0.5f };
                }

                @Override
                public Point getLeftEyeGazePoint() {
                    // TODO Auto-generated method stub
                    return null;
                }

                @Override
                public float[] getLeftEyeGazePosition() {
                    // TODO Auto-generated method stub
                    return null;
                }

                @Override
                public Point getRightEyeGazePoint() {
                    // TODO Auto-generated method stub
                    return null;
                }

                @Override
                public float[] getRightEyeGazePosition() {
                    // TODO Auto-generated method stub
                    return null;
                }
            };
        }

        @Override
        public EyeTrackingDeviceInfo getDeviceInfo() {
            return new EyeTrackingDeviceInfo() {

                @Override
                public String getInfo(final String key) {
                    return null;
                }

                @Override
                public String[] getKeys() {
                    return new String[0];
                }

                @SuppressWarnings("unused")
                public int getTrackingEventRate() {
                    // TODO Auto-generated method stub
                    return 0;
                }
            };
        }

        /* (non-Javadoc)
         * @see de.dfki.km.augmentedtext.services.trackingdevices.TrackingDevice#getDeviceType()
         */
        @Override
        public EyeTrackingDeviceType getDeviceType() {
            return EyeTrackingDeviceType.MOUSE;
        }

        /* (non-Javadoc)
         * @see de.dfki.km.augmentedtext.services.trackingdevices.TrackingDevice#sendCommand(de.dfki.km.augmentedtext.trackingserver.remote.TrackingCommand, de.dfki.km.augmentedtext.trackingserver.remote.options.SendCommandOption[])
         */
        @Override
        public void sendLowLevelCommand(TrackingCommand command, SendCommandOption... options) {
            // TODO Auto-generated method stub
        }

        /* (non-Javadoc)
         * @see de.dfki.km.augmentedtext.services.trackingdevices.TrackingDevice#closeDevice()
         */
        @Override
        public void closeDevice() {
            // TODO Auto-generated method stub

        }
    }

    /** */
    final Logger logger = Logger.getLogger(this.getClass().getName());

    /**
     * The device we may return
     */
    volatile MouseTrackingDevice trackingDevice = null;

    /**
     * Return what we can do...
     *
     * @return .
     */
    @Capabilities
    public String[] getCapabilities() {
        return new String[] { "eyetrackingdevice:mouse" };
    }

    /* (non-Javadoc)
     * @see de.dfki.km.augmentedtext.services.trackingdevices.TrackingDeviceProvider#openDevice(java.lang.String)
     */
    @Override
    public EyeTrackingDevice openDevice(final String url) {

        this.logger.info("Mouse device was opened with URL " + url);

        synchronized (this) {
            if (this.trackingDevice == null) {
                this.trackingDevice = new MouseTrackingDevice();
            }
        }

        return this.trackingDevice;
    }

}
TOP

Related Classes of de.dfki.km.text20.services.trackingdevices.eyes.impl.mouse.MouseTrackingDeviceProviderImpl$MouseTrackingDevice

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.