Updated Multi Column Condition

git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/user/tabular-data-expression-widget@114718 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
Giancarlo Panichi 2015-05-11 16:38:54 +00:00
parent 756bdd7b98
commit 69c6691c57
9 changed files with 1150 additions and 151 deletions

View File

@ -24,20 +24,18 @@
<!-- Specify the app entry point class. -->
<!-- <entry-point
class='org.gcube.portlets.user.td.expressionwidget.client.ExpressionWidgetEntry' /> -->
<!-- <entry-point class='org.gcube.portlets.user.td.expressionwidget.client.ExpressionWidgetEntry'
/> -->
<!--
<set-property name="log_ConsoleLogger" value="ENABLED" /> <set-property
<!-- <set-property name="log_ConsoleLogger" value="ENABLED" /> <set-property
name="log_DivLogger" value="ENABLED" /> <set-property name="log_GWTLogger"
value="ENABLED" /> <set-property name="log_SystemLogger" value="ENABLED"
/> -->
<set-property name="log_ConsoleLogger" value="DISABLED" />
<set-property name="log_DivLogger" value="DISABLED" />
<set-property name="log_GWTLogger" value="DISABLED" />
<set-property name="log_SystemLogger" value="DISABLED" />
<set-property name="log_SystemLogger" value="DISABLED" />
<!-- Specify the paths for translatable code -->
<source path='client' />

View File

