001package com.github.sarxos.webcam.ds.ipcam; 002 003import java.io.File; 004import java.util.List; 005 006import javax.xml.bind.JAXBContext; 007import javax.xml.bind.JAXBException; 008import javax.xml.bind.Unmarshaller; 009import javax.xml.bind.annotation.XmlAccessType; 010import javax.xml.bind.annotation.XmlAccessorType; 011import javax.xml.bind.annotation.XmlElement; 012import javax.xml.bind.annotation.XmlRootElement; 013 014import com.github.sarxos.webcam.WebcamException; 015import com.github.sarxos.webcam.ds.ipcam.impl.IpCamDescriptor; 016 017 018@XmlRootElement(name = "storage") 019@XmlAccessorType(XmlAccessType.FIELD) 020public class IpCamStorage { 021 022 private static final Class<?>[] CLASSES = new Class<?>[] { 023 IpCamStorage.class, 024 IpCamDescriptor.class, 025 }; 026 027 private static final JAXBContext CTX; 028 static { 029 JAXBContext c = null; 030 try { 031 c = JAXBContext.newInstance(CLASSES); 032 } catch (JAXBException e) { 033 throw new RuntimeException(e); 034 } finally { 035 CTX = c; 036 } 037 } 038 039 @XmlElement(name = "ipcam") 040 private List<IpCamDescriptor> descriptors = null; 041 042 private transient File file = null; 043 044 protected IpCamStorage() { 045 } 046 047 public IpCamStorage(String file) { 048 this(new File(file)); 049 } 050 051 public IpCamStorage(File file) { 052 this.file = file; 053 } 054 055 protected List<IpCamDescriptor> getDescriptors() { 056 return descriptors; 057 } 058 059 public void open() { 060 061 IpCamStorage storage = null; 062 try { 063 Unmarshaller unmarshaller = CTX.createUnmarshaller(); 064 storage = (IpCamStorage) unmarshaller.unmarshal(file); 065 } catch (JAXBException e) { 066 throw new WebcamException(e); 067 } 068 069 for (IpCamDescriptor d : storage.getDescriptors()) { 070 IpCamDeviceRegistry.register(d.getName(), d.getURL(), d.getMode(), d.getAuth()); 071 } 072 } 073}