@@ -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
0 commit comments