class HgStoreClient {

    // TODO: Holding more than one HgSessionManager is available,if you want to connect multi
    private final HgSessionProvider sessionProvider;
    private PDClient pdClient;

    public HgStoreClient() {
        this.sessionProvider = new HgStoreSessionProvider();
    }

    public HgStoreClient(PDConfig config) {
        this.sessionProvider = new HgStoreSessionProvider();
        pdClient = PDClient.create(config);
        setPdClient(pdClient);
    }

    public HgStoreClient(PDClient pdClient) {
        this.sessionProvider = new HgStoreSessionProvider();
        setPdClient(pdClient);
    }

    public static HgStoreClient create(PDConfig config) {
        return new HgStoreClient(config);
    }

    public static HgStoreClient create(PDClient pdClient) {
        return new HgStoreClient(pdClient);
    }

    public static HgStoreClient create() {
        return new HgStoreClient();
    }

    public void setPDConfig(PDConfig config) {
        pdClient = PDClient.create(config);
        setPdClient(pdClient);
    }

    /**
     * Retrieve or create a HgStoreSession.
     *
     * @param graphName
     * @return
     */
    public HgStoreSession openSession(String graphName) {
        return this.sessionProvider.createSession(graphName);
    }

    public PDClient getPdClient() {
        return pdClient;
    }

    public void setPdClient(PDClient client) {<FILL_FUNCTION_BODY>}

}

        this.pdClient = client;
        HgStoreNodeManager nodeManager =
                HgStoreNodeManager.getInstance();

        HgStoreNodePartitionerImpl p = new HgStoreNodePartitionerImpl(pdClient, nodeManager);
        nodeManager.setNodeProvider(p);
        nodeManager.setNodePartitioner(p);
        nodeManager.setNodeNotifier(p);
    
<no_super_class>