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 accessPoints = new ArrayList(); private FormData formData = null; private FormPanel form = null; private Button addAccessPointButton; private ArrayList scopes; private FilledRuntimeResource toEdit; private boolean isEditMode = false; /** * create mode * @param caller * @param scopes */ public RuntimeResourceForm(RuntimeResourceCreator caller, ArrayList 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 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 storeScope = new ListStore(); storeScope.add(scopes); ComboBox comboScope = new ComboBox(); comboScope.setFieldLabel("Scope"); comboScope.setDisplayField("name"); comboScope.setTriggerAction(TriggerAction.ALL); comboScope.setStore(storeScope); comboScope.setEditable(false); form.add(comboScope, formData); TextField resID = new TextField(); resID.setFieldLabel("Resource ID"); // resID.setValidator(new StringValidator(120, false)); resID.setAllowBlank(false); // is required resID.setEmptyText(isEditMode ? toEdit.getResourceId() : ""); resID.setEnabled(false); form.add(resID, formData); TextField resName = new TextField(); 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 resType = new TextField(); resType.setFieldLabel("Type"); resType.setAllowBlank(false); // is required // If in editing mode resType.setEmptyText("RuntimeResource"); resType.setEnabled(false); form.add(resType, formData); //listbox List categories = getCategories(); ListStore store = new ListStore(); store.add(categories); ComboBox combo = new ComboBox(); 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 rRAccessPoints = new ArrayList(); 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 properties = new ArrayList(); 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() { @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 getCategories() { final ArrayList defaultCats = new ArrayList(); 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 getStatuses() { final ArrayList defaultCats = new ArrayList(); 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 platformName = new TextField(); 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 hostedOn = new TextField(); hostedOn.setFieldLabel("Hosted On"); hostedOn.setAllowBlank(false); fieldSet.add(hostedOn, formData); //listbox List statuses = getStatuses(); ListStore store = new ListStore(); store.add(statuses); ComboBox combo = new ComboBox(); combo.setFieldLabel("Status"); combo.setDisplayField("name"); combo.setTriggerAction(TriggerAction.ALL); combo.setStore(store); fieldSet.add(combo, formData); TextField gHNUniqueID = new TextField(); 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; } }