Просмотр исходного кода

Remove unfinished model frontend.

Timur Sağlam 4 лет назад
Родитель
Сommit
3095699f27

+ 0 - 19
jplag.frontend-utils/src/main/java/de/jplag/Language.java

@@ -1,7 +1,6 @@
 package de.jplag;
 package de.jplag;
 
 
 import java.io.File;
 import java.io.File;
-import java.util.List;
 
 
 /**
 /**
  * Common interface for all languages. Each language-front end must provide a concrete language implementation.
  * Common interface for all languages. Each language-front end must provide a concrete language implementation.
@@ -71,22 +70,4 @@ public interface Language {
         return "";
         return "";
     }
     }
 
 
-    /**
-     * By default, most frontends do not care about the order of the submissions.
-     * @return true, if this frontends does care about the order of submissions.
-     */
-    default boolean expectsSubmissionOrder() {
-        return false;
-    }
-
-    /**
-     * Re-orders the submissions if {@link Language#expectsSubmissionOrder()} returns true.
-     * @param submissionNames are root files of the submissions, meaning a file for single file submissions or a directory
-     * for multi-file submissions.
-     * @return the re-ordered submission files.
-     */
-    default List<File> customizeSubmissionOrder(List<File> submissionNames) {
-        return submissionNames;
-    }
-
 }
 }

+ 0 - 43
jplag.frontend.emf-model/pom.xml

@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-    <parent>
-        <groupId>de.jplag</groupId>
-        <artifactId>aggregator</artifactId>
-        <version>${revision}</version>
-    </parent>
-    <artifactId>emf-model</artifactId>
-
-    <dependencies>
-        <dependency>
-            <groupId>de.jplag</groupId>
-            <artifactId>frontend-utils</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>de.jplag</groupId>
-            <artifactId>emf-metamodel-dynamic</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>de.jplag</groupId>
-            <artifactId>frontend-testutils</artifactId>
-            <version>${revision}</version>
-            <type>test-jar</type>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.eclipse.emf</groupId>
-            <artifactId>org.eclipse.emf.ecore</artifactId>
-            <version>2.27.0</version>
-        </dependency>
-        <dependency>
-            <groupId>org.eclipse.emf</groupId>
-            <artifactId>org.eclipse.emf.common</artifactId>
-            <version>2.25.0</version>
-        </dependency>
-        <dependency>
-            <groupId>org.eclipse.emf</groupId>
-            <artifactId>org.eclipse.emf.ecore.xmi</artifactId>
-            <version>2.16.0</version>
-        </dependency>
-    </dependencies>
-</project>

+ 0 - 48
jplag.frontend.emf-model/src/main/java/de/jplag/emf/model/Language.java

@@ -1,48 +0,0 @@
-package de.jplag.emf.model;
-
-import java.io.File;
-import java.util.List;
-
-import de.jplag.emf.model.parser.DynamicModelParser;
-
-/**
- * Language for EMF metamodels from the Eclipse Modeling Framework (EMF). This language is based on a dynamically
- * created token set instead of a hand-picked one.
- * @author Timur Saglam
- */
-public class Language extends de.jplag.emf.dynamic.Language {
-    private static final String NAME = "EMF models (dynamically created token set)";
-    private static final String SHORT_NAME = "EMF models (dynamic)";
-
-    public Language() {
-        super(new DynamicModelParser());
-    }
-
-    @Override
-    public String[] suffixes() {
-        return new String[] {};
-    }
-
-    @Override
-    public String getName() {
-        return NAME;
-    }
-
-    @Override
-    public String getShortName() {
-        return SHORT_NAME;
-    }
-
-    @Override
-    public boolean expectsSubmissionOrder() {
-        return true;
-    }
-
-    @Override
-    public List<File> customizeSubmissionOrder(List<File> submissionNames) {
-        submissionNames.sort((File first, File second) -> {
-            return Boolean.compare(second.getName().endsWith(FILE_ENDING), first.getName().endsWith(FILE_ENDING));
-        });
-        return submissionNames;
-    }
-}

+ 0 - 59
jplag.frontend.emf-model/src/main/java/de/jplag/emf/model/parser/DynamicModelParser.java

