Skip to content

Commit 068186c

Browse files
author
Open Lowcode SAS
committed
Close #287
1 parent 89cda5e commit 068186c

File tree

3 files changed

+41
-12
lines changed

3 files changed

+41
-12
lines changed

src/org/openlowcode/client/graphic/widget/CGrid.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -256,7 +256,7 @@ public UpdateMouseHandler(
256256
@Override
257257
public void handle(MouseEvent event) {
258258
MouseButton button = event.getButton();
259-
logger.severe("Audit of mouse click on menu "+event.getSource().getClass());
259+
logger.fine("Audit of mouse click on menu "+event.getSource().getClass());
260260
if (button == MouseButton.PRIMARY) {
261261
if (event.getClickCount() == 1 && (event.isShiftDown())) {
262262

@@ -791,6 +791,10 @@ public void changed(ObservableValue<? extends Boolean> arg0, Boolean oldvalue, B
791791
for (int i = 0; i < data.getObjectNumber(); i++)
792792
datainlist.add(data.getObjectAtIndex(i));
793793
treetable = new EditableTreeTable<ObjectDataElt>(datainlist);
794+
treetable.setFrozenObjectPredicate((a)->{
795+
logger.fine(" ---> Checking an Object Data Elt "+a.isFrozen()+" "+a.toString());
796+
return a.isFrozen();
797+
});
794798
treetable.setDefaultIsReadOnly(true);
795799
// -- dealing with lines (that will actually be displayed as columns)
796800

src/org/openlowcode/client/graphic/widget/table/EditableTreeTable.java

Lines changed: 34 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,8 @@ public class EditableTreeTable<E extends Object> {
100100
private ArrayList<Wrapper<E>> wrappedpayload;
101101
private TreeItem<EditableTreeTableLineItem<Wrapper<E>>> treeroot;
102102

103+
private Function<E,Boolean> frozenobjects;
104+
103105
private boolean defaultisreadonly = false;
104106

105107
private EventHandler<MouseEvent> readonlyactioneventhandler;
@@ -120,6 +122,10 @@ public void setDefaultIsReadOnly(boolean defaultisreadonly) {
120122
this.defaultisreadonly = defaultisreadonly;
121123
}
122124

125+
public void setFrozenObjectPredicate(Function<E,Boolean> frozenobjects) {
126+
this.frozenobjects = frozenobjects;
127+
}
128+
123129
/**
124130
* Creates an editable tree table
125131
*
@@ -244,7 +250,7 @@ public <F, G> void setColumnGrouping(
244250
E, F,
245251
G> columngrouping = new ColumnGrouping<E, F, G>(extracttitle, generatetitlekey, generatetitlelabel,
246252
horizontalconsolidationexception, payloadextractor, payloadintegration, columngroupinglabel,
247-
grouping, operator, formatvalidator);
253+
grouping, operator, formatvalidator,frozenobjects);
248254
this.columngroups.add(columngrouping);
249255
}
250256

@@ -497,11 +503,11 @@ private void resize() {
497503
public void changed(ObservableValue<? extends Number> arg0, Number arg1, Number arg2) {
498504
int totalwidth = 0;
499505
for (int j=0;j<columns.size();j++) {
500-
logger.severe(" column "+j+" width = "+columns.get(j).getWidth());
506+
logger.fine(" column "+j+" width = "+columns.get(j).getWidth());
501507
totalwidth+= columns.get(j).getWidth();
502508
}
503509
totalwidth+=14;
504-
logger.severe(" ---------------------------> Total width setup to "+totalwidth+" points");
510+
logger.fine(" ---------------------------> Total width setup to "+totalwidth+" points");
505511
treetableview.setMinWidth(totalwidth);
506512
treetableview.setPrefWidth(totalwidth);
507513
}
@@ -625,22 +631,22 @@ private void consolidateTree(TreeItem<EditableTreeTableLineItem<Wrapper<E>>> ite
625631
// if several items, do not simplidy at this level
626632

627633
if (item.getValue().getNumberofleaves()>1) {
628-
logger.severe(" Item "+item.getValue().getLabel()+" has several children.");
634+
logger.fine(" Item "+item.getValue().getLabel()+" has several children.");
629635
for (int i=0;i<item.getChildren().size();i++) {
630636
consolidateTree(item.getChildren().get(i),currentlevel+1);
631637
}
632638
}
633639
// one item, if children, cut them
634640
if (item.getValue().getNumberofleaves()==1) {
635641
if (item.getChildren().size()==1) {
636-
logger.severe(" Item "+item.getValue().getLabel()+"has only one data and one child, clear.");
642+
logger.fine(" Item "+item.getValue().getLabel()+"has only one data and one child, clear.");
637643
String extralabel = consolidatelowerlabels(item.getChildren().get(0),0);
638644
String newlabel = item.getValue().getLabel()+" "+extralabel;
639645
if (currentlevel==0) newlabel = extralabel;
640646
item.getValue().updateLabel(newlabel);
641647
item.getChildren().clear();
642648
} else {
643-
logger.severe(" Item "+item.getValue().getLabel()+"has only one data and no child, do nothing");
649+
logger.fine(" Item "+item.getValue().getLabel()+"has only one data and no child, do nothing");
644650
}
645651
}
646652
}
@@ -756,6 +762,7 @@ private static class EditableTreeTableValueColumn<E extends Object, F extends Ob
756762
private ColumnGrouping<E, F, G> columngrouping;
757763
private String titlekey;
758764

765+
759766
public boolean isEditable(EditableTreeTableLineItem<Wrapper<E>> lineitem) {
760767
ArrayList<Wrapper<E>> filteredvalues = columngrouping.filterItems(lineitem, titlekey);
761768
if (filteredvalues.size() == 1)
@@ -775,8 +782,10 @@ public void clear(EditableTreeTableLineItem<Wrapper<E>> lineitem) {
775782
public EditableTreeTableValueColumn(
776783
ColumnGrouping<E, F, G> columngrouping,
777784
String titlekey,
778-
String titlelabel) {
785+
String titlelabel,
786+
Function<E,Boolean> frozenobjects) {
779787
super(titlelabel);
788+
780789
logger.finest("Creating column for key = " + titlekey);
781790
this.columngrouping = columngrouping;
782791
this.titlekey = titlekey;
@@ -813,13 +822,25 @@ public void handle(CellEditEvent<EditableTreeTableLineItem<Wrapper<E>>, String>
813822

814823
}
815824
});
825+
826+
Function<EditableTreeTableLineItem<Wrapper<E>>,Boolean> cellvalidator = (a) -> {
827+
logger.fine(" ----------------------> Test of cell validator");
828+
ArrayList<Wrapper<E>> itemsforcell = columngrouping.filterItems(a, titlekey);
829+
if (itemsforcell!=null) if (itemsforcell.size()==1) {
830+
logger.fine(" >> "+frozenobjects.apply(itemsforcell.get(0).getPayload()));
831+
return frozenobjects.apply(itemsforcell.get(0).getPayload());
832+
}
833+
return new Boolean(true);
834+
};
835+
836+
816837
this.setCellFactory(col -> {
817838
LargeTextTreeTableCell<
818839
EditableTreeTableLineItem<Wrapper<E>>,
819840
String> cell = new LargeTextTreeTableCell<EditableTreeTableLineItem<Wrapper<E>>, String>(
820841
IDENTICAL_CONVERTER, columngrouping.formatvalidator, null, (a) -> {
821842
logger.finest("Inside read-only criteria");
822-
if (EditableTreeTableValueColumn.this.isEditable(a)) return new Boolean(false);
843+
if (EditableTreeTableValueColumn.this.isEditable(a)) return cellvalidator.apply(a);
823844
return new Boolean(true);
824845
}, false, true, 1);
825846

@@ -912,6 +933,7 @@ private static class ColumnGrouping<E extends Object, F extends Object, G extend
912933
private Operator<G> operator;
913934
private FormatValidator<G> formatvalidator;
914935
private Function<F, Boolean> horizontalconsolidationexception;
936+
private Function<E, Boolean> frozenobjects;
915937

916938
public ColumnGrouping(
917939
Function<E, F> extracttitle,
@@ -923,7 +945,8 @@ public ColumnGrouping(
923945
String columngroupinglabel,
924946
int grouping,
925947
Operator<G> operator,
926-
FormatValidator<G> formatvalidator) {
948+
FormatValidator<G> formatvalidator,
949+
Function<E,Boolean> frozenobjects) {
927950
super();
928951
this.extracttitle = extracttitle;
929952
this.generatetitlekey = generatetitlekey;
@@ -935,6 +958,7 @@ public ColumnGrouping(
935958
this.grouping = grouping;
936959
this.operator = operator;
937960
this.formatvalidator = formatvalidator;
961+
this.frozenobjects = frozenobjects;
938962
}
939963

940964
private ArrayList<Wrapper<E>> filterItems(EditableTreeTableLineItem<Wrapper<E>> row, String titlekey) {
@@ -980,7 +1004,7 @@ private ArrayList<Wrapper<E>> filterItems(EditableTreeTableLineItem<Wrapper<E>>
9801004
TreeTableColumn<
9811005
EditableTreeTableLineItem<Wrapper<E>>,
9821006
String> currentcolumn = new EditableTreeTableValueColumn<E, F, G>(this, titlekeyfinal,
983-
titlestring);
1007+
titlestring,frozenobjects);
9841008
columns.add(currentcolumn);
9851009
}
9861010
// ---------- Create Total Column

src/org/openlowcode/server/runtime/ServerConnection.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -570,11 +570,12 @@ private boolean requestdecodedquery(String majorquery, MessageBufferedWriter wri
570570
} catch (Throwable t) {
571571
treatThrowable(t, actionname, userid, writer);
572572
}
573-
reader.returnNextEndStructure("INLINEACTION");
573+
574574
} else {
575575
writer.sendMessageError(9999, "Not Authorized for the action " + action.getName());
576576

577577
}
578+
reader.returnNextEndStructure("INLINEACTION");
578579
} catch (Exception e) {
579580
logger.warning("------------------ Error in inline action -------------- ");
580581
treatThrowable(e, actionname, userid, writer);

0 commit comments

Comments
 (0)