service-endpoint-editor/src/main/java/org/gcube/portlets/admin/sepeditor/client/forms/RuntimeResourceForm.java

448 lines
14 KiB
Java

package org.gcube.portlets.admin.sepeditor.client.forms;
import java.util.ArrayList;
import java.util.List;
import org.gcube.portlets.admin.sepeditor.client.RuntimeResourceCreator;
import org.gcube.portlets.admin.sepeditor.client.RuntimeResourceCreatorService;
import org.gcube.portlets.admin.sepeditor.client.RuntimeResourceCreatorServiceAsync;
import org.gcube.portlets.admin.sepeditor.shared.Category;
import org.gcube.portlets.admin.sepeditor.shared.ClientScope;
import org.gcube.portlets.admin.sepeditor.shared.FilledRuntimeResource;
import org.gcube.portlets.admin.sepeditor.shared.Property;
import org.gcube.portlets.admin.sepeditor.shared.RRAccessPoint;
import com.extjs.gxt.ui.client.Style.HorizontalAlignment;
import com.extjs.gxt.ui.client.Style.Scroll;
import com.extjs.gxt.ui.client.event.ComponentEvent;
import com.extjs.gxt.ui.client.store.ListStore;
import com.extjs.gxt.ui.client.widget.ContentPanel;
import com.extjs.gxt.ui.client.widget.Label;
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.ComboBox;
import com.extjs.gxt.ui.client.widget.form.ComboBox.TriggerAction;
import com.extjs.gxt.ui.client.widget.form.Field;
import com.extjs.gxt.ui.client.widget.form.FieldSet;
import com.extjs.gxt.ui.client.widget.form.FormButtonBinding;
import com.extjs.gxt.ui.client.widget.form.FormPanel;
import com.extjs.gxt.ui.client.widget.form.NumberField;
import com.extjs.gxt.ui.client.widget.form.TextArea;
import com.extjs.gxt.ui.client.widget.form.TextField;
import com.extjs.gxt.ui.client.widget.layout.FormData;
import com.extjs.gxt.ui.client.widget.layout.FormLayout;
import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.rpc.AsyncCallback;
/**
*
* @author Massimiliano Assante - ISTI-CNR
* @version 1.1 Apr 10th 2012
*/
public class RuntimeResourceForm extends ContentPanel {
protected RuntimeResourceCreatorServiceAsync runtimeService = (RuntimeResourceCreatorServiceAsync)GWT.create(RuntimeResourceCreatorService.class);
RuntimeResourceCreator caller;
private ArrayList<AccesPointPanel> accessPoints = new ArrayList<AccesPointPanel>();
private FormData formData = null;
private FormPanel form = null;
private Button addAccessPointButton;
private ArrayList<ClientScope> scopes;
private FilledRuntimeResource toEdit;
private boolean isEditMode = false;
/**
* create mode
* @param caller
* @param scopes
*/
public RuntimeResourceForm(RuntimeResourceCreator caller, ArrayList<ClientScope> scopes) {
this.caller = caller;
this.setHeaderVisible(true);
this.setHeading("Runtime Resource Creation");
//this.setModal(true);
this.setAutoWidth(true);
this.setHeight(650);
//this.setResizable(true);
this.setScrollMode(Scroll.AUTOY);
this.getButtonBar().removeAll();
this.scopes = scopes;
formData = new FormData("-20");
createForm();
}
/**
* edit mode
* @param caller
* @param scopes
* @param toEdit
*/
public RuntimeResourceForm(RuntimeResourceCreator caller, ArrayList<ClientScope> scopes, FilledRuntimeResource toEdit) {
this.isEditMode = true;
this.toEdit = toEdit;
this.caller = caller;
this.setHeaderVisible(true);
this.setHeading("Runtime Resource Creation [EDIT MODE]");
//this.setModal(true);
this.setAutoWidth(true);
this.setHeight(650);
//this.setResizable(true);
this.setScrollMode(Scroll.AUTOY);
this.getButtonBar().removeAll();
this.scopes = scopes;
formData = new FormData("-20");
createForm();
}
public final void closeDialog() {
this.hide();
}
private void createForm() {
form = new FormPanel();
form.setFrame(true);
form.setAutoWidth(true);
form.setHeaderVisible(false);
form.getHeader().setStyleName("x-hide-panel-header");
//listbox scope
ListStore<ClientScope> storeScope = new ListStore<ClientScope>();
storeScope.add(scopes);
ComboBox<ClientScope> comboScope = new ComboBox<ClientScope>();
comboScope.setFieldLabel("Scope");
comboScope.setDisplayField("name");
comboScope.setTriggerAction(TriggerAction.ALL);
comboScope.setStore(storeScope);
comboScope.setEditable(false);
form.add(comboScope, formData);
TextField<String> resID = new TextField<String>();
resID.setFieldLabel("Resource ID");
// resID.setValidator(new StringValidator(120, false));
resID.setAllowBlank(false); // is required
resID.setEmptyText(isEditMode ? toEdit.getResourceId() : "<generated by Resource Manager>");
resID.setEnabled(false);
form.add(resID, formData);
TextField<String> resName = new TextField<String>();
resName.setFieldLabel("Resource Name");
// resName.setValidator(new StringValidator(120, false));
resName.setAllowBlank(false); // is required
form.add(resName, formData);
TextArea description = new TextArea();
description.setFieldLabel("Resource Description");
form.add(description, formData);
TextField<String> resType = new TextField<String>();
resType.setFieldLabel("Type");
resType.setAllowBlank(false); // is required
// If in editing mode
resType.setEmptyText("RuntimeResource");
resType.setEnabled(false);
form.add(resType, formData);
//listbox
List<Category> categories = getCategories();
ListStore<Category> store = new ListStore<Category>();
store.add(categories);
ComboBox<Category> combo = new ComboBox<Category>();
combo.setFieldLabel("Category");
combo.setDisplayField("name");
combo.setTriggerAction(TriggerAction.ALL);
combo.setStore(store);
form.add(combo, formData);
//get the platform
form.add(getPlatform());
//get thr runtime
form.add(getRuntime());
String submitText = "Submit New";
if (isEditMode) {
comboScope.setValue(storeScope.getAt(0));
resName.setValue(toEdit.getResourceName());
description.setValue(toEdit.getDescription());
combo.setValue(new Category(toEdit.getCategory()));
for (RRAccessPoint ap : toEdit.getRRAccessPoints()) {
addAccessPoint2Edit(ap);
}
submitText = "Submit Update";
}
//add access point
addAccessPointButton = getAddAccessPointButton();
form.add(addAccessPointButton);
form.add(new Label()); //spacer
Button submitBtn = new Button(submitText) {
@Override
protected void onClick(final ComponentEvent ce) {
form.mask("sending encrypted info, please wait","loading-indicator");
super.onClick(ce);
if (!form.isValid()) {
return;
}
String[] values = new String[form.getFields().size()];
int i = 0;
for (Field<?> field : form.getFields()) {
values[i] = field.getRawValue();
GWT.log(i+ ": " + field.getRawValue()+"\n");
i++;
}
FilledRuntimeResource rr = new FilledRuntimeResource();
if (isEditMode)
rr.setResourceId(toEdit.getResourceId());
rr.setResourceName(values[2]);
rr.setDescription(values[3]);
rr.setCategory(values[5]);
rr.setPlatformName(values[6]);
rr.setPlatformVersion(values[7]);
rr.setPlatformMinorVersion(values[8]);
rr.setPlatformRevisionVersion(values[9]);
rr.setPlatformBuildVersion(values[10]);
rr.setRuntimeHostedOn(values[11]);
rr.setRuntimeStatus(values[12]);
rr.setRuntimegHNUniqueID(values[13]);
ArrayList<RRAccessPoint> rRAccessPoints = new ArrayList<RRAccessPoint>();
for (AccesPointPanel ap : accessPoints) {
RRAccessPoint rAP = new RRAccessPoint();
rAP.setDesc(ap.getDesc().getRawValue());
rAP.setInterfaceEndPoint(ap.getEndPoint().getRawValue());
rAP.setInterfaceEntryNameAttr(ap.getEntryNameAttr().getRawValue());
rAP.setUsername(ap.getUsername().getRawValue());
rAP.setPassword(ap.getPassword().getRawValue());
ArrayList<Property> properties = new ArrayList<Property>();
for (PropertyPanel pp : ap.getProperties()) {
Property toAdd = new Property();
toAdd.setKey(pp.getKey().getRawValue());
toAdd.setValue(pp.getValue().getRawValue());
toAdd.setCrypted(pp.isCrypted());
properties.add(toAdd);
}
rAP.setProperties(properties);
rRAccessPoints.add(rAP);
}
rr.setRRAccessPoints(rRAccessPoints);
RuntimeResourceCreator.runtimeService.createRuntimeResource(values[0], rr, isEditMode, new AsyncCallback<Boolean>() {
@Override
public void onSuccess(Boolean result) {
form.unmask();
if (result) {
MessageBox.alert("Runtime Resource Creation", "Request for registration successfully sent", null);
}
else {
MessageBox.alert("Runtime Resource Creation", "Request for registration failed, please check server logs", null);
}
caller.initialize(null, null);
}
@Override
public void onFailure(Throwable arg0) {
form.unmask();
MessageBox.alert("Runtime Resource Creation", "Request for registration Failed", null);
caller.initialize(null, null);
}
});
}
};
form.addButton(submitBtn);
form.setButtonAlign(HorizontalAlignment.CENTER);
FormButtonBinding binding = new FormButtonBinding(form);
binding.addButton(submitBtn);
this.add(form);
}
private Button getAddAccessPointButton() {
Button addAccessPoint = new Button("Add Access Point"){
@Override
protected void onClick(final ComponentEvent ce) {
AccesPointPanel toAdd = getNewAccessPoint();
addAccessPoint(toAdd);
form.remove(addAccessPointButton);
form.add(toAdd, formData);
form.add(new Label());
form.add(addAccessPointButton);
form.layout();
}
};
return addAccessPoint;
}
/**
*
* @return .
*/
private AccesPointPanel getNewAccessPoint() {
return new AccesPointPanel(this, false, null);
}
/**
*
* @return .
*/
private void addAccessPoint2Edit(RRAccessPoint source) {
AccesPointPanel toAdd = new AccesPointPanel(this, source);
addAccessPoint(toAdd);
form.add(toAdd, formData);
form.add(new Label());
form.layout();
}
private ArrayList<Category> getCategories() {
final ArrayList<Category> defaultCats = new ArrayList<Category>();
defaultCats.add(new Category("Application"));
defaultCats.add(new Category("BiodiversityRepository"));
defaultCats.add(new Category("Cloud"));
defaultCats.add(new Category("Database"));
defaultCats.add(new Category("DataStorage"));
defaultCats.add(new Category("HostingPlatform"));
defaultCats.add(new Category("FTPServer"));
defaultCats.add(new Category("Gis"));
defaultCats.add(new Category("MavenRepository"));
defaultCats.add(new Category("OnlineService"));
defaultCats.add(new Category("OpenSearchRepository"));
defaultCats.add(new Category("Service"));
return defaultCats;
}
private ArrayList<Category> getStatuses() {
final ArrayList<Category> defaultCats = new ArrayList<Category>();
defaultCats.add(new Category("READY"));
defaultCats.add(new Category("UNAVAILABLE"));
return defaultCats;
}
protected void addAccessPoint(AccesPointPanel toAdd) {
this.accessPoints.add(toAdd);
}
protected void removeAccessPoint(AccesPointPanel toRemove) {
this.accessPoints.remove(toRemove);
form.remove(toRemove);
}
/**
*
* @return .
*/
private FieldSet getPlatform() {
FieldSet fieldSet = new FieldSet();
fieldSet.setHeading("Platform");
fieldSet.setCollapsible(true);
FormLayout layout = new FormLayout();
layout.setLabelWidth(100);
fieldSet.setLayout(layout);
TextField<String> platformName = new TextField<String>();
platformName.setFieldLabel("Name");
platformName.setAllowBlank(false);
fieldSet.add(platformName, formData);
NumberField platformVersion = new NumberField();
platformVersion.setFieldLabel("Version");
platformVersion.setPropertyEditorType(Integer.class);
platformVersion.setAllowNegative(false);
fieldSet.add(platformVersion, formData);
platformVersion.setAllowBlank(false);
NumberField platformMinorVersion = new NumberField();
platformMinorVersion.setFieldLabel("Minor Version");
platformMinorVersion.setPropertyEditorType(Integer.class);
platformMinorVersion.setAllowNegative(false);
fieldSet.add(platformMinorVersion, formData);
platformMinorVersion.setAllowBlank(true);
NumberField platformRevisionVersion = new NumberField();
platformRevisionVersion.setFieldLabel("Revision Version");
platformRevisionVersion.setPropertyEditorType(Integer.class);
platformRevisionVersion.setAllowNegative(false);
fieldSet.add(platformRevisionVersion, formData);
platformRevisionVersion.setAllowBlank(true);
NumberField platformBuildVersion = new NumberField();
platformBuildVersion.setFieldLabel("Build Version");
platformBuildVersion.setPropertyEditorType(Integer.class);
platformBuildVersion.setAllowNegative(false);
fieldSet.add(platformBuildVersion, formData);
platformBuildVersion.setAllowBlank(true);
if (isEditMode) {
platformName.setValue(toEdit.getPlatformName());
platformVersion.setValue((Number) Integer.parseInt(toEdit.getPlatformVersion()));
platformMinorVersion.setValue((Number) Integer.parseInt(toEdit.getPlatformMinorVersion()));
platformRevisionVersion.setValue((Number) Integer.parseInt(toEdit.getPlatformRevisionVersion()));
platformBuildVersion.setValue((Number) Integer.parseInt(toEdit.getPlatformBuildVersion()));
}
return fieldSet;
}
/**
*
* @return .
*/
private FieldSet getRuntime() {
FieldSet fieldSet = new FieldSet();
fieldSet.setHeading("Runtime");
fieldSet.setCollapsible(true);
FormLayout layout = new FormLayout();
layout.setLabelWidth(100);
fieldSet.setLayout(layout);
TextField<String> hostedOn = new TextField<String>();
hostedOn.setFieldLabel("Hosted On");
hostedOn.setAllowBlank(false);
fieldSet.add(hostedOn, formData);
//listbox
List<Category> statuses = getStatuses();
ListStore<Category> store = new ListStore<Category>();
store.add(statuses);
ComboBox<Category> combo = new ComboBox<Category>();
combo.setFieldLabel("Status");
combo.setDisplayField("name");
combo.setTriggerAction(TriggerAction.ALL);
combo.setStore(store);
fieldSet.add(combo, formData);
TextField<String> gHNUniqueID = new TextField<String>();
gHNUniqueID.setFieldLabel("gHN UniqueID");
fieldSet.add(gHNUniqueID, formData);
gHNUniqueID.setAllowBlank(true);
if (isEditMode) {
hostedOn.setValue(toEdit.getRuntimeHostedOn());
combo.setValue(new Category(toEdit.getRuntimeStatus()));
gHNUniqueID.setValue(toEdit.getRuntimegHNUniqueID());
}
return fieldSet;
}
}