org.nakedobjects.runtime.NakedObjects Maven / Gradle / Ivy
package org.nakedobjects.runtime;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections.Predicate;
import org.nakedobjects.metamodel.commons.threads.ThreadRunner;
import org.nakedobjects.runtime.installers.InstallerLookup;
import org.nakedobjects.runtime.options.standard.OptionHandlerDeploymentType;
import org.nakedobjects.runtime.options.standard.OptionHandlerDeploymentTypeNakedObjects;
import org.nakedobjects.runtime.options.standard.OptionHandlerPassword;
import org.nakedobjects.runtime.options.standard.OptionHandlerUser;
import org.nakedobjects.runtime.system.DeploymentType;
import org.nakedobjects.runtime.system.NakedObjectsSystem;
import org.nakedobjects.runtime.system.NakedObjectsSystemBootstrapper;
import org.nakedobjects.runtime.system.SystemConstants;
import org.nakedobjects.runtime.viewer.NakedObjectsViewer;
import org.nakedobjects.runtime.viewer.NakedObjectsViewerInstaller;
import org.nakedobjects.runtime.web.EmbeddedWebServer;
import org.nakedobjects.runtime.web.EmbeddedWebServerInstaller;
import org.nakedobjects.runtime.web.WebAppSpecification;
public class NakedObjects extends NakedObjectsAbstract {
private static final String DEFAULT_EMBEDDED_WEBSERVER = SystemConstants.WEBSERVER_DEFAULT;
private OptionHandlerUser flagHandlerUser;
private OptionHandlerPassword flagHandlerPassword;
private OptionHandlerDeploymentType flagHandlerDeploymentType;
public static void main(final String[] args) {
new NakedObjects().run(args);
}
protected void addOptionHandlers(InstallerLookup installerLookup) {
super.addOptionHandlers(installerLookup);
addOptionHandler(flagHandlerDeploymentType = createOptionHandlerDeploymentType());
addOptionHandler(flagHandlerUser = new OptionHandlerUser());
addOptionHandler(flagHandlerPassword = new OptionHandlerPassword());
}
protected OptionHandlerDeploymentType createOptionHandlerDeploymentType() {
return new OptionHandlerDeploymentTypeNakedObjects();
}
protected DeploymentType deploymentType() {
return flagHandlerDeploymentType.getDeploymentType();
}
protected boolean validateUserAndPasswordCombo() {
String user = flagHandlerUser.getUserName();
String password = flagHandlerPassword.getPassword();
return password == null && user == null || password != null && user != null;
}
/**
* Overridable.
*/
protected void bootstrapNakedObjects(
InstallerLookup installerLookup,
DeploymentType deploymentType,
List viewerNames) {
List viewers = lookupViewers(installerLookup, viewerNames, deploymentType);
bootstrapSystem(installerLookup, deploymentType);
bootstrapViewers(installerLookup, viewers);
}
private List lookupViewers(
InstallerLookup installerLookup,
List viewerNames,
DeploymentType deploymentType) {
List viewersToStart = new ArrayList(viewerNames);
deploymentType.addDefaultViewer(viewersToStart);
List viewers = new ArrayList();
for (String requestedViewer : viewersToStart) {
final NakedObjectsViewerInstaller viewerInstaller = installerLookup.viewerInstaller(requestedViewer);
final NakedObjectsViewer viewer = viewerInstaller.createViewer();
viewers.add(viewer);
}
return viewers;
}
/**
* Bootstrap the {@link NakedObjectsSystem}, injecting into all {@link NakedObjectsViewer viewer}s.
*/
private void bootstrapSystem(InstallerLookup installerLookup, DeploymentType deploymentType) {
NakedObjectsSystemBootstrapper bootstrapper = new NakedObjectsSystemBootstrapper(installerLookup);
bootstrapper.bootSystem(deploymentType);
}
private void bootstrapViewers(InstallerLookup installerLookup, List viewers) {
// split viewers into web viewers and non-web viewers
List webViewers = findWebViewers(viewers);
List nonWebViewers = findNonWebViewers(viewers, webViewers);
startNonWebViewers(nonWebViewers);
startWebViewers(installerLookup, webViewers);
}
private List findWebViewers(List viewers) {
List webViewers = new ArrayList(viewers);
CollectionUtils.filter(webViewers, new Predicate() {
public boolean evaluate(Object object) {
NakedObjectsViewer viewer = (NakedObjectsViewer) object;
return viewer.getWebAppSpecification() != null;
}
});
return webViewers;
}
private List findNonWebViewers(List viewers, List webViewers) {
List nonWebViewers = new ArrayList(viewers);
nonWebViewers.removeAll(webViewers);
return nonWebViewers;
}
/**
* Starts each (non web) {@link NakedObjectsViewer viewer} in its own thread.
*/
private void startNonWebViewers(List viewers) {
for (final NakedObjectsViewer viewer : viewers) {
Runnable target = new Runnable() {
public void run() {
viewer.init();
}
};
new ThreadRunner().startThread(target, "Viewer");
}
}
/**
* Starts all the web {@link NakedObjectsViewer viewer}s in an instance of an {@link EmbeddedWebServer}.
*/
private void startWebViewers(final InstallerLookup installerLookup, final List webViewers) {
if (webViewers.size() == 0) {
return;
}
// TODO: we could potentially offer pluggability here
EmbeddedWebServerInstaller webServerInstaller = installerLookup.embeddedWebServerInstaller(DEFAULT_EMBEDDED_WEBSERVER);
EmbeddedWebServer embeddedWebServer = webServerInstaller.createEmbeddedWebServer();
for (final NakedObjectsViewer viewer : webViewers) {
WebAppSpecification webContainerRequirements = viewer.getWebAppSpecification();
embeddedWebServer.addWebAppSpecification(webContainerRequirements);
}
embeddedWebServer.init();
}
}
// Copyright (c) Naked Objects Group Ltd.
© 2015 - 2025 Weber Informatics LLC | Privacy Policy