/****************************************************************************
* This software is part of the gCube Project.
* Site: http://www.gcube-system.org/
****************************************************************************
* The gCube/gCore software is licensed as Free Open Source software
* conveying to the EUPL (http://ec.europa.eu/idabc/eupl).
* The software and documentation is provided by its authors/distributors
* "as is" and no expressed or
* implied warranty is given for its use, quality or fitness for a
* particular case.
****************************************************************************
* Filename: DeployVirtualCollection.java
****************************************************************************
* @author Daniele Strollo
***************************************************************************/
package org.gcube.portlets.admin.resourcemanagement.client.forms.genericresources;
import java.util.ArrayList;
import java.util.List;
import java.util.Vector;
import org.gcube.portlets.admin.resourcemanagement.client.remote.ProxyRegistry;
import org.gcube.portlets.admin.resourcemanagement.client.utils.Commands;
import org.gcube.portlets.admin.resourcemanagement.client.widgets.console.ConsoleMessageBroker;
import org.gcube.resourcemanagement.support.client.utils.StatusHandler;
import org.gcube.resourcemanagement.support.client.views.ResourceTypeDecorator;
import org.gcube.resourcemanagement.support.shared.exceptions.InvalidParameterException;
import org.gcube.resourcemanagement.support.shared.types.Tuple;
import org.gcube.resourcemanagement.support.shared.types.datamodel.AtomicTreeNode;
import org.gcube.resourcemanagement.support.shared.types.datamodel.ResourceDescriptor;
import com.extjs.gxt.ui.client.data.ModelData;
import com.extjs.gxt.ui.client.event.ComponentEvent;
import com.extjs.gxt.ui.client.store.ListStore;
import com.extjs.gxt.ui.client.widget.Dialog;
import com.extjs.gxt.ui.client.widget.MessageBox;
import com.extjs.gxt.ui.client.widget.button.Button;
import com.extjs.gxt.ui.client.widget.form.FormPanel;
import com.extjs.gxt.ui.client.widget.grid.CheckBoxSelectionModel;
import com.extjs.gxt.ui.client.widget.grid.ColumnConfig;
import com.extjs.gxt.ui.client.widget.grid.ColumnModel;
import com.extjs.gxt.ui.client.widget.grid.Grid;
import com.extjs.gxt.ui.client.widget.layout.FitLayout;
import com.extjs.gxt.ui.client.widget.toolbar.FillToolItem;
import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.rpc.AsyncCallback;
/**
* @author Daniele Strollo (ISTI-CNR)
*
*/
public class DeployVirtualCollection extends Dialog {
private Grid grid = null;
public DeployVirtualCollection() {
this.setLayout(new FitLayout());
this.setHeading("Deploy Virtual Collections");
this.setModal(true);
this.setWidth(700);
this.setHeight(500);
this.setResizable(false);
//this.getButtonBar().removeAll();
this.setHideOnButtonClick(true);
}
protected final void onRender(final Element parent, final int index) {
super.onRender(parent, index);
initForm();
}
private void closeDialog() {
this.hide();
}
private void initForm() {
String scope = StatusHandler.getStatus().getCurrentScope();
FormPanel form = new FormPanel();
form.setFrame(true);
form.setAutoWidth(true);
initModel(scope);
this.add(grid);
this.getButtonBar().removeAll();
this.getButtonBar().add(new FillToolItem());
this.getButtonBar().add(new Button("Cancel") {
@Override
protected void onClick(final ComponentEvent ce) {
super.onClick(ce);
closeDialog();
}
});
this.getButtonBar().add(new Button("Submit") {
@Override
protected void onClick(final ComponentEvent ce) {
super.onClick(ce);
for (ResourceDescriptor elem : grid.getSelectionModel().getSelectedItems()) {
ConsoleMessageBroker.info(this, "Selected: " + elem.getID());
String body = "";
if (elem.getProperty("body") != null) {
body = ((Object) elem.getProperty("body")).toString().trim();
if (body.startsWith("")) {
body = body.replace("", "").trim();
body = body.substring(0, body.lastIndexOf("")).trim();
}
}
ProxyRegistry.getProxyInstance().createGenericResource(
null, // id auto-provided
"CMSRecord", // name fixed
"Activation Record for collection " + elem.getName(), // description
body, // the body
"ActivationRecord", // the subtype
new AsyncCallback() {
public void onSuccess(final String result) {
Commands.showPopup("Deploy Virtual Collection", "Deployed virtual collection with id " + result);
}
public void onFailure(final Throwable caught) {
Commands.showPopup("Deploy Virtual Collection", "Creation failed " + caught.getMessage());
}
});
}
closeDialog();
}
});
updateGrid(scope);
}
private void initModel(final String scope) {
// loads the model of generic resources
final List modelColumns = new ArrayList();
modelColumns.add(new ColumnConfig("name", "Name", 300));
//modelColumns.add(new ColumnConfig("subtype", "Secondary Type", 170));
modelColumns.add(new ColumnConfig("ID", "ID", 300));
modelColumns.add(new ColumnConfig("description", "Description", 300));
final ColumnModel cm = new ColumnModel(modelColumns);
final CheckBoxSelectionModel sm = new CheckBoxSelectionModel();
// adds the checkbox at the beginning
modelColumns.add(0, sm.getColumn());
ListStore store = new ListStore();
this.grid = new Grid(store, cm);
}
private void updateGrid(final String scope) {
final List> additionalFields = new Vector>();
additionalFields.add(new Tuple("description", "//Profile/Description/text()"));
additionalFields.add(new Tuple("body", "//Profile/Body"));
ProxyRegistry.getProxyInstance().getResourcesModel(scope,
ResourceTypeDecorator.GenericResource.name(),
"VirtualCollection",
additionalFields,
new AsyncCallback>() {
public void onSuccess(final List result) {
if (result == null || result.size() == 0) {
MessageBox.alert("Deploy Virtual Collections", "No deployable resources found in the current scope",
null);
closeDialog();
} else {
grid.getStore().removeAll();
grid.getStore().add(result);
}
}
public void onFailure(final Throwable caught) {
ConsoleMessageBroker.error(this, caught.getMessage());
}
});
}
}