/* This file is part of JFLICKS. JFLICKS is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. JFLICKS 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 General Public License for more details. You should have received a copy of the GNU General Public License along with JFLICKS. If not, see <recorder://www.gnu.org/licenses/>. */ package org.jflicks.nms.system; import java.io.File; import java.util.Hashtable; import org.jflicks.discovery.ServiceDescription; import org.jflicks.discovery.ServiceResponderJob; import org.jflicks.job.JobContainer; import org.jflicks.job.JobManager; import org.jflicks.nms.NMS; import org.jflicks.util.BaseActivator; import org.jflicks.util.EventSender; import org.jflicks.util.Hostname; import org.jflicks.util.LogUtil; import org.jflicks.util.Util; import ch.ethz.iks.r_osgi.RemoteOSGiService; import org.osgi.framework.Bundle; import org.osgi.framework.BundleContext; import org.osgi.framework.BundleException; import org.osgi.util.tracker.ServiceTracker; /** * Simple activater that starts our NMS service. * * @author Doug Barnum * @version 1.0 */ public class Activator extends BaseActivator { private RecorderTracker recorderTracker; private SchedulerTracker schedulerTracker; private LiveTracker liveTracker; private CleanerTracker cleanerTracker; private PhotoManagerTracker photoManagerTracker; private VideoManagerTracker videoManagerTracker; private AutoArtTracker autoArtTracker; private PostProcTracker postProcTracker; private ProgramDataTracker programDataTracker; private TrailerTracker trailerTracker; private OnDemandTracker onDemandTracker; private RemoteTracker remoteTracker; private SystemNMS systemNMS; private JobContainer removalJobContainer; /** * {@inheritDoc} */ public void start(BundleContext bc) { setupJflicksPath(); setBundleContext(bc); SystemNMS s = new SystemNMS(); setSystemNMS(s); s.setEventSender(EventSender.getInstance(bc)); RemoveRecordingJob rrj = new RemoveRecordingJob(s); JobContainer rjc = JobManager.getJobContainer(rrj); setRemovalJobContainer(rjc); rjc.start(); RecorderTracker tracker = new RecorderTracker(bc, s); setRecorderTracker(tracker); tracker.open(); SchedulerTracker stracker = new SchedulerTracker(bc, s); setSchedulerTracker(stracker); stracker.open(); LiveTracker livetracker = new LiveTracker(bc, s); setLiveTracker(livetracker); livetracker.open(); CleanerTracker cleanertracker = new CleanerTracker(bc, s); setCleanerTracker(cleanertracker); cleanertracker.open(); PhotoManagerTracker phototracker = new PhotoManagerTracker(bc, s); setPhotoManagerTracker(phototracker); phototracker.open(); VideoManagerTracker videotracker = new VideoManagerTracker(bc, s); setVideoManagerTracker(videotracker); videotracker.open(); AutoArtTracker autoarttracker = new AutoArtTracker(bc, s); setAutoArtTracker(autoarttracker); autoarttracker.open(); PostProcTracker pptracker = new PostProcTracker(bc, s); setPostProcTracker(pptracker); pptracker.open(); ProgramDataTracker ptracker = new ProgramDataTracker(bc, s); setProgramDataTracker(ptracker); ptracker.open(); TrailerTracker trailtracker = new TrailerTracker(bc, s); setTrailerTracker(trailtracker); trailtracker.open(); OnDemandTracker odtracker = new OnDemandTracker(bc, s); setOnDemandTracker(odtracker); odtracker.open(); Hashtable<String, Boolean> props = new Hashtable<String, Boolean>(); props.put(RemoteOSGiService.R_OSGi_REGISTRATION, Boolean.TRUE); bc.registerService(NMS.class.getName(), s, props); ServiceDescription sd = new ServiceDescription(); sd.setAddress(Hostname.getLocalhostAddress()); sd.setPort(9278); sd.setInstanceName("SystemNMS"); LogUtil.log(LogUtil.INFO, "Service details: " + sd.toString()); s.setTitle("NMS - " + sd.getAddressAsString() + ":" + sd.getPort()); s.setHost(sd.getAddressAsString()); s.setPort(9278); s.setHttpPort(Util.str2int( bc.getProperty("org.osgi.service.http.port"), 8080)); ServiceResponderJob job = new ServiceResponderJob("nms"); job.setServiceDescription(sd); JobContainer jc = JobManager.getJobContainer(job); setJobContainer(jc); jc.start(); RemoteTracker rtracker = new RemoteTracker(bc, sd); setRemoteTracker(rtracker); rtracker.open(); // Add our shutdown hook so we close up cleanly. Runtime runtime = Runtime.getRuntime(); Thread thread = new Thread(new ShutDownListener()); runtime.addShutdownHook(thread); // Finally start up the web server s.startWebServer(); } /** * {@inheritDoc} */ public void stop(BundleContext context) { JobContainer rjc = getRemovalJobContainer(); if (rjc != null) { rjc.stop(); } SystemNMS s = getSystemNMS(); if (s != null) { s.stopWebServer(); s.close(); } RecorderTracker tracker = getRecorderTracker(); if (tracker != null) { tracker.close(); } SchedulerTracker stracker = getSchedulerTracker(); if (stracker != null) { stracker.close(); } LiveTracker livetracker = getLiveTracker(); if (livetracker != null) { livetracker.close(); } CleanerTracker cleanertracker = getCleanerTracker(); if (cleanertracker != null) { cleanertracker.close(); } PhotoManagerTracker phototracker = getPhotoManagerTracker(); if (phototracker != null) { phototracker.close(); } VideoManagerTracker videotracker = getVideoManagerTracker(); if (videotracker != null) { videotracker.close(); } AutoArtTracker autoarttracker = getAutoArtTracker(); if (autoarttracker != null) { autoarttracker.close(); } PostProcTracker pptracker = getPostProcTracker(); if (pptracker != null) { pptracker.close(); } ProgramDataTracker ptracker = getProgramDataTracker(); if (ptracker != null) { ptracker.close(); } TrailerTracker trailtracker = getTrailerTracker(); if (trailtracker != null) { trailtracker.close(); } OnDemandTracker odtracker = getOnDemandTracker(); if (odtracker != null) { odtracker.close(); } RemoteTracker rtracker = getRemoteTracker(); if (rtracker != null) { rtracker.close(); } JobContainer jc = getJobContainer(); if (jc != null) { jc.stop(); } } private JobContainer getRemovalJobContainer() { return (removalJobContainer); } private void setRemovalJobContainer(JobContainer jc) { removalJobContainer = jc; } private RecorderTracker getRecorderTracker() { return (recorderTracker); } private void setRecorderTracker(RecorderTracker t) { recorderTracker = t; } private SchedulerTracker getSchedulerTracker() { return (schedulerTracker); } private void setSchedulerTracker(SchedulerTracker t) { schedulerTracker = t; } private LiveTracker getLiveTracker() { return (liveTracker); } private void setLiveTracker(LiveTracker t) { liveTracker = t; } private CleanerTracker getCleanerTracker() { return (cleanerTracker); } private void setCleanerTracker(CleanerTracker t) { cleanerTracker = t; } private PhotoManagerTracker getPhotoManagerTracker() { return (photoManagerTracker); } private void setPhotoManagerTracker(PhotoManagerTracker t) { photoManagerTracker = t; } private VideoManagerTracker getVideoManagerTracker() { return (videoManagerTracker); } private void setVideoManagerTracker(VideoManagerTracker t) { videoManagerTracker = t; } private AutoArtTracker getAutoArtTracker() { return (autoArtTracker); } private void setAutoArtTracker(AutoArtTracker t) { autoArtTracker = t; } private PostProcTracker getPostProcTracker() { return (postProcTracker); } private void setPostProcTracker(PostProcTracker t) { postProcTracker = t; } private ProgramDataTracker getProgramDataTracker() { return (programDataTracker); } private void setProgramDataTracker(ProgramDataTracker t) { programDataTracker = t; } private TrailerTracker getTrailerTracker() { return (trailerTracker); } private void setTrailerTracker(TrailerTracker t) { trailerTracker = t; } private OnDemandTracker getOnDemandTracker() { return (onDemandTracker); } private void setOnDemandTracker(OnDemandTracker t) { onDemandTracker = t; } private RemoteTracker getRemoteTracker() { return (remoteTracker); } private void setRemoteTracker(RemoteTracker t) { remoteTracker = t; } private SystemNMS getSystemNMS() { return (systemNMS); } private void setSystemNMS(SystemNMS s) { systemNMS = s; } private void setupJflicksPath() { File dot = new File("."); File parent = dot.getParentFile(); File platform = new File(parent, "platform"); if ((platform.exists()) && (platform.isDirectory())) { String pname = null; if (Util.isLinux()) { pname = "linux"; } else if (Util.isMac()) { pname = "mac"; } else if (Util.isWindows()) { pname = "win"; } File os = new File(platform, pname); if ((os.exists()) && (os.isDirectory())) { File bin = new File(os, "bin"); if ((bin.exists()) && (bin.isDirectory())) { System.setProperty("jflicks.path", bin.getAbsolutePath()); } } } } class ShutDownListener implements Runnable { public void run() { SystemNMS s = getSystemNMS(); BundleContext bc = getBundleContext(); if ((s != null) && (bc != null)) { LogUtil.log(LogUtil.INFO, "Shutting down via shutdown hook!"); try { Bundle b = bc.getBundle(0L); if (b != null) { LogUtil.log(LogUtil.INFO, "BundleContext: stop"); b.stop(); } } catch (BundleException ex) { } } } } }