IDEMPIERE-377 Improve current search dialog box

PFA patch for integrated code to support AND/OR with parentheses() in advanced search box.
This patch also includes logic to save history criteria with user query.
Based on MJMcKay zk port - in turn based on Adaxa work on swing
This commit is contained in:
Kirit Thummar 2012-09-05 18:16:23 -05:00
parent 7ba2400a73
commit e9cf998938
1 changed files with 365 additions and 218 deletions

View File

@ -96,7 +96,6 @@ import org.zkoss.zul.Comboitem;
import org.zkoss.zul.Div; import org.zkoss.zul.Div;
import org.zkoss.zul.Hbox; import org.zkoss.zul.Hbox;
import org.zkoss.zul.South; import org.zkoss.zul.South;
import org.zkoss.zul.Space;
import org.zkoss.zul.Tab; import org.zkoss.zul.Tab;
import org.zkoss.zul.Vlayout; import org.zkoss.zul.Vlayout;
@ -183,10 +182,24 @@ public class FindWindow extends Window implements EventListener<Event>, ValueCha
/** Index Value2 = 3 */ /** Index Value2 = 3 */
public static final int INDEX_VALUE2 = 3; public static final int INDEX_VALUE2 = 3;
/** Index AndOr = 4 */
public static final int INDEX_ANDOR = 4;
/** Index LeftBracket = 5 */
public static final int INDEX_LEFTBRACKET = 5;
/** Index RightBracket = 6 */
public static final int INDEX_RIGHTBRACKET = 6;
/** Index History */
public static final int INDEX_HISTORY = 1;
/** Search messages using translation */
private String m_sNew;
private static final String FIELD_SEPARATOR = "<^>"; private static final String FIELD_SEPARATOR = "<^>";
private static final String SEGMENT_SEPARATOR = "<~>"; private static final String SEGMENT_SEPARATOR = "<~>";
private static final String HISTORY_SEPARATOR = "<#>";
Combobox historyCombo = new Combobox(); private Combobox historyCombo = new Combobox();
/** /**
@ -210,6 +223,7 @@ public class FindWindow extends Window implements EventListener<Event>, ValueCha
m_tableName = tableName; m_tableName = tableName;
m_whereExtended = whereExtended; m_whereExtended = whereExtended;
m_findFields = findFields; m_findFields = findFields;
m_sNew = "** ".concat(Msg.getMsg(Env.getCtx(), "New Query")).concat(" **");
m_AD_Tab_ID = adTabId; m_AD_Tab_ID = adTabId;
m_minRecords = minRecords; m_minRecords = minRecords;
m_isCancel = true; m_isCancel = true;
@ -217,7 +231,7 @@ public class FindWindow extends Window implements EventListener<Event>, ValueCha
this.setBorder("normal"); this.setBorder("normal");
this.setShadow(false); this.setShadow(false);
this.setWidth("750px"); this.setWidth("900px");
this.setHeight("350px"); this.setHeight("350px");
this.setTitle(Msg.getMsg(Env.getCtx(), "Find").replaceAll("&", "") + ": " + title); this.setTitle(Msg.getMsg(Env.getCtx(), "Find").replaceAll("&", "") + ": " + title);
this.setAttribute(Window.MODE_KEY, Window.MODE_HIGHLIGHTED); this.setAttribute(Window.MODE_KEY, Window.MODE_HIGHLIGHTED);
@ -399,6 +413,9 @@ public class FindWindow extends Window implements EventListener<Event>, ValueCha
toolBar.appendChild(btnDelete); toolBar.appendChild(btnDelete);
toolBar.setWidth("100%"); toolBar.setWidth("100%");
fQueryName.setStyle("margin-left: 3px; margin-right: 3px; position: relative; top: 5px;");
fQueryName.addEventListener(Events.ON_SELECT, this);
Hbox confirmPanel = new Hbox(); Hbox confirmPanel = new Hbox();
confirmPanel.appendChild(pnlButtonRight); confirmPanel.appendChild(pnlButtonRight);
confirmPanel.setWidth("100%"); confirmPanel.setWidth("100%");
@ -409,9 +426,17 @@ public class FindWindow extends Window implements EventListener<Event>, ValueCha
ListHead listhead = new ListHead(); ListHead listhead = new ListHead();
listhead.setSizable(true); listhead.setSizable(true);
ListHeader lstHAndOr = new ListHeader();
lstHAndOr.setLabel(Msg.getMsg(Env.getCtx(), "And/Or"));
lstHAndOr.setWidth("70px");
ListHeader lstHLeftBracket = new ListHeader();
lstHLeftBracket.setLabel("(");
lstHLeftBracket.setWidth("55px");
ListHeader lstHColumn = new ListHeader(); ListHeader lstHColumn = new ListHeader();
lstHColumn.setLabel(Msg.translate(Env.getCtx(), "AD_Column_ID")); lstHColumn.setLabel(Msg.translate(Env.getCtx(), "AD_Column_ID"));
lstHColumn.setWidth("250px"); lstHColumn.setWidth("210px");
ListHeader lstHOperator = new ListHeader(); ListHeader lstHOperator = new ListHeader();
lstHOperator.setLabel(Msg.getMsg(Env.getCtx(), "Operator")); lstHOperator.setLabel(Msg.getMsg(Env.getCtx(), "Operator"));
@ -424,10 +449,18 @@ public class FindWindow extends Window implements EventListener<Event>, ValueCha
lstHQueryTo.setLabel(Msg.getMsg(Env.getCtx(), "QueryValue2")); lstHQueryTo.setLabel(Msg.getMsg(Env.getCtx(), "QueryValue2"));
lstHQueryTo.setWidth("200px"); lstHQueryTo.setWidth("200px");
ListHeader lstHRightBracket = new ListHeader();
lstHRightBracket.setLabel(")");
lstHRightBracket.setWidth("55px");
listhead.appendChild(lstHAndOr);
listhead.appendChild(lstHLeftBracket);
listhead.appendChild(lstHColumn); listhead.appendChild(lstHColumn);
listhead.appendChild(lstHOperator); listhead.appendChild(lstHOperator);
listhead.appendChild(lstHQueryValue); listhead.appendChild(lstHQueryValue);
listhead.appendChild(lstHQueryTo); listhead.appendChild(lstHQueryTo);
listhead.appendChild(lstHRightBracket);
advancedPanel.appendChild(listhead); advancedPanel.appendChild(listhead);
advancedPanel.setVflex(true); advancedPanel.setVflex(true);
@ -629,7 +662,7 @@ public class FindWindow extends Window implements EventListener<Event>, ValueCha
{ {
log.config(""); log.config("");
createFields(); createFields();
refreshUserQueries(); //Initializes and sets fQueryName
} // initFindAdvanced } // initFindAdvanced
/** /**
@ -638,6 +671,19 @@ public class FindWindow extends Window implements EventListener<Event>, ValueCha
**/ **/
private void createFields() private void createFields()
{ {
List<?> rowList = advancedPanel.getChildren();
int row = rowList.size()-1;
createFields(null,row);
}
/**
* create respective fields in the advanced window tab
*
**/
private void createFields(String[] fields, int row)
{
if (null!=fields && fields.length>=1 && fields[0].contains(HISTORY_SEPARATOR))
return;
ListItem listItem = new ListItem(); ListItem listItem = new ListItem();
listItem.setId("Row"+advancedPanel.getItemCount()); listItem.setId("Row"+advancedPanel.getItemCount());
listItem.setAttribute(AdempiereIdGenerator.ZK_COMPONENT_PREFIX_ATTRIBUTE, listItem.getId()); listItem.setAttribute(AdempiereIdGenerator.ZK_COMPONENT_PREFIX_ATTRIBUTE, listItem.getId());
@ -658,7 +704,72 @@ public class FindWindow extends Window implements EventListener<Event>, ValueCha
listOperator.setRows(0); listOperator.setRows(0);
listOperator.addEventListener(Events.ON_SELECT,this); listOperator.addEventListener(Events.ON_SELECT,this);
setValues(listColumn, listOperator); Listbox listAndOr = new Listbox();
listAndOr.setId("listAndOr"+listItem.getId());
listAndOr.setAttribute(AdempiereIdGenerator.ZK_COMPONENT_PREFIX_ATTRIBUTE, listAndOr.getId());
listAndOr.setName("listAndOr");
listAndOr.setMold("select");
listAndOr.setRows(0);
listAndOr.addEventListener(Events.ON_SELECT,this);
Listbox listLeftBracket = new Listbox();
listLeftBracket.setId("listLeftBracket"+listItem.getId());
listLeftBracket.setAttribute(AdempiereIdGenerator.ZK_COMPONENT_PREFIX_ATTRIBUTE, listLeftBracket.getId());
listLeftBracket.setName("listLeftBracket");
listLeftBracket.setMold("select");
listLeftBracket.setRows(0);
listLeftBracket.addEventListener(Events.ON_SELECT,this);
Listbox listRightBracket = new Listbox();
listRightBracket.setId("listRightBracket"+listItem.getId());
listRightBracket.setAttribute(AdempiereIdGenerator.ZK_COMPONENT_PREFIX_ATTRIBUTE, listRightBracket.getId());
listRightBracket.setName("listRightBracket");
listRightBracket.setMold("select");
listRightBracket.setRows(0);
listRightBracket.addEventListener(Events.ON_SELECT,this);
setValues(listColumn, listOperator, fields);
// And Or
ValueNamePair[] andOr = new ValueNamePair[] {
new ValueNamePair ("", ""),
new ValueNamePair ("AND", Msg.getMsg(Env.getCtx(),"AND")),
new ValueNamePair ("OR", Msg.getMsg(Env.getCtx(),"OR"))
};
for (ValueNamePair item: andOr)
listAndOr.appendItem(item.getName(), item.getValue());
if (row<=0){ // don't show item on the first row.
listAndOr.setSelectedIndex(0);
listAndOr.setVisible(false);
} else {
listAndOr.setSelectedIndex(1); //And - default
listAndOr.setVisible(true);
}
// Left Bracket
ValueNamePair[] leftBracket = new ValueNamePair[] {
new ValueNamePair ("", ""),
new ValueNamePair ("(", "("),
new ValueNamePair ("((", "(("),
new ValueNamePair ("(((", "(((")
};
for (ValueNamePair item: leftBracket)
listLeftBracket.appendItem(item.getName(), item.getValue());
listLeftBracket.setSelectedIndex(0);
// Right Bracket
ValueNamePair[] rightBracket = new ValueNamePair[] {
new ValueNamePair ("", ""),
new ValueNamePair (")", ")"),
new ValueNamePair ("))", "))"),
new ValueNamePair (")))", ")))")
};
for (ValueNamePair item: rightBracket)
listRightBracket.appendItem(item.getName(), item.getValue());
listRightBracket.setSelectedIndex(0);
ListCell cellColumn = new ListCell(); ListCell cellColumn = new ListCell();
cellColumn.appendChild(listColumn); cellColumn.appendChild(listColumn);
@ -678,13 +789,89 @@ public class FindWindow extends Window implements EventListener<Event>, ValueCha
cellQueryTo.setId("cellQueryTo"+listItem.getId()); cellQueryTo.setId("cellQueryTo"+listItem.getId());
cellQueryTo.setAttribute(AdempiereIdGenerator.ZK_COMPONENT_PREFIX_ATTRIBUTE, cellQueryTo.getId()); cellQueryTo.setAttribute(AdempiereIdGenerator.ZK_COMPONENT_PREFIX_ATTRIBUTE, cellQueryTo.getId());
ListCell cellAndOr = new ListCell();
cellAndOr.appendChild(listAndOr);
cellAndOr.setId("cellAndOr"+listItem.getId());
cellAndOr.setAttribute(AdempiereIdGenerator.ZK_COMPONENT_PREFIX_ATTRIBUTE, cellAndOr.getId());
ListCell cellLeftBracket = new ListCell();
cellLeftBracket.appendChild(listLeftBracket);
cellLeftBracket.setId("cellLeftBracket"+listItem.getId());
cellLeftBracket.setAttribute(AdempiereIdGenerator.ZK_COMPONENT_PREFIX_ATTRIBUTE, cellLeftBracket.getId());
ListCell cellRightBracket = new ListCell();
cellRightBracket.appendChild(listRightBracket);
cellRightBracket.setId("cellRightBracket"+listItem.getId());
cellRightBracket.setAttribute(AdempiereIdGenerator.ZK_COMPONENT_PREFIX_ATTRIBUTE, cellRightBracket.getId());
listItem.appendChild(cellAndOr);
listItem.appendChild(cellLeftBracket);
listItem.appendChild(cellColumn); listItem.appendChild(cellColumn);
listItem.appendChild(cellOperator); listItem.appendChild(cellOperator);
listItem.appendChild(cellQueryFrom); listItem.appendChild(cellQueryFrom);
listItem.appendChild(cellQueryTo); listItem.appendChild(cellQueryTo);
listItem.appendChild(cellRightBracket);
advancedPanel.appendChild(listItem); advancedPanel.appendChild(listItem);
advancedPanel.setSelectedItem(listItem); advancedPanel.setSelectedItem(listItem);
if (fields != null){
// QueryFrom
String columnName = listColumn.getSelectedItem().getValue().toString();
if (columnName == null || columnName == "")
return;
String value = fields.length > INDEX_VALUE ? fields[INDEX_VALUE] : "";
if(value.length() > 0)
{
cellQueryFrom.setAttribute("value", value); // Elaine 2009/03/16 - set attribute value
cellQueryFrom.appendChild(parseString(getTargetMField(columnName), value, listItem, false));
}
// QueryTo
String value2 = fields.length > INDEX_VALUE2 ? fields[INDEX_VALUE2] : "";
if(value2.length() > 0)
{
cellQueryTo.setAttribute("value", value); // Elaine 2009/03/16 - set attribute value
cellQueryTo.appendChild(parseString(getTargetMField(columnName), value2, listItem, true));
}
// AndOr
String sandOr = fields.length > INDEX_ANDOR ? fields[INDEX_ANDOR] : "";
if(sandOr.length() > 0)
{
for (int i=0; i< listAndOr.getItems().size(); i++) {
if (listAndOr.getItemAtIndex(i).getValue().equals(sandOr)){
listAndOr.setSelectedIndex(i);
break;
}
}
}
// Left Bracket
String sLeftBracket = fields.length > INDEX_LEFTBRACKET ? fields[INDEX_LEFTBRACKET] : "";
if(sLeftBracket.length() > 0)
{
for (int i=0; i < listLeftBracket.getItems().size(); i++) {
if (listLeftBracket.getItemAtIndex(i).getValue().equals(sLeftBracket)){
listLeftBracket.setSelectedIndex(i);
break;
}
}
}
// Right Bracket
String sRightBracket = fields.length > INDEX_RIGHTBRACKET ? fields[INDEX_RIGHTBRACKET] : "";
if(sRightBracket.length() > 0)
{
for (int i=0; i < listRightBracket.getItems().size(); i++) {
if (listRightBracket.getItemAtIndex(i).getValue().equals(sRightBracket)){
listRightBracket.setSelectedIndex(i);
break;
}
}
}
}
} // createFields } // createFields
/** /**
* sets the list of values of column and operator listboxes * sets the list of values of column and operator listboxes
@ -818,6 +1005,8 @@ public class FindWindow extends Window implements EventListener<Event>, ValueCha
Listbox listColumn = (Listbox)row.getFellow("listColumn"+row.getId()); Listbox listColumn = (Listbox)row.getFellow("listColumn"+row.getId());
Listbox listOperator = (Listbox)row.getFellow("listOperator"+row.getId()); Listbox listOperator = (Listbox)row.getFellow("listOperator"+row.getId());
if (listbox.getId().equals(listColumn.getId()) || listbox.getId().equals(listOperator.getId()))
{
if (listbox.getId().equals(listColumn.getId())) if (listbox.getId().equals(listColumn.getId()))
{ {
ListItem column = listColumn.getSelectedItem(); ListItem column = listColumn.getSelectedItem();
@ -826,6 +1015,7 @@ public class FindWindow extends Window implements EventListener<Event>, ValueCha
addOperators(column, listOperator); addOperators(column, listOperator);
} }
} }
}
Component componentFrom = getEditorCompQueryFrom(row); Component componentFrom = getEditorCompQueryFrom(row);
componentFrom.setId("searchFieldFrom"+row.getId()); componentFrom.setId("searchFieldFrom"+row.getId());
componentFrom.setAttribute(AdempiereIdGenerator.ZK_COMPONENT_PREFIX_ATTRIBUTE, componentFrom.getId()); componentFrom.setAttribute(AdempiereIdGenerator.ZK_COMPONENT_PREFIX_ATTRIBUTE, componentFrom.getId());
@ -841,7 +1031,7 @@ public class FindWindow extends Window implements EventListener<Event>, ValueCha
row.getFellow("cellQueryFrom"+row.getId()).getChildren().clear(); row.getFellow("cellQueryFrom"+row.getId()).getChildren().clear();
row.getFellow("cellQueryTo"+row.getId()).getChildren().clear(); row.getFellow("cellQueryTo"+row.getId()).getChildren().clear();
} }
else else if (listbox.getId().equals(listColumn.getId()) || listbox.getId().equals(listOperator.getId()))
{ {
addRowEditor(componentFrom, (ListCell)row.getFellow("cellQueryFrom"+row.getId())); addRowEditor(componentFrom, (ListCell)row.getFellow("cellQueryFrom"+row.getId()));
addRowEditor(componentTo,(ListCell)row.getFellow("cellQueryTo"+row.getId())); addRowEditor(componentTo,(ListCell)row.getFellow("cellQueryTo"+row.getId()));
@ -851,21 +1041,29 @@ public class FindWindow extends Window implements EventListener<Event>, ValueCha
{ {
int index = fQueryName.getSelectedIndex(); int index = fQueryName.getSelectedIndex();
if(index < 0) return; if(index < 0) return;
if (winMain.getComponent().getSelectedIndex() != 1) { if (winMain.getComponent().getSelectedIndex() != 1)
{
winMain.getComponent().setSelectedIndex(1); winMain.getComponent().setSelectedIndex(1);
btnSave.setDisabled(m_AD_Tab_ID <= 0); btnSave.setDisabled(m_AD_Tab_ID <= 0);
historyCombo.setDisabled(true);
historyCombo.setSelectedItem(null); historyCombo.setSelectedItem(null);
fQueryName.setReadonly(false); fQueryName.setReadonly(false);
} }
msgLabel.setText(""); msgLabel.setText("");
parseUserQuery(userQueries[index]);
if(index == 0)
{ // no query - wipe and start over.
List<?> rowList = advancedPanel.getChildren();
for (int rowIndex = rowList.size() - 1; rowIndex >= 1; rowIndex--)
rowList.remove(rowIndex);
createFields();
}
else
parseUserQuery(userQueries[index-1]);
} }
else if (event.getTarget() instanceof Tab) { else if (event.getTarget() instanceof Tab) {
if (winMain.getComponent().getSelectedIndex() == 1) { if (winMain.getComponent().getSelectedIndex() == 1) {
fQueryName.setReadonly(false); fQueryName.setReadonly(false);
btnSave.setDisabled(m_AD_Tab_ID <= 0); btnSave.setDisabled(m_AD_Tab_ID <= 0);
historyCombo.setDisabled(true);
historyCombo.setSelectedItem(null); historyCombo.setSelectedItem(null);
} else { } else {
fQueryName.setReadonly(true); fQueryName.setReadonly(true);
@ -883,7 +1081,7 @@ public class FindWindow extends Window implements EventListener<Event>, ValueCha
if ("btnNewAdv".equals(button.getAttribute("name").toString())) if ("btnNewAdv".equals(button.getAttribute("name").toString()))
{ {
initFindAdvanced(); createFields();
} }
else if ("btnDeleteAdv".equals(button.getAttribute("name").toString())) else if ("btnDeleteAdv".equals(button.getAttribute("name").toString()))
@ -973,71 +1171,37 @@ public class FindWindow extends Window implements EventListener<Event>, ValueCha
{ {
String[] fields = segments[i].split(Pattern.quote(FIELD_SEPARATOR)); String[] fields = segments[i].split(Pattern.quote(FIELD_SEPARATOR));
ListItem listItem = new ListItem(); createFields(fields, i);
listItem.setId("Row"+advancedPanel.getItemCount());
listItem.setAttribute(AdempiereIdGenerator.ZK_COMPONENT_PREFIX_ATTRIBUTE, listItem.getId());
advancedPanel.appendChild(listItem);
Listbox listColumn = new Listbox();
listColumn.setId("listColumn"+listItem.getId());
listColumn.setAttribute(AdempiereIdGenerator.ZK_COMPONENT_PREFIX_ATTRIBUTE, listColumn.getId());
listColumn.setName("listColumn");
listColumn.setMold("select");
listColumn.setRows(0);
listColumn.addEventListener(Events.ON_SELECT,this);
Listbox listOperator = new Listbox();
listOperator.setId("listOperator"+listItem.getId());
listOperator.setAttribute(AdempiereIdGenerator.ZK_COMPONENT_PREFIX_ATTRIBUTE, listOperator.getId());
listOperator.setName("listOperator");
listOperator.setMold("select");
listOperator.setRows(0);
listOperator.addEventListener(Events.ON_SELECT,this);
setValues(listColumn, listOperator, fields);
ListCell cellColumn = new ListCell();
cellColumn.appendChild(listColumn);
cellColumn.setId("cellColumn"+listItem.getId());
cellColumn.setAttribute(AdempiereIdGenerator.ZK_COMPONENT_PREFIX_ATTRIBUTE, cellColumn.getId());
ListCell cellOperator = new ListCell();
cellOperator.appendChild(listOperator);
cellOperator.setId("cellOperator"+listItem.getId());
cellOperator.setAttribute(AdempiereIdGenerator.ZK_COMPONENT_PREFIX_ATTRIBUTE, cellOperator.getId());
ListCell cellQueryFrom = new ListCell();
cellQueryFrom.setId("cellQueryFrom"+listItem.getId());
cellQueryFrom.setAttribute(AdempiereIdGenerator.ZK_COMPONENT_PREFIX_ATTRIBUTE, cellQueryFrom.getId());
ListCell cellQueryTo = new ListCell();
cellQueryTo.setId("cellQueryTo"+listItem.getId());
cellQueryTo.setAttribute(AdempiereIdGenerator.ZK_COMPONENT_PREFIX_ATTRIBUTE, cellQueryTo.getId());
listItem.appendChild(cellColumn);
listItem.appendChild(cellOperator);
listItem.appendChild(cellQueryFrom);
listItem.appendChild(cellQueryTo);
String columnName = listColumn.getSelectedItem().getValue().toString();
String value = fields.length > INDEX_VALUE ? fields[INDEX_VALUE] : "";
if(value.length() > 0)
{
cellQueryFrom.setAttribute("value", value); // Elaine 2009/03/16 - set attribute value
cellQueryFrom.appendChild(parseString(getTargetMField(columnName), value, listItem, false));
} }
String value2 = fields.length > INDEX_VALUE2 ? fields[INDEX_VALUE2] : ""; String[] historysegments = code.split(Pattern.quote(HISTORY_SEPARATOR));
if(value2.length() > 0)
String history = historysegments.length > INDEX_HISTORY? historysegments[INDEX_HISTORY] : "";
if(history.length() > 0)
{ {
cellQueryTo.setAttribute("value", value); // Elaine 2009/03/16 - set attribute value historyCombo.setAttribute("history", history);
cellQueryTo.appendChild(parseString(getTargetMField(columnName), value2, listItem, true)); //historyCombo.setSelectedItem(new Comboitem(history));
} //historyCombo.setSelectedItem(new Comboitem(history, history));
historyCombo.setSelectedIndex(getHistoryIndex(history)+1);
} }
advancedPanel.invalidate(); advancedPanel.invalidate();
} }
private int getHistoryIndex(String value)
{
int myIndex = 0;
if(value.equals(HISTORY_DAY_YEAR))
myIndex = 1;
else if(value.equals(HISTORY_DAY_MONTH))
myIndex = 2;
else if(value.equals(HISTORY_DAY_WEEK))
myIndex = 3;
else if(value.equals(HISTORY_DAY_DAY))
myIndex = 4;
return myIndex;
}
/** /**
* Parse String * Parse String
* @param field column * @param field column
@ -1128,6 +1292,8 @@ public class FindWindow extends Window implements EventListener<Event>, ValueCha
m_query.addRestriction(Env.parseContext(Env.getCtx(), m_targetWindowNo, m_whereExtended, false)); m_query.addRestriction(Env.parseContext(Env.getCtx(), m_targetWindowNo, m_whereExtended, false));
StringBuffer code = new StringBuffer(); StringBuffer code = new StringBuffer();
int openBrackets = 0;
List<?> rowList = advancedPanel.getChildren(); List<?> rowList = advancedPanel.getChildren();
for (int rowIndex = 1; rowIndex < rowList.size() ; rowIndex++) for (int rowIndex = 1; rowIndex < rowList.size() ; rowIndex++)
@ -1144,6 +1310,23 @@ public class FindWindow extends Window implements EventListener<Event>, ValueCha
if(field == null) continue; // Elaine 2008/07/29 if(field == null) continue; // Elaine 2008/07/29
boolean isProductCategoryField = isProductCategoryField(field.getAD_Column_ID()); boolean isProductCategoryField = isProductCategoryField(field.getAD_Column_ID());
String ColumnSQL = field.getColumnSQL(false); String ColumnSQL = field.getColumnSQL(false);
// Left brackets
Listbox listLeftBracket = (Listbox)row.getFellow("listLeftBracket"+row.getId());
String lBrackets = listLeftBracket.getSelectedItem().getValue().toString();
if ( lBrackets != null )
openBrackets += lBrackets.length();
// Right brackets
Listbox listRightBracket = (Listbox)row.getFellow("listRightBracket"+row.getId());
String rBrackets = listRightBracket.getSelectedItem().getValue().toString();
if ( rBrackets != null )
openBrackets -= rBrackets.length();
// And Or
Listbox listAndOr = (Listbox)row.getFellow("listAndOr"+row.getId());
String andOr = listAndOr.getSelectedItem().getValue().toString();
boolean and = true;
if ( rowIndex > 1 ) {
and = !"OR".equals(andOr);
}
// Op // Op
Listbox op = (Listbox)row.getFellow("listOperator"+row.getId()); Listbox op = (Listbox)row.getFellow("listOperator"+row.getId());
if (op == null) if (op == null)
@ -1167,7 +1350,13 @@ public class FindWindow extends Window implements EventListener<Event>, ValueCha
.append(FIELD_SEPARATOR) .append(FIELD_SEPARATOR)
.append("") .append("")
.append(FIELD_SEPARATOR) .append(FIELD_SEPARATOR)
.append(""); .append("")
.append(FIELD_SEPARATOR)
.append(andOr)
.append(FIELD_SEPARATOR)
.append(lBrackets != null ? lBrackets : "")
.append(FIELD_SEPARATOR)
.append(rBrackets != null ? rBrackets : "");
} }
continue; continue;
} }
@ -1181,7 +1370,7 @@ public class FindWindow extends Window implements EventListener<Event>, ValueCha
infoDisplay = Msg.getMsg(Env.getCtx(), infoDisplay); infoDisplay = Msg.getMsg(Env.getCtx(), infoDisplay);
// Value2 ****** // Value2 ******
Object value2 = null; Object value2 = null;
if (MQuery.OPERATORS[MQuery.BETWEEN_INDEX].equals(op)) if (MQuery.OPERATORS[MQuery.BETWEEN_INDEX].getValue().equals(Operator))
{ {
ListCell cellQueryTo = (ListCell)row.getFellow("cellQueryTo"+row.getId()); ListCell cellQueryTo = (ListCell)row.getFellow("cellQueryTo"+row.getId());
value2 = cellQueryTo.getAttribute("value"); value2 = cellQueryTo.getAttribute("value");
@ -1214,21 +1403,47 @@ public class FindWindow extends Window implements EventListener<Event>, ValueCha
.append(FIELD_SEPARATOR) .append(FIELD_SEPARATOR)
.append(value.toString()) .append(value.toString())
.append(FIELD_SEPARATOR) .append(FIELD_SEPARATOR)
.append(value2 != null ? value2.toString() : ""); .append(value2 != null ? value2.toString() : "")
.append(FIELD_SEPARATOR)
.append(andOr)
.append(FIELD_SEPARATOR)
.append(lBrackets != null ? lBrackets : "")
.append(FIELD_SEPARATOR)
.append(rBrackets != null ? rBrackets : "");
} }
String selected = fQueryName.getValue(); String selected = fQueryName.getValue();
if (selected != null && saveQuery) { if (selected != null) {
String name = selected; String name = selected;
if ((fQueryName.getSelectedIndex() == 0 || name.equals(m_sNew)) && saveQuery){ // New query - needs a name
FDialog.warn (m_targetWindowNo, this, "NeedsName", name);
return;
}
if (saveQuery){
if(historyCombo.getSelectedItem()!=null)
{
code.append(SEGMENT_SEPARATOR);
code.append(HISTORY_SEPARATOR);
code.append(historyCombo.getSelectedItem().getValue());
}
MUserQuery uq = MUserQuery.get(Env.getCtx(), m_AD_Tab_ID, name); MUserQuery uq = MUserQuery.get(Env.getCtx(), m_AD_Tab_ID, name);
if (uq == null && code.length() > 0) if (code.length() > 0) { // New or updated
if (uq == null) // Create a new record
{ {
uq = new MUserQuery (Env.getCtx(), 0, null); uq = new MUserQuery (Env.getCtx(), 0, null);
uq.setName (name); uq.setName (name);
uq.setAD_Tab_ID(m_AD_Tab_ID); //red1 UserQuery [ 1798539 ] taking in new field from Compiere uq.setAD_Tab_ID(m_AD_Tab_ID); //red1 UserQuery [ 1798539 ] taking in new field from Compiere
uq.setAD_User_ID(Env.getAD_User_ID(Env.getCtx())); //red1 - [ 1798539 ] missing in Compiere delayed source :-) uq.setAD_User_ID(Env.getAD_User_ID(Env.getCtx())); //red1 - [ 1798539 ] missing in Compiere delayed source :-)
} }
else if (uq != null && code.length() == 0)
} else if (code.length() <= 0){ // Delete the query
if (uq == null)
{ {
FDialog.warn (m_targetWindowNo, this, "NeedsQuery", name);
return;
}
if (uq.delete(true)) if (uq.delete(true))
{ {
FDialog.info (m_targetWindowNo, this, "Deleted", name); FDialog.info (m_targetWindowNo, this, "Deleted", name);
@ -1249,26 +1464,34 @@ public class FindWindow extends Window implements EventListener<Event>, ValueCha
else else
msgLabel.setText(Msg.getMsg(Env.getCtx(), "SaveError")); msgLabel.setText(Msg.getMsg(Env.getCtx(), "SaveError"));
} }
//
}
} // cmd_save } // cmd_save
private void refreshUserQueries() private void refreshUserQueries()
{ {
String value = fQueryName.getValue(); String value = m_sNew;
if (fQueryName.getItemCount()>0){ // The list is initialized
value = fQueryName.getValue();
}
userQueries = MUserQuery.get(Env.getCtx(), m_AD_Tab_ID); userQueries = MUserQuery.get(Env.getCtx(), m_AD_Tab_ID);
fQueryName.getItems().clear(); fQueryName.getItems().clear();
boolean selected = false; boolean selected = false;
fQueryName.appendItem(m_sNew);
for (int i = 0; i < userQueries.length; i++) for (int i = 0; i < userQueries.length; i++)
{ {
Comboitem ci = fQueryName.appendItem(userQueries[i].getName()); Comboitem ci = fQueryName.appendItem(userQueries[i].getName());
if(value.equals(userQueries[i].getName())) if(value.equals(userQueries[i].getName()))
{ {
fQueryName.setSelectedItem(ci); fQueryName.setSelectedItem(ci);
parseUserQuery(userQueries[i]);
selected = true; selected = true;
} }
} }
if(!selected) fQueryName.setValue(""); if(!selected) fQueryName.setSelectedIndex(0); }
}
/** /**
* retrieve the columnName of the Column item selected * retrieve the columnName of the Column item selected
@ -1501,6 +1724,10 @@ public class FindWindow extends Window implements EventListener<Event>, ValueCha
} }
m_isCancel = false; // teo_sarca [ 1708717 ] m_isCancel = false; // teo_sarca [ 1708717 ]
// Test for no records
if (getNoOfRecords(m_query, true) != 0)
dispose();
} // cmd_ok_Simple } // cmd_ok_Simple
/** /**
@ -1575,96 +1802,16 @@ public class FindWindow extends Window implements EventListener<Event>, ValueCha
{ {
m_isCancel = false; // teo_sarca [ 1708717 ] m_isCancel = false; // teo_sarca [ 1708717 ]
// save pending // save pending
cmd_save(); cmd_save(false);
} // cmd_ok_Advanced
/**
* Save (Advanced)
*/
private void cmd_save()
{
log.info("");
//
m_query = new MQuery(m_tableName);
List<?> rowList = advancedPanel.getChildren();
for (int rowIndex = 1; rowIndex < rowList.size() ; rowIndex++)
{
// Column
ListItem row = (ListItem)rowList.get(rowIndex);
Listbox column = (Listbox)row.getFellow("listColumn"+row.getId());
if (column == null)
continue;
String ColumnName = column.getSelectedItem().getValue().toString();
String infoName = column.toString();
//
GridField field = getTargetMField(ColumnName);
if(field == null) continue; // Elaine 2008/07/29
boolean isProductCategoryField = isProductCategoryField(field.getAD_Column_ID());
String ColumnSQL = field.getColumnSQL(false);
// Op
Listbox op = (Listbox)row.getFellow("listOperator"+row.getId());
if (op == null)
continue;
String Operator = op.getSelectedItem().getValue().toString();
// Value ******
ListCell cellQueryFrom = (ListCell)row.getFellow("cellQueryFrom"+row.getId());
Object value = cellQueryFrom.getAttribute("value");
if (value == null)
{
if(Operator.equals(MQuery.NULL) || Operator.equals(MQuery.NOT_NULL))
{
m_query.addRestriction(ColumnSQL, Operator, null,
infoName, null);
}
continue;
}
Object parsedValue = parseValue(field, value);
if (parsedValue == null)
continue;
//encrypt the value if we are searching an encrypted column.
if (field.isEncryptedColumn()) {
value = SecureEngine.encrypt(value);
}
String infoDisplay = value.toString();
if (field.isLookup())
infoDisplay = field.getLookup().getDisplay(value);
else if (field.getDisplayType() == DisplayType.YesNo)
infoDisplay = Msg.getMsg(Env.getCtx(), infoDisplay);
// Value2 ******
if (MQuery.OPERATORS[MQuery.BETWEEN_INDEX].equals(op.getSelectedItem().toValueNamePair()))
{
ListCell cellQueryTo = (ListCell)row.getFellow("cellQueryTo"+row.getId());
Object value2 = cellQueryTo.getAttribute("value");
if (value2 == null)
continue;
Object parsedValue2 = parseValue(field, value2);
String infoDisplay_to = value2.toString();
if (parsedValue2 == null)
continue;
m_query.addRangeRestriction(ColumnSQL, parsedValue, parsedValue2,
infoName, infoDisplay, infoDisplay_to);
}
else if (isProductCategoryField && MQuery.OPERATORS[MQuery.EQUAL_INDEX].equals(op)) {
if (!(parsedValue instanceof Integer)) {
continue;
}
m_query
.addRestriction(getSubCategoryWhereClause(((Integer) parsedValue).intValue()));
}
else
m_query.addRestriction(ColumnSQL, Operator, parsedValue,
infoName, infoDisplay);
}
if(historyCombo.getSelectedItem()!=null) if(historyCombo.getSelectedItem()!=null)
{ {
addHistoryRestriction(historyCombo.getSelectedItem()); addHistoryRestriction(historyCombo.getSelectedItem());
} }
} // cmd_save
if (getNoOfRecords(m_query, true) != 0)
dispose();
} // cmd_ok_Advanced
/** /**