@ -41,7 +41,7 @@ public class ExpressionWidgetEntry implements EntryPoint {
EventBus eventBus= new SimpleEventBus();
trId = new TRId("86", TabResourceType.STANDARD, "1159");
String columnName="zwqvvx";
/*String columnName="zwqvvx";*/
// Column Expression Dialog
// ColumnExpressionDialog expressionDialog=new
@ -51,9 +51,9 @@ public class ExpressionWidgetEntry implements EntryPoint {
// Column Filter Dialog
// id=2, tableId=8, tableType=Generic
ColumnFilterDialog columnFilterDialog=new ColumnFilterDialog(trId,
columnName, eventBus);
columnFilterDialog.show();
//ColumnFilterDialog columnFilterDialog=new ColumnFilterDialog(trId,
// columnName, eventBus);
//columnFilterDialog.show();
// Multi Column Filter Dialog
// MultiColumnFilterDialog multiColumnFilterDialog= new
@ -77,9 +77,9 @@ public class ExpressionWidgetEntry implements EntryPoint {
//ReplaceExpressionDialog(columnMockUp,trId,eventBus);
//replaceExpressionDialog.show();
/*MultiColumnFilterDialog cond = new MultiColumnFilterDialog(trId, eventBus);
MultiColumnFilterDialog cond = new MultiColumnFilterDialog(trId, eventBus);
cond.show();
*/
}

View File

@ -65,7 +65,7 @@ public class MultiColumnExpressionPanel extends FramedPanel {
ColumnFilter, RowDeleteByExpression, Template, Rule;
}
private static final String WIDTH = "888px";
private static final String WIDTH = "920px";
private static final String HEIGHT = "352px";
private static final String RULE_HEIGHT = "388px";
@ -569,9 +569,6 @@ public class MultiColumnExpressionPanel extends FramedPanel {
}
});
if (column == null) {
btnApply.disable();
}
btnClose = new TextButton("Close");
btnClose.setIcon(ExpressionResources.INSTANCE.close());
@ -750,8 +747,7 @@ public class MultiColumnExpressionPanel extends FramedPanel {
condContainer = new C_ExpressionContainer();
condContainer.setId(C_ExpressionContainer.Contains.C_Expression);
condContainer.setExp(exp);
condContainer.setReadableExpression(conditionWidget
.getReadableExpression());
condContainer.setReadableExpression(exp.getReadableExpression());
exWrapper = new ExpressionWrapper(column.getTrId(), column,
condContainer);

View File

@ -37,7 +37,7 @@ import com.sencha.gxt.widget.core.client.event.SelectEvent.SelectHandler;
*
*/
public class MultiColumnFilterDialog extends Window implements MonitorDialogListener {
private static final String WIDTH = "900px";
private static final String WIDTH = "932px";
private static final String HEIGHT = "388px";
private MultiColumnExpressionPanel multiColumnExpressionPanel;
private C_Expression exp = null;

View File

@ -3,15 +3,16 @@ package org.gcube.portlets.user.td.expressionwidget.client.expression;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Stack;
import org.gcube.portlets.user.td.expressionwidget.client.custom.IconButton;
import org.gcube.portlets.user.td.expressionwidget.client.multicolumn.ArgType;
import org.gcube.portlets.user.td.expressionwidget.client.multicolumn.ArgTypePropertiesCombo;
import org.gcube.portlets.user.td.expressionwidget.client.multicolumn.DepthOfExpressionElement;
import org.gcube.portlets.user.td.expressionwidget.client.multicolumn.DepthOfExpressionElementPropertiesCombo;
import org.gcube.portlets.user.td.expressionwidget.client.multicolumn.DepthOfExpressionStore;
import org.gcube.portlets.user.td.expressionwidget.client.multicolumn.DepthOfExpressionType;
import org.gcube.portlets.user.td.expressionwidget.client.multicolumn.DepthOfExpressionElementPropertiesCombo;
import org.gcube.portlets.user.td.expressionwidget.client.multicolumn.LogicalDepth;
import org.gcube.portlets.user.td.expressionwidget.client.operation.Operation;
import org.gcube.portlets.user.td.expressionwidget.client.operation.OperationProperties;
import org.gcube.portlets.user.td.expressionwidget.client.operation.OperationsStore;
@ -20,8 +21,9 @@ import org.gcube.portlets.user.td.expressionwidget.client.resources.ExpressionRe
import org.gcube.portlets.user.td.expressionwidget.client.threshold.Threshold;
import org.gcube.portlets.user.td.expressionwidget.client.threshold.ThresholdProperties;
import org.gcube.portlets.user.td.expressionwidget.client.threshold.ThresholdStore;
import org.gcube.portlets.user.td.expressionwidget.shared.condition.ConditionTypeMap;
import org.gcube.portlets.user.td.expressionwidget.shared.condition.ConditionOnMultiColumnTypeMap;
import org.gcube.portlets.user.td.expressionwidget.shared.exception.ConditionTypeMapException;
import org.gcube.portlets.user.td.monitorwidget.client.utils.UtilsGXT3;
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;
@ -57,10 +59,9 @@ import com.sencha.gxt.widget.core.client.form.TextField;
*/
public class ConditionOnMultiColumnWidget extends SimpleContainer {
private static final String SIGN = "ConditionOnMultiColumns";
private static final String HEIGHT = "268px";
private static final String WIDTH = "612px";
private static final String WIDTH = "664px";
private static final String COMBO_DEPTH_WIDTH = "64px";
private static final String COMBO_FIRST_ELEMENT_COLUMN_WIDTH = "150px";
private static final String COMBO_OPERATOR_WIDTH = "130px";
@ -69,9 +70,7 @@ public class ConditionOnMultiColumnWidget extends SimpleContainer {
private static final String COMBO_SECOND_ARG_TYPE_WIDTH = "80px";
private static final String COMBO_SECOND_ARG_COLUMN_WIDTH = "150px";
private static final String COMBO_THRESHOLD_WIDTH = "50px";
private String itemIdComboDepth;
private String itemIdFirstElementColumn;
@ -94,7 +93,7 @@ public class ConditionOnMultiColumnWidget extends SimpleContainer {
private VerticalLayoutContainer vert;
private ArrayList<ColumnData> columns;
private String readableExpression;
// private String readableExpression;
// private ConditionOnMultiColumnWidget thisCont;
@ -353,8 +352,50 @@ public class ConditionOnMultiColumnWidget extends SimpleContainer {
public void onClick(ClickEvent event) {
Log.debug("Clicked btnAdd");
addCondition();
vert.forceLayout();
DepthOfExpressionElement depthElement = comboDepth
.getCurrentValue();
if (depthElement == null) {
Log.debug("Depth Selected: null");
Log.debug("No Add possible, if And or Or are not set");
UtilsGXT3.alert("Attention",
"Select And or Or if you want add a condition!");
return;
}
DepthOfExpressionType depth = depthElement.getType();
if (depth == null) {
Log.debug("Depth Selected: null");
Log.debug("No Add possible, if And or Or are not set");
UtilsGXT3.alert("Attention",
"Select And or Or if you want add a condition!");
} else {
Log.debug("Depth Selected: " + depth.getLabel());
switch (depth) {
case BOTTOM:
case COMMA:
case ENDAND:
case ENDOR:
Log.debug("No Add possible, if And or Or are not set");
UtilsGXT3
.alert("Attention",
"Select And or Or if you want add a condition!");
break;
case STARTAND:
case STARTOR:
addCondition();
vert.forceLayout();
break;
default:
Log.debug("No Add possible, if And or Or are not set");
UtilsGXT3
.alert("Attention",
"Select And or Or if you want add a condition!");
break;
}
}
}
});
@ -395,8 +436,9 @@ public class ConditionOnMultiColumnWidget extends SimpleContainer {
DepthOfExpressionElement depthElement = event
.getSelectedItem();
DepthOfExpressionType depth = depthElement.getType();
DepthOfExpressionType depth = depthElement
.getType();
if (depth == null) {
Log.debug("Depth Selected: null");
@ -424,7 +466,7 @@ public class ConditionOnMultiColumnWidget extends SimpleContainer {
secondArgDate.setVisible(false);
thresholdText.setVisible(false);
comboThreshold.setVisible(false);
btnAdd.setVisible(false);
btnAdd.setVisible(true);
btnDel.setVisible(false);
removeCondition(source);
break;
@ -451,7 +493,7 @@ public class ConditionOnMultiColumnWidget extends SimpleContainer {
secondArgDate.setVisible(false);
thresholdText.setVisible(false);
comboThreshold.setVisible(false);
btnAdd.setVisible(false);
btnAdd.setVisible(true);
btnDel.setVisible(false);
if (!existCondition(source)) {
addCondition();
@ -567,7 +609,7 @@ public class ConditionOnMultiColumnWidget extends SimpleContainer {
secondArgDate.setVisible(false);
thresholdText.setVisible(false);
comboThreshold.setVisible(false);
btnAdd.setVisible(false);
btnAdd.setVisible(true);
btnDel.setVisible(false);
}
@ -633,7 +675,7 @@ public class ConditionOnMultiColumnWidget extends SimpleContainer {
secondArgDate.setVisible(false);
thresholdText.setVisible(false);
comboThreshold.setVisible(false);
btnAdd.setVisible(false);
btnAdd.setVisible(true);
btnDel.setVisible(false);
break;
case BETWEEN:
@ -652,7 +694,7 @@ public class ConditionOnMultiColumnWidget extends SimpleContainer {
secondArgDate.setVisible(false);
thresholdText.setVisible(false);
comboThreshold.setVisible(false);
btnAdd.setVisible(false);
btnAdd.setVisible(true);
btnDel.setVisible(false);
break;
case LEVENSHTEIN:
@ -675,7 +717,7 @@ public class ConditionOnMultiColumnWidget extends SimpleContainer {
secondArgDate.setVisible(false);
thresholdText.setVisible(true);
comboThreshold.setVisible(true);
btnAdd.setVisible(false);
btnAdd.setVisible(true);
btnDel.setVisible(false);
comboThreshold.setValue(ThresholdStore
@ -702,7 +744,7 @@ public class ConditionOnMultiColumnWidget extends SimpleContainer {
secondArgDate.setVisible(false);
thresholdText.setVisible(true);
comboThreshold.setVisible(true);
btnAdd.setVisible(false);
btnAdd.setVisible(true);
btnDel.setVisible(false);
comboThreshold.setValue(ThresholdStore
@ -722,7 +764,7 @@ public class ConditionOnMultiColumnWidget extends SimpleContainer {
secondArgDate.setVisible(false);
thresholdText.setVisible(false);
comboThreshold.setVisible(false);
btnAdd.setVisible(false);
btnAdd.setVisible(true);
btnDel.setVisible(false);
break;
default:
@ -891,7 +933,7 @@ public class ConditionOnMultiColumnWidget extends SimpleContainer {
secondArgDate.setVisible(false);
thresholdText.setVisible(false);
comboThreshold.setVisible(false);
btnAdd.setVisible(false);
btnAdd.setVisible(true);
btnDel.setVisible(false);
horiz.add(comboDepth, new BoxLayoutData(new Margins(0)));
@ -1159,9 +1201,9 @@ public class ConditionOnMultiColumnWidget extends SimpleContainer {
DepthOfExpressionElement depthElement = event
.getSelectedItem();
DepthOfExpressionType depth = depthElement.getType();
DepthOfExpressionType depth = depthElement
.getType();
if (depth == null) {
Log.debug("Depth Selected: null");
@ -1189,8 +1231,8 @@ public class ConditionOnMultiColumnWidget extends SimpleContainer {
secondArgDate.setVisible(false);
thresholdText.setVisible(false);
comboThreshold.setVisible(false);
btnAdd.setVisible(false);
btnDel.setVisible(false);
btnAdd.setVisible(true);
btnDel.setVisible(true);
removeCondition(source);
break;
case COMMA:
@ -1216,8 +1258,8 @@ public class ConditionOnMultiColumnWidget extends SimpleContainer {
secondArgDate.setVisible(false);
thresholdText.setVisible(false);
comboThreshold.setVisible(false);
btnAdd.setVisible(false);
btnDel.setVisible(false);
btnAdd.setVisible(true);
btnDel.setVisible(true);
if (!existCondition(source)) {
addCondition();
}
@ -1332,8 +1374,8 @@ public class ConditionOnMultiColumnWidget extends SimpleContainer {
secondArgDate.setVisible(false);
thresholdText.setVisible(false);
comboThreshold.setVisible(false);
btnAdd.setVisible(false);
btnDel.setVisible(false);
btnAdd.setVisible(true);
btnDel.setVisible(true);
}
@ -1398,8 +1440,8 @@ public class ConditionOnMultiColumnWidget extends SimpleContainer {
secondArgDate.setVisible(false);
thresholdText.setVisible(false);
comboThreshold.setVisible(false);
btnAdd.setVisible(false);
btnDel.setVisible(false);
btnAdd.setVisible(true);
btnDel.setVisible(true);
break;
case BETWEEN:
case NOT_BETWEEN:
@ -1417,8 +1459,8 @@ public class ConditionOnMultiColumnWidget extends SimpleContainer {
secondArgDate.setVisible(false);
thresholdText.setVisible(false);
comboThreshold.setVisible(false);
btnAdd.setVisible(false);
btnDel.setVisible(false);
btnAdd.setVisible(true);
btnDel.setVisible(true);
break;
case LEVENSHTEIN:
comboFirstArgType.reset();
@ -1440,8 +1482,8 @@ public class ConditionOnMultiColumnWidget extends SimpleContainer {
secondArgDate.setVisible(false);
thresholdText.setVisible(true);
comboThreshold.setVisible(true);
btnAdd.setVisible(false);
btnDel.setVisible(false);
btnAdd.setVisible(true);
btnDel.setVisible(true);
comboThreshold.setValue(ThresholdStore
.defaultThresholdLevenshtein());
@ -1467,8 +1509,8 @@ public class ConditionOnMultiColumnWidget extends SimpleContainer {
secondArgDate.setVisible(false);
thresholdText.setVisible(true);
comboThreshold.setVisible(true);
btnAdd.setVisible(false);
btnDel.setVisible(false);
btnAdd.setVisible(true);
btnDel.setVisible(true);
comboThreshold.setValue(ThresholdStore
.defaultThresholdSimilarity());
@ -1487,8 +1529,8 @@ public class ConditionOnMultiColumnWidget extends SimpleContainer {
secondArgDate.setVisible(false);
thresholdText.setVisible(false);
comboThreshold.setVisible(false);
btnAdd.setVisible(false);
btnDel.setVisible(false);
btnAdd.setVisible(true);
btnDel.setVisible(true);
break;
default:
comboFirstArgType.setVisible(false);
@ -1656,8 +1698,8 @@ public class ConditionOnMultiColumnWidget extends SimpleContainer {
secondArgDate.setVisible(false);
thresholdText.setVisible(false);
comboThreshold.setVisible(false);
btnAdd.setVisible(false);
btnDel.setVisible(false);
btnAdd.setVisible(true);
btnDel.setVisible(true);
horiz.add(comboDepth, new BoxLayoutData(new Margins(0)));
horiz.add(comboFirstElementColumn, new BoxLayoutData(new Margins(0)));
@ -1716,108 +1758,249 @@ public class ConditionOnMultiColumnWidget extends SimpleContainer {
@SuppressWarnings("unchecked")
public C_Expression getExpression() throws ConditionTypeMapException {
C_Expression exp = null;
readableExpression = new String();
List<C_Expression> arguments = new ArrayList<C_Expression>();
List<String> readableExpressionList = new ArrayList<String>();
TextField firstArg;
TextField secondArg;
DateField firstArgDate;
DateField secondArgDate;
ComboBox<Threshold> comboThreshold;
boolean expSet = false;
C_Expression expression = null;
Stack<LogicalDepth> depthStack = new Stack<LogicalDepth>();
ComboBox<DepthOfExpressionElement> comboDepth;
DateTimeFormat sdf = DateTimeFormat.getFormat("yyyy-MM-dd");
ConditionTypeMap mapOp = new ConditionTypeMap();
Iterator<Widget> iteratorVert = vert.iterator();
HBoxLayoutContainer horiz;
while (iteratorVert.hasNext()) {
horiz = (HBoxLayoutContainer) iteratorVert.next();
ComboBox<ColumnData> comboFirstElementColumn = (ComboBox<ColumnData>) horiz
.getItemByItemId(itemIdFirstElementColumn);
ColumnData column = comboFirstElementColumn.getCurrentValue();
comboDepth = (ComboBox<DepthOfExpressionElement>) horiz
.getItemByItemId(itemIdComboDepth);
ComboBox<Operation> comboOp = (ComboBox<Operation>) horiz
.getItemByItemId(itemIdComboOperation);
Log.debug("combo: " + comboOp.getCurrentValue());
DepthOfExpressionElement depthOfExpressionElement = comboDepth
.getCurrentValue();
if (comboOp.getCurrentValue() == null) {
throw new ConditionTypeMapException("Fill all conditions!");
if (depthOfExpressionElement == null) {
return null;
}
if (column.getDataTypeName().compareTo(
ColumnDataType.Date.toString()) == 0) {
firstArgDate = (DateField) horiz
.getItemByItemId(itemIdFirstArgDate);
secondArgDate = (DateField) horiz
.getItemByItemId(itemIdSecondArgDate);
Log.debug("argLeft: " + firstArgDate + " argRight:"
+ secondArgDate);
Date firstDate = firstArgDate.getCurrentValue();
Date secondDate = secondArgDate.getCurrentValue();
DepthOfExpressionType depth = depthOfExpressionElement.getType();
expression = mapOp.map(column, comboOp.getCurrentValue()
.getOperatorType(),
firstDate == null ? null : sdf.format(firstDate),
secondDate == null ? null : sdf.format(secondDate),
null);
} else {
firstArg = (TextField) horiz
.getItemByItemId(itemIdFirstArgValue);
secondArg = (TextField) horiz
.getItemByItemId(itemIdSecondArgValue);
comboThreshold = (ComboBox<Threshold>) horiz
.getItemByItemId(itemIdComboThreshold);
Log.debug("argLeft: " + firstArg.getCurrentValue()
+ " argRight: " + secondArg.getCurrentValue());
expression = mapOp.map(column, comboOp.getCurrentValue()
.getOperatorType(),
firstArg == null ? null : firstArg.getCurrentValue(),
secondArg == null ? null : secondArg.getCurrentValue(),
comboThreshold.getCurrentValue() == null ? null
: comboThreshold.getCurrentValue());
if (depth == null) {
return null;
}
readableExpressionList.add(mapOp.getReadableExpression());
Log.debug(expression.toString());
arguments.add(expression);
}
Log.debug("Expression Arguments Calculated: " + arguments.size());
if (arguments.size() > 0) {
if (arguments.size() == 1) {
exp = arguments.get(0);
readableExpression = readableExpressionList.get(0);
} else {
/*
* Radio radio = (Radio) groupMatch.getValue();
* Log.debug("Match:" + radio); if
* (radio.getName().compareTo("All") == 0) { exp =
* mapOp.createC_And(arguments); readableExpression = "And(";
* boolean first = true; for (String read :
* readableExpressionList) { if (first) { readableExpression +=
* read; } else { readableExpression += ", " + read; } }
* readableExpression += ")";
*
* } else { if (radio.getName().compareTo("Any") == 0) { exp =
* mapOp.createC_Or(arguments); readableExpression = "Or(";
* boolean first = true; for (String read :
* readableExpressionList) { if (first) { readableExpression +=
* read; } else { readableExpression += ", " + read; } }
* readableExpression += ")"; } else {
* Log.error("No All or Any set!"); } }
*/
if (expSet) {
return null;
}
switch (depth) {
case BOTTOM:
if (vert.getWidgetCount() != 1) {
return null;
}
C_Expression singleCondition = calcExpression(horiz);
exp = singleCondition;
expSet = true;
case COMMA:
if (depthStack.isEmpty()) {
return null;
} else {
LogicalDepth logicalDepth = depthStack.peek();
if (logicalDepth != null) {
ArrayList<C_Expression> args = logicalDepth
.getArguments();
C_Expression commaArg = calcExpression(horiz);
args.add(commaArg);
} else {
return null;
}
}
break;
case ENDAND:
if (depthStack.isEmpty()) {
return null;
} else {
LogicalDepth endAndPopped = depthStack.pop();
if (endAndPopped.getType().compareTo(
DepthOfExpressionType.STARTAND) == 0) {
ConditionOnMultiColumnTypeMap mapOp = new ConditionOnMultiColumnTypeMap();
C_Expression cAnd = mapOp.createC_And(endAndPopped.getArguments());
if (depthStack.isEmpty()) {
exp = cAnd;
expSet = true;
} else {
LogicalDepth logicalDepth = depthStack.peek();
if (logicalDepth != null) {
ArrayList<C_Expression> args = logicalDepth
.getArguments();
args.add(cAnd);
} else {
return null;
}
}
} else {
return null;
}
}
break;
case ENDOR:
if (depthStack.isEmpty()) {
return null;
} else {
LogicalDepth endOrPopped = depthStack.pop();
if (endOrPopped.getType().compareTo(
DepthOfExpressionType.STARTOR) == 0) {
ConditionOnMultiColumnTypeMap mapOp = new ConditionOnMultiColumnTypeMap();
C_Expression cOr = mapOp.createC_Or(endOrPopped.getArguments());
if (depthStack.isEmpty()) {
exp = cOr;
expSet = true;
} else {
LogicalDepth logicalDepth = depthStack.peek();
if (logicalDepth != null) {
ArrayList<C_Expression> args = logicalDepth
.getArguments();
args.add(cOr);
} else {
return null;
}
}
} else {
return null;
}
}
break;
case STARTAND:
C_Expression startAndExp = calcExpression(horiz);
ArrayList<C_Expression> andArgs = new ArrayList<C_Expression>();
andArgs.add(startAndExp);
LogicalDepth andDepth = new LogicalDepth(depth, andArgs);
depthStack.add(andDepth);
break;
case STARTOR:
C_Expression startOrExp = calcExpression(horiz);
ArrayList<C_Expression> orArgs = new ArrayList<C_Expression>();
orArgs.add(startOrExp);
LogicalDepth orDepth = new LogicalDepth(depth, orArgs);
depthStack.add(orDepth);
break;
default:
break;
}
}
Log.debug("C_Expression:" + exp.toString());
Log.debug("C_Expression:" + exp);
return exp;
}
public String getReadableExpression() {
return readableExpression;
protected C_Expression calcExpression(HBoxLayoutContainer horiz)
throws ConditionTypeMapException {
C_Expression expression = null;
DateTimeFormat sdf = DateTimeFormat.getFormat("yyyy-MM-dd");
@SuppressWarnings("unchecked")
ComboBox<ColumnData> comboFirstElementColumn = (ComboBox<ColumnData>) horiz
.getItemByItemId(itemIdFirstElementColumn);
ColumnData column = comboFirstElementColumn.getCurrentValue();
if (column == null) {
throw new ConditionTypeMapException("Fill all arguments!");
} else {
@SuppressWarnings("unchecked")
ComboBox<Operation> comboOp = (ComboBox<Operation>) horiz
.getItemByItemId(itemIdComboOperation);
Operation op = comboOp.getCurrentValue();
if (op == null) {
throw new ConditionTypeMapException("Fill all arguments!");
} else {
Log.debug("Op.: " + comboOp.getCurrentValue());
ColumnData firstArgColumn=null;
String firstArg=null;
ColumnData secondArgColumn=null;
String secondArg=null;
@SuppressWarnings("unchecked")
ComboBox<ArgType>comboFirstArgType=(ComboBox<ArgType>)horiz.getItemByItemId(itemIdFirstArgType);
ArgType firstArgType=comboFirstArgType.getCurrentValue();
if(firstArgType!=null){
if(firstArgType.compareTo(ArgType.COLUMN)==0){
@SuppressWarnings("unchecked")
ComboBox<ColumnData> comboFirstArgColumn=(ComboBox<ColumnData>)
horiz.getItemByItemId(itemIdFirstArgColumn);
firstArgColumn=comboFirstArgColumn.getCurrentValue();
} else {
if(firstArgType.compareTo(ArgType.VALUE)==0){
if (column.getDataTypeName().compareTo(
ColumnDataType.Date.toString()) == 0) {
DateField firstArgDate = (DateField) horiz
.getItemByItemId(itemIdFirstArgDate);
Date firstDate = firstArgDate.getCurrentValue();
firstArg=sdf.format(firstDate);
} else {
TextField firstArgText = (TextField) horiz
.getItemByItemId(itemIdFirstArgValue);
firstArg=firstArgText.getCurrentValue();
}
} else {
}
}
}
@SuppressWarnings("unchecked")
ComboBox<ArgType>comboSecondArgType=(ComboBox<ArgType>)horiz.getItemByItemId(itemIdSecondArgType);
ArgType secondArgType=comboSecondArgType.getCurrentValue();
if(secondArgType!=null){
if(secondArgType.compareTo(ArgType.COLUMN)==0){
@SuppressWarnings("unchecked")
ComboBox<ColumnData> comboSecondArgColumn=(ComboBox<ColumnData>)
horiz.getItemByItemId(itemIdSecondArgColumn);
secondArgColumn=comboSecondArgColumn.getCurrentValue();
} else {
if(secondArgType.compareTo(ArgType.VALUE)==0){
if (column.getDataTypeName().compareTo(
ColumnDataType.Date.toString()) == 0) {
DateField secondArgDate = (DateField) horiz
.getItemByItemId(itemIdSecondArgDate);
Date secondDate = secondArgDate.getCurrentValue();
secondArg=sdf.format(secondDate);
} else {
TextField secondArgText = (TextField) horiz
.getItemByItemId(itemIdSecondArgValue);
secondArg=secondArgText.getCurrentValue();
}
} else {
}
}
}
@SuppressWarnings("unchecked")
ComboBox<Threshold> comboThreshold = (ComboBox<Threshold>) horiz
.getItemByItemId(itemIdComboThreshold);
Threshold threshold=comboThreshold.getCurrentValue();
ConditionOnMultiColumnTypeMap mapOp = new ConditionOnMultiColumnTypeMap();
expression = mapOp.map(
column,
comboOp.getCurrentValue().getOperatorType(),
firstArgType, firstArgColumn,
firstArg,
secondArgType, secondArgColumn,
secondArg, threshold);
}
}
return expression;
}
}

View File

@ -11,7 +11,7 @@ import java.util.List;
*
*/
public enum DepthOfExpressionType {
BOTTOM("&nbsp;"),
BOTTOM("Cond."),
STARTOR("Or("),
ENDOR(")"),
STARTAND("And["),

View File

@ -0,0 +1,48 @@
package org.gcube.portlets.user.td.expressionwidget.client.multicolumn;
import java.io.Serializable;
import java.util.ArrayList;
import org.gcube.portlets.user.td.widgetcommonevent.shared.expression.C_Expression;
/**
*
* @author giancarlo email: <a
* href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
*
*/
public class LogicalDepth implements Serializable {
private static final long serialVersionUID = 3597411498776039440L;
private DepthOfExpressionType type;
private ArrayList<C_Expression> arguments;
public LogicalDepth(DepthOfExpressionType type,
ArrayList<C_Expression> arguments) {
super();
this.type = type;
this.arguments = arguments;
}
public DepthOfExpressionType getType() {
return type;
}
public void setType(DepthOfExpressionType type) {
this.type = type;
}
public ArrayList<C_Expression> getArguments() {
return arguments;
}
public void setArguments(ArrayList<C_Expression> arguments) {
this.arguments = arguments;
}
@Override
public String toString() {
return "LogicalDepth [type=" + type + ", arguments=" + arguments + "]";
}
}

View File

@ -0,0 +1,775 @@
package org.gcube.portlets.user.td.expressionwidget.shared.condition;
import java.util.ArrayList;
import java.util.List;
import org.gcube.portlets.user.td.expressionwidget.client.multicolumn.ArgType;
import org.gcube.portlets.user.td.expressionwidget.client.threshold.Threshold;
import org.gcube.portlets.user.td.expressionwidget.client.threshold.ThresholdStore;
import org.gcube.portlets.user.td.expressionwidget.shared.exception.ConditionTypeMapException;
import org.gcube.portlets.user.td.expressionwidget.shared.model.C_OperatorType;
import org.gcube.portlets.user.td.expressionwidget.shared.model.composite.comparable.C_Equals;
import org.gcube.portlets.user.td.expressionwidget.shared.model.composite.comparable.C_GreaterOrEquals;
import org.gcube.portlets.user.td.expressionwidget.shared.model.composite.comparable.C_GreaterThan;
import org.gcube.portlets.user.td.expressionwidget.shared.model.composite.comparable.C_LessOrEquals;
import org.gcube.portlets.user.td.expressionwidget.shared.model.composite.comparable.C_LessThan;
import org.gcube.portlets.user.td.expressionwidget.shared.model.composite.comparable.C_NotEquals;
import org.gcube.portlets.user.td.expressionwidget.shared.model.composite.comparable.C_NotGreater;
import org.gcube.portlets.user.td.expressionwidget.shared.model.composite.comparable.C_NotLess;
import org.gcube.portlets.user.td.expressionwidget.shared.model.composite.text.C_Levenshtein;
import org.gcube.portlets.user.td.expressionwidget.shared.model.composite.text.C_Similarity;
import org.gcube.portlets.user.td.expressionwidget.shared.model.composite.text.C_Soundex;
import org.gcube.portlets.user.td.expressionwidget.shared.model.composite.text.C_TextBeginsWith;
import org.gcube.portlets.user.td.expressionwidget.shared.model.composite.text.C_TextContains;
import org.gcube.portlets.user.td.expressionwidget.shared.model.composite.text.C_TextEndsWith;
import org.gcube.portlets.user.td.expressionwidget.shared.model.composite.text.C_TextMatchSQLRegexp;
import org.gcube.portlets.user.td.expressionwidget.shared.model.leaf.C_ColumnReference;
import org.gcube.portlets.user.td.expressionwidget.shared.model.leaf.C_ColumnReferencePlaceholder;
import org.gcube.portlets.user.td.expressionwidget.shared.model.leaf.C_ConstantList;
import org.gcube.portlets.user.td.expressionwidget.shared.model.leaf.C_Leaf;
import org.gcube.portlets.user.td.expressionwidget.shared.model.leaf.C_Range;
import org.gcube.portlets.user.td.expressionwidget.shared.model.leaf.TD_Value;
import org.gcube.portlets.user.td.expressionwidget.shared.model.logical.C_And;
import org.gcube.portlets.user.td.expressionwidget.shared.model.logical.C_Between;
import org.gcube.portlets.user.td.expressionwidget.shared.model.logical.C_IsNotNull;
import org.gcube.portlets.user.td.expressionwidget.shared.model.logical.C_IsNull;
import org.gcube.portlets.user.td.expressionwidget.shared.model.logical.C_Not;
import org.gcube.portlets.user.td.expressionwidget.shared.model.logical.C_Or;
import org.gcube.portlets.user.td.expressionwidget.shared.model.logical.C_ValueIsIn;
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;
/**
* ConditionTypeMap creates a C_Expression usable client-side
*
* @author "Giancarlo Panichi" <a
* href="mailto:g.panichi@isti.cnr.it">g.panichi@isti.cnr.it</a>
*
*/
public class ConditionOnMultiColumnTypeMap {
public ConditionOnMultiColumnTypeMap() {
}
public C_Expression map(ColumnData column, C_OperatorType operatorType,
ArgType firstArgType, ColumnData firstArgColumn, String firstArg,
ArgType secondArgType, ColumnData secondArgColumn,
String secondArg, Threshold threshold)
throws ConditionTypeMapException {
Log.debug("ConditionOnMultiColumnTypeMap");
C_Expression exp = null;
if (column.getTrId() == null) {
exp = mapPlaceHolder(column, operatorType, firstArgType,
firstArgColumn, firstArg, secondArgType, secondArgColumn,
secondArg, threshold);
} else {
exp = mapTypedColumnReference(column, operatorType, firstArgType,
firstArgColumn, firstArg, secondArgType, secondArgColumn,
secondArg, threshold);
}
return exp;
}
public C_Expression mapPlaceHolder(ColumnData column,
C_OperatorType operatorType, ArgType firstArgType,
ColumnData firstArgColumn, String firstArg, ArgType secondArgType,
ColumnData secondArgColumn, String secondArg, Threshold threshold)
throws ConditionTypeMapException {
Log.debug("ConditionOnMultiColumnTypeMap Place Holder");
C_Expression exp = null;
Log.debug("Column Data Type Name:" + column.getDataTypeName());
ColumnDataType dataType = ColumnDataType.getColumnDataTypeFromId(column
.getDataTypeName());
Log.debug("Data Type:" + dataType);
C_ColumnReferencePlaceholder placeHolder = new C_ColumnReferencePlaceholder(
dataType, column.getColumnId());
Log.debug("placeHolder:" + placeHolder);
//TD_Value fArg;
// TD_Value sArg;
// C_Range range;
List<TD_Value> arguments = new ArrayList<TD_Value>();
int separator;
switch (operatorType) {
case ADDITION:
break;
case ALL:
break;
case AND:
break;
case ANY:
break;
case BEGINS_WITH:
exp = placeHolderBeginsWith(column, firstArgType, firstArgColumn,
firstArg, dataType, placeHolder);
break;
case BETWEEN:
exp = placeHolderBetween(column, firstArgType, firstArgColumn,
firstArg, secondArgType, secondArgColumn, secondArg,
dataType, placeHolder);
break;
case CONTAINS:
exp = placeHolderContains(column, firstArgType, firstArgColumn,
firstArg, dataType, placeHolder);
break;
case DIVISION:
break;
case ENDS_WITH:
checkTypeArgument(column, firstArg);
exp = new C_TextEndsWith(placeHolder, new TD_Value(dataType,
firstArg));
break;
case EQUALS:
checkTypeArgument(column, firstArg);
exp = new C_Equals(placeHolder, new TD_Value(dataType, firstArg));
break;
case EXISTS:
// exp=new C_Exi(placeHolder,new C_ConstantList(arguments));
break;
case GREATER:
checkTypeArgument(column, firstArg);
exp = new C_GreaterThan(placeHolder, new TD_Value(dataType,
firstArg));
break;
case GREATER_OR_EQUALS:
checkTypeArgument(column, firstArg);
exp = new C_GreaterOrEquals(placeHolder, new TD_Value(dataType,
firstArg));
break;
case IN:
separator = firstArg.indexOf(",");
if (separator == -1 || firstArg.length() == 1) {
checkTypeArgument(column, firstArg);
arguments.add(new TD_Value(dataType, firstArg));
} else {
String arg;
boolean end = false;
while (!end) {
arg = firstArg.substring(0, separator);
checkTypeArgument(column, arg);
arguments.add(new TD_Value(dataType, arg));
separator++;
if (separator < firstArg.length()) {
firstArg = firstArg.substring(separator,
firstArg.length());
separator = firstArg.indexOf(",");
if (separator == -1) {
checkTypeArgument(column, firstArg);
arguments.add(new TD_Value(dataType, firstArg));
end = true;
}
} else {
end = true;
}
}
}
exp = new C_ValueIsIn(placeHolder, new C_ConstantList(arguments));
break;
case IS_NOT_NULL:
exp = new C_IsNotNull(placeHolder);
break;
case IS_NULL:
exp = new C_IsNull(placeHolder);
break;
case LESSER:
checkTypeArgument(column, firstArg);
exp = new C_LessThan(placeHolder, new TD_Value(dataType, firstArg));
break;
case LESSER_OR_EQUALS:
checkTypeArgument(column, firstArg);
exp = new C_LessOrEquals(placeHolder, new TD_Value(dataType,
firstArg));
break;
case LIKE:
break;
case MATCH_REGEX:
checkTypeArgument(column, firstArg);
exp = new C_TextMatchSQLRegexp(placeHolder, new TD_Value(dataType,
firstArg));
break;
case MODULUS:
break;
case MULTIPLICATION:
break;
case NOT:
break;
case NOT_BEGINS_WITH:
exp = placeHolderBeginsWith(column, firstArgType, firstArgColumn,
firstArg, dataType, placeHolder);
exp = new C_Not(exp);
break;
case NOT_BETWEEN:
exp = placeHolderBetween(column, firstArgType, firstArgColumn,
firstArg, secondArgType, secondArgColumn, secondArg,
dataType, placeHolder);
exp = new C_Not(exp);
break;
case NOT_CONTAINS:
exp = placeHolderContains(column, firstArgType, firstArgColumn,
firstArg, dataType, placeHolder);
exp = new C_Not(exp);
break;
case NOT_ENDS_WITH:
checkTypeArgument(column, firstArg);
exp = new C_TextEndsWith(placeHolder, new TD_Value(dataType,
firstArg));
exp = new C_Not(exp);
break;
case NOT_EQUALS:
checkTypeArgument(column, firstArg);
exp = new C_NotEquals(placeHolder, new TD_Value(dataType, firstArg));
break;
case NOT_GREATER:
checkTypeArgument(column, firstArg);
exp = new C_NotGreater(placeHolder,
new TD_Value(dataType, firstArg));
break;
case NOT_IN:
separator = firstArg.indexOf(",");
if (separator == -1 || firstArg.length() == 1) {
checkTypeArgument(column, firstArg);
arguments.add(new TD_Value(dataType, firstArg));
} else {
String arg;
boolean end = false;
while (!end) {
arg = firstArg.substring(0, separator);
checkTypeArgument(column, arg);
arguments.add(new TD_Value(dataType, arg));
separator++;
if (separator < firstArg.length()) {
firstArg = firstArg.substring(separator,
firstArg.length());
separator = firstArg.indexOf(",");
if (separator == -1) {
checkTypeArgument(column, firstArg);
arguments.add(new TD_Value(dataType, firstArg));
end = true;
}
} else {
end = true;
}
}
}
exp = new C_ValueIsIn(placeHolder, new C_ConstantList(arguments));
exp = new C_Not(exp);
break;
case NOT_LESSER:
checkTypeArgument(column, firstArg);
exp = new C_NotLess(placeHolder, new TD_Value(dataType, firstArg));
break;
case NOT_LIKE:
break;
case NOT_MATCH_REGEX:
checkTypeArgument(column, firstArg);
exp = new C_TextMatchSQLRegexp(placeHolder, new TD_Value(dataType,
firstArg));
exp = new C_Not(exp);
break;
case OR:
break;
case SELECT_IN:
break;
case SUBTRACTION:
break;
case UNIQUE:
break;
case SOUNDEX:
checkTypeArgument(column, firstArg);
C_Soundex soundexPlaceHolder = new C_Soundex(placeHolder);
C_Soundex soundexValue = new C_Soundex(new TD_Value(dataType,
firstArg));
exp = new C_Equals(soundexPlaceHolder, soundexValue);
break;
case LEVENSHTEIN:
checkTypeArgument(column, firstArg);
C_Levenshtein levenshstein = new C_Levenshtein(placeHolder,
new TD_Value(dataType, firstArg));
Threshold thresholdLev;
if (threshold == null) {
thresholdLev = ThresholdStore.defaultThresholdLevenshtein();
} else {
thresholdLev = threshold;
}
exp = new C_LessOrEquals(levenshstein, new TD_Value(
ColumnDataType.Integer, thresholdLev.getIntegerValue()
.toString()));
break;
case SIMILARITY:
checkTypeArgument(column, firstArg);
C_Similarity similarity = new C_Similarity(placeHolder,
new TD_Value(dataType, firstArg));
Threshold thresholdSim;
if (threshold == null) {
thresholdSim = ThresholdStore.defaultThresholdSimilarity();
} else {
thresholdSim = threshold;
}
exp = new C_GreaterOrEquals(similarity, new TD_Value(
ColumnDataType.Numeric, thresholdSim.getLabel()));
break;
default:
break;
}
return exp;
}
protected C_Expression placeHolderContains(ColumnData column,
ArgType firstArgType, ColumnData firstArgColumn, String firstArg,
ColumnDataType dataType, C_ColumnReferencePlaceholder placeHolder)
throws ConditionTypeMapException {
C_Expression exp = null;
switch (firstArgType) {
case COLUMN:
ColumnDataType firstArgDataType = ColumnDataType
.getColumnDataTypeFromId(firstArgColumn.getDataTypeName());
C_ColumnReferencePlaceholder firstArgPlaceHolder = new C_ColumnReferencePlaceholder(
firstArgDataType, firstArgColumn.getColumnId());
exp = new C_TextContains(placeHolder, firstArgPlaceHolder);
break;
case VALUE:
checkTypeArgument(column, firstArg);
TD_Value fArg = new TD_Value(dataType, firstArg);
exp = new C_TextContains(placeHolder, fArg);
break;
default:
new ConditionTypeMapException(
"No valid first argument type selected!");
break;
}
return exp;
}
protected C_Expression placeHolderBetween(ColumnData column,
ArgType firstArgType, ColumnData firstArgColumn, String firstArg,
ArgType secondArgType, ColumnData secondArgColumn,
String secondArg, ColumnDataType dataType,
C_ColumnReferencePlaceholder placeHolder)
throws ConditionTypeMapException {
C_Expression exp = null;
C_Leaf fArg;
C_Leaf sArg;
C_Range range;
switch (firstArgType) {
case COLUMN:
ColumnDataType firstArgDataType = ColumnDataType
.getColumnDataTypeFromId(firstArgColumn.getDataTypeName());
fArg = new C_ColumnReferencePlaceholder(firstArgDataType,
firstArgColumn.getColumnId());
break;
case VALUE:
checkTypeArgument(column, firstArg);
fArg = new TD_Value(dataType, firstArg);
break;
default:
new ConditionTypeMapException(
"No valid first argument type selected!");
break;
}
switch (secondArgType) {
case COLUMN:
ColumnDataType secondArgDataType = ColumnDataType
.getColumnDataTypeFromId(secondArgColumn.getDataTypeName());
Log.debug("Second Arg Data Type:" + secondArgDataType);
sArg = new C_ColumnReferencePlaceholder(secondArgDataType,
secondArgColumn.getColumnId());
break;
case VALUE:
checkTypeArgument(column, secondArg);
sArg = new TD_Value(dataType, secondArg);
break;
default:
new ConditionTypeMapException(
"No valid second argument type selected!");
break;
}
// range = new C_Range(fArg, sArg);
// exp = new C_Between(placeHolder, range);
return exp;
}
protected C_Expression placeHolderBeginsWith(ColumnData column,
ArgType firstArgType, ColumnData firstArgColumn, String firstArg,
ColumnDataType dataType, C_ColumnReferencePlaceholder placeHolder)
throws ConditionTypeMapException {
C_Expression exp = null;
switch (firstArgType) {
case COLUMN:
ColumnDataType firstArgDataType = ColumnDataType
.getColumnDataTypeFromId(firstArgColumn.getDataTypeName());
Log.debug("First Arg Data Type:" + firstArgDataType);
C_ColumnReferencePlaceholder firstArgColumnPlaceHolder = new C_ColumnReferencePlaceholder(
firstArgDataType, firstArgColumn.getColumnId());
Log.debug("FirstArgColumnPlaceHolder:" + firstArgColumnPlaceHolder);
exp = new C_TextBeginsWith(placeHolder, firstArgColumnPlaceHolder);
break;
case VALUE:
checkTypeArgument(column, firstArg);
TD_Value fArg = new TD_Value(dataType, firstArg);
exp = new C_TextBeginsWith(placeHolder, fArg);
break;
default:
new ConditionTypeMapException(
"No valid first argument type selected!");
break;
}
return exp;
}
public C_Expression mapTypedColumnReference(ColumnData column,
C_OperatorType operatorType, ArgType firstArgType,
ColumnData firstArgColumn, String firstArg, ArgType secondArgType,
ColumnData secondArgColumn, String secondArg, Threshold threshold)
throws ConditionTypeMapException {
Log.debug("ConditionTypeMap Map Typed Column Reference");
C_Expression exp = null;
Log.debug("Column Data Type Name:" + column.getDataTypeName());
ColumnDataType dataType = ColumnDataType.getColumnDataTypeFromId(column
.getDataTypeName());
Log.debug("Data Type:" + dataType);
C_ColumnReference columnReference = new C_ColumnReference(
column.getTrId(), dataType, column.getColumnId());
Log.debug("Typed Column Reference:" + columnReference);
TD_Value fArg;
TD_Value sArg;
C_Range range;
List<TD_Value> arguments = new ArrayList<TD_Value>();
int separator;
switch (operatorType) {
case ADDITION:
break;
case ALL:
break;
case AND:
break;
case ANY:
break;
case BEGINS_WITH:
checkTypeArgument(column, firstArg);
exp = new C_TextBeginsWith(columnReference, new TD_Value(dataType,
firstArg));
break;
case BETWEEN:
checkTypeArgument(column, firstArg);
checkTypeArgument(column, secondArg);
fArg = new TD_Value(dataType, firstArg);
sArg = new TD_Value(dataType, secondArg);
range = new C_Range(fArg, sArg);
exp = new C_Between(columnReference, range);
break;
case CONTAINS:
checkTypeArgument(column, firstArg);
fArg = new TD_Value(dataType, firstArg);
exp = new C_TextContains(columnReference, fArg);
break;
case DIVISION:
break;
case ENDS_WITH:
checkTypeArgument(column, firstArg);
exp = new C_TextEndsWith(columnReference, new TD_Value(dataType,
firstArg));
break;
case EQUALS:
checkTypeArgument(column, firstArg);
exp = new C_Equals(columnReference,
new TD_Value(dataType, firstArg));
break;
case EXISTS:
// exp=new C_Exi(placeHolder,new C_ConstantList(arguments));
break;
case GREATER:
checkTypeArgument(column, firstArg);
exp = new C_GreaterThan(columnReference, new TD_Value(dataType,
firstArg));
break;
case GREATER_OR_EQUALS:
checkTypeArgument(column, firstArg);
exp = new C_GreaterOrEquals(columnReference, new TD_Value(dataType,
firstArg));
break;
case IN:
separator = firstArg.indexOf(",");
if (separator == -1 || firstArg.length() == 1) {
checkTypeArgument(column, firstArg);
arguments.add(new TD_Value(dataType, firstArg));
} else {
String arg;
boolean end = false;
while (!end) {
arg = firstArg.substring(0, separator);
checkTypeArgument(column, arg);
arguments.add(new TD_Value(dataType, arg));
separator++;
if (separator < firstArg.length()) {
firstArg = firstArg.substring(separator,
firstArg.length());
separator = firstArg.indexOf(",");
if (separator == -1) {
checkTypeArgument(column, firstArg);
arguments.add(new TD_Value(dataType, firstArg));
end = true;
}
} else {
end = true;
}
}
}
exp = new C_ValueIsIn(columnReference,
new C_ConstantList(arguments));
break;
case IS_NOT_NULL:
exp = new C_IsNotNull(columnReference);
break;
case IS_NULL:
exp = new C_IsNull(columnReference);
break;
case LESSER:
checkTypeArgument(column, firstArg);
exp = new C_LessThan(columnReference, new TD_Value(dataType,
firstArg));
break;
case LESSER_OR_EQUALS:
checkTypeArgument(column, firstArg);
exp = new C_LessOrEquals(columnReference, new TD_Value(dataType,
firstArg));
break;
case LIKE:
break;
case MATCH_REGEX:
checkTypeArgument(column, firstArg);
exp = new C_TextMatchSQLRegexp(columnReference, new TD_Value(
dataType, firstArg));
break;
case MODULUS:
break;
case MULTIPLICATION:
break;
case NOT:
break;
case NOT_BEGINS_WITH:
checkTypeArgument(column, firstArg);
exp = new C_TextBeginsWith(columnReference, new TD_Value(dataType,
firstArg));
exp = new C_Not(exp);
break;
case NOT_BETWEEN:
checkTypeArgument(column, firstArg);
checkTypeArgument(column, secondArg);
fArg = new TD_Value(dataType, firstArg);
sArg = new TD_Value(dataType, secondArg);
range = new C_Range(fArg, sArg);
exp = new C_Between(columnReference, range);
exp = new C_Not(exp);
break;
case NOT_CONTAINS:
checkTypeArgument(column, firstArg);
fArg = new TD_Value(dataType, firstArg);
exp = new C_TextContains(columnReference, fArg);
exp = new C_Not(exp);
break;
case NOT_ENDS_WITH:
checkTypeArgument(column, firstArg);
exp = new C_TextEndsWith(columnReference, new TD_Value(dataType,
firstArg));
exp = new C_Not(exp);
break;
case NOT_EQUALS:
checkTypeArgument(column, firstArg);
exp = new C_NotEquals(columnReference, new TD_Value(dataType,
firstArg));
break;
case NOT_GREATER:
checkTypeArgument(column, firstArg);
exp = new C_NotGreater(columnReference, new TD_Value(dataType,
firstArg));
break;
case NOT_IN:
separator = firstArg.indexOf(",");
if (separator == -1 || firstArg.length() == 1) {
checkTypeArgument(column, firstArg);
arguments.add(new TD_Value(dataType, firstArg));
} else {
String arg;
boolean end = false;
while (!end) {
arg = firstArg.substring(0, separator);
checkTypeArgument(column, arg);
arguments.add(new TD_Value(dataType, arg));
separator++;
if (separator < firstArg.length()) {
firstArg = firstArg.substring(separator,
firstArg.length());
separator = firstArg.indexOf(",");
if (separator == -1) {
checkTypeArgument(column, firstArg);
arguments.add(new TD_Value(dataType, firstArg));
end = true;
}
} else {
end = true;
}
}
}
exp = new C_ValueIsIn(columnReference,
new C_ConstantList(arguments));
exp = new C_Not(exp);
break;
case NOT_LESSER:
checkTypeArgument(column, firstArg);
exp = new C_NotLess(columnReference, new TD_Value(dataType,
firstArg));
break;
case NOT_LIKE:
break;
case NOT_MATCH_REGEX:
checkTypeArgument(column, firstArg);
exp = new C_TextMatchSQLRegexp(columnReference, new TD_Value(
dataType, firstArg));
exp = new C_Not(exp);
break;
case OR:
break;
case SELECT_IN:
break;
case SUBTRACTION:
break;
case UNIQUE:
break;
case SOUNDEX:
checkTypeArgument(column, firstArg);
C_Soundex soundexPlaceHolder = new C_Soundex(columnReference);
C_Soundex soundexValue = new C_Soundex(new TD_Value(dataType,
firstArg));
exp = new C_Equals(soundexPlaceHolder, soundexValue);
break;
case LEVENSHTEIN:
checkTypeArgument(column, firstArg);
C_Levenshtein levenshstein = new C_Levenshtein(columnReference,
new TD_Value(dataType, firstArg));
Threshold thresholdLev;
if (threshold == null) {
thresholdLev = ThresholdStore.defaultThresholdLevenshtein();
} else {
thresholdLev = threshold;
}
exp = new C_LessOrEquals(levenshstein, new TD_Value(
ColumnDataType.Integer, thresholdLev.getIntegerValue()
.toString()));
break;
case SIMILARITY:
checkTypeArgument(column, firstArg);
C_Similarity similarity = new C_Similarity(columnReference,
new TD_Value(dataType, firstArg));
Threshold thresholdSim;
if (threshold == null) {
thresholdSim = ThresholdStore.defaultThresholdSimilarity();
} else {
thresholdSim = threshold;
}
exp = new C_GreaterOrEquals(similarity, new TD_Value(
ColumnDataType.Numeric, thresholdSim.getLabel()));
break;
default:
break;
}
return exp;
}
public C_Expression createC_Or(List<C_Expression> arguments) {
C_Or or = new C_Or(arguments);
return or;
}
public C_Expression createC_And(List<C_Expression> arguments) {
C_And or = new C_And(arguments);
return or;
}
protected void checkTypeArgument(ColumnData column, String arg)
throws ConditionTypeMapException {
if (column.getDataTypeName().compareTo(ColumnDataType.Text.toString()) == 0) {
if (arg == null) {
arg = "";
}
} else {
if (column.getDataTypeName().compareTo(
ColumnDataType.Boolean.toString()) == 0) {
if (arg == null) {
throw new ConditionTypeMapException(
"Insert a valid Boolean(ex: true, false)!");
}
} else {
if (column.getDataTypeName().compareTo(
ColumnDataType.Date.toString()) == 0) {
} else {
if (column.getDataTypeName().compareTo(
ColumnDataType.Geometry.toString()) == 0) {
} else {
if (column.getDataTypeName().compareTo(
ColumnDataType.Integer.toString()) == 0) {
if (arg == null) {
throw new ConditionTypeMapException(
"Insert a valid Integer(ex: -1, 0, 1, 2)!");
}
try {
Integer.parseInt(arg);
} catch (NumberFormatException e) {
throw new ConditionTypeMapException(
arg
+ " is not valid Integer(ex: -1, 0, 1, 2)!");
}
} else {
if (column.getDataTypeName().compareTo(
ColumnDataType.Numeric.toString()) == 0) {
if (arg == null) {
throw new ConditionTypeMapException(
"Insert a valid Numeric(ex: -1.2, 0, 1, 2.4)!");
}
try {
Double.parseDouble(arg);
} catch (NumberFormatException e) {
throw new ConditionTypeMapException(
arg
+ " is not valid Numeric(ex: -1.2, 0, 1, 2.4)!");
}
} else {
}
}
}
}
}
}
}
}

View File

@ -36,13 +36,12 @@
<set-property name="log_ConsoleLogger" value="ENABLED" />
<set-property name="log_DivLogger" value="ENABLED" />
<set-property name="log_GWTLogger" value="ENABLED" />
<set-property name="log_SystemLogger" value="ENABLED" /> -->
<set-property name="log_SystemLogger" value="ENABLED" /> -->
<set-property name="log_ConsoleLogger" value="DISABLED" />
<set-property name="log_DivLogger" value="DISABLED" />
<set-property name="log_GWTLogger" value="DISABLED" />
<set-property name="log_SystemLogger" value="DISABLED" />
<set-property name="log_SystemLogger" value="DISABLED" />
<!-- Specify the paths for translatable code -->