@@ -1,59 +0,0 @@
-package de.jplag.emf.model.parser;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.EPackage;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import de.jplag.emf.dynamic.parser.DynamicEcoreParser;
-import de.jplag.emf.util.EMFUtil;
-
-/**
- * Parser for EMF metamodels based on dynamically created tokens.
- * @author Timur Saglam
- */
-public class DynamicModelParser extends DynamicEcoreParser {
-    private static final Logger logger = LoggerFactory.getLogger(DynamicModelParser.class.getSimpleName());
-    private static final List<EPackage> metapackages = new ArrayList<>();
-    private static final String ALL_EXTENSIONS = "*";
-
-    /**
-     * Creates the parser.
-     */
-    public DynamicModelParser() {
-        EMFUtil.registerModelExtension(ALL_EXTENSIONS);
-    }
-
-    @Override
-    protected void parseModelFile(String filePath) {
-        // implicit assumption: Metamodel gets parsed first!
-        if (filePath.endsWith(de.jplag.emf.Language.FILE_ENDING)) {
-            parseMetamodelFile(filePath);
-        } else {
-            if (metapackages.isEmpty()) {
-                logger.warn("Loading model instances without any metamodel!");
-            }
-            super.parseModelFile(filePath);
-        }
-    }
-
-    private void parseMetamodelFile(String filePath) {
-        metapackages.clear();
-        List<EObject> model = EMFUtil.loadModel(filePath);
-        if (model == null) {
-            errors++;
-        } else {
-            for (EObject object : model) {
-                if (object instanceof EPackage ePackage) {
-                    metapackages.add(ePackage);
-                } else {
-                    logger.error("Error, not a metapackage: " + object);
-                }
-            }
-            EMFUtil.registerEPackageURIs(metapackages);
-        }
-    }
-}

+ 0 - 120
jplag.frontend.emf-model/src/test/java/de/jplag/emf/model/BookStoreFactory.java

@@ -1,120 +0,0 @@
-package de.jplag.emf.model;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.List;
-
-import org.eclipse.emf.common.util.URI;
-import org.eclipse.emf.ecore.EAttribute;
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.emf.ecore.EFactory;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.EPackage;
-import org.eclipse.emf.ecore.EReference;
-import org.eclipse.emf.ecore.EStructuralFeature;
-import org.eclipse.emf.ecore.EcoreFactory;
-import org.eclipse.emf.ecore.EcorePackage;
-import org.eclipse.emf.ecore.resource.Resource;
-import org.eclipse.emf.ecore.resource.ResourceSet;
-import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
-import org.eclipse.emf.ecore.xmi.impl.XMLResourceFactoryImpl;
-
-public class BookStoreFactory {
-
-    private static final String MODEL_NAME = "bookStore.xml";
-    private static final String METAMODEL_NAME = "bookStore.ecore";
-
-    public static void generateAll(String filePath) {
-        File file = new File(filePath);
-        if (!file.exists()) {
-            file.mkdirs();
-        }
-        BookStoreFactory.createMetamodelAndModelInstance(filePath);
-    }
-
-    @SuppressWarnings({"unchecked", "rawtypes"})
-    private static void createMetamodelAndModelInstance(String baseBath) {
-        /*
-         * Create metamodel:
-         */
-        EcoreFactory theCoreFactory = EcoreFactory.eINSTANCE;
-
-        EClass bookStoreEClass = theCoreFactory.createEClass();
-        bookStoreEClass.setName("BookStore");
-
-        EClass bookEClass = theCoreFactory.createEClass();
-        bookEClass.setName("Book");
-
-        EPackage bookStoreEPackage = theCoreFactory.createEPackage();
-        bookStoreEPackage.setName("BookStorePackage");
-        bookStoreEPackage.setNsPrefix("bookStore");
-        bookStoreEPackage.setNsURI("http:///com.ibm.dynamic.example.bookstore.ecore");
-
-        EcorePackage theCorePackage = EcorePackage.eINSTANCE;
-
-        EAttribute bookStoreOwner = theCoreFactory.createEAttribute();
-        bookStoreOwner.setName("owner");
-        bookStoreOwner.setEType(theCorePackage.getEString());
-        EAttribute bookStoreLocation = theCoreFactory.createEAttribute();
-        bookStoreLocation.setName("location");
-        bookStoreLocation.setEType(theCorePackage.getEString());
-        EReference bookStore_Books = theCoreFactory.createEReference();
-        bookStore_Books.setName("books");
-        bookStore_Books.setEType(bookEClass);
-        bookStore_Books.setUpperBound(EStructuralFeature.UNBOUNDED_MULTIPLICITY);
-        bookStore_Books.setContainment(true);
-
-        EAttribute bookName = theCoreFactory.createEAttribute();
-        bookName.setName("name");
-        bookName.setEType(theCorePackage.getEString());
-        EAttribute bookISBN = theCoreFactory.createEAttribute();
-        bookISBN.setName("isbn");
-        bookISBN.setID(true);
-        bookISBN.setEType(theCorePackage.getEInt());
-
-        bookStoreEClass.getEStructuralFeatures().add(bookStoreOwner);
-        bookStoreEClass.getEStructuralFeatures().add(bookStoreLocation);
-        bookStoreEClass.getEStructuralFeatures().add(bookStore_Books);
-
-        bookEClass.getEStructuralFeatures().add(bookName);
-        bookEClass.getEStructuralFeatures().add(bookISBN);
-
-        bookStoreEPackage.getEClassifiers().add(bookStoreEClass);
-        bookStoreEPackage.getEClassifiers().add(bookEClass);
-
-        /*
-         * Create model instance:
-         */
-        EFactory bookFactoryInstance = bookStoreEPackage.getEFactoryInstance();
-
-        EObject bookObject = bookFactoryInstance.create(bookEClass);
-        EObject bookStoreObject = bookFactoryInstance.create(bookStoreEClass);
-
-        bookStoreObject.eSet(bookStoreOwner, "David Brown");
-        bookStoreObject.eSet(bookStoreLocation, "Street#12, Top Town, NY");
-        ((List) bookStoreObject.eGet(bookStore_Books)).add(bookObject);
-
-        bookObject.eSet(bookName, "Harry Potter and the Deathly Hallows");
-        bookObject.eSet(bookISBN, 157221);
-
-        /*
-         * Save model instance and metamodel:
-         */
-        persist(baseBath, bookStoreObject, MODEL_NAME, "*");
-        persist(baseBath, bookStoreEPackage, METAMODEL_NAME, EcorePackage.eNAME);
-    }
-
-    private static void persist(String baseBath, EObject eObject, String name, String extension) {
-        ResourceSet metaResourceSet = new ResourceSetImpl();
-        metaResourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put(extension, new XMLResourceFactoryImpl());
-        Resource metaResource = metaResourceSet.createResource(URI.createFileURI(baseBath + File.separator + name));
-        metaResource.getContents().add(eObject);
-
-        try {
-            metaResource.save(null);
-        } catch (IOException exception) {
-            exception.printStackTrace();
-        }
-    }
-
-}

