statistical-algorithms-impo.../src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/tools/explorer/ExplorerProjectPanel.java

249 lines
7.6 KiB
Java

package org.gcube.portlets.user.statisticalalgorithmsimporter.client.tools.explorer;
import java.util.ArrayList;
import org.gcube.portlets.user.statisticalalgorithmsimporter.client.event.MainCodeSetEvent;
import org.gcube.portlets.user.statisticalalgorithmsimporter.client.event.ProjectStatusEvent;
import org.gcube.portlets.user.statisticalalgorithmsimporter.client.event.SessionExpiredEvent;
import org.gcube.portlets.user.statisticalalgorithmsimporter.client.event.UIStateEvent;
import org.gcube.portlets.user.statisticalalgorithmsimporter.client.maindata.MainCodeDescription;
import org.gcube.portlets.user.statisticalalgorithmsimporter.client.resource.StatAlgoImporterResources;
import org.gcube.portlets.user.statisticalalgorithmsimporter.client.rpc.StatAlgoImporterServiceAsync;
import org.gcube.portlets.user.statisticalalgorithmsimporter.client.type.SessionExpiredType;
import org.gcube.portlets.user.statisticalalgorithmsimporter.client.utils.UtilsGXT3;
import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.code.CodeData;
import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.exception.StatAlgoImporterSessionExpiredException;
import org.gcube.portlets.widgets.wsexplorer.client.explore.WorkspaceResourcesExplorerPanel;
import org.gcube.portlets.widgets.wsexplorer.client.notification.WorkspaceExplorerSelectNotification.WorskpaceExplorerSelectNotificationListener;
import org.gcube.portlets.widgets.wsexplorer.shared.Item;
import org.gcube.portlets.widgets.wsexplorer.shared.ItemType;
import com.allen_sauer.gwt.log.client.Log;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.shared.EventBus;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.sencha.gxt.cell.core.client.ButtonCell.ButtonScale;
import com.sencha.gxt.cell.core.client.ButtonCell.IconAlign;
import com.sencha.gxt.core.client.dom.ScrollSupport.ScrollMode;
import com.sencha.gxt.core.client.util.Margins;
import com.sencha.gxt.widget.core.client.ContentPanel;
import com.sencha.gxt.widget.core.client.button.TextButton;
import com.sencha.gxt.widget.core.client.container.AccordionLayoutContainer.AccordionLayoutAppearance;
import com.sencha.gxt.widget.core.client.container.BoxLayoutContainer.BoxLayoutData;
import com.sencha.gxt.widget.core.client.container.MarginData;
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.event.SelectEvent;
import com.sencha.gxt.widget.core.client.event.SelectEvent.SelectHandler;
import com.sencha.gxt.widget.core.client.toolbar.ToolBar;
/**
*
* @author giancarlo email: <a
* href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
*
*/
public class ExplorerProjectPanel extends ContentPanel {
private EventBus eventBus;
private Item selectedItem;
private TextButton btnSetMain;
public ExplorerProjectPanel(EventBus eventBus) {
super();
Log.debug("ExplorerProjectPanel");
this.eventBus = eventBus;
// msgs = GWT.create(ServiceCategoryMessages.class);
init();
bindToEvents();
}
public ExplorerProjectPanel(EventBus eventBus,
AccordionLayoutAppearance appearance) {
super(appearance);
Log.debug("ExplorerProjectPanel");
this.eventBus = eventBus;
// msgs = GWT.create(ServiceCategoryMessages.class);
init();
bindToEvents();
}
private void init() {
setId("ExplorerProjectPanel");
forceLayoutOnResize = true;
setBodyBorder(true);
setBorders(true);
setHeaderVisible(true);
setResize(true);
setAnimCollapse(false);
setHeadingText("Project Explorer");
;
}
private void bindToEvents() {
eventBus.addHandler(UIStateEvent.TYPE,
new UIStateEvent.UIStateHandler() {
public void onUIState(UIStateEvent event) {
manageUIStateEvents(event);
}
});
eventBus.addHandler(ProjectStatusEvent.TYPE,
new ProjectStatusEvent.ProjectStatusEventHandler() {
@Override
public void onProjectStatus(ProjectStatusEvent event) {
manageProjectStatusEvents(event);
}
});
}
private void manageUIStateEvents(UIStateEvent event) {
Log.debug("InputVariablePanel recieved event from UI: "
+ event.toString());
switch (event.getUiStateType()) {
case START:
break;
case WAITING:
break;
default:
break;
}
}
private void manageProjectStatusEvents(ProjectStatusEvent event) {
Log.debug("InputVariablePanel recieved event ProjectStatus: "
+ event.toString());
switch (event.getProjectStatusEventType()) {
case OPEN:
create(event);
break;
case UPDATE:
create(event);
break;
default:
break;
}
}
private void create(ProjectStatusEvent event) {
try {
WorkspaceResourcesExplorerPanel wsResourcesExplorerPanel = new WorkspaceResourcesExplorerPanel(
event.getProjectFolderId(), false);
WorskpaceExplorerSelectNotificationListener listener = new WorskpaceExplorerSelectNotificationListener() {
@Override
public void onSelectedItem(Item item) {
Log.debug("Listener Selected Item " + item);
selectedItem = item;
}
@Override
public void onFailed(Throwable throwable) {
Log.error(throwable.getLocalizedMessage());
throwable.printStackTrace();
}
@Override
public void onAborted() {
}
@Override
public void onNotValidSelection() {
selectedItem = null;
}
};
wsResourcesExplorerPanel
.addWorkspaceExplorerSelectNotificationListener(listener);
btnSetMain = new TextButton("Set Main");
btnSetMain.setIcon(StatAlgoImporterResources.INSTANCE.add16());
btnSetMain.setScale(ButtonScale.SMALL);
btnSetMain.setIconAlign(IconAlign.LEFT);
btnSetMain.setToolTip("Set main code");
btnSetMain.addSelectHandler(new SelectHandler() {
@Override
public void onSelect(SelectEvent event) {
setMainCode(event);
}
});
ToolBar toolBar = new ToolBar();
toolBar.add(btnSetMain, new BoxLayoutData(new Margins(0)));
VerticalLayoutContainer v = new VerticalLayoutContainer();
v.add(toolBar, new VerticalLayoutData(1, -1, new Margins(0)));
v.add(wsResourcesExplorerPanel, new VerticalLayoutData(1, 1,
new Margins(0)));
add(v, new MarginData(new Margins(0)));
wsResourcesExplorerPanel.ensureDebugId("wsResourceExplorerPanel");
forceLayout();
} catch (Exception e) {
Log.error("Error opening wsResourceExplorerPanel");
e.printStackTrace();
}
}
private void setMainCode(SelectEvent event) {
Log.debug("Set Main Code");
if (selectedItem != null&& selectedItem.getType().compareTo(ItemType.EXTERNAL_FILE)==0) {
loadData();
} else {
UtilsGXT3.info("Attention", "Select a valid file to be used as main!");
}
}
private void loadData() {
StatAlgoImporterServiceAsync.INSTANCE.setMainCode(selectedItem.getId(), new AsyncCallback<Void>(){
@Override
public void onFailure(Throwable caught) {
if (caught instanceof StatAlgoImporterSessionExpiredException) {
eventBus.fireEvent(new SessionExpiredEvent(
SessionExpiredType.EXPIREDONSERVER));
} else {
Log.error("Error setting main code: "
+ caught.getLocalizedMessage());
UtilsGXT3.alert("Error",
caught.getLocalizedMessage());
}
caught.printStackTrace();
}
@Override
public void onSuccess(Void result) {
MainCodeDescription mainCodeDescription=new MainCodeDescription(selectedItem.getId(), selectedItem.getName(), selectedItem.getOwner(), selectedItem.getPath());
MainCodeSetEvent mainCodeSetEvent=new MainCodeSetEvent(mainCodeDescription);
eventBus.fireEvent(mainCodeSetEvent);
Log.debug("Fired: "+mainCodeSetEvent);
}
});
}
}