data-miner-manager/src/main/java/org/gcube/portlets/user/dataminermanager/client/DataMinerManager.java

414 lines
13 KiB
Java

package org.gcube.portlets.user.dataminermanager.client;
import org.gcube.portlets.user.dataminermanager.client.dataspace.DataSpacePanel;
import org.gcube.portlets.user.dataminermanager.client.experiments.ExperimentPanel;
import org.gcube.portlets.user.dataminermanager.client.resources.Resources;
import org.gcube.portlets.user.dataminermanager.client.util.UtilsGXT3;
import org.gcube.portlets.user.gcubewidgets.client.ClientScopeHelper;
import com.allen_sauer.gwt.log.client.Log;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.core.client.GWT;
import com.google.gwt.core.client.Scheduler;
import com.google.gwt.core.client.Scheduler.ScheduledCommand;
import com.google.gwt.event.dom.client.MouseDownEvent;
import com.google.gwt.event.dom.client.MouseDownHandler;
//import com.google.gwt.event.logical.shared.ResizeEvent;
//import com.google.gwt.event.logical.shared.ResizeHandler;
import com.google.gwt.resources.client.ImageResource;
import com.google.gwt.user.client.Window.Location;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.RootPanel;
import com.sencha.gxt.core.client.util.Margins;
import com.sencha.gxt.widget.core.client.container.BorderLayoutContainer;
import com.sencha.gxt.widget.core.client.container.BorderLayoutContainer.BorderLayoutData;
import com.sencha.gxt.widget.core.client.container.HorizontalLayoutContainer;
import com.sencha.gxt.widget.core.client.container.HorizontalLayoutContainer.HorizontalLayoutData;
import com.sencha.gxt.widget.core.client.container.MarginData;
import com.sencha.gxt.widget.core.client.container.SimpleContainer;
import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer;
import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer.VerticalLayoutData;
import com.sencha.gxt.widget.core.client.container.Viewport;
/**
* Entry point classes define <code>onModuleLoad()</code>.
*/
public class DataMinerManager implements EntryPoint {
public static final Resources resources = GWT.create(Resources.class);
/*private static final DataMinerPortletServiceAsync dataMinerService = GWT
.create(DataMinerPortletService.class);*/
private static final String SM_DIV = "contentDiv";
//private static List<OperatorsClassification> operatorsClassifications = null;
private DataMinerManagerController dataMinerManagerController;
private DataSpacePanel dataSpacePanel; // = new DataSpacePanel();
// private InputSpacePanel inputSpacePanel = new InputSpacePanel();
private ExperimentPanel experimentPanel;// = new ExperimentPanel();
// private JobsPanel jobsPanel = new JobsPanel();
// private VerticalPanel verticalPanel = new VerticalPanel();
private SimpleContainer previousPanel;
private SimpleContainer homeMenu;
private SimpleContainer centerPanel;
/*
* private BorderLayoutData centerPanelData; private LayoutContainer
* dataMinerManagerLayout;
*/
public enum MenuItem {
DATA_SPACE, EXPERIMENT, COMPUTATIONS
};
private Header header;
// Main Panel
private static BorderLayoutContainer mainPanelLayout;
/**
* {@inheritDoc}
*/
public void onModuleLoad() {
/*
* Install an UncaughtExceptionHandler which will produce
* <code>FATAL</code> log messages
*/
Log.setUncaughtExceptionHandler();
// use deferred command to catch initialization exceptions in
// onModuleLoad2
Scheduler.get().scheduleDeferred(new ScheduledCommand() {
public void execute() {
loadScope();
}
});
}
private void loadScope() {
ClientScopeHelper.getService().setScope(Location.getHref(),
new AsyncCallback<Boolean>() {
@Override
public void onSuccess(Boolean result) {
if(result){
loadMainPanel();
} else {
UtilsGXT3.info("Attention", "ClientScopeHelper has returned a false value!");
}
}
@Override
public void onFailure(Throwable caught) {
UtilsGXT3.alert("Error", "Error setting scope: "+caught.getLocalizedMessage());
caught.printStackTrace();
}
});
}
private void loadMainPanel() {
// AccountingManagerResources.INSTANCE.accountingManagerCSS().ensureInjected();
// ScriptInjector.fromString(AccountingManagerResources.INSTANCE.jqueryJs().getText()).setWindow(ScriptInjector.TOP_WINDOW).inject();
dataMinerManagerController = new DataMinerManagerController();
homeMenu = createMenuPanel();
dataSpacePanel = new DataSpacePanel();
experimentPanel = new ExperimentPanel();
// Layout
mainPanelLayout = new BorderLayoutContainer();
mainPanelLayout.setId("mainPanelLayout");
mainPanelLayout.setBorders(false);
mainPanelLayout.setResize(true);
mainPanelLayout.getElement().getStyle().setBackgroundColor("#FFFFFF");
// mainPanelLayout.getElement().getStyle().setBackgroundColor("rgb(3, 126, 207)");
centerPanel = new SimpleContainer();
MarginData mainData = new MarginData(new Margins(0));
mainPanelLayout.setCenterWidget(centerPanel, mainData);
// Menu
header = new Header() {
@Override
public void select(MenuItem menuItem) {
if (menuItem == null)
switchTo(homeMenu);
else if (menuItem == MenuItem.EXPERIMENT)
switchTo(experimentPanel);
else if (menuItem == MenuItem.DATA_SPACE)
switchTo(dataSpacePanel);
/*
* else if (menuItem == MenuItem.COMPUTATIONS)
* switchTo(jobsPanel);
*/
}
};
BorderLayoutData menuData = new BorderLayoutData(58);
menuData.setMargins(new Margins(5));
menuData.setCollapsible(false);
menuData.setSplit(false);
mainPanelLayout.setNorthWidget(header, menuData);
// Filters
/*
* FiltersPanel filtersPanel=new FiltersPanel(eventBus);
* BorderLayoutData westData = new BorderLayoutData(410);
* westData.setCollapsible(false); westData.setSplit(false);
* westData.setFloatable(false); westData.setCollapseMini(false);
* westData.setMargins(new Margins(2, 7, 2, 7));
* westData.setCollapseHidden(true); westData.setMaxSize(410);
* westData.setMinSize(410); mainPanelLayout.setWestWidget(filtersPanel,
* westData); filtersPanel.expand(); filtersPanel.enable();
*/
centerPanel.add(homeMenu);
previousPanel = homeMenu;
bind(mainPanelLayout);
mainPanelLayout.forceLayout();
bindEvents();
/*
* dataMinerManagerController.setMainPanelLayout(mainPanelLayout);
* dataMinerManagerController.restoreUISession();
*/
}
private void bind(BorderLayoutContainer mainWidget) {
try {
RootPanel root = RootPanel.get(SM_DIV);
Log.info("Root Panel: " + root);
if (root == null) {
Log.info("Div with id " + SM_DIV
+ " not found, starting in dev mode");
Viewport viewport = new Viewport();
viewport.setWidget(mainWidget);
viewport.onResize();
RootPanel.get().add(viewport);
} else {
Log.info("Application div with id " + SM_DIV
+ " found, starting in portal mode");
PortalViewport viewport = new PortalViewport();
Log.info("Created Viewport");
viewport.setEnableScroll(false);
viewport.setWidget(mainWidget);
Log.info("Set Widget");
Log.info("getOffsetWidth(): " + viewport.getOffsetWidth());
Log.info("getOffsetHeight(): " + viewport.getOffsetHeight());
viewport.onResize();
root.add(viewport);
Log.info("Added viewport to root");
}
} catch (Exception e) {
e.printStackTrace();
Log.error("Error in attach viewport:" + e.getLocalizedMessage());
}
}
/*
* private void updateSize() { RootPanel smDiv = RootPanel.get(SM_DIV);
*
* int topBorder = smDiv.getAbsoluteTop(); int leftBorder =
* smDiv.getAbsoluteLeft();
*
* int rootHeight = Window.getClientHeight() - topBorder - 4;// - ((footer
* // == // null)?0:(footer.getOffsetHeight()-15)); int rootWidth =
* Window.getClientWidth() - 2 * leftBorder - 5; // - // rightScrollBar;
*
* //
* System.out.println("New Data Miner Manager dimension Width: "+rootWidth
* +"; Height: "+rootHeight);
*
* if (previousPanel == menu) dataMinerManagerLayout.setSize(rootWidth,
* 700); else dataMinerManagerLayout.setSize(rootWidth, rootHeight); }
*/
/**
*
*/
private void bindEvents() {
/*EventBusProvider.INSTANCE.addHandler(MaskEvent.getType(),
new MaskEvent.MaskHandler() {
@Override
public void onMask(MaskEvent event) {
if (mainPanelLayout == null)
return;
String message = event.getMessage();
if (message == null)
mainPanelLayout.unmask();
else
mainPanelLayout.mask(message);
// Constants.maskLoadingStyle);
}
});
*/
/*
* EventBusProvider.getInstance().addHandler(
* SessionExpiredEvent.getType(), new
* SessionExpiredEvent.SessionExpiredHandler() {
*
* @Override public void onSessionExpired(SessionExpiredEvent event) {
* Window.alert("The session has expired. Please refresh the page."); }
* });
*/
}
/**
* @return
*/
private SimpleContainer createMenuPanel() {
SimpleContainer topLc = new SimpleContainer();
topLc.setStylePrimaryName("smMenu");
topLc.addStyleName("smLayoutContainer");
VerticalLayoutContainer lc = new VerticalLayoutContainer();
VerticalLayoutData layoutTop = new VerticalLayoutData(-1, -1,
new Margins(20, 90, 10, 90));
VerticalLayoutData layoutNext = new VerticalLayoutData(-1, -1,
new Margins(10, 90, 10, 90));
SimpleContainer itemDataSpace = createMenuItem(
"Access to the Data Space",
"The data space contains the set of input and output data sets of the users. It is possible to upload and share tables. Data sources can be chosen from those hosted by the infrastructure. Outputs of the computations can be even saved in this space.",
resources.inputSpaceIcon(), new MouseDownHandler() {
@Override
public void onMouseDown(MouseDownEvent event) {
switchTo(dataSpacePanel);
header.setMenuSelected(MenuItem.DATA_SPACE);
}
});
lc.add(itemDataSpace, layoutTop);
SimpleContainer itemExperiment = createMenuItem(
"Execute an Experiment",
"This section allows to execute or prepare a Niche Modeling experiment. The section is endowed with a list of algorithms for training and executing statistical models for biological applications. Evaluation of the performances is possible by means of several kinds of measurement systems and processes.",
resources.computationIcon(), new MouseDownHandler() {
@Override
public void onMouseDown(MouseDownEvent event) {
switchTo(experimentPanel);
header.setMenuSelected(MenuItem.EXPERIMENT);
}
});
lc.add(itemExperiment, layoutNext);
/*
* LayoutContainer itemJobs = createMenuItem( "Check the Computations",
* "This section allows to check the status of the computation. A list of processes launched by the user is shown along with meta-information. By clicking on the completed jobs it is possible to visualize the data set contents."
* , resources.jobsIcon(), new Listener<BaseEvent>() {
*
* @Override public void handleEvent(BaseEvent be) {
* switchTo(jobsPanel); header.setMenuSelected(MenuItem.COMPUTATIONS); }
* }); lc.add(itemJobs);
*/
topLc.add(lc);
return topLc;
}
/**
*
*/
private void switchTo(SimpleContainer lc) {
centerPanel.remove(previousPanel);
centerPanel.add(lc);
centerPanel.forceLayout();
previousPanel = lc;
}
private SimpleContainer createMenuItem(String title, String description,
ImageResource imgResource, MouseDownHandler handle) {
HorizontalLayoutContainer horiz = new HorizontalLayoutContainer();
Image img = new Image(imgResource);
HTML text = new HTML("<b>" + title + "</b><br>" + description);
text.addStyleName("smMenuItemText");
HorizontalLayoutData textLayoutData = new HorizontalLayoutData(400,
140, new Margins(10, 5, 10, 10));
HorizontalLayoutData imgLayoutData = new HorizontalLayoutData(140, 140,
new Margins(10, 10, 10, 5));
horiz.add(text, textLayoutData);
horiz.add(img, imgLayoutData);
SimpleContainer container = new SimpleContainer();
container.addDomHandler(handle, MouseDownEvent.getType());
container.setWidth(540);
container.setHeight(170);
container.addStyleName("smMenuItem");
container.addStyleOnOver(container.getElement(), "smMenuItem:HOVER");
container.add(horiz);
return container;
}
/**
* @return the operatorsClassification
public static List<OperatorsClassification> getOperatorsClassifications() {
return operatorsClassifications;
}
/**
* @param operatorsClassification
* the operatorsClassification to set
public static void setOperatorsClassifications(
List<OperatorsClassification> operatorsClassifications) {
DataMinerManager.operatorsClassifications = operatorsClassifications;
}
*/
/*public static OperatorsClassification getDefaultOperatorsClassification() {
if (operatorsClassifications == null)
return null;
OperatorsClassification find = null;
for (OperatorsClassification oc : operatorsClassifications)
// Constants.ComputationClassificationName
if (oc.getName().equals(Constants.UserClassificationName))
find = oc;
return find;
}
public static OperatorsClassification getOperatorsClassificationByName(
String classificationName) {
if (operatorsClassifications == null)
return null;
OperatorsClassification find = null;
for (OperatorsClassification oc : operatorsClassifications)
if (oc.getName().equals(classificationName))
find = oc;
return (find == null ? getDefaultOperatorsClassification() : find);
}*/
/*public static DataMinerPortletServiceAsync getService() {
return dataMinerService;
}*/
}