+ 0 - 62
jplag.frontend.emf-model/src/test/java/de/jplag/emf/model/MinimalModelInstanceTest.java

@@ -1,62 +0,0 @@
-package de.jplag.emf.model;
-
-import static java.util.stream.Collectors.toList;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertNotEquals;
-
-import java.io.File;
-import java.nio.file.Path;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import de.jplag.TokenList;
-import de.jplag.TokenPrinter;
-import de.jplag.emf.dynamic.DynamicMetamodelTokenConstants;
-import de.jplag.testutils.FileUtil;
-
-class MinimalModelInstanceTest {
-    private final Logger logger = LoggerFactory.getLogger("JPlag-Test");
-
-    private static final Path BASE_PATH = Path.of("src", "test", "resources", "de", "jplag", "books");
-    private static final String[] TEST_SUBJECTS = {"bookStore.ecore", "bookStore.xml", "bookStore2.xml"};
-
-    private Language frontend;
-    private File baseDirectory;
-
-    @BeforeEach
-    public void setUp() {
-        frontend = new Language();
-        baseDirectory = BASE_PATH.toFile();
-        FileUtil.assertDirectory(baseDirectory, TEST_SUBJECTS);
-    }
-
-    @Test
-    void testBookStoreInstances() {
-        File baseFile = new File(BASE_PATH.toString());
-        var sortedFiles = frontend.customizeSubmissionOrder(new ArrayList<>(Arrays.stream(baseFile.listFiles()).toList()));
-        var testSubjects = sortedFiles.stream().map(File::getName).filter(it -> !it.endsWith(Language.VIEW_FILE_SUFFIX)).toArray(String[]::new);
-
-        TokenList result = frontend.parse(baseDirectory, testSubjects);
-        assertNotEquals(0, result.size());
-
-        List<String> treeViewFiles = Arrays.stream(testSubjects).map(it -> it + Language.VIEW_FILE_SUFFIX).toList();
-        logger.debug(TokenPrinter.printTokens(result, baseDirectory, treeViewFiles));
-        logger.info("Dynamic token set: " + DynamicMetamodelTokenConstants.getTokenStrings());
-        logger.info("Parsed tokens: " + result.allTokens().toString());
-
-        assertEquals(7, result.size());
-    }
-
-    @AfterEach
-    public void tearDown() {
-        FileUtil.clearFiles(new File(BASE_PATH.toString()), Language.VIEW_FILE_SUFFIX);
-    }
-
-}

