Skip to content

Commit

Permalink
Some better formating and better comments
Browse files Browse the repository at this point in the history
  • Loading branch information
cande committed Jul 13, 2011
1 parent 7fbe2f9 commit 734b48b
Showing 1 changed file with 68 additions and 52 deletions.
120 changes: 68 additions & 52 deletions plugins/net.bioclipse.r/src/net/bioclipse/r/RServiManager.java
Expand Up @@ -15,7 +15,6 @@

import javax.security.auth.login.LoginException;

import org.apache.log4j.Logger;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
Expand All @@ -24,104 +23,122 @@
import de.walware.ecommons.net.RMIRegistry;
import de.walware.ecommons.net.RMIUtil;
import de.walware.rj.RjException;
//import de.walware.rj.eclient.graphics.ERGraphicFactory; // Not want graphics at this time
import de.walware.rj.rsetups.RSetup;
import de.walware.rj.rsetups.RSetupUtil;
//import de.walware.rj.server.RjsComConfig;
import de.walware.rj.servi.RServi;
import de.walware.rj.servi.RServiUtil;
import de.walware.rj.servi.pool.EmbeddedRServiManager;
import de.walware.rj.servi.pool.RServiImplE;
import de.walware.rj.servi.pool.RServiNodeConfig;
import de.walware.rj.servi.pool.RServiNodeFactory;

import de.walware.rj.server.RjsComConfig;
import de.walware.rj.server.client.RClientGraphicFactory;
/*
* Disabled graphic parts to reduce dependencies.
*
import de.walware.rj.eclient.graphics.comclient.ERClientGraphicActionsFactory;
import de.walware.rj.servi.internal.rcpdemo.Activator; */

import org.apache.log4j.Logger;

public class RServiManager {

private static final Logger logger = Logger.getLogger(RServiManager.class);

{
logger.info("Starting R-servi Manager");
logger.debug("R_HOME=" + System.getenv("R_HOME"));
logger.info("Starting R-servi Manager");
logger.debug("R_HOME=" + System.getenv("R_HOME"));
}

private static final int EMBEDDED = 1;
private static final int POOL = 2;
private static final int RSETUP = 3;

private static class Config {

private int mode;
private String address;
}



private String name;

private Config config = new Config();

private EmbeddedRServiManager embeddedR;

private ISchedulingRule schedulingRule = new ISchedulingRule() {
public boolean contains(final ISchedulingRule rule) {
return (rule == this);
public boolean contains(final ISchedulingRule rule) {
return (rule == this);
}
public boolean isConflicting(final ISchedulingRule rule) {
// if concurrent remote instances are desired, return false here
// if concurrent remote instances are desired, return false here
return (rule == this);
}
};

// Commentated out the graphicparts (cande)
// public RServiManager(final String appId, final ERGraphicFactory graphicFactory) {
/*
* this is the original constructor with graphic elements.
*
public RServiManager(final String appId, final RClientGraphicFactory graphicFactory) {
this.name = appId;
RjsComConfig.setProperty("rj.servi.graphicFactory", graphicFactory);
RjsComConfig.setProperty("rj.servi.comClientGraphicActionsFactory",
new ERClientGraphicActionsFactory() );
}*/

public RServiManager(final String appId) {
this.name = appId;

// RjsComConfig.setProperty("rj.servi.graphicFactory", graphicFactory);
}

public ISchedulingRule getSchedulingRule() {
return schedulingRule;
}

public void setEmbedded(final String rHome) throws CoreException {
logger.debug("Using path: " + rHome);
final Config config = new Config();
config.mode = EMBEDDED;
config.address = rHome;
this.config = config;
final RServiNodeConfig rConfig = new RServiNodeConfig();
rConfig.setRHome(rHome);
rConfig.setEnableVerbose(true);
startEmbedded(rConfig);
final Config config = new Config();
logger.debug("Using R_HOME: " + rHome);
config.mode = EMBEDDED;
config.address = rHome;
this.config = config;

final RServiNodeConfig rConfig = new RServiNodeConfig();
rConfig.setRHome(rHome);
rConfig.setEnableVerbose(true);

startEmbedded(rConfig);
}

public void setPool(final String poolAddress) {
final Config config = new Config();
config.mode = POOL;
config.address = poolAddress;
this.config = config;
}

public void setRSetup(final String setupId) throws CoreException {
final Config config = new Config();
config.mode = RSETUP;
config.address = setupId;
this.config = config;

final RSetup setup = RSetupUtil.loadSetup(setupId, null);
if (setup == null) {
throw new CoreException(new Status(IStatus.ERROR, Activator.PLUGIN_ID, "No R setup with specified id found."));
}

final RServiNodeConfig rConfig = new RServiNodeConfig();
rConfig.setRHome(setup.getRHome());
setLibs(setup.getRLibsSite(), rConfig, "R_LIBS_SITE");
setLibs(setup.getRLibs(), rConfig, "R_LIBS");
setLibs(setup.getRLibsUser(), rConfig, "R_LIBS_USER");
rConfig.setEnableVerbose(true);

startEmbedded(rConfig);
}

private void setLibs(final List<String> locations, final RServiNodeConfig rConfig, final String varName) {
if (locations != null && locations.size() > 0) {
final StringBuilder sb = new StringBuilder(locations.get(0));
Expand All @@ -132,7 +149,7 @@ private void setLibs(final List<String> locations, final RServiNodeConfig rConfi
rConfig.getEnvironmentVariables().put(varName, sb.toString());
}
}

private void startEmbedded(final RServiNodeConfig rConfig) throws CoreException {
try {
if (System.getSecurityManager() == null) {
Expand All @@ -142,12 +159,12 @@ private void startEmbedded(final RServiNodeConfig rConfig) throws CoreException
}
System.setSecurityManager(new SecurityManager());
}

RMIUtil.INSTANCE.setEmbeddedPrivateMode(true);
final RMIRegistry registry = RMIUtil.INSTANCE.getEmbeddedPrivateRegistry();
final RServiNodeFactory nodeFactory = RServiImplE.createLocalhostNodeFactory(this.name, registry);
nodeFactory.setConfig(rConfig);

final EmbeddedRServiManager newEmbeddedR = RServiImplE.createEmbeddedRServi(this.name, registry, nodeFactory);
newEmbeddedR.start();
if (embeddedR != null) {
Expand All @@ -156,23 +173,23 @@ private void startEmbedded(final RServiNodeConfig rConfig) throws CoreException
}
embeddedR = newEmbeddedR;
}
catch (final RjException e) {
throw new CoreException(new Status(IStatus.ERROR, Activator.PLUGIN_ID, "Embedded R instance could not created.", e));
}
catch (final RjException e) {
throw new CoreException(new Status(IStatus.ERROR, Activator.PLUGIN_ID, "Embedded R instance could not created.", e));
}
}


public RServi getRServi(final String task) throws CoreException {
final Config config = this.config;
final String key = name + "-" + task;

try {
switch (config.mode) {
case EMBEDDED:
case RSETUP:
return RServiUtil.getRServi(embeddedR, key);
case POOL:
return RServiUtil.getRServi(config.address, key);
case EMBEDDED:
case RSETUP:
return RServiUtil.getRServi(embeddedR, key);
case POOL:
return RServiUtil.getRServi(config.address, key);
}
}
catch (final CoreException e) {
Expand All @@ -186,5 +203,4 @@ public RServi getRServi(final String task) throws CoreException {
}
throw new CoreException(new Status(IStatus.ERROR, Activator.PLUGIN_ID, "R is not configured, please check the configuration."));
}

}
}

0 comments on commit 734b48b

Please sign in to comment.