Commit f283adec authored by Daniel Honsel's avatar Daniel Honsel
Browse files

add xmi generation for testing purposes

parent 89006625
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -95,6 +95,10 @@ public class T3Q {
		TTCN3ResourceProvider resourceProvider = new TTCN3ResourceProvider(inputPaths, logger, activeProfile);
		resourceProvider.loadResources();
		resourceProvider.analyzeResources();

		// TODO: this should be a configurable option
		resourceProvider.createXMI(); // only for testing purposes

		resourceProvider.printStatistics();
	}

+65 −2
Original line number Diff line number Diff line
@@ -4,17 +4,24 @@ import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;

import org.apache.commons.io.FileUtils;
import org.apache.commons.io.filefilter.DirectoryFileFilter;
import org.apache.commons.io.filefilter.RegexFileFilter;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.resource.Resource.Diagnostic;
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
import org.eclipse.emf.ecore.util.Diagnostician;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
import org.eclipse.emf.ecore.xmi.impl.XMIResourceImpl;
import org.eclipse.xtext.resource.XtextResource;
import org.eclipse.xtext.resource.XtextResourceSet;
import org.eclipse.xtext.validation.FeatureBasedDiagnostic;
@@ -97,7 +104,7 @@ public class TTCN3ResourceProvider {

	public void analyzeResources() {
		for (Resource r : resourceSet.getResources()) {
			System.out.println("Analyzing  file: " + r.getURI().lastSegment() + " ...");
			System.out.println("Analyzing  file: " + r.getURI().devicePath().replaceFirst("///", "") + " ...");

			stopwatch.start();
			EcoreUtil.resolveAll(r);
@@ -204,4 +211,60 @@ public class TTCN3ResourceProvider {
			System.out.println('\t' + "Test Suite Modularization: " + TTCN3StatisticsProvider.getInstance().getCountModularization());
		}
	}
	
	public void createXMI() {
		for (Resource r : resourceSet.getResources()) {
			String extension = fileExtensionOrPath(r.getURI().devicePath(), true) + "m";
			storeResourceContents(r.getContents(), r.getURI().devicePath() + "m", extension);	
		}			
	}
	
	@SuppressWarnings({ "unchecked", "rawtypes" })
	private void storeResourceContents(EList<EObject> contents, String outputPath, String extension) {
		//TODO: duplicated from loadResourceFromXMI => move to a more appropriate location
		Resource.Factory.Registry reg = Resource.Factory.Registry.INSTANCE;
	    Map<String, Object> m = reg.getExtensionToFactoryMap();
		m.put(extension, new XMIResourceFactoryImpl());
		
	    ResourceSet resSet = new ResourceSetImpl();
		Resource outputResource = resSet.createResource(URI.createURI(outputPath));
	    outputResource.getContents().addAll(contents);
	    try {
	      Map options = new HashMap<>();
	      options.put(XMIResourceImpl.OPTION_ENCODING, "UTF-8");
//	      options.put(XMIResourceImpl.OPTION_PROCESS_DANGLING_HREF, XMIResourceImpl.OPTION_PROCESS_DANGLING_HREF_DISCARD);
	      outputResource.save(options);
	    } catch (IOException e) {
	      e.printStackTrace();
	    }
	}	
	
//	@SuppressWarnings({ "rawtypes", "unchecked" })
//	private Resource loadResourceFromXMI(String inputPath, String extension) {
//	    Resource.Factory.Registry reg = Resource.Factory.Registry.INSTANCE;
//	    Map<String, Object> m = reg.getExtensionToFactoryMap();
//		m.put(extension, new XMIResourceFactoryImpl());
//	    ResourceSet resSetIn = new ResourceSetImpl();
//	    Resource inputResource = resSetIn.createResource(URI.createURI(inputPath));
//	    try {
//	    	Map options = new HashMap<>();
//	    	options.put(XMIResourceImpl.OPTION_DEFER_IDREF_RESOLUTION, Boolean.TRUE);
////	    	options.put(XMIResourceImpl.OPTION_PROCESS_DANGLING_HREF, XMIResourceImpl.OPTION_PROCESS_DANGLING_HREF_DISCARD);
//			inputResource.load(options);
//		} catch (IOException e) {
//			e.printStackTrace();
//		}
//		return inputResource;
//	}
	
	private static String fileExtensionOrPath(String filename, boolean extension) {
		String[] res = filename.split("\\.");
		int size = res.length;
		
		if (extension) {
			return res[size-1];
		} else {
			return res[0];
		}
	}	
}