/***************************************************************************** * Copyright (c) 2014,2015 ASML Netherlands B.V. and others. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * ASML Netherlands B.V. - Initial API and implementation * *****************************************************************************/ package org.eclipse.m2m.internal.qvt.oml.tools.coverage.ui; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import org.eclipse.core.resources.IProject; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.EObject; import org.eclipse.m2m.internal.qvt.oml.expressions.Module; import org.eclipse.m2m.internal.qvt.oml.tools.coverage.common.CoverageData; import org.eclipse.m2m.internal.qvt.oml.tools.coverage.common.TransformationCoverageData; import org.eclipse.ocl.utilities.ASTNode; @SuppressWarnings("restriction") public class CoverageModel { Map<IProject, ProjectCoverageModel> projectModels = new HashMap<IProject, ProjectCoverageModel>(); public CoverageModel(CoverageData coverageData) { inflate(coverageData); } /** * The only method to deal with Data objects * * @param data */ private void inflate(CoverageData data) { Map<URI, TransformationCoverageModel> uriToTransModels = new HashMap<URI, TransformationCoverageModel>(); for (TransformationCoverageData transformationData : data.getData()) { TransformationCoverageModel transformationModel; // If we've already seen this transformation, add to that model // rather than create a new one URI uri = transformationData.getURI(); if (uriToTransModels.containsKey(uri)) { transformationModel = uriToTransModels.get(uri); } else { transformationModel = new TransformationCoverageModel(uri); } Module module = transformationModel.getModule(); if (module != null) { // Cycle through all module contents Iterator<EObject> it = module.eAllContents(); while (it.hasNext()) { EObject o = it.next(); if (o instanceof ASTNode) { ASTNode node = (ASTNode) o; if (TransformationCoverageData.isIncluded(node)) { NodeCoverageModel nodeModel = new NodeCoverageModel(node); if (transformationModel.containsNode(nodeModel)) { nodeModel = transformationModel.getNode(nodeModel); } // Check if node was touched if (transformationData.containsNode(node)) { nodeModel.setTouched(true); } transformationModel.addNode(nodeModel); } } } uriToTransModels.put(uri, transformationModel); } } // Now populate the projects (could probably be done more efficiently) for (TransformationCoverageModel transModel : uriToTransModels.values()) { IProject project = transModel.getProject(); ProjectCoverageModel projectModel; if (projectModels.containsKey(project)) { projectModel = projectModels.get(project); } else { projectModel = new ProjectCoverageModel(project); } projectModel.addTransformationModel(transModel); projectModels.put(project, projectModel); } } public ProjectCoverageModel[] getProjectModels() { return projectModels.values().toArray(new ProjectCoverageModel[projectModels.size()]); } }