/** * Copyright (c) 2012-2016 Marsha Chechik, Alessio Di Sandro, Michalis Famelis, * Rick Salay. * 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: * Alessio Di Sandro - Implementation. */ package edu.toronto.cs.se.modelepedia.models15.operator; import java.util.HashMap; import java.util.Map; import org.eclipse.jdt.annotation.NonNull; import edu.toronto.cs.se.mmint.MMINT; import edu.toronto.cs.se.mmint.MMINTException; import edu.toronto.cs.se.mmint.MIDTypeRegistry; import edu.toronto.cs.se.mmint.mid.GenericElement; import edu.toronto.cs.se.mmint.mid.MID; import edu.toronto.cs.se.mmint.mid.MIDLevel; import edu.toronto.cs.se.mmint.mid.Model; import edu.toronto.cs.se.mmint.mid.operator.impl.OperatorImpl; import edu.toronto.cs.se.mmint.mid.relationship.ModelRel; import edu.toronto.cs.se.mmint.mid.utils.FileUtils; import edu.toronto.cs.se.mmint.mid.utils.MIDRegistry; import edu.toronto.cs.se.modelepedia.classdiagram.ClassDiagram; import edu.toronto.cs.se.modelepedia.classdiagram.ClassDiagramPackage; import edu.toronto.cs.se.modelepedia.primitive.int_.Int; import edu.toronto.cs.se.modelepedia.primitive.int_.IntFactory; import edu.toronto.cs.se.modelepedia.primitive.int_.IntPackage; import edu.toronto.cs.se.modelepedia.models15_java.Package; public class CD2JavaCheck extends OperatorImpl { // input-output private final static @NonNull String IN_MODELREL = "cd2java"; private final static @NonNull String OUT_INT = "check"; // constants private final static @NonNull String CHECK_INT_SUFFIX = "_check"; private @NonNull Int check(ModelRel modelRel) throws MMINTException { int cdIndex, javaIndex; Model modelType = modelRel.getModelEndpoints().get(0).getTarget().getMetatype(); if (modelType == MIDTypeRegistry.getType(ClassDiagramPackage.eNS_URI)) { cdIndex = 0; javaIndex = 1; } else { cdIndex = 1; javaIndex = 0; } Model cdModel = modelRel.getModelEndpoints().get(cdIndex).getTarget(); Model javaModel = modelRel.getModelEndpoints().get(javaIndex).getTarget(); Int check = IntFactory.eINSTANCE.createInt(); ClassDiagram cd = (ClassDiagram) cdModel.getEMFInstanceRoot(); Package p = (Package) javaModel.getEMFInstanceRoot(); check.setValue(cd.getClasses().size() - p.getClasses().size()); return check; } @Override public Map<String, Model> run( Map<String, Model> inputsByName, Map<String, GenericElement> genericsByName, Map<String, MID> outputMIDsByName) throws Exception { // input ModelRel modelRel = (ModelRel) inputsByName.get(IN_MODELREL); MID instanceMID = outputMIDsByName.get(OUT_INT); // check classes connected by the rel Int check = check(modelRel); // output Model intModelType = MIDTypeRegistry.getType(IntPackage.eNS_URI); String checkModelUri = FileUtils.replaceLastSegmentInUri( MIDRegistry.getModelAndModelElementUris(modelRel, MIDLevel.INSTANCES)[0], modelRel.getName() + CHECK_INT_SUFFIX + MMINT.MODEL_FILEEXTENSION_SEPARATOR + intModelType.getFileExtension()); FileUtils.writeModelFile(check, checkModelUri, true); Model checkModel = intModelType.createInstanceAndEditor(checkModelUri, instanceMID); Map<String, Model> outputsByName = new HashMap<>(); outputsByName.put(OUT_INT, checkModel); return outputsByName; } }