class AbstractExporter<T> extends AbstractNode implements Exporter<T> {
    protected Provider<T> provider;

    public AbstractExporter(Provider<T> provider, URL url) {
        super(url);
        this.provider = provider;
    }

    public Provider<T> getProvider() {
        return provider;
    }

    @Override
    public String desc() {
        return "[" + this.getClass().getSimpleName() + "] url=" + url;
    }

    /**
     * update real listened port
     *
     * @param port real listened port
     */
    protected void updateRealServerPort(int port) {
        getUrl().setPort(port);
    }

    @Override
    public Map<String, Object> getRuntimeInfo() {<FILL_FUNCTION_BODY>}
}

        Map<String, Object> infos = new HashMap<>();
        infos.put(RuntimeInfoKeys.URL_KEY, url.toFullStr());
        infos.put(RuntimeInfoKeys.STATE_KEY, init ? "init" : "unInit");
        infos.put(RuntimeInfoKeys.PROVIDER_KEY, provider.getRuntimeInfo());
        return infos;
    
<methods>public void <init>(com.weibo.api.motan.rpc.URL) ,public com.weibo.api.motan.rpc.URL getUrl() ,public synchronized void init() ,public boolean isAvailable() ,public void setAvailable(boolean) <variables>protected volatile boolean available,protected volatile boolean init,protected com.weibo.api.motan.rpc.URL url