+ 0 - 16
jplag.frontend.emf-model/src/test/resources/de/jplag/books/bookStore.ecore

@@ -1,16 +0,0 @@
-<?xml version="1.0" encoding="ASCII"?>
-<ecore:EPackage xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="BookStorePackage" nsURI="http:///com.ibm.dynamic.example.bookstore.ecore"
-    nsPrefix="bookStore">
-  <eClassifiers xsi:type="ecore:EClass" name="BookStore">
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="owner" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="location" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="books" upperBound="-1"
-        eType="#//Book" containment="true"/>
-  </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="Book">
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="isbn" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"
-        iD="true"/>
-  </eClassifiers>
-</ecore:EPackage>

+ 0 - 4
jplag.frontend.emf-model/src/test/resources/de/jplag/books/bookStore.xml

@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="ASCII"?>
-<bookStore:BookStore xmlns:bookStore="http:///com.ibm.dynamic.example.bookstore.ecore" owner="David Brown" location="Street#12, Top Town, NY">
-  <books name="Harry Potter and the Deathly Hallows" isbn="157221"/>
-</bookStore:BookStore>

+ 0 - 5
jplag.frontend.emf-model/src/test/resources/de/jplag/books/bookStore2.xml

@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="ASCII"?>
-<bookStore:BookStore xmlns:bookStore="http:///com.ibm.dynamic.example.bookstore.ecore" owner="David Brown" location="Street#12, Top Town, NY">
-  <books name="Parry Hotter and the Hallow Deathly" isbn="175112"/>
-  <books name="Harry Potter and the Deathly Hallows" isbn="157221"/>
-</bookStore:BookStore>

+ 0 - 8
jplag/src/main/java/de/jplag/SubmissionSetBuilder.java

@@ -1,7 +1,5 @@
 package de.jplag;
 package de.jplag;
 
 
-import static java.util.stream.Collectors.toList;
-
 import java.io.File;
 import java.io.File;
 import java.io.IOException;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.ArrayList;
@@ -78,12 +76,6 @@ public class SubmissionSetBuilder {
         // Merge everything in a submission set.
         // Merge everything in a submission set.
         List<Submission> submissions = new ArrayList<>(foundSubmissions.values());
         List<Submission> submissions = new ArrayList<>(foundSubmissions.values());
 
 
-        // Some languages expect a certain order, which is ensured here:
-        if (language.expectsSubmissionOrder()) {
-            List<File> rootFiles = foundSubmissions.values().stream().map(it -> it.getRoot()).collect(toList());
-            rootFiles = language.customizeSubmissionOrder(rootFiles);
-            submissions = new ArrayList<>(rootFiles.stream().map(it -> foundSubmissions.get(it)).collect(toList()));
-        }
         return new SubmissionSet(submissions, baseCodeSubmission.orElse(null), options);
         return new SubmissionSet(submissions, baseCodeSubmission.orElse(null), options);
     }
     }
 
 

+ 1 - 2
jplag/src/main/java/de/jplag/options/LanguageOption.java

@@ -19,8 +19,7 @@ public enum LanguageOption {
     TEXT("text", "de.jplag.text.Language"),
     TEXT("text", "de.jplag.text.Language"),
     SCHEME("scheme", "de.jplag.scheme.Language"),
     SCHEME("scheme", "de.jplag.scheme.Language"),
     EMF("emf-metamodel", "de.jplag.emf.Language"),
     EMF("emf-metamodel", "de.jplag.emf.Language"),
-    EMF_DYNAMIC("emf-metamodel-dynamic", "de.jplag.emf.dynamic.Language"),
-    EMF_MODEL("emf-model", "de.jplag.emf.model.Language");
+    EMF_DYNAMIC("emf-metamodel-dynamic", "de.jplag.emf.dynamic.Language");
 
 
     private final String classPath;
     private final String classPath;
     private final String displayName;
     private final String displayName;

+ 0 - 5
pom.xml

@@ -187,11 +187,6 @@
                 <artifactId>emf-metamodel-dynamic</artifactId>
                 <artifactId>emf-metamodel-dynamic</artifactId>
                 <version>${revision}</version>
                 <version>${revision}</version>
             </dependency>
             </dependency>
-            <dependency>
-                <groupId>de.jplag</groupId>
-                <artifactId>emf-model</artifactId>
-                <version>${revision}</version>
-            </dependency>
             <dependency>
             <dependency>
                 <groupId>de.jplag</groupId>
                 <groupId>de.jplag</groupId>
                 <artifactId>frontend-utils</artifactId>
                 <artifactId>frontend-utils</artifactId>