/* * This file is part of libbluray * Copyright (C) 2010 William Hahne * * 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, see * . */ package javax.tv.service; import java.util.LinkedList; import javax.tv.locator.InvalidLocatorException; import javax.tv.locator.Locator; import javax.tv.service.navigation.ServiceFilter; import javax.tv.service.navigation.ServiceList; import javax.tv.service.navigation.ServiceListImpl; import javax.tv.service.transport.Transport; import javax.tv.service.transport.TransportImpl; import org.bluray.net.BDLocator; import org.bluray.ti.TitleImpl; import org.videolan.Libbluray; public class SIManagerImpl extends SIManager { private static final Object instanceLock = new Object(); public static SIManager createInstance() { synchronized (instanceLock) { if (instance == null) instance = new SIManagerImpl(); return instance; } } public static void shutdown() { synchronized (instanceLock) { instance = null; } } protected SIManagerImpl() { int ntitles = Libbluray.numTitles(); LinkedList list = new LinkedList(); for (int i = 0; i <= ntitles; i++) { try { list.add(new TitleImpl(i)); } catch (Exception t) { org.videolan.Logger.getLogger("SIManagerImpl").error("Failed initializing title " + i + ": " + t); } } try { list.add(new TitleImpl(65535)); } catch (Exception t) { org.videolan.Logger.getLogger("SIManagerImpl").error("Failed initializing title FirstPlay: " + t); } titles = new ServiceListImpl(list); } public ServiceList filterServices(ServiceFilter filter) { return titles.filterServices(filter); } public String getPreferredLanguage() { return language; } public RatingDimension getRatingDimension(String name) throws SIException { if (!name.equals(RatingDimensionImpl.dimensionName)) throw new SIException(); return new RatingDimensionImpl(); } public Service getService(Locator locator) throws InvalidLocatorException, SecurityException { try { new BDLocator(locator.toExternalForm()); } catch (org.davic.net.InvalidLocatorException e) { System.err.println("invalid locator: " + locator.toExternalForm() + "\n" + org.videolan.Logger.dumpStack(e)); throw new javax.tv.locator.InvalidLocatorException(locator); } return titles.findService(locator); } public String[] getSupportedDimensions() { String[] dimensions = new String[1]; dimensions[0] = RatingDimensionImpl.dimensionName; return dimensions; } public Transport[] getTransports() { Transport[] transports = new Transport[1]; transports[0] = new TransportImpl(); return transports; } public void registerInterest(Locator locator, boolean active) throws InvalidLocatorException, SecurityException { org.videolan.Logger.unimplemented(SIManagerImpl.class.getName(), "registerInterest"); } public SIRequest retrieveProgramEvent(Locator locator, SIRequestor requestor) throws InvalidLocatorException, SecurityException { org.videolan.Logger.unimplemented(SIManagerImpl.class.getName(), "retrieveProgramEvent"); throw new Error("Not implemented"); } public SIRequest retrieveSIElement(Locator locator, SIRequestor requestor) throws InvalidLocatorException, SecurityException { org.videolan.Logger.unimplemented(SIManagerImpl.class.getName(), "retrieveSIElement"); throw new Error("Not implemented"); } public SIRequest retrieveServiceDetails(Locator locator, SIRequestor requestor) throws InvalidLocatorException, SecurityException { org.videolan.Logger.unimplemented(SIManagerImpl.class.getName(), "retrieveServiceDetails"); throw new Error("Not implemented"); } public void setPreferredLanguage(String language) { this.language = language; } private ServiceListImpl titles; private String language = null; private static SIManagerImpl instance = null; }