724 lines
26 KiB
Java
724 lines
26 KiB
Java
/****************************************************************************
|
|
* 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: ContextMenuFactory.java
|
|
****************************************************************************
|
|
* @author <a href="mailto:daniele.strollo@isti.cnr.it">Daniele Strollo</a>
|
|
***************************************************************************/
|
|
|
|
package org.gcube.portlets.admin.resourcemanagement.client.views.resourcedetails;
|
|
|
|
import java.util.List;
|
|
import java.util.Vector;
|
|
|
|
import org.gcube.portlets.admin.resourcemanagement.client.forms.genericresources.GenericResourceForm;
|
|
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.utils.OpCommands;
|
|
|
|
import org.gcube.portlets.admin.resourcemanagement.client.widgets.console.ConsoleMessageBroker;
|
|
import org.gcube.portlets.admin.resourcemanagement.client.widgets.registry.UIIdentifiers;
|
|
|
|
import org.gcube.resourcemanagement.support.client.utils.StatusHandler;
|
|
import org.gcube.resourcemanagement.support.client.views.ResourceTypeDecorator;
|
|
import org.gcube.resourcemanagement.support.shared.operations.SupportedOperations;
|
|
import org.gcube.resourcemanagement.support.shared.types.Tuple;
|
|
import org.gcube.resourcemanagement.support.shared.types.datamodel.ResourceDescriptor;
|
|
import org.gcube.resourcemanagement.support.shared.types.datamodel.ResourceDetailModel;
|
|
|
|
import com.extjs.gxt.ui.client.data.ModelData;
|
|
import com.extjs.gxt.ui.client.event.ComponentEvent;
|
|
import com.extjs.gxt.ui.client.event.Listener;
|
|
import com.extjs.gxt.ui.client.event.MessageBoxEvent;
|
|
import com.extjs.gxt.ui.client.widget.MessageBox;
|
|
import com.extjs.gxt.ui.client.widget.menu.Menu;
|
|
import com.extjs.gxt.ui.client.widget.menu.MenuItem;
|
|
import com.extjs.gxt.ui.client.widget.menu.SeparatorMenuItem;
|
|
import com.google.gwt.core.client.GWT;
|
|
import com.google.gwt.user.client.Window;
|
|
import com.google.gwt.user.client.rpc.AsyncCallback;
|
|
|
|
/**
|
|
* @author Daniele Strollo
|
|
* @author Massimiliano Assante (ISTI-CNR)
|
|
* @version 2.0 Feb 2012
|
|
*/
|
|
public class ContextMenuFactory {
|
|
private static final ContextMenuFactory INSTANCE = new ContextMenuFactory();
|
|
|
|
public static ContextMenuFactory getInstance() {
|
|
return INSTANCE;
|
|
}
|
|
|
|
public final synchronized Menu buildContextMenu(final String resType, final ResourceDetailsPanel container) {
|
|
|
|
Menu menu = new Menu();
|
|
/*************************************************************
|
|
* FOR ALL RESOURCES
|
|
************************************************************/
|
|
|
|
MenuItem getProfile = new MenuItem("Retrieve Profile") {
|
|
@Override
|
|
protected void onClick(final ComponentEvent be) {
|
|
super.onClick(be);
|
|
List<ModelData> selectedElems = container.getSelection();
|
|
for (ModelData selectedElem : selectedElems) {
|
|
String type = ((Object) selectedElem.get("Type")).toString();
|
|
String resID = ((Object) selectedElem.get("ID")).toString();
|
|
String scope = StatusHandler.getStatus().getCurrentScope();
|
|
Commands.doGetResourceProfile(this, scope, type, resID);
|
|
}
|
|
}
|
|
};
|
|
getProfile.setIconStyle("profile-icon");
|
|
menu.add(getProfile);
|
|
|
|
MenuItem getErrors = new MenuItem("Validate") {
|
|
@Override
|
|
protected void onClick(final ComponentEvent be) {
|
|
super.onClick(be);
|
|
List<ModelData> selectedElems = container.getSelection();
|
|
for (ModelData selectedElem : selectedElems) {
|
|
boolean isValid = true;
|
|
String[] reqs = ResourceDetailModel.getRequiredFields(((Object) selectedElem.get("Type")).toString());
|
|
|
|
for (String req : reqs) {
|
|
if (selectedElem.get(req) == null || ((Object) selectedElem.get(req)).toString().trim().length() == 0) {
|
|
isValid = false;
|
|
// Adds to the model with problems the error code
|
|
Commands.showPopup("Validation: Failure", "The value for field <b><i>" + req + "</i></b> is invalid");
|
|
}
|
|
}
|
|
|
|
if (isValid) {
|
|
Commands.showPopup("Validation: Success", "The current element is valid", 6000);
|
|
}
|
|
}
|
|
}
|
|
};
|
|
getErrors.setIconStyle("validate-icon");
|
|
menu.add(getErrors);
|
|
|
|
|
|
|
|
MenuItem addToScope = new MenuItem("Add To Scope");
|
|
final Menu addToScopeSub = new Menu();
|
|
final Menu removeFromScopeSub = new Menu();
|
|
|
|
ProxyRegistry.getProxyInstance().getAvailableAddScopes(new AsyncCallback<List<String>>() {
|
|
|
|
public void onSuccess(final List<String> result) {
|
|
for (final String scope : result) {
|
|
/*
|
|
* REMOVE FROM SCOPE RPC
|
|
*/
|
|
removeFromScopeSub.add(new MenuItem(scope) {
|
|
@Override
|
|
protected void onClick(final ComponentEvent be) {
|
|
super.onClick(be);
|
|
Commands.mask("Applying remove scope", UIIdentifiers.MAIN_CONTAINER_VIEWPORT_ID);
|
|
List<ModelData> selectedElems = container.getSelection();
|
|
String resType = null;
|
|
List<String> resourceIDs = new Vector<String>();
|
|
|
|
// Builds the list of IDs to add to scope
|
|
for (ModelData selectedElem : selectedElems) {
|
|
if (resType == null) {
|
|
resType = ((Object) selectedElem.get("Type")).toString();
|
|
}
|
|
resourceIDs.add(((Object) selectedElem.get("ID")).toString());
|
|
|
|
ConsoleMessageBroker.info(this,
|
|
"Removing ID: " + ((Object) selectedElem.get("ID")).toString() +
|
|
" type: " + ((Object) selectedElem.get("Type")).toString() +
|
|
" to scope: " + scope
|
|
);
|
|
}
|
|
|
|
ProxyRegistry.getProxyInstance().removeResourcesFromScope(resType, resourceIDs, scope,
|
|
new AsyncCallback<Tuple<String>>() {
|
|
public void onSuccess(final Tuple<String> result) {
|
|
Commands.unmask(UIIdentifiers.MAIN_CONTAINER_VIEWPORT_ID);
|
|
if (result.get(0).equals("ACK")) {
|
|
MessageBox.info("Remove From Scope",
|
|
"The required remove from scope operation has been applied.<br/>", null);
|
|
} else {
|
|
MessageBox.alert("Remove from Scope",
|
|
"The required remove from scope operation has NOT been applied.<br/>" +
|
|
result.get(0),
|
|
null);
|
|
}
|
|
}
|
|
public void onFailure(final Throwable caught) {
|
|
Commands.unmask(UIIdentifiers.MAIN_CONTAINER_VIEWPORT_ID);
|
|
MessageBox.alert(
|
|
"Remove form Scope error",
|
|
"The required operation has not been applied due to server error: <br/>" + caught.getMessage(),
|
|
null);
|
|
}
|
|
});
|
|
}
|
|
});
|
|
/*
|
|
* ADD TO SCOPE RPC
|
|
*/
|
|
|
|
addToScopeSub.add(new MenuItem(scope) {
|
|
@Override
|
|
protected void onClick(final ComponentEvent be) {
|
|
super.onClick(be);
|
|
Commands.mask("Applying add scope", UIIdentifiers.MAIN_CONTAINER_VIEWPORT_ID);
|
|
List<ModelData> selectedElems = container.getSelection();
|
|
String resType = null;
|
|
List<String> resourceIDs = new Vector<String>();
|
|
|
|
// Builds the list of IDs to add to scope
|
|
for (ModelData selectedElem : selectedElems) {
|
|
if (resType == null) {
|
|
resType = ((Object) selectedElem.get("Type")).toString();
|
|
}
|
|
resourceIDs.add(((Object) selectedElem.get("ID")).toString());
|
|
|
|
ConsoleMessageBroker.info(this,
|
|
"Adding ID: " + ((Object) selectedElem.get("ID")).toString() +
|
|
" type: " + ((Object) selectedElem.get("Type")).toString() +
|
|
" to scope: " + scope
|
|
);
|
|
}
|
|
|
|
ProxyRegistry.getProxyInstance().addResourcesToScope(resType, resourceIDs, scope,
|
|
new AsyncCallback<Tuple<String>>() {
|
|
public void onSuccess(final Tuple<String> result) {
|
|
Commands.unmask(UIIdentifiers.MAIN_CONTAINER_VIEWPORT_ID);
|
|
if (result != null) {
|
|
MessageBox.info("Add to Scope",
|
|
"The required add to scope operation has been applied.<br/>" +
|
|
"The generated report ID is:<br/>" +
|
|
"<b>" + result.get(0) + "</b>",
|
|
null);
|
|
Commands.buildAddToScopeReport(result);
|
|
} else {
|
|
MessageBox.alert("Add to Scope",
|
|
"The required add to scope operation has been applied.<br/>" +
|
|
"But the resulting report ID is null or invalid.",
|
|
null);
|
|
}
|
|
}
|
|
public void onFailure(final Throwable caught) {
|
|
Commands.unmask(UIIdentifiers.MAIN_CONTAINER_VIEWPORT_ID);
|
|
MessageBox.alert(
|
|
"Add to Scope error",
|
|
"The required operation has not been applied: <br/>" + caught.getMessage(),
|
|
null);
|
|
}
|
|
});
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
public void onFailure(final Throwable caught) {
|
|
Commands.unmask(UIIdentifiers.MAIN_CONTAINER_VIEWPORT_ID, UIIdentifiers.RESOURCE_DETAIL_GRID_PANEL);
|
|
}
|
|
});
|
|
addToScope.setSubMenu(addToScopeSub);
|
|
Commands.evaluateCredentials(
|
|
addToScope,
|
|
SupportedOperations.ADD_TO_SCOPE.getPermissions());
|
|
addToScope.setIconStyle("addtoscope-icon");
|
|
menu.add(addToScope);
|
|
|
|
/*************************************************************
|
|
* REMOVE FROM SCOPE
|
|
************************************************************/
|
|
MenuItem removeFromScope = new MenuItem("Remove From Scope");
|
|
removeFromScope.setSubMenu(removeFromScopeSub);
|
|
Commands.evaluateCredentials(
|
|
removeFromScope,
|
|
SupportedOperations.ADD_TO_SCOPE.getPermissions());
|
|
removeFromScope.setIconStyle("removefromscope-icon");
|
|
menu.add(removeFromScope);
|
|
|
|
/*************************************************************
|
|
* GHN
|
|
************************************************************/
|
|
if (resType.equals(ResourceTypeDecorator.GHN.name())) {
|
|
|
|
// 0 - GETRELATED button
|
|
MenuItem getRelated = new MenuItem("Get Related") {
|
|
@Override
|
|
protected void onClick(final ComponentEvent be) {
|
|
super.onClick(be);
|
|
Commands.doGetRelatedResources(ResourceTypeDecorator.GHN.name(),
|
|
((Object) container.getSelection().get(0).get("ID")).toString(),
|
|
StatusHandler.getStatus().getCurrentScope());
|
|
}
|
|
};
|
|
getRelated.setIconStyle("link-icon");
|
|
menu.add(getRelated);
|
|
|
|
// 0 - DELETE button
|
|
menu.add(this.createSeparator(SupportedOperations.GHN_DELETE));
|
|
menu.add(this.createDeleteButton(
|
|
container,
|
|
ResourceTypeDecorator.GHN,
|
|
SupportedOperations.GHN_DELETE));
|
|
|
|
// 1 - Force DELETE button
|
|
menu.add(this.createForceDeleteButton(
|
|
container,
|
|
ResourceTypeDecorator.GHN,
|
|
SupportedOperations.GHN_FORCE_DELETE));
|
|
|
|
// 1 - RESTART
|
|
menu.add(this.createSeparator(SupportedOperations.GHN_RESTART));
|
|
|
|
MenuItem restart = new MenuItem("Restart") {
|
|
@Override
|
|
protected void onClick(final ComponentEvent be) {
|
|
super.onClick(be);
|
|
MessageBox.confirm("GHN Restart", "Are you sure you want to restart the selected GHN(s)?",
|
|
new Listener<MessageBoxEvent>() {
|
|
public void handleEvent(final MessageBoxEvent be) {
|
|
|
|
if (be.getButtonClicked().getItemId().equalsIgnoreCase("yes")) {
|
|
// - THE OPERATION IF CONFIRMED
|
|
for (ModelData e : container.getSelection()) {
|
|
ConsoleMessageBroker.info(this, "Required restart for: " + e.get("Name") + " " + e.get("ID"));
|
|
}
|
|
OpCommands.doRestartGHNs(container.getSelection(), false);
|
|
}
|
|
}
|
|
});
|
|
}
|
|
};
|
|
Commands.evaluateCredentials(
|
|
restart,
|
|
SupportedOperations.GHN_RESTART.getPermissions());
|
|
restart.setIconStyle("restart-icon");
|
|
menu.add(restart);
|
|
|
|
// 2 - CLEAN RESTART
|
|
MenuItem cleanRestart = new MenuItem("Clean & Restart") {
|
|
@Override
|
|
protected void onClick(final ComponentEvent be) {
|
|
super.onClick(be);
|
|
MessageBox.confirm("GHN Restart", "Are you sure you want to clean and restart the selected GHN(s)?",
|
|
new Listener<MessageBoxEvent>() {
|
|
public void handleEvent(final MessageBoxEvent be) {
|
|
|
|
if (be.getButtonClicked().getItemId().equalsIgnoreCase("yes")) {
|
|
// - THE OPERATION IF CONFIRMED
|
|
for (ModelData e : container.getSelection()) {
|
|
ConsoleMessageBroker.info(this, "Required restart for: " + e.get("Name") + " " + e.get("ID"));
|
|
}
|
|
OpCommands.doRestartGHNs(container.getSelection(), true);
|
|
}
|
|
}
|
|
});
|
|
}
|
|
};
|
|
Commands.evaluateCredentials(
|
|
cleanRestart,
|
|
SupportedOperations.GHN_CLEAN_RESTART.getPermissions());
|
|
cleanRestart.setIconStyle("clean-restart-icon");
|
|
menu.add(cleanRestart);
|
|
|
|
// 3 - SHUTDOWN
|
|
MenuItem shutdown = new MenuItem("Shutdown") {
|
|
@Override
|
|
protected void onClick(final ComponentEvent be) {
|
|
super.onClick(be);
|
|
MessageBox.confirm("GHN Shutdown", "Are you sure you want to shut down the selected GHN(s)?",
|
|
new Listener<MessageBoxEvent>() {
|
|
public void handleEvent(final MessageBoxEvent be) {
|
|
|
|
if (be.getButtonClicked().getItemId().equalsIgnoreCase("yes")) {
|
|
// - THE OPERATION IF CONFIRMED
|
|
for (ModelData e : container.getSelection()) {
|
|
ConsoleMessageBroker.info(this, "Required shutdown for: " + e.get("Name") + " " + e.get("ID"));
|
|
}
|
|
OpCommands.doShutdownGHNs(container.getSelection());
|
|
}
|
|
}
|
|
});
|
|
}
|
|
};
|
|
Commands.evaluateCredentials(
|
|
shutdown,
|
|
SupportedOperations.GHN_SHUTDOWN.getPermissions());
|
|
shutdown.setIconStyle("shutdown-icon");
|
|
menu.add(shutdown);
|
|
} // - ENDOF GHN
|
|
|
|
|
|
/*************************************************************
|
|
* RUNNING INSTANCE
|
|
************************************************************/
|
|
if (resType.equals(ResourceTypeDecorator.RunningInstance.name())) {
|
|
// 0 - GETRELATED button
|
|
MenuItem getRelated = new MenuItem("Get Related") {
|
|
@Override
|
|
protected void onClick(final ComponentEvent be) {
|
|
super.onClick(be);
|
|
Commands.doGetRelatedResources(ResourceTypeDecorator.RunningInstance.name(),
|
|
((Object) container.getSelection().get(0).get("ID")).toString(),
|
|
StatusHandler.getStatus().getCurrentScope());
|
|
}
|
|
};
|
|
getRelated.setIconStyle("link-icon");
|
|
menu.add(getRelated);
|
|
|
|
// 1 - undeploy
|
|
MenuItem undeploy = new MenuItem("Undeploy") {
|
|
@Override
|
|
protected void onClick(final ComponentEvent be) {
|
|
super.onClick(be);
|
|
MessageBox.confirm("Running Instance Undeploy", "Are you sure you want to undeploy the selected RI(s)?",
|
|
new Listener<MessageBoxEvent>() {
|
|
public void handleEvent(final MessageBoxEvent be) {
|
|
|
|
if (be.getButtonClicked().getItemId().equalsIgnoreCase("yes")) {
|
|
Vector<ResourceDescriptor> resources = new Vector<ResourceDescriptor>();
|
|
// - THE OPERATION IF CONFIRMED
|
|
for (ModelData e : container.getSelection()) {
|
|
ConsoleMessageBroker.info(this, "Required undeploy for: " + e.get("Name") + " " + e.get("ID"));
|
|
try {
|
|
resources.add(new ResourceDescriptor(
|
|
ResourceTypeDecorator.RunningInstance.name(),
|
|
null,
|
|
((Object) e.get("ID")).toString(),
|
|
((Object) e.get("Name")).toString()));
|
|
} catch (Exception ex) {
|
|
MessageBox.alert(
|
|
"Generic Resource Edit",
|
|
"Failure<br/>" + ex.getMessage(),
|
|
null);
|
|
}
|
|
}
|
|
|
|
try {
|
|
ProxyRegistry.getProxyInstance().doOperation(
|
|
SupportedOperations.RUNNING_INSTANCE_UNDEPLOY,
|
|
StatusHandler.getStatus().getCurrentScope(),
|
|
resources, //lista id risorse selzionati
|
|
new AsyncCallback<Void>() {
|
|
@Override
|
|
public void onSuccess(final Void result) {
|
|
Commands.showPopup("Undeployment", "success");
|
|
}
|
|
@Override
|
|
public void onFailure(
|
|
final Throwable caught) {
|
|
Commands.showPopup("Undeployment", "failure");
|
|
}
|
|
});
|
|
} catch (Exception e) {
|
|
MessageBox.alert(
|
|
"Generic Resource Edit",
|
|
"Failure<br/>" + e.getMessage(),
|
|
null);
|
|
}
|
|
}
|
|
}
|
|
});
|
|
}
|
|
};
|
|
Commands.evaluateCredentials(
|
|
undeploy,
|
|
SupportedOperations.RUNNING_INSTANCE_UNDEPLOY.getPermissions());
|
|
undeploy.setIconStyle("delete-icon");
|
|
menu.add(undeploy);
|
|
}
|
|
|
|
/*************************************************************
|
|
* SERVICE
|
|
************************************************************/
|
|
if (resType.equals(ResourceTypeDecorator.Service.name())) {
|
|
// 0 - GETRELATED button
|
|
MenuItem getRelated = new MenuItem("Get Related") {
|
|
@Override
|
|
protected void onClick(final ComponentEvent be) {
|
|
super.onClick(be);
|
|
Commands.doGetRelatedResources(ResourceTypeDecorator.Service.name(),
|
|
((Object) container.getSelection().get(0).get("ID")).toString(),
|
|
StatusHandler.getStatus().getCurrentScope());
|
|
}
|
|
};
|
|
getRelated.setIconStyle("link-icon");
|
|
menu.add(getRelated);
|
|
}
|
|
|
|
/*************************************************************
|
|
* GENERIC RESOURCE
|
|
************************************************************/
|
|
if (resType.equals(ResourceTypeDecorator.GenericResource.name())) {
|
|
|
|
// 0 - EDIT
|
|
MenuItem edit = new MenuItem("Edit") {
|
|
@Override
|
|
protected void onClick(final ComponentEvent be) {
|
|
final List<ModelData> selection = container.getSelection();
|
|
if (selection != null && selection.size() == 1) {
|
|
ProxyRegistry.getProxyInstance().getGenericResourceDescriptor(
|
|
StatusHandler.getStatus().getCurrentScope(),
|
|
((Object) selection.get(0).get("ID")).toString(),
|
|
new AsyncCallback<ResourceDescriptor>() {
|
|
public void onSuccess(final ResourceDescriptor result) {
|
|
new GenericResourceForm(result).show();
|
|
}
|
|
public void onFailure(final Throwable caught) {
|
|
MessageBox.alert(
|
|
"Generic Resource Edit",
|
|
"Failure<br/>" + caught.getMessage(),
|
|
null);
|
|
}
|
|
});
|
|
} else {
|
|
MessageBox.info("Editing resource", "The editing is allowed on a single selected item", null);
|
|
}
|
|
}
|
|
};
|
|
Commands.evaluateCredentials(
|
|
edit,
|
|
SupportedOperations.GHN_SHUTDOWN.getPermissions());
|
|
edit.setIconStyle("edit-icon");
|
|
menu.add(edit);
|
|
|
|
|
|
// 1 - DELETE button
|
|
menu.add(this.createSeparator(SupportedOperations.GENERIC_RESOURCE_DELETE));
|
|
menu.add(this.createDeleteButton(
|
|
container,
|
|
ResourceTypeDecorator.GenericResource,
|
|
SupportedOperations.GENERIC_RESOURCE_DELETE));
|
|
|
|
// 2 - Force DELETE button
|
|
menu.add(this.createForceDeleteButton(
|
|
container,
|
|
ResourceTypeDecorator.GenericResource,
|
|
SupportedOperations.GENERIC_RESOURCE_FORCE_DELETE));
|
|
} // - ENDOF generic resource
|
|
|
|
|
|
/*************************************************************
|
|
* RUNTIME RESOURCE
|
|
************************************************************/
|
|
|
|
if (resType.equals(ResourceTypeDecorator.RuntimeResource.name())) {
|
|
// 0 - EDIT button
|
|
menu.add(this.createSeparator(SupportedOperations.RUNTIME_RESOURCE_DELETE));
|
|
menu.add(this.createEditButton(
|
|
container,
|
|
ResourceTypeDecorator.RuntimeResource,
|
|
SupportedOperations.RUNTIME_RESOURCE_DELETE));
|
|
|
|
// 1 - DELETE button
|
|
menu.add(this.createSeparator(SupportedOperations.RUNTIME_RESOURCE_DELETE));
|
|
menu.add(this.createDeleteButton(
|
|
container,
|
|
ResourceTypeDecorator.RuntimeResource,
|
|
SupportedOperations.RUNTIME_RESOURCE_DELETE));
|
|
|
|
// 2 - Force DELETE button
|
|
menu.add(this.createForceDeleteButton(
|
|
container,
|
|
ResourceTypeDecorator.RuntimeResource,
|
|
SupportedOperations.RUNTIME_RESOURCE_FORCE_DELETE));
|
|
}
|
|
|
|
/*************************************************************
|
|
* COLLECTION
|
|
************************************************************/
|
|
if (resType.equals(ResourceTypeDecorator.Collection.name())) {
|
|
// 0 - DELETE button
|
|
menu.add(this.createSeparator(SupportedOperations.COLLECTION_DELETE));
|
|
menu.add(this.createDeleteButton(
|
|
container,
|
|
ResourceTypeDecorator.Collection,
|
|
SupportedOperations.COLLECTION_DELETE));
|
|
|
|
// 1 - Force DELETE button
|
|
menu.add(this.createForceDeleteButton(
|
|
container,
|
|
ResourceTypeDecorator.Collection,
|
|
SupportedOperations.COLLECTION_FORCE_DELETE));
|
|
} // - ENDOF Collection
|
|
|
|
/*************************************************************
|
|
* METADATA COLLECTION
|
|
************************************************************/
|
|
if (resType.equals(ResourceTypeDecorator.VIEW.name())) {
|
|
// 0 - DELETE button
|
|
menu.add(this.createSeparator(SupportedOperations.VIEW_DELETE));
|
|
menu.add(this.createDeleteButton(
|
|
container,
|
|
ResourceTypeDecorator.VIEW,
|
|
SupportedOperations.VIEW_DELETE));
|
|
|
|
// 1 - Force DELETE button
|
|
menu.add(this.createForceDeleteButton(
|
|
container,
|
|
ResourceTypeDecorator.VIEW,
|
|
SupportedOperations.VIEW_FORCE_DELETE));
|
|
} // - ENDOF Metadata Collection
|
|
|
|
return menu;
|
|
}
|
|
|
|
private SeparatorMenuItem createSeparator(final SupportedOperations operationID) {
|
|
// Builds the separator
|
|
SeparatorMenuItem separator = new SeparatorMenuItem();
|
|
if (operationID != null) {
|
|
Commands.evaluateCredentials(
|
|
separator,
|
|
operationID.getPermissions());
|
|
}
|
|
return separator;
|
|
}
|
|
|
|
private MenuItem createDeleteButton(
|
|
final ResourceDetailsPanel container,
|
|
final ResourceTypeDecorator resType,
|
|
final SupportedOperations operationID) {
|
|
|
|
// Builds the delete button
|
|
MenuItem delete = new MenuItem("Delete") {
|
|
@Override
|
|
protected void onClick(final ComponentEvent be) {
|
|
super.onClick(be);
|
|
MessageBox.confirm(resType.getLabel() + " Delete",
|
|
"Are you sure you want to delete the selected " + resType.getLabel() + "(s)?",
|
|
new Listener<MessageBoxEvent>() {
|
|
public void handleEvent(final MessageBoxEvent be) {
|
|
if (be.getButtonClicked().getItemId().equalsIgnoreCase("yes")) {
|
|
// - THE OPERATION IF CONFIRMED
|
|
try {
|
|
for (ModelData e : container.getSelection()) {
|
|
ConsoleMessageBroker.info(this, "Required force delete for: " + e.get("Name") + " " + e.get("ID"));
|
|
}
|
|
} catch (Exception e) {
|
|
ConsoleMessageBroker.error(this, e.getMessage());
|
|
}
|
|
OpCommands.doDeleteItems(resType, container.getSelection(), operationID);
|
|
}
|
|
}
|
|
});
|
|
|
|
|
|
}
|
|
};
|
|
// Checks the permissions on the operation
|
|
Commands.evaluateCredentials(
|
|
delete,
|
|
operationID.getPermissions());
|
|
delete.setIconStyle("delete-icon");
|
|
return delete;
|
|
}
|
|
|
|
private MenuItem createEditButton(
|
|
final ResourceDetailsPanel container,
|
|
final ResourceTypeDecorator resType,
|
|
final SupportedOperations operationID) {
|
|
|
|
// Builds the delete button
|
|
MenuItem edit = new MenuItem("Edit Runtime Resource") {
|
|
@Override
|
|
protected void onClick(final ComponentEvent be) {
|
|
String idToEdit = "";
|
|
for (ModelData e : container.getSelection()) {
|
|
idToEdit = e.get("ID");
|
|
}
|
|
loadRuntimeResourcePortlet(idToEdit);
|
|
}
|
|
};
|
|
// Checks the permissions on the operation
|
|
Commands.evaluateCredentials(
|
|
edit,
|
|
operationID.getPermissions());
|
|
edit.setIconStyle("edit-icon");
|
|
return edit;
|
|
}
|
|
|
|
private MenuItem createForceDeleteButton(
|
|
final ResourceDetailsPanel container,
|
|
final ResourceTypeDecorator resType,
|
|
final SupportedOperations operationID) {
|
|
|
|
// Builds the delete button
|
|
MenuItem delete = new MenuItem("Force Delete") {
|
|
@Override
|
|
protected void onClick(final ComponentEvent be) {
|
|
super.onClick(be);
|
|
MessageBox.confirm(resType.getLabel() + " Force Delete",
|
|
"Are you sure you want to delete the selected " + resType.getLabel() + "(s)?",
|
|
new Listener<MessageBoxEvent>() {
|
|
public void handleEvent(final MessageBoxEvent be) {
|
|
if (be.getButtonClicked().getItemId().equalsIgnoreCase("yes")) {
|
|
// - THE OPERATION IF CONFIRMED
|
|
try {
|
|
for (ModelData e : container.getSelection()) {
|
|
ConsoleMessageBroker.info(this, "Required force delete for: " + e.get("Name") + " " + e.get("ID"));
|
|
}
|
|
} catch (Exception e) {
|
|
ConsoleMessageBroker.error(this, e.getMessage());
|
|
}
|
|
OpCommands.doDeleteItems(resType, container.getSelection(), operationID);
|
|
}
|
|
}
|
|
});
|
|
|
|
|
|
}
|
|
};
|
|
// Checks the permissions on the operation
|
|
Commands.evaluateCredentials(
|
|
delete,
|
|
operationID.getPermissions());
|
|
delete.setIconStyle("force-delete-icon");
|
|
return delete;
|
|
}
|
|
|
|
String location;
|
|
/**
|
|
* Redirect to Runtime Resource Portlet
|
|
* @param idToEdit
|
|
*/
|
|
public void loadRuntimeResourcePortlet(String idToEdit){
|
|
|
|
getUrl();
|
|
// Window.alert(location);
|
|
|
|
if (location.endsWith("/") || location.endsWith("#")) { //standalone
|
|
location = com.google.gwt.user.client.Window.Location.getProtocol() +"//"+ com.google.gwt.user.client.Window.Location.getHost() + "/runtime-resource?pid=126&lifecycle=0&state=maximized&modes=view&doAsId=10136&refererPlid=10139&rid="+idToEdit+"&authzToken=101334249&curscope="+StatusHandler.getStatus().getCurrentScope();
|
|
//GWT.log("OPEN " + location);
|
|
getURL(location);
|
|
}
|
|
else { //portal
|
|
getUrl();
|
|
location += "/../runtime-resource?pid=126&lifecycle=0&state=maximized&modes=view&doAsId=10136&refererPlid=10139&rid="+idToEdit+"&authzToken=101334249&curscope="+StatusHandler.getStatus().getCurrentScope();
|
|
Window.open(location, "_self", "");
|
|
}
|
|
|
|
}
|
|
|
|
public static native void getURL(String url)/*-{
|
|
$wnd.open(url,'target=_blank')
|
|
}-*/;
|
|
|
|
/**
|
|
* Get URL from browser
|
|
*/
|
|
public native void getUrl()/*-{
|
|
this.@org.gcube.portlets.admin.resourcemanagement.client.views.resourcedetails.ContextMenuFactory::location = $wnd.location.href;
|
|
}-*/;
|
|
}
|