/******************************************************************************* * Copyright (c) 2013 Luigi Sgro. All rights reserved. This * program and the accompanying materials are made available under the terms of * the Eclipse Public License v1.0 which accompanies this distribution, and is * available at http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Luigi Sgro - initial API and implementation ******************************************************************************/ package com.quantcomponents.core.remote; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.logging.Logger; import com.quantcomponents.core.model.ITaskMonitor; public class TaskMonitorHost implements ITaskMonitorHost, ITaskMonitorHostLocal { @SuppressWarnings("unused") private static final Logger logger = Logger.getLogger(TaskMonitorHost.class.getName()); private final Map<ServiceHandle<ITaskMonitorHost>, ITaskMonitor> allTaskMonitors = new ConcurrentHashMap<ServiceHandle<ITaskMonitorHost>, ITaskMonitor>(); private volatile IUIDGenerator uidGenerator; public TaskMonitorHost() {} public TaskMonitorHost(IUIDGenerator uidGenerator) { this.uidGenerator = uidGenerator; } public void deactivate() { allTaskMonitors.clear(); } public void setUidGenerator(IUIDGenerator uidGenerator) { this.uidGenerator = uidGenerator; } @Override public ServiceHandle<ITaskMonitorHost> addTaskMonitor(ITaskMonitor taskMonitor) { ServiceHandle<ITaskMonitorHost> handle = new ServiceHandle<ITaskMonitorHost>(uidGenerator.nextUID()); allTaskMonitors.put(handle, taskMonitor); return handle; } @Override public void deleteTaskMonitor(ServiceHandle<ITaskMonitorHost> taskMonitorHandle) { allTaskMonitors.remove(taskMonitorHandle); } @Override public void beginTask(ServiceHandle<ITaskMonitorHost> taskMonitorHandle, int totalWork) { retrieveTaskMonitor(taskMonitorHandle).beginTask(totalWork); } @Override public boolean isCancelled(ServiceHandle<ITaskMonitorHost> taskMonitorHandle) { return retrieveTaskMonitor(taskMonitorHandle).isCancelled(); } @Override public void setCancelled(ServiceHandle<ITaskMonitorHost> taskMonitorHandle, boolean value) { retrieveTaskMonitor(taskMonitorHandle).setCancelled(value); } @Override public void worked(ServiceHandle<ITaskMonitorHost> taskMonitorHandle, int work) { retrieveTaskMonitor(taskMonitorHandle).worked(work); } @Override public void done(ServiceHandle<ITaskMonitorHost> taskMonitorHandle) { retrieveTaskMonitor(taskMonitorHandle).done(); } private ITaskMonitor retrieveTaskMonitor(ServiceHandle<ITaskMonitorHost> taskMonitorHandle) { ITaskMonitor taskMonitor = allTaskMonitors.get(taskMonitorHandle); if (taskMonitor == null) { throw new IllegalArgumentException("Task monitor for handle: " + taskMonitorHandle + " not found"); } return taskMonitor; } }