Announcement

Collapse
No announcement yet.
X
  • Filter
  • Time
Clear All
new posts

    TreeGrid - Reparenting

    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:

    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);
    		}
    	}
    });
    Snipet from DataSource:

    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;
    }
    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:

    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)
    Log from DevCon:
    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?
    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.

    #2
    could anyone (Isomorphic?) give me a hint?

    Comment

    Working...
    X