diff --git a/.classpath b/.classpath
new file mode 100644
index 0000000..184c35d
--- /dev/null
+++ b/.classpath
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/.project b/.project
new file mode 100644
index 0000000..11503a6
--- /dev/null
+++ b/.project
@@ -0,0 +1,23 @@
+
+
+ common-smartgears-utils
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.m2e.core.maven2Builder
+
+
+
+
+
+ org.eclipse.jdt.core.javanature
+ org.eclipse.m2e.core.maven2Nature
+
+
diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..29abf99
--- /dev/null
+++ b/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,6 @@
+eclipse.preferences.version=1
+encoding//src/main/java=UTF-8
+encoding//src/main/resources=UTF-8
+encoding//src/test/java=UTF-8
+encoding//src/test/resources=UTF-8
+encoding/=UTF-8
diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..ec4300d
--- /dev/null
+++ b/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,5 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
+org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.source=1.7
diff --git a/.settings/org.eclipse.m2e.core.prefs b/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000..f897a7f
--- /dev/null
+++ b/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..499c602
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,35 @@
+
+ 4.0.0
+
+ org.gcube.tools
+ maven-parent
+ 1.0.0
+
+ org.gcube.core
+ common-smartgears-utils
+ 1.0.0-SNAPSHOT
+
+
+ org.gcube.resources.discovery
+ ic-client
+ 1.0.1-SNAPSHOT
+
+
+ org.gcube.resources
+ registry-publisher
+ 1.2.2-SNAPSHOT
+
+
+ org.slf4j
+ slf4j-api
+ 1.6.4
+
+
+ org.slf4j
+ slf4j-log4j12
+ 1.6.4
+ test
+
+
+
\ No newline at end of file
diff --git a/src/main/java/org/gcube/smartgears/utils/sweeper/Sweeper.java b/src/main/java/org/gcube/smartgears/utils/sweeper/Sweeper.java
new file mode 100644
index 0000000..bb0ced1
--- /dev/null
+++ b/src/main/java/org/gcube/smartgears/utils/sweeper/Sweeper.java
@@ -0,0 +1,125 @@
+package org.gcube.smartgears.utils.sweeper;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.JAXBException;
+import javax.xml.bind.Unmarshaller;
+
+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.ScopeGroup;
+import org.gcube.common.scope.api.ScopeProvider;
+import org.gcube.informationsystem.publisher.AdvancedPublisher;
+import org.gcube.informationsystem.publisher.RegistryPublisher;
+import org.gcube.informationsystem.publisher.RegistryPublisherFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ *
+ * @author Andrea Manzi(CERN)
+ *
+ * Implements the sweeping on the IS in case a container state is cleaned
+ *
+ */
+public class Sweeper {
+
+ String ghn_state_path = "";
+
+ Logger logger;
+
+
+ public Sweeper () throws Exception {
+
+ logger = LoggerFactory.getLogger(Sweeper.class);
+
+ String ghn_path = System.getenv("GHN_HOME");
+
+ if (ghn_path == null ) {
+ logger.error("GHN_HOME not defined");
+ throw new Exception ("GHN_HOME not defined");
+ }
+
+ ghn_state_path=ghn_path+File.separator+"state";
+
+
+
+ }
+
+ public HostingNode getGHNProfile() throws JAXBException, FileNotFoundException {
+
+ JAXBContext jc = JAXBContext.newInstance(HostingNode.class);
+
+ Unmarshaller um = jc.createUnmarshaller();
+
+ HostingNode hostingNode = (HostingNode)
+ um.unmarshal(new java.io.FileInputStream(ghn_state_path+File.separator+"ghn.xml" ));
+
+ return hostingNode;
+ }
+
+ public ArrayList getRunningInstanceProfiles() throws JAXBException {
+
+ ArrayList endpoints = new ArrayList();
+
+ JAXBContext jc = JAXBContext.newInstance(GCoreEndpoint.class);
+
+ Unmarshaller um = jc.createUnmarshaller();
+
+ File file = new File(ghn_state_path);
+
+ String[] files = file.list();
+
+ for (String name : files){
+ File subfolder = new File(ghn_state_path+ File.separator+ name);
+ if (subfolder.isDirectory()) {
+ GCoreEndpoint ri;
+ try {
+ ri = (GCoreEndpoint)
+ um.unmarshal(new java.io.FileInputStream(subfolder.getAbsolutePath()+File.separator+"endpoint.xml" ));
+ } catch (FileNotFoundException | JAXBException e) {
+ e.printStackTrace();
+ continue;
+ }
+ endpoints.add(ri);
+ }
+
+ }
+
+ return endpoints;
+ }
+
+
+ public void cleanGHNProfile() throws FileNotFoundException, JAXBException{
+ forceDeleteResource(this.getGHNProfile());
+
+ }
+
+ public void cleanRIProfiles() throws FileNotFoundException, JAXBException{
+ for (GCoreEndpoint endp : this.getRunningInstanceProfiles()){
+ forceDeleteResource(endp);
+ }
+ }
+
+ private void forceDeleteResource(Resource resource){
+
+ ScopeGroup gr = resource.scopes();
+ Iterator it = gr.iterator();
+ RegistryPublisher rp;
+ AdvancedPublisher advancedPublisher;
+
+ while (it.hasNext()){
+ String scope = it.next();
+ ScopeProvider.instance.set(scope);
+ rp=RegistryPublisherFactory.create();
+ advancedPublisher=new AdvancedPublisher(rp);
+ advancedPublisher.forceRemove(resource);
+ logger.debug("Removing resource " + resource.id() + " from scope " + scope);
+ }
+ }
+}
diff --git a/src/main/java/org/gcube/smartgears/utils/sweeper/SweeperClient.java b/src/main/java/org/gcube/smartgears/utils/sweeper/SweeperClient.java
new file mode 100644
index 0000000..7e19950
--- /dev/null
+++ b/src/main/java/org/gcube/smartgears/utils/sweeper/SweeperClient.java
@@ -0,0 +1,43 @@
+package org.gcube.smartgears.utils.sweeper;
+
+import java.io.FileNotFoundException;
+
+import javax.xml.bind.JAXBException;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ *
+ * @author andrea
+ *
+ */
+public class SweeperClient {
+
+ public static void main (String args[]) {
+
+ Logger logger = LoggerFactory.getLogger(SweeperClient.class);
+
+ Sweeper sw = null;
+ try {
+ sw = new Sweeper();
+ } catch (Exception e) {
+ logger.error("Error initializing the Sweeper ", e);
+ System.exit(1);
+ }
+
+ try {
+ sw.cleanGHNProfile();
+ } catch (FileNotFoundException | JAXBException e) {
+ logger.error("Error cleaning the GHN profile ", e);
+ System.exit(1);
+ }
+ try {
+ sw.cleanRIProfiles();
+ } catch (FileNotFoundException | JAXBException e) {
+ logger.error("Error cleaning the RunningInstance profile ", e);
+ System.exit(1);
+ }
+ }
+
+}
diff --git a/src/main/resources/log4j.properties b/src/main/resources/log4j.properties
new file mode 100644
index 0000000..f700a10
--- /dev/null
+++ b/src/main/resources/log4j.properties
@@ -0,0 +1,12 @@
+# Set root category priority to WARN and its only appender to A1.
+log4j.rootCategory=DEBUG, A0
+
+log4j.appender.A0=org.apache.log4j.ConsoleAppender
+log4j.appender.A0.layout=org.apache.log4j.PatternLayout
+log4j.appender.A0.layout.ConversionPattern=%d{HH:mm:ss,SSS} %-5p %c{2} [%t,%M:%L] %m%n
+
+log4j.appender.A1=org.apache.log4j.ConsoleAppender
+log4j.appender.A1.layout=org.apache.log4j.PatternLayout
+log4j.appender.A1.layout.ConversionPattern=[DT] %d{HH:mm:ss,SSS} %-5p %c{2} [%t,%M:%L] %m%n
+log4j.category.org.gcube=DEBUG,A1
+log4j.additivity.org.gcube=false
diff --git a/src/test/java/org/gcube/smartgears/utils/sweeper/test/SweeperTest.java b/src/test/java/org/gcube/smartgears/utils/sweeper/test/SweeperTest.java
new file mode 100644
index 0000000..b8371f2
--- /dev/null
+++ b/src/test/java/org/gcube/smartgears/utils/sweeper/test/SweeperTest.java
@@ -0,0 +1,73 @@
+package org.gcube.smartgears.utils.sweeper.test;
+
+import java.io.FileNotFoundException;
+import java.util.ArrayList;
+
+import javax.xml.bind.JAXBException;
+
+import org.gcube.common.resources.gcore.GCoreEndpoint;
+import org.gcube.common.resources.gcore.HostingNode;
+import org.gcube.smartgears.utils.sweeper.Sweeper;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+public class SweeperTest {
+
+ Sweeper sw = null;
+
+ @Before
+ public void setUp(){
+ try {
+ sw = new Sweeper();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ }
+
+
+ @Test
+ public void getGHNProfile() {
+
+ HostingNode node = null;
+
+ try {
+ node = sw.getGHNProfile();
+ } catch (FileNotFoundException | JAXBException e) {
+ e.printStackTrace();
+ }
+
+ Assert.assertNotNull(node);
+ System.out.println(node.id());
+
+ }
+
+ @Test
+ public void getRunningInstanceProfiles() {
+ ArrayList list = new ArrayList ();
+ try {
+ list =sw.getRunningInstanceProfiles();
+ } catch (JAXBException e) {
+ e.printStackTrace();
+ }
+
+ System.out.println("Endooint size :"+ list.size());
+ for (GCoreEndpoint end : list){
+ Assert.assertNotNull(end);
+ System.out.println(end.id());
+ }
+
+ }
+
+ @Test
+ public void removeGHNProfile() {
+
+ try {
+ sw.cleanGHNProfile();
+ } catch (FileNotFoundException | JAXBException e) {
+ e.printStackTrace();
+ }
+
+ }
+}
diff --git a/src/test/resources/log4j.properties b/src/test/resources/log4j.properties
new file mode 100644
index 0000000..08a56aa
--- /dev/null
+++ b/src/test/resources/log4j.properties
@@ -0,0 +1,18 @@
+# Set root category priority to WARN and its only appender to A1.
+log4j.rootCategory=DEBUG, A0
+
+log4j.appender.A0=org.apache.log4j.ConsoleAppender
+log4j.appender.A0.layout=org.apache.log4j.PatternLayout
+log4j.appender.A0.layout.ConversionPattern=%d{HH:mm:ss,SSS} %-5p %c{2} [%t,%M:%L] %m%n
+
+log4j.appender.A1=org.apache.log4j.ConsoleAppender
+log4j.appender.A1.layout=org.apache.log4j.PatternLayout
+log4j.appender.A1.layout.ConversionPattern=[DT] %d{HH:mm:ss,SSS} %-5p %c{2} [%t,%M:%L] %m%n
+log4j.category.org.gcube=DEBUG,A1
+log4j.additivity.org.gcube=false
+
+log4j.appender.A2=org.apache.log4j.ConsoleAppender
+log4j.appender.A2.layout=org.apache.log4j.PatternLayout
+log4j.appender.A2.layout.ConversionPattern=[TEST] %d{HH:mm:ss,SSS} %-5p %c{2} [%t,%M:%L] %m%n
+log4j.category.test=DEBUG,A2
+log4j.additivity.test=false
\ No newline at end of file