Reparenting folders with 1+ children isn't working and after days of try'n'error i still have no idea what is causing this behaviour and was hoping to get some help here.
I have a TreeGrid, following settings are applied:
Snipet from DataSource:
I can reparent Folders without any problems as long as the TreeNode to be reparent doesn't have any children.
As soon as the TreeNode has 1+ children, I get a warning:
Log from DevCon:
Reparented TreeNode: id=15, old Parent = 0, new parent = 14
1 child: id=69
TreeNode 69, child of the reparented TreeNode won't 'work' anymore.. can't be reparented (14:39:09.871:TMR1:INFO:dragDrop:drag cancelled by false return from: dragStart on [TreeGrid ID:isc_OID_25]) until it get's deselected. reparenting afterwards is possible - but results in being shown twice, in the original position + in the droped position.
I have a TreeGrid, following settings are applied:
Code:
TreeGridField pgField = new TreeGridField();
pgField.setName("produktgruppenbezeichung");
setFields(pgField);
setLoadDataOnDemand(false);
setShowHeader(true);
setLeaveScrollbarGap(false);
setDataSource(DSProduktgruppe.getInstance());
setAutoFetchData(true);
setSelectionType(SelectionStyle.SINGLE);
setCanEdit(true);
setCanReparentNodes(true);
[...]
addDataArrivedHandler(new DataArrivedHandler() {
@Override
public void onDataArrived(DataArrivedEvent event) {
TreeNode[] allNodes = getTree().getAllNodes();
for (TreeNode tn : allNodes) {
tn.setIsFolder(true);
}
}
});
Code:
public DSProduktgruppe(String id) {
// id = "produktgruppeDS"
setID(id);
setTitleField("produktgruppenbezeichung");
setTitle("Produktgruppe");
DataSourceField field;
// ProduktgruppenID
field = new DataSourceIntegerField("produktgruppeID", "ID");
field.setPrimaryKey(true);
field.setRequired(true);
field.setCanEdit(false);
addField(field);
// Parent
field = new DataSourceIntegerField("isChildOf", "Parent");
field.setRequired(true);
field.setForeignKey("produktgruppeDS.produktgruppeID");
field.setRootValue(0);
field.setCanEdit(true);
addField(field);
// Artikelbezeichnung
field = new DataSourceTextField("produktgruppenbezeichung", "Produktgruppe");
field.setRequired(true);
field.setCanEdit(true);
addField(field);
}
@Override
protected void executeUpdate(final String requestId, final DSRequest request, final DSResponse response) {
Record editedRecord = getEditedRecord(request);
// Persistence not jet implemented
TreeNode[] list = new TreeNode[1];
list[0] = (TreeNode) editedRecord;
response.setData(list);
processResponse(requestId, response);
}
private TreeNode getEditedRecord(DSRequest request) {
// Retrieving values before edit
Record oldValues = request.getOldValues();
// Creating new record for combining old values with changes
TreeNode newRecord = new TreeNode();
// Copying properties from old record
JSOHelper.apply(oldValues.getJsObj(), newRecord.getJsObj());
// Retrieving changed values
JavaScriptObject data = request.getData();
// Apply changes
JSOHelper.apply(data, newRecord.getJsObj());
return newRecord;
}
As soon as the TreeNode has 1+ children, I get a warning:
Code:
4:28:06.529 [ERROR] [Preisparser] 14:28:06.529:MUP9:WARN:ResultTree:isc_ResultTree_0 (created by: isc_OID_25):Adding node to tree with id property set to:69. A node with this ID is already present in this Tree - that node will be replaced. Note that this warning may be disabled by setting the reportCollisions attribute to false.
com.smartgwt.client.core.JsObject$SGWT_WARN: 14:28:06.529:MUP9:WARN:ResultTree:isc_ResultTree_0 (created by: isc_OID_25):Adding node to tree with id property set to:69. A node with this ID is already present in this Tree - that node will be replaced. Note that this warning may be disabled by setting the reportCollisions attribute to false.
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:105)
at com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71)
at com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:157)
at com.google.gwt.dev.shell.BrowserChannel.reactToMessagesWhileWaitingForReturn(BrowserChannel.java:1713)
at com.google.gwt.dev.shell.BrowserChannelServer.invokeJavascript(BrowserChannelServer.java:165)
at com.google.gwt.dev.shell.ModuleSpaceOOPHM.doInvoke(ModuleSpaceOOPHM.java:120)
at com.google.gwt.dev.shell.ModuleSpace.invokeNative(ModuleSpace.java:507)
at com.google.gwt.dev.shell.ModuleSpace.invokeNativeVoid(ModuleSpace.java:284)
at com.google.gwt.dev.shell.JavaScriptHost.invokeNativeVoid(JavaScriptHost.java:107)
at com.smartgwt.client.data.DataSource.processResponse(DataSource.java)
at de.zurmuehl.parser.data.dataSource.DSProduktgruppe.executeUpdate(DSProduktgruppe.java:163)
at de.zurmuehl.parser.data.dataSource.RPCDataSource.transformRequest(RPCDataSource.java:79)
at sun.reflect.GeneratedMethodAccessor41.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:103)
at com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71)
at com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:157)
at com.google.gwt.dev.shell.BrowserChannel.reactToMessagesWhileWaitingForReturn(BrowserChannel.java:1713)
at com.google.gwt.dev.shell.BrowserChannelServer.invokeJavascript(BrowserChannelServer.java:165)
at com.google.gwt.dev.shell.ModuleSpaceOOPHM.doInvoke(ModuleSpaceOOPHM.java:120)
at com.google.gwt.dev.shell.ModuleSpace.invokeNative(ModuleSpace.java:507)
at com.google.gwt.dev.shell.ModuleSpace.invokeNativeObject(ModuleSpace.java:264)
at com.google.gwt.dev.shell.JavaScriptHost.invokeNativeObject(JavaScriptHost.java:91)
at com.google.gwt.core.client.impl.Impl.apply(Impl.java)
at com.google.gwt.core.client.impl.Impl.entry0(Impl.java:188)
at sun.reflect.GeneratedMethodAccessor22.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:103)
at com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71)
at com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:157)
at com.google.gwt.dev.shell.BrowserChannel.reactToMessages(BrowserChannel.java:1668)
at com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:401)
at com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:222)
at java.lang.Thread.run(Thread.java:619)
Reparented TreeNode: id=15, old Parent = 0, new parent = 14
1 child: id=69
Code:
14:30:13.153:MUP9:INFO:ResultTree:isc_ResultTree_0 (created by: isc_OID_25):Updating cache: operationType 'update', 1 rows update data:
[
{__ref: {GWT Java Obj},
produktgruppeID: 15,
isChildOf: 14,
produktgruppenbezeichung: "sonstiges",
isFolder: true,
children: Array[1]}
]
14:30:13.154:MUP9:WARN:ResultTree:isc_ResultTree_0 (created by: isc_OID_25):Adding node to tree with id property set to:69. A node with this ID is already present in this Tree - that node will be replaced. Note that this warning may be disabled by setting the reportCollisions attribute to false.
14:30:13.189:MUP9:DEBUG:ResultTree:isc_ResultTree_0 (created by: isc_OID_25):updated cache, 1 out of 1 rows remain in cache, 0 row(s) added.
14:30:13.194:MUP9:DEBUG:dragDrop:Decrementing update count - was 1
14:30:13.194:MUP9:DEBUG:dragDrop:All updates complete, calling dragComplete()
14:30:13.195:MUP9:DEBUG:dragDrop:Invoking transferDragData from inside transferNodes - no server queries needed?
Comment