diff --git a/src/main/java/org/gcube/portlets/user/td/tablewidget/client/coordinates/GeospatialCreateC_SquarePanel.java b/src/main/java/org/gcube/portlets/user/td/tablewidget/client/coordinates/GeospatialCreateC_SquarePanel.java
new file mode 100644
index 0000000..f6e0502
--- /dev/null
+++ b/src/main/java/org/gcube/portlets/user/td/tablewidget/client/coordinates/GeospatialCreateC_SquarePanel.java
@@ -0,0 +1,273 @@
+package org.gcube.portlets.user.td.tablewidget.client.coordinates;
+
+import org.gcube.portlets.user.td.gwtservice.client.rpc.TDGWTServiceAsync;
+import org.gcube.portlets.user.td.gwtservice.shared.exception.TDGWTIsFinalException;
+import org.gcube.portlets.user.td.gwtservice.shared.exception.TDGWTIsLockedException;
+import org.gcube.portlets.user.td.gwtservice.shared.exception.TDGWTSessionExpiredException;
+import org.gcube.portlets.user.td.gwtservice.shared.tr.TableData;
+import org.gcube.portlets.user.td.gwtservice.shared.tr.table.ChangeTableTypeSession;
+import org.gcube.portlets.user.td.monitorwidget.client.MonitorDialog;
+import org.gcube.portlets.user.td.monitorwidget.client.MonitorDialogListener;
+import org.gcube.portlets.user.td.tablewidget.client.resources.ResourceBundle;
+import org.gcube.portlets.user.td.tablewidget.client.type.TableTypeElement;
+import org.gcube.portlets.user.td.tablewidget.client.type.TableTypeProperties;
+import org.gcube.portlets.user.td.tablewidget.client.type.TableTypeStore;
+import org.gcube.portlets.user.td.tablewidget.client.util.UtilsGXT3;
+import org.gcube.portlets.user.td.widgetcommonevent.client.event.ChangeTableRequestEvent;
+import org.gcube.portlets.user.td.widgetcommonevent.client.event.SessionExpiredEvent;
+import org.gcube.portlets.user.td.widgetcommonevent.client.type.ChangeTableRequestType;
+import org.gcube.portlets.user.td.widgetcommonevent.client.type.ChangeTableWhy;
+import org.gcube.portlets.user.td.widgetcommonevent.client.type.SessionExpiredType;
+import org.gcube.portlets.user.td.widgetcommonevent.shared.OperationResult;
+import org.gcube.portlets.user.td.widgetcommonevent.shared.TRId;
+
+import com.allen_sauer.gwt.log.client.Log;
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.user.client.rpc.AsyncCallback;
+import com.google.web.bindery.event.shared.EventBus;
+import com.sencha.gxt.cell.core.client.ButtonCell.IconAlign;
+import com.sencha.gxt.cell.core.client.form.ComboBoxCell.TriggerAction;
+import com.sencha.gxt.core.client.dom.ScrollSupport.ScrollMode;
+import com.sencha.gxt.core.client.util.Margins;
+import com.sencha.gxt.data.shared.ListStore;
+import com.sencha.gxt.widget.core.client.FramedPanel;
+import com.sencha.gxt.widget.core.client.button.TextButton;
+import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer;
+import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer.VerticalLayoutData;
+import com.sencha.gxt.widget.core.client.event.SelectEvent;
+import com.sencha.gxt.widget.core.client.event.SelectEvent.SelectHandler;
+import com.sencha.gxt.widget.core.client.form.ComboBox;
+import com.sencha.gxt.widget.core.client.form.FieldLabel;
+
+/**
+ *
+ * @author "Giancarlo Panichi" g.panichi@isti.cnr.it
+ *
+ */
+public class GeospatialCreateC_SquarePanel extends FramedPanel implements
+ MonitorDialogListener {
+ protected String WIDTH = "640px";
+ protected String HEIGHT = "520px";
+
+ protected TRId trId;
+ protected TableData table;
+ protected String headingTitle;
+ protected VerticalLayoutContainer vl;
+ protected EventBus eventBus;
+ protected ChangeTableTypeSession changeTableTypeSession;
+
+ protected ComboBox comboTableType;
+ protected TextButton change;
+
+ public GeospatialCreateC_SquarePanel(TRId trId, EventBus eventBus) {
+ super();
+ this.trId = trId;
+ this.eventBus = eventBus;
+ forceLayoutOnResize = true;
+ create();
+ }
+
+ protected void create() {
+ setWidth(WIDTH);
+ setHeight(HEIGHT);
+ setHeaderVisible(false);
+ setBodyBorder(false);
+
+ TableTypeProperties props = GWT.create(TableTypeProperties.class);
+ ListStore storeTableType = new ListStore(
+ props.id());
+
+ storeTableType.addAll(TableTypeStore.getTableTypes());
+
+ Log.trace("Store created");
+
+ comboTableType = new ComboBox(storeTableType,
+ props.label());
+
+ Log.trace("ComboTableType created");
+
+ comboTableType.setEmptyText("Select a Table Type...");
+ comboTableType.setItemId("ComboTableType");
+ comboTableType.setWidth("200px");
+ comboTableType.setEditable(false);
+ comboTableType.setTriggerAction(TriggerAction.ALL);
+
+ change = new TextButton("Apply");
+ change.setIcon(ResourceBundle.INSTANCE.tableType());
+ change.setIconAlign(IconAlign.RIGHT);
+ change.setTitle("Apply Table Type");
+
+ change.addSelectHandler(new SelectHandler() {
+
+ public void onSelect(SelectEvent event) {
+ onChangeTableType();
+
+ }
+ });
+
+ vl = new VerticalLayoutContainer();
+ vl.setScrollMode(ScrollMode.AUTO);
+ vl.setAdjustForScroll(true);
+
+ vl.add(new FieldLabel(comboTableType, "Table Type"),
+ new VerticalLayoutData(1, -1));
+ vl.add(change,
+ new VerticalLayoutData(-1, -1, new Margins(10, 0, 10, 0)));
+
+ add(vl);
+ show();
+ load();
+
+ }
+
+ protected void onChangeTableType() {
+ TableTypeElement tableTypeElement = comboTableType.getCurrentValue();
+ if (tableTypeElement != null) {
+ if (tableTypeElement.getTableType() != null) {
+ changeTableTypeSession = new ChangeTableTypeSession(trId,
+ tableTypeElement.getTableType());
+ callChangeTableType();
+ } else {
+ UtilsGXT3.alert("Error", "Invalid table type!");
+ }
+ } else {
+ UtilsGXT3.alert("Attention", "Select a table type!");
+ }
+ }
+
+ private void callChangeTableType() {
+ TDGWTServiceAsync.INSTANCE.startChangeTableType(changeTableTypeSession,
+ new AsyncCallback() {
+
+ public void onFailure(Throwable caught) {
+ if (caught instanceof TDGWTSessionExpiredException) {
+ eventBus.fireEvent(new SessionExpiredEvent(
+ SessionExpiredType.EXPIREDONSERVER));
+ } else {
+ if (caught instanceof TDGWTIsLockedException) {
+ Log.error(caught.getLocalizedMessage());
+ UtilsGXT3.alert("Error Locked",
+ caught.getLocalizedMessage());
+ } else {
+ if (caught instanceof TDGWTIsFinalException) {
+ Log.error(caught.getLocalizedMessage());
+ UtilsGXT3.alert("Error Final",
+ caught.getLocalizedMessage());
+ } else {
+ Log.debug("Change The Table Type Error: "
+ + caught.getLocalizedMessage());
+ UtilsGXT3
+ .alert("Error Changing The Table Type",
+ "Error in invocation of Change Table Type operation!");
+ }
+ }
+ }
+ }
+
+ public void onSuccess(String taskId) {
+ openMonitorDialog(taskId);
+
+ }
+
+ });
+
+ }
+
+ protected void setCurrentType() {
+ TableTypeElement tElement = TableTypeStore.getTableTypeElement(table
+ .getTypeName());
+ comboTableType.setValue(tElement);
+
+ }
+
+ private void load() {
+ TDGWTServiceAsync.INSTANCE.getTable(trId,
+ new AsyncCallback() {
+
+ public void onFailure(Throwable caught) {
+ if (caught instanceof TDGWTSessionExpiredException) {
+ eventBus.fireEvent(new SessionExpiredEvent(
+ SessionExpiredType.EXPIREDONSERVER));
+ } else {
+ if (caught instanceof TDGWTIsLockedException) {
+ Log.error(caught.getLocalizedMessage());
+ UtilsGXT3.alert("Error Locked",
+ caught.getLocalizedMessage());
+ } else {
+ Log.error("Error retrieving table: "
+ + caught.getMessage());
+ UtilsGXT3.alert("Error retrieving table",
+ caught.getMessage());
+ }
+ }
+ }
+
+ public void onSuccess(TableData result) {
+ Log.debug("Retrieved table: " + result.toString());
+ table = result;
+ setCurrentType();
+
+ }
+
+ });
+
+ }
+
+ public void update(TRId trId) {
+ this.trId = trId;
+ load();
+ }
+
+ protected void close() {
+ /*
+ * if (parent != null) { parent.close(); }
+ */
+ }
+
+ // /
+ protected void openMonitorDialog(String taskId) {
+ MonitorDialog monitorDialog = new MonitorDialog(taskId, eventBus);
+ monitorDialog.addProgressDialogListener(this);
+ monitorDialog.show();
+ }
+
+ @Override
+ public void operationComplete(OperationResult operationResult) {
+ ChangeTableWhy why = ChangeTableWhy.TABLEUPDATED;
+ ChangeTableRequestEvent changeTableRequestEvent = new ChangeTableRequestEvent(
+ ChangeTableRequestType.CHANGETABLETYPE, operationResult.getTrId(), why);
+ eventBus.fireEvent(changeTableRequestEvent);
+ close();
+ }
+
+ @Override
+ public void operationFailed(Throwable caught, String reason, String details) {
+ UtilsGXT3.alert(reason, details);
+ close();
+
+ }
+
+ @Override
+ public void operationStopped(OperationResult operationResult, String reason, String details) {
+ ChangeTableWhy why = ChangeTableWhy.TABLECURATION;
+ ChangeTableRequestEvent changeTableRequestEvent = new ChangeTableRequestEvent(
+ ChangeTableRequestType.CHANGETABLETYPE, operationResult.getTrId(), why);
+ eventBus.fireEvent(changeTableRequestEvent);
+ close();
+
+ }
+
+ @Override
+ public void operationAborted() {
+ close();
+
+ }
+
+ @Override
+ public void operationPutInBackground() {
+ close();
+
+ }
+
+}