/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.core.communication.rpc.internal;
import java.lang.ref.WeakReference;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import org.osgi.framework.BundleContext;
import de.rcenvironment.core.communication.common.InstanceNodeSessionId;
import de.rcenvironment.core.communication.rpc.api.CallbackProxyService;
import de.rcenvironment.core.utils.common.security.AllowRemoteAccess;
/**
* Implementation of {@link CallbackProxyService}.
*
* @author Doreen Seider
*/
public class CallbackProxyServiceImpl implements CallbackProxyService {
private Map<String, WeakReference<Object>> proxies = Collections.synchronizedMap(new HashMap<String, WeakReference<Object>>());
private Map<String, InstanceNodeSessionId> homePlatforms = Collections.synchronizedMap(new HashMap<String, InstanceNodeSessionId>());
private Map<String, Long> ttls = Collections.synchronizedMap(new HashMap<String, Long>());
protected void activate(BundleContext context) {
CleanJob.scheduleJob(CallbackProxyService.class, proxies, ttls, homePlatforms);
}
protected void deactivate(BundleContext context) {
CleanJob.unscheduleJob(CallbackProxyService.class);
}
@Override
public void addCallbackProxy(CallbackProxy callBackProxy) {
String identifier = callBackProxy.getObjectIdentifier();
proxies.put(identifier, new WeakReference<Object>(callBackProxy));
homePlatforms.put(identifier, callBackProxy.getHomePlatform());
ttls.put(identifier, new Date(System.currentTimeMillis() + CleanJob.TTL_MSEC).getTime());
}
@Override
public Object getCallbackProxy(String objectIdentifier) {
WeakReference<Object> weakRef = proxies.get(objectIdentifier);
if (weakRef != null) {
return weakRef.get();
} else {
return null;
}
}
@Override
@AllowRemoteAccess
public void setTTL(String objectIdentifier, Long ttl) {
ttls.put(objectIdentifier, ttl);
}
}