Skip to content
Snippets Groups Projects
AvatarDesignPanel.java 28.6 KiB
Newer Older
/* Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Ludovic Apvrille
 * 
 * ludovic.apvrille AT enst.fr
 * 
 * This software is a computer program whose purpose is to allow the
 * edition of TURTLE analysis, design and deployment diagrams, to
 * allow the generation of RT-LOTOS or Java code from this diagram,
 * and at last to allow the analysis of formal validation traces
 * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP
 * from INRIA Rhone-Alpes.
 * 
 * This software is governed by the CeCILL  license under French law and
 * abiding by the rules of distribution of free software.  You can  use,
 * modify and/ or redistribute the software under the terms of the CeCILL
 * license as circulated by CEA, CNRS and INRIA at the following URL
 * "http://www.cecill.info".
 * 
 * As a counterpart to the access to the source code and  rights to copy,
 * modify and redistribute granted by the license, users are provided only
 * with a limited warranty  and the software's author,  the holder of the
 * economic rights,  and the successive licensors  have only  limited
 * liability.
 * 
 * In this respect, the user's attention is drawn to the risks associated
 * with loading,  using,  modifying and/or developing or reproducing the
 * software by the user in light of its specific status of free software,
 * that may mean  that it is complicated to manipulate,  and  that  also
 * therefore means  that it is reserved for developers  and  experienced
 * professionals having in-depth computer knowledge. Users are therefore
 * encouraged to load and test the software's suitability as regards their
 * requirements in conditions enabling the security of their systems and/or
 * data to be ensured and,  more generally, to use and operate it in the
 * same conditions as regards security.
 * 
 * The fact that you are presently reading this means that you have had
 * knowledge of the CeCILL license and that you accept its terms.
 */

import avatartranslator.*;
import myutil.GraphicLib;
import proverifspec.ProVerifOutputAnalyzer;
import proverifspec.ProVerifQueryAuthResult;
import proverifspec.ProVerifQueryResult;
import proverifspec.ProVerifResultTrace;
import ui.avatarbd.*;
import ui.avatardd.ADDDiagramPanel;
import ui.avatarsmd.AvatarSMDPanel;
import ui.avatarsmd.AvatarSMDState;
import ui.avatarsmd.AvatarSMDToolBar;
import ui.interactivesimulation.SimulationLatency;
import ui.util.IconManager;

import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import java.awt.*;
import java.util.*;
import java.util.List;
 * Class AvatarDesignPanel
 * Management of Avatar block panels
 * Creation: 06/04/2010
 *
 * @author Ludovic APVRILLE
 * @version 1.0 06/04/2010
 * @see MainGUI
public class AvatarDesignPanel extends TURTLEPanel {

    public AvatarBDPanel abdp;

    public AvatarDesignPanel(MainGUI _mgui) {
        super(_mgui);
        if (_mgui == null) {
            //for unit testing only
            abdp = new AvatarBDPanel(null, null);
            return;
        }
        // Issue #41 Ordering of tabbed panes 
        //tabbedPane = GraphicLib.createTabbedPane();//new JTabbedPane();
        tabbedPane = GraphicLib.createDraggableEnhancedTabbedPaneFixedAt0(this);//new JTabbedPane();


            @Override
            public void stateChanged(ChangeEvent e) {
                mgui.paneDesignAction(e);
            }
        };

        tabbedPane.addChangeListener(cl);
        tabbedPane.addMouseListener(new TURTLEPanelPopupListener(this, mgui));
    }

    public void setValidated(List<AvatarBDStateMachineOwner> _validated) {
        if (abdp != null) {
            abdp.setValidated(_validated);
        }
    }

    public void setIgnored(List<AvatarBDStateMachineOwner> _ignored) {
        if (abdp != null) {
            abdp.setIgnored(_ignored);
        }
    }

    public void setOptimized(boolean _optimized) {
        if (abdp != null) {
            abdp.setOptimized(_optimized);
        }
    }

    public void setConsiderTimingOperators(boolean _considerTimingOperators) {
        if (abdp != null) {
            abdp.setConsiderTimingOperators(_considerTimingOperators);
        }
    }

Dominique Blouin's avatar
Dominique Blouin committed
    public List<AvatarBDStateMachineOwner> getValidated() {
        if (abdp != null) {
            return abdp.getValidated();
        }
        return null;
    }

