context-manager/src/main/java/org/gcube/vremanagement/contextmanager/ResourceManager.java

77 lines
2.3 KiB
Java
Raw Normal View History

2020-12-03 14:24:34 +01:00
package org.gcube.vremanagement.contextmanager;
import java.util.Iterator;
import javax.enterprise.inject.Any;
import javax.enterprise.inject.Default;
import javax.enterprise.inject.Instance;
import javax.inject.Inject;
import javax.inject.Singleton;
import org.gcube.common.resources.gcore.Resource;
import org.gcube.common.resources.gcore.Resource.Type;
2020-12-23 10:42:07 +01:00
import org.gcube.vremanagement.contextmanager.handlers.ContextContainer;
2020-12-03 14:24:34 +01:00
import org.gcube.vremanagement.contextmanager.handlers.ResourceHandler;
2020-12-23 10:42:07 +01:00
import org.gcube.vremanagement.contextmanager.model.collectors.CollectorsBackend;
import org.gcube.vremanagement.contextmanager.model.exceptions.InvalidContextException;
2020-12-14 20:32:46 +01:00
import org.gcube.vremanagement.contextmanager.model.types.Context;
2020-12-23 10:42:07 +01:00
import org.jboss.weld.exceptions.IllegalArgumentException;
import org.slf4j.Logger;
2020-12-03 14:24:34 +01:00
@Singleton
public class ResourceManager {
@Inject
@Any
Instance<ResourceHandler> resourcesHandlers;
@Inject
@Default
2020-12-23 10:42:07 +01:00
CollectorsBackend defaultCollector;
@Inject
ContextContainer contextContainer;
@Inject Logger log;
public ScopedResource addResourceToContext(Context context, String id) throws InvalidContextException {
Resource res = retrieveResource(id);
ResourceHandler handler = retrieveHandler(res.type());
handler.addResource(context, res);
contextContainer.addResource(context.getId(), id);
return getScopedResource(res);
2020-12-03 14:24:34 +01:00
}
2020-12-23 10:42:07 +01:00
public ScopedResource removeResourceFromContext(Context context, String id ) throws InvalidContextException {
2020-12-03 14:24:34 +01:00
Resource res = retrieveResource(id);
ResourceHandler handler = retrieveHandler(res.type());
handler.removeResource(context, res);
2020-12-23 10:42:07 +01:00
contextContainer.removeResource(context.getId(), id);
2020-12-03 14:24:34 +01:00
return getScopedResource(res);
}
private Resource retrieveResource(String id) {
return defaultCollector.find(id);
}
private ResourceHandler retrieveHandler(Type type) {
Iterator<ResourceHandler> it = resourcesHandlers.iterator();
while (it.hasNext()) {
ResourceHandler rh = it.next();
2020-12-23 10:42:07 +01:00
log.debug("handler {} found",rh.getClass().getSimpleName());
2020-12-03 14:24:34 +01:00
if (rh.getManagedResources().contains(type))
return rh;
}
2020-12-23 10:42:07 +01:00
throw new IllegalArgumentException("handler not found");
2020-12-03 14:24:34 +01:00
}
private ScopedResource getScopedResource(Resource res) {
return new ScopedResource(res.id(), res.type().name(), Long.toString(System.currentTimeMillis()));
}
}