Improve JShell
[lgpl/argeo-commons.git] / org.argeo.cms.jshell / src / org / argeo / cms / jshell / CmsJShell.java
index e3718ae73119f693d99c78441e194d9bf7199255..d84ce7212ebcbcacd387618c83ca72e7601bb4ec 100644 (file)
@@ -16,6 +16,7 @@ import java.util.UUID;
 import org.argeo.api.cms.CmsLog;
 import org.argeo.api.cms.CmsState;
 import org.argeo.api.uuid.UuidFactory;
+import org.argeo.cms.util.FsUtils;
 import org.argeo.cms.util.OS;
 import org.argeo.internal.cms.jshell.osgi.OsgiExecutionControlProvider;
 import org.osgi.framework.Bundle;
@@ -40,7 +41,12 @@ public class CmsJShell {
 
        public void start() throws Exception {
                // TODO better define application id, make it configurable
-               String applicationID = cmsState.getStatePath("").getFileName().toString();
+               String applicationID;
+               if (Files.exists(cmsState.getStatePath("dev.properties"))) { // in Eclipse
+                       applicationID = cmsState.getStatePath("").getFileName().toString();
+               } else {
+                       applicationID = cmsState.getStatePath("").getParent().getFileName().toString();
+               }
 
                // TODO centralise state run dir
                stateRunDir = OS.getRunDir().resolve(applicationID);
@@ -54,7 +60,7 @@ public class CmsJShell {
                jtermLinkedDir = Files.createSymbolicLink(cmsState.getStatePath(JShellClient.JTERM), jtermBase);
 
                log.info("Local JShell on " + jshBase + ", linked to " + jshLinkedDir);
-               log.info("Local JTerml on " + jtermBase + ", linked to " + jtermLinkedDir);
+               log.info("Local JTerm on " + jtermBase + ", linked to " + jtermLinkedDir);
 
                new Thread(() -> {
                        try {
@@ -137,7 +143,8 @@ public class CmsJShell {
                String symbolicName = bundleSnDir.getFileName().toString();
                Bundle fromBundle = OsgiExecutionControlProvider.getBundleFromSn(symbolicName);
                if (fromBundle == null) {
-                       log.error("Ignoring bundle " + symbolicName + " because it was not found");
+                       log.error("Removing directory for bundle " + symbolicName + " because it was not found in runtime...");
+                       FsUtils.delete(bundleSnDir);
                        return;
                }
                Long bundleId = fromBundle.getBundleId();
@@ -154,6 +161,11 @@ public class CmsJShell {
                } catch (IOException e) {
                        log.error("Cannot remove " + jshLinkedDir);
                }
+               try {
+                       Files.delete(jtermLinkedDir);
+               } catch (IOException e) {
+                       log.error("Cannot remove " + jtermLinkedDir);
+               }
        }
 
        public void setCmsState(CmsState cmsState) {