package org.sample.junit.impl;
import java.util.ArrayList;
import java.util.List;
import com.modeliosoft.modelio.javadesigner.annotations.objid;
import org.modelio.metamodel.uml.infrastructure.Dependency;
import org.modelio.metamodel.uml.infrastructure.Element;
import org.modelio.metamodel.uml.statik.Class;
import org.modelio.metamodel.uml.statik.Package;
import org.modelio.metamodel.visitors.DefaultModelVisitor;
public class TestModelUpdater extends DefaultModelVisitor {
    @Override
    public Object visitPackage(Package obj) {
        List<Class> toDelete = new ArrayList<>();
        for (Class c : obj.getOwnedElement(Class.class)) {
            // Check all owned test cases
            if (c.isStereotyped("JUnit", "JUnit")) {
                boolean hasTestedClass = false;
                // Check that there is a link towards a tested class
                for (Dependency dep : c.getDependsOnDependency()) {
                    if (dep.isStereotyped("JUnit", "JUnitDependency")) {
                        hasTestedClass = true;
                    }
                }
                // No tested class means the test case must be deleted
                if (hasTestedClass == false) {
                    toDelete.add(c);
                }
            }
        }
        if (toDelete.isEmpty()) {
            return Boolean.FALSE;
        } else {
            // Delete orphan test cases
            for (Class c : toDelete) {
                c.delete();
            }
            return Boolean.TRUE;
        }
    }
    @Override
    public Object visitElement(Element obj) {
        return Boolean.FALSE;
    }
}