legacy-is-publisher-connector/src/main/java/org/gcube/common/core/publisher/is/legacy/LegacyISPublisher.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();
}
}