Построение DSM матрицы для Jar-файлов

189
01 марта 2022, 10:30

Мне нужно построить матрицу DSM-матрицу для Jar файлов (DSMForJars).

https://dsmweb.org/sequencing-a-dsm

https://www.uml-diagrams.org/artifact.html

Задание следующее: Для заданного классификатора (Classifier) мне нужно выдать атрифакт (Artifact) (jar-файл) в котором он содержится. Т.е. мне на вход дают классификатор, а я должен буду получить артифакт файла, в котором находится мой класс.

public static Artifact getArtifact(Classifier cls) {
    return null;
}

Собственно, сам класс, в котором находится данный метод:

public class DSM4Jars {
    static List<Artifact> jars = new ArrayList<>();
    public static DSM dsm = new DSM(jars);
    public static void load(Model model) {
        Consumer<? super Element> action = e -> jars.add((Artifact) e);
        UMLUtil.walkAll(model, e -> true, e -> e instanceof Artifact, action);
        dsm = new DSM(jars);
        dsm.buildJars();
    }
/**
 * Для заданного классификатора выдать атрифакт (jar-файл)
 * в котором он содержится.
 * 
 * @param cls - классификатор.
 * @return найденный артифакт или null
 */
/*
 * Мне на вход дают классификатор, а я должен буду получить артефакт файла, в котором находится мой класс. 
 * Классификатор - это общий предок для класса, интерфейса, и перечисления*/
    public static Artifact getArtifact(Classifier cls) {
        for(Artifact jar: jars)
        {
            ???
        }
        return null;
    }
    public static void dump(String dumpPath) {
        ...
    }
    public static void dumpArtifactPackages(String dumpPath) {
        ...
    }
}
Answer 1

В общем я сам решил задачу.

public static Artifact getArtifact(Classifier cls) {
    for(Artifact jar: jars){
        List<String> list_strPackages = jar.getManifestations()
                   .stream()
                   .map(Manifestation::getUtilizedElement)
                   .map(PackageableElement::getNearestPackage)
                   .distinct()
                   .map(UMLUtil::getJavaName)
                   .filter(x -> x.equals(UMLUtil.getJavaName(cls.getNearestPackage())))
                   .collect( Collectors.toList() );
        if(list_strPackages != null && !list_strPackages.isEmpty())
        {
            return jar;
        }
    }
    return null;
}
READ ALSO
Поделиться содержимым WebView в pdf

Поделиться содержимым WebView в pdf

У меня есть WebView, содержание которого я формирую из локального txt, даю ему необходимые настройкиВ принципе, по вот этой инструкции я формирую...

92
Заголовок spinner

Заголовок spinner

Такой вопрос: как сделать что бы заголовок spinner отличался от выбранного значения, те

89
Написание своего ColorPicker

Написание своего ColorPicker

Всем приветПишу приложение на android для управления LED-лампой и для этого возникла задача сделать Color Picker который будет регулировать теплый...

111
JavaFX Создание копии объекта

JavaFX Создание копии объекта

Имеется конструктор, который получает какой-либо объект наследуемый от Node, те

135