package _VisualDVM.Passes.All;
import Common.Utils.Utils_;
import _VisualDVM.Global;
import _VisualDVM.Passes.Sapfor.SilentSapforPass;
import _VisualDVM.ProjectData.SapforData.Arrays.ArrayLinkJson;
import _VisualDVM.ProjectData.SapforData.Arrays.ArrayLinksJson;
import _VisualDVM.ProjectData.SapforData.Arrays.ProjectArray;
public class SPF_GetArrayLinks extends SilentSapforPass {
    @Override
    protected void body() throws Exception {
        sapfor.RunAnalysis(
                getSapforPassName(),
                -Global.messagesServer.getPort(),
                target.sapforProperties.pack(),
                target.getProjFile().getAbsolutePath());
    }
    protected void unpack(String packed) throws Exception {
        //----------------------------------------
        /*
        map<DIST::Array*, set<DIST::Array*» arrayLinksByFuncCalls;как
            id_1|number_1|link_id1|link_id2|link_id3|
            id_2|number_2|link_id1|link_id2|link_id3
         */
        //эту инфу суем в список объявленных массивов, чтобы не плодить лишних таблиц.
        System.out.println("packed=" + Utils_.Brackets(packed));
        ProjectArray current_array = null;
        ArrayLinksJson links = Utils_.gson.fromJson(packed, ArrayLinksJson.class);
        for (ArrayLinkJson link : links.allLinks) {
            current_array = target.declaratedArrays.get(link.id);
            current_array.links.clear();
            for (long link_id : link.links) {
                current_array.links.put(link_id, target.declaratedArrays.get(link_id));
            }
        }
    }
    @Override
    protected void performDone() throws Exception {
        if (!sapfor.getResult().isEmpty()) {
            unpack(sapfor.getResult());
        }
    }
    @Override
    public boolean needsConfirmations() {
        return false;
    }
}
