| /******************************************************************************* |
| * Copyright (c) 2009, 2018 SAP AG and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v2.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v20.html |
| * |
| * Contributors: |
| * SAP AG - initial API and implementation |
| ******************************************************************************/ |
| package org.eclipse.ocl.examples.impactanalyzer.benchmark.preparation.notifications; |
| |
| import java.io.BufferedReader; |
| import java.io.File; |
| import java.io.IOException; |
| import java.io.InputStream; |
| import java.io.InputStreamReader; |
| import java.io.UnsupportedEncodingException; |
| import java.net.URL; |
| import java.net.URLDecoder; |
| import java.util.ArrayList; |
| import java.util.HashMap; |
| import java.util.List; |
| |
| import org.eclipse.emf.common.util.URI; |
| import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl; |
| import org.eclipse.emf.ecore.util.ECrossReferenceAdapter; |
| import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl; |
| import org.eclipse.ocl.examples.impactanalyzer.benchmark.preparation.model.ResourceWithSize; |
| import org.eclipse.ocl.examples.impactanalyzer.benchmark.preparation.model.XMIResourceWithSize; |
| |
| public class NotificationResourceLoader { |
| public static final String MODEL_FIXTURE_LOCATION = "fixtures/models/"; |
| public static final String EVENTTRACE_FIXTURE_LOCATION = "fixtures/eventtraces/"; |
| |
| public static ResourceWithSize loadModel(String path) { |
| String resourcePath = NotificationResourceLoader.MODEL_FIXTURE_LOCATION + path; |
| |
| ResourceSetImpl resultRS; |
| resultRS = new ResourceSetImpl(); |
| resultRS.getResourceFactoryRegistry().getExtensionToFactoryMap().put("xmi", new XMIResourceFactoryImpl()); |
| // TODO register ECrossReferenceAdapter only after model shrinking process has finished and before OCL evaluation starts |
| ECrossReferenceAdapter adapter = new ECrossReferenceAdapter(); |
| resultRS.eAdapters().add(adapter); |
| |
| InputStream fileStream = RealWorldReplayNotificationProducer.class.getResourceAsStream(resourcePath); |
| ResourceWithSize instanceResource = readResourceOutOfStream(fileStream, resultRS); |
| |
| return instanceResource; |
| } |
| |
| public static List<String> getFilenamesOfEventFixtures() { |
| return getFileListOfDirectory(EVENTTRACE_FIXTURE_LOCATION); |
| } |
| |
| public static List<String> getFilenamesOfModelFixture() { |
| return getFileListOfDirectory(MODEL_FIXTURE_LOCATION); |
| } |
| |
| private static List<String> getFileListOfDirectory(String directory) { |
| ArrayList<String> result = new ArrayList<String>(); |
| |
| URL url = NotificationResourceLoader.class.getResource(directory); |
| File folder; |
| try { |
| if (url.getPath().startsWith("file:")) { |
| folder = new File(URLDecoder.decode(url.getPath(), "UTF-8")); |
| } else { |
| folder = new File(url.getPath()); |
| } |
| } catch (UnsupportedEncodingException e) { |
| throw new RuntimeException(e); |
| } |
| if (folder.listFiles() != null) { |
| for (File file : folder.listFiles()) { |
| result.add(file.getName()); |
| } |
| } |
| |
| return result; |
| } |
| |
| public static List<RawNotification> loadTrace(String path) { |
| String resourcePath = NotificationResourceLoader.EVENTTRACE_FIXTURE_LOCATION + path; |
| |
| ArrayList<RawNotification> informationList = new ArrayList<RawNotification>(); |
| |
| InputStream traceInput = NotificationResourceLoader.class.getResourceAsStream(resourcePath); |
| InputStreamReader ireader = new InputStreamReader(traceInput); |
| BufferedReader reader = new BufferedReader(ireader); |
| |
| try { |
| while (reader.ready()) { |
| String newLine = reader.readLine(); |
| String[] splitOnOpenBracket = newLine.split("\\("); |
| String[] splitOnComma = splitOnOpenBracket[1].split("\\)")[0].split(","); |
| |
| HashMap<String, String> hashMap = new HashMap<String, String>(); |
| |
| for (String attributePair : splitOnComma) { |
| String[] attributePairSplitted = attributePair.split("="); |
| |
| hashMap.put(attributePairSplitted[0], attributePairSplitted[1]); |
| } |
| |
| informationList.add(new RawNotification(splitOnOpenBracket[0], hashMap)); |
| } |
| |
| } catch (IOException e) { |
| // TODO Auto-generated catch block |
| e.printStackTrace(); |
| } |
| |
| return informationList; |
| } |
| |
| private static ResourceWithSize readResourceOutOfStream(InputStream fileStream, ResourceSetImpl resultRS) { |
| ResourceWithSize instanceResource = null; |
| try { |
| instanceResource = new XMIResourceWithSize( |
| URI.createURI("http://org.eclipse.ocl.examples.impactanalyzer.benchmarks/test.xmi")); |
| resultRS.getResources().add(instanceResource); |
| instanceResource.load(fileStream, null); |
| } catch (IOException e1) { |
| // TODO Auto-generated catch block |
| e1.printStackTrace(); |
| } |
| return instanceResource; |
| } |
| |
| } |