Dominique Blouin's avatar
Dominique Blouin committed
    public List<AvatarBDStateMachineOwner> getIgnored() {
        if (abdp != null) {
            return abdp.getIgnored();
        }
        return null;
    }

    public boolean getOptimized() {
        if (abdp != null) {
            return abdp.getOptimized();
        }
        return true;
    }

    public boolean getConsiderTimingOperators() {
        if (abdp != null) {
            return abdp.getConsiderTimingOperators();
        }
        return true;
    }

    public AvatarBDPanel getAvatarBDPanel() {
        return abdp;
    }

    public AvatarSMDPanel getAvatarSMDPanel(String name) {
        AvatarSMDPanel asmdp;
        for (int i = 1; i < panels.size(); i++) {
            asmdp = (AvatarSMDPanel) (panels.elementAt(i));
            if (asmdp.getName().compareTo(name) == 0) {
                return asmdp;
            }
        }
        return null;
    }

    public void addAvatarStateMachineDiagramPanel(String s) {
        JPanel toolBarPanel = new JPanel();
        toolBarPanel.setLayout(new BorderLayout());

        AvatarSMDToolBar toolBarActivity = new AvatarSMDToolBar(mgui);
        toolbars.add(toolBarActivity);

        AvatarSMDPanel asmdp = new AvatarSMDPanel(mgui, toolBarActivity);
        asmdp.tp = this;
        asmdp.setName(s);
        JScrollDiagramPanel jsp = new JScrollDiagramPanel(asmdp);
        asmdp.jsp = jsp;
        jsp.setWheelScrollingEnabled(true);
        jsp.getVerticalScrollBar().setUnitIncrement(MainGUI.INCREMENT);
        toolBarPanel.add(toolBarActivity, BorderLayout.NORTH);
        toolBarPanel.add(jsp, BorderLayout.CENTER);
        panels.add(asmdp);
        tabbedPane.addTab(s, IconManager.imgic63, toolBarPanel, "Opens the state machine of " + s);
        //tabbedPane.setMnemonicAt(tabbedPane.getTabCount()-1, '^');
        return;
    }

Dominique Blouin's avatar
Dominique Blouin committed
    @Override
    public void init() {

        //  Class Diagram toolbar
        AvatarBDToolBar toolBarAvatarBD = new AvatarBDToolBar(mgui);
        toolbars.add(toolBarAvatarBD);

        toolBarPanel = new JPanel();
        toolBarPanel.setLayout(new BorderLayout());

        //Class diagram
        abdp = new AvatarBDPanel(mgui, toolBarAvatarBD);
        abdp.setName("Block Diagram");
        abdp.tp = this;
        tdp = abdp;
        panels.add(abdp); // Always first in list
        JScrollDiagramPanel jsp = new JScrollDiagramPanel(abdp);
        abdp.jsp = jsp;
        jsp.setWheelScrollingEnabled(true);
        jsp.getVerticalScrollBar().setUnitIncrement(MainGUI.INCREMENT);
        toolBarPanel.add(toolBarAvatarBD, BorderLayout.NORTH);
        toolBarPanel.add(jsp, BorderLayout.CENTER);
        tabbedPane.addTab("Design", IconManager.imgic80, toolBarPanel, "Opens the Design");
        tabbedPane.setSelectedIndex(0);
        //tabbedPane.setMnemonicAt(tabbedPane.getTabCount()-1, '^');
        mgui.changeMade(abdp, TDiagramPanel.NEW_COMPONENT);

        //jsp.setVisible(true);

    }

