001    package com.github.sarxos.webcam.ds.ipcam.device.zavio;
002    
003    import java.awt.Dimension;
004    import java.net.MalformedURLException;
005    import java.net.URL;
006    
007    import com.github.sarxos.webcam.WebcamException;
008    import com.github.sarxos.webcam.ds.ipcam.IpCamDevice;
009    import com.github.sarxos.webcam.ds.ipcam.IpCamMode;
010    
011    
012    /**
013     * B7210 2M Bullet IP Camera from Zavio.
014     * 
015     * @author Bartosz Firyn (SarXos)
016     */
017    public class B7210 extends IpCamDevice {
018    
019            public static final Dimension SIZE_HD_1080 = new Dimension(1280, 1024);
020            public static final Dimension SIZE_43_960 = new Dimension(1280, 960);
021            public static final Dimension SIZE_QVGA = new Dimension(320, 240);
022    
023            //@formatter:off
024            private static final Dimension[] SIZES = new Dimension[] { 
025                    SIZE_HD_1080, 
026                    SIZE_43_960, 
027                    SIZE_QVGA, 
028            };
029            //@formatter:on
030    
031            private URL base = null;
032    
033            public B7210(String name, String urlBase) {
034                    this(name, toURL(urlBase));
035            }
036    
037            public B7210(String name, URL base) {
038                    super(name, null, IpCamMode.PULL);
039                    this.base = base;
040            }
041    
042            @Override
043            public Dimension[] getResolutions() {
044                    return SIZES;
045            }
046    
047            @Override
048            public void setResolution(Dimension size) {
049    
050                    int index = -1;
051                    for (int i = 0; i < SIZES.length; i++) {
052                            if (SIZES[i].equals(size)) {
053                                    index = i;
054                                    break;
055                            }
056                    }
057    
058                    if (index == -1) {
059                            throw new IllegalArgumentException(String.format("Incorrect size %s", size));
060                    }
061    
062                    super.setResolution(size);
063            }
064    
065            @Override
066            public URL getURL() {
067    
068                    int index = -1;
069                    for (int i = 0; i < SIZES.length; i++) {
070                            if (SIZES[i].equals(getResolution())) {
071                                    index = i;
072                                    break;
073                            }
074                    }
075    
076                    int res = 0;
077                    switch (index) {
078                            case 0:
079                                    res = 0;
080                                    break;
081                            case 1:
082                                    res = 3;
083                                    break;
084                            case 2:
085                                    res = 4;
086                                    break;
087                    }
088    
089                    long time = System.currentTimeMillis();
090    
091                    String url = String.format("%s/cgi-bin/view/image?pro_%d&%d", base, res, time);
092                    try {
093                            return new URL(url);
094                    } catch (MalformedURLException e) {
095                            throw new WebcamException(String.format("Incorrect URL %s", url), e);
096                    }
097            }
098    
099    }