/**************************************************************************** * 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()); } }); } }