(I've moved my question out of GWT-RPC DataSource implementation, because I can't tell if anyone has viewed it...)
I need some help understanding how to set the primary key and foreign key for TreeNodes, using the GwtDataSource example. I'm building a TreeGrid, but the nodes are displayed at the same root level and reference the original nodes, so they unfold recursively.
Here's an example with a static list of two nodes. Record 1 is the root and record 6 refers (or connectsTo) record 1:
I need some help understanding how to set the primary key and foreign key for TreeNodes, using the GwtDataSource example. I'm building a TreeGrid, but the nodes are displayed at the same root level and reference the original nodes, so they unfold recursively.
Here's an example with a static list of two nodes. Record 1 is the root and record 6 refers (or connectsTo) record 1:
Code:
public class ServiceNodesServiceImpl extends RemoteServiceServlet implements ServiceNodesService, Serializable, IsSerializable { static List<ServiceNodeRecord> staticList = new ArrayList<ServiceNodeRecord>(); static ServiceNodeRecord record = null; // load static data for testing static { record = new ServiceNodeRecord(); record.setConnectsTo("0"); record.setNodeId("1"); record.setInstitutionId("220"); record.setServiceName("hub-dev"); record.setNodeType("HUB"); staticList.add(record); record = new ServiceNodeRecord(); record.setConnectsTo("1"); record.setNodeId("6"); record.setInstitutionId("220"); record.setServiceName("mmc"); record.setNodeType("MMC"); } public List<ServiceNodeRecord> fetch() { return staticList; } } public class ServiceNodeDataSource extends GwtRpcDataSource { public ServiceNodeDataSource () { DataSourceField field; field = new DataSourceIntegerField ("nodeId", "nodeId"); // field.setPrimaryKey (true); field.setRequired (true); addField (field); field = new DataSourceTextField ("institutionId", "Id"); field.setRequired (true); addField (field); field = new DataSourceTextField ("connectsTo", "Connects"); // field.setForeignKey("connectsTo"); field.setRequired (true); addField (field); field = new DataSourceTextField ("serviceName", "Service"); field.setRequired (true); addField (field); field = new DataSourceTextField ("nodeType", "Type"); field.setRequired (true); addField (field); @Override protected void executeFetch (final String requestId, final DSRequest request, final DSResponse response) { SC.logWarn ("in executeFetch"); ServiceNodesServiceAsync service = GWT.create (ServiceNodesService.class); service.fetch (new AsyncCallback<List<ServiceNodeRecord>> () { public void onFailure (Throwable caught) { response.setStatus (RPCResponse.STATUS_FAILURE); processResponse (requestId, response); } public void onSuccess (List<ServiceNodeRecord> result) { TreeNode[] list = new TreeNode[result.size ()]; for (int i = 0; i < list.length; i++) { TreeNode record = new TreeNode(); copyValues (result.get (i), record); list[i] = record; } response.setData (list); processResponse (requestId, response); } }); } // fetch from, to private static void copyValues (ServiceNodeRecord from, TreeNode to) { to.setParentID(from.getNodeId()); System.out.println("setParentID = " + from.getNodeId()); to.setAttribute("nodeId", from.getNodeId()); to.setAttribute("connectsTo", from.getConnectsTo()); to.setAttribute("serviceName", from.getServiceName ()); to.setAttribute("institutionId", from.getInstitutionId ()); to.setAttribute("nodeType", from.getNodeType()); } } public class ServiceNodesTreeGrid extends TreeGrid { public ServiceNodesTreeGrid() { TreeGridField institutionId = new TreeGridField("institutionId", "Node"); TreeGridField serviceNameField = new TreeGridField("serviceName", "Service"); TreeGridField nodeTypeField = new TreeGridField("nodeType", "Type"); setFields(institutionId, serviceNameField, nodeTypeField); ServiceNodeDataSource dataSource = new ServiceNodeDataSource(); setDataSource(dataSource); this.invalidateCache(); this.fetchData(); } } public class ServiceNodeRecord implements Serializable { private static final long serialVersionUID = 1L; private String nodeId; private String serviceName; private String institutionCode; private String nodeType; private String connectsTo; public String getNodeId() { return nodeId; } public void setNodeId(String nodeId) { this.nodeId = nodeId; } public String getConnectsTo() { return connectsTo; } public void setConnectsTo(String connectsTo) { this.connectsTo = connectsTo; } public String getNodeType() { return nodeType; } public void setNodeType(String nodeType) { this.nodeType = nodeType; } public String getServiceName() { return serviceName; } public void setServiceName(String serviceName) { this.serviceName = serviceName; } public String getInstitutionId() { return institutionId; } public void setInstitutionId(String institutionId) { this.institutionId = institutionId; } } public class MMCClient implements EntryPoint { private ServiceNodesTreeGrid serviceNodesCanvas; public void onModuleLoad() { VLayout containerLayout = new VLayout(); HLayout topPane = new HLayout(); serviceNodesCanvas = new ServiceNodesTreeGrid(); topPane.addMember(serviceNodesCanvas); containerLayout.addMember(topPane); RootPanel.get("mmcclient").add(containerLayout); }
Comment