118 lines
3.9 KiB
Java
118 lines
3.9 KiB
Java
package org.gcube.common.core.publisher.is.legacy;
|
|
|
|
import java.io.StringWriter;
|
|
import java.util.Set;
|
|
|
|
import org.gcube.common.core.publisher.is.legacy.application.ApplicationProfileBuilder;
|
|
import org.gcube.common.core.publisher.is.legacy.container.ContainerProfileBuilder;
|
|
import org.gcube.common.resources.gcore.GCoreEndpoint;
|
|
import org.gcube.common.resources.gcore.HostingNode;
|
|
import org.gcube.common.resources.gcore.Resource;
|
|
import org.gcube.common.resources.gcore.ResourceMediator;
|
|
import org.gcube.common.resources.gcore.Resources;
|
|
import org.gcube.common.security.AuthorizedTasks;
|
|
import org.gcube.smartgears.context.application.ApplicationContext;
|
|
import org.gcube.smartgears.context.container.ContainerContext;
|
|
import org.gcube.smartgears.publishing.Publisher;
|
|
import org.gcube.smartgears.publishing.SmartgearsProfilePublisher;
|
|
import org.gcube.smartgears.security.AuthorizationProvider;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
@SmartgearsProfilePublisher
|
|
public class LegacyISPublisher implements Publisher{
|
|
|
|
|
|
private static Logger logger = LoggerFactory.getLogger(LegacyISPublisher.class);
|
|
|
|
private Registry registry = new Registry();
|
|
|
|
|
|
|
|
@Override
|
|
public boolean publishContainer(ContainerContext container, Set<String> contexts) {
|
|
ContainerProfileBuilder cpb = new ContainerProfileBuilder(container);
|
|
HostingNode hostingNode = cpb.create();
|
|
|
|
for (String context: contexts)
|
|
ResourceMediator.setScope(hostingNode, context);
|
|
|
|
AuthorizationProvider provider = container.configuration().authorizationProvider();
|
|
for (String context : provider.getContexts())
|
|
try {
|
|
logger.info("publishing container in context {}", context);
|
|
AuthorizedTasks.executeSafely(new Runnable() {
|
|
|
|
@Override
|
|
public void run() {
|
|
try {
|
|
logger.info("(inside task)publishing container in context {}", context);
|
|
registry.getStubs().create(toXml(hostingNode), hostingNode.type().toString());
|
|
}catch (Exception e) {
|
|
logger.error("error publishing container", e);
|
|
throw new RuntimeException(e);
|
|
}
|
|
|
|
}
|
|
}, provider.getSecretForContext(context));
|
|
}catch (Throwable e) {
|
|
logger.error("error publishing container in context {}", context, e);
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
@Override
|
|
public boolean publishApplication(ApplicationContext application, Set<String> contexts) {
|
|
ApplicationProfileBuilder cpb = new ApplicationProfileBuilder(application);
|
|
GCoreEndpoint enpoint = cpb.create();
|
|
for (String context: contexts)
|
|
ResourceMediator.setScope(enpoint, context);
|
|
|
|
AuthorizationProvider provider = application.container().configuration().authorizationProvider();
|
|
for (String context : provider.getContexts())
|
|
try {
|
|
logger.info("publishing application in context {}", context);
|
|
AuthorizedTasks.executeSafely(new Runnable() {
|
|
|
|
@Override
|
|
public void run() {
|
|
try {
|
|
logger.info("(inside task)publishing application in context {}", context);
|
|
String resource = toXml(enpoint);
|
|
registry.getStubs().create(resource, enpoint.type().toString());
|
|
logger.debug("publisher resource in context {} : {}",context, resource);
|
|
}catch (Exception e) {
|
|
logger.error("erro publishing application", e);
|
|
throw new RuntimeException(e);
|
|
}
|
|
|
|
}
|
|
}, provider.getSecretForContext(context));
|
|
}catch (Throwable e) {
|
|
logger.error("error publisshing application profile in context {}", context, e);
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
@Override
|
|
public boolean unpublishContainer(ContainerContext container, Set<String> contexts) {
|
|
// TODO Auto-generated method stub
|
|
return false;
|
|
}
|
|
|
|
@Override
|
|
public boolean unpublishApplication(ApplicationContext application, Set<String> contexts) {
|
|
// TODO Auto-generated method stub
|
|
return false;
|
|
}
|
|
|
|
private String toXml(Resource resource){
|
|
StringWriter writer = new StringWriter();
|
|
Resources.marshal(resource, writer);
|
|
return writer.toString();
|
|
}
|
|
|
|
}
|