Dominique Blouin's avatar
Dominique Blouin committed
    public List<AvatarBDLibraryFunction> getAllLibraryFunctions(String _name) {
        return abdp.getAllLibraryFunctionsForBlock(_name);
Dominique Blouin's avatar
Dominique Blouin committed
    public List<TAttribute> getAllAttributes(String _name) {
        return abdp.getAllAttributesOfBlock(_name);
    }

Dominique Blouin's avatar
Dominique Blouin committed
    public List<AvatarMethod> getAllMethods(String _name) {
Dominique Blouin's avatar
Dominique Blouin committed
    public List<AvatarSignal> getAllSignals(String _name) {
Dominique Blouin's avatar
Dominique Blouin committed
    public List<String> getAllTimers(String _name) {
        return abdp.getAllTimersOfBlock(_name);
    }
Dominique Blouin's avatar
Dominique Blouin committed
    @Override
    public String saveHeaderInXml(String extensionToName) {
        if (extensionToName == null) {
            return "<Modeling type=\"AVATAR Design\" nameTab=\"" + mgui.getTabName(this) + "\" tabs=\"" + getAllTabsName() + "\" >\n";
Dominique Blouin's avatar
Dominique Blouin committed

        return "<Modeling type=\"AVATAR Design\" nameTab=\"" + mgui.getTabName(this) + extensionToName + "\" tabs=\"" + getAllTabsName() + "\" >\n";
Dominique Blouin's avatar
Dominique Blouin committed
    @Override
    public String saveTailInXml() {
        return "</Modeling>\n\n\n";
    }

Dominique Blouin's avatar
Dominique Blouin committed
    @Override
    public String toString() {
        return mgui.getTitleAt(this) + " (Design)";
    }

    public void resetMetElements() {
        //TraceManager.addDev("Reset met elements");
        TGComponent tgc;

        for (int i = 0; i < panels.size(); i++) {
            Iterator<TGComponent> iterator = panels.get(i).getComponentList().listIterator();
            while (iterator.hasNext()) {
                tgc = iterator.next();
                tgc.setAVATARMet(0);
                tgc.setInternalAvatarMet(0);

            }
        }

    }

Dominique Blouin's avatar
Dominique Blouin committed
    public List<TGComponent> getListOfComponentsInMutex() {
Dominique Blouin's avatar
Dominique Blouin committed
        List<TGComponent> list = new LinkedList<TGComponent>();
        for (int i = 0; i < panels.size(); i++) {
            tdp = panels.get(i);
            if (tdp instanceof AvatarSMDPanel) {
                Iterator<TGComponent> iterator = panels.get(i).getComponentList().listIterator();
                while (iterator.hasNext()) {
                    tgc = iterator.next();
                    tgc.getAllCheckableInvariant(list);
                }
            }
        }

        return list;

    }

    public TGComponent hasCheckableMasterMutex() {
        TGComponent tgc, tgctmp;
        for (int i = 0; i < panels.size(); i++) {
            tdp = panels.get(i);
            if (tdp instanceof AvatarSMDPanel) {
                Iterator<TGComponent> iterator = panels.get(i).getComponentList().listIterator();
                while (iterator.hasNext()) {
                    tgc = iterator.next();
                    tgctmp = tgc.hasCheckableMasterMutex();
                    if (tgctmp != null) {
                        //TraceManager.addDev("Found element with master mutex: " + tgctmp);
                        return tgctmp;
                    }
                }
            }
        }

        return null;
    }

    public void removeAllMutualExclusionWithMasterMutex() {
        TGComponent tgc;
        for (int i = 0; i < panels.size(); i++) {
            tdp = panels.get(i);
            if (tdp instanceof AvatarSMDPanel) {
                Iterator<TGComponent> iterator = panels.get(i).getComponentList().listIterator();
                while (iterator.hasNext()) {
                    tgc = iterator.next();
                    tgc.removeAllMutualExclusionWithMasterMutex();
                }
            }
        }
    }

    public void reinitMutualExclusionStates() {
        TGComponent tgc;
        for (int i = 0; i < panels.size(); i++) {
            tdp = panels.get(i);
            if (tdp instanceof AvatarSMDPanel) {
                Iterator<TGComponent> iterator = panels.get(i).getComponentList().listIterator();
                while (iterator.hasNext()) {
                    tgc = iterator.next();
                    if (tgc instanceof AvatarSMDState) {
                        ((AvatarSMDState) tgc).reinitMutualExclusionStates();
Dominique Blouin's avatar
Dominique Blouin committed
    public List<String> getPropertyPragmas() {
        List<String> result = new LinkedList<String>();
        for (Object tgc : abdp.getComponentList()) {
            if (tgc instanceof AvatarBDPragma) {
                result.addAll(((AvatarBDPragma) tgc).getProperties());
            }
        }

        return result;
    }

Dominique Blouin's avatar
Dominique Blouin committed
    public List<String> getModelPragmas() {
        List<String> result = new LinkedList<String>();
        for (Object tgc : abdp.getComponentList()) {
            if (tgc instanceof AvatarBDPragma) {
                result.addAll(((AvatarBDPragma) tgc).getModels());
            }
        }

        return result;
    }

    public void resetModelBacktracingProVerif() {
        if (abdp == null) {
            return;
        }

        // Reset confidential attributes
        for (AvatarBDBlock block1 : abdp.getFullBlockList()) {
            block1.resetConfidentialityOfAttributes();
        }
        for (Object tgc : abdp.getComponentList()) {
            if (tgc instanceof AvatarBDPragma) {
                AvatarBDPragma pragma = (AvatarBDPragma) tgc;
                pragma.authStrongMap.clear();
                pragma.authWeakMap.clear();

            }
        }
        // Reset reachable states
        for (int i = 0; i < panels.size(); i++) {
            tdp = panels.get(i);
            if (tdp instanceof AvatarSMDPanel) {
                ((AvatarSMDPanel) tdp).resetStateSecurityInfo();
    public void modelBacktracingUppaal(Map<String, Integer> verifMap) {
        for (Object ob : abdp.getComponentList()) {
            if (ob instanceof AvatarBDSafetyPragma) {
                AvatarBDSafetyPragma pragma = (AvatarBDSafetyPragma) ob;
                pragma.verifMap = verifMap;
            }
        }
    }

    public void modelBacktracingLatency(Vector<SimulationLatency> latencies) {
        //Search for Safety Pragma
        for (Object ob : abdp.getComponentList()) {
            if (ob instanceof AvatarBDPerformancePragma) {
                AvatarBDPerformancePragma bdpragma = (AvatarBDPerformancePragma) ob;
                //Match each safety pragma to latency result
                for (String s : bdpragma.getProperties()) {
                    for (SimulationLatency latency : latencies) {
                        for (AvatarPragmaLatency pragma : latency.getPragmas()) {
                            if (pragma.getPragmaString().equals(s)) {
                                //Check if the latency statement is true
                                int refTime = pragma.getTime();
                                float time = 0;
                                //System.out.println("time " + latency.getAverageTime() + " " + refTime);
                                try {
                                    time = Float.valueOf(latency.getAverageTime());
                                } catch (Exception e) {
                                    continue;
                                }
                                if (pragma.getSymbolType() == AvatarPragmaLatency.lessThan) {
                                    if (time < refTime) {
                                        bdpragma.verifMap.put(s, "PROVED_TRUE");
                                        //mark as true
                                    } else {
                                        bdpragma.verifMap.put(s, "PROVED_FALSE");
                                    }
                                } else if (pragma.getSymbolType() == AvatarPragmaLatency.greaterThan) {
                                    if (time > refTime) {
                                        bdpragma.verifMap.put(s, "PROVED_TRUE");
                                        //mark as true
                                    } else {
                                        bdpragma.verifMap.put(s, "PROVED_FALSE");
                                    }
                                } else if (pragma.getSymbolType() == AvatarPragmaLatency.query) {
                                    //Draw average time on verif map
                                    bdpragma.verifMap.put(s, Float.toString(time));
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    public void modelBacktracingProVerif(ProVerifOutputAnalyzer pvoa) {

        if (abdp == null) {
            return;
        }

        resetModelBacktracingProVerif();

        // Confidential attributes
        Map<AvatarPragmaSecret, ProVerifQueryResult> confResults = pvoa.getConfidentialityResults();
        Map<AvatarAttribute, AvatarPragma> secretAttributes = new HashMap<AvatarAttribute, AvatarPragma>();
        Map<AvatarAttribute, AvatarPragma> nonSecretAttributes = new HashMap<AvatarAttribute, AvatarPragma>();
        for (AvatarPragmaSecret pragma : confResults.keySet()) {
            ProVerifQueryResult result = confResults.get(pragma);
            if (result.isProved()) {
                    secretAttributes.put(pragma.getArg(), pragma);
                    nonSecretAttributes.put(pragma.getArg(), pragma);
        for (AvatarBDBlock bdBlock : abdp.getFullBlockList())
            for (TAttribute tattr : bdBlock.getAttributeList()) {
                if (tattr.getType() == TAttribute.OTHER) {
                    List<TAttribute> types = abdp.getAttributesOfDataType(tattr.getTypeOther());
                    int toBeFound = types.size();
                    for (TAttribute type : types) {
                        for (AvatarAttribute attribute : secretAttributes.keySet())
                            if (attribute.getBlock().getName().equals(bdBlock.getBlockName()) && attribute.getName().equals(tattr.getId() + "__" + type.getId())) {
                                toBeFound--;
                                ProVerifResultTrace trace = confResults.get(secretAttributes.get(attribute)).getTrace();
                                if (trace != null) {
                                    bdBlock.addProVerifTrace(tattr, trace);
                                }
                        for (AvatarAttribute attribute : nonSecretAttributes.keySet())
                            if (attribute.getBlock().getName().equals(bdBlock.getBlockName()) && attribute.getName().equals(tattr.getId() + "__" + type.getId())) {
                                ProVerifResultTrace trace = confResults.get(nonSecretAttributes.get(attribute)).getTrace();
                                if (trace != null) {
                                    bdBlock.addProVerifTrace(tattr, trace);
                                }
                    if (ko) {
                        tattr.setConfidentialityVerification(TAttribute.CONFIDENTIALITY_KO);

                    } else if (toBeFound == 0) {
                        tattr.setConfidentialityVerification(TAttribute.CONFIDENTIALITY_OK);
                    for (AvatarAttribute attribute : secretAttributes.keySet())
                        if (attribute.getBlock().getName().equals(bdBlock.getBlockName()) && attribute.getName().equals(tattr.getId())) {
                            tattr.setConfidentialityVerification(TAttribute.CONFIDENTIALITY_OK);
                            ProVerifResultTrace trace = confResults.get(secretAttributes.get(attribute)).getTrace();
                            if (trace != null) {
                                bdBlock.addProVerifTrace(tattr, trace);
                            }
                    for (AvatarAttribute attribute : nonSecretAttributes.keySet())
                        if (attribute.getBlock().getName().equals(bdBlock.getBlockName()) && attribute.getName().equals(tattr.getId())) {
                            tattr.setConfidentialityVerification(TAttribute.CONFIDENTIALITY_KO);
                            ProVerifResultTrace trace = confResults.get(nonSecretAttributes.get(attribute)).getTrace();
                            if (trace != null) {
                                bdBlock.addProVerifTrace(tattr, trace);
                            }
        Map<AvatarPragmaReachability, ProVerifQueryResult> reachResults = pvoa.getReachabilityResults();
        for (AvatarPragmaReachability pragma : reachResults.keySet()) {
            ProVerifQueryResult result = reachResults.get(pragma);
            if (result.isProved()) {
                for (int i = 0; i < panels.size(); i++) {
                    tdp = panels.get(i);
                    if ((tdp instanceof AvatarSMDPanel) && (tdp.getName().compareTo(pragma.getBlock().getName()) == 0)) {
                        Iterator<TGComponent> iterator = panels.get(i).getComponentList().listIterator();
                        while (iterator.hasNext()) {
                            TGComponent tgc = iterator.next();
                            if (tgc instanceof AvatarSMDState) {
                                ((AvatarSMDState) tgc).setSecurityInfo(
                                        result.isSatisfied() ? AvatarSMDState.REACHABLE : AvatarSMDState.NOT_REACHABLE,
                                        pragma.getState().getName());
        Map<AvatarPragmaAuthenticity, ProVerifQueryAuthResult> authResults = pvoa.getAuthenticityResults();
        for (Object ob : abdp.getComponentList())
            if (ob instanceof AvatarBDPragma) {
                AvatarBDPragma pragma = (AvatarBDPragma) ob;
                for (String prop : pragma.getProperties()) {
                    String[] split = prop.trim().split("\\s+");
                    if (split[0].equals("#Authenticity")) {
                        String[] argA = split[1].split("\\.");
                        String[] argB = split[2].split("\\.");

                        if (argA.length != 3 || argB.length != 3)
                            continue;

                        TAttribute tattrA = abdp.getAttributeByBlockName(argA[0], argA[2]);
                        TAttribute tattrB = abdp.getAttributeByBlockName(argB[0], argB[2]);
                        if (tattrA.getType() != tattrB.getType())
                        if (tattrA.getType() == TAttribute.OTHER) {
                            if (!tattrA.getTypeOther().equals(tattrB.getTypeOther()))
                            List<TAttribute> types = abdp.getAttributesOfDataType(tattrA.getTypeOther());
                            int toBeFound = types.size();
                            boolean ko = false;
                            boolean weakKo = false;
                            boolean isNotProved = false;
                            boolean weakIsNotProved = false;
                            ProVerifQueryAuthResult result = new ProVerifQueryAuthResult(false, false);
                            for (TAttribute type : types) {
                                for (AvatarPragmaAuthenticity pragmaAuth : authResults.keySet()) {
                                    if (!pragmaAuth.getAttrA().getAttribute().getBlock().getName().equals(argA[0].replaceAll("\\.", "__"))
                                            || !pragmaAuth.getAttrB().getAttribute().getBlock().getName().equals(argB[0].replaceAll("\\.", "__"))
                                            || !pragmaAuth.getAttrA().getAttribute().getName().equals(argA[2] + "__" + type.getId())
                                            || !pragmaAuth.getAttrB().getAttribute().getName().equals(argB[2] + "__" + type.getId())
                                            || !pragmaAuth.getAttrA().getState().getName().equals(argA[1].replaceAll("\\.", "__"))
                                            || !pragmaAuth.getAttrB().getState().getName().equals(argB[1].replaceAll("\\.", "__")))
                                        continue;

                                    result = authResults.get(pragmaAuth);
                                    toBeFound--;
                                    if (result.isProved()) {
                                        if (!result.isSatisfied()) {
                                    } else {
                                    if (result.isWeakProved()) {
                                        if (!result.isWeakSatisfied()) {
                                    } else {
                                        weakIsNotProved = true;
                                    }

                                    break;
                                }
                            }

                            if (ko)
                                pragma.authStrongMap.put(prop, 2);
                            else if (toBeFound == 0) {
                                if (isNotProved)
                                    pragma.authStrongMap.put(prop, 3);
                                else
                                    pragma.authStrongMap.put(prop, 1);
                            }

                            if (weakKo)
                                pragma.authWeakMap.put(prop, 2);
                            else if (toBeFound == 0) {
                                if (weakIsNotProved)
                                    pragma.authWeakMap.put(prop, 3);
                                else
                                    pragma.authWeakMap.put(prop, 1);
                            }
                            ProVerifResultTrace trace = result.getTrace();
                            if (trace != null) {
                                pragma.pragmaTraceMap.put(prop, trace);
                            }
                            for (AvatarPragmaAuthenticity pragmaAuth : authResults.keySet()) {
                                if (!pragmaAuth.getAttrA().getAttribute().getBlock().getName().equals(argA[0].replaceAll("\\.", "__"))
                                        || !pragmaAuth.getAttrB().getAttribute().getBlock().getName().equals(argB[0].replaceAll("\\.", "__"))
                                        || !pragmaAuth.getAttrA().getAttribute().getName().equals(argA[2])
                                        || !pragmaAuth.getAttrB().getAttribute().getName().equals(argB[2])
                                        || !pragmaAuth.getAttrA().getState().getName().equals(argA[1].replaceAll("\\.", "__"))
                                        || !pragmaAuth.getAttrB().getState().getName().equals(argB[1].replaceAll("\\.", "__")))
                                    continue;

                                ProVerifQueryAuthResult result = authResults.get(pragmaAuth);

                                if (result.isProved()) {
                                    if (result.isSatisfied()) {
                                    } else {
                                } else {
                                if (result.isWeakProved()) {
                                    if (result.isWeakSatisfied()) {
                                    } else {
                                } else {
                                //Add ProVerif Result Trace to pragma
                                ProVerifResultTrace trace = pvoa.getResults().get(pragmaAuth).getTrace();
                                if (trace != null) {
                                    pragma.pragmaTraceMap.put(prop, trace);
                                }
Dominique Blouin's avatar
Dominique Blouin committed
    public List<String> getAllNonMappedAvatarBlockNames(String _name, ADDDiagramPanel _tadp, boolean ref, String name) {
        return abdp.getAllNonMappedAvatarBlockNames(_name, _tadp, ref, name);
    }

Dominique Blouin's avatar
Dominique Blouin committed
    public List<String> getAllNonMappedAvatarChannelNames(String _name, ADDDiagramPanel _tadp, boolean ref, String name) {
        return abdp.getAllNonMappedAvatarChannelNames(_name, _tadp);
    }
}