package org.gcube.portlets.user.td.expressionwidget.client.expression; import java.util.ArrayList; import org.gcube.portlets.user.td.expressionwidget.client.properties.ColumnDataPropertiesCombo; import org.gcube.portlets.user.td.expressionwidget.client.properties.ReplaceElement; import org.gcube.portlets.user.td.expressionwidget.client.properties.ReplaceElementProperties; import org.gcube.portlets.user.td.expressionwidget.client.properties.ReplaceElementStore; import org.gcube.portlets.user.td.expressionwidget.client.type.ReplaceExpressionType; import org.gcube.portlets.user.td.expressionwidget.client.utils.UtilsGXT3; import org.gcube.portlets.user.td.expressionwidget.shared.exception.ReplaceTypeMapException; import org.gcube.portlets.user.td.expressionwidget.shared.model.composite.arithmetic.C_ArithmeticExpression; import org.gcube.portlets.user.td.expressionwidget.shared.replace.ReplaceType; import org.gcube.portlets.user.td.expressionwidget.shared.replace.ReplaceTypeMap; 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.widgetcommonevent.client.event.SessionExpiredEvent; import org.gcube.portlets.user.td.widgetcommonevent.client.type.SessionExpiredType; import org.gcube.portlets.user.td.widgetcommonevent.shared.TRId; import org.gcube.portlets.user.td.widgetcommonevent.shared.expression.C_Expression; import org.gcube.portlets.user.td.widgetcommonevent.shared.tr.column.ColumnData; import org.gcube.portlets.user.td.widgetcommonevent.shared.tr.column.ColumnDataType; import com.allen_sauer.gwt.log.client.Log; import com.google.gwt.core.client.GWT; import com.google.gwt.event.logical.shared.SelectionEvent; import com.google.gwt.event.logical.shared.SelectionHandler; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.web.bindery.event.shared.EventBus; 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.container.BoxLayoutContainer.BoxLayoutData; import com.sencha.gxt.widget.core.client.container.HBoxLayoutContainer; import com.sencha.gxt.widget.core.client.container.MarginData; import com.sencha.gxt.widget.core.client.container.SimpleContainer; 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.BeforeShowEvent; import com.sencha.gxt.widget.core.client.form.ComboBox; import com.sencha.gxt.widget.core.client.form.TextField; /** * * @author Giancarlo Panichi * * */ public class ReplaceWidget extends SimpleContainer { private static final String EMPTY_TEXT_TO_STRING = "to string..."; private static final String EMPTY_TEXT_FROM_STRING = "from string..."; private static final String EMPTY_TEXT_TO_INDEX = "to index..."; private static final String EMPTY_TEXT_FROM_INDEX = "from index..."; private static final String EMPTY_TEXT_REGEXP = "regexp..."; private static final String EMPTY_TEXT_INSERT_A_STRING = "insert a string..."; private static final String EMPTY_TEXT_REPLACE_REGEXP = "regexp..."; private static final String EMPTY_TEXT_REPLACE_REPLACING = "replace with..."; private ReplaceWidget thisCont; private static final String HEIGHT = "210px"; private static final String WIDTH = "832px"; private static final String COMBO_WIDTH = "170px"; private EventBus eventBus; private TRId trId; private ColumnData column; private ArrayList columns; private ArrayList arithmeticColumns; // private FieldLabel matchLabel; // private ToggleGroup groupMatch; private VerticalLayoutContainer vert; // protected ColumnData column; private String readableExpression; private String itemIdComboConcat; private String itemIdComboLeaf; private String itemIdComboColumns; private String itemIdFirstArg; private String itemIdSecondArg; private String itemIdHoriz; private ReplaceExpressionType replaceExpressionType; private ColumnDataType targetColumnType; protected class ExpressionContainer { private C_Expression expression; private String readableExpression; public ExpressionContainer(C_Expression expression, String readableExpression) { super(); this.expression = expression; this.readableExpression = readableExpression; } public C_Expression getExpression() { return expression; } public void setExpression(C_Expression expression) { this.expression = expression; } public String getReadableExpression() { return readableExpression; } public void setReadableExpression(String readableExpression) { this.readableExpression = readableExpression; } } public ReplaceWidget(ColumnData column, EventBus eventBus) { super(); this.column=column; replaceExpressionType = ReplaceExpressionType.Replace; ColumnDataType targetType = ColumnDataType .getColumnDataTypeFromId(column.getDataTypeName()); create(column.getTrId(), targetType, WIDTH, HEIGHT, eventBus); retrieveColumns(); } public ReplaceWidget(ColumnData column, String width, String height, EventBus eventBus) { super(); this.column=column; replaceExpressionType = ReplaceExpressionType.Replace; ColumnDataType targetType = ColumnDataType .getColumnDataTypeFromId(column.getDataTypeName()); create(column.getTrId(), targetType, width, height, eventBus); retrieveColumns(); } public ReplaceWidget(ColumnData column, ArrayList columns, EventBus eventBus) { super(); this.column=column; replaceExpressionType = ReplaceExpressionType.Template; ColumnDataType targetType = ColumnDataType .getColumnDataTypeFromId(column.getDataTypeName()); create(column.getTrId(), targetType, WIDTH, HEIGHT, eventBus); columnsConfig(columns); } public ReplaceWidget(ColumnData column, ArrayList columns, String width, String height, EventBus eventBus) { super(); this.column=column; replaceExpressionType = ReplaceExpressionType.Template; ColumnDataType targetType = ColumnDataType .getColumnDataTypeFromId(column.getDataTypeName()); create(column.getTrId(), targetType, width, height, eventBus); columnsConfig(columns); } public ReplaceWidget(ColumnData column, ArrayList columns, EventBus eventBus, ReplaceExpressionType type) { super(); this.column=column; replaceExpressionType = type; ColumnDataType targetType = ColumnDataType .getColumnDataTypeFromId(column.getDataTypeName()); create(column.getTrId(), targetType, WIDTH, HEIGHT, eventBus); columnsConfig(columns); } public ReplaceWidget(ColumnData column, ArrayList columns, String width, String height, EventBus eventBus,ReplaceExpressionType type) { super(); this.column=column; replaceExpressionType = type; ColumnDataType targetType = ColumnDataType .getColumnDataTypeFromId(column.getDataTypeName()); create(column.getTrId(), targetType, width, height, eventBus); columnsConfig(columns); } protected void create(TRId trId, ColumnDataType targetColumnType, String width, String height, EventBus eventBus) { this.trId = trId; this.targetColumnType = targetColumnType; setBorders(true); setWidth(width); setHeight(height); forceLayoutOnResize = true; thisCont = this; addBeforeShowHandler(new BeforeShowEvent.BeforeShowHandler() { @Override public void onBeforeShow(BeforeShowEvent event) { forceLayout(); } }); } protected void retrieveColumns() { TDGWTServiceAsync.INSTANCE.getColumns(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 { if (caught instanceof TDGWTIsFinalException) { Log.error(caught.getLocalizedMessage()); UtilsGXT3.alert("Error Final", caught.getLocalizedMessage()); } else { Log.error("load combo failure:" + caught.getLocalizedMessage()); UtilsGXT3.alert("Error", "Error retrieving columns of tabular resource:" + trId.getId()); } } } } public void onSuccess(ArrayList result) { Log.trace("loaded " + result.size() + " ColumnData"); columnsConfig(result); } }); } protected void columnsConfig(ArrayList result) { columns = result; arithmeticColumns = new ArrayList(); for (ColumnData col : result) { ColumnDataType colDataType = ColumnDataType .getColumnDataTypeFromId(col.getDataTypeName()); if (C_ArithmeticExpression.isAccepted(colDataType)) { arithmeticColumns.add(col); } } setup(); } protected void setup() { String sign="columnX"; if(column!=null&& column.getName()!=null){ sign=column.getName(); } itemIdComboConcat = "ComboConcat" + sign; itemIdComboLeaf = "ComboLeaf" + sign; itemIdComboColumns = "ComboColumns" + sign; itemIdFirstArg = "FirstArg" + sign; itemIdSecondArg = "SecondArg" + sign; itemIdHoriz = "Horiz" + sign; vert = new VerticalLayoutContainer(); vert.setScrollMode(ScrollMode.AUTO);// Set In GXT 3.0.1 vert.setAdjustForScroll(true); final HBoxLayoutContainer horiz = new HBoxLayoutContainer(); final TextField firstArg = new TextField(); firstArg.setEmptyText("Insert a string"); firstArg.setItemId(itemIdFirstArg); final TextField secondArg = new TextField(); secondArg.setEmptyText(""); secondArg.setItemId(itemIdSecondArg); // Combo Column ColumnDataPropertiesCombo propsColumnData = GWT .create(ColumnDataPropertiesCombo.class); final ListStore storeColumns = new ListStore( propsColumnData.id()); Log.debug("Store Columns: " + storeColumns); storeColumns.addAll(columns); final ComboBox comboColumns = new ComboBox( storeColumns, propsColumnData.label()); Log.debug("Combo Columns created"); comboColumns.setEmptyText("Select Column..."); comboColumns.setItemId(itemIdComboColumns); comboColumns.setWidth(COMBO_WIDTH); comboColumns.setEditable(false); comboColumns.setTriggerAction(TriggerAction.ALL); // Replace Elemet Store final ReplaceElementStore factory = new ReplaceElementStore(); ReplaceElementProperties props = GWT .create(ReplaceElementProperties.class); Log.debug("Props: " + props); // Combo Leaf ListStore storeReplaceElementsLeaf = new ListStore( props.id()); Log.debug("Store Leaf: " + storeReplaceElementsLeaf); storeReplaceElementsLeaf.addAll(factory.replaceElements); Log.debug("Store created"); final ComboBox comboReplaceElementsLeaf = new ComboBox( storeReplaceElementsLeaf, props.label()); Log.debug("Combo created"); comboReplaceElementsLeaf .addSelectionHandler(new SelectionHandler() { public void onSelection(SelectionEvent event) { if (event.getSelectedItem() != null) { ReplaceElement re = event.getSelectedItem(); Log.debug("Condition selected:" + re.toString()); switch (re.getReplaceType()) { case Value: comboColumns.clear(); comboColumns.setVisible(false); firstArg.setVisible(true); firstArg.setEmptyText(EMPTY_TEXT_INSERT_A_STRING); secondArg.setVisible(false); secondArg.setEmptyText(""); break; case ColumnValue: case Upper: case Lower: case Trim: case MD5: comboColumns.clear(); comboColumns.setVisible(true); firstArg.setVisible(false); firstArg.setEmptyText(""); secondArg.setVisible(false); secondArg.setEmptyText(""); break; case Concat: case Addition: case Subtraction: case Modulus: case Multiplication: case Division: break; case SubstringByRegex: comboColumns.clear(); comboColumns.setVisible(true); firstArg.setVisible(true); firstArg.setEmptyText(EMPTY_TEXT_REGEXP); secondArg.setVisible(false); secondArg.setEmptyText(""); break; case SubstringByIndex: comboColumns.clear(); comboColumns.setVisible(true); firstArg.setVisible(true); firstArg.setEmptyText(EMPTY_TEXT_FROM_INDEX); secondArg.setVisible(true); secondArg.setEmptyText(EMPTY_TEXT_TO_INDEX); break; case SubstringByCharSeq: comboColumns.clear(); comboColumns.setVisible(true); firstArg.setVisible(true); firstArg.setEmptyText(EMPTY_TEXT_FROM_STRING); secondArg.setVisible(true); secondArg.setEmptyText(EMPTY_TEXT_TO_STRING); break; case TextReplaceMatchingRegex: comboColumns.clear(); comboColumns.setVisible(true); firstArg.setVisible(true); firstArg.setEmptyText(EMPTY_TEXT_REPLACE_REGEXP); secondArg.setVisible(true); secondArg .setEmptyText(EMPTY_TEXT_REPLACE_REPLACING); break; default: break; } vert.forceLayout(); thisCont.forceLayout(); } } }); comboReplaceElementsLeaf.setEmptyText("Select..."); comboReplaceElementsLeaf.setItemId(itemIdComboLeaf); comboReplaceElementsLeaf.setWidth(COMBO_WIDTH); comboReplaceElementsLeaf.setEditable(false); comboReplaceElementsLeaf.setTriggerAction(TriggerAction.ALL); // ComboOperations ListStore storeReplaceElementsOperations = new ListStore( props.id()); Log.debug("Store Operations: " + storeReplaceElementsOperations); if (arithmeticColumns == null || arithmeticColumns.size() < 1) { storeReplaceElementsOperations .addAll(factory.replaceElementsOperationsNoArithmetic); } else { storeReplaceElementsOperations .addAll(factory.replaceElementsOperations); } Log.debug("Store created"); final ComboBox comboReplaceElementsOperations = new ComboBox( storeReplaceElementsOperations, props.label()); Log.debug("Combo created"); comboReplaceElementsOperations .addSelectionHandler(new SelectionHandler() { public void onSelection(SelectionEvent event) { if (event.getSelectedItem() != null) { @SuppressWarnings("unchecked") ComboBox source = (ComboBox) event .getSource(); ReplaceElement re = event.getSelectedItem(); Log.debug("Condition selected:" + re.toString()); switch (re.getReplaceType()) { case Value: comboReplaceElementsLeaf.setVisible(false); comboColumns.clear(); comboColumns.setVisible(false); firstArg.setEmptyText(EMPTY_TEXT_INSERT_A_STRING); firstArg.setVisible(true); secondArg.setVisible(false); secondArg.setEmptyText(""); removeOperation(source); break; case ColumnValue: case Upper: case Lower: case Trim: case MD5: comboReplaceElementsLeaf.setVisible(false); storeColumns.clear(); storeColumns.addAll(columns); storeColumns.commitChanges(); comboColumns.clear(); comboColumns.setVisible(true); firstArg.setVisible(false); firstArg.setEmptyText(""); secondArg.setVisible(false); secondArg.setEmptyText(""); removeOperation(source); break; case Concat: comboReplaceElementsLeaf.clear(); comboReplaceElementsLeaf.reset(); comboReplaceElementsLeaf.getStore().clear(); comboReplaceElementsLeaf.getStore().addAll( factory.replaceElements); comboReplaceElementsLeaf.getStore() .commitChanges(); comboReplaceElementsLeaf.setVisible(true); comboReplaceElementsLeaf.redraw(); storeColumns.clear(); storeColumns.addAll(columns); storeColumns.commitChanges(); comboColumns.clear(); comboColumns.setVisible(false); firstArg.setVisible(false); firstArg.setEmptyText(""); secondArg.setVisible(false); secondArg.setEmptyText(""); if (!existOperation(source)) { addOperation(); } break; case Addition: case Subtraction: case Modulus: case Multiplication: case Division: comboReplaceElementsLeaf.clear(); comboReplaceElementsLeaf.reset(); comboReplaceElementsLeaf.getStore().clear(); comboReplaceElementsLeaf.getStore().addAll( factory.replaceElementsArithmetic); comboReplaceElementsLeaf.getStore() .commitChanges(); comboReplaceElementsLeaf.setVisible(true); comboReplaceElementsLeaf.redraw(); storeColumns.clear(); storeColumns.addAll(arithmeticColumns); storeColumns.commitChanges(); comboColumns.clear(); comboColumns.setVisible(false); firstArg.setVisible(false); firstArg.setEmptyText(""); secondArg.setVisible(false); secondArg.setEmptyText(""); if (!existOperation(source)) { addOperation(); } break; case SubstringByRegex: comboReplaceElementsLeaf.setVisible(false); storeColumns.clear(); storeColumns.addAll(columns); storeColumns.commitChanges(); comboColumns.clear(); comboColumns.setVisible(true); firstArg.setVisible(true); firstArg.setEmptyText(EMPTY_TEXT_REGEXP); secondArg.setVisible(false); secondArg.setEmptyText(""); removeOperation(source); break; case SubstringByIndex: comboReplaceElementsLeaf.setVisible(false); storeColumns.clear(); storeColumns.addAll(columns); storeColumns.commitChanges(); comboColumns.clear(); comboColumns.setVisible(true); firstArg.setVisible(true); firstArg.setEmptyText(EMPTY_TEXT_FROM_INDEX); secondArg.setVisible(true); secondArg.setEmptyText(EMPTY_TEXT_TO_INDEX); removeOperation(source); break; case SubstringByCharSeq: comboReplaceElementsLeaf.setVisible(false); storeColumns.clear(); storeColumns.addAll(columns); storeColumns.commitChanges(); comboColumns.clear(); comboColumns.setVisible(true); firstArg.setVisible(true); firstArg.setEmptyText(EMPTY_TEXT_FROM_STRING); secondArg.setVisible(true); secondArg.setEmptyText(EMPTY_TEXT_TO_STRING); removeOperation(source); break; case TextReplaceMatchingRegex: comboReplaceElementsLeaf.setVisible(false); storeColumns.clear(); storeColumns.addAll(columns); storeColumns.commitChanges(); comboColumns.clear(); comboColumns.setVisible(true); firstArg.setVisible(true); firstArg.setEmptyText(EMPTY_TEXT_REPLACE_REGEXP); secondArg.setVisible(true); secondArg .setEmptyText(EMPTY_TEXT_REPLACE_REPLACING); removeOperation(source); break; default: break; } vert.forceLayout(); thisCont.forceLayout(); } } }); comboReplaceElementsOperations.setEmptyText("Select..."); comboReplaceElementsOperations.setItemId(itemIdComboConcat); comboReplaceElementsOperations.setWidth(COMBO_WIDTH); comboReplaceElementsOperations.setEditable(false); comboReplaceElementsOperations.setTriggerAction(TriggerAction.ALL); comboReplaceElementsOperations.setValue( storeReplaceElementsOperations.get(0), true); // horiz.add(comboReplaceElementsOperations, new BoxLayoutData( new Margins(0))); horiz.add(comboReplaceElementsLeaf, new BoxLayoutData(new Margins(0))); horiz.add(comboColumns, new BoxLayoutData(new Margins(0))); horiz.add(firstArg, new BoxLayoutData(new Margins(0))); horiz.add(secondArg, new BoxLayoutData(new Margins(0))); horiz.setItemId(itemIdHoriz); vert.add(horiz, new VerticalLayoutData(1, -1, new Margins(1))); add(vert, new MarginData(0)); firstArg.setVisible(true); secondArg.setVisible(false); comboColumns.setVisible(false); comboReplaceElementsLeaf.setVisible(false); comboReplaceElementsOperations.setVisible(true); forceLayout(); } protected void addOperation() { final HBoxLayoutContainer horiz = new HBoxLayoutContainer(); final TextField firstArg = new TextField(); firstArg.setItemId(itemIdFirstArg); final TextField secondArg = new TextField(); secondArg.setItemId(itemIdSecondArg); // Combo Column ColumnDataPropertiesCombo propsColumnData = GWT .create(ColumnDataPropertiesCombo.class); final ListStore storeColumns = new ListStore( propsColumnData.id()); Log.debug("Store Columns: " + storeColumns); storeColumns.addAll(columns); final ComboBox comboColumns = new ComboBox( storeColumns, propsColumnData.label()); Log.debug("Combo Columns created"); comboColumns.setEmptyText("Select Column..."); comboColumns.setItemId(itemIdComboColumns); comboColumns.setWidth(COMBO_WIDTH); comboColumns.setEditable(false); comboColumns.setTriggerAction(TriggerAction.ALL); // final ReplaceElementStore factory = new ReplaceElementStore(); ReplaceElementProperties props = GWT .create(ReplaceElementProperties.class); Log.debug("Props: " + props); // Combo Leaf ListStore storeReplaceElementsLeaf = new ListStore( props.id()); Log.debug("Store Leaf: " + storeReplaceElementsLeaf); storeReplaceElementsLeaf.addAll(factory.replaceElements); Log.debug("Store created"); final ComboBox comboReplaceElementsLeaf = new ComboBox( storeReplaceElementsLeaf, props.label()); Log.debug("Combo created"); comboReplaceElementsLeaf .addSelectionHandler(new SelectionHandler() { public void onSelection(SelectionEvent event) { if (event.getSelectedItem() != null) { ReplaceElement re = event.getSelectedItem(); Log.debug("Condition selected:" + re.toString()); switch (re.getReplaceType()) { case Value: comboColumns.clear(); comboColumns.setVisible(false); firstArg.setVisible(true); firstArg.setEmptyText(EMPTY_TEXT_INSERT_A_STRING); secondArg.setVisible(false); secondArg.setEmptyText(""); break; case ColumnValue: case Upper: case Lower: case Trim: case MD5: comboColumns.clear(); comboColumns.setVisible(true); firstArg.setVisible(false); firstArg.setEmptyText(""); secondArg.setVisible(false); secondArg.setEmptyText(""); break; case Concat: case Addition: case Subtraction: case Modulus: case Multiplication: case Division: break; case SubstringByRegex: comboColumns.clear(); comboColumns.setVisible(true); firstArg.setVisible(true); firstArg.setEmptyText(EMPTY_TEXT_REGEXP); secondArg.setVisible(false); secondArg.setEmptyText(""); break; case SubstringByIndex: comboColumns.clear(); comboColumns.setVisible(true); firstArg.setVisible(true); firstArg.setEmptyText(EMPTY_TEXT_FROM_INDEX); secondArg.setVisible(true); secondArg.setEmptyText(EMPTY_TEXT_TO_INDEX); break; case SubstringByCharSeq: comboColumns.clear(); comboColumns.setVisible(true); firstArg.setVisible(true); firstArg.setEmptyText(EMPTY_TEXT_FROM_STRING); secondArg.setVisible(true); secondArg.setEmptyText(EMPTY_TEXT_TO_STRING); break; case TextReplaceMatchingRegex: comboColumns.clear(); comboColumns.setVisible(true); firstArg.setVisible(true); firstArg.setEmptyText(EMPTY_TEXT_REPLACE_REGEXP); secondArg.setVisible(true); secondArg .setEmptyText(EMPTY_TEXT_REPLACE_REPLACING); break; default: break; } vert.forceLayout(); thisCont.forceLayout(); } } }); comboReplaceElementsLeaf.setEmptyText("Select..."); comboReplaceElementsLeaf.setItemId(itemIdComboLeaf); comboReplaceElementsLeaf.setWidth(COMBO_WIDTH); comboReplaceElementsLeaf.setEditable(false); comboReplaceElementsLeaf.setTriggerAction(TriggerAction.ALL); // ComboOperations ListStore storeReplaceElementsOperations = new ListStore( props.id()); Log.debug("Store Concat: " + storeReplaceElementsOperations); if (arithmeticColumns == null || arithmeticColumns.size() < 1) { storeReplaceElementsOperations .addAll(factory.replaceElementsOperationsNoArithmetic); } else { storeReplaceElementsOperations .addAll(factory.replaceElementsOperations); } Log.debug("Store created"); final ComboBox comboReplaceElementsOperations = new ComboBox( storeReplaceElementsOperations, props.label()); Log.debug("Combo created"); comboReplaceElementsOperations .addSelectionHandler(new SelectionHandler() { public void onSelection(SelectionEvent event) { if (event.getSelectedItem() != null) { @SuppressWarnings("unchecked") ComboBox source = (ComboBox) event .getSource(); ReplaceElement re = event.getSelectedItem(); Log.debug("Condition selected:" + re.toString()); switch (re.getReplaceType()) { case Value: comboReplaceElementsLeaf.setVisible(false); comboColumns.clear(); comboColumns.setVisible(false); firstArg.setEmptyText(EMPTY_TEXT_INSERT_A_STRING); firstArg.setVisible(true); secondArg.setVisible(false); secondArg.setEmptyText(""); removeOperation(source); break; case ColumnValue: case Upper: case Lower: case Trim: case MD5: comboReplaceElementsLeaf.setVisible(false); storeColumns.clear(); storeColumns.addAll(columns); storeColumns.commitChanges(); comboColumns.clear(); comboColumns.setVisible(true); firstArg.setVisible(false); firstArg.setEmptyText(""); secondArg.setVisible(false); secondArg.setEmptyText(""); removeOperation(source); break; case Concat: comboReplaceElementsLeaf.clear(); comboReplaceElementsLeaf.reset(); comboReplaceElementsLeaf.getStore().clear(); comboReplaceElementsLeaf.getStore().addAll( factory.replaceElements); comboReplaceElementsLeaf.getStore() .commitChanges(); comboReplaceElementsLeaf.setVisible(true); comboReplaceElementsLeaf.redraw(); storeColumns.clear(); storeColumns.addAll(columns); storeColumns.commitChanges(); comboColumns.clear(); comboColumns.setVisible(false); firstArg.setVisible(false); firstArg.setEmptyText(""); secondArg.setVisible(false); secondArg.setEmptyText(""); if (!existOperation(source)) { addOperation(); } break; case Addition: case Subtraction: case Modulus: case Multiplication: case Division: comboReplaceElementsLeaf.clear(); comboReplaceElementsLeaf.reset(); comboReplaceElementsLeaf.getStore().clear(); comboReplaceElementsLeaf.getStore().addAll( factory.replaceElementsArithmetic); comboReplaceElementsLeaf.getStore() .commitChanges(); comboReplaceElementsLeaf.setVisible(true); comboReplaceElementsLeaf.redraw(); storeColumns.clear(); storeColumns.addAll(arithmeticColumns); storeColumns.commitChanges(); comboColumns.clear(); comboColumns.setVisible(false); firstArg.setVisible(false); firstArg.setEmptyText(""); secondArg.setVisible(false); secondArg.setEmptyText(""); if (!existOperation(source)) { addOperation(); } break; case SubstringByRegex: comboReplaceElementsLeaf.setVisible(false); storeColumns.clear(); storeColumns.addAll(columns); storeColumns.commitChanges(); comboColumns.clear(); comboColumns.setVisible(true); firstArg.setVisible(true); firstArg.setEmptyText(EMPTY_TEXT_REGEXP); secondArg.setVisible(false); secondArg.setEmptyText(""); removeOperation(source); break; case SubstringByIndex: comboReplaceElementsLeaf.setVisible(false); storeColumns.clear(); storeColumns.addAll(columns); storeColumns.commitChanges(); comboColumns.clear(); comboColumns.setVisible(true); firstArg.setVisible(true); firstArg.setEmptyText(EMPTY_TEXT_FROM_INDEX); secondArg.setVisible(true); secondArg.setEmptyText(EMPTY_TEXT_TO_INDEX); removeOperation(source); break; case SubstringByCharSeq: comboReplaceElementsLeaf.setVisible(false); storeColumns.clear(); storeColumns.addAll(columns); storeColumns.commitChanges(); comboColumns.clear(); comboColumns.setVisible(true); firstArg.setVisible(true); firstArg.setEmptyText(EMPTY_TEXT_FROM_STRING); secondArg.setVisible(true); secondArg.setEmptyText(EMPTY_TEXT_TO_STRING); removeOperation(source); break; case TextReplaceMatchingRegex: comboReplaceElementsLeaf.setVisible(false); storeColumns.clear(); storeColumns.addAll(columns); storeColumns.commitChanges(); comboColumns.clear(); comboColumns.setVisible(true); firstArg.setVisible(true); firstArg.setEmptyText(EMPTY_TEXT_REPLACE_REGEXP); secondArg.setVisible(true); secondArg .setEmptyText(EMPTY_TEXT_REPLACE_REPLACING); removeOperation(source); break; default: break; } vert.forceLayout(); thisCont.forceLayout(); } } }); comboReplaceElementsOperations.setEmptyText("Select..."); comboReplaceElementsOperations.setItemId(itemIdComboConcat); comboReplaceElementsOperations.setWidth(COMBO_WIDTH); comboReplaceElementsOperations.setEditable(false); comboReplaceElementsOperations.setTriggerAction(TriggerAction.ALL); comboReplaceElementsOperations.setValue( storeReplaceElementsOperations.get(0), true); // horiz.add(comboReplaceElementsOperations, new BoxLayoutData( new Margins(0))); horiz.add(comboReplaceElementsLeaf, new BoxLayoutData(new Margins(0))); horiz.add(comboColumns, new BoxLayoutData(new Margins(0))); horiz.add(firstArg, new BoxLayoutData(new Margins(0))); horiz.add(secondArg, new BoxLayoutData(new Margins(0))); horiz.setItemId(itemIdHoriz); vert.add(horiz, new VerticalLayoutData(1, -1, new Margins(1))); firstArg.setVisible(true); secondArg.setVisible(false); comboColumns.setVisible(false); comboReplaceElementsLeaf.setVisible(false); comboReplaceElementsOperations.setVisible(true); forceLayout(); } private void removeOperation(ComboBox source) { HBoxLayoutContainer horiz = (HBoxLayoutContainer) source.getParent(); int index = vert.getWidgetIndex(horiz); Log.debug("No concat for index: " + index); index++; for (int i = index; i < vert.getWidgetCount();) { Log.debug("Remove horiz index: " + i); vert.remove(i); } } private boolean existOperation(ComboBox source) { boolean exist = false; HBoxLayoutContainer horiz = (HBoxLayoutContainer) source.getParent(); int index = vert.getWidgetIndex(horiz); Log.debug("No concat for index: " + index); index++; if (index < vert.getWidgetCount()) { exist = true; } else { exist = false; } return exist; } public C_Expression getExpression() throws ReplaceTypeMapException { ExpressionContainer expressionContainer = null; readableExpression = new String(); C_Expression expression = null; if (vert.getWidgetCount() > 0) { int index = 0; ColumnDataType targetType = targetColumnType; expressionContainer = calcCExpression(index, targetType); if (expressionContainer != null) { readableExpression = expressionContainer .getReadableExpression(); expression = expressionContainer.getExpression(); } else { } } Log.debug("ReadableExpression: " + readableExpression); Log.debug("C_Expression:" + expression); return expression; } public String getReadableExpression() { return readableExpression; } protected ExpressionContainer calcCExpression(int index, ColumnDataType targetType) throws ReplaceTypeMapException { ExpressionContainer expressionContainer = null; ExpressionContainer expContainerOperation = null; C_Expression exp = null; C_Expression expLeaf = null; String readableExp = ""; String readableExpLeaf = ""; TextField firstArg; TextField secondArg; HBoxLayoutContainer horiz; ReplaceTypeMap mapReplace = new ReplaceTypeMap(); horiz = (HBoxLayoutContainer) vert.getWidget(index); @SuppressWarnings("unchecked") ComboBox comboOperations = (ComboBox) horiz .getItemByItemId(itemIdComboConcat); Log.debug("combo Concat: " + comboOperations.getCurrentValue()); @SuppressWarnings("unchecked") ComboBox comboLeaf = (ComboBox) horiz .getItemByItemId(itemIdComboLeaf); Log.debug("combo Leaf: " + comboLeaf.getCurrentValue()); @SuppressWarnings("unchecked") ComboBox comboColumns = (ComboBox) horiz .getItemByItemId(itemIdComboColumns); Log.debug("combo columns: " + comboColumns.getCurrentValue()); ColumnData columnOfCombo = comboColumns.getCurrentValue(); firstArg = (TextField) horiz.getItemByItemId(itemIdFirstArg); secondArg = (TextField) horiz.getItemByItemId(itemIdSecondArg); Log.debug("[combo column: " + columnOfCombo + ", firstArg: " + firstArg.getCurrentValue() + ", secondArg: " + secondArg.getCurrentValue() + "]"); ReplaceType comboOperationsReplaceType = null; ReplaceType comboLeafReplaceType = null; if (comboOperations.getCurrentValue() == null) { throw new ReplaceTypeMapException("Fill all field!"); } else { comboOperationsReplaceType = comboOperations.getCurrentValue() .getReplaceType(); if (comboOperationsReplaceType.compareTo(ReplaceType.Concat) == 0) { if (comboLeaf.getCurrentValue() == null) { throw new ReplaceTypeMapException("Fill all field!"); } else { comboLeafReplaceType = comboLeaf.getCurrentValue() .getReplaceType(); /* * ColumnDataType cType = ColumnDataType * .getColumnDataTypeFromId(column.getDataTypeName()); */ switch (replaceExpressionType) { case Replace: case AddColumn: expLeaf = mapReplace.map( columnOfCombo, ColumnDataType.Text, comboLeafReplaceType, firstArg == null ? null : firstArg .getCurrentValue(), secondArg == null ? null : secondArg .getCurrentValue(), false); break; case Template: expLeaf = mapReplace.map( columnOfCombo, ColumnDataType.Text, comboLeafReplaceType, firstArg == null ? null : firstArg .getCurrentValue(), secondArg == null ? null : secondArg .getCurrentValue(), true); break; default: expLeaf = mapReplace.map( columnOfCombo, ColumnDataType.Text, comboLeafReplaceType, firstArg == null ? null : firstArg .getCurrentValue(), secondArg == null ? null : secondArg .getCurrentValue(), false); break; } readableExpLeaf = expLeaf.getReadableExpression(); } index++; if (index < vert.getWidgetCount()) { expContainerOperation = calcCExpression(index, ColumnDataType.Text); if (expContainerOperation == null) { return null; } else { switch (replaceExpressionType) { case Replace: case AddColumn: exp = mapReplace.map( columnOfCombo, targetType, comboOperationsReplaceType, firstArg == null ? null : firstArg .getCurrentValue(), secondArg == null ? null : secondArg .getCurrentValue(), false, expLeaf, expContainerOperation.getExpression(), readableExpLeaf, expContainerOperation .getReadableExpression()); break; case Template: exp = mapReplace.map( columnOfCombo, targetType, comboOperationsReplaceType, firstArg == null ? null : firstArg .getCurrentValue(), secondArg == null ? null : secondArg .getCurrentValue(), true, expLeaf, expContainerOperation.getExpression(), readableExpLeaf, expContainerOperation .getReadableExpression()); break; default: exp = mapReplace.map( columnOfCombo, targetType, comboOperationsReplaceType, firstArg == null ? null : firstArg .getCurrentValue(), secondArg == null ? null : secondArg .getCurrentValue(), false, expLeaf, expContainerOperation.getExpression(), readableExpLeaf, expContainerOperation .getReadableExpression()); break; } readableExp = exp.getReadableExpression(); expressionContainer = new ExpressionContainer(exp, readableExp); } } else { return null; } } else { if (comboOperationsReplaceType.compareTo(ReplaceType.Addition) == 0 || comboOperationsReplaceType .compareTo(ReplaceType.Subtraction) == 0 || comboOperationsReplaceType .compareTo(ReplaceType.Modulus) == 0 || comboOperationsReplaceType .compareTo(ReplaceType.Multiplication) == 0 || comboOperationsReplaceType .compareTo(ReplaceType.Division) == 0) { ColumnDataType cType; if (comboLeaf.getCurrentValue() == null) { throw new ReplaceTypeMapException("Fill all field!"); } else { comboLeafReplaceType = comboLeaf.getCurrentValue() .getReplaceType(); if(columnOfCombo==null){ throw new ReplaceTypeMapException("Selected a valid column!"); } cType = ColumnDataType.getColumnDataTypeFromId(columnOfCombo .getDataTypeName()); switch (replaceExpressionType) { case Replace: case AddColumn: expLeaf = mapReplace.map( columnOfCombo, cType, comboLeafReplaceType, firstArg == null ? null : firstArg .getCurrentValue(), secondArg == null ? null : secondArg .getCurrentValue(), false); break; case Template: expLeaf = mapReplace.map( columnOfCombo, cType, comboLeafReplaceType, firstArg == null ? null : firstArg .getCurrentValue(), secondArg == null ? null : secondArg .getCurrentValue(), true); break; default: expLeaf = mapReplace.map( columnOfCombo, cType, comboLeafReplaceType, firstArg == null ? null : firstArg .getCurrentValue(), secondArg == null ? null : secondArg .getCurrentValue(), false); break; } readableExpLeaf = expLeaf.getReadableExpression(); } index++; if (index < vert.getWidgetCount()) { expContainerOperation = calcCExpression(index, cType); if (expContainerOperation == null) { return null; } else { switch (replaceExpressionType) { case Replace: case AddColumn: exp = mapReplace.map( columnOfCombo, targetType, comboOperationsReplaceType, firstArg == null ? null : firstArg .getCurrentValue(), secondArg == null ? null : secondArg .getCurrentValue(), false, expLeaf, expContainerOperation .getExpression(), readableExpLeaf, expContainerOperation .getReadableExpression()); break; case Template: exp = mapReplace.map( columnOfCombo, targetType, comboOperationsReplaceType, firstArg == null ? null : firstArg .getCurrentValue(), secondArg == null ? null : secondArg .getCurrentValue(), true, expLeaf, expContainerOperation .getExpression(), readableExpLeaf, expContainerOperation .getReadableExpression()); break; default: exp = mapReplace.map( columnOfCombo, targetType, comboOperationsReplaceType, firstArg == null ? null : firstArg .getCurrentValue(), secondArg == null ? null : secondArg .getCurrentValue(), false, expLeaf, expContainerOperation .getExpression(), readableExpLeaf, expContainerOperation .getReadableExpression()); break; } readableExp = exp.getReadableExpression(); expressionContainer = new ExpressionContainer(exp, readableExp); } } else { return null; } } else { switch (replaceExpressionType) { case Replace: case AddColumn: exp = mapReplace.map( columnOfCombo, targetType, comboOperationsReplaceType, firstArg == null ? null : firstArg .getCurrentValue(), secondArg == null ? null : secondArg .getCurrentValue(), false); break; case Template: exp = mapReplace.map( columnOfCombo, targetType, comboOperationsReplaceType, firstArg == null ? null : firstArg .getCurrentValue(), secondArg == null ? null : secondArg .getCurrentValue(), true); break; default: exp = mapReplace.map( columnOfCombo, targetType, comboOperationsReplaceType, firstArg == null ? null : firstArg .getCurrentValue(), secondArg == null ? null : secondArg .getCurrentValue(), false); break; } readableExp = exp.getReadableExpression(); expressionContainer = new ExpressionContainer(exp, readableExp); } } } return expressionContainer; } }