package org.gcube.vremanagement.vremodeler.consumers; import java.io.StringReader; import javax.xml.namespace.QName; import org.gcube.common.core.contexts.GHNContext; import org.gcube.common.core.informationsystem.notifier.ISNotifier.BaseNotificationConsumer; import org.gcube.common.core.informationsystem.notifier.ISNotifier.GCUBENotificationTopic; import org.gcube.common.core.informationsystem.notifier.ISNotifier.NotificationEvent; import org.gcube.common.core.resources.GCUBEHostingNode; import org.gcube.common.core.scope.GCUBEScope; import org.gcube.common.core.utils.logging.GCUBELog; import org.gcube.vremanagement.vremodeler.impl.ServiceContext; import org.gcube.vremanagement.vremodeler.resources.handlers.GHNHandler; public class GHNConsumer extends BaseNotificationConsumer{ public static GCUBENotificationTopic ghnTopic; static{ ghnTopic= new GCUBENotificationTopic(new QName("http://gcube-system.org/namespaces/informationsystem/registry","GHN")); ghnTopic.setPrecondition("(//operationType[text()='destroy']) or (//operationType[text()='create'])"); ghnTopic.setUseRenotifier(false); } private GCUBELog logger= new GCUBELog(GHNConsumer.class); private GCUBEScope scope; public GHNConsumer(GCUBEScope scope){ super(); this.scope=scope; } public void onNotificationReceived(NotificationEvent event){ try{ logger.trace("notification received"); ServiceContext.getContext().setScope(this.scope); String id= event.getPayload().getMessage()[0].getChildNodes().item(0).getChildNodes().item(0).getNodeValue(); String operation=event.getPayload().getMessage()[0].getChildNodes().item(2).getChildNodes().item(0).getNodeValue(); //logger.trace("received id: "+id+" op: "+operation+" profile: "+profile); if (operation.compareTo("create")==0){ logger.trace("adding a new GHN in DB"); GCUBEHostingNode ghn= GHNContext.getImplementation(GCUBEHostingNode.class); String profile=event.getPayload().getMessage()[0].getChildNodes().item(1).getChildNodes().item(0).getNodeValue(); ghn.load(new StringReader(profile)); new GHNHandler().add(ghn); } else if (operation.compareTo("destroy")==0){ logger.trace("removing a GHN from DB"); new GHNHandler().drop(id); } }catch(Exception e){logger.error("error in notification received",e);} } }